v1 · Partner API

API Documentation

The Ticket Pulse Partner API lets you integrate our ticketing platform directly into your website or application. Create orders, retrieve event and ticket data, and manage ticket personalisation — all from your own platform.

Base URL https://ticket-pulse.com/tp-api
Getting started

Authentication

Every request must include your private API key as a query string parameter named key. There are no request headers required.

Example — authenticated request
GET https://ticket-pulse.com/tp-api/events?key=YOUR_PRIVATE_KEY
Your private API key is available in the Ticket Pulse seller dashboard under Settings → Website integrations. Treat it like a password — never expose it in client-side code.

Authentication errors

ResponseCause
403 Unauthorized The key parameter is missing, empty, or does not match any account.

Error handling

The API uses standard HTTP status codes. Error responses return a plain-text body with a short description of the problem.

StatusMeaning
200 OKRequest succeeded.
400 Bad RequestA required parameter is missing or has an invalid value.
401 UnauthorizedThe resource was not found or the caller is not permitted to access it.
403 ForbiddenAuthentication failed or the authenticated account cannot access the resource.
404 Not FoundThe requested resource does not exist.
All API requests are logged. Repeated authentication failures may result in your API key being suspended.
Events

Get all events

Returns every event belonging to the authenticated account, including child events (sub-dates) and all associated ticket types.

GET /tp-api/events

Query parameters

ParameterTypeDescription
keystring required Your private API key.

Response 200

application/json · array of event objects
[
  {
    "id":         12,
    "name":       "Summer Festival 2025",
    "city":       "Amsterdam",
    "start_date": 1753920000,    // Unix timestamp, nullable
    "end_date":   1754006400,
    "price":      "29.95",
    "stock":      500,
    "status":     1,
    "tickets": [
      {
        "id":      45,
        "name":    "General Admission",
        "stock":   400,
        "price":   29.95,
        "status":  1,
        "date":    1753920000,   // Unix timestamp, nullable
        "enabled": true
      }
    ],
    "children": [               // sub-events / multi-day dates
      {
        "id":                    13,
        "name":                  "Day 1 — Saturday",
        "status":                1,
        "stock":                 250,
        "price":                 "15.00",
        "featured":              false,
        "tickets":               [ /* same structure as above */ ],
        "manage_price_per_ticket": true,
        "manage_stock_per_ticket": true,
        "start_date":            1753920000,
        "end_date":              1753963200,
        "event_params":          {},
        "password":              null,
        "thumbnail":             "event-13.jpg",
        "location":              "Vondelpark",
        "deleted_at":            null
      }
    ]
  }
]

Get events by user

Returns a summary of every event that a specific external user has purchased tickets for.

GET /tp-api/users/{userId}/events

Path parameters

ParameterTypeDescription
userIdinteger required The external user ID from your platform (e.g. WooCommerce user ID).

Query parameters

ParameterTypeDescription
keystringrequiredYour private API key.

Response 200

application/json · array
[
  {
    "id":         12,
    "name":       "Summer Festival 2025",
    "start_date": "2025-07-31T18:00:00+00:00"
  }
]

Error responses

StatusBodyCause
404 External user has no orders No orders were found for the given external user ID.

Get tickets by event

Returns all tickets for a specific event that belong to a given external user. Includes personalisation details for each ticket.

GET /tp-api/events/{eventId}/tickets

Path parameters

ParameterTypeDescription
eventIdintegerrequiredThe Ticket Pulse event ID.

Query parameters

ParameterTypeDescription
keystringrequiredYour private API key.
wp_user_idintegerrequiredThe external user ID.

Response 200

application/json · array of ticket objects
[
  {
    "id":               "a3f9b",  // ticket reference — use this as ticket_id in other calls
    "event_name":       "Summer Festival 2025",
    "event_start_date": "2025-07-31T18:00:00+00:00",
    "start_date":       "2025-07-31T18:00:00+00:00",
    "order_id":         "TP-00123",
    "name":             "General Admission",
    "first_name":       "Jane",
    "last_name":        "Doe",
    "email":            "[email protected]",
    "phone":            "+31612345678",
    "status":           2,
    "is_deprecated":    false
  }
]

Ticket status values

ValueMeaning
1Created — awaiting personalisation.
2Active — personalised and valid for entry.
3Scanned in.
4Scanned out.
5Cancelled.

Error responses

StatusBodyCause
404Event not foundNo event with the given ID exists.
400Wordpress user not specifiedThe wp_user_id parameter is missing.

Personalise tickets

Assigns attendee details to one or more tickets for an event. Once all tickets for that event within an order are personalised, the PDF is automatically generated and emailed to the customer.

POST /tp-api/events/{eventId}/tickets/personalize
Tickets with a status other than 1 (Created) are silently skipped. You can safely re-submit the full ticket list without risk of overwriting already-active tickets.

Path parameters

ParameterTypeDescription
eventIdintegerrequiredThe Ticket Pulse event ID.

Query parameters

ParameterTypeDescription
keystringrequiredYour private API key.
wp_user_idintegerrequiredThe external user ID who owns the order.

Request body

application/json
{
  "tickets": [
    {
      "ticket_id":  "a3f9b",            // string, required — ticket reference (id field)
      "first_name": "Jane",             // string, required
      "last_name":  "Doe",              // string, required
      "email":      "[email protected]", // string, required
      "tel":        "+31612345678"      // string, required
    }
  ]
}

Response 200

application/json
{
  "tickets":         [ /* echo of the submitted tickets array */ ],
  "all_personalized": true  // true when all tickets for this event in the order are done
}

Error responses

StatusBodyCause
404Event not found ({id})No event with the given ID exists.
400Wordpress user not specifiedwp_user_id is missing.
400Tickets not specifiedRequest body is missing the tickets array.
400User unauthorized for ticketThe API key's account does not own the ticket's order.
400Wordpress user unauthorized for ticketwp_user_id does not match the order's external user.
Tickets

Get single ticket

Returns a temporary signed download URL for the QR code image of a single ticket. Use this URL to display or download the ticket in your own interface.

GET /tp-api/users/get-ticket

Query parameters

ParameterTypeDescription
keystringrequiredYour private API key.
wp_user_idintegerrequiredThe external user ID.
ticket_idstringrequiredThe ticket reference (id field from the tickets endpoint).

Response 200

application/json · signed URL string
"https://ticket-pulse.com/files/tickets/ticket_a3f9b.png?secret=eyJ0..."
The signed URL expires after 1 hour. Always fetch a fresh URL when you need to present the ticket — do not cache it.

Error responses

StatusBodyCause
400Wordpress user not specifiedwp_user_id is missing.
400Ticket id not specifiedticket_id is missing.
401Ticket not foundNo ticket with the given reference exists.
401Not allowed to see this ticketThe ticket does not belong to the specified external user.
401File not foundThe ticket QR image has not been generated yet (ticket may not be active).
Orders

Create order

Creates a new order in Ticket Pulse and links it to your external platform's order. Stock is reserved for each ticket type. If you pass a tp_order_id, the existing order's status is updated to Processing instead of creating a new order.

POST /tp-api/orders/create

Query parameters

ParameterTypeDescription
keystringrequiredYour private API key.

Request body

application/json
{
  // Pass tp_order_id to update an existing order to Processing.
  // Omit it to create a new order — order_lines is then required.
  "tp_order_id":    123,                     // integer, optional

  "wp_order_id":    "wc_456",                // string, optional — your platform's order ID
  "wp_user_id":     789,                     // integer, optional — your platform's user ID
  "payment_method_title": "iDEAL",           // string, optional
  "payment_method": "ideal",                 // string, optional
  "ip_address":     "1.2.3.4",               // string, optional
  "currency":       "EUR",                   // string, optional
  "order_total":    59.90,                   // float, optional
  "date_created":   "2025-04-11T10:00:00Z",  // string, optional — ISO 8601
  "date_paid":      "2025-04-11T10:01:00Z",  // string, optional — ISO 8601
  "locale":         "nl",                    // string, optional
  "my_tickets_url": "https://yoursite.com/my-tickets", // string, optional

  "billing_information": {
    "first_name":  "Jane",
    "last_name":   "Doe",
    "address":     "Kerkstraat 1",
    "city":        "Amsterdam",
    "postal_code": "1234 AB",
    "country":     "NL",
    "email":       "[email protected]",
    "phone":       "+31612345678"
  },

  "order_lines": [                           // required when creating a new order
    {
      "tp_event_ticket_id": 45,              // integer, optional — Ticket Pulse ticket type ID
      "name":          "General Admission",  // string, required
      "quantity":      2,                    // integer, required
      "product_id":    101,                  // integer, required — your platform's product ID
      "order_item_type": "line_item",        // string, required — see type values below
      "unit_price":    29.95                 // float, required
    }
  ]
}

Order line types

order_item_type valueMaps to
line_itemTicket / digital item
shippingShipping fee
feeSurcharge
couponCoupon / discount
any other valueOther

Response 200

text/plain
Order created

Error responses

StatusBodyCause
404Incorrect requestRequest body is empty or not valid JSON.
404Ticket Pulse order does not existtp_order_id was provided but no matching order was found.
403You do not have access to this orderThe order belongs to a different account.
404No order lines specifiedCreating a new order requires at least one entry in order_lines.

Get order tickets

Returns a temporary signed download URL for the complete ticket PDF for an order. The PDF includes all personalised tickets for that order.

GET /tp-api/orders/get-ticket

Query parameters

ParameterTypeDescription
keystringrequiredYour private API key.
wp_user_idintegerrequiredThe external user ID.
order_idstringrequiredThe Ticket Pulse order reference (order_id field from the tickets endpoint).

Response 200

application/json · signed URL string
"https://ticket-pulse.com/files/tickets/order_123_tickets?secret=eyJ0..."
The signed URL expires after 1 hour. Always fetch a fresh URL when you need to present the PDF — do not cache it.

Error responses

StatusBodyCause
400Wordpress user not specifiedwp_user_id is missing.
401Order not specifiedorder_id is missing.
401Order not foundNo order with the given reference exists.
401Not allowed to see this orderThe order does not belong to the specified external user.
401File not foundThe ticket PDF has not been generated yet — all tickets for each event in the order must be personalised first.