DRAFTThe sandbox is not live yet. Every example here was returned by the platform's code in a test run on 2026-10-28, priced with example fees: no fee amount in them is an SMP price. Paths and fields can change before launch. Live keys are issued only after our bank program is approved.Sandbox not live yet · examples from a test run on 2026-10-28 · example fees

Reference · 8 operations

Payouts

Payouts move your released balance to your bank account, net of any returns.

Sandboxhttps://sandbox.socialmatterspay.com
Livehttps://api.socialmatterspay.com
PUT /admin/v1/merchants/{id}/payout-schedule

SMP staff — set when a merchant is paid (the same call as PATCH)

SMP staff token

Host https://api.socialmatterspay.com · https://sandbox.socialmatterspay.com

daily (every Fed business day), weekly or biweekly on a weekday, monthly on the 1st, or hold (paid only when the merchant asks, with no fee). A payout day on a weekend or a Fed holiday goes out on the next Fed business day. Effective from the next daily payout run; the before and after are in the audit log. PUT is the same call.

Parameters

FieldNotes
id requiredpath · string—

Request body

FieldNotes
payout_schedule requiredenumone of daily, weekly, biweekly, monthly, hold
payout_weekdayintegerWeekly and biweekly only; Tuesday (2) when left out. 1 to 5
reason requiredstringup to 2000 characters
changed_bystringThe SMP staff member making the change. up to 200 characters
set_bystringAccepted in place of changed_by. up to 200 characters

Responses

StatusMeaning
200The schedule now in force
400Error — error shape and codes
401Error — error shape and codes
404Error — error shape and codes

Fields of data (200)

FieldNotes
objectstring = "payout_schedule"—
merchant_idstring—
payout_schedulestring—
payout_weekdayinteger—
payout_daystring—
next_payout_datestring | null (date)—
Example

Put a merchant on the Hold schedule (SMP staff)

PUT /admin/v1/merchants/a5fc4446-e0a0-4260-ac10-e06060393364/payout-schedule
curl -X PUT https://sandbox.socialmatterspay.com/admin/v1/merchants/a5fc4446-e0a0-4260-ac10-e06060393364/payout-schedule \
  -H 'Authorization: Bearer smp_staff_token' \
  -H 'Content-Type: application/json' \
  -d '{
  "payout_schedule": "hold",
  "reason": "The merchant asked to be paid only on request",
  "changed_by": "operations"
}'
Response · 200
HTTP 200
Cache-Control: no-store

{
  "data": {
    "object": "payout_schedule",
    "merchant_id": "a5fc4446-e0a0-4260-ac10-e06060393364",
    "payout_schedule": "hold",
    "payout_weekday": 2,
    "payout_day": "only when you ask (no fee)",
    "next_payout_date": null
  }
}
PATCH /admin/v1/merchants/{id}/payout-schedule

SMP staff — set when a merchant is paid, with the reason on record

SMP staff token

Host https://api.socialmatterspay.com · https://sandbox.socialmatterspay.com

daily (every Fed business day), weekly or biweekly on a weekday, monthly on the 1st, or hold (paid only when the merchant asks, with no fee). A payout day on a weekend or a Fed holiday goes out on the next Fed business day. Effective from the next daily payout run; the before and after are in the audit log. PUT is the same call.

Parameters

FieldNotes
id requiredpath · string—

Request body

FieldNotes
payout_schedule requiredenumone of daily, weekly, biweekly, monthly, hold
payout_weekdayintegerWeekly and biweekly only; Tuesday (2) when left out. 1 to 5
reason requiredstringup to 2000 characters
changed_bystringThe SMP staff member making the change. up to 200 characters
set_bystringAccepted in place of changed_by. up to 200 characters

Responses

StatusMeaning
200The schedule now in force
400Error — error shape and codes
401Error — error shape and codes
404Error — error shape and codes

Fields of data (200)

FieldNotes
objectstring = "payout_schedule"—
merchant_idstring—
payout_schedulestring—
payout_weekdayinteger—
payout_daystring—
next_payout_datestring | null (date)—
Example

Set a merchant's payout schedule (SMP staff)

PATCH /admin/v1/merchants/a5fc4446-e0a0-4260-ac10-e06060393364/payout-schedule
curl -X PATCH https://sandbox.socialmatterspay.com/admin/v1/merchants/a5fc4446-e0a0-4260-ac10-e06060393364/payout-schedule \
  -H 'Authorization: Bearer smp_staff_token' \
  -H 'Content-Type: application/json' \
  -d '{
  "payout_schedule": "weekly",
  "payout_weekday": 4,
  "reason": "The merchant asked for Thursday payouts",
  "changed_by": "operations"
}'
Response · 200
HTTP 200
Cache-Control: no-store

