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 · 11 operations

Dashboard: payouts and the payout bank

Getting paid: a payout on the Hold schedule, Pay me now, connecting the payout bank and the fee debit authorization.

Dashboardhttps://app.socialmatterspay.com
GET /portal/api/bank

The connected payout bank (name and last four), the ways to connect one, and SMP's ACH Company ID

Dashboard session

Host https://app.socialmatterspay.com

Responses

StatusMeaning
200OK
401Error — error shape and codes

Fields of data (200)

FieldNotes
objectstring = "payout_bank"—
connectionobject | nullThe live payout bank connection; null when none
8 child fields
objectstring = "payout_bank_connection"—
idstring—
link_methodenumone of sandbox, plaid
bank_namestring—
account_last4string—
connected_atstring (date-time)—
connected_emailstringThe dashboard login that connected the bank
authorizationobject | nullThe debit authorization signed for this account
15 child fields
idstring—
objectstring = "fee_debit_authorization"—
statusenumone of in_force, revoked
entry_codeenumone of CCD, PPD
authorization_textstring—
text_sha256string—
account_last4string—
account_typeenumone of checking, savings
account_holder_namestring—
signer_namestring—
signer_titlestring | null—
accepted_atstring (date-time)—
revoked_atstring | null (date-time)—
revoked_reasonstring | null—
retain_untilstring | null (date-time)Two years after it ended
fee_debit_authorizationobject | nullThe debit authorization in force Its fields are listed under portalPayoutBank · connection.authorization.
payout_account_on_fileboolean—
methodsarray of enumThe ways a bank can be connected here; sandbox only outside production. one of sandbox, plaid
ach_company_idstring | nullSMP's ACH company identification, 10 characters, once the bank has assigned it
environmentenumone of production, sandbox
Example

The payout bank account

GET /portal/api/bank
curl https://app.socialmatterspay.com/portal/api/bank \
  -H 'Authorization: Bearer portal_session_token'
Response · 200
HTTP 200
Cache-Control: no-store

{
  "data": {
    "object": "payout_bank",
    "connection": null,
    "fee_debit_authorization": null,
    "payout_account_on_file": true,
    "methods": [
      "sandbox"
    ],
    "ach_company_id": null,
    "environment": "sandbox"
  }
}
POST /portal/api/bank/link-token

A Plaid Link token for connecting the payout bank

Dashboard session

Host https://app.socialmatterspay.com

Responses

StatusMeaning
201OK
401Error — error shape and codes
502Error — error shape and codes
503Error — error shape and codes

Fields of data (201)

FieldNotes
objectstring = "link_token"—
link_tokenstringA short-lived token for the Plaid Link window
expirationstringWhen the token expires, as Plaid sends it
Example

status 503 in this build: Plaid keys are not configured.

Start a Plaid bank sign-in for the payout account

POST /portal/api/bank/link-token
curl -X POST https://app.socialmatterspay.com/portal/api/bank/link-token \
  -H 'Authorization: Bearer portal_session_token'
Response · 503
HTTP 503
Cache-Control: no-store

{
  "error": "plaid_not_configured",
  "message": "Connecting a bank through Plaid is not available here yet"
}
POST /portal/api/bank/intents

Resolve the account (Plaid or the sandbox test bank) and fix the debit authorization words

Dashboard session

Host https://app.socialmatterspay.com

Request body

FieldNotes
method requiredenumone of sandbox, plaid
public_tokenstringPlaid Link's public token (method plaid)
account_idstringThe Plaid account picked in Link (method plaid)

Responses

StatusMeaning
201OK
400Error — error shape and codes
401Error — error shape and codes
422Error — error shape and codes
502Error — error shape and codes
503Error — error shape and codes

Fields of data (201)

FieldNotes
objectstring = "bank_link_intent"—
idstring—
link_methodenumone of sandbox, plaid
bank_namestring—
account_last4string—
account_holder_namestring—
entry_codeenumThe dashboard always writes CCD, a business account. one of CCD, PPD
authorization_textstringThe exact words the signer must read and accept
text_sha256stringSHA-256 of authorization_text; send it back with the signature
expires_atstring (date-time)30 minutes after it was made
suggested_signerstring | nullThe owner name on the application, to fill in the signer field
Example

Change the payout bank: the exact words the signer will accept

POST /portal/api/bank/intents
curl -X POST https://app.socialmatterspay.com/portal/api/bank/intents \
  -H 'Authorization: Bearer portal_session_token' \
  -H 'Content-Type: application/json' \
  -d '{
  "method": "sandbox"
}'
Response · 201
HTTP 201
Cache-Control: no-store

