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

Onboarding

Merchant applications: apply, add documents, and the staff decisions that follow, including a merchant's limits.

Hosthttps://onboard.socialmatterspay.com
POST /v1/merchants/apply

Apply as a merchant

No auth

Host https://onboard.socialmatterspay.com

EIN, SSN and the payout account are sealed before storage. In the sandbox the merchant is approved and activated at once; in production the application waits for SMP's review. The API key is shown once.

Request body

FieldNotes
legal_name requiredstring—
dba_namestring—
ein requiredstringpattern ^\d{2}-?\d{7}$
owner_name requiredstring—
owner_ssn requiredstringpattern ^\d{3}-?\d{2}-?\d{4}$
owner_dob requiredstring (date)—
owner_address requiredstring—
business_address requiredstring—
business_type requiredstring—
website_url requiredstringpattern ^https://
description requiredstring—
estimated_monthly_volume_cents requiredintegerat least 0
category requiredstring—
statement_descriptor requiredstringpattern ^[A-Za-z0-9 .&-]{1,12}$
payout_account requiredobject
4 child fields
account_number requiredstringpattern ^\d{4,17}$
routing_number requiredstringMust pass the ABA checksum. pattern ^\d{9}$
account_type requiredenumone of checking, savings
account_holder_name requiredstring—

Responses

StatusMeaning
201Application received
400Error — error shape and codes

Fields of data (201)

FieldNotes
objectstring = "merchant_application"—
merchant_idstring—
statusstring—
ofac_statusstring—
api_keystringShown once
messagestring—
sanctions_screening_idstringThe screening of this application against the sanctions lists
referralenumThe referral code sent: none sent, held while the application is reviewed as a possible duplicate, attributed to its partner, or not a code that exists. one of none, pending_review, attributed, invalid
Examples (2)

Apply as a merchant (sandbox)

POST /v1/merchants/apply
curl -X POST https://onboard.socialmatterspay.com/v1/merchants/apply \
  -H 'Content-Type: application/json' \
  -d '{
  "legal_name": "Northwind Supply LLC",
  "dba_name": "Northwind Supply",
  "ein": "12-3456789",
  "owner_name": "Jordan Rivera",
  "owner_ssn": "123-45-6789",
  "owner_dob": "1984-03-14",
  "owner_address": "200 Example Ave, Sheridan WY 82801",
  "business_address": "200 Example Ave, Sheridan WY 82801",
  "business_type": "llc",
  "website_url": "https://northwind.example",
  "description": "Sells shop supplies to small businesses",
  "estimated_monthly_volume_cents": 5000000,
  "category": "retail",
  "statement_descriptor": "NORTHWIND",
  "payout_account": {
    "account_number": "4433221100",
    "routing_number": "110000000",
    "account_type": "checking",
    "account_holder_name": "Northwind Supply LLC"
  }
}'
Response · 201
HTTP 201
Cache-Control: no-store

{
  "data": {
    "object": "merchant_application",
    "merchant_id": "a5fc4446-e0a0-4260-ac10-e06060393364",
    "status": "active",
    "ofac_status": "clear",
    "sanctions_screening_id": "7de0e613-98d8-4682-baab-139f204bc455",
    "referral": "none",
    "api_key": "sk_sandbox_…",
    "message": "Sandbox merchant is active. The API key is shown once: store it now."
  }
}

Apply as a merchant (production: waits for review)