{
  "data": {
    "object": "payout_schedule",
    "merchant_id": "a5fc4446-e0a0-4260-ac10-e06060393364",
    "payout_schedule": "weekly",
    "payout_weekday": 4,
    "payout_day": "Thursday (UTC)",
    "next_payout_date": "2026-11-05"
  }
}
GET /admin/v1/merchants/{id}/early-payouts

SMP staff — whether "Pay me now" is on for a merchant, its fee, and every change with who made it

SMP staff token

Host https://api.socialmatterspay.com · https://sandbox.socialmatterspay.com

Parameters

FieldNotes
id requiredpath · string—

Responses

StatusMeaning
200The merchant's early payouts
401Error — error shape and codes
404Error — error shape and codes

Fields of data (200)

FieldNotes
objectstring = "merchant_early_payouts"—
merchant_idstring—
enabledboolean—
feeobject | nullThe payout.instant rule in force for the merchant; null when no such rule is active
6 child fields
codestring = "payout.instant"—
basisenumone of fixed, bps, bps_plus_fixed
bpsinteger | nullBasis points of the payout; null on a fixed rule
fixed_centsinteger | nullnull on a bps-only rule
min_centsinteger | null—
max_centsinteger | null—
historyarray of object
4 child fields
enabledboolean—
decided_bystring—
reasonstring—
atstring (date-time)—
changedboolean—
Example

"Pay me now" for a merchant, with every change (SMP staff)

GET /admin/v1/merchants/a5fc4446-e0a0-4260-ac10-e06060393364/early-payouts
curl https://sandbox.socialmatterspay.com/admin/v1/merchants/a5fc4446-e0a0-4260-ac10-e06060393364/early-payouts \
  -H 'Authorization: Bearer smp_staff_token'
Response · 200
HTTP 200
Cache-Control: no-store

{
  "data": {
    "object": "merchant_early_payouts",
    "merchant_id": "a5fc4446-e0a0-4260-ac10-e06060393364",
    "enabled": true,
    "fee": {
      "code": "payout.instant",
      "basis": "bps",
      "bps": 100,
      "fixed_cents": null,
      "min_cents": 25,
      "max_cents": null
    },
    "history": [
      {
        "enabled": true,
        "decided_by": "risk-ops",
        "reason": "A steady payment history",
        "at": "2026-10-28T00:24:38.626Z"
      }
    ]
  }
}
PUT /admin/v1/merchants/{id}/early-payouts

SMP staff — turn "Pay me now" on or off for one merchant

SMP staff token

Host https://api.socialmatterspay.com · https://sandbox.socialmatterspay.com

Only SMP staff switch it, per merchant. The switch and its record (who, why, when) are written together; the database refuses any other change of the switch. 201 when it changed, 200 when it already was so.

Parameters

FieldNotes
id requiredpath · string—

Request body

FieldNotes
enabled requiredboolean—
reason requiredstringup to 500 characters
decided_by requiredstringup to 200 characters

Responses

StatusMeaning
200Already so; nothing changed
201Changed
400Error — error shape and codes
401Error — error shape and codes
404Error — error shape and codes

Fields of data (200)

The same fields as under adminGetMerchantEarlyPayouts.

Example

Turn "Pay me now" on for a merchant (SMP staff)

PUT /admin/v1/merchants/a5fc4446-e0a0-4260-ac10-e06060393364/early-payouts
curl -X PUT https://sandbox.socialmatterspay.com/admin/v1/merchants/a5fc4446-e0a0-4260-ac10-e06060393364/early-payouts \
  -H 'Authorization: Bearer smp_staff_token' \
  -H 'Content-Type: application/json' \
  -d '{
  "enabled": true,
  "reason": "A steady payment history",
  "decided_by": "risk-ops"
}'
Response · 201
HTTP 201
Cache-Control: no-store

{
  "data": {
    "object": "merchant_early_payouts",
    "merchant_id": "a5fc4446-e0a0-4260-ac10-e06060393364",
    "enabled": true,
    "fee": {
      "code": "payout.instant",
      "basis": "bps",
      "bps": 100,
      "fixed_cents": null,
      "min_cents": 25,
      "max_cents": null
    },
    "history": [
      {
        "enabled": true,
        "decided_by": "risk-ops",
        "reason": "A steady payment history",
        "at": "2026-10-28T00:24:38.626Z"
      }
    ],
    "changed": true
  }
}
GET /v1/payouts

