GET /portal/api/bank
The connected payout bank (name and last four), the ways to connect one, and SMP's ACH Company ID
Host https://app.socialmatterspay.com
Responses
| Status | Meaning |
|---|---|
200 | OK |
401 | Error — error shape and codes |
Fields of data (200)
| Field | Notes | ||||||||||||||||||||||||||||||||||||||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
objectstring = "payout_bank" | — | ||||||||||||||||||||||||||||||||||||||||||||||
connectionobject | null | The live payout bank connection; null when none8 child fields
| ||||||||||||||||||||||||||||||||||||||||||||||
fee_debit_authorizationobject | null | The debit authorization in force Its fields are listed under portalPayoutBank · connection.authorization. | ||||||||||||||||||||||||||||||||||||||||||||||
payout_account_on_fileboolean | — | ||||||||||||||||||||||||||||||||||||||||||||||
methodsarray of enum | The ways a bank can be connected here; sandbox only outside production. one of sandbox, plaid | ||||||||||||||||||||||||||||||||||||||||||||||
ach_company_idstring | null | SMP's ACH company identification, 10 characters, once the bank has assigned it | ||||||||||||||||||||||||||||||||||||||||||||||
environmentenum | one of production, sandbox |
Example
The payout bank account
curl https://app.socialmatterspay.com/portal/api/bank \
-H 'Authorization: Bearer portal_session_token'
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
Host https://app.socialmatterspay.com
Responses
| Status | Meaning |
|---|---|
201 | OK |
401 | Error — error shape and codes |
502 | Error — error shape and codes |
503 | Error — error shape and codes |
Fields of data (201)
| Field | Notes |
|---|---|
objectstring = "link_token" | — |
link_tokenstring | A short-lived token for the Plaid Link window |
expirationstring | When 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
curl -X POST https://app.socialmatterspay.com/portal/api/bank/link-token \
-H 'Authorization: Bearer portal_session_token'
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
Host https://app.socialmatterspay.com
Request body
| Field | Notes |
|---|---|
method requiredenum | one of sandbox, plaid |
public_tokenstring | Plaid Link's public token (method plaid) |
account_idstring | The Plaid account picked in Link (method plaid) |
Responses
| Status | Meaning |
|---|---|
201 | OK |
400 | Error — error shape and codes |
401 | Error — error shape and codes |
422 | Error — error shape and codes |
502 | Error — error shape and codes |
503 | Error — error shape and codes |
Fields of data (201)
| Field | Notes |
|---|---|
objectstring = "bank_link_intent" | — |
idstring | — |
link_methodenum | one of sandbox, plaid |
bank_namestring | — |
account_last4string | — |
account_holder_namestring | — |
entry_codeenum | The dashboard always writes CCD, a business account. one of CCD, PPD |
authorization_textstring | The exact words the signer must read and accept |
text_sha256string | SHA-256 of authorization_text; send it back with the signature |
expires_atstring (date-time) | 30 minutes after it was made |
suggested_signerstring | null | The owner name on the application, to fill in the signer field |
Example
Change the payout bank: the exact words the signer will accept
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"
}'
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
Host https://app.socialmatterspay.com
Parameters
| Field | Notes |
|---|---|
id requiredpath · string | — |
Responses
| Status | Meaning |
|---|---|
200 | OK |
401 | Error — error shape and codes |
404 | Error — error shape and codes |
409 | Error — error shape and codes |
410 | Error — error shape and codes |
Fields of data (200)
| Field | Notes |
|---|---|
objectstring = "bank_link_intent" | — |
idstring | — |
link_methodenum | one of sandbox, plaid |
bank_namestring | — |
account_last4string | — |
account_holder_namestring | — |
entry_codeenum | The dashboard always writes CCD, a business account. one of CCD, PPD |
authorization_textstring | The exact words the signer must read and accept |
text_sha256string | SHA-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)
curl https://app.socialmatterspay.com/portal/api/bank/intents/c6ad7614-843e-4539-b971-f9a8bef0a0a4 \
-H 'Authorization: Bearer portal_session_token'
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
Host https://app.socialmatterspay.com
Parameters
| Field | Notes |
|---|---|
id requiredpath · string | — |
Request body
| Field | Notes |
|---|---|
acceptedboolean = true | Both boxes ticked: the signer read and signs the words (not needed for an agent) |
signer_namestring | — |
signer_titlestring | — |
text_sha256string | SHA-256 of the authorization words shown (not needed for an agent) |
password requiredstring | The login's password, re-entered |
Responses
| Status | Meaning |
|---|---|
201 | OK |
400 | Error — error shape and codes |
401 | Error — error shape and codes |
403 | Error — error shape and codes |
404 | Error — error shape and codes |
409 | Error — error shape and codes |
410 | Error — error shape and codes |
429 | Error — 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
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"
}'
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)
Host https://app.socialmatterspay.com
Responses
| Status | Meaning |
|---|---|
200 | OK |
401 | Error — error shape and codes |
Fields of data (200)
| Field | Notes | ||
|---|---|---|---|
objectstring = "payout_request" | — | ||
enabledboolean | Whether the feature is on for this account | ||
available_centsinteger | The payable balance now. Only when enabled | ||
feenull | A payout request has no fee, so this is always null. Only when enabled | ||
fee_centsinteger | Only when enabled | ||
net_centsinteger | What would reach the bank. Only when enabled | ||
payout_holdobject | Only when enabled. A payout request always reports false here: SMP's engine does not send a hold for it1 child field
|
Example
On the Hold schedule: what a payout would send now
curl https://app.socialmatterspay.com/portal/api/payout-request \
-H 'Authorization: Bearer portal_session_token'
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
Host https://app.socialmatterspay.com
Request body
| Field | Notes |
|---|---|
amount_cents requiredinteger | at least 1 |
Responses
| Status | Meaning |
|---|---|
201 | The payout asked for |
400 | Error — error shape and codes |
401 | Error — error shape and codes |
403 | Error — error shape and codes |
409 | Error — error shape and codes |
Fields of data (201)
| Field | Notes |
|---|---|
objectstring = "payout_request" | — |
payout_idstring | — |
amount_centsinteger | — |
fee_centsinteger | — |
net_centsinteger | What reaches the bank |
statusenum | one of pending, submitted, settled, failed, cancelled |
Example
Ask for that payout
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
}'
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
payout.instant fee on it, and what would arriveHost https://app.socialmatterspay.com
Responses
| Status | Meaning |
|---|---|
200 | OK |
401 | Error — error shape and codes |
Fields of data (200)
| Field | Notes | ||||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
objectstring = "early_payout" | — | ||||||||||||
enabledboolean | Whether the feature is on for this account | ||||||||||||
available_centsinteger | The payable balance now. Only when enabled | ||||||||||||
feeobject | null | The price in force; null when none applies. Always null for a payout request, which has no fee. Only when enabled6 child fields
| ||||||||||||
fee_centsinteger | Only when enabled | ||||||||||||
net_centsinteger | What would reach the bank. Only when enabled | ||||||||||||
payout_holdobject | Only when enabled. A payout request always reports false here: SMP's engine does not send a hold for it1 child field
|
Example
"Pay me now": what it would send, and its fee
curl https://app.socialmatterspay.com/portal/api/early-payout \
-H 'Authorization: Bearer portal_session_token'
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
Host https://app.socialmatterspay.com
Request body
| Field | Notes |
|---|---|
amount_cents requiredinteger | — |
quoted_fee_cents requiredinteger | — |
Responses
| Status | Meaning |
|---|---|
201 | OK |
400 | Error — error shape and codes |
401 | Error — error shape and codes |
403 | Error — error shape and codes |
404 | Error — error shape and codes |
409 | Error — error shape and codes |
502 | Error — error shape and codes |
Fields of data (201)
| Field | Notes |
|---|---|
objectstring = "early_payout_request" | — |
payout_idstring | — |
amount_centsinteger | — |
fee_centsinteger | — |
net_centsinteger | What reaches the bank |
statusenum | one of pending, submitted, settled, failed, cancelled |
Example
"Pay me now" at the amount and fee shown
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
}'
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
Host https://app.socialmatterspay.com
Responses
| Status | Meaning |
|---|---|
200 | OK |
401 | Error — error shape and codes |
502 | Error — error shape and codes |
Fields of data (200)
| Field | Notes |
|---|---|
objectstring = "fee_debit_terms" | — |
authorizationobject | null | The authorization in force; null when none is signed Its fields are listed under portalPayoutBank · connection.authorization. |
entry_codestring = "CCD" | — |
account_last4string | The payout account the words name |
account_holder_namestring | — |
authorization_textstring | The exact words to show the signer |
text_sha256string | SHA-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
curl https://app.socialmatterspay.com/portal/api/fee-debit-authorization \
-H 'Authorization: Bearer portal_session_token'
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
Host https://app.socialmatterspay.com
Request body
| Field | Notes |
|---|---|
accepted requiredboolean = true | — |
signer_name requiredstring | — |
signer_titlestring | — |
text_sha256 requiredstring | pattern ^[0-9a-f]{64}$ |
Responses
| Status | Meaning |
|---|---|
201 | OK |
400 | Error — error shape and codes |
401 | Error — error shape and codes |
403 | Error — error shape and codes |
409 | Error — error shape and codes |
422 | Error — error shape and codes |
Fields of data (201)
The same fields as under portalPayoutBank · connection.authorization.
Example
Sign it
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"
}'
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
}
}
