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

Merchant questionnaire

The API behind the merchant application at /apply/: its pages and settings, starting and confirming by email, an owner's own link, and saving each section.

Hosthttps://onboard.socialmatterspay.com
GET /

Redirects to the questionnaire (/apply/)

No auth

Host https://onboard.socialmatterspay.com

Responses

StatusMeaning
302To /apply/
Example

The onboarding host's root sends you on to the questionnaire

GET /
curl https://onboard.socialmatterspay.com/
Response · 302
HTTP 302
Location: /apply/
GET /apply

Redirects to /apply/

No auth

Host https://onboard.socialmatterspay.com

Responses

StatusMeaning
301To /apply/
Example

/apply without its slash

GET /apply
curl https://onboard.socialmatterspay.com/apply
Response · 301
HTTP 301
Location: /apply/
GET /apply/*

The questionnaire page and its files

No auth

Host https://onboard.socialmatterspay.com

Served with a strict Content-Security-Policy: this origin, plus Plaid Link for the bank step; the camera is allowed for ID photos and the selfie.

Responses

StatusMeaning
200The page or file
404Error — error shape and codes
503Error — error shape and codes
Example

No captured example: the page's files are bound to the onboarding Worker as ASSETS when it is deployed; the capture runs it without them (503: "The questionnaire is not part of this deployment.").

GET /v1/applications/config

The lists the questionnaire offers: entity types, categories (and what SMP can’t accept), integrations, document types, states, the statement window, the biometric notice, and which bank and ID modes are live

No auth

Host https://onboard.socialmatterspay.com

Responses

StatusMeaning
200Config

Fields of data (200)

FieldNotes
entity_typesobjectBusiness types, each key mapped to the label shown for it.
5 child fields
llcstring—
c_corporationstring—
s_corporationstring—
partnershipstring—
nonprofitstring—
categoriesarray of object
4 child fields
keystringThe value to send as the category.
labelstring—
groupenumone of Business to business, Consumer, Only with a bank’s written approval
bank_approval_requiredbooleanTrue when no merchant in the category goes live until a bank has approved the category in writing.
prohibitedarray of stringKinds of business that are never accepted. Shown on the questionnaire, not selectable.
integration_typesobjectThe ways to connect, each key mapped to its label and a note.
6 child fields
woocommerceobject
2 child fields
labelstring—
notestring—
apiobject
2 child fields
labelstring—
notestring—
shopifyobject
2 child fields
labelstring—
notestring—
checkoutobject
2 child fields
labelstring—
notestring—
invoicesobject
2 child fields
labelstring—
notestring—
not_sureobject
2 child fields
labelstring—
notestring—
document_typesobjectThe document types an upload can carry, each key mapped to the label shown for it.
12 child fields
id_frontstring—
id_backstring—
selfiestring—
ein_letterstring—
articlesstring—
dba_certificatestring—
terms_pagestring—
bank_statementstring—
voided_checkstring—
bank_letterstring—
account_documentstring—
otherstring—
name_link_proofsobjectThe proofs that link the legal name to a different name on the website, each key mapped to its label.
4 child fields
not_neededstring—
dba_certificatestring—
terms_pagestring—
domain_email_ein_letterstring—
statesarray of stringTwo-letter codes of the US states and territories the questionnaire accepts.
statement_windowarray of stringThe five months (YYYY-MM, this month first) a bank statement may cover.
biometric_consentobjectThe biometric notice and the release for the face match, word for word. The person's name goes in the blank of the release.
6 child fields
versionstringSend this as version when agreeing; a changed notice is refused.
draft_stampstringThe draft notice stamped on the document while counsel has not approved it.
sectionsarray of object
4 child fields
headingstring—
paragraphsarray of stringThe section's paragraphs, when it has any.
bulletsarray of stringThe section's bullet points, when it has any.
textstringAppears only in the documentation's captured examples, where it stands in for paragraphs and bullets. The live answer carries paragraphs and bullets and no text.
textstringThe release sentence, with name_blank where the person's full legal name goes.
name_blankstringThe placeholder in text that the person's name replaces.
notice_sha256stringSHA-256 of the notice as it stands, stored with every answer.
id_attemptsintegerHow many automatic ID check attempts a person gets before a person at SMP takes over.
bank_modeenumHow the payout account is proved here. plaid with Plaid keys, sandbox with Plaid's test account outside production, document_only with a voided check, bank letter or bank document. one of plaid, sandbox, document_only
idv_modeenumWho checks the owners' IDs. plaid is Plaid Identity Verification, sandbox is the built-in test provider, manual is a person at SMP. one of plaid, sandbox, manual
sandboxbooleanTrue outside production.
Example

What the questionnaire asks for: the document types, the statement months, the release text

GET /v1/applications/config
curl https://onboard.socialmatterspay.com/v1/applications/config
Response · 200
HTTP 200
Cache-Control: no-store

{
  "data": {
    "entity_types": {
      "llc": "LLC",
      "c_corporation": "Corporation (C corp)",
      "s_corporation": "S corporation",
      "partnership": "Partnership (LP, LLP or general)",
      "nonprofit": "Nonprofit corporation"
    },
    "categories": [
      {
        "key": "b2b_supplies",
        "label": "Wholesale and business supplies",
        "group": "Business to business",
        "bank_approval_required": false
      },
      {
        "key": "professional_services",
        "label": "Professional services (accounting, legal, consulting, advisory)",
        "group": "Business to business",
        "bank_approval_required": false
      },
      … 14 more
    ],
    "prohibited": [
      "GLP-1 receptor agonists",
      "Controlled substances",
      … 2 more
    ],
    "integration_types": {
      "woocommerce": {
        "label": "WooCommerce",
        "note": "Our plugin for WordPress stores"
      },
      "api": {
        "label": "Direct API",
        "note": "Open to any approved merchant, no volume minimum"
      },
      "shopify": {
        "label": "Shopify",
        "note": "App pending Shopify’s approval"
      },
      "checkout": {
        "label": "Checkout on your own site",
        "note": "smp.js and hosted checkout"
      },
      "invoices": {
        "label": "Invoices",
        "note": "Bill customers by email, each invoice with its own account number"
      },
      "not_sure": {
        "label": "Not sure yet",
        "note": "We’ll help you choose"
      }
    },
    "document_types": {
      "id_front": "Government ID, front",
      "id_back": "Government ID, back",
      "selfie": "Selfie",
      "ein_letter": "IRS EIN letter (CP 575 or 147C)",
      "articles": "State registration (Articles of Organization or Incorporation)",
      "dba_certificate": "DBA certificate",
      "terms_page": "Website terms page",
      "bank_statement": "Bank statement",
      "voided_check": "Voided check",
      "bank_letter": "Bank letter",
      "account_document": "Bank document showing the business name, account and routing number",
      "other": "Other document"
    },
    "name_link_proofs": {
      "not_needed": "The legal name is the name on the website",
      "dba_certificate": "DBA (assumed or fictitious name) certificate",
      "terms_page": "The website’s terms page shows the legal name",
      "domain_email_ein_letter": "Verified email on the website’s domain + the IRS EIN letter"
    },
    "states": [
      "AL",
      "AK",
      … 54 more
    ],
    "statement_window": [
      "2026-10",
      "2026-09",
      … 3 more
    ],
    "biometric_consent": {
      "version": "biometric-notice-0.1-draft-2026-10-25",
      "draft_stamp": "DRAFT — not reviewed by counsel. Not in force. Social Matter Payments LLC · version 0.1 · 2026-10-25.",
      "sections": [
        {
          "heading": "1. When this applies",
          "text": "(1 paragraphs, shown in full on the page)"
        },
        {
          "heading": "2. What is collected and stored",
          "text": "(2 paragraphs, shown in full on the page)"
        },
        … 5 more
      ],
      "text": "I have read SMP's Biometric Notice. I consent to Social Matter Payments LLC and its identity-verification provider collecting, storing and using a scan of my face geometry from my selfie and my ID photo, only to verify my identity for this application, and to its destruction on the schedule in that notice. I sign this release electronically as [full legal name].",
      "name_blank": "[full legal name]",
      "notice_sha256": "24ff3e9daef75afb0c5635761d6b4392dfe3af3306b4f1f00f04c7c02f0fe6eb"
    },
    "id_attempts": 3,
    "bank_mode": "sandbox",
    "idv_mode": "sandbox",
    "sandbox": true
  }
}
POST /v1/applications/start

Start (or resume) an application: email and phone, then a 6-digit code goes to the email

No auth

Host https://onboard.socialmatterspay.com

An email with an open application resumes it. The answer is the same whether or not the email had an application.

Request body

FieldNotes
email requiredstring—
phone requiredstringA 10-digit US number
namestring—
referral_codestringFrom the partner link (?ref=); the smp_ref cookie is read too
referral_claimstringWho referred you? — a name or a code; a name waits for the CRM to confirm

Responses

StatusMeaning
201A code was sent (the email is shown masked)
400Error — error shape and codes
429Error — error shape and codes

Fields of data (201)

FieldNotes
objectstring = "sign_in"—
code_sent_tostringThe email the six-digit code went to, with most of the name before the @ hidden.
expires_minutesintegerHow long the code works, in minutes.
Example

Start an application: a code is emailed to confirm the address

POST /v1/applications/start
curl -X POST https://onboard.socialmatterspay.com/v1/applications/start \
  -H 'CF-Connecting-IP: 203.0.113.7' \
  -H 'Content-Type: application/json' \
  -d '{
  "email": "jen31@sunrise31.example",
  "phone": "(305) 555-0123",
  "name": "Jennifer Thompson"
}'
Response · 201
HTTP 201
Cache-Control: no-store

{
  "data": {
    "object": "sign_in",
    "code_sent_to": "j••••@sunrise31.example",
    "expires_minutes": 10
  }
}
POST /v1/applications/verify

Prove the email with its code; returns the applicant session token and the application

No auth

Host https://onboard.socialmatterspay.com

A code works for 10 minutes and allows 5 tries.

Request body

FieldNotes
email requiredstring—
code requiredstringpattern ^[0-9]{6}$

Responses

StatusMeaning
200Session token and application
400Error — error shape and codes
410Error — error shape and codes
429Error — error shape and codes

Fields of data (200)

FieldNotes
tokenstringThe session token to send as a Bearer token on every later call. Valid for 7 days or until signed out. A random URL-safe string.
applicationobjectThe application as its applicant sees it. An owner who opened their own emailed link gets a limited view, with only owner_scope, legal_name, that owner and the config; the other fields are for the applicant.
26 child fields
objectstring = "application"—
idstring—
referencestringThe application's reference.
statusenumone of draft, submitted, info_requested, approved, declined
owner_scopeboolean = truePresent and true only in the limited view an owner gets on their own link.
legal_namestring | nullPresent only in the limited owner view.
started_byenumWho started the application. one of applicant, partner, agent
info_request_messagestring | nullWhat SMP asked for, while status is info_requested. Null otherwise.
contactobject
4 child fields
namestring | null—
emailstring—
phonestring | null—
email_verifiedboolean—
businessobject
12 child fields
legal_namestring | null—
dba_namestring | null—
entity_typeenumone of llc, c_corporation, s_corporation, partnership, nonprofit,
formation_statestring | nullTwo-letter state code.
formation_datestring | null (date)—
ein_last4string | nullThe last four digits of the EIN. The full number is never returned.
addressobject
5 child fields
line1string | null—
line2string | null—
citystring | null—
statestring | null—
postal_codestring | null—
business_phonestring | null—
website_urlstring | null—
name_differsboolean | nullWhether the legal name differs from the name on the website. Null until answered.
terms_page_urlstring | null—
name_link_proofenumThe proof that links the legal name to the website name, as worked out from the answers and documents so far. one of not_needed, dba_certificate, terms_page, domain_email_ein_letter,
salesobject
10 child fields
products_descriptionstring | null—
categorystring | nullA key from config.categories.
monthly_volume_centsinteger | null—
avg_ticket_centsinteger | null—
max_ticket_centsinteger | null—
refund_policystring | null—
current_processorsarray of stringThe processors the business uses today.
integration_typesarray of stringKeys from config.integration_types.
is_startupboolean | nullTrue when the business has no three months of bank statements yet.
statement_descriptorstring | null—
ownersarray of object
17 child fields
idstring—
full_namestring—
titlestring | null—
ownership_pctnumberPercent owned, 0 to 100, to two decimals.
is_control_personboolean—
is_applicantbooleanTrue for the person marked "This is me".
dobstring (date)—
emailstring | null—
phonestring | null—
addressobject
5 child fields
line1string | null—
line2string | null—
citystring | null—
statestring | null—
postal_codestring | null—
ssn_last4string—
id_statusenumone of not_started, pending, verified, failed, manual_review
biometric_consentboolean | nullTrue when the person agreed to the face match, false when they declined, null when unanswered.
consentobjectThe release for the face match as it stands.
7 child fields
can_answerbooleanWhether this session may answer for the person: the applicant for the owner marked "This is me", or an owner on their own link.
byenumWho gave the answer. one of applicant, owner,
atstring | null (date-time)—
versionstring | nullThe version of the notice agreed to or declined.
sentencestring | nullThe release sentence with the person's name, when they agreed.
sentence_sha256string | null—
lockedbooleanTrue once an ID check has run: the answer can no longer be changed here.
invite_sent_atstring | null (date-time)When the person was last emailed their own link.
documentsobject
3 child fields
id_frontobject | nullThe person's current photo of this kind. Null when none has been added.
id_backobject | nullThe person's current photo of this kind. Null when none has been added.
selfieobject | nullThe person's current photo of this kind. Null when none has been added.
verificationobject | nullThe latest ID check of the person. Null when none has run.
12 child fields
providerenumone of plaid, sandbox, manual
statusenumone of pending, verified, failed, manual_review
provider_statusstring | nullPlaid's own status for the session, such as active or success. Null for sandbox and manual checks.
sandboxbooleanTrue when the built-in test provider ran the check.
checksobjectWhat was checked and how it came out. No personal data.
created_atstring (date-time)—
completed_atstring | null (date-time)—
attemptintegerWhich Plaid attempt this is, from 1.
retry_availablebooleanPlaid only: another try is allowed because the last attempt ended without a pass and fewer than the allowed attempts were made.
attempts_leftinteger | nullPlaid only: attempts remaining. Null for other providers.
reasonstring | nullPlaid only: why a failed attempt did not pass, in plain words. Null otherwise.
fell_backenumWhen Plaid could not finish the job and a person at SMP has it, tries (the attempts were used up) or unreachable (the vendor or its setup failed). false otherwise. one of tries, unreachable, false
ownership_attestedbooleanWhether the applicant confirmed the list of owners is complete.
documentsarray of objectThe business's documents (those that belong to no person).
7 child fields
idstring—
doc_typestringA key from config.document_types.
statement_monthstring | nullYYYY-MM, for a bank statement.
filenamestring—
content_typestring—
size_bytesinteger—
uploaded_atstring (date-time)—
statement_monthsarray of stringThe months in the accepted window that the bank statements added so far cover, oldest first.
bankobject | nullThe payout account. Null until one is connected.
9 child fields
methodenumone of plaid, plaid_sandbox, manual
statusenumone of verified, name_mismatch, manual_review, rejected
institution_namestring | null—
account_typeenumone of checking, savings
account_last4string—
routing_numberstringThe 9-digit routing number of the account.
holder_namestring—
name_matchenumHow the names on the account compared with the business and its owners. one of match, partial, mismatch, unavailable
sandboxbooleanTrue when the account is Plaid's test account.
referralobject
5 child fields
statusenumone of none, attributed, pending_review, invalid, withheld, rejected
sourceenumone of link, code, partner_portal, claim, admin,
partner_namestring | null—
agent_namestring | null—
claimstring | nullWho the applicant said referred them, as typed.
integrationobject | nullThe one website or app the account will use the API on, its sandbox account and its review. Null until the first page names it.
18 child fields
kindenumone of website, app
domainstringThe website's domain, or the domain an app's server uses.
app_namestring | null—
app_platformenumone of ios, android, web, desktop,
app_store_urlstring | null—
app_bundle_idstring | null—
methodenumHow the business connects: the API, the WooCommerce plugin, or the hosted checkout and invoices. Only api runs the certification cases. one of api, plugin, hosted
labelstringWhere the account is used, such as example.com or "Acme (iOS app) · api.example.com".
sandboxobject | nullThe sandbox account. Never carries its key. Null until it is made.
3 child fields
account_idstring—
key_prefixstring | null—
issued_atstring | null (date-time)—
statusenumone of building, submitted, changes_requested, approved, switched_off
page_urlstring | nullThe page submitted for review.
applicant_notesstring | null—
submitted_atstring | null (date-time)—
due_atstring | null (date-time)When the review is answered by: 2 business days after submitting.
placeinteger | nullPlace in the review line while status is submitted, oldest first. Null otherwise.
decisionobject | nullThe review's decision, once there is one (changes requested, approved or switched off).
3 child fields
statusenumone of changes_requested, approved, switched_off
atstring | null (date-time)—
reasonstring | null—
casesarray of objectThe certification cases the method runs. Empty unless method is api.
3 child fields
idstring—
titlestring—
howstringHow to make the case happen in the sandbox.
page_checksarray of objectWhat a person looks at on the submitted page.
3 child fields
idstring—
titlestring—
looks_atstring—
pricingobject | nullThe price a partner proposed. Null when no partner proposed one.
3 child fields
proposedobject
3 child fields
bpsinteger—
fixed_centsinteger—
cap_centsinteger | null—
proposed_textstring—
notestring—
agreementsarray of objectThe documents to sign. Empty until a payout bank account is connected.
5 child fields
keystring—
titlestring—
boxenumone of agreements, consents
versionstring—
draftboolean—
signaturesarray of objectOne record per box signed.
4 child fields
idstring—
boxenumone of agreements, consents
submitted_atstring (date-time)—
documentsarray of object
3 child fields
keystring—
titlestring—
signed_sha256stringSHA-256 of the signed PDF as stored.
signed_documentsarray of object
5 child fields
keystring—
titlestring—
boxenumone of agreements, consents
signed_atstring (date-time)—
signed_sha256string—
submitted_atstring | null (date-time)—
reviewobject | nullThe business check while it waits. Null otherwise.
2 child fields
due_atstring (date-time)When the check is answered by: 2 business days after submitting.
placeinteger | nullPlace in the review line, oldest first.
problemsarray of objectWhat still stops the application from being submitted. Empty once it is submitted.
4 child fields
stepenumone of contact, business, sales, owners, identity, bank, documents, sign
iteminteger | null1 to 14 for an item of the merchant submission list; null for the rest of the business check.
fieldstring—
messagestring—
configobjectThe lists and rules the questionnaire draws its choices from, so the browser hard-codes none of them. Its fields are listed under questionnaireConfig.
Example

Confirm the email with the code: an applicant session

POST /v1/applications/verify
curl -X POST https://onboard.socialmatterspay.com/v1/applications/verify \
  -H 'Content-Type: application/json' \
  -d '{
  "email": "jen31@sunrise31.example",
  "code": "123456"
}'
Response · 200
HTTP 200
Cache-Control: no-store

{
  "data": {
    "token": "applicant_session_token",
    "application": "(the application, as GET /v1/applications/current answers it)"
  }
}
POST /v1/applications/sign-out

End the applicant session

Applicant session

Host https://onboard.socialmatterspay.com

Responses

StatusMeaning
200Signed out
401Error — error shape and codes

Fields of data (200)

FieldNotes
signed_outboolean = true—
Example

Sign out of the questionnaire

POST /v1/applications/sign-out
curl -X POST https://onboard.socialmatterspay.com/v1/applications/sign-out \
  -H 'Authorization: Bearer applicant_session_token'
Response · 200
HTTP 200
Cache-Control: no-store

{
  "data": {
    "signed_out": true
  }
}
GET /v1/applications/current

The application as the applicant sees it: answers, owners (SSN last 4 only), documents, bank (last 4), ID checks, agreements, signatures, and what is still missing (each problem with its step, its submission-list item and its exact sentence)

Applicant session

Host https://onboard.socialmatterspay.com

Responses

StatusMeaning
200Application
401Error — error shape and codes

Fields of data (200)

The same fields as under verifyApplicationEmail · application.

Example

The application so far

GET /v1/applications/current
curl https://onboard.socialmatterspay.com/v1/applications/current \
  -H 'Authorization: Bearer applicant_session_token'
Response · 200
HTTP 200
Cache-Control: no-store

{
  "data": {
    "object": "application",
    "id": "8f67c6ec-bbf9-4630-bbc3-9c95203955fe",
    "reference": "SMP-B94V-95JT",
    "status": "draft",
    "started_by": "applicant",
    "info_request_message": null,
    "contact": {
      "name": "Jennifer Thompson",
      "email": "jen31@sunrise31.example",
      "phone": "+13055550123",
      "email_verified": true
    },
    "business": {
      "legal_name": "Sunrise Wellness LLC",
      "dba_name": "Sunrise",
      "entity_type": "llc",
      "formation_state": "FL",
      "formation_date": "2019-04-02",
      "ein_last4": "0031",
      "address": {
        "line1": "1 Main St",
        "line2": "Suite 200",
        "city": "Tampa",
        "state": "FL",
        "postal_code": "33602"
      },
      "business_phone": null,
      "website_url": "https://sunrise31.example",
      "name_differs": true,
      "terms_page_url": null,
      "name_link_proof": null
    },
    "sales": {
      "products_description": "Yoga mats and studio gear",
      "category": "retail",
      "monthly_volume_cents": 2500000,
      "avg_ticket_cents": 8500,
      "max_ticket_cents": 60000,
      "refund_policy": "30 days, unused items",
      "current_processors": [
        "Stripe"
      ],
      "integration_types": [
        "woocommerce",
        "shopify"
      ],
      "is_startup": false,
      "statement_descriptor": "SUNRISE"
    },
    "owners": [],
    "ownership_attested": false,
    "documents": [],
    "statement_months": [],
    "bank": null,
    "referral": {
      "status": "none",
      "source": null,
      "partner_name": null,
      "agent_name": null,
      "claim": null
    },
    "integration": {
      "kind": "website",
      "domain": "sunrise31.example",
      "app_name": null,
      "app_platform": null,
      "app_store_url": null,
      "app_bundle_id": null,
      "method": "api",
      "label": "sunrise31.example",
      "sandbox": {
        "account_id": "4cad9448-209c-48b5-9a1f-95c8585a2db7",
        "key_prefix": "sk_sandbox_2ca1",
        "issued_at": "2026-10-28T00:23:30.468Z"
      },
      "status": "building",
      "page_url": null,
      "applicant_notes": null,
      "submitted_at": null,
      "due_at": null,
      "place": null,
      "decision": null,
      "cases": [
        {
          "id": "bank_linked",
          "title": "Link a bank",
          "how": "Link a payer’s bank with the sandbox bank link (any test bank)."
        },
        {
          "id": "payment_settled",
          "title": "A payment that settles",
          "how": "Make a WEB payment that carries the authorization words’ SHA-256, then move the sandbox clock until it settles."
        },
        … 7 more
      ],
      "page_checks": [
        {
          "id": "payer_name",
          "title": "The payer",
          "looks_at": "asks for the payer’s real name; no placeholder"
        },
        {
          "id": "authorization",
          "title": "The authorization",
          "looks_at": "SMP’s authorization words in full before the button, and a tick box that unlocks the button"
        },
        … 4 more
      ]
    },
    "pricing": null,
    "agreements": [],
    "signatures": [],
    "signed_documents": [],
    "submitted_at": null,
    "review": null,
    "problems": [
      {
        "step": "owners",
        "item": 7,
        "field": "owners",
        "message": "Add every owner of 25% or more, and one control person."
      },
      {
        "step": "bank",
        "item": 11,
        "field": "bank",
        "message": "Connect your payout bank account, or upload a voided check, a bank letter or a bank document with your account details."
      },
      … 4 more
    ],
    "config": {
      "entity_types": {
        "llc": "LLC",
        "c_corporation": "Corporation (C corp)",
        "s_corporation": "S corporation",
        "partnership": "Partnership (LP, LLP or general)",
        "nonprofit": "Nonprofit corporation"
      },
      "categories": [
        {
          "key": "b2b_supplies",
          "label": "Wholesale and business supplies",
          "group": "Business to business",
          "bank_approval_required": false
        },
        {
          "key": "professional_services",
          "label": "Professional services (accounting, legal, consulting, advisory)",
          "group": "Business to business",
          "bank_approval_required": false
        },
        … 14 more
      ],
      "prohibited": [
        "GLP-1 receptor agonists",
        "Controlled substances",
        … 2 more
      ],
      "integration_types": {
        "woocommerce": {
          "label": "WooCommerce",
          "note": "Our plugin for WordPress stores"
        },
        "api": {
          "label": "Direct API",
          "note": "Open to any approved merchant, no volume minimum"
        },
        "shopify": {
          "label": "Shopify",
          "note": "App pending Shopify’s approval"
        },
        "checkout": {
          "label": "Checkout on your own site",
          "note": "smp.js and hosted checkout"
        },
        "invoices": {
          "label": "Invoices",
          "note": "Bill customers by email, each invoice with its own account number"
        },
        "not_sure": {
          "label": "Not sure yet",
          "note": "We’ll help you choose"
        }
      },
      "document_types": {
        "id_front": "Government ID, front",
        "id_back": "Government ID, back",
        "selfie": "Selfie",
        "ein_letter": "IRS EIN letter (CP 575 or 147C)",
        "articles": "State registration (Articles of Organization or Incorporation)",
        "dba_certificate": "DBA certificate",
        "terms_page": "Website terms page",
        "bank_statement": "Bank statement",
        "voided_check": "Voided check",
        "bank_letter": "Bank letter",
        "account_document": "Bank document showing the business name, account and routing number",
        "other": "Other document"
      },
      "name_link_proofs": {
        "not_needed": "The legal name is the name on the website",
        "dba_certificate": "DBA (assumed or fictitious name) certificate",
        "terms_page": "The website’s terms page shows the legal name",
        "domain_email_ein_letter": "Verified email on the website’s domain + the IRS EIN letter"
      },
      "states": [
        "AL",
        "AK",
        … 54 more
      ],
      "statement_window": [
        "2026-10",
        "2026-09",
        … 3 more
      ],
      "biometric_consent": {
        "version": "biometric-notice-0.1-draft-2026-10-25",
        "draft_stamp": "DRAFT — not reviewed by counsel. Not in force. Social Matter Payments LLC · version 0.1 · 2026-10-25.",
        "sections": [
          {
            "heading": "1. When this applies",
            "text": "(1 paragraphs, shown in full on the page)"
          },
          {
            "heading": "2. What is collected and stored",
            "text": "(2 paragraphs, shown in full on the page)"
          },
          … 5 more
        ],
        "text": "I have read SMP's Biometric Notice. I consent to Social Matter Payments LLC and its identity-verification provider collecting, storing and using a scan of my face geometry from my selfie and my ID photo, only to verify my identity for this application, and to its destruction on the schedule in that notice. I sign this release electronically as [full legal name].",
        "name_blank": "[full legal name]",
        "notice_sha256": "24ff3e9daef75afb0c5635761d6b4392dfe3af3306b4f1f00f04c7c02f0fe6eb"
      },
      "id_attempts": 3,
      "bank_mode": "sandbox",
      "idv_mode": "sandbox",
      "sandbox": true
    }
  }
}
PATCH /v1/applications/current

Save one section (contact, business, sales, owners); with complete: true every required field of the section is checked

Applicant session

Host https://onboard.socialmatterspay.com

Every invalid field is reported at once: errors: [{ field, message }]. The EIN is sealed at once and its duplicate-check key taken.

Request body

FieldNotes
section requiredenumone of contact, business, sales, owners
completeboolean—
legal_namestring—
dba_namestring—
entity_typeenumone of llc, c_corporation, s_corporation, partnership, nonprofit
formation_statestring—
formation_datestring (date)—
einstring—
website_urlstring—
name_differsboolean—
terms_page_urlstring—
products_descriptionstring—
categorystring—
monthly_volume_centsinteger—
avg_ticket_centsinteger—
max_ticket_centsinteger—
refund_policystring—
current_processorsarray of string—
integration_typesarray of enumone of woocommerce, api, shopify, checkout, invoices, not_sure
is_startupboolean—
statement_descriptorstring—
ownership_attestedboolean—

Responses

StatusMeaning
200Application
400Error — error shape and codes
401Error — error shape and codes
409Error — error shape and codes

Fields of data (200)

The same fields as under verifyApplicationEmail · application.

Example

Save a page (the business)

PATCH /v1/applications/current
curl -X PATCH https://onboard.socialmatterspay.com/v1/applications/current \
  -H 'Authorization: Bearer applicant_session_token' \
  -H 'Content-Type: application/json' \
  -d '{
  "section": "business",
  "integration_kind": "website",
  "integration_domain": "sunrise31.example",
  "legal_name": "Sunrise Wellness LLC",
  "dba_name": "Sunrise",
  "entity_type": "llc",
  "formation_state": "FL",
  "formation_date": "2019-04-02",
  "ein": "12-4000031",
  "business_line1": "1 Main St",
  "business_line2": "Suite 200",
  "business_city": "Tampa",
  "business_state": "FL",
  "business_postal_code": "33602",
  "website_url": "https://sunrise31.example",
  "name_differs": true
}'
Response · 200
HTTP 200
Cache-Control: no-store

{
  "data": {
    "object": "application",
    "id": "8f67c6ec-bbf9-4630-bbc3-9c95203955fe",
    "reference": "SMP-B94V-95JT",
    "status": "draft",
    "started_by": "applicant",
    "info_request_message": null,
    "contact": {
      "name": "Jennifer Thompson",
      "email": "jen31@sunrise31.example",
      "phone": "+13055550123",
      "email_verified": true
    },
    "business": {
      "legal_name": "Sunrise Wellness LLC",
      "dba_name": "Sunrise",
      "entity_type": "llc",
      "formation_state": "FL",
      "formation_date": "2019-04-02",
      "ein_last4": "0031",
      "address": {
        "line1": "1 Main St",
        "line2": "Suite 200",
        "city": "Tampa",
        "state": "FL",
        "postal_code": "33602"
      },
      "business_phone": null,
      "website_url": "https://sunrise31.example",
      "name_differs": true,
      "terms_page_url": null,
      "name_link_proof": null
    },
    "sales": {
      "products_description": null,
      "category": null,
      "monthly_volume_cents": null,
      "avg_ticket_cents": null,
      "max_ticket_cents": null,
      "refund_policy": null,
      "current_processors": null,
      "integration_types": null,
      "is_startup": null,
      "statement_descriptor": null
    },
    "owners": [],
    "ownership_attested": false,
    "documents": [],
    "statement_months": [],
    "bank": null,
    "referral": {
      "status": "none",
      "source": null,
      "partner_name": null,
      "agent_name": null,
      "claim": null
    },
    "integration": {
      "kind": "website",
      "domain": "sunrise31.example",
      "app_name": null,
      "app_platform": null,
      "app_store_url": null,
      "app_bundle_id": null,
      "method": "api",
      "label": "sunrise31.example",
      "sandbox": null,
      "status": "building",
      "page_url": null,
      "applicant_notes": null,
      "submitted_at": null,
      "due_at": null,
      "place": null,
      "decision": null,
      "cases": [
        {
          "id": "bank_linked",
          "title": "Link a bank",
          "how": "Link a payer’s bank with the sandbox bank link (any test bank)."
        },
        {
          "id": "payment_settled",
          "title": "A payment that settles",
          "how": "Make a WEB payment that carries the authorization words’ SHA-256, then move the sandbox clock until it settles."
        },
        … 7 more
      ],
      "page_checks": [
        {
          "id": "payer_name",
          "title": "The payer",
          "looks_at": "asks for the payer’s real name; no placeholder"
        },
        {
          "id": "authorization",
          "title": "The authorization",
          "looks_at": "SMP’s authorization words in full before the button, and a tick box that unlocks the button"
        },
        … 4 more
      ]
    },
    "pricing": null,
    "agreements": [],
    "signatures": [],
    "signed_documents": [],
    "submitted_at": null,
    "review": null,
    "problems": [
      {
        "step": "sales",
        "item": null,
        "field": "products_description",
        "message": "Describe what you sell."
      },
      {
        "step": "sales",
        "item": null,
        "field": "category",
        "message": "Choose the category that best fits what you sell."
      },
      … 13 more
    ],
    "config": "(the questionnaire's settings, as GET /v1/applications/config answers them)"
  }
}