{
  "data": {
    "object": "bank_link_intent",
    "id": "c6ad7614-843e-4539-b971-f9a8bef0a0a4",
    "link_method": "sandbox",
    "bank_name": "Sandbox test bank",
    "account_last4": "9606",
    "account_holder_name": "Northwind Supply LLC",
    "entry_code": "CCD",
    "authorization_text": "Northwind Supply LLC authorizes Social Matter Payments LLC to initiate ACH debit entries (CCD) to the business bank account ending in 9606 for fees and other amounts Northwind Supply LLC owes Social Matter Payments LLC under the merchant agreement that its payouts from Social Matter Payments LLC do not cover. The amount of each debit appears on Northwind Supply LLC's statement before the debit is made. This authorization stays in effect until Social Matter Payments LLC receives written notice of revocation at work@socialmatters.pro in time to act on it. Revoking it does not cancel amounts already owed.",
    "text_sha256": "18ec3169cae966fd44b1b70991195ab95c95db2f38885f48b8115220f24ceb56",
    "expires_at": "2026-10-28T00:53:01.749Z",
    "suggested_signer": "Jordan Rivera"
  }
}
GET /portal/api/bank/intents/{id}

An open bank connection intent: the account and the exact authorization words, until it is confirmed or expires

Dashboard session

Host https://app.socialmatterspay.com

Parameters

FieldNotes
id requiredpath · string—

Responses

StatusMeaning
200OK
401Error — error shape and codes
404Error — error shape and codes
409Error — error shape and codes
410Error — error shape and codes

Fields of data (200)

FieldNotes
objectstring = "bank_link_intent"—
idstring—
link_methodenumone of sandbox, plaid
bank_namestring—
account_last4string—
account_holder_namestring—
entry_codeenumThe dashboard always writes CCD, a business account. one of CCD, PPD
authorization_textstringThe exact words the signer must read and accept
text_sha256stringSHA-256 of authorization_text; send it back with the signature
expires_atstring (date-time)30 minutes after it was made
Example

The same words again (a reload of the review step)

GET /portal/api/bank/intents/c6ad7614-843e-4539-b971-f9a8bef0a0a4
curl https://app.socialmatterspay.com/portal/api/bank/intents/c6ad7614-843e-4539-b971-f9a8bef0a0a4 \
  -H 'Authorization: Bearer portal_session_token'
Response · 200
HTTP 200
Cache-Control: no-store

{
  "data": {
    "object": "bank_link_intent",
    "id": "c6ad7614-843e-4539-b971-f9a8bef0a0a4",
    "link_method": "sandbox",
    "bank_name": "Sandbox test bank",
    "account_last4": "9606",
    "account_holder_name": "Northwind Supply LLC",
    "entry_code": "CCD",
    "authorization_text": "Northwind Supply LLC authorizes Social Matter Payments LLC to initiate ACH debit entries (CCD) to the business bank account ending in 9606 for fees and other amounts Northwind Supply LLC owes Social Matter Payments LLC under the merchant agreement that its payouts from Social Matter Payments LLC do not cover. The amount of each debit appears on Northwind Supply LLC's statement before the debit is made. This authorization stays in effect until Social Matter Payments LLC receives written notice of revocation at work@socialmatters.pro in time to act on it. Revoking it does not cancel amounts already owed.",
    "text_sha256": "18ec3169cae966fd44b1b70991195ab95c95db2f38885f48b8115220f24ceb56",
    "expires_at": "2026-10-28T00:53:01.749Z"
  }
}
POST /portal/api/bank/intents/{id}/confirm

Agree to the exact words and make the bank the payout account

Dashboard session

Host https://app.socialmatterspay.com

Parameters

FieldNotes
id requiredpath · string—

Request body

FieldNotes
acceptedboolean = trueBoth boxes ticked: the signer read and signs the words (not needed for an agent)
signer_namestring—
signer_titlestring—
text_sha256stringSHA-256 of the authorization words shown (not needed for an agent)
password requiredstringThe login's password, re-entered

Responses

StatusMeaning
201OK
400Error — error shape and codes
401Error — error shape and codes
403Error — error shape and codes
404Error — error shape and codes
409Error — error shape and codes
410Error — error shape and codes
429Error — error shape and codes

Fields of data (201)

The same fields as under portalPayoutBank · connection.

Example

Sign them with the password: the new payout account and its debit authorization

