Zenus Integration — CFX Progress

Snapshot as of 2026-04-23 · Environment: Zenus PRODUCTION · Master account ID-10504 · Tenant ZN

Private Persons created
1
Legal Persons created
1
Relationships linked
2
Compliance files uploaded
9
Peso compliance complete
8 / 10
David compliance complete
1 / 4
Contents
  1. Subjects onboarded
  2. Relationships
  3. Compliance uploads
  4. Pending steps
  5. Patch payload — Peso (Cristen input required)
  6. Issues discovered & resolved
  7. Files in the inbox

1. Subjects onboarded

David Alejandro Terán Pacheco PENDING · ONBOARDING_IN_PROGRESS Private Person · Type P
personId
ID-266661
addressId
ID-284285
docuId (ID_CARD)
ID-80743
idNumberId
ID-231978
taxNumberId
P000000010762
customerTypeCode
INDIRECT
mainPersonId
ID-120060
KYC source
AiPrise 8b78db98-8290-4c14-b488-a445bf466243 · APPROVED
bOccupation (SOC)
111011 — Chief Executives
Peso Corporation PENDING · ONBOARDING_IN_PROGRESS Legal Person · Type L Cayman Islands · KY
personId
ID-266674
addressId
ID-284293
idNumberId
ID-231985
taxNumberId
P000000010765
Registration number
HS-416974
Registration date
2024-12-24
counterpartySectorCode
541512 — Computer Systems Design Services (deliberate non-FI classification)
customerTypeCode
INDIRECT
mainPersonId
ID-120060
Registered office
4th Floor, Harbour Place, 103 South Church Street, P.O. Box 10240, Grand Cayman KY1-1002, KY

2. Relationships

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

3. Compliance uploads

David — Private Person matrix

fileTypeCodeSourceStatusfileId
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

Peso Corporation — Legal Person matrix

fileTypeCodeSource PDFStatusfileId
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.

4. Pending steps

P0 · Patch Peso Corporation with full context — CRISTEN: BUSINESS DESCRIPTION NEEDED

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.

P1 · Collect remaining compliance documents

P2 · Patch David's private person record

P3 · Open Virtual Account for Peso Corporation

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).

P4 · Status flip + webhook validation

Confirm statusCode flips from PENDING → ACTIVE on both persons. Verify webhook deliveries for ACCOUNT_NUMBER_CREATED, payment events, AML events.

5. Patch payload — Peso Corporation

Cristen — this is where your input is required. The businessModelDescription field below is a placeholder. This is the free-text narrative Zenus's AML team reads during their review. Peso's own language from the AiPrise KYB is a reasonable starting point, but compliance should review and ship the final wording. The rest of the fields are objective facts.

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.

6. Issues discovered & resolved along the way

#IssueResolution
1OAuth 401 on every endpoint (token minted fine, API 401'd)Wrong scope. Fix: https://zenusdev.onmicrosoft.com/8914a931-e328-4f4d-8689-b17c9b40ee5c/.default
2Dates rejected "must match format date-time"Send ISO-8601 with time: 2024-12-24T00:00:00Z. Applies to birthDate, issuingDate, expiryDate, registrationDate.
3err.personPhoneCountryCodeInvalid on "591"Format needs the + prefix → "+591". (Confirmed later by Zenus's own v2 example showing "+1".)
4Idempotency key caching stale responseRotate x-request-id UUID on every retry.
5Legal Person endpoint /api/zv1/persons/legal missing from PostmanUse generic /api/v2/persons with "personTypeCode": "L".
6File upload: Missing required property: filesWrap the object in a files array: {"files": [...]}.
7File upload: Missing required property: fileTypefileType ("PDF") and fileTypeCode (the enum) are both required — different semantics.
8NAICS 522320 would classify Peso as a Financial InstitutionSwitched to 541512 (Computer Systems Design) — keeps Peso as a technology provider, gets CORPORATE_DDA not FI_CONCENTRATION_DDA.
9Write-only endpoints return data: nullTreat errors == null && validationErrors == null as success, regardless of data.
10401 "Unauthorized APIM"Bearer token expired (~1hr TTL). Refresh in Postman.
11moveInDate echoed back as 0001-01-01Zenus silently coerced our ISO date-time. Retry with plain YYYY-MM-DD on the patch.
12Prior production API keys never downloadedTigran re-issued to ben@cfxlabs.com on 2026-04-23 — must be saved to a secret store before the encryption expires again.

7. Files in the inbox

All payloads and responses are in ~/Documents/Obsidian/Vault/00 - INBOX/.

FilePurpose
zenus_create_private_person_david_teran.{json,sh}David create request
zenus_response_david_teran_ID-266661.jsonDavid 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.jsonBiometric upload response
zenus_create_legal_person_peso_corporation.{json,sh}Peso create request
zenus_response_peso_corporation_ID-266674.jsonPeso create response
zenus_create_relationships_peso_david.{json,sh}Peso↔David relationships
zenus_response_relationships_peso_david.jsonRelationships response
zenus_upload_peso_certif_incorporation_reg.jsonPeso 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: