Skip to main content
POST
cURL
This is an inbound API request: your system posts customer data to Finosu with X-API-Key. It is separate from outbound call-result webhooks. Use camelCase for new integrations. Existing snake_case request fields remain accepted, including fields inside personalData. Both spellings can be mixed. If both spellings of a field are supplied, the camelCase value takes precedence; when both personalData and personal_data are present, personalData is selected as a whole object rather than merged. Send each field only once. Keys inside externalMetadata are caller-defined and are preserved without renaming. For example:
Provide name or both firstName and lastName inside personalData. Missing required fields or name data returns 422. The response identifier remains customer_id; updated may be null.

Validation Errors

Invalid phone or birthday input, including an empty or whitespace-only birthday, returns HTTP 422 Unprocessable Content with a string detail. Request-schema errors also return 422, with an array of field errors. Unexpected server failures remain 500; a server response failure is not a request-validation error. Supplied personalData.timezoneName values must be valid IANA timezones; invalid values return 422 before persistence. Omitted or null timezones retain their existing behavior.

Authorizations

X-API-Key
string
header
required

Body

application/json

Customer data to upsert

Use camelCase request fields. Legacy snake_case names remain accepted at both payload levels. CamelCase takes precedence when both spellings are supplied; duplicate personalData objects are selected, not merged. Keys inside externalMetadata are preserved as supplied.

customerId
string
required

Identifier for the customer in your system

Example:

"customer-12345"

personalData
object
required

Whether the customer has consented to autodialer calls

Example:

true

externalMetadata
object | null

Additional metadata about the customer

Response

Customer upserted successfully

status
string
required
Example:

"success"

customer_id
string
required
Example:

"customer-12345"

created
string<date-time>
required
Example:

"2025-10-31T18:30:00Z"

updated
string<date-time> | null
required
Example:

"2025-10-31T18:30:00Z"