POST /v1/merchants/apply
curl -X POST https://onboard.socialmatterspay.com/v1/merchants/apply \
  -H 'Content-Type: application/json' \
  -d '{
  "legal_name": "Harbor Goods LLC",
  "dba_name": "Harbor Goods",
  "ein": "23-4567890",
  "owner_name": "Sam Ortiz",
  "owner_ssn": "234-56-7890",
  "owner_dob": "1975-05-30",
  "owner_address": "200 Example Ave, Sheridan WY 82801",
  "business_address": "200 Example Ave, Sheridan WY 82801",
  "business_type": "llc",
  "website_url": "https://harbor.example",
  "description": "Sells shop supplies to small businesses",
  "estimated_monthly_volume_cents": 5000000,
  "category": "retail",
  "statement_descriptor": "HARBOR",
  "payout_account": {
    "account_number": "4433221100",
    "routing_number": "110000000",
    "account_type": "checking",
    "account_holder_name": "Harbor Goods LLC"
  }
}'
Response · 201
HTTP 201
Cache-Control: no-store

{
  "data": {
    "object": "merchant_application",
    "merchant_id": "1ef360db-ff5e-4b2d-b079-0ae77ebb10a6",
    "status": "under_review",
    "ofac_status": "clear",
    "sanctions_screening_id": "6c3d2c9f-6a1f-49c6-a7a9-584ccb73017f",
    "referral": "none",
    "api_key": "sk_live_…",
    "message": "Application received for review. The API key is shown once and works once the account is active."
  }
}
POST /v1/merchants/{id}/documents

Upload a KYB document (the merchant's own key, 10 MB maximum)

Secret key

Host https://onboard.socialmatterspay.com

Parameters

FieldNotes
id requiredpath · string—

Request body (multipart/form-data)

FieldNotes
file requiredstring (binary)—
type requiredenumone of ein_letter, photo_id, bank_statement, operating_agreement, other

Responses

StatusMeaning
201Stored
400Error — error shape and codes
403Error — error shape and codes

Fields of data (201)

FieldNotes
objectstring = "document"—
sha256stringSHA-256 of the stored file. pattern ^[0-9a-f]{64}$
keystring—
typestring—
bytesinteger—
Example

Upload a KYB document

POST /v1/merchants/a5fc4446-e0a0-4260-ac10-e06060393364/documents
curl -X POST https://onboard.socialmatterspay.com/v1/merchants/a5fc4446-e0a0-4260-ac10-e06060393364/documents \
  -H 'Authorization: Bearer sk_sandbox_…' \
  -F 'type=ein_letter' \
  -F 'file=@ein-letter.pdf'
Response · 201
HTTP 201

{
  "data": {
    "object": "document",
    "key": "merchants/a5fc4446-e0a0-4260-ac10-e06060393364/ein_letter/f2d5d65f-dc24-4ae3-889c-2040ec886488-ein-letter.pdf",
    "type": "ein_letter",
    "bytes": 16,
    "sha256": "9879a54b23a427f0572f379114a4a2419a93acbda87f7755682b5149174e37eb"
  }
}
POST /v1/merchants/{id}/review

SMP staff decision on an application

SMP staff token

Host https://onboard.socialmatterspay.com

Parameters

FieldNotes
id requiredpath · string—

Request body

FieldNotes
decision requiredenumone of approved, terminated
reason requiredstring—
reviewed_by requiredstring—
risk_tierenumone of low, standard, elevated, high
duplicate_acknowledgedbooleanRequired (true) to approve an application flagged as matching an existing merchant (409 duplicate_review_open otherwise)

Responses

StatusMeaning
200Merchant state (MerchantState)
401Error — error shape and codes
409Error — error shape and codes

Fields of data (200)

FieldNotes
objectstring = "merchant"—
merchant_idstring—
statusstring—
Examples (2)

Approve an application (SMP staff)

POST /v1/merchants/1ef360db-ff5e-4b2d-b079-0ae77ebb10a6/review
curl -X POST https://onboard.socialmatterspay.com/v1/merchants/1ef360db-ff5e-4b2d-b079-0ae77ebb10a6/review \
  -H 'Authorization: Bearer smp_staff_token' \
  -H 'Content-Type: application/json' \
  -d '{
  "decision": "approved",
  "reason": "KYB documents verified",
  "reviewed_by": "underwriting",
  "risk_tier": "standard"
}'
Response · 200
HTTP 200
Cache-Control: no-store

