Skip to content

REST API Reference

REST API Reference

Tickets Please provides a full REST API for managing events, venues, organizers, tickets, attendees, cart, checkout, and refunds. All endpoints follow WordPress REST API conventions and are accessible under two namespaces:

  • tribe/events/v1 — Events, venues, organizers, and documentation.
  • tribe/tickets/v1 — Tickets, attendees, cart, checkout, refunds, and buyer-facing endpoints.

Base URL: https://your-site.com/wp-json/

Authentication

Three authentication methods are supported:

  • WordPress nonce — For logged-in users making requests from JavaScript. Include the X-WP-Nonce header with a nonce generated by wp_create_nonce( 'wp_rest' ).
  • Basic Auth — Username and password sent via HTTP Basic Authentication. Requires the Basic Auth plugin or HTTPS.
  • Application Passwords — WordPress 5.6+ built-in feature. Generate application passwords from the user profile screen. Sent via Basic Auth header.

Read endpoints (GET) for public data do not require authentication. Write endpoints (POST, PUT, DELETE) require authentication and the appropriate capability.


Events

Namespace: tribe/events/v1

List Events

GET /wp-json/tribe/events/v1/events

Parameters:

ParameterTypeDefaultDescription
pageint1Page number for pagination.
per_pageint10Events per page (max 100).
start_datestringFilter events starting after this date (Y-m-d or Y-m-d H:i:s).
end_datestringFilter events ending before this date.
searchstringSearch events by title and content.
categoriesstringComma-separated category term IDs.
tagsstringComma-separated tag term IDs.
featuredboolFilter to featured events only.
venueintFilter by venue post ID.
organizerintFilter by organizer post ID.
statusstringpublishPost status: publish, draft, pending.

Response:

[
{
"id": 123,
"title": "Spring Bird Count",
"start_date": "2026-04-15 09:00:00",
"end_date": "2026-04-15 17:00:00",
"venue_id": 45,
"organizer_ids": [67],
"featured": true,
"all_day": false,
"cost": "$25",
"status": "scheduled",
"url": "https://example.com/event/spring-bird-count/",
"image": "https://example.com/wp-content/uploads/bird-count.jpg"
}
]

Auth: None for published events. edit_tribe_events for drafts and pending.

Get Single Event

GET /wp-json/tribe/events/v1/events/{id}

Returns a single event object. Same fields as the list response plus full content, excerpt, and meta data.

Auth: None for published. read_tribe_event for private/draft.

Create Event

POST /wp-json/tribe/events/v1/events

Request body:

{
"title": "Fall Migration Walk",
"start_date": "2026-09-20 08:00:00",
"end_date": "2026-09-20 11:00:00",
"venue_id": 45,
"organizer_ids": [67],
"content": "Join us for a morning bird walk...",
"featured": false,
"status": "publish"
}

Auth: edit_tribe_events required.

Update Event

PUT /wp-json/tribe/events/v1/events/{id}

Accepts the same fields as create. Only include fields you want to change.

Auth: edit_tribe_events (own) or edit_others_tribe_events (others’).

Delete Event

DELETE /wp-json/tribe/events/v1/events/{id}

Moves the event to trash. Add ?force=true to permanently delete.

Auth: delete_tribe_events required.


Venues

Namespace: tribe/events/v1

Endpoints

MethodURLAuth
GET/wp-json/tribe/events/v1/venuesNone (public)
GET/wp-json/tribe/events/v1/venues/{id}None (public)
POST/wp-json/tribe/events/v1/venuesedit_tribe_venues
PUT/wp-json/tribe/events/v1/venues/{id}edit_tribe_venues
DELETE/wp-json/tribe/events/v1/venues/{id}delete_tribe_venues

Create/update body:

{
"title": "Seward Park Audubon Center",
"address": "5902 Lake Washington Blvd S",
"city": "Seattle",
"state": "WA",
"zip": "98118",
"country": "US",
"phone": "206-652-2444",
"website": "https://sewardpark.audubon.org"
}

Organizers

Namespace: tribe/events/v1

Endpoints

MethodURLAuth
GET/wp-json/tribe/events/v1/organizersNone (public)
GET/wp-json/tribe/events/v1/organizers/{id}None (public)
POST/wp-json/tribe/events/v1/organizersedit_tribe_organizers
PUT/wp-json/tribe/events/v1/organizers/{id}edit_tribe_organizers
DELETE/wp-json/tribe/events/v1/organizers/{id}delete_tribe_organizers

Create/update body:

{
"title": "Seattle Audubon Society",
"phone": "206-523-4483",
"website": "https://seattleaudubon.org",
"email": "info@seattleaudubon.org"
}

Tickets

Namespace: tribe/tickets/v1

List Tickets

GET /wp-json/tribe/tickets/v1/tickets

Parameters:

ParameterTypeDescription
event_idintFilter tickets by parent event.
typestringFilter by ticket type: paid, rsvp, free.

Response:

[
{
"id": 200,
"title": "General Admission",
"event_id": 123,
"type": "paid",
"price": "25.00",
"capacity": 100,
"sold": 42,
"remaining": 58,
"start_sale_date": "2026-01-01 00:00:00",
"end_sale_date": "2026-04-14 23:59:59",
"sku": "BC-2026-GA"
}
]

Get Single Ticket

GET /wp-json/tribe/tickets/v1/tickets/{id}

Create Ticket

POST /wp-json/tribe/tickets/v1/tickets

Request body:

{
"title": "VIP Access",
"event_id": 123,
"type": "paid",
"price": "75.00",
"capacity": 25,
"start_sale_date": "2026-01-01 00:00:00",
"end_sale_date": "2026-04-14 23:59:59",
"description": "Includes early access and a guided tour."
}

Auth: edit_tec_tc_tickets required.

Update Ticket

PUT /wp-json/tribe/tickets/v1/tickets/{id}

Auth: edit_tec_tc_tickets required.

Delete Ticket

DELETE /wp-json/tribe/tickets/v1/tickets/{id}

Auth: delete_tec_tc_tickets required.


Attendees

Namespace: tribe/tickets/v1

List Attendees

GET /wp-json/tribe/tickets/v1/attendees

Parameters:

ParameterTypeDescription
event_idintFilter by event.
ticket_idintFilter by ticket type.
statusstringFilter by status: pending, confirmed, cancelled, refunded, checked_in.

Response:

[
{
"id": 500,
"full_name": "Jane Smith",
"email": "jane@example.com",
"event_id": 123,
"ticket_id": 200,
"status": "confirmed",
"checked_in": false,
"security_code": "ABC123XY"
}
]

Auth: edit_tec_tc_attendees required (attendee data is not public).

Get Single Attendee

GET /wp-json/tribe/tickets/v1/attendees/{id}

Auth: edit_tec_tc_attendees required.

Create Attendee

POST /wp-json/tribe/tickets/v1/attendees

Request body:

{
"full_name": "John Doe",
"email": "john@example.com",
"event_id": 123,
"ticket_id": 200,
"status": "confirmed"
}

Auth: edit_tec_tc_attendees required.

Update Attendee

PUT /wp-json/tribe/tickets/v1/attendees/{id}

Auth: edit_tec_tc_attendees required.

Delete Attendee

DELETE /wp-json/tribe/tickets/v1/attendees/{id}

Auth: delete_tec_tc_attendees required.


Cart

Namespace: tribe/tickets/v1

The cart endpoints manage the buyer’s ticket selection before checkout.

Get Cart

GET /wp-json/tribe/tickets/v1/cart

Returns the current user’s cart contents. Cart is identified by session or authentication.

Response:

{
"items": [
{
"ticket_id": 200,
"ticket_title": "General Admission",
"event_id": 123,
"event_title": "Spring Bird Count",
"quantity": 2,
"price": "25.00",
"subtotal": "50.00"
}
],
"total": "50.00",
"expires_at": "2026-02-11T15:30:00+00:00"
}

Auth: None (cart identified by session).

Add to Cart

POST /wp-json/tribe/tickets/v1/cart

Request body:

{
"ticket_id": 200,
"quantity": 2
}

Auth: None.

Update Cart Item

PUT /wp-json/tribe/tickets/v1/cart

Request body:

{
"ticket_id": 200,
"quantity": 3
}

Set quantity to 0 to remove an item.

Auth: None.

Clear Cart

DELETE /wp-json/tribe/tickets/v1/cart

Removes all items from the cart.

Auth: None.


Checkout

Namespace: tribe/tickets/v1

Process Checkout

POST /wp-json/tribe/tickets/v1/checkout

Processes the current cart into an order. Creates attendee records and initiates payment.

Request body:

{
"buyer_name": "Jane Smith",
"buyer_email": "jane@example.com",
"payment_method": "stripe",
"payment_token": "tok_abc123",
"attendees": [
{
"ticket_id": 200,
"full_name": "Jane Smith",
"email": "jane@example.com"
},
{
"ticket_id": 200,
"full_name": "John Smith",
"email": "john@example.com"
}
]
}

Response:

{
"order_id": 800,
"status": "completed",
"total": "50.00",
"attendee_ids": [500, 501],
"confirmation_url": "https://example.com/order-confirmation/?order=800&token=xyz"
}

Auth: None (guest checkout supported). Authenticated users have orders linked to their account.


Refund Requests

Namespace: tribe/tickets/v1

List Refund Requests

GET /wp-json/tribe/tickets/v1/refund-requests

Auth: edit_tec_tc_orders required.

Response:

[
{
"id": 900,
"order_id": 800,
"attendee_id": 500,
"event_id": 123,
"amount": "25.00",
"reason": "Cannot attend due to schedule conflict.",
"status": "pending",
"buyer_name": "Jane Smith",
"buyer_email": "jane@example.com"
}
]

Create Refund Request

POST /wp-json/tribe/tickets/v1/refund-requests

Request body:

{
"order_id": 800,
"attendee_id": 500,
"amount": "25.00",
"reason": "Cannot attend due to schedule conflict."
}

Auth: Authenticated buyer or edit_tec_tc_orders.

Update Refund Request

PUT /wp-json/tribe/tickets/v1/refund-requests/{id}

Request body:

{
"status": "approved",
"admin_notes": "Approved per refund policy."
}

Auth: edit_tec_tc_orders required.


My Tickets

Namespace: tribe/tickets/v1

Get My Tickets

GET /wp-json/tribe/tickets/v1/my-tickets

Returns all tickets (attendee records) belonging to the authenticated user.

Response:

[
{
"attendee_id": 500,
"event_id": 123,
"event_title": "Spring Bird Count",
"event_date": "2026-04-15 09:00:00",
"ticket_id": 200,
"ticket_title": "General Admission",
"status": "confirmed",
"security_code": "ABC123XY",
"checked_in": false
}
]

Auth: Authentication required. Returns only the current user’s tickets.


Guest Order Lookup

Namespace: tribe/tickets/v1

Get Guest Order

GET /wp-json/tribe/tickets/v1/guest-order?token={token}

Allows unauthenticated buyers to look up their order using the unique token from their confirmation email.

Parameters:

ParameterTypeDescription
tokenstringThe order access token from the confirmation email.

Response: Same format as a single order with attendee details.

Auth: None (token-based access).


API Documentation

Namespace: tribe/events/v1

Get API Documentation

GET /wp-json/tribe/events/v1/doc

Returns auto-generated documentation for all available endpoints, including parameter descriptions and accepted values.

Auth: None.


Pagination

List endpoints return pagination headers:

HeaderDescription
X-WP-TotalTotal number of items.
X-WP-TotalPagesTotal number of pages.

Use page and per_page parameters to navigate through results.

Error Responses

Errors follow the WordPress REST API error format:

{
"code": "rest_forbidden",
"message": "Sorry, you are not allowed to do that.",
"data": {
"status": 403
}
}

Common error codes:

CodeStatusMeaning
rest_forbidden403Missing required capability.
rest_post_invalid_id404Resource not found.
rest_invalid_param400Invalid parameter value.
rest_cannot_create403Cannot create resource (e.g., capacity full).

Common Questions

Does the API support CORS? WordPress REST API respects the rest_pre_serve_request filter. For cross-origin requests, add CORS headers using a plugin or custom code.

Can I use the API with JavaScript fetch? Yes. For logged-in users, include the nonce in your request:

fetch( '/wp-json/tribe/events/v1/events', {
headers: { 'X-WP-Nonce': wpApiSettings.nonce }
} );

The wpApiSettings.nonce value is available when wp_enqueue_script( 'wp-api' ) is loaded.

Is there rate limiting on the API? Tickets Please does not implement API rate limiting. Use a WordPress security plugin or server-level rate limiting if needed.

Can I filter API responses to include only specific fields? Use the _fields parameter (WordPress REST API standard): ?_fields=id,title,start_date.

Are webhook/push notifications available? Not natively. Use the tickets_please_attendee_created, tickets_please_order_completed, and other action hooks to trigger outbound webhook requests to external services.

Does the API support batch requests? WordPress 5.6+ supports batch requests via POST /wp-json/batch/v1. You can include multiple Tickets Please API calls in a single batch request.

Next Steps