> ## Documentation Index
> Fetch the complete documentation index at: https://docs.tickable.io/llms.txt
> Use this file to discover all available pages before exploring further.

# Creating orders

> Issue tickets or send a payment link from your own system

`POST /orders` issues tickets the way the Tickable dashboard does for guests and reservations. It needs the `orders.write` scope.

## Free tickets

A guest list, a prize, a partner: the tickets are issued at once and mailed to the buyer.

```bash theme={null}
curl -X POST https://api.tickable.io/orders \
  -H "Authorization: Bearer tk_live_YOUR_API_KEY" \
  -H "Idempotency-Key: guest-jane-2026-06-15" \
  -H "Content-Type: application/json" \
  -d '{
    "event_id": "550e8400-e29b-41d4-a716-446655440000",
    "lines": [{ "ticket_type_id": "b2c4e6a8-1234-4f5a-9c8d-0e1f2a3b4c5d", "amount": 2 }],
    "buyer": { "name": "Jane Doe", "email": "jane@example.com" }
  }'
```

Pass `"send_mail": false` to issue them without a mail; the response's `order_url` is the buyer's page with the tickets.

## Payment link

With `"payment": "link"` the order keeps its places until `expires_at` (default 24 hours, at most 30 days) and waits for payment. The buyer gets a mail with the link, and the response carries the same link as `payment_url`: send people there from your own site, Tickable's hosted page handles iDEAL, Bancontact and card. The service fee is added there, just like in the shop. Not paid in time, the order is removed and its places go back on sale.

```json theme={null}
{
  "event_id": "550e8400-e29b-41d4-a716-446655440000",
  "timeslot_id": "d4e5f6a7-8901-4b2c-3d4e-5f6a7b8c9d0e",
  "lines": [{ "ticket_type_id": "b2c4e6a8-1234-4f5a-9c8d-0e1f2a3b4c5d", "amount": 2 }],
  "buyer": { "name": "Jane Doe", "email": "jane@example.com", "language": "en" },
  "payment": "link",
  "expires_at": "2026-06-10T18:00:00Z"
}
```

Once it is paid you receive the `order.confirmed` webhook, as for every order.

## Good to know

* `timeslot_id` may be left out when the event has exactly one timeslot.
* Capacity and the timeslot's ticket types are checked in one transaction, so two requests cannot take the last place. A full timeslot returns `409` with code `sold_out`.
* Sale windows do not apply, the same as for tickets issued from the dashboard. Check [availability](https://docs.tickable.io/guides/availability.md) first if your site should follow them.
* Always send an `Idempotency-Key`: a retry after a timeout then returns the same order instead of issuing a second one.
* The user who created the API key needs the right to issue tickets in the organization.


This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.