List payouts

Secret key

Host https://api.socialmatterspay.com · https://sandbox.socialmatterspay.com

Parameters

FieldNotes
limitquery · integer1 to 100. default 25
offsetquery · integerdefault 0
statusquery · stringone of pending, submitted, settled, failed, cancelled

Responses

StatusMeaning
200A page of payouts

Fields of each item of data (200)

FieldNotes
idstring—
objectstring = "payout"—
statusenumone of pending, submitted, settled, failed, cancelled
amount_centsinteger—
fee_centsinteger—
net_centsinteger—
returns_netted_centsinteger—
fees_netted_centsintegerFees assessed since the last payout (return fee, monthly fee) that this payout carried
fees_includedinteger—
methodenumone of ach_credit, fednow, rtp
triggerenumone of manual, scheduled
payments_includedinteger—
returns_includedinteger—
period_startstring (date-time)—
period_endstring (date-time)—
initiated_atstring (date-time)—
settled_atstring | null (date-time)—
failed_reasonstring | null—

Lists also return pagination: total, limit, offset, has_more.

Example

List payouts

GET /v1/payouts
curl https://sandbox.socialmatterspay.com/v1/payouts \
  -H 'Authorization: Bearer sk_sandbox_…'
Response · 200
HTTP 200
Cache-Control: no-store

{
  "data": [
    {
      "id": "7b6d615c-b239-44a0-b13d-fc2507da24ab",
      "object": "payout",
      "status": "settled",
      "amount_cents": 10964,
      "fee_cents": 110,
      "net_cents": 10854,
      "returns_netted_cents": 0,
      "fees_netted_cents": 370,
      "fees_included": 5,
      "method": "ach_credit",
      "trigger": "manual",
      "payments_included": 2,
      "returns_included": 0,
      "period_start": "2026-10-28T00:22:34.395Z",
      "period_end": "2026-10-28T00:24:38.631Z",
      "initiated_at": "2026-10-28T00:24:38.631Z",
      "settled_at": "2026-10-28T00:25:38.633Z",
      "failed_reason": null
    }
  ],
  "pagination": {
    "total": 1,
    "limit": 25,
    "offset": 0,
    "has_more": false
  }
}
GET /v1/payouts/settings

The payout schedule and the next payout day, whether "Pay me now" is on, its fee, and what one would send now

Secret key

Host https://api.socialmatterspay.com · https://sandbox.socialmatterspay.com

SMP staff set both, per merchant: the schedule (PATCH /admin/v1/merchants/{id}/payout-schedule) and early payouts ("Pay me now", POST /v1/payouts/trigger; PUT /admin/v1/merchants/{id}/early-payouts). The merchant reads them here and can change neither.

Responses

StatusMeaning
200Payout settings

Fields of data (200)

FieldNotes
objectstring = "payout_settings"—
payout_scheduleenumhold: paid only when the merchant asks (POST /v1/payouts/trigger), with no fee. one of daily, weekly, biweekly, monthly, hold
payout_weekdayintegerWeekly and biweekly: 1 = Monday … 5 = Friday; Tuesday (2) unless SMP staff set another. 1 to 5
payout_daystringThe schedule in words ("only when you ask (no fee)" on hold). A payout day that falls on a weekend or a Fed holiday goes out on the next Fed business day.
next_payout_datestring | null (date)The UTC day of the next scheduled payout run (14:00 UTC); null for a hold
early_payouts_enabledbooleanSet only by SMP staff (PUT /admin/v1/merchants/{id}/early-payouts)
early_payout_feeobject | nullThe payout.instant rule in force for this merchant; null on the Hold schedule, where a payout the merchant asks for carries no fee, or when no such rule is active
6 child fields
codestring = "payout.instant"—
basisenumone of fixed, bps, bps_plus_fixed
bpsinteger | nullBasis points of the payout; null on a fixed rule
fixed_centsinteger | nullnull on a bps-only rule
min_centsinteger | null—
max_centsinteger | null—
early_payout_quoteobjectWhat an early payout would send now, with the same fee calculation the payout charges
3 child fields
available_centsintegerThe payable balance (the merchant balance less funds still held)
fee_centsinteger—
net_centsintegerWhat would reach the merchant's bank
Example

