/tickets API

Usage

This API can be used to fetch all the tickets that belong to an organizer or an event, along with useful data for each ticket.

It can also be used repeatedly with a parameter to only fetch the new & updated tickets after a given date & time.

Endpoint URL

GET https://api.shotgun.live/tickets

Authentication

If you are a partner, add your key in the URL query string

If you are an organizer, add your token either as a header (Authorization: Bearer [token]) or in the query string as token

Query string parameters

key

required

description

organizer_id

yes

• if you are a partner, this organizer must have granted you access

• if you are the organizer, it must match your token’s payload

   

event_id

no

if you only want the tickets for a given event

include_cohosted_events

no

set to 1 or true to include events of which you are a cohost

after

no

ISO date to only return tickets updated after it

(can also be a tuple of [date]_[ticket id] to specify from which ticket to start when multiple tickets have the exact same update date)

   

Ordering & pagination

Tickets are ordered by update date/time ascending, then ID ascending, which means you get the oldest ones first, and the newest ones in the last page.

Pages contain at most 100 tickets, and if the page is full, the result contains a link to the next page for your convenience (in pagination.next).

You don’t get the total count in the response, because by the time you reach the last page, it can evolve.

Example URL

https://api.shotgun.live/tickets?**token**=xxx.xxx.xxx&**organizer_id**=173027&**event_id**=410006&**include_cohosted_events**=1

Response shape

The response uses JSON and is an object containing your params, the pagination infos, and a list of tickets in data, so it looks like this:

Tickets

Each ticket object has these fields:

{

  « params »: {

          « organizer_id »: 173027,

               « event_id »: 410006,

               « include_cohosted_events »: true

        },

        « pagination »: {

               « next »: « <https://api.shotgun.live/tickets?token=xxx.xxx.xxx&organizer_id=173027&event_id=410006&after=2025-05-20+12%3A47%3A26.622033_69246828> »

        },

        « data »: [

          // the list of tickets (see specs below)

        ]

}

key

type

nullable

description

example

ticket_id

integer

no

the ID of the ticket in our database

123456

ticket_scan_code

string

no

the QR code or barcode value

« 42564997260325 »

ticket_scanned_at

string (ISO datetime)

yes

when the ticket was scanned, or null if not scanned (or if scanned by an external provider)

« 2025-02-21 17:29:52.462881 »

ticket_updated_at

string (ISO datetime)

no

last time the ticket was updated, or its creation date & time otherwise

« 2025-02-21 17:29:52.462881 »

ticket_canceled_at

string (ISO datetime)

yes

if the ticket was canceled, this is set to the cancelation date & time, otherwise it’s null

null

ticket_status

string (enum)

no

valid , resold, refunded, canceled, payment_plan_pending, pending_approval or rejected

« valid »

ticket_seating

object

yes

for seated events, this contains the seat info:
• id (string): the area name, e.g. « Gradins »
• type (string): either « Booth », « GeneralAdmissionArea », « Seat » or « Table »
• entrance (string): the entrance name, e.g. « Porte G » (or null)
• section (string): the section name, e.g. « Gradin F » (or null)
• row (string): the row name, e.g. « 13 » (or null)
• seat (string): the seat number, e.g. « 42 »

null

user_id

integer

yes

the ID of the ticket owner (Shotgun user) if any

46824

deal_id

integer

no

the organizer event ticket (product) ID

12345678

deal_sub_category

string

yes

the category title of tickets if any

« Friday »

deal_title

string

no

the name of the ticket

« Early Bird »

deal_channel

string

no

the sales channel, which can be either:
• online for regular tickets sold on our platform (Shotgun app or website)
• invitation for invitations (actual ones using
• venue for tickets sold through the Drawer app
• distributor for imported tickets
• duplicata for friend tickets (when one ticket is for more than one person),
• offline for tickets sold through the organizer own channels
• pass_culture for French tickets sold on the Pass Culture website
• reseller (legacy)

« online »

deal_visibilities

array of strings

no

can contain one or more of these values:
• public for regular tickets
• private for tickets sold through a private link
• promoters for tickets sold by promoters
• xpress_door for tickets sold at the door using the Xpress door QR code

« public »

deal_price

integer

no

the ticket price in cents

3999

deal_service_fee

integer

no

the organizer fees in cents

99

deal_user_service_fee

integer

no

the user fees in cents

0

deal_producer_cost

integer

no

for France only (« Droits de Location Producteur » aka “DL prod” in cents), 0 anywhere else

0

deal_vat_rate

float

no

the applicable VAT rate

0.055

order_id

integer

no

the ID of the order (which can contain more than one ticket)

123456

currency

string (enum)

no

the 3-letters order currency code (« eur », « usd » or « brl »)

« eur »

payment_method

string

yes

null for imported tickets, or one of these values for Shotgun orders:
• card for online orders paid by card
• pix for orders paid via PIX (Brazil)
• physical_card for orders paid onsite by physical card (at the event or at a promoter’s venue) (or physical phone via Apple Pay/Google Pay)
• cash for orders paid onsite by cash (at the event or at a promoter’s venue)
• mb_way for orders paid online using MB WAY (Portugal)
• pass_culture for orders paid via PassCulture (France)
• boleto for orders paid via Boleto (Brazil, legacy)
• bancontact for orders paid via Bancontact (Belgium)
• installments for orders paid through a payment plan
• or another custom value set by the Drawer app (e.g. check etc)

« card »

utm_source

string

yes

null for imported tickets, or one of these values for Shotgun orders:
• shotgun for orders initiated from our app or website
• direct for undetermined sources
• or the origin name for other sources, e.g. instagram etc

« shotgun »

utm_medium

string

yes

« website », « app » or « widget » for online orders
null otherwise (Drawer app, imported tickets, etc)

« app »

ordered_at

string (ISO datetime)

no

the order creation date

« 2025-02-20 17:29:52.462881 »

event_id

integer

no

the ID of the event

123456

event_start_time

string (ISO datetime)

no

the event start time

« 2025-06-07 18:00:00 »

event_end_time

string (ISO datetime)

no

the event end time

« 2025-06-09 16:00:00 »

event_created_at

string (ISO datetime)

no

the event creation date

« 2025-02-10 17:29:52.462881 »

event_published_at

string (ISO datetime)

yes

the event publication date

« 2025-02-11 17:29:52.462881 »

event_launched_at

string (ISO datetime)

yes

the ticketing launch date (can be different from event_published_at in case of pre-registration phase)

« 2025-02-15 17:29:52.462881 »

event_canceled_at

string (ISO datetime)

yes

the event cancelation date if the organizer cancels it

null

contact_id

integer

yes

the ID of the contact (ticket holder)

123456789

contact_email

string

yes

the contact email address

« a@shotgun.live »

contact_phone

string

yes

the contact phone number

null

contact_first_name

string

yes

the contact first name

« Antoine »

contact_last_name

string

yes

the contact last name

« Rousseau »

contact_gender

string (enum)

yes

« female », « male », « other »

null

contact_company_name

string

yes

the contact company name

« Shotgun »

contact_birthday

string (YYYY-MM-DD)

yes

the contact birthdate (outside Brazil, only the birth year is asked: the day and month are set to O1)

« 1985-01-01 »

contact_newsletter_optin

boolean

yes

true if the contact is subscribed to the organizer’s newsletter, false if opted-out, null if unset

null

contact_country

string

yes

the contact location’s country name

« France »

contact_postal_code

string

yes

the contact location’s post code (zip code in US)

« 31000 »

contact_locality

string

yes

the contact location’s city or town name

« Toulouse »