KYB
KYB ("Know Your Business") is how the org becomes a verified customer of the platform. Collect a unified superset of fields once and submit it. The orchestration layer handles the rest.
The dashboard is the canonical entry point for this flow. The endpoints here let automation tools mirror it (status polling, programmatic resubmission) and back the dashboard itself.
API keys can be minted at any point, they're separate from KYB. A key works for read-only and key-management endpoints from day one. Quoting, customer creation, and account creation become callable once the org is approved.
Organization verification endpoints require an admin or owner role in the selected organization, including profile, status, requests for information, and document reads. Other roles receive 403 Forbidden.
Endpoints
GET /org/kyb/profilePUT /org/kyb/profilePOST /org/kyb/submitGET /org/kyb/stateGET /org/kyb/rfisPOST /org/kyb/linkPOST /org/kyb/resyncPOST /org/kyb/documentsGET /org/kyb/documentsDELETE /org/kyb/documents/:id
KybProfile
The unified superset. Fields are grouped into subsections so partial saves stay manageable.
business
| Field | Type | Required at submit | Notes |
|---|---|---|---|
legal_name | string | yes | Formal entity name as registered. |
trade_name | string | no | "Doing business as". Must differ from legal_name; omit it when the business has no DBA. When set, a dba_registration document is required at submit. |
transliterated_legal_name | string (max 100) | conditional | Latin-1 romanization. Required when legal_name contains non-Latin-1 characters. |
transliterated_trade_name | string (max 100) | no | Latin-1 romanization of trade_name. |
description | string (max 10000) | yes | Description of the business: what product or service it provides, how it makes money, and its major vendors. Mention any licenses it holds — if it is not licensed, state why it is exempt. At least 350 characters at submit (too_short), and from 2026-11-01 at most 1,000 (too_long). |
target_customers_description | string | yes | Who the entity's target customers are, in as much detail as possible: whether they are individuals or businesses, where they are located, and its top customer personas. Include the financial motivation for those customers to open accounts, and how they use them in practice — settlement methods, and inbound / outbound frequency and sizing. Seismic includes it in the supplemental information document it sends to compliance review. |
entity_type | enum | yes | See EntityType. |
corporate_entity_type_description | string | conditional | Required when entity_type === "other" or entity_type === "dao". Free-form. |
is_dao | boolean | no | Whether the entity is a DAO. Defaults to false. |
industry | string | yes | NAICS code, e.g. "425120". GET /industries lists the accepted set. Anything else is rejected as incomplete. |
registration_number | string | yes | Government-issued company id (UK Companies House, etc.). |
tax_id | string | yes | EIN / equivalent. |
country_of_registration | string (ISO-3166 α-2) | yes | Two-letter code: "US", "GB", etc. See Country codes. |
state_of_incorporation | string | conditional | Required when country_of_registration === "US". |
formation_date | string (ISO-8601 date) | yes | When the entity was formed. |
website | string (URL) | conditional | Public-facing URL. Omit it when the entity has no public website — then marketing_strategy, website_eta, and social_media_profile are required. |
no_website | boolean | no | The entity has no public-facing website. Setting it clears website and makes marketing_strategy, website_eta, and social_media_profile required. Defaults to false. |
marketing_strategy | string | conditional | How the entity markets themselves to generate business. Required when the entity has no website; minimum 300 characters. Dropped on save when a website is given. |
website_eta | string (ISO-8601 date, or 0000-00-00) | conditional | When the entity expects to publish a website, or 0000-00-00 when it does not intend to. Required when the entity has no website; a dated value must be in the future (violations[] reason: "out_of_range"). Dropped on save when a website is given. |
social_media_profile | string (URL) | conditional | A social media profile of the entity (preferred) or of one of its beneficial owners, standing in for the website it does not have. Required when the entity has no website. Dropped on save when a website is given. |
pre_revenue | boolean | no | The business has no revenue yet, so its proof of nature of business is alternative documentation of its preparations to operate rather than invoices or executed agreements. Seismic adds a statement to that effect to the supplemental information document it sends to compliance review. Defaults to false. Must be true exactly when volumes.estimated_annual_revenue_usd is 0. A pre-revenue business must also set operations.primary_source_of_funds to private_capital and upload a ubo_source_of_funds document. |
EntityType
One of:
sole_proprietorshipllcs_corporationc_corporationb_corporationnon_profitpartnershiplimited_partnershiplimited_liability_partnershiptrustdaocooperativeother
addresses
| Field | Type | Required at submit | Notes |
|---|---|---|---|
registered | Address | yes | Legal registered address. Its country must equal business.country_of_registration. Must be a physical street address — a PO box on line1 or line2 is rejected, in every country. |
physical | OperatingAddress | no | Operating address if different. Defaults to registered when omitted. Note that the business' physical address cannot be a virtual address or an address of a registered agent. |
operating_is_remote | boolean | no | Defaults to false. Set it when the business operates remotely and the address it operates from is a control person's residence rather than an office — see operating_is_remote. |
contact
| Field | Type | Required at submit | Notes |
|---|---|---|---|
email | string | yes | Primary business contact. |
phone | string | yes | E.164 required, valid for its calling code, e.g. +14155552671. See phone numbers. |
phone_country_code | string (ISO-3166 α-2) | yes | Country whose dialing code is on phone. |
operations
Compliance/jurisdiction context.
| Field | Type | Required at submit | Notes |
|---|---|---|---|
business_jurisdictions | array of ISO-3166 α-2 | no | Where the business operates. |
funds_movement_jurisdictions | array of ISO-3166 α-2 | yes (non-empty) | Where funds will be sent/received. |
primary_source_of_funds | SourceOfFunds | yes | The business's historical source of funds: where its funds have come from to date. |
primary_source_of_funds_description | string | yes | Free-form detail on the business's historical source of funds. Required at submit whatever primary_source_of_funds is set to. From 2026-11-01, 200 to 1,000 characters (too_short / too_long). |
source_of_wealth | SourceOfFunds | no | Where the business's overall wealth came from — the net-worth question, as opposed to primary_source_of_funds, the business's historical source of funds: where its funds have come from to date. Takes the same options as primary_source_of_funds. |
regulated_status | RegulatedStatus | yes | |
regulated_activity_description | string (free-form) | conditional | Free-form description of the licensed activity. All four regulated_* fields are required together when regulated_status is regulated, registered, or licensed, or when any one of them is set. |
regulated_authority_country | string (ISO-3166 α-2) | conditional | Issuing authority's country. |
regulated_authority_name | string | conditional | Name of the regulatory authority. |
regulated_license_number | string | conditional | License number issued. |
account_purpose | AccountPurpose | yes | What the org plans to use the platform for. |
account_purpose_explanation | string | conditional | Required when account_purpose === "other" or primary_source_of_funds === "other". Free-form. From 2026-11-01, 200 to 1,000 characters when given (too_short / too_long). From 2026-11-14, required whatever account_purpose is. |
registered_msb | boolean | yes (from 2026-11-01) | Whether the business is registered as a money services business in any country. Send true or false; false is an answer. Until 2026-11-01 an omitted value is read as false; from 2026-11-01 a profile without it is reported in missing[] as operations.registered_msb. Omitted on read until answered. Accepts the former conducts_money_services spelling on input. |
registered_msb_description | string | conditional | Required when registered_msb is true, and from 2026-11-01 also when in_flow_of_funds is true. Free-form. Accepts the former conducts_money_services_description spelling on input. |
licensed_vendors | boolean | no | Whether the business relies on licensed or regulated vendors as a core part of its operations. Always recorded as true on the organization's own profile, whatever is sent, so the Provider Attestation (licensed_vendors_attestation) document is always required at submit — see POST /org/kyb/documents. |
msb_compliance_screening_description | string | conditional | Required when registered_msb is true, and from 2026-11-01 also when in_flow_of_funds is true. The compliance/AML screening program behind the registration. From 2026-11-01, at least 200 characters (too_short). |
high_risk_activities_description | string | conditional | Required when high_risk_activities names a real vertical. The business's involvement in the verticals it disclosed. |
compliance_screening_explanation | string | conditional | The combined screening narrative. Normally derived — the two fields above are concatenated under MSB COMPLIANCE SCREENING DESCRIPTION / HIGH RISK ACTIVITY DESCRIPTION headers, since compliance receives one field. Set it directly to supply the whole narrative yourself; required that way when operates_in_prohibited_countries is true, which has no granular field. From 2026-11-01, the narrative, headers included, may be at most 1,000 characters; a longer one fails with a too_long violation on each field feeding it. |
operates_in_prohibited_countries | boolean | no | Whether the business operates in jurisdictions on the platform's prohibited list. Defaults to false. |
high_risk_activities | array of HighRiskActivity | yes | Self-attestations. Must be non-empty from 2026-09-14 — send ["none_of_the_above"] when none apply, so an unanswered question is never read as a negative answer. |
has_complex_ownership | boolean | no | Set true when the business has UBOs requiring beneficial-owner disclosure. Defaults to false. |
business_classifications | array of BusinessClassification | yes | How the business positions itself between payers and payees. The organization's own profile always includes financial_services_provider, whatever is sent; add marketplace when it also applies. |
acting_as_intermediary | boolean | no | Whether this entity sits between any payer and payee. This includes marketplaces and fintech companies, even non-custodial ones that are not in the flow of funds. Always true on the organization's own profile; implied by business_classifications. |
in_flow_of_funds | boolean | yes | Whether the organization will at any point receive, hold, control, convert, or transmit customer funds, fiat or digital. Every organization counts as a financial services provider, so every organization answers it; Seismic includes the answer in the supplemental information document it sends to compliance review. false is an answer. From 2026-11-01, true requires registered_msb_description and msb_compliance_screening_description. |
SourceOfFunds
One of:
salarysavingsbusiness_revenuecompany_capitalinvestment_returnsinheritancetrustgiftgrantsale_of_assetsreal_estateloanprivate_capitalmaritalwinningsother
RegulatedStatus
One of:
regulated: set theregulated_*fields alongside.registered: set theregulated_*fields alongside.licensed: set theregulated_*fields alongside.not_required
AccountPurpose
Every value is accepted, but a business should pick from the recommended list — a purpose outside it can reach review as free text instead of a category, which clears slower. The KYB wizard offers exactly these, in this order; mirror it when you build your own form:
purchase_goods_and_services: pay for goods and services.receive_payments_for_goods_and_services: receive payments for goods and services.investment: make investments.ecommerce_collections: accept retail e-commerce payments.charitable_donations: make or receive charitable donations.other: setaccount_purpose_explanationalongside.
Accepted, but not recommended for a business — these are consumer purposes, or duplicate a recommended value:
crypto_investment: reviewed the same asinvestment. Sendinvestment.payroll: paying employees or contractors. Reviewed the same aspurchase_goods_and_services. Send that instead.remittancessavingspersonal_usefreelance_collections: collecting payment for freelance or contract work.salary_collections: receiving wages from an employer.business_operations: legacy. Accepted for existing integrations — submits asotherwith the purpose asaccount_purpose_explanation.treasury_management: legacy. Same handling asbusiness_operations.
HighRiskActivity
One of:
adult_entertainmentgamblingmarijuanadrugsfirearmscrypto_mixing: operating a crypto tumbler / mixer service.money_serviceslending_or_bankingforeign_exchangehold_client_fundsinvestment_servicessafe_deposit_boxtobaccopharmaceuticalsthird_party_payment_processingnone_of_the_above: explicit negative. Exclusive — sending it alongside any other value is rejected at submit. Send it on its own to disclose that none apply.
BusinessClassification
One of:
marketplace: gig platforms, booking platforms, delivery apps, app stores.financial_services_provider: fintech companies, e.g. non-custodial neobanks, wallets, card programs, payment processors, remittance apps — including ones that never touch the flow of funds.none_of_the_above: explicit negative. Exclusive — sending it alongside any other value is rejected at submit. Send it on its own to disclose that none apply.
marketplace and financial_services_provider each imply acting_as_intermediary.
volumes
Estimated monthly transaction counts plus exact USD figures. Nonnegative. 0 is valid.
| Field | Type | Required at submit | Notes |
|---|---|---|---|
monthly_deposits | integer | no | Fiat deposit count per month. |
monthly_withdrawals | integer | no | Fiat withdrawal count per month. |
monthly_crypto_deposits | integer | no | Crypto deposit count per month. Defaults to monthly_withdrawals when omitted and that count was given. |
monthly_crypto_withdrawals | integer | no | Crypto withdrawal count per month. Defaults to monthly_deposits when omitted and that count was given. |
monthly_investment_deposit_usd | number | no | Investment deposit value per month, USD. |
monthly_investment_withdrawal_usd | number | no | Investment withdrawal value per month, USD. |
monthly_crypto_investment_deposit_usd | number | no | Crypto investment deposit value per month, USD. |
monthly_crypto_investment_withdrawal_usd | number | no | Crypto investment withdrawal value per month, USD. |
usd_value_of_fiat | number | yes | Fiat activity per month, USD. |
usd_value_of_crypto | number | no | Crypto activity per month, USD. Defaults to usd_value_of_fiat when omitted. |
expected_monthly_payments_usd | number | no | Expected total monthly payment volume, USD. Defaults to usd_value_of_fiat when omitted. |
estimated_annual_revenue_usd | number | yes | Annual revenue, USD. Send 0 only for a business that has no revenue yet, and set business.pre_revenue to true alongside it. |
counterparties
| Field | Type | Required at submit |
|---|---|---|
counterparties | array of CounterpartyType | no |
CounterpartyType
One of:
self_transactionsmerchants_supplierscustomersemployeescontractorsfriendsfamily
attestations
Submission-time attestations. Both must be true at submit.
| Field | Type | Required at submit | Notes |
|---|---|---|---|
terms_and_conditions_accepted | boolean | yes (true) | |
information_attested | boolean | yes (true) |
associated_persons
Add all beneficial owners (individuals with ≥25% ownership) and directors. Every business must have at least one beneficial owner and at least one director, even if it is the same person.
At submit time:
- At least one entry is required.
- At least one entry must include
"beneficial_owner"in itsrolesarray. - Every entry whose
ownership_percentis 25 or more must include"beneficial_owner"in itsrolesarray. Below 25 the role is optional. - At least one entry must include
"control_person"or"officer"in itsrolesarray. - At least one entry must include
"authorized_signer"in itsrolesarray. - From November 14, 2026, every entry must also include at least one of
"control_person","officer","director", or"authorized_signer". An entry whose only role is"beneficial_owner"is rejected with a violation onassociated_persons[i].roles. - Every entry must carry a full government-ID block (
gov_id_kind,gov_id_number,gov_id_country, andgov_id_front_image_document_id), plus aselfie_document_idand aproof_of_address_document_id. - Sum of
ownership_percentacross all entries must be ≤ 100. Sums under 100 are accepted: the residual represents holders below the disclosure threshold (per FinCEN's CDD rule, only ≥25% holders need be individually identified). Values accept up to two decimal places, so fractional stakes (e.g. three owners at"33.33"each) sum to 100 instead of being forced to whole numbers that overshoot.
customer_id — the field that ties an associated person to one of your individual customers — applies to your business customers' KYB profiles only. Sending it here is rejected.
| Field | Type | Required at submit | Notes |
|---|---|---|---|
id | string (UUID) | no (server-assigned) | Populated on read after the first save. Required by POST /org/kyb/documents when uploading a per-person document. |
first_name, last_name | string | yes | |
middle_name | string | no | |
transliterated_first_name | string | conditional | Latin-1 romanization. Required when first_name contains non-Latin-1 characters. |
transliterated_middle_name | string | conditional | Latin-1 romanization. Required when middle_name is set and contains non-Latin-1 characters. |
transliterated_last_name | string | conditional | Latin-1 romanization. Required when last_name contains non-Latin-1 characters. |
date_of_birth | string (ISO-8601 date) | yes | |
email | string | yes | |
phone | string | yes | E.164 required, valid for its calling code. See phone numbers. |
phone_country_code | string (ISO-3166 α-2) | yes | Country whose dialing code is on phone. |
address | Address | yes | Mailing address. |
tax_id | string | yes | Tax id issued by the country of residence (SSN for US residents). |
nationality | string (ISO-3166 α-2) | no | Optional for every role. |
citizenship | string (ISO-3166 α-2) | no | Optional for every role; may equal nationality. |
gender | "male" | "female" | no | Required before Seismic can provision a virtual account in some currencies. |
country_of_birth | string (ISO-3166 α-2) | no | Where the person was born. Distinct from nationality and citizenship — a person can be born in a country whose passport and citizenship they do not hold. |
source_of_wealth | SourceOfWealth | no | Where this person's overall wealth came from. The net-worth question, as opposed to primary_source_of_funds, the business's historical source of funds: where its funds have come from to date. |
previous_economic_activity | array of EconomicActivity | no | What this person does for a living; more than one value can apply. |
ownership_percent | string (decimal, 0–100) | yes | Up to two decimal places (e.g. "33.33"). Sum across all entries must be ≤ 100. |
roles | array of AssociatedPersonRole | yes (non-empty) | At least one entry across all UBOs must include beneficial_owner, and so must every entry whose ownership_percent is 25 or more. From November 14, 2026, every entry must also include control_person, officer, director, or authorized_signer. |
title | string | yes | Job/role title (e.g. "CEO", "Director"). Required on every associated person, not only control persons and officers. |
relationship_established_at | string (ISO-8601 date) | yes | When the person's relationship with the business began (YYYY-MM-DD). |
gov_id_kind | GovIdKind | yes | Type of government-issued ID. |
gov_id_number | string | yes | The ID number as printed on the document. |
gov_id_country | string (ISO-3166 α-2) | yes | Issuing country. |
gov_id_front_image_document_id | string (UUID) | yes | document_id from a POST /org/kyb/documents upload with owner=person, kind=government_issued_id. |
gov_id_back_image_document_id | string (UUID) | conditional | Same shape as the front. Required when gov_id_kind is drivers_license or national_id. |
gov_id_issuance_date | string (ISO-8601 date) | no | When the ID was issued (YYYY-MM-DD). |
gov_id_expiration_date | string (ISO-8601 date) | no | When the ID expires (YYYY-MM-DD). Optional in general, but required before an AED account can be opened. |
selfie_document_id | string (UUID) | yes | document_id from a POST /org/kyb/documents upload with owner=person, person_id=<this id>, kind=selfie. |
proof_of_address_document_id | string (UUID) | yes | document_id from a POST /org/kyb/documents upload with owner=person, person_id=<this id>, kind=proof_of_address. |
SourceOfWealth
One of:
salarydividendsproperty_rentalinvestmentinheritancegamblingdonation
EconomicActivity
Multi-select. An entry can carry any combination.
employedself_employedstudentgamblerpensionerunemployed
AssociatedPersonRole
Multi-select. An entry can carry any combination.
beneficial_owner: ≥25% direct or indirect ownership. At least one UBO across the entries must have this role.control_person: exercises significant control / management.officer: named officer (CEO, CFO, etc.). Setstitle.director: board member.authorized_signer: empowered to sign on behalf of the entity.
GovIdKind
New submissions accept:
passportdrivers_licensenational_id
Existing profile reads can also return legacy values:
residence_permitvoters_cardother
supplemental
Free-form entries for anything that doesn't fit the rest of the form — a text note or a supplemental document, each with a title and description. The section itself is optional at submit; the rules below apply to each entry sent. It is omitted from the response while empty, and profile saves are full-replace: a PUT /org/kyb/profile that omits supplemental clears the section, so echo the existing entries (with their ids) on every save they should survive.
| Field | Type | Required at submit | Notes |
|---|---|---|---|
id | string (UUID) | no (server-assigned) | Populated on read after the first save. Echo it back so the entry stays stable across saves. |
kind | "text" | "document" | yes | Whether the entry is a free-form note or references an uploaded document. |
title | string | conditional | Short label for the entry. Required when kind === "text". A document entry needs a title or a description saying what the file is; with neither, submit reports supplemental[i].title. |
description | string | conditional | The note body. Required when kind === "text"; for a document entry, required unless title is set. |
document_id | string (UUID) | conditional | Required when kind === "document". document_id from a POST /org/kyb/documents upload with kind=supplemental. |
Example
A complete KybProfile document:
{
"business": {
"legal_name": "Acme Inc.",
"trade_name": "Acme",
"description": "Acme Inc. operates a marketplace connecting suppliers and merchants worldwide.",
"target_customers_description": "Mid-market suppliers and merchants in the US and Canada, typically 20-500 employees. They open accounts to collect marketplace payouts and pay their own suppliers from one balance. Around 30 inbound ACH settlements a month, and weekly outbound runs.",
"entity_type": "c_corporation",
"is_dao": false,
"industry": "425120",
"registration_number": "1234567",
"tax_id": "82-1234567",
"country_of_registration": "US",
"state_of_incorporation": "DE",
"formation_date": "2020-04-12",
"website": "https://acme.example"
},
"addresses": {
"registered": {
"line1": "1 Wall St",
"city": "New York",
"state": "NY",
"postal_code": "10005",
"country": "US"
}
},
"contact": {
"email": "ops@acme.com",
"phone": "+12025550100",
"phone_country_code": "US"
},
"operations": {
"business_jurisdictions": ["US"],
"funds_movement_jurisdictions": ["US", "GB"],
"primary_source_of_funds": "company_capital",
"regulated_status": "not_required",
"account_purpose": "purchase_goods_and_services",
"registered_msb": false,
"licensed_vendors": true,
"operates_in_prohibited_countries": false,
"high_risk_activities": [
"none_of_the_above"
],
"business_classifications": [
"financial_services_provider"
],
"acting_as_intermediary": true,
"in_flow_of_funds": false
},
"volumes": {
"monthly_deposits": 35,
"monthly_withdrawals": 30,
"monthly_investment_deposit_usd": 0,
"monthly_investment_withdrawal_usd": 0,
"monthly_crypto_investment_deposit_usd": 0,
"monthly_crypto_investment_withdrawal_usd": 0,
"usd_value_of_fiat": 5000000,
"usd_value_of_crypto": 0,
"expected_monthly_payments_usd": 250000,
"estimated_annual_revenue_usd": 5000000
},
"counterparties": {
"counterparties": ["customers", "merchants_suppliers"]
},
"attestations": {
"terms_and_conditions_accepted": true,
"information_attested": true
},
"associated_persons": [
{
"first_name": "Alice",
"middle_name": "Margaret",
"last_name": "Liddell",
"date_of_birth": "1985-06-15",
"email": "alice@acme.com",
"phone": "+12025550100",
"phone_country_code": "US",
"address": {
"line1": "1 Wall St",
"city": "New York",
"state": "NY",
"postal_code": "10005",
"country": "US"
},
"tax_id": "123-45-6789",
"nationality": "US",
"citizenship": "US",
"gender": "female",
"country_of_birth": "US",
"source_of_wealth": "salary",
"previous_economic_activity": [
"employed"
],
"ownership_percent": "100",
"roles": [
"beneficial_owner",
"officer",
"director",
"authorized_signer"
],
"title": "CEO",
"relationship_established_at": "2020-04-12",
"gov_id_kind": "passport",
"gov_id_number": "X12345678",
"gov_id_country": "US",
"gov_id_front_image_document_id": "8e3b…",
"selfie_document_id": "c07a…",
"proof_of_address_document_id": "b921…"
}
],
"supplemental": [
{
"id": "0e8b…",
"kind": "text",
"title": "Clarification on settlement volumes",
"description": "Q3 volume increase reflects two new enterprise clients onboarded in July."
},
{
"id": "7f1a…",
"kind": "document",
"title": "March bank statement",
"description": "Statement covering the period referenced in the review.",
"document_id": "b2c3…"
}
]
}When fields contain non-Latin-1 characters, supply the matching transliterated_* siblings. For example, an entity legally named in Japanese with a Japanese registered address would also send:
{
"business": {
"legal_name": "アクミ株式会社",
"transliterated_legal_name": "Acme Kabushiki Kaisha",
"trade_name": "アクミ",
"transliterated_trade_name": "Acme"
},
"addresses": {
"registered": {
"line1": "東京都千代田区丸の内1-1-1",
"city": "東京",
"postal_code": "100-0005",
"country": "JP",
"transliterated_address": {
"line1": "1-1-1 Marunouchi, Chiyoda-ku",
"city": "Tokyo",
"postal_code": "100-0005"
}
}
}
}Address
Shared shape used in addresses.registered, addresses.physical (via OperatingAddress), and associated_persons[].address. Adding the field to this type propagates to every site that references it. No need to repeat per-section.
| Field | Type | Required at submit | Notes |
|---|---|---|---|
line1 | string | yes | At least 4 characters. |
line2 | string | no | |
city | string | yes | |
state | string | conditional | ISO-3166-2 subdivision (e.g. "NY"). Required when the country's address format includes a state / region (e.g. US, CA, HK); omit it for countries that don't use one (e.g. GB). |
postal_code | string | conditional | Required when the country's address format requires a postal code, and format-checked whenever supplied. |
country | string (ISO-3166 α-2) | yes | Two-letter code, e.g. "US". See Country codes. |
transliterated_address | TransliteratedAddress | conditional | Required when any canonical field above contains non-Latin-1 characters. |
No PO boxes.
Both conditional rules resolve per country. GET /customers/address-requirements answers them for one country ahead of submit, so a form can hide the fields that country's address format doesn't have.
OperatingAddress
addresses.physical only. Every Address field, sent inline.
| Field | Type | Required at submit | Notes |
|---|---|---|---|
remote | boolean | no | Deprecated. Set addresses.operating_is_remote instead. Still accepted as the same declaration, and still returned in step with operating_is_remote while an operating address is on file. |
operating_is_remote
Set addresses.operating_is_remote when the business has no office and the address it operates from is the residential address of a control person. Seismic adds a statement to that effect to the supplemental information document it sends to compliance review.
physical stays optional. Send it when the residence the business operates from is not the registered address already on the profile:
{
"addresses": {
"operating_is_remote": true,
"physical": {
"line1": "88 Cedar Ave",
"city": "Austin",
"state": "TX",
"postal_code": "78701",
"country": "US"
}
}
}The flag and the operating address have to agree, in both directions. Only beneficial owners count — an associated_persons entry without the beneficial_owner role has no residence the business can be operating out of:
- With the flag set and a
physicaladdress sent, that address must match the address of one of the profile's beneficial owners — otherwise submission fails with anotherviolation onaddresses.physical. - When
physicaldoes match a beneficial owner's address, the flag must be set — otherwise submission fails with anot_in_allowed_setviolation onaddresses.operating_is_remote.
Addresses are compared as premises, not as strings: casing, extra whitespace and postal-code separators don't matter, but Ave and Avenue are different addresses.
Addresses sent without either flag read as operating_is_remote: false, so existing payloads are unaffected.
Country codes
Every country-valued field takes an ISO-3166-1 alpha-2 code: two uppercase letters, such as SG, US, GB. Country names are rejected — "Singapore" fails validation, "SG" is what the field wants. The same rule covers country_of_registration, phone_country_code, regulated_authority_country, nationality, citizenship, country_of_birth, gov_id_country, and the jurisdiction arrays.
City-states repeat the name across the address. city keeps the human-readable name ("Singapore"), country still takes the code ("SG"), and state is omitted because Singapore's address format has no state or region. Not every city-state drops state: Hong Kong's format includes an area, so HK addresses require one.
Correct:
{
"line1": "1 Raffles Place",
"city": "Singapore",
"postal_code": "048616",
"country": "SG"
}Rejected:
{
"line1": "1 Raffles Place",
"city": "Singapore",
"state": "Singapore",
"postal_code": "048616",
"country": "Singapore"
}TransliteratedAddress
Latin-1 form of an address whose canonical fields contain non-Latin-1 characters (Cyrillic, CJK, Arabic, etc.). Sanctions / PEP screening runs against Latin-only databases, so the romanized form is required alongside the original. All-or-nothing: when the canonical address triggers the requirement, every required canonical field needs a Latin counterpart. country is omitted: ISO-3166 codes are always Latin-1.
| Field | Type | Required at submit | Notes |
|---|---|---|---|
line1 | string | yes | At least 4 characters. |
line2 | string | no | Supply it when canonical line2 is set. |
city | string | yes | |
state | string | no | Supply it when canonical state is set. |
postal_code | string | conditional | Same rule as the canonical postal_code. |
KybState
Returned from GET /org/kyb/state, POST /org/kyb/submit, and POST /org/kyb/resync.
| Field | Type | Notes |
|---|---|---|
kyb_status | KybStatus | Where the org stands in KYB review. |
kyb_link | object | null | { url, expires_at } when there's a hosted flow pending. |
missing_fields | array of string | Dotted paths into the profile that need to be filled. Empty after a clean submit. |
last_synced_at | string (ISO-8601) | When the cached state was last reconciled. |
rejection_reason | string | null | Human-readable, when kyb_status === "rejected". |
pending_rfi | boolean | An open request for information is outstanding, independent of kyb_status. See when requests are visible for which statuses it can be true at and what clears it. |
last_submitted_at | string (ISO-8601) | null | When the profile was last filed for verification. null until the first submission. Moves on every resubmission, which the status can't show on its own — a resubmit returns to the review it left. |
resubmit_available | boolean | Whether part of the verification can still be re-filed for review. false once the verification on record needs nothing further — submitting again then has no effect. |