POST /portal/api/bank/intents/c6ad7614-843e-4539-b971-f9a8bef0a0a4/confirm
curl -X POST https://app.socialmatterspay.com/portal/api/bank/intents/c6ad7614-843e-4539-b971-f9a8bef0a0a4/confirm \
  -H 'Authorization: Bearer portal_session_token' \
  -H 'Content-Type: application/json' \
  -d '{
  "accepted": true,
  "signer_name": "Jordan Reyes",
  "signer_title": "Owner",
  "text_sha256": "18ec3169cae966fd44b1b70991195ab95c95db2f38885f48b8115220f24ceb56",
  "password": "correct horse battery staple"
}'
Response · 201
HTTP 201
Cache-Control: no-store

{
  "data": {
    "object": "payout_bank_connection",
    "id": "26530b26-8564-46e9-851f-57bad56f9312",
    "link_method": "sandbox",
    "bank_name": "Sandbox test bank",
    "account_last4": "9606",
    "connected_at": "2026-10-28T00:23:01.789Z",
    "connected_email": "owner@northwind.example",
    "authorization": {
      "id": "ada_f30688a0-17dc-4c8f-8252-18e29c40b12c",
      "object": "fee_debit_authorization",
      "status": "in_force",
      "entry_code": "CCD",
      "authorization_text": "Northwind Supply LLC authorizes Social Matter Payments LLC to initiate ACH debit entries (CCD) to the business bank account ending in 9606 for fees and other amounts Northwind Supply LLC owes Social Matter Payments LLC under the merchant agreement that its payouts from Social Matter Payments LLC do not cover. The amount of each debit appears on Northwind Supply LLC's statement before the debit is made. This authorization stays in effect until Social Matter Payments LLC receives written notice of revocation at work@socialmatters.pro in time to act on it. Revoking it does not cancel amounts already owed.",
      "text_sha256": "18ec3169cae966fd44b1b70991195ab95c95db2f38885f48b8115220f24ceb56",
      "account_last4": "9606",
      "account_type": "checking",
      "account_holder_name": "Northwind Supply LLC",
      "signer_name": "Jordan Reyes",
      "signer_title": "Owner",
      "accepted_at": "2026-10-28T00:23:01.789Z",
      "revoked_at": null,
      "revoked_reason": null,
      "retain_until": null
    }
  }
}
GET /portal/api/payout-request

Asking for a payout on the Hold schedule: whether it is open, what is available and the fee (none on a Hold payout)

Dashboard session

Host https://app.socialmatterspay.com

Responses

StatusMeaning
200OK
401Error — error shape and codes

Fields of data (200)

FieldNotes
objectstring = "payout_request"—
enabledbooleanWhether the feature is on for this account
available_centsintegerThe payable balance now. Only when enabled
feenullA payout request has no fee, so this is always null. Only when enabled
fee_centsintegerOnly when enabled
net_centsintegerWhat would reach the bank. Only when enabled
payout_holdobjectOnly when enabled. A payout request always reports false here: SMP's engine does not send a hold for it
1 child field
activebooleanA payout hold is in force
Example

On the Hold schedule: what a payout would send now

GET /portal/api/payout-request
curl https://app.socialmatterspay.com/portal/api/payout-request \
  -H 'Authorization: Bearer portal_session_token'
Response · 200
HTTP 200
Cache-Control: no-store

{
  "data": {
    "object": "payout_request",
    "enabled": true,
    "available_cents": 8705,
    "fee": null,
    "fee_cents": 0,
    "net_cents": 8705,
    "payout_hold": {
      "active": false
    }
  }
}
POST /portal/api/payout-request

Ask for a payout of the available balance (Hold schedule); the engine pays it on the next payout run

Dashboard session

Host https://app.socialmatterspay.com

Request body

FieldNotes
amount_cents requiredintegerat least 1

Responses

StatusMeaning
201The payout asked for
400Error — error shape and codes
401Error — error shape and codes
403Error — error shape and codes
409Error — error shape and codes

Fields of data (201)

FieldNotes
objectstring = "payout_request"—
payout_idstring—
amount_centsinteger—
fee_centsinteger—
net_centsintegerWhat reaches the bank
statusenumone of pending, submitted, settled, failed, cancelled
Example

Ask for that payout

POST /portal/api/payout-request
curl -X POST https://app.socialmatterspay.com/portal/api/payout-request \
  -H 'Authorization: Bearer portal_session_token' \
  -H 'Content-Type: application/json' \
  -d '{
  "amount_cents": 8705
}'
Response · 201
HTTP 201
Cache-Control: no-store

