business entities are supported today.
Endpoints
{entityId} is an entity id (ent_<uuid>) or the sentinel me, which resolves to the partner’s sole entity. The same value is accepted in the Melio-Entity-Id header used by other resources.
Entity fields
Supplied when you create an entity. Every field below exceptexternalId, metadata, website, and description is required on create.
Tax info
typeis one ofein,ssn, oritin.einis accepted for every business type;ssnis accepted only forsole-proprietorshipandtrust.itinis retained for backward compatibility but is no longer accepted for any business type.identifieris a 9-digit tax id, optionally dash-separated. It is write-only: responses return onlytaxInfo.identifierLast4.
Address
line1, city, state (two-letter US code), and postalCode are required; line2, aptNumber, and countryCode (defaults to US) are optional. The physical address may not be a PO box.
Owner
firstName, lastName, email, and dateOfBirth are required and are collected for sanctions screening; phoneNumber is optional. The owner must be between 18 and 120 years old, and stricter date-of-birth validation applies when taxInfo.type is ssn.
Creating an entity
201 with the entity, including its id (ent_<uuid>). Send an Idempotency-Key so retries are safe. See Idempotency.
Direct vs. platform partners
- A direct partner manages a single entity, its own business. A second
POST /entitiesreturns409 conflict_error/DUPLICATE_ENTITY. - A platform partner can create as many entities as it needs, one per business it serves.
Conflicts
On
DUPLICATE_EXTERNAL_ID you can recover by fetching the existing entity with GET /entities?externalId=<yourId> and reusing it, which makes queued retries safe once the idempotency-key window has elapsed.
Updating an entity
PATCH /entities/{entityId} changes only the fields you send.
Payment eligibility
Creating an entity does not clear it to transact. Melio screens the profile against KYC and compliance requirements, and the result is exposed as per-operation limitations. Check them withGET /limitations:
payment.domestic:write) is allowed, and if not, the reasons why. A MissingInformation reason lists the entity fields that still need to be supplied in missingFields:
missingFields entry with a PATCH /entities/{entityId}, then re-check. Rather than polling, subscribe to the api.limitation.updated webhook event and re-fetch when it fires. See Limitations for the full model, and Errors for the BUSINESS_NOT_ELIGIBLE response returned when you attempt a blocked operation.
Related
- Limitations - per-operation eligibility and reasons.
- External IDs - correlate entities with your own records.
- Idempotency - safe entity creation.