Create Quote
A quote is a time-limited pricing offer between you and Ticket Buyback. It locks in the price for a specific section, row, and quantity combination. The quote_id returned is required to create an order.
Authentication Required
This endpoint requires a valid Bearer token and a configured Payout payment method on your TBB account. See Authentication and Payout Setup.
Endpoint
POST /v1/quotes
Request
Headers
Authorization: Bearer <token>
Content-Type: application/json
Body
{
"event_id": "string",
"section_name": "string",
"section_name_display": "string",
"row_name": "string",
"row_name_display": "string",
"quantity": 1,
"face_value": 0,
"seat_start": "string",
"seat_end": "string",
"general_admission": true,
"is_view_restricted": true,
"restriction_detail": "string",
"restrictions": [
"string"
],
"user_metadata": {
"first_name": "First name",
"last_name": "Last name",
"email": "first.last@example.com",
"phone_number": "+15551234567"
}
}
Field Definitions
| Field | Type | Required | Description |
|---|---|---|---|
event_id | string | Yes | Event ID from the Discovery API |
section_name | string | Yes | Section name from the Sections API |
quantity | integer | Yes | Number of tickets requested |
section_name_display | string | No | Human-readable section name returned in section endpoint |
row_name | string | No | Row name from the Rows API |
row_name_display | string | No | Human-readable row name returned in row endpoint |
face_value | number | No | Face value of the tickets in USD |
seat_start | string | No | First seat number in the requested range |
seat_end | string | No | Last seat number in the requested range |
general_admission | boolean | No | true if the section is General Admission, otherwise false |
is_view_restricted | boolean | No | true if the seats have an obstructed or restricted view |
restriction_detail | string | No | Short description of the view restriction |
restrictions | array of strings | No | List of restrictions defined in Available Restrictions |
user_metadata | object | No | Customer details stored transiently alongside the quote to facilitate ticket transfer — does not create a TBB account |
user_metadata.first_name | string | No | Customer's first name |
user_metadata.last_name | string | No | Customer's last name |
user_metadata.email | string | No | Customer's email address |
user_metadata.phone_number | string | No | Customer's phone number in E.164 format (e.g. +15551234567) |
Available Restrictions
| List | Description |
|---|---|
| Limited or Obstructed View | View may be partially blocked |
| Wheelchair Accessible | Accessible for wheelchair users |
| Wheelchair Only | Reserved only for wheelchair users |
| 21 and Over Section | Only for guests aged 21+ |
| Side or Rear View | Viewing angle is from side or behind |
| Limited Leg Room | Reduced leg space |
| Alcohol-Free Section | No alcohol allowed in this area |
| Other | Miscellaneous or unspecified restriction |
cURL Example
cURL
curl -X POST https://api.ticketbuyback.com/partner/v1/quotes \
-H "Authorization: Bearer <token>" \
-H "Content-Type: application/json" \
-d '{
"event_id": "5496123",
"section_name": "101",
"row_name": "A",
"quantity": 2
}'
JavaScript Example
JavaScript
const response = await fetch(
"https://api.ticketbuyback.com/partner/v1/quotes",
{
method: "POST",
headers: {
Authorization: `Bearer ${token}`,
"Content-Type": "application/json",
},
body: JSON.stringify({
event_id: "9bab6d6a4b5641931cab9fd942e81242",
section_name: "ORCH",
row_name: "A",
quantity: 2,
}),
}
);
const { data } = await response.json();
const quoteId = data.quote_id;
const expiresAt = data.expires_at;
Response — 201 Created
{
"success": true,
"data": {
"quote_id": "Vf293dzpvmHmsjCAfNTlvA==",
"event_id": "9bab6d6a4b5641931cab9fd942e81242",
"event_name": "El Paso Chihuahuas at Round Rock Express",
"section_name": "ORCH",
"row_name": "A",
"quantity": 2,
"offer_price": 9.62,
"total_price": 19.24,
"exp_dt": "2026-03-15T02:14:12.690182",
"status": "pending"
},
"meta": {
"request_id": "7310e6d1-a2be-4262-b816-507e34a5ca4b",
"timestamp": "2026-03-15T01:14:14Z"
}
}
Response Fields
| Field | Description |
|---|---|
quote_id | Unique quote identifier — required to create an order |
event_id | Event ID tied to this quote |
event_name | Display name of the event |
section_name | Section name used for the quote |
row_name | Row Name used for the quote |
quantity | Number of tickets quoted |
offer_price | Price per ticket in USD |
total_price | Total price for all tickets (offer_price × quantity) |
exp_dt | UTC datetime when this quote expires |
status | Always pending on creation |
Quote TTL & Expiry
Quote Expiry
Quotes are valid for a for 1 hour. Once expires_at has passed, the quote can no longer be used to create an order, and a new quote must be generated.
- Always store
expires_atand check it before submitting an order - If your quote expires, call
POST /v1/quotesagain with the same parameters - A quote can only be used once — it is consumed when an order is created
JavaScript — Check expiry before ordering
const expiresAt = new Date(data.expires_at);
const now = new Date();
if (now >= expiresAt) {
// Quote expired — request a new one
throw new Error("Quote has expired. Please request a new quote.");
}
// Safe to proceed with order creation
Error Scenarios
| Scenario | HTTP Status | Error Code |
|---|---|---|
| Missing or invalid Bearer token | 401 | UNAUTHORIZED |
| Token expired | 401 | TOKEN_EXPIRED |
| Quote not found | 404 | QUOTE_NOT_FOUND |
| Payout payment not configured | 403 | PAYOUT_METHOD_NOT_CONFIGURED |
| Invalid event ID | 404 | EVENT_NOT_FOUND |
| Invalid section or row | 404 | SECTION_NOT_FOUND |
| Quantity exceeds available | 422 | INSUFFICIENT_QUANTITY |
| Event date has passed | 422 | EVENT_EXPIRED |
| Invalid restriction values provided in request | 422 | VALIDATION_ERROR |
Full Quote Creation Flow
JavaScript — Full quote creation
async function createQuote({ eventId, sectionName, rowName, quantity }) {
const response = await fetch(
"https://api.ticketbuyback.com/partner/v1/quotes",
{
method: "POST",
headers: {
Authorization: `Bearer ${token}`,
"Content-Type": "application/json",
},
body: JSON.stringify({
event_id: eventId,
section_name: sectionName,
row_name: rowName, // optional
quantity,
}),
}
);
if (!response.ok) {
const { error } = await response.json();
throw new Error(`Quote failed: ${error.code} — ${error.message}`);
}
const { data } = await response.json();
return {
quoteId: data.quote_id,
expiresAt: data.expires_at,
unitPrice: data.pricing.unit_price,
subtotal: data.pricing.subtotal,
};
}
Next Step
With a valid quote_id, convert it into a confirmed order: