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-Nonceheader with a nonce generated bywp_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/eventsParameters:
| Parameter | Type | Default | Description |
|---|---|---|---|
page | int | 1 | Page number for pagination. |
per_page | int | 10 | Events per page (max 100). |
start_date | string | — | Filter events starting after this date (Y-m-d or Y-m-d H:i:s). |
end_date | string | — | Filter events ending before this date. |
search | string | — | Search events by title and content. |
categories | string | — | Comma-separated category term IDs. |
tags | string | — | Comma-separated tag term IDs. |
featured | bool | — | Filter to featured events only. |
venue | int | — | Filter by venue post ID. |
organizer | int | — | Filter by organizer post ID. |
status | string | publish | Post 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/eventsRequest 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
| Method | URL | Auth |
|---|---|---|
GET | /wp-json/tribe/events/v1/venues | None (public) |
GET | /wp-json/tribe/events/v1/venues/{id} | None (public) |
POST | /wp-json/tribe/events/v1/venues | edit_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
| Method | URL | Auth |
|---|---|---|
GET | /wp-json/tribe/events/v1/organizers | None (public) |
GET | /wp-json/tribe/events/v1/organizers/{id} | None (public) |
POST | /wp-json/tribe/events/v1/organizers | edit_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/ticketsParameters:
| Parameter | Type | Description |
|---|---|---|
event_id | int | Filter tickets by parent event. |
type | string | Filter 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/ticketsRequest 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/attendeesParameters:
| Parameter | Type | Description |
|---|---|---|
event_id | int | Filter by event. |
ticket_id | int | Filter by ticket type. |
status | string | Filter 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/attendeesRequest 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/cartReturns 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/cartRequest body:
{ "ticket_id": 200, "quantity": 2}Auth: None.
Update Cart Item
PUT /wp-json/tribe/tickets/v1/cartRequest body:
{ "ticket_id": 200, "quantity": 3}Set quantity to 0 to remove an item.
Auth: None.
Clear Cart
DELETE /wp-json/tribe/tickets/v1/cartRemoves all items from the cart.
Auth: None.
Checkout
Namespace: tribe/tickets/v1
Process Checkout
POST /wp-json/tribe/tickets/v1/checkoutProcesses 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-requestsAuth: 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-requestsRequest 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-ticketsReturns 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:
| Parameter | Type | Description |
|---|---|---|
token | string | The 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/docReturns auto-generated documentation for all available endpoints, including parameter descriptions and accepted values.
Auth: None.
Pagination
List endpoints return pagination headers:
| Header | Description |
|---|---|
X-WP-Total | Total number of items. |
X-WP-TotalPages | Total 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:
| Code | Status | Meaning |
|---|---|---|
rest_forbidden | 403 | Missing required capability. |
rest_post_invalid_id | 404 | Resource not found. |
rest_invalid_param | 400 | Invalid parameter value. |
rest_cannot_create | 403 | Cannot 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
- Hooks Reference — Hooks that fire when API operations create or modify data.
- Meta Keys Reference — Understand the data fields returned in API responses.
- User Roles & Permissions — Capability requirements for each endpoint.