Skip to main content

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

FieldTypeRequiredDescription
event_idstringYesEvent ID from the Discovery API
section_namestringYesSection name from the Sections API
quantityintegerYesNumber of tickets requested
section_name_displaystringNoHuman-readable section name returned in section endpoint
row_namestringNoRow name from the Rows API
row_name_displaystringNoHuman-readable row name returned in row endpoint
face_valuenumberNoFace value of the tickets in USD
seat_startstringNoFirst seat number in the requested range
seat_endstringNoLast seat number in the requested range
general_admissionbooleanNotrue if the section is General Admission, otherwise false
is_view_restrictedbooleanNotrue if the seats have an obstructed or restricted view
restriction_detailstringNoShort description of the view restriction
restrictionsarray of stringsNoList of restrictions defined in Available Restrictions
user_metadataobjectNoCustomer details stored transiently alongside the quote to facilitate ticket transfer — does not create a TBB account
user_metadata.first_namestringNoCustomer's first name
user_metadata.last_namestringNoCustomer's last name
user_metadata.emailstringNoCustomer's email address
user_metadata.phone_numberstringNoCustomer's phone number in E.164 format (e.g. +15551234567)

Available Restrictions

ListDescription
Limited or Obstructed ViewView may be partially blocked
Wheelchair AccessibleAccessible for wheelchair users
Wheelchair OnlyReserved only for wheelchair users
21 and Over SectionOnly for guests aged 21+
Side or Rear ViewViewing angle is from side or behind
Limited Leg RoomReduced leg space
Alcohol-Free SectionNo alcohol allowed in this area
OtherMiscellaneous 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

FieldDescription
quote_idUnique quote identifier — required to create an order
event_idEvent ID tied to this quote
event_nameDisplay name of the event
section_nameSection name used for the quote
row_nameRow Name used for the quote
quantityNumber of tickets quoted
offer_pricePrice per ticket in USD
total_priceTotal price for all tickets (offer_price × quantity)
exp_dtUTC datetime when this quote expires
statusAlways 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_at and check it before submitting an order
  • If your quote expires, call POST /v1/quotes again 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

ScenarioHTTP StatusError Code
Missing or invalid Bearer token401UNAUTHORIZED
Token expired401TOKEN_EXPIRED
Quote not found404QUOTE_NOT_FOUND
Payout payment not configured403PAYOUT_METHOD_NOT_CONFIGURED
Invalid event ID404EVENT_NOT_FOUND
Invalid section or row404SECTION_NOT_FOUND
Quantity exceeds available422INSUFFICIENT_QUANTITY
Event date has passed422EVENT_EXPIRED
Invalid restriction values provided in request422VALIDATION_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:

Create Order