Payout settings

GET /v1/payouts/settings
curl https://sandbox.socialmatterspay.com/v1/payouts/settings \
  -H 'Authorization: Bearer sk_sandbox_…'
Response · 200
HTTP 200
Cache-Control: no-store

{
  "data": {
    "object": "payout_settings",
    "payout_schedule": "weekly",
    "payout_weekday": 2,
    "payout_day": "Tuesday (UTC)",
    "next_payout_date": "2026-11-03",
    "early_payouts_enabled": false,
    "early_payout_fee": {
      "code": "payout.instant",
      "basis": "bps",
      "bps": 100,
      "fixed_cents": null,
      "min_cents": 25,
      "max_cents": null
    },
    "early_payout_quote": {
      "available_cents": 10964,
      "fee_cents": 110,
      "net_cents": 10854
    }
  }
}
POST /v1/payouts/trigger

An early payout of the payable balance now, less the early payout fee

Secret key Idempotency-Key required

Host https://api.socialmatterspay.com · https://sandbox.socialmatterspay.com

Pays the merchant balance less funds still held. Returns and fees booked since the last payout are already in that balance, so they come off this payout. Off until SMP staff turn "Pay me now" on for the merchant (422 early_payouts_off); it carries the payout.instant fee in force for the merchant (GET /v1/fees/schedule), taken from what is sent (fee_cents, net_cents) and charged once the bank accepts the credit. Refused (422 payout_held) while any payout hold is active, including one placed by reconciliation. Payments become paid_out when the bank settles the credit.

Parameters

FieldNotes
Idempotency-Key requiredheader · string1–255 characters. printable characters, no spaces; see Idempotency

Responses

StatusMeaning
200Payout (Payout)
201Payout (Payout)
403Error — error shape and codes
409Error — error shape and codes
422Error — error shape and codes
502Error — error shape and codes

Fields of data (200)

The same fields as under listPayouts.

Example

Pay out the available balance now

POST /v1/payouts/trigger
curl -X POST https://sandbox.socialmatterspay.com/v1/payouts/trigger \
  -H 'Idempotency-Key: payout_2026_10_25' \
  -H 'Authorization: Bearer sk_sandbox_…'
Response · 201
HTTP 201
Cache-Control: no-store

{
  "data": {
    "id": "7b6d615c-b239-44a0-b13d-fc2507da24ab",
    "object": "payout",
    "status": "submitted",
    "amount_cents": 10964,
    "fee_cents": 110,
    "net_cents": 10854,
    "returns_netted_cents": 0,
    "fees_netted_cents": 370,
    "fees_included": 5,
    "method": "ach_credit",
    "trigger": "manual",
    "payments_included": 2,
    "returns_included": 0,
    "period_start": "2026-10-28T00:22:34.395Z",
    "period_end": "2026-10-28T00:24:38.631Z",
    "initiated_at": "2026-10-28T00:24:38.631Z",
    "settled_at": null,
    "failed_reason": null
  }
}
GET /v1/payouts/{id}

Get a payout

Secret key

Host https://api.socialmatterspay.com · https://sandbox.socialmatterspay.com

Parameters

FieldNotes
id requiredpath · string—

Responses

StatusMeaning
200Payout (Payout)
404Error — error shape and codes

Fields of data (200)

The same fields as under listPayouts.

Example

Get a payout

GET /v1/payouts/7b6d615c-b239-44a0-b13d-fc2507da24ab
curl https://sandbox.socialmatterspay.com/v1/payouts/7b6d615c-b239-44a0-b13d-fc2507da24ab \
  -H 'Authorization: Bearer sk_sandbox_…'
Response · 200
HTTP 200
Cache-Control: no-store

{
  "data": {
    "id": "7b6d615c-b239-44a0-b13d-fc2507da24ab",
    "object": "payout",
    "status": "settled",
    "amount_cents": 10964,
    "fee_cents": 110,
    "net_cents": 10854,
    "returns_netted_cents": 0,
    "fees_netted_cents": 370,
    "fees_included": 5,
    "method": "ach_credit",
    "trigger": "manual",
    "payments_included": 2,
    "returns_included": 0,
    "period_start": "2026-10-28T00:22:34.395Z",
    "period_end": "2026-10-28T00:24:38.631Z",
    "initiated_at": "2026-10-28T00:24:38.631Z",
    "settled_at": "2026-10-28T00:25:38.633Z",
    "failed_reason": null
  }
}