Skip to main content
Use this endpoint to create a new contact in your account. Contacts can represent either a payee (a vendor you manage) or a business (an independent Cleo business). To make a contact payment-ready at creation time, include bankAccount and taxInfo in the request body.

Base URL

Authentication

All requests must include a Bearer token in the Authorization header.

Request Body

string
required
The display name for the contact. This is the primary identifier shown in the Cleo Pay dashboard.
string[]
List of email addresses for the contact. Maximum 5 addresses. Only applicable to payee-type contacts — this field is ignored for business-type contacts.
string
Phone number for the contact, in any standard format. Optional.
object
Mailing address for the contact. Optional.
object
Bank account details for the contact. Providing this field makes the contact eligible to receive ACH payments. All fields within this object are write-only — they are never returned in API responses. Only last4 is returned after creation.
object
Tax identification information for the contact. Providing this field is required for 1099 reporting. The full tax ID is write-only — only the last four digits are returned as taxIdMask after creation.
boolean
default:"false"
When false (the default), Cleo Pay checks for an existing contact with a matching name or email and returns an error if a potential duplicate is found. Set this to true to bypass the duplicate-contact guard and force creation.
The bankAccount.accountNumber, bankAccount.routingNumber, and taxInfo.taxId fields are strictly write-only. They are accepted on creation but never returned in any API response. Use bankAccount.last4 and taxInfo.taxIdMask to confirm the values that were saved.

Response

Returns the created Contact object with HTTP status 201 Created.
string
Unique identifier for the newly created contact.
string
The contact type: payee or business.
string
Initial status of the contact. Newly created contacts have a status of active.
string | null
The display name provided in the request.
string[]
Email addresses associated with the contact. Empty for business-type contacts.
string | null
Phone number, if provided.
string
Allowed payment direction: bidirectional, can_pay, can_be_paid, or none.
number | null
Net payment terms in days, if configured.
object | null
Summary of the linked bank account.
object | null
Tax information summary.
boolean
Whether the contact can currently receive payments. This is true when a valid bank account is linked.
datetime
ISO 8601 timestamp of contact creation.
datetime | null
ISO 8601 timestamp of the most recent update. null immediately after creation.
datetime | null
ISO 8601 timestamp of archival. null for newly created contacts.

Example Request

curl

Example Response

201
To add a contact without bank or tax details now and complete them later, omit bankAccount and taxInfo from the request. You can update the contact’s display name, emails, phone, address, and net terms via a subsequent PATCH /v1/contacts/{contactId} call.