Skip to main content
Melio models both sides of a payment as accounts. An internal account is a funding source owned by the entity - the money comes out of it. An external account is a payee’s delivery method - the money goes into it. Every payment links exactly one internal account to one external account.

Ownership types

The ownershipType field indicates which side of the payment the account belongs to:
  • internal - funding sources owned by the entity. Can be an ACH bank account or a card.
  • external - delivery methods for payees. Can be ACH, paper check, domestic wire, or virtual card.

Account types

Bank account verification

The isVerified field reflects whether Melio has confirmed the entity controls the account. It is present only on internal accounts; for external accounts (payees, ownershipType: external) verification does not apply and the field is absent. An internal account is added either through Plaid or, for selected partners only, by supplying the account and routing numbers directly. An internal ACH account may start as isVerified: false and must be verified before you can originate a payment from it. Verification runs through Plaid:
  1. Call POST /accounts/{accountId}/verify/link to get a short-lived, Melio-hosted link.
  2. Hand the link to the entity. It opens a Melio-hosted page where they complete Plaid account verification. This is typically instant when they authenticate with their bank, or micro-deposits as a fallback when instant verification isn’t available or the user selects the micro-deposit flow.
  3. When verification completes, isVerified flips to true. Subscribe to api.account.updated to learn when this happens.
Until isVerified is true, payments cannot be originated from the account.

Card accounts

Internal card accounts are added through a tokenized card flow rather than the micro-deposit flow used for bank accounts. The card is captured as a vault token along with its BIN, expiry, cardholder name, and billing address, so the raw card number never passes through your servers. A card account is added in one of two ways, both of which feed the same tokenized flow:
  • Hosted card flow - mint a link with POST /accounts/link (type: card). The entity completes card entry on a Melio-hosted page that adds the internal account for them.
  • Direct - approved partners may submit the vaulted card token and its details to POST /accounts themselves.

Account ID

Every account receives an opaque identifier starting with acct_ (for example, acct_7nRv3xBqY5tM). Pass this ID as originatingAccountId (internal) or receivingAccountId (external) when you create a payment. Set externalId if you want to attach your own reference - for example, your internal ledger ID for the bank account. You can filter account list endpoints by externalId to look up accounts without storing Melio IDs. For Plaid-linked bank accounts and card accounts, you cannot collect credentials directly - those flows require a hosted portal. Use POST /accounts/link to generate a short-lived, entity-scoped URL. The body takes a single required field, type: plaid mints a link that runs the Plaid bank-account flow, card mints a link that runs the card flow. You may also pass an optional externalId; the account created through the link is then pinned to it, and the submitter cannot supply a different one.
The response returns the link under data:
Redirect or embed the returned data.url for the entity’s user; the link is no longer usable after expiration. When they complete the flow, Melio creates the account automatically. You can poll GET /accounts or listen for the api.account.created webhook to detect when the account is ready.