Entities Overview
Register the people and companies you work with, attach their KYC/KYB evidence, and follow the review performed by Localpayment.
Entities lets you register the people (INDIVIDUAL) and companies (COMPANY) you work with, declare their identity and supporting documents, upload the files that prove them, and follow the result of the KYC/KYB review performed by Localpayment. Entities is shared by payins and payouts: the same entity can be used across Localpayment products.
This guide is for developers who onboard customers, beneficiaries, or business partners through the API.
Entities stores identity data and evidence and records the review outcome. You request the review with Request Verification, but you never approve it: Localpayment Compliance decides. Entities does not validate document numbers against government registries and does not hold balances.
Objects
| Object | What it is | Identifier |
|---|---|---|
| Entity | A person (INDIVIDUAL) or a company (COMPANY) that belongs to your merchant account. Holds KYC data, an address, custom attributes, and its documents. | internalId (UUID) and your externalId |
| Document | A document declared as data: type, number, issuing country, and validity. Holds as many files as needed. Exactly one document per entity is primary (the identifying document, usually the tax ID or identity card). | documentId |
| Proof | A file that supports a document: FRONT, BACK, SELFIE, DOCUMENT, or OTHER. Up to 10 MB. Each proof has its own review status. | id (proofId) |
| UBO link | The relationship between a COMPANY and an INDIVIDUAL who owns or controls it, with ownershipPercentage and controlRole. | id (uboId) |
| Custom-fields schema | The extra fields Localpayment configured for your merchant. Values travel in attributes and are validated against it. | version |
%%{init: {'theme': 'base', 'themeVariables': {'background': '#ffffff', 'primaryColor': '#31467c', 'primaryTextColor': '#ffffff', 'primaryBorderColor': '#0c1a29', 'secondaryColor': '#31467c', 'tertiaryColor': '#ffffff', 'lineColor': '#0c1a29', 'textColor': '#0c1a29', 'edgeLabelBackground': '#ffffff', 'fontFamily': 'Manrope'}, 'fontFamily': 'Manrope', 'htmlLabels': false, 'flowchart': {'htmlLabels': false, 'wrappingWidth': 400, 'padding': 20}}}%%
flowchart LR
M["Your merchant account"] --> S["Custom-fields schema"]
M --> P["Entity: INDIVIDUAL"]
M --> C["Entity: COMPANY"]
P --> D1["Document: CPF (primary)<br/>proofs: FRONT, BACK, SELFIE"]
P --> D2["Document: PROOF_OF_ADDRESS<br/>proof: DOCUMENT"]
C --> D3["Document: CNPJ (primary)<br/>proof: DOCUMENT"]
C --> D4["Document: ARTICLES_OF_INCORPORATION<br/>proof: DOCUMENT"]
C -.- L1(["UBO link: 60%, CEO"]):::lbl -.-> P
classDef default fill:#31467c,stroke:#0c1a29,stroke-width:1px,color:#ffffff,font-family:Manrope
classDef lp fill:#0c1a29,stroke:#0c1a29,color:#ffffff
classDef terminal fill:#0c1a29,stroke:#0c1a29,color:#ffffff
classDef lbl fill:#0c1a29,stroke:#0c1a29,color:#ffffff,font-size:13px
How it works
Your integration has five steps. The last one, verify, tells Localpayment that the upload is complete and starts the review. With verify your part of the upload ends: you don't need to poll the entity's status afterwards. You only act again on the entity if Localpayment asks for a correction.
%%{init: {'theme': 'base', 'themeVariables': {'background': '#ffffff', 'primaryColor': '#31467c', 'primaryTextColor': '#ffffff', 'primaryBorderColor': '#0c1a29', 'secondaryColor': '#31467c', 'tertiaryColor': '#ffffff', 'lineColor': '#0c1a29', 'textColor': '#0c1a29', 'edgeLabelBackground': '#ffffff', 'fontFamily': 'Manrope'}, 'fontFamily': 'Manrope', 'htmlLabels': false, 'flowchart': {'htmlLabels': false, 'wrappingWidth': 400, 'padding': 20}}}%%
flowchart TD
A["1. Create the entity with its primary document<br/>POST /api/entity/v1/entities"] --> B["2. Add the other documents<br/>POST /api/entity/v1/entities/{entityId}/documents"]
B --> C["3. Upload the files of each document<br/>POST /api/entity/v1/documents/{docId}/proofs"]
C --> Q{"Is it a company?"}
Q --- L1(["yes"]):::lbl --> D["4. Link the owners<br/>POST /api/entity/v1/entities/{companyId}/ubos"]
Q --- L2(["no"]):::lbl --> V
D --> V["5. Request verification<br/>POST /api/entity/v1/entities/{entityId}/verify<br/>on the company, once everything is loaded"]
V --> E[/"Localpayment reviews the entity"/]:::lp
classDef default fill:#31467c,stroke:#0c1a29,stroke-width:1px,color:#ffffff,font-family:Manrope
classDef lp fill:#0c1a29,stroke:#0c1a29,color:#ffffff
classDef terminal fill:#0c1a29,stroke:#0c1a29,color:#ffffff
classDef lbl fill:#0c1a29,stroke:#0c1a29,color:#ffffff,font-size:13px
| Step | Endpoint | Result |
|---|---|---|
| 1 | Create an Entity | Entity in PENDING_KYC with its primary document. The response carries the documentId you upload files to. |
| 2 | Add a Document | The other documents declared: identity document, proof of address, articles of incorporation, power of attorney. |
| 3 | Upload a Proof | Files attached to each document, as many as needed. documentationStatus moves from NO_FILES to PARTIAL and COMPLETE. |
| 4 | Link a UBO | Companies only. Create each owner first as an INDIVIDUAL (steps 1 to 3), then link it with its percentage and control role. The company shows uboCount and uboRequirementMet. |
| 5 | Request Verification | 202 Accepted. The entity moves to IN_REVIEW and is locked until Localpayment resolves it. |
If Localpayment needs a correction, it tells you what to fix: each rejected file carries its verificationReason. Upload a replacement with the same proofType or correct the data, then call Request Verification again. See Track the Review and Fix Rejections.
Entity statuses
%%{init: {'theme': 'base', 'themeVariables': {'background': '#ffffff', 'primaryColor': '#31467c', 'primaryTextColor': '#ffffff', 'primaryBorderColor': '#0c1a29', 'secondaryColor': '#31467c', 'tertiaryColor': '#ffffff', 'lineColor': '#0c1a29', 'textColor': '#0c1a29', 'edgeLabelBackground': '#ffffff', 'fontFamily': 'Manrope'}, 'fontFamily': 'Manrope', 'htmlLabels': false, 'flowchart': {'htmlLabels': false, 'wrappingWidth': 400, 'padding': 20}}}%%
flowchart TD
S((Start)) --- L1(["Create an Entity"]):::lbl --> PK[PENDING_KYC]
PK --- L2(["Request Verification, by you"]):::lbl --> IR[IN_REVIEW]
IR --- L3(["correction requested, with reason"]):::lbl --> PK
IR --- L4(["approved"]):::lbl --> AC[ACTIVE]
IR --- L5(["rejected, with reason"]):::lbl --> RJ[REJECTED]
AC --- L6(["blocked, with reason"]):::lbl --> BL[BLOCKED]
BL --- L7(["unblocked"]):::lbl --> AC
PK --- L8(["Close an Entity"]):::lbl --> CL[CLOSED]
IR --> CL
AC --> CL
BL --> CL
RJ --> CL
CL --> E((End))
class S,E terminal
classDef default fill:#31467c,stroke:#0c1a29,stroke-width:1px,color:#ffffff,font-family:Manrope
classDef lp fill:#0c1a29,stroke:#0c1a29,color:#ffffff
classDef terminal fill:#0c1a29,stroke:#0c1a29,color:#ffffff
classDef lbl fill:#0c1a29,stroke:#0c1a29,color:#ffffff,font-size:13px
| Status | Meaning | Editable | Set by |
|---|---|---|---|
| PENDING_KYC | Created, or returned for a correction (the reason is in statusReason). Files may still be missing. | Yes | You, on creation. Localpayment Compliance, when it asks for a correction. |
| IN_REVIEW | Under review by Localpayment. | No. Data, documents, files, and UBO links are frozen (409 ENTITY_IN_REVIEW). | You, with Request Verification |
| ACTIVE | Approved and usable by Localpayment products. | Yes | Localpayment Compliance |
| REJECTED | Review failed. The reason is in the status history. Cannot be submitted again. | No | Localpayment Compliance |
| BLOCKED | Temporarily blocked. The reason is in the status history. | No | Localpayment Compliance |
| CLOSED | Logically deleted. Kept for audit and readable, but never editable. Final. | No | You, with Close an Entity |
"Editable" means the KYC data, documents, and files can still be changed. Editing a document resets its approved files to PENDING. Editing other entity data does not change a review already recorded.
Document and proof statuses
Localpayment Compliance sets the status of each proof. The status of a document is derived from its proofs and its validity.
| Object | Statuses | Rule |
|---|---|---|
| Proof | PENDING, IN_REVIEW, APPROVED, REJECTED | Set by Compliance. A rejected FRONT, BACK, or SELFIE is replaced by uploading the same proofType again once the entity is back in PENDING_KYC. |
| Document | PENDING, VERIFIED, REJECTED, EXPIRED | VERIFIED when all active proofs are APPROVED. REJECTED when any active proof is REJECTED. EXPIRED when expirationDate is in the past. Otherwise PENDING. |
documentationStatus on the entity summarizes file coverage: NO_FILES (no document has a file), PARTIAL (some do), or COMPLETE (all do). It does not express approval.
Conventions
| Topic | Convention |
|---|---|
| Base URL | Stage https://api.stage.localpayment.com/api/entity. See API keys and environments. |
| Authentication | Bearer access token (Get Access Token). Your merchant account is resolved from the token. |
| Acting user | Taken from the access token and stored for audit (uploadedBy, changedBy). No extra header is needed. |
| Identifiers | UUIDs. internalId for entities, documentId for documents, id for proofs and UBO links. |
| Dates | YYYY-MM-DD for dates, ISO 8601 UTC for timestamps. Countries in ISO 3166-1 alpha-3. |
| Concurrency | Entity responses carry an ETag header and a version field. PATCH requires If-Match. |
| Tracing | Send X-Correlation-ID (UUID) and quote it to support. It is echoed in every response and error. |
| Errors | application/problem+json with a stable string code. See Entity Statuses and Error Codes. |
| Notifications | No webhooks for Entities. You don't need to poll after Request Verification; to follow the review, call Get KYC Status. |
Next steps
Register a person or a company with its primary document.
Attach the files that support each document.
Follow the review and correct what Localpayment asks for.
Send the KYB data of a Virtual Account beneficiary.
Updated 5 days ago