{
  "data": {
    "object": "payout_request",
    "payout_id": "7e749e05-48d2-4bb5-91e4-0b1a0c2d4434",
    "amount_cents": 8705,
    "fee_cents": 0,
    "net_cents": 8705,
    "status": "submitted"
  }
}
GET /portal/api/early-payout

Pay me now: whether SMP turned it on for this account, and the quote: the payable balance, the payout.instant fee on it, and what would arrive

Dashboard session

Host https://app.socialmatterspay.com

Responses

StatusMeaning
200OK
401Error — error shape and codes

Fields of data (200)

FieldNotes
objectstring = "early_payout"—
enabledbooleanWhether the feature is on for this account
available_centsintegerThe payable balance now. Only when enabled
feeobject | nullThe price in force; null when none applies. Always null for a payout request, which has no fee. Only when enabled
6 child fields
codestring = "payout.instant"—
basisenumone of fixed, bps, bps_plus_fixed
bpsinteger | null—
fixed_centsinteger | null—
min_centsinteger | null—
max_centsinteger | null—
fee_centsintegerOnly when enabled
net_centsintegerWhat would reach the bank. Only when enabled
payout_holdobjectOnly when enabled. A payout request always reports false here: SMP's engine does not send a hold for it
1 child field
activebooleanA payout hold is in force
Example

"Pay me now": what it would send, and its fee

GET /portal/api/early-payout
curl https://app.socialmatterspay.com/portal/api/early-payout \
  -H 'Authorization: Bearer portal_session_token'
Response · 200
HTTP 200
Cache-Control: no-store

{
  "data": {
    "object": "early_payout",
    "enabled": true,
    "available_cents": 16401,
    "fee": null,
    "fee_cents": 0,
    "net_cents": 16401,
    "payout_hold": {
      "active": false
    }
  }
}
POST /portal/api/early-payout

Pay me now: request the quoted early payout

Dashboard session

Host https://app.socialmatterspay.com

Request body

FieldNotes
amount_cents requiredinteger—
quoted_fee_cents requiredinteger—

Responses

StatusMeaning
201OK
400Error — error shape and codes
401Error — error shape and codes
403Error — error shape and codes
404Error — error shape and codes
409Error — error shape and codes
502Error — error shape and codes

Fields of data (201)

FieldNotes
objectstring = "early_payout_request"—
payout_idstring—
amount_centsinteger—
fee_centsinteger—
net_centsintegerWhat reaches the bank
statusenumone of pending, submitted, settled, failed, cancelled
Example

"Pay me now" at the amount and fee shown

POST /portal/api/early-payout
curl -X POST https://app.socialmatterspay.com/portal/api/early-payout \
  -H 'Authorization: Bearer portal_session_token' \
  -H 'Content-Type: application/json' \
  -d '{
  "amount_cents": 16401,
  "quoted_fee_cents": 0
}'
Response · 201
HTTP 201
Cache-Control: no-store

{
  "data": {
    "object": "early_payout_request",
    "payout_id": "29b2907e-e9aa-418e-8870-101e49774c88",
    "amount_cents": 16401,
    "fee_cents": 0,
    "net_cents": 16401,
    "status": "submitted"
  }
}
GET /portal/api/fee-debit-authorization

The exact words authorizing SMP to debit the payout account on file for what payouts don't cover, their SHA-256, and the authorization in force

Dashboard session

Host https://app.socialmatterspay.com

Responses

StatusMeaning
200OK
401Error — error shape and codes
502Error — error shape and codes

Fields of data (200)

FieldNotes
objectstring = "fee_debit_terms"—
authorizationobject | nullThe authorization in force; null when none is signed Its fields are listed under portalPayoutBank · connection.authorization.
entry_codestring = "CCD"—
account_last4stringThe payout account the words name
account_holder_namestring—
authorization_textstringThe exact words to show the signer
text_sha256stringSHA-256 of authorization_text; send it back with the signature
closedboolean = true—
no_payout_accountboolean = true—
Example

The fee debit authorization: the words, and the one in force

GET /portal/api/fee-debit-authorization
curl https://app.socialmatterspay.com/portal/api/fee-debit-authorization \
  -H 'Authorization: Bearer portal_session_token'
Response · 200
HTTP 200
Cache-Control: no-store

{
  "data": {
    "object": "fee_debit_terms",
    "entry_code": "CCD",
    "account_last4": "9606",
    "account_holder_name": "Northwind Supply LLC",
    "authorization_text": "Northwind Supply LLC authorizes Social Matter Payments LLC to initiate ACH debit entries (CCD) to the business bank account ending in 9606 for fees and other amounts Northwind Supply LLC owes Social Matter Payments LLC under the merchant agreement that its payouts from Social Matter Payments LLC do not cover. The amount of each debit appears on Northwind Supply LLC's statement before the debit is made. This authorization stays in effect until Social Matter Payments LLC receives written notice of revocation at work@socialmatters.pro in time to act on it. Revoking it does not cancel amounts already owed.",
    "text_sha256": "18ec3169cae966fd44b1b70991195ab95c95db2f38885f48b8115220f24ceb56",
    "authorization": {
      "id": "ada_f30688a0-17dc-4c8f-8252-18e29c40b12c",
      "object": "fee_debit_authorization",
      "status": "in_force",
      "entry_code": "CCD",
      "authorization_text": "Northwind Supply LLC authorizes Social Matter Payments LLC to initiate ACH debit entries (CCD) to the business bank account ending in 9606 for fees and other amounts Northwind Supply LLC owes Social Matter Payments LLC under the merchant agreement that its payouts from Social Matter Payments LLC do not cover. The amount of each debit appears on Northwind Supply LLC's statement before the debit is made. This authorization stays in effect until Social Matter Payments LLC receives written notice of revocation at work@socialmatters.pro in time to act on it. Revoking it does not cancel amounts already owed.",
      "text_sha256": "18ec3169cae966fd44b1b70991195ab95c95db2f38885f48b8115220f24ceb56",
      "account_last4": "9606",
      "account_type": "checking",
      "account_holder_name": "Northwind Supply LLC",
      "signer_name": "Jordan Reyes",
      "signer_title": "Owner",
      "accepted_at": "2026-10-28T00:23:01.789Z",
      "revoked_at": null,
      "revoked_reason": null,
      "retain_until": null
    }
  }
}
PUT /portal/api/fee-debit-authorization

Sign those words (accepted, the signer's name, the SHA-256 of the words shown); it replaces the one in force

Dashboard session

Host https://app.socialmatterspay.com

Request body

FieldNotes
accepted requiredboolean = true—
signer_name requiredstring—
signer_titlestring—
text_sha256 requiredstringpattern ^[0-9a-f]{64}$

Responses

StatusMeaning
201OK
400Error — error shape and codes
401Error — error shape and codes
403Error — error shape and codes
409Error — error shape and codes
422Error — error shape and codes

Fields of data (201)

The same fields as under portalPayoutBank · connection.authorization.

Example

Sign it

PUT /portal/api/fee-debit-authorization
curl -X PUT https://app.socialmatterspay.com/portal/api/fee-debit-authorization \
  -H 'Authorization: Bearer portal_session_token' \
  -H 'Content-Type: application/json' \
  -d '{
  "accepted": true,
  "signer_name": "Jordan Reyes",
  "signer_title": "Owner",
  "text_sha256": "18ec3169cae966fd44b1b70991195ab95c95db2f38885f48b8115220f24ceb56"
}'
Response · 201
HTTP 201
Cache-Control: no-store

{
  "data": {
    "id": "ada_4130e2c7-d971-4a00-b2e8-267964a246d7",
    "object": "fee_debit_authorization",
    "status": "in_force",
    "entry_code": "CCD",
    "authorization_text": "Northwind Supply LLC authorizes Social Matter Payments LLC to initiate ACH debit entries (CCD) to the business bank account ending in 9606 for fees and other amounts Northwind Supply LLC owes Social Matter Payments LLC under the merchant agreement that its payouts from Social Matter Payments LLC do not cover. The amount of each debit appears on Northwind Supply LLC's statement before the debit is made. This authorization stays in effect until Social Matter Payments LLC receives written notice of revocation at work@socialmatters.pro in time to act on it. Revoking it does not cancel amounts already owed.",
    "text_sha256": "18ec3169cae966fd44b1b70991195ab95c95db2f38885f48b8115220f24ceb56",
    "account_last4": "9606",
    "account_type": "checking",
    "account_holder_name": "Northwind Supply LLC",
    "signer_name": "Jordan Reyes",
    "signer_title": "Owner",
    "accepted_at": "2026-11-04T03:01:24.965Z",
    "revoked_at": null,
    "revoked_reason": null,
    "retain_until": null
  }
}