Skip to main content
POST
/
partner
/
v1
/
kyc
/
applications
Submit KYC application data
curl --request POST \
  --url https://api.machines.cash/partner/v1/kyc/applications \
  --header 'Authorization: Bearer <token>' \
  --header 'Content-Type: application/json' \
  --data '
{
  "firstName": "John",
  "lastName": "Smith",
  "birthDate": "1990-01-01",
  "nationalId": "123456789",
  "countryOfIssue": "US",
  "email": "jsmith@example.com",
  "address": {
    "line1": "123 Main St",
    "line2": "Unit 4",
    "city": "New York",
    "region": "NY",
    "postalCode": "10001",
    "countryCode": "US"
  },
  "occupation": "49-3023",
  "annualSalary": "<40k",
  "accountPurpose": "everyday spend",
  "expectedMonthlyVolume": "under $1k"
}
'
const options = {
method: 'POST',
headers: {Authorization: 'Bearer <token>', 'Content-Type': 'application/json'},
body: JSON.stringify({
firstName: 'John',
lastName: 'Smith',
birthDate: '1990-01-01',
nationalId: '123456789',
countryOfIssue: 'US',
email: 'jsmith@example.com',
address: {
line1: '123 Main St',
line2: 'Unit 4',
city: 'New York',
region: 'NY',
postalCode: '10001',
countryCode: 'US'
},
occupation: '49-3023',
annualSalary: '<40k',
accountPurpose: 'everyday spend',
expectedMonthlyVolume: 'under $1k'
})
};

fetch('https://api.machines.cash/partner/v1/kyc/applications', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));
import requests

url = "https://api.machines.cash/partner/v1/kyc/applications"

payload = {
"firstName": "John",
"lastName": "Smith",
"birthDate": "1990-01-01",
"nationalId": "123456789",
"countryOfIssue": "US",
"email": "jsmith@example.com",
"address": {
"line1": "123 Main St",
"line2": "Unit 4",
"city": "New York",
"region": "NY",
"postalCode": "10001",
"countryCode": "US"
},
"occupation": "49-3023",
"annualSalary": "<40k",
"accountPurpose": "everyday spend",
"expectedMonthlyVolume": "under $1k"
}
headers = {
"Authorization": "Bearer <token>",
"Content-Type": "application/json"
}

response = requests.post(url, json=payload, headers=headers)

print(response.text)
{
  "ok": true,
  "data": {
    "isTermsOfServiceAccepted": true,
    "reason": "<string>",
    "completionLink": "<string>",
    "externalVerificationLink": "<string>",
    "isActive": true
  },
  "summary": "<string>",
  "errors": [
    {
      "code": "invalid_request",
      "message": "missing required field",
      "field": "<string>"
    }
  ],
  "next": {
    "pollAfterMs": 1,
    "suggestedTool": "<string>",
    "suggestedArgs": {}
  }
}
{
"ok": true,
"summary": "invalid request",
"errors": [
{
"code": "invalid_request",
"message": "missing required field",
"field": "<string>"
}
],
"next": {
"pollAfterMs": 1,
"suggestedTool": "<string>",
"suggestedArgs": {}
}
}
{
"ok": true,
"summary": "invalid request",
"errors": [
{
"code": "invalid_request",
"message": "missing required field",
"field": "<string>"
}
],
"next": {
"pollAfterMs": 1,
"suggestedTool": "<string>",
"suggestedArgs": {}
}
}
{
"ok": true,
"summary": "invalid request",
"errors": [
{
"code": "invalid_request",
"message": "missing required field",
"field": "<string>"
}
],
"next": {
"pollAfterMs": 1,
"suggestedTool": "<string>",
"suggestedArgs": {}
}
}

Authorizations

Authorization
string
header
required

Bearer authentication header of the form Bearer <token>, where <token> is your auth token.

Headers

X-Open-Responses
enum<string>

Return Open Responses-compatible output when set (replaces the default response envelope).

Available options:
1,
true
X-Open-Responses-Call-Id
string

Tool call id used for function_call_output items when Open Responses mode is enabled.

Minimum string length: 1

Body

application/json
firstName
string
required
Maximum string length: 50
lastName
string
required
Maximum string length: 50
birthDate
string
required

YYYY-MM-DD

Example:

"1990-01-01T00:00:00.000Z"

nationalId
string
required
countryOfIssue
string
required

ISO-3166-1 alpha-2 country code (e.g., US). Case-insensitive.

Required string length: 2
Example:

"US"

email
string<email>
required
Example:

"jsmith@example.com"

address
object
required
occupation
string
required

SOC occupation code (e.g., 49-3023). See GET /kyc/values.

Example:

"49-3023"

annualSalary
enum<string>
required
Available options:
<40k,
50k–99k,
100k–149k,
150k+
Example:

"<40k"

accountPurpose
enum<string>
required
Available options:
everyday spend,
subscriptions,
business expenses,
testing,
other
Example:

"everyday spend"

expectedMonthlyVolume
enum<string>
required
Available options:
under $1k,
$1k–$5k,
$5k–$20k,
$20k+
Example:

"under $1k"

phoneCountryCode
string

Country calling code digits only (e.g., 1).

Maximum string length: 3
Example:

"1"

phoneNumber
string

Phone number digits only (include area code).

Maximum string length: 15
Example:

"4155551234"

Response

KYC application submitted

ok
boolean
required
data
object
required
summary
string
required
errors
object[]
required
next
object