Skip to main content
An entity is the foundational object in Nuvion. Everything (accounts, transactions, payouts) belongs to an entity. Before an entity can hold funds or move money, it must complete verification through Nuvion’s onboarding flow.

Entity types


Entity statuses

Entities move through a defined lifecycle from creation to activation.

The Entity object

See The Entity object for the full field-by-field schema. Nuvion doesn’t nest identity details, business details, or metadata inside the entity object. It returns them as sibling objects (person or business, and person_meta or business_meta) alongside entity in create and retrieve responses.

Creating a business entity

Onboard a business entity in three steps: create the entity, upload documents, then submit for verification.

Step 1: Create the entity

Request fields

string
required
A display name for the entity. 1–255 characters.
object
required
Core business information.
object
Registered address of the business.
object
The address where the business physically operates, if different from the registered address. Same structure as address.
array
The individuals associated with the business. At least one officer is required.
object
Additional compliance and business metadata.
string
Description of this entity’s relationship to its parent, if it’s a subsidiary or related entity. You can’t set the parent via a request field: it’s always the authenticating entity. See Managing child entities.

Person object

The person object is used within business_officers to capture individual details.
string
required
1–100 characters.
string
required
1–100 characters.
string
Max 100 characters.
string
required
Format: YYYY-MM-DD.
string
required
Valid email address.
string
required
ISO 3166-1 alpha-2 country code. e.g. NG, GH, US.
string
required
m for male, f for female.
string
Phone number including country code. 10–14 characters.
string
Bank Verification Number (BVN) required for Nigerian nationals.
string
National Identity Number (NIN) required for Nigerian nationals.
string
Social Security Number (SSN) required for U.S. nationals.
object
Identity verification documents for this person.
object
Residential address of this person. Same structure as the business address object.

Step 2: Upload documents

Upload the required documents for the business and each officer. Documents must be base64-encoded. Required business documents Optional business documents Required per officer
BVN and NIN are required for Nigerian nationals. SSN is required for U.S. nationals.
To link a document to a specific officer, include link_to_identity with the officer’s person_id:

Request fields

string
ULID of the entity to attach the document to. Required when uploading via the API.
string
required
Base64-encoded file content. Accepted formats: PDF, JPG, JPEG, PNG, DOC, DOCX.
string
Base64-encoded back side of the document. Use for identity documents that have information on both sides.
string
required
A human-readable description of the document. 1–500 characters.
string
The document type. One of identity, proof_of_address, tax_verification, certificate_of_incorporation, memorandum_of_association.
object
Additional document metadata.
Links this document to a specific business officer. Required when uploading identity or address documents for an officer.

Step 3: Submit for verification

Once all required documents are uploaded, submit the entity for review.
The entity status moves to pending. Nuvion’s compliance team reviews the submission and updates the status to approved or rejected.
Don’t poll GET /entities/:id to check status. Listen for the entities.updated webhook event instead.

Creating an individual entity

Individual entities represent natural persons on your platform. Onboard one in the same three steps as a business entity: create the entity, upload identity documents, then submit for verification.

Step 1: Create the entity

The response includes an entity_id and a person_id. You need the person_id to link identity documents to this individual in Step 2.

Request fields

string
required
A display name for the entity. 1–255 characters.
object
required
Personal details for the individual.
object
Residential address of the individual.
object
Identity and address verification documents.
object
Business context for the individual, if applicable (e.g. a sole trader or freelancer).
object
Additional compliance and risk metadata.
string
Description of this individual’s relationship to its parent, if associated with a business entity. 1–100 characters. You can’t set the parent via a request field: it’s always the authenticating entity. See Managing child entities.

Step 2: Upload documents

Upload two required documents for the individual via POST /documents. Documents must be base64-encoded.

Step 3: Submit for verification

Once both documents are uploaded, submit the entity for review.
The entity status moves to pending. Listen for the entities.updated webhook to be notified when verification completes.

Webhooks

Nuvion fires entities.created when a new entity is created, and entities.updated whenever its state changes afterward, for example when status moves from pending to approved. Subscribe to these to keep your platform in sync without polling. See Event types for full payload schemas.

Managing child entities

Creating an entity via the API with another entity’s API keys establishes a parent-child relationship: the authenticating entity becomes the parent, and the new entity becomes the child. To act on behalf of a child entity using the parent’s API keys, pass the child’s entity_id on every request:
  • POST, PUT, PATCH: include entity_id in the request body.
  • GET: append entity_id as a query parameter.
Omitting entity_id evaluates the request against the authenticating (parent) entity, not the child. Referencing a child’s resource IDs (account_id, counterparty_id, payment_detail_id) without the child’s entity_id fails, because Nuvion validates those resources against the parent entity, where they don’t exist. This is a common cause of unexpected 404 errors.

Example

Say a parent entity has already onboarded a child entity, 01HP3MMTGM973EHJMA9K4F4CJK. Using the parent’s API key, create an account for that child by passing its entity_id:
The account (01HP4NHTE7HHYDD4MHVT0ZZ3CH) now belongs to the child entity, not the parent. Fetching it with the parent’s API key but no entity_id fails, because Nuvion looks for the account under the parent (the authenticating entity), where it doesn’t exist:
Returns 404 Not Found:
Passing the child’s entity_id resolves it:
Pass entity_id consistently across every request in a workflow, and make sure every resource ID belongs to that same entity.
Webhooks follow the same hierarchy: a child entity without its own webhook has its events delivered to its parent’s webhook instead. See Child entities for details.

What’s next

Create an account

Issue a multi-currency account for an approved entity.

Entities API reference

Full endpoint documentation for creating and managing entities.

Webhooks

Set up webhook listeners for entity and document events.