{
  "data": {
    "object": "merchant",
    "merchant_id": "1ef360db-ff5e-4b2d-b079-0ae77ebb10a6",
    "status": "approved"
  }
}

Approving a match needs duplicate_acknowledged (SMP staff)

POST /v1/merchants/76d35f7a-f7f5-4695-adeb-4bf750ddbc4e/review
curl -X POST https://onboard.socialmatterspay.com/v1/merchants/76d35f7a-f7f5-4695-adeb-4bf750ddbc4e/review \
  -H 'Authorization: Bearer smp_staff_token' \
  -H 'Content-Type: application/json' \
  -d '{
  "decision": "approved",
  "reason": "KYB documents verified",
  "reviewed_by": "underwriting"
}'
Response · 409
HTTP 409
Cache-Control: no-store

{
  "error": "duplicate_review_open",
  "message": "This application matches an existing merchant; approve it with duplicate_acknowledged: true if it is a separate business",
  "duplicate_of_merchant_id": "1ef360db-ff5e-4b2d-b079-0ae77ebb10a6",
  "duplicate_match": [
    {
      "kind": "domain",
      "merchant_id": "1ef360db-ff5e-4b2d-b079-0ae77ebb10a6"
    },
    {
      "kind": "ein",
      "merchant_id": "1ef360db-ff5e-4b2d-b079-0ae77ebb10a6"
    },
    … 2 more
  ]
}
POST /v1/merchants/{id}/activate

SMP staff — open the bank sub-account and activate an approved merchant

SMP staff token

Host https://onboard.socialmatterspay.com

Parameters

FieldNotes
id requiredpath · string—

Responses

StatusMeaning
200Merchant state (MerchantState)
401Error — error shape and codes
404Error — error shape and codes
409Error — error shape and codes

Fields of data (200)

FieldNotes
objectstring = "merchant"—
merchant_idstring—
statusstring—
Example

No captured example: a sandbox merchant is activated when approved (activate answers 409); production activation opens the merchant's account at the bank, and no bank is connected yet (answers 503 bank_not_connected).

GET /v1/merchants/{id}

SMP staff — an application as a reviewer needs it

SMP staff token

Host https://onboard.socialmatterspay.com

Parameters

FieldNotes
id requiredpath · string—

Responses

StatusMeaning
200The merchant
401Error — error shape and codes
404Error — error shape and codes

Fields of data (200)

FieldNotes
objectstring = "merchant"—
idstring—
namestring—
legal_namestring—
statusstring—
risk_tierstring | null—
website_urlstring | null—
categorystring | null—
ofac_statusstring | null—
sanctions_screening_idstring | null—
limit_per_txn_centsinteger—
limit_daily_centsinteger—
limit_monthly_centsinteger—
duplicate_of_merchant_idstring | nullThe existing merchant this application matched
duplicate_matcharray of objectWhat matched, for the reviewer
2 child fields
kindstring—
merchant_idstring—
application_submitted_atstring | null (date-time)—
application_reviewed_atstring | null (date-time)—
application_reviewed_bystring | null—
created_atstring (date-time)—
Example

An application that matches an existing merchant (SMP staff)

GET /v1/merchants/76d35f7a-f7f5-4695-adeb-4bf750ddbc4e
curl https://onboard.socialmatterspay.com/v1/merchants/76d35f7a-f7f5-4695-adeb-4bf750ddbc4e \
  -H 'Authorization: Bearer smp_staff_token'
Response · 200
HTTP 200
Cache-Control: no-store

