Skip to content
Docs
Operation

Create customer

POST/customers
Create a new customer in the organisation. A channel named in X-Ticketlayer-Channel is optional and is recorded as the customer's provenance (an access grant for it and its account); it must be one the caller holds.

Headers

X-Ticketlayer-ChannelstringOptional
Slug of the sales channel to act through. A channel-scoped credential supplies its own channel and this header, when sent, must agree with it. On a read it filters to what that channel sells, at its resolved prices; on a cart it is required; on an order operation it is derived from the order and may only confirm it, never contradict it.
Idempotency-KeystringOptional
Makes the write safe to retry. The first request with a key does the work and its response is stored for 24 hours; a repeat with the same key and the same request (method, path, query, X-Ticketlayer-Channel, TL-Version and body) gets that stored status and body back, marked `Idempotent-Replay: true`, without running again. The key is scoped to your organisation and your credential. The same key with a different request is 422 IDEMPOTENCY_KEY_REUSED; a repeat while the first is still running waits for it, then answers 409 IDEMPOTENT_REQUEST_IN_PROGRESS if it has not finished. Only a 2xx is stored: after an error the key is free again. Omit the header and the request behaves as it always has.

Body

accountIdstringAccount ID that owns this customer
email*string (email)Customer email address (must be unique per organisation)
firstNamestringCustomer first name
lastNamestringCustomer last name
phonestringCustomer phone number
externalIdstringExternal system customer ID
metadataobjectCustom metadata for the customer

Returns

Customer created successfully

Errors

400
Bad Request - Invalid input
401
Unauthorized - Authentication required
403
Forbidden - Insufficient permissions
404
Not Found - Resource not found
500
Internal Server Error

Every error names its code and links to it. All error codes

curl -X POST "https://api.ticketlayer.com/v1/customers" \  -H "Authorization: Bearer tlak_..." \  -H "X-Ticketlayer-Org: your-org-slug" \  -H "Content-Type: application/json" \  -d '{    "accountId": "acc_xyz789",    "email": "customer@example.com",    "firstName": "John",    "lastName": "Doe",    "phone": "+44 7700 900000",    "externalId": "ext_cust_12345",    "metadata": {      "loyaltyTier": "gold",      "signupSource": "web"    }  }'
Response 201
{
  "customer": {
    "id": "cus_abc123",
    "organisationId": "org_xyz789",
    "accountId": "acc_xyz789",
    "email": "customer@example.com",
    "firstName": "John",
    "lastName": "Doe",
    "phone": "+44 7700 900000",
    "externalId": "ext_cust_12345",
    "isBlocked": false,
    "blockedAt": null,
    "blockedReason": null,
    "metadata": {
      "loyaltyTier": "gold"
    },
    "createdAt": "2024-01-15T10:30:00Z",
    "updatedAt": "2024-01-20T14:45:00Z"
  }
}

Try it in test mode

Body
Account ID that owns this customer
Customer email address (must be unique per organisation)
Customer first name
Customer last name
Customer phone number
External system customer ID
Custom metadata for the customer