Create customer

This API is used to create a customer and link it to a location.

It returns the customer. Its id is our customer_id: store it with your user and use it in the payment method, transaction and transfer endpoints, and as customer_id in gateway sales and tokenizations.

Note: If a customer with the same customer_id_external, email or phone (checked in that order) already exists in your locations, it is returned with created: false and status 200, and linked to the location, instead of creating a duplicate. Status 201 means it was created.

URL

{{interface_url}}/{{version}}/customers

Method

POST

Headers

Authorization: Bearer {access_token} (or Api-Key)

Request Parameters

FieldTypeRequiredDescription
first_nameStringYesMax 64.
last_nameStringYesMax 64.
emailStringConditionalRequired if phone is not sent. Valid email, max 64.
phoneStringConditionalRequired if email is not sent. 7-15 digits, no symbols.
phone_country_idIntegerConditionalRequired with phone. 3 = United States.
customer_id_externalStringNoYour own customer ID. Max 45. Recommended: avoids duplicates and lets you search by it.
genderIntegerNo0 not set, 1 male, 2 female.
citizenshipStringNoMax 20.
address.line1StringNoStreet. Max 64.
address.line2StringNoApartment / suite. Max 64.
address.cityStringNoMax 64.
address.zipcodeStringNoMax 64.
address.state_idIntegerNoSoftPoint state ID.
address.country_idIntegerNoSoftPoint country ID. 3 = United States.
location_idIntegerConditionalLocation to use. Required when the token covers more than one location (corporate / sub corporate); with a location token it is taken from the token.

URL Parameters

None.

Example Request (cURL)

curl --location --request POST '{{interface_url}}/{{version}}/customers' \
--header 'Accept: application/json' \
--header 'Content-Type: application/json' \
--header 'Authorization: Bearer {{access_token}}' \
--data '{
  "location_id": 279685,
  "first_name": "Ana",
  "last_name": "Garcia",
  "email": "[email protected]",
  "phone": "5125550134",
  "phone_country_id": 3,
  "customer_id_external": "CRM-1001",
  "gender": 2,
  "address": {
    "line1": "100 Main St",
    "line2": null,
    "city": "Austin",
    "zipcode": "78701"
  }
}'

Example Response (JSON) — 200

{
  "id": 48213,
  "customer_id_external": "CRM-1001",
  "first_name": "Ana",
  "last_name": "Garcia",
  "email": "[email protected]",
  "phone": "5125550134",
  "phone_country_id": 3,
  "gender": 2,
  "citizenship": null,
  "address": {
    "line1": "100 Main St",
    "line2": null,
    "city": "Austin",
    "zipcode": "78701",
    "state_id": null,
    "country_id": 3
  },
  "email_verified_at": null,
  "phone_verified_at": null,
  "status": "active",
  "editable": true,
  "locations": [
    {
      "location_id": 279685,
      "name": "Main Street",
      "linked_at": "2026-11-05T18:16:18Z"
    }
  ],
  "payment_methods_count": {
    "card": 1,
    "ach": 0
  },
  "created_at": "2026-11-05T18:16:18Z",
  "updated_at": "2026-11-05T18:16:18Z",
  "created": true
}

Error Responses

Format: { "error": { "code", "name", "message", "details" } }

StatusErrorWhen
400missing_required_parametersMissing or invalid field (see error.details) or location_id missing.
400customer_contact_requiredSend email or phone.
422invalid_parameter_valuecustomer_id_external and id_external sent with different values.
403developer_scope_forbiddenlocation_id outside your scope.

Path Params
string
required
Body Params
Response

Language
LoadingLoading…
Response
Click Try It! to start a request and see the response here! Or choose an example:
application/json