POST /customers
Create an individual or business customer. Every field below is accepted. Some are forwarded to verification. Some are stored verbatim and echoed on GET but don't influence onboarding decisions. Those are listed under Accepted but ignored (individual) and Accepted but ignored (business).
Request: Individual (type: "individual")
| Field | Type | Required | Notes |
|---|---|---|---|
type | "individual" | yes | Discriminator. |
first_name | string (2–1024) | yes | |
middle_name | string (1–1024) | no | |
last_name | string (2–1024) | yes | |
transliterated_first_name | string (1–256) | no | Latin-script transliteration for non-Latin names. |
transliterated_middle_name | string (1–256) | no | |
transliterated_last_name | string (1–256) | no | |
email | string (1–1024) | yes | |
phone | string | no | E.164-ish, e.g. +12223334444. |
birth_date | string (YYYY-MM-DD) | yes | |
residential_address | Address | yes | |
transliterated_residential_address | Address | no | |
account_purpose | enum (see account_purpose (individual)) | yes | Reason this customer is using the platform. |
account_purpose_other | string | conditional | Required if account_purpose === "other". |
employment_status | employed | homemaker | retired | self_employed | student | unemployed | yes | |
expected_monthly_payments_usd | 0_4999 | 5000_9999 | 10000_49999 | 50000_plus | yes | |
acting_as_intermediary | boolean | no | |
most_recent_occupation | string (occupation code) | no | Bridge uses their own occupational code list. |
source_of_funds | enum (see source_of_funds (individual)) | yes | Where the money comes from. |
nationality | string (ISO 3166-1 alpha-3) | no | |
verified_govid_at | string (ISO 8601) | no | Caller attests they already verified gov ID. |
verified_selfie_at | string (ISO 8601) | no | Caller attests they already verified selfie. |
completed_customer_safety_check_at | string (ISO 8601) | no | Caller attests they ran their own safety check. |
signed_agreement_id | string (1–1024) | no | Bridge's internal agreement id, meaningless outside Bridge. |
endorsements | array of Endorsement | no | Rails / features the customer wants access to. Empty = base only. |
identifying_information | array of IdentifyingInformation | no | |
documents | array of Document | no |
account_purpose (individual)
charitable_donationsecommerce_retail_paymentsinvestment_purposesoperating_a_companyotherpayments_to_friends_or_family_abroadpersonal_or_living_expensesprotect_wealthpurchase_goods_and_servicesreceive_payment_for_freelancingreceive_salary
source_of_funds (individual)
company_fundsecommerce_resellergambling_proceedsgiftsgovernment_benefitsinheritanceinvestments_loanspension_retirementsalarysale_of_assets_real_estatesavingssomeone_elses_funds
Example: Individual
{
"type": "individual",
"first_name": "Alice",
"last_name": "Zhang",
"email": "alice@example.com",
"phone": "+14155550100",
"birth_date": "1990-04-01",
"residential_address": {
"street_line_1": "1 Market St",
"city": "San Francisco",
"subdivision": "US-CA",
"postal_code": "94105",
"country": "USA"
},
"account_purpose": "purchase_goods_and_services",
"employment_status": "employed",
"expected_monthly_payments_usd": "5000_9999",
"source_of_funds": "salary",
"nationality": "USA",
"endorsements": ["base"],
"identifying_information": [
{
"type": "ssn",
"issuing_country": "USA",
"number": "111-22-3333"
}
]
}curl -X POST "$BASE_URL/customers" \
-H "Api-Key: $SEISMIC_ORCHESTRATION_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"type": "individual",
"first_name": "Alice",
"last_name": "Zhang",
"email": "alice@example.com",
"birth_date": "1990-04-01",
"residential_address": {
"street_line_1": "1 Market St",
"city": "San Francisco",
"subdivision": "US-CA",
"postal_code": "94105",
"country": "USA"
},
"account_purpose": "purchase_goods_and_services",
"employment_status": "employed",
"expected_monthly_payments_usd": "5000_9999",
"source_of_funds": "salary"
}'Accepted but ignored (individual)
Stored on the customer row and echoed on GET. Not forwarded to verification and not used for onboarding decisions.
| Field | Why it's ignored |
|---|---|
transliterated_first_name | Names are submitted as given. No second transliterated identity check is run. |
transliterated_middle_name | Same. |
transliterated_last_name | Same. |
transliterated_residential_address | Same. |
acting_as_intermediary | No intermediary flag in the verification flow. |
most_recent_occupation | Bridge-specific occupation code list. Not consumed by verification. |
verified_govid_at | ID verification always runs. Caller attestations do not short-circuit it. |
verified_selfie_at | Same. |
completed_customer_safety_check_at | Same. |
signed_agreement_id | Bridge's internal agreement id has no counterpart here. |
Request: Business (type: "business")
| Field | Type | Required | Notes |
|---|---|---|---|
type | "business" | yes | Discriminator. |
business_legal_name | string (1–1024) | yes | Registered legal entity name. |
transliterated_business_legal_name | string | no | |
business_trade_name | string (1–1024) | no | DBA / public-facing name. |
transliterated_business_trade_name | string | no | |
business_description | string (1–1024) | yes | What the business does. |
email | string (1–1024) | yes | |
business_type | cooperative | corporation | llc | other | partnership | sole_prop | trust | yes | |
primary_website | string (1–1024) | no | |
other_websites | array of string | no | |
registered_address | Address | yes | Legal / registration address. |
transliterated_registered_address | Address | no | |
physical_address | Address | no | Operating address if different from registered_address. |
transliterated_physical_address | Address | no | |
is_dao | boolean | no | |
business_industry | array of string (NAICS codes) | yes | GET /industries lists the accepted codes. |
estimated_annual_revenue_usd | 0_99999 | 100000_999999 | 1000000_9999999 | 10000000_49999999 | 50000000_249999999 | 250000000_plus | yes | |
expected_monthly_payments_usd | integer | yes | Note: individual uses an enum. Business uses a raw integer. Bridge's choice. |
expected_monthly_swift_transaction_volume | integer | no | |
operates_in_prohibited_countries | boolean | no | |
account_purpose | enum (see account_purpose (business)) | yes | |
account_purpose_other | string | conditional | Required if account_purpose === "other". |
high_risk_activities | array of HighRiskActivity (see high_risk_activities) | yes | Include none_of_the_above if none apply. |
high_risk_activities_explanation | string | conditional | Required if high_risk_activities contains any non-none_of_the_above entry. |
source_of_funds | enum (see source_of_funds (business)) | yes | |
source_of_funds_description | string | no | |
conducts_money_services | boolean | no | |
conducts_money_services_using_bridge | boolean | conditional | Required if conducts_money_services === true. |
conducts_money_services_description | string | conditional | Required if conducts_money_services === true. |
compliance_screening_explanation | string | conditional | Required if conducts_money_services === true. |
publicly_traded_listings | array of PubliclyTradedListing | no | |
ownership_threshold | integer (5–25) | no | Default 25. % ownership above which beneficial owners must be listed. |
has_material_intermediary_ownership | boolean | no | |
acting_as_intermediary | boolean | no | |
signed_agreement_id | string | no | |
endorsements | array of Endorsement | no | |
associated_persons | array of AssociatedPerson | yes | UBOs, controllers, signers, directors. |
identifying_information | array of IdentifyingInformation | no | |
documents | array of BusinessDocument | no | Business docs have a larger purposes enum than individual documents. |
regulated_activity | RegulatedActivity | no |
account_purpose (business)
charitable_donationsecommerce_retail_paymentsinvestment_purposesotherpayments_to_friends_or_family_abroadpayrollpersonal_or_living_expensesprotect_wealthpurchase_goods_and_servicesreceive_payments_for_goods_and_servicestax_optimizationthird_party_money_transmissiontreasury_management
high_risk_activities
adult_entertainmentgamblinghold_client_fundsinvestment_serviceslending_bankingmarijuana_or_related_servicesmoney_servicesnicotine_tobacco_or_related_servicesoperate_foreign_exchange_virtual_currencies_brokerage_otcpharmaceuticalsprecious_metals_precious_stones_jewelrysafe_deposit_box_rentalsthird_party_payment_processingweapons_firearms_and_explosivesnone_of_the_above
source_of_funds (business)
business_loansgrantsinter_company_fundsinvestment_proceedslegal_settlementowners_capitalpension_retirementsale_of_assetssales_of_goods_and_servicesthird_party_fundstreasury_reserves
Example: Business
{
"type": "business",
"business_legal_name": "Seismic Systems Inc.",
"business_description": "Stablecoin payment infrastructure.",
"email": "ops@example.com",
"business_type": "corporation",
"primary_website": "https://seismic.systems",
"registered_address": {
"street_line_1": "1 Market St",
"city": "San Francisco",
"subdivision": "US-CA",
"postal_code": "94105",
"country": "USA"
},
"business_industry": ["522320"],
"estimated_annual_revenue_usd": "1000000_9999999",
"expected_monthly_payments_usd": 500000,
"account_purpose": "treasury_management",
"high_risk_activities": ["none_of_the_above"],
"source_of_funds": "owners_capital",
"ownership_threshold": 25,
"endorsements": ["base"],
"associated_persons": [
{
"first_name": "Alice",
"last_name": "Zhang",
"email": "alice@example.com",
"birth_date": "1990-04-01",
"residential_address": {
"street_line_1": "1 Market St",
"city": "San Francisco",
"subdivision": "US-CA",
"postal_code": "94105",
"country": "USA"
},
"has_ownership": true,
"has_control": true,
"is_signer": true,
"title": "CEO",
"ownership_percentage": 60
}
]
}Accepted but ignored (business)
Stored on the customer row and echoed on GET. Not forwarded to verification and not used for onboarding decisions.
| Field | Why it's ignored |
|---|---|
transliterated_business_legal_name | Names are submitted as given. |
transliterated_business_trade_name | Same. |
transliterated_registered_address | Same. |
transliterated_physical_address | Same. |
is_dao | No DAO-disclosure field in the verification flow. |
expected_monthly_swift_transaction_volume | SWIFT-specific volume projections are not part of the verification flow. |
operates_in_prohibited_countries | Compliance runs its own jurisdiction screen. This flag is not fed in. |
conducts_money_services | MSB-status self-attestation is rerun. Not consumed from caller input. |
conducts_money_services_using_bridge | Bridge-specific. |
conducts_money_services_description | Stored only. |
compliance_screening_explanation | Stored only. |
publicly_traded_listings | Not consumed by the standard verification flow. |
has_material_intermediary_ownership | Full ownership disclosure is always required via associated_persons. |
acting_as_intermediary | Same. |
signed_agreement_id | Bridge-internal. |
regulated_activity | Stored only. Regulator checks are run independently. |
Per-AssociatedPerson: transliterated_*, verified_govid_at, verified_selfie_at, completed_customer_safety_check_at, attested_ownership_structure_at, relationship_established_at | See individual-level rationale above. The same holds for each associated person. |
What we forward vs. store
The compat layer accepts every Bridge field and stores it. What's forwarded to verification is a narrower core: identity, address, birth_date, email, endorsements, account_purpose, source_of_funds, employment_status (individual), business_type / business_industry / estimated_annual_revenue_usd (business), identifying_information, documents, and the full associated_persons array for businesses. Everything outside that set is listed above under Accepted but ignored.
Response (201)
Returns the Customer object. The response shape is the same as GET /customers/{id}.