{
  "data": {
    "object": "merchant",
    "id": "76d35f7a-f7f5-4695-adeb-4bf750ddbc4e",
    "name": "Harbor Wholesale",
    "legal_name": "Harbor Goods Wholesale LLC",
    "status": "under_review",
    "risk_tier": "standard",
    "website_url": "https://harbor.example",
    "category": "retail",
    "ofac_status": "clear",
    "sanctions_screening_id": "20de39de-2894-4dfc-815d-56c5cf17322a",
    "limit_per_txn_cents": 300000,
    "limit_daily_cents": 5000000,
    "limit_monthly_cents": 50000000,
    "duplicate_of_merchant_id": "1ef360db-ff5e-4b2d-b079-0ae77ebb10a6",
    "duplicate_match": [
      {
        "kind": "domain",
        "merchant_id": "1ef360db-ff5e-4b2d-b079-0ae77ebb10a6"
      },
      {
        "kind": "ein",
        "merchant_id": "1ef360db-ff5e-4b2d-b079-0ae77ebb10a6"
      },
      … 2 more
    ],
    "application_submitted_at": "2026-10-28T00:22:34.432Z",
    "application_reviewed_at": null,
    "application_reviewed_by": null,
    "created_at": "2026-10-28T00:22:34.432Z"
  }
}
PATCH /v1/merchants/{id}/limits

SMP staff — raise or lower a merchant's limits, with the reason on record

SMP staff token

Host https://onboard.socialmatterspay.com

Effective on the merchant's next payment. The before and after values are in the audit log.

Parameters

FieldNotes
id requiredpath · string—

Request body

FieldNotes
reason requiredstringup to 2000 characters
changed_by requiredstringup to 200 characters
per_transaction_centsinteger1 to 100000000000
daily_centsinteger1 to 100000000000
monthly_centsinteger1 to 100000000000

Responses

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

Fields of data (200)

FieldNotes
objectstring = "merchant_limits"—
merchant_idstring—
per_transaction_centsinteger—
daily_centsinteger—
monthly_centsinteger—
Example

Raise a merchant's limits (SMP staff)

PATCH /v1/merchants/1ef360db-ff5e-4b2d-b079-0ae77ebb10a6/limits
curl -X PATCH https://onboard.socialmatterspay.com/v1/merchants/1ef360db-ff5e-4b2d-b079-0ae77ebb10a6/limits \
  -H 'Authorization: Bearer smp_staff_token' \
  -H 'Content-Type: application/json' \
  -d '{
  "per_transaction_cents": 1000000,
  "daily_cents": 10000000,
  "reason": "Wholesale orders up to $10,000 approved",
  "changed_by": "underwriting"
}'
Response · 200
HTTP 200
Cache-Control: no-store

{
  "data": {
    "object": "merchant_limits",
    "merchant_id": "1ef360db-ff5e-4b2d-b079-0ae77ebb10a6",
    "per_transaction_cents": 1000000,
    "daily_cents": 10000000,
    "monthly_cents": 50000000
  }
}
GET /v1/admin/applications/{id}/certification

Machine to machine (the CRM): an application's certification, from the sandbox (production) or this database (sandbox, local); null data while it has no sandbox account

SMP staff token

Host https://onboard.socialmatterspay.com

Parameters

FieldNotes
id requiredpath · string—

Responses

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

Fields of data (200)

FieldNotes
methodenumone of api, plugin, hosted
casesarray of object
4 child fields
idenumone of bank_linked, payment_settled, payment_declined, payment_returned, refund, void, webhook_delivered, webhook_signature, idempotent
passedboolean—
evidencearray of string—
detailstring—
passedinteger—
totalinteger—
readyboolean—
checked_atstring (date-time)—
Example

An application's certification (SMP staff)

GET /v1/admin/applications/8f67c6ec-bbf9-4630-bbc3-9c95203955fe/certification
curl https://onboard.socialmatterspay.com/v1/admin/applications/8f67c6ec-bbf9-4630-bbc3-9c95203955fe/certification \
  -H 'Authorization: Bearer smp_staff_token'
Response · 200
HTTP 200
Cache-Control: no-store

