Snapshot as of 2026-04-23 · Environment: Zenus PRODUCTION · Master account ID-10504 · Tenant ZN
Both relationships attached to Peso Corporation ID-266674. Zenus resolved David via ID lookup (6964068 / BO) → ID-266661.
| personRelationshipId | Role | Beneficiary | % Shares | Start |
|---|---|---|---|---|
| ID-11318 | SHAREHOLDER / UBO | true | 100 | 2024-12-24 |
| ID-11319 | REPRESENTATIVE / SIGNER | false | — | 2024-12-24 |
| fileTypeCode | Source | Status | fileId |
|---|---|---|---|
| BIOMETRIC_REPORT | AiPrise user verification PDF | UPLOADED | ID-911889 |
| PROOF_OF_ADDRESS | — | PENDING | — |
| FATCA | — (need W-8BEN for non-US natural person) | PENDING | — |
| SOURCE_OF_FUNDS | — | PENDING | — |
| fileTypeCode | Source PDF | Status | fileId |
|---|---|---|---|
| CERTIF_INCORPORATION_REG | Certificate of Incorporation (Cayman Registrar) | UPLOADED | 1ab23b1d…3dff |
| CORPORATE_RECORDS | Register of Members (Harneys) | UPLOADED | 6c736f2f…fbfe |
| GOV_COMPANY_REG_NUMBER | Certificate of Good Standing | UPLOADED | 65394335…93b9 |
| TAX_ID_NUMBER | Certificate of Good Standing (KY tax-exempt) | UPLOADED | 31c9bb92…6637 |
| COMPANY_FISCAL_REG_CERTIF | Certificate of Incorporation | UPLOADED | e56a4291…fbef |
| FINANCIAL_STATEMENTS | Mercury statement — Peso Latam LLC (DE) GAMBIT | UPLOADED | 2fab2875…7d25 |
| SOURCE_OF_FUNDS | Mercury statement (reused) GAMBIT | UPLOADED | 8fccc009…a189 |
| PROOF_OF_ADDRESS | Register of Members (registered office printed) | UPLOADED | 4a692d33…0eda |
| CORPORATE_RESOLUTION | — (need board resolution authorizing Zenus account opening) | PENDING | — |
| FATCA | — (need W-8BEN-E for non-US entity) | PENDING | — |
Two uploads flagged as GAMBIT — we submitted Mercury bank statement (which belongs to Peso Latam LLC, Delaware affiliate) under both FINANCIAL_STATEMENTS and SOURCE_OF_FUNDS. Accepted at upload; Zenus compliance reviewer may flag the entity mismatch on manual review.
The create call only sent the mandatory minimum. Several fields are still null on record ID-266674 and need to be populated before Zenus will flip PENDING → ACTIVE. Most are objective facts we already have — except businessModelDescription, which needs Cristen's written, compliance-approved narrative (this is what Zenus's AML team will read during review).
See section 5 below for the ready-to-send patch payload.
After PATCH + remaining compliance docs, create a virtual account under masterAccountId: ID-10504 with accountClassCode: CORPORATE_DDA (non-FI path — the 541512 NAICS deliberately avoids FI_CONCENTRATION_DDA).
Confirm statusCode flips from PENDING → ACTIVE on both persons. Verify webhook deliveries for ACCOUNT_NUMBER_CREATED, payment events, AML events.
Target endpoint: PATCH /api/v2/persons/ID-266674 (or PUT / update as Zenus's schema requires). Exact verb/path to confirm with Zenus integration team — not yet mapped in our Postman collection.
{
"personId": "ID-266674",
"personTypeCode": "L",
"email": "compliance@peso-latam.com",
"phoneCountryCode": "+591",
"phoneNumber": "68064653",
"residencyCountryCode": "KY",
"taxResidencyCountry": "KY",
"language": "es",
"legalForm": "LIMITED_LIABILITY_COMPANY",
"intraOrgCode": "PESO-001",
"webAddress": "https://www.peso-latam.com/",
"businessModelDescription": "[CRISTEN TO FILL — final AML-facing narrative]. Draft seed from Peso's AiPrise submission: PESO is a technology-driven fintech company that operates as an operational and technological intermediary for digital financial services. The company does not act as a regulated financial institution and does not exercise direct custody or unilateral control over customer funds or digital assets. Regulated functions (custody, identity verification, screening) are performed by independent, regulated third-party providers. Platform focus: Bolivia, with planned LatAm expansion. Services include fiat-to-USD/USDT conversion, digital payment facilitation, and transaction settlement infrastructure."
}
Why this matters: Zenus compliance reviews the full record before flipping status. A thin businessModelDescription with generic language risks an RFI or EDD escalation. Cristen's version carries regulatory weight — it's the compliance officer's description of the customer's business model to a correspondent bank.
| # | Issue | Resolution |
|---|---|---|
| 1 | OAuth 401 on every endpoint (token minted fine, API 401'd) | Wrong scope. Fix: https://zenusdev.onmicrosoft.com/8914a931-e328-4f4d-8689-b17c9b40ee5c/.default |
| 2 | Dates rejected "must match format date-time" | Send ISO-8601 with time: 2024-12-24T00:00:00Z. Applies to birthDate, issuingDate, expiryDate, registrationDate. |
| 3 | err.personPhoneCountryCodeInvalid on "591" | Format needs the + prefix → "+591". (Confirmed later by Zenus's own v2 example showing "+1".) |
| 4 | Idempotency key caching stale response | Rotate x-request-id UUID on every retry. |
| 5 | Legal Person endpoint /api/zv1/persons/legal missing from Postman | Use generic /api/v2/persons with "personTypeCode": "L". |
| 6 | File upload: Missing required property: files | Wrap the object in a files array: {"files": [...]}. |
| 7 | File upload: Missing required property: fileType | fileType ("PDF") and fileTypeCode (the enum) are both required — different semantics. |
| 8 | NAICS 522320 would classify Peso as a Financial Institution | Switched to 541512 (Computer Systems Design) — keeps Peso as a technology provider, gets CORPORATE_DDA not FI_CONCENTRATION_DDA. |
| 9 | Write-only endpoints return data: null | Treat errors == null && validationErrors == null as success, regardless of data. |
| 10 | 401 "Unauthorized APIM" | Bearer token expired (~1hr TTL). Refresh in Postman. |
| 11 | moveInDate echoed back as 0001-01-01 | Zenus silently coerced our ISO date-time. Retry with plain YYYY-MM-DD on the patch. |
| 12 | Prior production API keys never downloaded | Tigran re-issued to ben@cfxlabs.com on 2026-04-23 — must be saved to a secret store before the encryption expires again. |
All payloads and responses are in ~/Documents/Obsidian/Vault/00 - INBOX/.
| File | Purpose |
|---|---|
| zenus_create_private_person_david_teran.{json,sh} | David create request |
| zenus_response_david_teran_ID-266661.json | David create response |
| zenus_set_occupation_david_teran.{json,sh} | bOccupation = 111011 |
| zenus_upload_biometric_david_teran.{json,sh} | David AiPrise biometric upload |
| zenus_response_biometric_upload_ID-911889.json | Biometric upload response |
| zenus_create_legal_person_peso_corporation.{json,sh} | Peso create request |
| zenus_response_peso_corporation_ID-266674.json | Peso create response |
| zenus_create_relationships_peso_david.{json,sh} | Peso↔David relationships |
| zenus_response_relationships_peso_david.json | Relationships response |
| zenus_upload_peso_certif_incorporation_reg.json | Peso compliance uploads (8 files) |
| zenus_upload_peso_corporate_records_register_of_members.json | |
| zenus_upload_peso_gov_company_reg_number.json | |
| zenus_upload_peso_tax_id_number.json | |
| zenus_upload_peso_company_fiscal_reg_certif.json | |
| zenus_upload_peso_financial_statements.json | |
| zenus_upload_peso_source_of_funds.json | |
| zenus_upload_peso_proof_of_address.json |
Full session narrative lives in: