Partner API - Customer Onboarding Guide (Natural Persons & Legal Entities)
Purpose
This document explains how to onboard customers through the Partner API in the test environment: the required step order, which steps are asynchronous, and the most common reasons an onboarding ends REJECTED instead of APPROVED.
It covers these scenarios:
| Scenario | Where it is described |
|---|---|
| Adult natural person (NPC 18+) | Natural Person - Tradevest Ident Services |
| Minor (under 18) with guardian(s) | This guide, plus Proxy Create Process |
| Proxy | Proxy Create Process |
| Legal entity customer (LEC) | Legal Entity - Partner Ident Service |
General rules
- Order matters. Each step depends on data created by the previous one. Run requests top-to-bottom.
- Most write operations are asynchronous. A
200/202response means the command was accepted, not that processing finished. Poll the corresponding GET endpoint (or use webhooks) before moving to the next step. - Statuses to wait for are terminal statuses.
PENDINGis transient - never treat the first non-initial status you read as final. Poll untilAPPROVED/REJECTED/INVALID(onboarding) orCANCELED(offboarding). requestor-idheader - required on most writes; always thenaturalPersonIdof the acting person - see Partner API Authentication.- German addresses must be real -
city+zipmust be a matching real pair (e.g.Berlin/10178), otherwise taxpayer creation fails after onboarding.
Natural Person Customer (NPC) flow
- Create Natural Person -
POST /entities/natural-persons. Required: personal data, nationality, tax details (taxId+taxResidency), income/assets data, main address, contact. - Create Identification -
POST /entities/natural-persons/{naturalPersonId}/identification. Asynchronous: pollGET /entities/natural-persons/{naturalPersonId}untilnaturalPersonIdentificationsis non-empty before continuing. Alternatively use Identification Verification (WEB-ID) - see below. - Create Customer -
POST /roles/customerswithentityType: NATURAL_PERSONand a reference account (valid IBAN required, e.g.DE75512108001245126199). - Upload IDENTIFICATION_CERTIFICATE -
POST /v2/documents(PDF, ≤4 MB). Asynchronous: pollGET /v2/documents/{documentId}until statusCREATED. - Sign TERMS_AND_CONDITIONS -
POST /v2/documents/signwithpartnerDocumentId,naturalPersonIdandcustomerId(required for T&C). Fetch the current active document versions first viaGET /partner-documents?isValid=true. - Sign DATA_PRIVACY_POLICY - same endpoint,
naturalPersonIdonly (nocustomerId). - Start Onboarding -
POST /roles/onboardingswithroleType: CUSTOMER,roleId: <customerId>. - Wait for result - poll
GET /roles/onboardings/{onboardingId}until terminal status, or subscribe to theONBOARDING_NOTIFICATIONwebhook. OnREJECTED, the response containsvalidationErrorsexplaining what is missing. - Create products -
POST /customers/{customerId}/products(BALANCE_ACCOUNT,CURRENCY_WALLET,DEPOSITORY_ACCOUNT) - only after onboarding isAPPROVED.
Identification Verification (WEB-ID) variant
Instead of submitting identification data directly (step 2), you can create an Identification Verification (POST /entities/identification-verifications). This only starts the verification: a manual click-through in the WEB-ID sandbox is required, and the status stays PENDING until that flow is completed.
Legal Entity Customer (LEC) flow
- Create Natural Person - the future signatory / legal representative.
- Create Legal Entity -
POST /entities/legal-entities. Required:legalForm, register data, NACE sectors, FATCA/CRS declaration, addresses. - Create Legal Representative -
POST /entities/{legalEntityId}/legal-representatives(the NP's personal data). - Create NP Identification - as in the NPC flow (or WEB-ID variant).
- Create Proxy (SIGNATORY) -
POST /roles/proxieslinking the NP to the legal entity. - Create Customer -
POST /roles/customerswithentityType: LEGAL_ENTITYand a reference account. - Upload legal entity documents - the required set depends on
legalForm(see table below). - Upload IDENTIFICATION_CERTIFICATE for the signatory NP.
- Sign T&C + DPP for the signatory NP (fetch current versions first).
- Start Onboarding -
roleType: CUSTOMER,roleId: <customerId>,requestor-id: <naturalPersonId>. - Manual review - LEC onboardings require a manual review step; the onboarding stays
PENDINGuntil it is completed. Plan for this delay in the test environment. - Create products - after
APPROVED.DEPOSITORY_ACCOUNTfor a legal entity additionally requires a valid W-8 document uploaded first (the W-8 type depends on the entity’s FATCA classification).
Required documents per legalForm
legalForm |
Required documents |
|---|---|
| LIMITED_LIABILITY_COMPANY | CURRENT_REGISTRY_EXTRACT, SHAREHOLDER_LIST |
| PUBLIC_LIMITED_COMPANY | CURRENT_REGISTRY_EXTRACT, TRANSPARENCY_REGISTER_EXTRACT |
| FOUNDATION | CURRENT_REGISTRY_EXTRACT, STATUTE |
| ASSOCIATION | STATUTE |
| REGISTERED_BUSINESSMAN | CURRENT_REGISTRY_EXTRACT |
| LIMITED_PARTNERSHIP | CURRENT_REGISTRY_EXTRACT, TRANSPARENCY_REGISTER_EXTRACT |
| GENERAL_PARTNERSHIP | CURRENT_REGISTRY_EXTRACT, SHAREHOLDER_LIST, TRANSPARENCY_REGISTER_EXTRACT |
| LIMITED_LIABILITY_COMPANY_AND_LIMITED_PARTNERSHIP | CURRENT_REGISTRY_EXTRACT, SHAREHOLDER_LIST, TRANSPARENCY_REGISTER_EXTRACT |
| PARTNERSHIP | PARTNERSHIP_AGREEMENT |
Warning
The following legal forms cannot be onboarded - validation rejects them immediately (DOCUMENT_VERIFICATION fails, the onboarding ends REJECTED without review): PRIVATE_CORPORATION, REGISTERED_COMPANY, SINGLE_PARTNERSHIP, OTHER, UNACCEPTABLE.
Missing a required document is the most common cause of a REJECTED LEC onboarding - check validationErrors in the onboarding status / webhook payload.
Webhooks instead of polling
Subscribe via POST /webhooks before starting the flow to get pushed status changes instead of polling. Useful event types during onboarding:
ONBOARDING_NOTIFICATION- onboarding status changes incl.validationErrorsNATURAL_PERSON_NOTIFICATION/LEGAL_ENTITY_NOTIFICATION- entity status changesIDENTIFICATION_VERIFICATION_NOTIFICATION- WEB-ID verification resultPROXY_NOTIFICATION- proxy status changesDOCUMENT_NOTIFICATION- document status changes (upload is async - wait forCREATEDbefore starting onboarding)
Offboarding notes
- Immediate customer offboarding is rejected while the customer has open products. Close all customer products first, then start the offboarding. The rejection arrives asynchronously (webhook/status:
VALIDATION_ERROR, "exists not closed product for customer") - the create call itself succeeds. - Offboarding statuses are also transient: poll until a terminal status (
APPROVED/REJECTED/CANCELED/INVALID). - A created offboarding can be cancelled (
DELETE .../offboardings/{offboardingId}) only while it has not been completed.
Common rejection causes - quick checklist
| Symptom | Likely cause |
|---|---|
Onboarding REJECTED with document validation errors |
Missing required document for the legalForm, or document not yet CREATED when onboarding started |
Onboarding REJECTED with signature errors |
T&C/DPP not signed, or signed with an outdated partnerDocumentId - always fetch current versions first |
Onboarding stuck PENDING (NPC) |
Identification not propagated yet, or WEB-ID sandbox flow not completed manually |
Onboarding stuck PENDING (LEC) |
Waiting for the manual review step |
| Taxpayer creation fails after onboarding | Fake German city/zip pair in the address |
| Customer creation 400 | Invalid/missing IBAN in refAccounts, or wrong FATCA/CRS declaration (LE) |
| Product creation fails (LE, DEPOSITORY_ACCOUNT) | Missing W-8 document for the legal entity |