{
  "data": {
    "method": "api",
    "cases": [
      {
        "id": "bank_linked",
        "passed": true,
        "evidence": [
          "62c83c4a-beaa-473e-81e3-4a0bddcd60f4",
          "5f56b123-e891-4bd8-9c17-59a85d555fb5"
        ],
        "detail": "a payer bank account linked through the sandbox"
      },
      {
        "id": "payment_settled",
        "passed": true,
        "evidence": [
          "0b50548d-71bf-440c-8064-47da5449aebc",
          "63be7384-a390-4f7f-bd27-c568476d597c"
        ],
        "detail": "a payment reached settled"
      },
      … 7 more
    ],
    "passed": 9,
    "total": 9,
    "ready": true,
    "checked_at": "2026-10-28T00:23:33.820Z"
  }
}
POST /internal/v1/developer-accounts

The sandbox deployment only, called by production's onboarding worker over its SANDBOX_ONBOARD binding: makes an application's sandbox account once (its one site, a sandbox key, an open sandbox sub-balance, a sandbox dashboard login). Anything else answers 404.

Developer program token

Host https://onboard.socialmatterspay.com

Responses

StatusMeaning
200Made before: the same account
201Made now
400Error — error shape and codes
401Error — error shape and codes
404Error — error shape and codes
409Error — error shape and codes
503Error — error shape and codes

Fields of data (200)

FieldNotes
merchant_idstringThe sandbox account that this application already had.
createdbooleanFalse on this response: the application already had an account, so no key and no dashboard link are returned.
keystring | nullAlways null here: the key was shown once, when the account was made.
key_prefixstring—
dashboardobject | nullAlways null here.
2 child fields
set_password_urlstring—
expires_atstring (date-time)—
Example

An application's sandbox account, made once (production's onboarding worker)

POST /internal/v1/developer-accounts
curl -X POST https://onboard.socialmatterspay.com/internal/v1/developer-accounts \
  -H 'Authorization: Bearer developer_program_token' \
  -H 'Content-Type: application/json' \
  -d '{
  "application_ref": "app_example_0001",
  "reference": "SMP-EXAMPLE-0001",
  "legal_name": "Harbor Goods LLC",
  "contact_email": "owner@harbor.example",
  "target": {
    "kind": "website",
    "domain": "harbor.example",
    "method": "api"
  }
}'
Response · 201
HTTP 201
Cache-Control: no-store

{
  "data": {
    "merchant_id": "830b2533-7445-48f6-87b7-f3a06ea50d77",
    "created": true,
    "key": "sk_sandbox_…",
    "key_prefix": "sk_sandbox_5414",
    "dashboard": null
  }
}
GET /internal/v1/developer-accounts/{id}/certification

The sandbox deployment only (production's calls): a sandbox account's certification, by method (api, plugin, hosted)

Developer program token

Host https://onboard.socialmatterspay.com

Parameters

FieldNotes
id requiredpath · string—
methodquery · stringone of api, plugin, hosted

Responses

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

Fields of data (200)

FieldNotes
methodenumHow the business connects. Only api runs cases; plugin and hosted get the light review, so their cases list is empty and total is 0. one of api, plugin, hosted
casesarray of object
4 child fields
idenumone of bank_linked, payment_settled, payment_declined, payment_returned, refund, void, webhook_delivered, webhook_signature, idempotent
passedboolean—
evidencearray of stringUp to 3 sandbox ids that show the case passed (payments, refunds, webhook deliveries, signature checks). Empty when it has not passed.
detailstringWhat the case needs when it has not passed, or what passing it showed.
passedintegerHow many of the method's cases have passed.
totalintegerHow many cases the method runs.
readybooleanAll the cases the method runs have passed. The page check is a person's, so ready does not mean approved.
checked_atstring (date-time)—
Example

That sandbox account's certification (production's onboarding worker)

GET /internal/v1/developer-accounts/4cad9448-209c-48b5-9a1f-95c8585a2db7/certification
curl https://onboard.socialmatterspay.com/internal/v1/developer-accounts/4cad9448-209c-48b5-9a1f-95c8585a2db7/certification?method=api \
  -H 'Authorization: Bearer developer_program_token'
