Customers are the people who’ve purchased tickets in your account. A customer record is created on the first paid order; subsequent orders attach to the same record (matched by email).

Use this endpoint to sync your buyer list to a CRM, mailing list, or analytics tool.

GET /admin/customers

Returns customers for your account, with aggregate stats.

curl -H "Authorization: Bearer your-token-here" \
  -H "Accept: application/json" \
  https://app.usetix.io/admin/customers

Query parameters:

Parameter Description
period One of today, week, month, year, all. Filters customers by when the customer record was created. Defaults to all (no time restriction). The period applies only to the current request.
event_slug Only customers who bought at least one ticket to this event.
query Free-text search across email, name, and company.
marketing_only 1 to return only customers who opted into marketing.

Response:

{
  "customers": [
    {
      "id": 17,
      "email": "jane@example.com",
      "name": "Jane Doe",
      "company": null,
      "total_spent": { "amount": "126.00", "currency": "EUR" },
      "marketing_consent": true,
      "marketing_consent_at": "2026-04-22T12:34:50Z",
      "created_at": "2026-04-22T12:34:50Z"
    }
  ],
  "stats": {
    "customer_count": 1,
    "total_spent": { "amount": "126.00", "currency": "EUR" }
  }
}

GET /admin/customers/:id

Returns a single customer along with all their paid orders.

curl -H "Authorization: Bearer your-token-here" \
  -H "Accept: application/json" \
  https://app.usetix.io/admin/customers/17

Response:

{
  "id": 17,
  "email": "jane@example.com",
  "name": "Jane Doe",
  "company": null,
  "total_spent": { "amount": "126.00", "currency": "EUR" },
  "marketing_consent": true,
  "marketing_consent_at": "2026-04-22T12:34:50Z",
  "created_at": "2026-04-22T12:34:50Z",
  "orders": [
    {
      "public_id": "abcd1234efgh5678",
      "order_code": "7K3Q9D2A",
      "display_number": "7K3Q-9D2A",
      "status": "paid",
      "customer_name": "Jane Doe",
      "customer_email": "jane@example.com",
      "total": { "amount": "42.00", "currency": "EUR" },
      "payment_provider": "stripe",
      "paid_at": "2026-04-22T12:34:50Z",
      "created_at": "2026-04-22T12:34:00Z",
      "item_count": 2,
      "attribution": {}
    }
  ]
}

The orders array uses the same shape as the orders endpoint.

Customer interactions

Use the nested interactions resource to keep a factual CRM timeline for a customer. Reading requires a read token; creating an interaction requires a write token.

GET /admin/customers/:customer_id/contacts

Returns interactions newest first. The endpoint uses cursor pagination with limit (default 50, maximum 100) and the opaque page value returned as pagination.next_page.

{
  "contacts": [
    {
      "id": 91,
      "customer_id": 17,
      "event_slug": "spring-showcase",
      "order_id": "abcd1234efgh5678",
      "kind": "email_sent",
      "note": "Asked for the missing menu choice.",
      "occurred_at": "2026-04-23T09:15:00Z",
      "creator": { "id": 4, "name": "Sam Organizer" },
      "created_at": "2026-04-23T09:15:02Z",
      "updated_at": "2026-04-23T09:15:02Z",
      "editable": true
    }
  ],
  "pagination": {
    "total_count": 1,
    "limit": 50,
    "next_page": null
  }
}

GET /admin/customers/:customer_id/contacts/:id returns one interaction in the same shape.

POST /admin/customers/:customer_id/contacts

Records an interaction that actually happened. kind is one of email_sent, email_received, phone_call_made, phone_call_received, in_person, or note. An internal note is part of the timeline but does not count as contacting the customer.

curl -X POST \
  -H "Authorization: Bearer your-write-token-here" \
  -H "Content-Type: application/json" \
  https://app.usetix.io/admin/customers/17/contacts \
  -d '{
    "event_slug": "spring-showcase",
    "order_public_id": "abcd1234efgh5678",
    "customer_contact": {
      "kind": "email_sent",
      "note": "Asked for the missing menu choice."
    }
  }'

event_slug, order_public_id, and occurred_at are optional. The referenced order must belong to the customer. A successful request returns 201 Created, the interaction JSON, and a Location header.

Customer fields

Field Type Notes
id integer Internal numeric ID. Path parameter.
email string Lowercased, normalized email. Uniquely identifies a customer within an account.
name string | null Buyer’s name as entered at checkout.
company string | null Optional company / organization.
total_spent.amount string Lifetime spend across paid orders, as a decimal string. Refunded amounts subtract.
total_spent.currency string ISO 4217 code (your account currency).
marketing_consent boolean true if the customer opted into marketing emails at any checkout.
marketing_consent_at string | null ISO 8601 UTC of when consent was given. null if never given.
created_at string ISO 8601 UTC of when this customer record was created (first paid order).

Correct or delete an interaction

PATCH /admin/customers/:customer_id/contacts/:id requires a write token:

{
  "customer_contact": {
    "note": "Corrected call summary",
    "kind": "phone_call_received",
    "occurred_at": "2026-09-08T12:00:00Z"
  }
}

All three fields are optional for updates; omitted fields remain unchanged. The customer, creator, event and order cannot be reassigned. A successful update returns the interaction with 200 OK; invalid values return 422 with errors.

DELETE /admin/customers/:customer_id/contacts/:id requires a write token and permanently removes the interaction, returning 204 No Content.

Interaction responses include updated_at (ISO 8601 UTC) and editable. Automatically recorded announcement deliveries have editable: false; attempts to edit or delete them return 403. Manual email and call logs remain editable. Read-only tokens cannot update or delete entries (401). Records outside the account or specified customer return 404.

Co-organizers must supply an assigned event_slug and the customer’s order_public_id (order code); only contacts attached to that exact event and order are accessible for edits and deletion.