Response · 200
HTTP 200
Cache-Control: no-store

{
  "data": {
    "method": "api",
    "cases": [
      {
        "id": "bank_linked",
        "passed": true,
        "evidence": [
          "62c83c4a-beaa-473e-81e3-4a0bddcd60f4",
          "5f56b123-e891-4bd8-9c17-59a85d555fb5"
        ],
        "detail": "a payer bank account linked through the sandbox"
      },
      {
        "id": "payment_settled",
        "passed": true,
        "evidence": [
          "0b50548d-71bf-440c-8064-47da5449aebc",
          "63be7384-a390-4f7f-bd27-c568476d597c"
        ],
        "detail": "a payment reached settled"
      },
      … 7 more
    ],
    "passed": 9,
    "total": 9,
    "ready": true,
    "checked_at": "2026-10-28T00:23:33.831Z"
  }
}
POST /internal/v1/developer-accounts/{id}/signature-check

The sandbox deployment only (production's calls): sends the sandbox account's webhook endpoints one wrongly signed event and records each answer

Developer program token

Host https://onboard.socialmatterspay.com

Parameters

FieldNotes
id requiredpath · string—

Responses

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

Fields of each item of data (200)

FieldNotes
urlstringThe endpoint's URL.
status_codeinteger | nullThe HTTP status the endpoint answered; null when it could not be reached.
errorstring | nullWhy the request failed (a timeout, a refused connection), at most 200 characters; null when the endpoint answered.
passedbooleanTrue when the endpoint answered 4xx, refusing the forged event. A 2xx means it would take a forged event.
Example

Its signature check (production's onboarding worker)

POST /internal/v1/developer-accounts/4cad9448-209c-48b5-9a1f-95c8585a2db7/signature-check
curl -X POST https://onboard.socialmatterspay.com/internal/v1/developer-accounts/4cad9448-209c-48b5-9a1f-95c8585a2db7/signature-check \
  -H 'Authorization: Bearer developer_program_token' \
  -H 'Content-Type: application/json' \
  -d '{}'
Response · 200
HTTP 200
Cache-Control: no-store

{
  "data": [
    {
      "url": "https://sunrise31.example/smp/webhooks",
      "status_code": 401,
      "error": null,
      "passed": true
    }
  ]
}
POST /internal/flush-email

Machine to machine: send the emails still queued in email_outbox (the CRM calls it after a change; a five-minute cron does the same)

SMP staff token

Host https://onboard.socialmatterspay.com

Responses

StatusMeaning
200How many were sent, queued for a retry, failed for good, or skipped (no Resend key, or not due yet)
401Error — error shape and codes

Fields of data (200)

FieldNotes
sentinteger—
retryinteger—
failedinteger—
skippedinteger—
Example

Send what the email outbox holds now (SMP staff)

POST /internal/flush-email
curl -X POST https://onboard.socialmatterspay.com/internal/flush-email \
  -H 'Authorization: Bearer smp_staff_token'
Response · 200
HTTP 200
Cache-Control: no-store

{
  "data": {
    "sent": 0,
    "retry": 0,
    "failed": 0,
    "skipped": 8
  }
}
POST /internal/partner-drafts

Machine to machine: the partners worker’s merchant submissions (items 1–8 and the price proposal) become a draft; the merchant is emailed a link to finish it

SMP staff token

Host https://onboard.socialmatterspay.com

Request body

FieldNotes
partner_id requiredstring—
agent_idstring—
partner_user_idstring—
started_byenumone of partner, agent
contact requiredobject
3 child fields
email requiredstring—
phone requiredstringA US phone number
namestringup to 120 characters
business requiredobject
3 child fields
legal_name requiredstringup to 200 characters
dba_namestringup to 200 characters
website_url requiredstring—
sales requiredobject
4 child fields
monthly_volume_cents requiredintegerat least 0
avg_ticket_cents requiredintegerat least 0
max_ticket_cents requiredintegerNot less than avg_ticket_cents. at least 0
integration_types requiredarray of stringFrom the questionnaire's integration choices (its config)
owners requiredarray of objectEvery owner of 25% or more and one control person. at least 1 item. at most 5 items
13 child fields
full_name requiredstringThe person's full legal name. up to 120 characters
titlestringup to 80 characters
ownership_pct requirednumberKept to two decimals. 0 to 100
is_control_personbooleantrue for the one person who controls the business
dob requiredstring (date)—
emailstringWhere their own link to add their ID is sent
phonestringA US phone number
address_line1 requiredstringA street address, not a PO box. up to 200 characters
address_line2stringup to 200 characters
address_city requiredstringup to 100 characters
address_state requiredstringA US state's two-letter code
address_postal_code requiredstring—
ssn requiredstringNine digits; sealed on arrival and never returned in full
pricing requiredobject
3 child fields
bps requiredinteger0 to 10000
fixed_cents requiredintegerat least 0
cap_centsinteger | nullat least 1

Responses

StatusMeaning
201The draft
400Error — error shape and codes
401Error — error shape and codes
409Error — error shape and codes
503Error — error shape and codes

Fields of data (201)

FieldNotes
objectstring = "application"—
idstring—
referencestringThe application's reference.
statusstring = "draft"—
link_sent_tostringThe merchant's contact email with most of the name before the @ hidden. The link to open the draft was emailed there.
proposed_pricingobjectThe price the partner proposed, as it was saved.
3 child fields
bpsintegerRate in basis points.
fixed_centsinteger—
cap_centsinteger | nullCap per payment, in cents. Null for no cap.
proposed_pricing_textstringThe proposal in words: its percentage, its fixed part per payment, and its cap when it has one.
Example

A partner's draft application, as the partner portal's Worker files it (SMP staff token)

POST /internal/partner-drafts
curl -X POST https://onboard.socialmatterspay.com/internal/partner-drafts \
  -H 'Authorization: Bearer smp_staff_token' \
  -H 'Content-Type: application/json' \
  -d '{
  "partner_id": "1506590a-fda8-428f-8ed1-cf5a8e52f8f5",
  "contact": {
    "email": "owner@kelpbay.example",
    "phone": "(813) 555-0144",
    "name": "Jennifer Thompson"
  },
  "business": {
    "legal_name": "Kelpbay Supply LLC",
    "dba_name": "Kelpbay Supply",
    "website_url": "https://kelpbay.example"
  },
  "sales": {
    "monthly_volume_cents": 4000000,
    "avg_ticket_cents": 12000,
    "max_ticket_cents": 90000,
    "integration_types": [
      "api"
    ]
  },
  "owners": [
    {
      "full_name": "Jennifer Thompson",
      "ownership_pct": 100,
      "is_control_person": true,
      "dob": "1980-01-01",
      "ssn": "123-45-6003",
      "address_line1": "9 Bay Rd",
      "address_city": "Tampa",
      "address_state": "FL",
      "address_postal_code": "33606",
      "email": "owner@kelpbay.example"
    }
  ],
  "pricing": {
    "bps": 125,
    "fixed_cents": 35,
    "cap_cents": 450
  }
}'
Response · 201
HTTP 201
Cache-Control: no-store

{
  "data": {
    "object": "application",
    "id": "57b01295-8ed8-4b19-b636-43ac8a6ce0b6",
    "reference": "SMP-MK47-4T9Q",
    "status": "draft",
    "link_sent_to": "o••••@kelpbay.example",
    "proposed_pricing": {
      "bps": 125,
      "fixed_cents": 35,
      "cap_cents": 450
    },
    "proposed_pricing_text": "1.25% + $0.35 per payment, capped at $4.50"
  }
}