NAV
Shell Example

Introduction

Welcome to the Ticketbutler API! This is a REST API and provide access to the Ticketbutler platform from a code perspective.

The default version is v3.

Using this API it is possible to interact with the platform for listing events and creating orders. The API is JSON-REST based with conventional GET, POST, PUT and DELETE actions.

See examples of using the API using CURL in the right hand side.

Remark: In all examples you’ll need to replace the domain name test.ticketbutler.io with the domain name for your Ticketbutler platform.

Any questions you might have, please reach out to our tech support team via email [email protected].

Authentication

To authorize, use this code:

# With shell, you can just pass the correct header with each request
curl -X GET https://test.ticketbutler.io/api/v3/ping/  \ 
  -H 'Authorization: Token ticketbutler-auth-token'

Make sure to replace ticketbutler-auth-token with your API key.

For clients to allow access to the API a token key is used for authentication.

The API expects the API key to be included in all API requests to the server in a header that looks like the following:

Authorization: Token ticketbutler-auth-token

You find your Ticketbutler API key via the organiser dashboard. Login and go to:

“General settings > API access”

If you don’t already have one please go to https://you.ticketbutler.io/en/create/ and follow the signup process.

Events

The following section describe how to interact with the events. The example responses provided are simplified, where fields not described might be removed or renamed in the future.

Customisation of events is currently done by the Ticketbutler support team, therefore, if you have an event where you want something specific configures, please get in touch on [email protected]. Events can be tailored to multiple ways e.g. only paid by vouchers or by invoice, using a connected Stripe account, using custom order email templates, using a custom ticket template.

Get All Events

curl -X GET https://test.ticketbutler.io/api/v3/events/  \ 
  -H 'Authorization: Token ticketbutler-auth-token'

The above command returns JSON structured like this:


[
  {
    "uuid":"d7d02d945c8a46d1bf9112b6a29b53a6",
    "title":"Weekend hack",
    "start_date":"2019-06-29T07:45:00+02:00",
    "images":[],
    "url":"https://test.ticketbutler.io/da/e/weekend-hack/",
    "address": { ... },
    "is_expired":false,
    "price_min":0.0,
    "price_max":0.0,
    "currency":"DKK",
    "description":"",
    "summary":""
 },
 {
    "uuid":"887d9eb1bd1d400490deead624269c13",
    "title":"Beer tasting",
    "start_date":"2019-06-30T13:45:00+02:00",
    "images":[],
    "url":"https://test.ticketbutler.io/da/e/beer-tasting/",
    "address": { ... },
    "is_expired":false,
    "price_min":0.0,
    "price_max":0.0,
    "currency":"DKK",
    "description":"This is rich html describing the event",
    "summary":"This is a short summary of the event"
  }
] 

This endpoint retrieves all events.

HTTP Request

GET https://test.ticketbutler.io/api/v3/events/

Query Parameters

Parameter Default Description
old false If set to true, the result will also include expired events.

Create an event

curl -X POST https://test.ticketbutler.io/api/v3/events/ \
  -H 'Auhorization: Token ticketbutler-auth-token'
  -H 'Content-Type: application/json'
  -d @new_event.json

The above command uses object new_event.json with JSON structured like this:

{
	"title": "Testing event",
	"start_date": "2019-11-06T09:45:00+01:00",
  "end_date": "2019-11-06T18:00:00+01:00",
	"ticket_types": [
		{
			"title": "Ticket",
			"price": 400.00,
			"amount_total": 100
		}
	],
	"is_members_only": false,
	"team": "19ed41947c2c4511a334fa94edd2cbb9",
	"eventsettings": {},
	"address": {
    "first_name": "John",
    "last_name": "Doe",
    "email": "[email protected]",
		"phone": "42424242"
	},
	"description": "This is an event descriptiopn"
}

The above command returns JSON structured like this:

{
  "uuid": "263c931867d04f62a2a26641e6605558",
  "title": "Testing event",
  "start_date": "2019-11-06T09:45:00+01:00",
  "end_date": "2019-11-06T18:00:00+01:00",
  "ticket_types": [
    {
      "uuid": "7d06db6942b54a1cb27e5ef609e941ce",
      "title": "Ticket",
      "price": 400,
      "amount": 100,
      "amount_total": 100,
      "is_members_only": false
    }
  ],
  "eventsettings": {
    "refund_email_text": "",
    "reminder_email": true,
    "reminder_email_text": "",
    "ticket_limit": 20,
    "ticket_limit_members_only": 1,
    "order_ticket_limit": 0,
    "is_no_show_fee": true,
    "show_waiting_list": false,
    "event_ticket_limit_sold_out": false,
    "invoice_payment_only": false,
    "invoice_payment_optional": false,
    "organizer_absorb_fees": false,
    "fee_type": "attendee",
    "event_type": "on-show",
    "vat_exempt": false,
    "event_ticket_limit_amount_initially": 0,
    "has_event_ticket_limit": false,
    "barcode_active": false,
    "has_end_date": false,
    "ticket_email_text": null
  },
  "team": "Default",
  "address": {
    "first_name": "",
    "last_name": "",
    "title": "",
    "venue": null,
    "business_name": "",
    "cvr": "",
    "street": "",
    "street_2": "",
    "city": "",
    "postcode": "",
    "country": "",
    "phone": "42424242",
    "email": "",
    "language": ""
  },
  "pin": "6053",
  "is_members_only": false,
  "description": "This is an event description",
  "summary": ""
}

HTTP Request

POST https://test.ticketbutler.io/api/v3/events/

JSON Payload

title: public title for event.

start_date: event start datetime object

end_date (optional): event end datetime object

ticket_types: A list of ticket types in a format:

[ { "title": "Ticket", "price": 400.00, "amount_total": 100 } ]

is_members_only: true/false if the event is only available for members of the team

team: team name or uuid

eventsettings: extra event settings, options are as follows:

Field Type Description Default
refund_email_text string Text that will be sent on refund null
reminder_email boolean Send email reminders to attendees before event false
reminder_email_text string Text that will be sent to attendees before the event null
ticket_limit integer Maximum amount of tickets to be selected on purchase 9
ticket_limit_members_only integer Maximum amount of tickets to be selected for members 9
ticket_email_text string Text that will be sent alongside tickets null

address: Address for the event. Possible fields are:

Field Type
first_name string
last_name string
title string
venue string
business_name string
cvr string
street string
street_2 string
city string
postcode string
country string
phone string
email string
language string

description: Add an event description of the event. This can optionally be formatted as HTML.

Get Specific Event

curl -X GET https://test.ticketbutler.io/api/v3/events/df388ddd483c49e48e2e9ed7382592a3/  \ 
  -H 'Authorization: Token ticketbutler-auth-token'

The above command returns JSON structured like this:


{
  "title":"Weekend hack",
  "uuid":"887d9eb1bd1d400490deead624269c13",
  "url":"https://test.ticketbutler.io/da/e/weekend-hack/",
  "description":"",
  "address":{ ... },
  "has_discount_code":false,
  "has_ticket_sold":true,
  "images":[],
  "is_free_event":true,
  "is_expired":false,
  "pin_str":"6124",
  "price_range":{"min":0.0,"max":0.0},
  "start_date":"2019-06-30T13:45:00+02:00",
  "ticket_types":[
    {
      "uuid":"5025811e9d8346379d1db8a527909d0b",
      "title":"free",
      "price":0.0,
      "active":true,
      "amount":996,
      "amount_sold":4,
      "amount_total":1000,
      "is_tickets_sold":true,
      "price_verbose":"gratis",
      "is_free":true,
      "sold_out":false,
      "is_members_only":false,
      "start_date":null
    }
  ],
  "eventsettings":{
    "reminder_email":true,
    "ticket_limit":9,
    "order_ticket_limit":0,
    "is_no_show_fee":false,
    "show_waiting_list":true,
    "invoice_payment_only":false,
    "invoice_payment_optional":false,
    "organizer_absorb_fees":false,
    "fee_type":"attendee",
    "event_type":"fee",
    "vat_exempt":false,
    "end_date_provided":false,
    "barcode_active":false
  },
  "team_uuid":"531a80891a844fda9068be2c58905121",
  "team":"Emil"
}

This endpoint retrieves detailed info on a specific event.

HTTP Request

GET https://test.ticketbutler.io/api/v3/events/<UUID>/

Query Parameters

Parameter Description
UUID The unique identifier of the event.

Update event

curl -X POST https://test.ticketbutler.io/api/v3/events/ \
  -H 'Authorization: Token ticketbuler-auth-token'
  -H 'Content-Type: application/json'
  -d @event_data.json

The above command uses object event_data.json with JSON structured like this:

{
  "title": "Testing event",
  "start_date": "2019-11-06T09:45:00+01:00",
  "end_date": "2019-11-06T18:00:00+01:00",
  "ticket_types": [ ... ],
  "eventsettings": { ... },
  "team": "Default",
  "address": { ... },
  "is_members_only": false,
  "description": "This is an event description",
  "summary": ""
}

HTTP Request

POST https://test.ticketbutler.io/api/v3/events/<event_uuid>/

Query parameters

event_uuid: unique event identifier, hex format

JSON payload

Ticket types is a mandatory field! If not sent, ticket types will be deleted. Other fields are optional. Refer to the descriptions above for each field explanations.

Note: when updating the total amount of tickets in ticket_types, use amount instead of amount_total

Important: provide pk to edit the ticket, otherwise it is going to be overriden or deleted.

ticket_types structure:

{
  "pk": 13,
  "title": "Free ticket",
  "price": 0,
  "active": true,
  "amount": 100,
  "amount_sold": 0,
  "amount_total": 100,
  "is_members_only": false,
  "description": null,
  "start_date": null,
  "sort_id": null
}

Delete event

curl -X DELETE https://test.ticketbutler.io/api/v3/events/<event_uuid>/ \
  -H 'Authorization: Token ticketbutler-auth-token'
  -H 'Content-Type: application/json'
  -d @data.json

The above command uses object data.json with JSON structured like this:

{
  "delete_reason": "A valid reason goes here"
}

HTTP Request

DELETE https://test.ticketbutler.io/api/v3/events/<event_uuid>/

Query parameters

event_uuid: unique event identifier, hex format

JSON payload

delete_reason: Text that will be sent when sending out event cancelled emails. Min lenght=5

Ticket types

The following section describe the use of ticket types.

Get event ticket types

curl https://test.ticketbutler.io/api/v3/events/01d46daed83b41e3b71f3790a37549e0/ticket-types/
    -H 'Authorization: Token ticketbutler-auth-token' \
    -H 'Content-Type: application/json'

The above command returns json formatted as following:

[
    {
        "pk": 18,
        "uuid": "b5ebf80886c44b88842a7df6e1a329f9",
        "title": "Free ticket",
        "price": 0,
        "active": true,
        "amount": 100,
        "amount_sold": 0,
        "amount_total": 100,
        "constraint_definition": null,
        "is_tickets_sold": false,
        "invoice_price": null,
        "price_verbose": "gratis",
        "is_free": true,
        "sold_out": false,
        "is_members_only": false,
        "description": null,
        "start_date": null,
        "fee": 3.9,
        "sort_id": null
    }
]

Request

GET https://test.ticketbutler.io/api/v3/events/<uuid>/ticket-types/

URL parameters

uuid: Unique event identifier in hex format.

Create Ticket Type

curl -X POST https://test.ticketbutler.io/api/v3/events/01d46daed83b41e3b71f3790a37549e0/ticket-types/ \
    -H 'Authorization: Token ticketbutler-auth-token' \
    -H 'Content-Type: application/json'
    -d @new_ticket_type.json

The above command required the new_ticket_type.json file structures as:

{
    "title": "Sample ticket",
    "price": 0,
    "amount_total": 100,
    "is_members_only": false,
}

The above command returns the following response:

{
    "uuid": "6a547b3c0bde434aa595bfb37b4f2851",
    "title": "Sample ticket",
    "price": 0,
    "amount": 100,
    "amount_total": 100,
    "is_members_only": false,
    "is_free": true,
    "amount_sold": 0
}

HTTP Request

POST https://test.ticketbutler.io/api/v3/events/<event_uuid>/ticket-types/

URL Parameters

event_uuid: unique event identifier the ticket will be attached to

JSON Payload

title: naming for the ticket type

price: the price the ticket will be sold for. Send 0 to make it free.

amount_total: amount of tickets available in total

is_members_only: is ticket available only for team members. (optional, default=false)

Get Specific Ticket Type

curl https://test.ticketbutler.io/api/v3/events/01d46daed83b41e3b71f3790a37549e0/ticket-types/01d46daed83b41e3b71f3790a37549e0/ \
    -H 'Authorization: Token ticketbutler-auth-token' \
    -H 'Content-Type: application/json'

The above comand returns the following response:

{
    "uuid": "01d46daed83b41e3b71f3790a37549e0",
    "title": "Sample ticket",
    "price": 0,
    "amount": 100,
    "amount_total": 100,
    "is_members_only": false,
    "is_free": true,
    "amount_sold": 0
}

HTTP Request

GET https://test.ticketbutler.io/api/v3/events/<event_uuid>/ticket_types/<ticket_type_uuid>/

URL Parameters

event_uuid: unique event identifier

ticket_type_uuid: unique ticket type identifier

Update Ticket Type

curl -X PATCH https://test.ticketbutler.io/api/v3/events/01d46daed83b41e3b71f3790a37549e0/ticket-types/01d46daed83b41e3b71f3790a37549e0/
    -H 'Authorization: Token ticketbutler-auth-token' \
    -H 'Content-Type: application/json'
    -d @ticket_type.json

The above command requires ticket_type.json file structured as:

{
    "title": "Best ticket",
    "price": 0,
    "amount": 50,
}

And it returns the following result:

{
    "uuid": "01d46daed83b41e3b71f3790a37549e0",
    "title": "Best ticket",
    "price": 0,
    "amount": 50,
    "amount_total": 51,
    "is_members_only": false,
    "is_free": true,
    "amount_sold": 1
}

HTTP Response

GET https://test.ticketbutler.io/api/v3/events/<event_uuid>/ticket-types/<ticket_type_uuid>/

URL Parameters

event_uuid: unique event identifier

ticket_type_uuid: unique ticket type identifier

JSON Payload

title: naming for the ticket type (optional)

price: the price the ticket will be sold for. Send 0 to make it free. If a ticket has been sold, it cannot be updated (optional)

amount_total: amount of tickets in total. Has to be more than sold. (optional)

amount: amountn of tickets available. Has to be more than sold. (optional)

is_members_only: is ticket available only for team members. (optional, default=false)

Note: If you provide amount, the amount_total will be automatically calculcated. If both fields provided, amount_total will be ignored.

Response

The request returns updated ticket_type object.

Delete Ticket type

curl -X DELETE https://test.ticketbutler.io/api/v3/events/01d46daed83b41e3b71f3790a37549e0/ticket-types/01d46daed83b41e3b71f3790a37549e0/
    -H 'Authorization: Token ticketbutler-auth-token' \
    -H 'Content-Type: application/json'

HTTP Request

DELETE https://test.ticketbutler.io/api/v3/events/<event_uuid>/ticket-types/<ticket_type_uuid>/

URL Parameters

event_uuid: unique event identifier

ticket_type_uuid: unique ticket type identifier

Response

This API endpoints returns either empty 200 OK response or 400 BAD REQUEST with explanation.

Data Collection

The following section describe the use of data collection for your events.

Questions are seperated into collections and there are two types of collections:

Collecting data

Please refer to order data collection or ticket data collection.

Get Ticket Type Questions

curl https://test.ticketbutler.io/api/v3/events/887d9eb1bd1d400490deead624269b22/ticket-type-questions/ \
    -H 'Authorization: Token ticketbutler-auth-token'

The above command will produce the following JSON response:

{
    "uuid": "dd7147bf99744728ba0a7bae6fb13f58",
    "active": true,
    "questions": [
        {
            "uuid": "907f76ba4a2d444ab700aa942df751f4",
            "sort_id": 0,
            "heading": "Hello world",
            "active": true,
            "required": true,
            "variation": "TEXT",
            "choices": []
        },
        {
            "uuid": "ccb2d0a70a3e41248561c3535a96d62e",
            "sort_id": 1,
            "heading": "Choice",
            "active": true,
            "required": true,
            "variation": "SELECT",
            "choices": [
                {
                    "uuid": "7bfaca169164478b8bad88bda1737747",
                    "sort_id": 0,
                    "label": "Blah",
                    "description": null
                },
                {
                    "uuid": "5d218d8067be4272b85e27a7ea96e2ff",
                    "sort_id": 1,
                    "label": "Bah",
                    "description": null
                }
            ]
        }
    ]
}

HTTP Request

GET https://test.ticketbutler.io/api/v3/events/<event_uuid>/ticket-type-questions/

URL Parameters

event_uuid: Unique event identifier in hex format.

Get Purchase Questions

curl https://test.ticketbutler.io/api/v3/events/887d9eb1bd1d400490deead624269b22/purchase-questions/ \
    -H 'Authorization: Token ticketbutler-auth-token'

The above command will produce a result structured as follows:

{
    "uuid": "89c0c918bf1a42fa906b75b4fc7c9878",
    "active": true,
    "questions": [
        {
            "uuid": "e43d798c2c954493bafebeea357ff35b",
            "sort_id": 0,
            "heading": "Guess a number",
            "active": true,
            "required": false,
            "variation": "NUMBER",
            "choices": []
        }
    ]
}

HTTP Request

GET https://test.tickdtbutler.io/api/v3/events/<event_uuid>/purchase-questions/

URL Parameters

event_uuid: Unique event identifier in hex format.

Create/Update Ticket Type Questions

curl -X POST https://test.ticketbutler.io/api/v3/events/887d9eb1bd1d400490deead624269b22/ticket-type-questions/ \
    -H 'Authorization: Token ticketbutler-auth-token' \
    -H 'Content-Type: application/json' \
    -d questions.json 

The above command requires questions.json file structures as:

{
    "questions": [
        {
            "uuid":"ba47cf1896944d879300e7611f539afa",
            "sort_id":1,
            "heading":"Already existing question",
            "active":true,
            "required":false,
            "variation":"TEXT",
            "choices":[]
        },
        {
            "new":true,
            "variation":"TEXT",
            "sort_id":1,
            "ticket_type":"all",
            "heading":"New question"
        }
    ]
}

Example output:

{
    "questions": [
        {
            "uuid": "ba47cf1896944d879300e7611f539afa",
            "sort_id": 1,
            "heading": "Already existing question",
            "active": true,
            "required": false,
            "variation": "TEXT",
            "choices": []
        },
        {
            "uuid": "1bcc415f8de046b6b8e8468e67d0601e",
            "sort_id": 1,
            "heading": "New question",
            "active": true,
            "required": false,
            "variation": "TEXT",
            "choices": []
        }
    ]
}

Use the same request to update/create new questions.

HTTP Request

POST https://test.ticketbutler.io/api/v3/events/<event_uuid>/ticket-type-questions/

URL Parameters

event_uuid: Unique event identifier in hex format.

JSON Payload

Always provide all the previous questions with their UUIDs, otherwise they will be removed!

uuid (optional): unique question identifier. If ommited, the question will be removed and replaced with a new one.

sort_id: position the question will appear when collecting data

heading: the displayed question when collecting data from the user

active: should the question be asked

variation: question type. Choices can be:

choices: if selected variation is either SELECT or SELECT_MULTIPLE provide the options here in the format:

[
    {
        "sort_id": 0,
        "label": "Option",
        "uuid": "9edeb863aa6e464aa4e03ce4a8bda976"
    }
]

UUID is not a mandatory field. If options already exists, but they are not provided in the array, they will be removed!

Get Specific Question

curl https://test.ticketbutler.io/api/v3/events/887d9eb1bd1d400490deead624269b22/questions/1bcc415f8de046b6b8e8468e67d0601e/ \
    -H 'Authorization: Token ticketbutler-auth-token'

The above command will return the following:

{
    "uuid": "1bcc415f8de046b6b8e8468e67d0601e",
    "sort_id": 1,
    "heading": "New Question",
    "active": false,
    "required": false,
    "variation": "TEXT",
    "choices": []
}

HTTP Request

GET https://test.ticketbutler.io/api/v3/events/<event_uuid>/questions/<question_uuid>/

URL Parameters

event_uuid: Unique event identifier in hex format.

question_uuid: Unique question identifier in hex format.

Update Specific Question

curl -X PATCH https://test.ticketbutler.io/api/v3/events/887d9eb1bd1d400490deead624269b22/questions/1bcc415f8de046b6b8e8468e67d0601e/ \
    -H 'Authorization: Token ticketbutler-auth-token'
    -H 'Content-Type: application/json'
    -d @updated_question.json

The above command requires updated_question.json file structured as:

{
    "sort_id": 2,
    "heading": "Change Question Heading",
    "active": true,
    "required": true,
    "variation": "TEXT",
    "choices": []
}

Example output:

{
    "uuid": "1bcc415f8de046b6b8e8468e67d0601e",
    "sort_id": 2,
    "heading": "Change Question Heading",
    "active": true,
    "required": true,
    "variation": "TEXT",
    "choices": []
}

HTTP Request

PATCH https://test.ticketbutler.io/api/v3/events/<event_uuid>/questions/<question_uuid>/

URL Parameters

event_uuid: unique event identifier in hex format

question_uuid: unique question identifier in hex format

JSON Payload

Please refer to updating questions in bulk

Delete specific question

curl -X DELETE https://test.ticketbutler.io/api/v3/events/887d9eb1bd1d400490deead624269b22/questions/1bcc415f8de046b6b8e8468e67d0601e/ \
    -H 'Authorization: Token ticketbutler-auth-token'

The above command will return empty 200 OK response if request was successful.

To see more about adding/updating/deleting questions, please refer to updating questions in bulk

HTTP Request

DELETE https://test.ticketbutler.io/api/v3/events/<event_uuid>/questions<question_uuid>/

URL Parameters

event_uuid: unique event identifier in hex format

question_uuid: unique question identifier in hex format

Orders

In general to place an order you first need to know what event you’re attaching the order, for this see the Events endpoints. The order placed needs to be paid for, where the payment can be skipped by configuring the event as a free event or a variation of external payments not done directly via Ticketbutler. E.g. an order can be paid for by predefined vouchers (emailed to [email protected]) or an invoice will be send from an external accounting system.

Example flow

The following flow describe how to use the API to create an order where it’s paid for by a voucher. Prior this, an event is creted via the dashboard and the vouchers are uploaded to the event.

  1. Get all events via the API.
  2. Find the UUID of the event you want to place an order in.
  3. With the UUID from 2. get the details for the specific event via the API.
  4. Find the UUID of the ticket type(s) the order should contain.
  5. With the UUID from 4. and order details as an JSON object, place the order via the API.
  6. If everything went well, an email is automatically send to the email in the order details.

This flow is one example on how this can be done via the Ticketbutler API. It is e.g. the same if the event is configured to be free, payment by invoice or Stripe externally.

Create Order

curl -X POST https://test.ticketbutler.io/api/v3/orders/  \
  -H 'Authorization: Token ticketbutler-auth-token' \
  -H "Content-Type: application/json" \
  -d @order_new.json

The above command uses object order_new.json with JSON structured like this:

{
  "event":"887d9eb1bd1d400490deead624269b22",
  "address": {
    "first_name": "John", 
    "last_name": "Doe", 
    "email": "[email protected]",
    "phone": "42424242"
  },
  "ticket_types": [
    { 
      "uuid": "5025811e9d8346379d1db8a332909d0b",
      "amount": 1
    }
  ],
  "external_order_id": "Rdasf32lkj12X"
}

The above command returns JSON structured like this:

{
  "address":{
    "first_name":"John",
    "last_name":"Doe",
    "phone":"42424242",
    "email":"[email protected]"
  },
  "uuid":"8fe33ab1934e46aebbdd2d9ff0a66e41",
  "order_id":"Jca161",
  "external_order_id": "Rdasf32lkj12X",
  "email":"[email protected]",
  "state":"PAID",
  "created":"2019-06-03T01:09:45.615201+02:00",
  "organizer_absorb_fees":false,
  "refunded":false,
  "event":{
    "uuid":"887d9eb1bd1d400490deead624269c13",
    "title":"custom ticket",
    "start_date":"2019-06-30T13:45:00+02:00"
  },
    "ticket_pdf_absolute_url":"https://test.ticketbutler.io/da/purchase/8fe33ab1934e46aebbdd2d9ff0a66e41/tickets-as-pdf/",
    "state_verbose":"PAID"
  }

This endpoint creates an order.

HTTP Request

POST https://test.ticketbutler.io/api/v3/orders/

JSON Payload

event: The UUID of the event to create an order

address: Details on the person creating the order e.g. first name, last name and email.

The address include the following:

{ “first_name”: <STRING>, “last_name”: <STRING>, “email”: <EMAIL>, “phone”: <STRING> (Optional) }

ticket_types: A list of ticket types and amount of each to place for the order.

The is as following:

[{“uuid”: <UUID-STRING>, “amount”: <NUMBER> }]

external_order_id: (Optional) Reference to this order provided externally from this sytem.

RESPONSE

A JSON object with description of the order created.

ERRORS

Errors specific to creating an order are as follows:

Error Code Meaning
400 Insufficient tickets available
400 Insufficient vouchers available
400 Event expired
400 Order details insufficient

The above errors have attached messages in the body and HTTP status codes in the header.

Get a Specific Order

curl -X GET https://test.ticketbutler.io/api/v3/orders/8fe33ab1934e46aebbdd2d9ff0a66e41/  \
  -H 'Authorization: Token ticketbutler-auth-token'

The above command returns JSON structured like this:

{
  "address":{
    "first_name":"John",
    "last_name":"Doe",
    "phone":"42424242",
    "email":"[email protected]"
  },
  "uuid":"8fe33ab1934e46aebbdd2d9ff0a66e41",
  "order_id":"Jca161",
  "email":"[email protected]",
  "state":"PAID",
  "created":"2019-06-03T01:09:45.615201+02:00",
  "organizer_absorb_fees":false,
  "refunded":false,
  "event":{
    "uuid":"887d9eb1bd1d400490deead624269c13",
    "title":"custom ticket",
    "start_date":"2019-06-30T13:45:00+02:00"
  },
    "ticket_pdf_absolute_url":"https://test.ticketbutler.io/da/purchase/8fe33ab1934e46aebbdd2d9ff0a66e41/tickets-as-pdf/",
    "state_verbose":"PAID"
  }

This endpoint retrieves a specific order.

HTTP Request

GET https://test.ticketbutler.io/api/v3/orders/<UUID>/

URL Parameters

Parameter Description
UUID The UUID of the order to retrieve

Get events orders

curl https://test.ticketbutler.io/api/v3/events/887d9eb1bd1d400490deead624269b22/orders/
  -H 'Authorization: Token Token ticketbutler-auth-token' \
  -H 'Content-Type: application/json'

The above command produces the following JSON:

{
  "uuid": "5217f0ee68fb45e5ae56113227ee169b",
  "orders": [
    {
      "uuid": "66903ee51840422e888ad2d318f969d7",
      "order_id": "dZy1",
      "currency": "DKK",
      "order_lines": [
        {
          "uuid": "84e5a220fda84cc9ba1acc570fd658df",
          "discount_total": null,
          "has_ticket_type_date": false,
          "ticket_type_date": "2019-10-21T08:45:00Z",
          "quantity": 3,
          "title": "Free tickets",
          "price": "0.00",
          "total": "0.00",
          "type": "ticket"
        }
      ],
      "state": "PAID",
      "date": "2019-10-14T08:25:08.306841Z",
      "vat_exempt": false,
      "vat_rate": "25",
      "address": {
        "first_name": "First",
        "last_name": "Last Name",
        "email": "[email protected]",
        "phone": "42424242"
      },
        "tickets": [
          {
            "id": 1,
            "uuid": "bd446b152bc543d89d0e8b273ae1f248",
            "external_uuid": null,
            "checked_in": false,
            "ticket_refund": false,
            "full_name": "First Last Name",
            "ticket_type_pk": 3,
            "ticket_type_name": "Free tickets",
            "has_ticket_type_date": false,
            "ticket_type_date": "2019-10-21T08:45:00Z",
            "purchase_uuid": "66903ee51840422e888ad2d318f969d7",
            "email": "[email protected]",
            "questions": []
          },
          {
            "id": 2,
            "uuid": "98327e7b522742df9ce504e016898949",
            "external_uuid": null,
            "checked_in": false,
            "ticket_refund": false,
            "full_name": "First Last Name",
            "ticket_type_pk": 3,
            "ticket_type_name": "Free tickets",
            "has_ticket_type_date": false,
            "ticket_type_date": "2019-10-21T08:45:00Z",
            "purchase_uuid": "66903ee51840422e888ad2d318f969d7",
            "email": "[email protected]",
            "questions": []
          },
          {
            "id": 3,
            "uuid": "e5e30e25ea8a440cb207896418d7c041",
            "external_uuid": null,
            "checked_in": false,
            "ticket_refund": false,
            "full_name": "First Last Name",
            "ticket_type_pk": 3,
            "ticket_type_name": "Free tickets",
            "has_ticket_type_date": false,
            "ticket_type_date": "2019-10-21T08:45:00Z",
            "purchase_uuid": "66903ee51840422e888ad2d318f969d7",
            "email": "[email protected]",
            "questions": []
          }
        ]
    }
  ]
}

This endpoint retrieves all orders made for the event

HTTP Request

GET https://test.ticketbutler.io/api/v3/events/<UUID>/orders/

URL Parameters

Parameter Description
UUID The UUID of the event to retrieve

Update order

curl -X PATCH https://test.ticketbutler.io/api/v3/orders/887d9eb1bd1d400490deead624269b22/ \
  -H 'Authorization: Token ticketbutler-auth-token' \
  -H 'Content-Type: application/json' \
  -d @order_new.json

The above command requires the following .json file.

{
	"address": {
		"first_name": "First",
    "last_name": "Last",
    "title": "Developer",
    "venue": "Ticketbutler",
    "business_name": "Ticketbutler",
    "cvr": "123456",
    "street": "Street name 1",
    "city": "Copenhagen",
    "postcode": 2000,
    "country": "Denmark",
    "phone": "42424242",
    "email": "[email protected]"
	}
}

The above request produces the following result:

{
  "address": {...},
  "uuid": "9572227c20e14c7a9e15c778cfeb3e9a",
  "user": {...},
  "id": 3,
  "identifier": 3,
  "email": "[email protected]",
  "state": "REFUND",
  "created": "2019-10-14T15:02:03.308296+02:00",
  "full_name": "This is awesome Last Name",
  "purchase_is_free": true,
  "organizer_absorb_fees": false,
  "fee_amount": 0,
  "fee_percentage": "0.00",
  "fee_total": "0.00",
  "first_name": "This is awesome",
  "order_id": "dZy3",
  "external_order_id": null,
  "total_and_all_fees_decimal": 0,
  "total_amount": 3,
  "vat_total": "0.00",
  "fee_total_vat": "0.00",
  "send_sms_tickets": false,
  "fee_per_sms": 5,
  "discount_code": null,
  "refund_date": "2019-10-14T15:02:23.112952+02:00",
  "refund_email_send": "2019-10-14T15:02:23.177217+02:00",
  "refund_url": "/api/purchases/9572227c20e14c7a9e15c778cfeb3e9a/refund/",
  "refunded": true,
  "event": {...},
  "ticket_download_url": "/da/purchase/9572227c20e14c7a9e15c778cfeb3e9a/tickets-download/",
  "ticket_download_absolute_url": "http://localhost:8000/da/purchase/9572227c20e14c7a9e15c778cfeb3e9a/tickets-download/",
  "ticket_pdf_url": "/da/purchase/9572227c20e14c7a9e15c778cfeb3e9a/tickets-as-pdf/",
  "ticket_pdf_absolute_url": "http://localhost:8000/da/purchase/9572227c20e14c7a9e15c778cfeb3e9a/tickets-as-pdf/",
  "receipt_as_web_url": "/da/purchase/9572227c20e14c7a9e15c778cfeb3e9a/reciept-as-web/",
  "earliest_date": "2019-10-21T08:45:00Z",
  "customer_id": null,
  "payment_method_id": null,
  "pay_by_invoice": false,
  "state_verbose": "REFUNDED"
}

HTTP Request

PATCH https://test.ticketbutler.io/api/v3/orders/<order_uuid>/

JSON Payload

Send the address component as ilustrated on the right.

Refund an order

curl -X DELETE https://test.ticketbutler.io/api/v3/orders/887d9eb1bd1d400490deead624269b22/ \
  -H 'Authorization: Token ticketbutler-auth-token' \
  -H 'Content-Type: application/json'

The above request produces the following result:

{
  "purchase": {
    "address": {...},
    "uuid": "9c41c64801714b9b8934586131fb3a7b",
    "user": {...},
    "id": 2,
    "identifier": 2,
    "email": "[email protected]",
    "state": "PAID",
    "created": "2019-10-14T11:45:52.291073+02:00",
    "full_name": "Rimvydas Zilinskas",
    "purchase_is_free": true,
    "organizer_absorb_fees": false,
    "fee_amount": 0,
    "fee_percentage": "0.00",
    "fee_total": "0.00",
    "first_name": "Rimvydas",
    "order_id": "dZy2",
    "external_order_id": null,
    "total_and_all_fees_decimal": 0,
    "total_amount": 1,
    "vat_total": "0.00",
    "fee_total_vat": "0.00",
    "send_sms_tickets": false,
    "fee_per_sms": 5,
    "discount_code": null,
    "refund_date": null,
    "refund_email_send": null,
    "refund_url": "/api/purchases/9c41c64801714b9b8934586131fb3a7b/refund/",
    "refunded": false,
    "event": {...},
    "earliest_date": "2019-10-21T08:45:00Z",
    "customer_id": null,
    "payment_method_id": null,
    "pay_by_invoice": false,
    "state_verbose": "PAID"
  },
  "is_refunded": true,
  "is_refundable": true
}

HTTP Request

DELETE https://test.ticketbutler.io/api/v3/orders/<order_uuid>/

URL parameters

order_id: Unique order identifier

Response

If the order has already been refunded you will receive a 400 Bad Request response.

If you do not have sufficient rights, it will return a 401 Unauthorized response.

Collect Order Data

curl -X POST https://test.ticketbutler.io/api/v3/orders/8fe33ab1934e46aebbdd2d9ff0a66e41/questions/ 
  -H 'Authorization: Token ticketbutler-auth-token'
  -H 'Content-Type: application/json'
  -d @data.json

The above command requires data.json file with the following structure:

[
  {
		"uuid": "0b4db2cc5cd341bb909fbef25faa5da1",
		"value": "Girls!"
	},
	{
		"uuid": "e3cf1eafe67940babc77262ae51bbc74",
		"value": ["9600a47e5f4747eab3612ca68ea7a5df"]
	}
]

The above command produces the following result:

{
  "purchase": "0a7d7f04d1b84eb189d813e0f611c90a",
  "answers": [
    {
      "uuid": "6b14536276a2481fa1a0a992dec97b53",
      "question": "0b4db2cc5cd341bb909fbef25faa5da1",
      "variation": "TEXT",
      "question_heading": "Who runs the world",
      "answer_value": "It i!",
      "answered_choices": []
    },
    {
      "uuid": "3e56230222934e07b34970fc0b10427f",
      "question": "e3cf1eafe67940babc77262ae51bbc74",
      "variation": "SELECT_MULTIPLE",
      "question_heading": "We will",
      "answer_value": "",
      "answered_choices": [
        {
          "uuid": "9600a47e5f4747eab3612ca68ea7a5df",
          "choice_heading": "Rock you"
        }
      ]
    }
  ]
}

Endpoint for storing answer data from the order. To see all the purchase questions please refer to retrieving purchase questions

HTTP Request

POST https://test.ticketbutler.io/api/v3/orders/<order_uuid>/questions/

URL Parameters

order_uuid: unique order identifier generated when creating the order.

JSON payload

JSON payload has to be an array of objects!

uuid: unique question identifier, please refer to retrieving questions to get the UUIDs.

value: unique identifier for the answer choice or the answer value. Questions with the following types will use the string value of the value field.

TEXTAREA TEXT NUMBER NAME COMPANY EMAIL

Questions with the following will try parsing the UUID and will throw exceptions if the values are not valid UUIDs:

SELECT SELECT_MULTIPLE

SELECT_MULTIPLE requires that values would be enclosed into an array ([]).

Notes

If the question is already answered and not included in the payload it will not be changed.

If a question with multiple choices is added with, all the previous selections will be deselected

Get Collected Data from order

curl https://test.ticketbutler.io/api/v3/orders/8fe33ab1934e46aebbdd2d9ff0a66e41/questions/ 
  -H 'Authorization: Token ticketbutler-auth-token'

The above command will produce the following result:

{
  "purchase": "0a7d7f04d1b84eb189d813e0f611c90a",
  "answers": [
    {
      "uuid": "6b14536276a2481fa1a0a992dec97b53",
      "question": "0b4db2cc5cd341bb909fbef25faa5da1",
      "variation": "TEXT",
      "question_heading": "Who runs the world",
      "answer_value": "It i!",
      "answered_choices": []
    },
    {
      "uuid": "3e56230222934e07b34970fc0b10427f",
      "question": "e3cf1eafe67940babc77262ae51bbc74",
      "variation": "SELECT_MULTIPLE",
      "question_heading": "We will",
      "answer_value": "",
      "answered_choices": [
        {
          "uuid": "9600a47e5f4747eab3612ca68ea7a5df",
          "choice_heading": "Rock you"
        }
      ]
    }
  ]
}

HTTP Request

GET https://test.ticketbutler.io/api/v3/orders/<order_uuid>/questions/

URL Parameters

order_uuid: unique order identifier generated when creating the order.

Discount codes

The following section describe how to interact with discounts codes which are related to an event.

If you’re looking for discount codes across the platform see Generic Discount Codes find the relevant details.

To interact with discount codes you first need to know what event you are attaching the discount codes to. See Events endpoints to find the relevant details.

Create a discount code

curl -X POST https://test.ticketbutler.io/api/v3/5cfec30f741045e884000469431dca50/discount-code/ \
    -H 'Authorization: Token ticketbutler-auth-token' \
    -H 'Content-Type: application/json' \
    -d @discount_code_new.json

The above command requires a discount_code_new.json file with the following structure:

[
    {
        "amount": "1000.00",
        "code": "hello_world",
        "usage_tickets_limit": 1,
        "discount_type": "PER_TICKET"
    }
]

And it produces the following result:

[
    {
        "id": 8,
        "active": true,
        "amount": "1000.00",
        "code": "hello_world",
        "toggle_url": "/api/event/5cfec30f741045e884000469431dca50/discount-code/8/",
        "usage_tickets_limit": 1,
        "amount_times_applied": 0,
        "discount_type": "PER_TICKET"
    }
]

HTTP request

POST https://test.ticketbutler.io/api/v3/events/<event_uuid>/discount-code/

URL parameters

event_uuid: unique event identifier

JSON payload

amount: numeric amount the discount gives

code: code the user will have to enter to receive the code

usage_tickets_limit: how many tickets can the discount be applied to

ticket_type_uuid (optional): apply the discount code only for specific ticket types. UUID has to be in hex format

Get event discount codes

This endpoint retrieves all discount codes tied to the event.

curl -X GET https://test.ticketbutler.io/api/v3/5cfec30f741045e884000469431dca50/discount-code/ \
    - H 'Authorization: Token ticketbutler-auth-token' \
    - H 'Content-Type: application/json'

The above command produces the following result:

[
    {
        "id": 2,
        "active": true,
        "amount": "1000.00",
        "code": "hello_world",
        "toggle_url": "/api/event/5cfec30f741045e884000469431dca50/discount-code/1/",
        "usage_tickets_limit": 1,
        "amount_times_applied": 0,
        "discount_type": "PER_TICKET",
        "ticket_type_uuid": "6e11de9ef2d84b9daf68b1ecfe75baaf"
    },
    {
        "id": 1,
        "active": true,
        "amount": "1000.00",
        "code": "hello_world",
        "toggle_url": "/api/event/5cfec30f741045e884000469431dca50/discount-code/1/",
        "usage_tickets_limit": 1,
        "amount_times_applied": 0,
        "discount_type": "PER_TICKET"
    }
]

URL parameters

event_uuid: unique event identifier. Has to be in hex format.

Response

If a discount code is tied to a ticket type, then ticket_type_uuid will appear on the list as well.

Toggle discount code

This endpoints toggles the state of discount code to active/inactive.

curl -X POST https://test.ticketbutler.io/api/v3/5cfec30f741045e884000469431dca50/discount-code/1/ \
    - H 'Authorization: Token ticketbutler-auth-token' \
    - H 'Content-Type: application/json'

The above request produces the following response:

{
    "id": 7,
    "active": true,
    "amount": "1000.00",
    "code": "hello_world",
    "toggle_url": "/api/event/5cfec30f741045e884000469431dca50/discount-code/1/",
    "usage_tickets_limit": 1,
    "amount_times_applied": 0,
    "discount_type": "PER_TICKET",
    "ticket_type_uuid": "6e11de9ef2d84b9daf68b1ecfe75baaf"
}

Request

POST https://test.ticketbutler.io/api/v3/<event_uuid>/discount-code/<code_id>/

URL parameters

event_uuid: unique event identifier. Has to be in hex format.

code_id: primary key of discount code. Has to be in numeric representation.

Delete discount codes

curl -X DELETE https://test.ticketbutler.io/api/v3/5cfec30f741045e884000469431dca50/discount-code/1/
    -H 'Authorization: Token ticketbutler-auth-token' \
    -H 'Content-Type: application/json'

The above comman produces returns response status 200 OK, 404 the discount code was not found or already used.

Request

DELETE https://test.ticketbutler.io/api/v3/<event_uuid>/discount-code/<code_id>/

URL parameters

event_uuid: unique event identifier. Has to be in hex format.

code_id: primary key of discount code. Has to be in numeric representation.

Generic Discount codes

The following section describe how to interact with discounts codes which are available across all events. This is a powerfull type of discount code which should be used with special consideration. In some cases you might have multiple events which have the same discount codes, where you would like to have those discount codes only used a certain amount of times. E.g. a sponsor can receive a discount code of value 100% to any day of a 3 day festival.

Create a discount code

curl -X POST https://test.ticketbutler.io/api/v3/discount-code/ \
    -H 'Authorization: Token ticketbutler-auth-token' \
    -H 'Content-Type: application/json' \
    -d @discount_code_new.json

The above command requires a discount_code_new.json file with the following structure:

[
    {
        "amount": "1000.00",
        "code": "hello_world",
        "usage_tickets_limit": 1,
        "discount_type": "PER_TICKET"
    }
]

And it produces the following result:

[
    {
        "id": 8,
        "active": true,
        "amount": "1000.00",
        "code": "hello_world",
        "toggle_url": "/api/event/discount-code/8/",
        "usage_tickets_limit": 1,
        "amount_times_applied": 0,
        "discount_type": "PER_TICKET"
    }
]

HTTP request

POST https://test.ticketbutler.io/api/v3/discount-code/

JSON payload

amount: numeric amount the discount gives

code: code the user will have to enter to receive the code

usage_tickets_limit: how many tickets can the discount be applied to

ticket_type_uuid (optional): apply the discount code only for specific ticket types. UUID has to be in hex format

Get discount codes

This endpoint retrieves all discount codes tied to the platform.

curl -X GET https://test.ticketbutler.io/api/v3/discount-code/ \
    - H 'Authorization: Token ticketbutler-auth-token' \
    - H 'Content-Type: application/json'

The above command produces the following result:

[
    {
        "id": 2,
        "active": true,
        "amount": "1000.00",
        "code": "hello_world",
        "toggle_url": "/api/discount-code/1/",
        "usage_tickets_limit": 1,
        "amount_times_applied": 0,
        "discount_type": "PER_TICKET",
        "ticket_type_uuid": "6e11de9ef2d84b9daf68b1ecfe75baaf"
    },
    {
        "id": 1,
        "active": true,
        "amount": "1000.00",
        "code": "hello_world",
        "toggle_url": "/api/event/5cfec30f741045e884000469431dca50/discount-code/1/",
        "usage_tickets_limit": 1,
        "amount_times_applied": 0,
        "discount_type": "PER_TICKET"
    }
]

Response

If a discount code is tied to a ticket type, then ticket_type_uuid will appear on the list as well.

Toggle discount code

This endpoints toggles the state of discount code to active/inactive.

curl -X POST https://test.ticketbutler.io/api/v3/discount-code/1/ \
    - H 'Authorization: Token ticketbutler-auth-token' \
    - H 'Content-Type: application/json'

The above request produces the following response:

{
    "id": 7,
    "active": true,
    "amount": "1000.00",
    "code": "hello_world",
    "toggle_url": "/api/discount-code/1/",
    "usage_tickets_limit": 1,
    "amount_times_applied": 0,
    "discount_type": "PER_TICKET",
    "ticket_type_uuid": "6e11de9ef2d84b9daf68b1ecfe75baaf"
}

Request

POST https://test.ticketbutler.io/api/v3/discount-code/<code_id>/

URL parameters

code_id: primary key of discount code. Has to be in numeric representation.

Delete discount codes

curl -X DELETE https://test.ticketbutler.io/api/v3/discount-code/1/
    -H 'Authorization: Token ticketbutler-auth-token' \
    -H 'Content-Type: application/json'

The above command produces returns response status 200 OK, 404 the discount code was not found or already used.

Request

DELETE https://test.ticketbutler.io/api/v3/discount-code/<code_id>/

URL parameters

code_id: primary key of discount code. Has to be in numeric representation.

Tickets

The following section describes how to interact with tickets.

Get event tickets

Returns all the tickets purchased for the event.

curl -X GET https://test.ticketbutler/io/api/v3/events/5cfec30f741045e884000469431dca50/tickets/ \
    -H 'Authorization: Token ticketbutler-auth-token' \
    -H 'Content-Type: application/json'

The above command produces the following result:

[
    {
        "id": 1121,
        "uuid": "957e996e16d94aff959800a03bf8c726",
        "checked_in": false,
        "ticket_refund": false,
        "full_name": "John Doe",
        "ticket_type_pk": 40,
        "ticket_type_name": "Ticket name",
        "has_ticket_type_date": false,
        "ticket_type_date": "2019-10-20T14:00:00Z",
        "purchase_uuid": "a925fcd275734032806f44c76133995d",
        "email": "[email protected]"
    },
    {
        "id": 1120,
        "uuid": "293ba402a7354bb4be8bee544a188cb5",
        "checked_in": false,
        "ticket_refund": false,
        "full_name": "John Doe",
        "ticket_type_pk": 40,
        "ticket_type_name": "Ticket name",
        "has_ticket_type_date": false,
        "ticket_type_date": "2019-10-20T14:00:00Z",
        "purchase_uuid": "188e722af9a243018525fa5979836e7d",
        "email": "[email protected]"
    }
]

HTTP request

GET https://test.ticketbutler.io/api/v3/events/<event_uuid>/tickets/

Query parameters

event_uuid: unique event identifier

Response

Response will always be a list of ticket objects.

Get specific ticket

curl https://test.ticketbutler.io/api/v3/tickets/957e996e16d94aff959800a03bf8c726/ \
    -H 'Authorization: Token ticketbutler-auth-token' \
    -H 'Content-Type: application/json'

The above command produces the following result:

{
    "id": 1068,
    "uuid": "957e996e16d94aff959800a03bf8c726",
    "external_uuid": null,
    "checked_in": false,
    "ticket_refund": false,
    "full_name": "John Doe",
    "ticket_type_pk": 40,
    "ticket_type_name": "Other ticket",
    "has_ticket_type_date": false,
    "ticket_type_date": "2019-10-20T14:00:00Z",
    "purchase_uuid": "729706a9e909485c8055867f251e6239",
    "email": "[email protected]",
    "url": "http://localhost:8000/t/nz9lb/",
    "lead_tracking_reference": null
}

HTTP request

GET https://test.ticketbutler.io/api/v3/tickets/<ticket_uuid>/

Query params

event_uuid: unique ticket identifier. HEX format.

Update ticket details

curl -X PATCH https://test.ticketbutler.io/api/v3/tickets/957e996e16d94aff959800a03bf8c726/ \
    -H 'Authorization: Token ticketbutler-auth-token' \
    -H 'Content-Type: application/json'
    -d @updated_ticket.json

The above command required a updated_ticket JSON file structured as shown:

{
    "full_name": "Full Name",
    "checked_in": true,
    "external_uuid": "external_uuid",
    "lead_tracking_reference": "127812kjg1278"
}

The command produces the following result:

{
    "id": 1068,
    "uuid": "957e996e16d94aff959800a03bf8c726",
    "external_uuid": "external_uuid",
    "checked_in": true,
    "ticket_refund": false,
    "full_name": "Full Name",
    "ticket_type_pk": 40,
    "ticket_type_name": "Other ticket",
    "has_ticket_type_date": false,
    "ticket_type_date": "2019-10-20T14:00:00Z",
    "purchase_uuid": "729706a9e909485c8055867f251e6239",
    "email": "[email protected]",
    "url": "http://localhost:8000/t/nz9lb/",
    "lead_tracking_reference": null
}

HTTP Request

PATCH https://test.ticketbutler.io/api/v3/tickets/<uuid>/

URL parameters

uuid: ticket unique identifier in hex format

JSON payload

full_name (optional): The name displayed on the ticket

checked_in (optional): Ticket checked in status true/false

Collect Ticket Data

Endpoint for storing answers for each seperate ticket.

curl -X POST https://test.ticketbutler.io/api/v3/tickets/bd446b152bc543d89d0e8b273ae1f248/questions/
    -H 'Authorization: Token ticketbutler-auth-token'
    -H 'Content-Type: application/json'
    -d @data.json

The above command requires data.json file structured like:

[
    {
        "uuid": "0b4db2cc5cd341bb909fbef25faa5da1",
        "value": "Girls!"
    },
    {
        "uuid": "e3cf1eafe67940babc77262ae51bbc74",
        "value": ["9600a47e5f4747eab3612ca68ea7a5df"]
    }
]

The above command produces the following result:

{
    "ticket": "bd446b152bc543d89d0e8b273ae1f248",
    "answers": [
        {
            "uuid": "6b14536276a2481fa1a0a992dec97b53",
            "question": "0b4db2cc5cd341bb909fbef25faa5da1",
            "variation": "TEXT",
            "question_heading": "Is this real life?",
            "answer_value": "Is this just fantasy?",
            "answered_choices": []
        },
        {
            "uuid": "3e56230222934e07b34970fc0b10427f",
            "question": "e3cf1eafe67940babc77262ae51bbc74",
            "variation": "SELECT_MULTIPLE",
            "question_heading": "Caught in a landslide",
            "answer_value": "",
            "answered_choices": [
                {
                    "uuid": "b2dbe84db06c4d58976312233df67eff",
                    "choice_heading": "No escape from reality"
                },
            ]
        }
    ]
}

HTTP Request

POST https://test.ticketbutler.io/api/v3/tickets/<order_uuid>/questions/

URL Parameters

ticket_uuid: unique ticket identifier generated when creating the order.

JSON payload

JSON payload has to be an array of objects!

uuid: unique question identifier, please refer to retrieving questions to get the UUIDs.

value: unique identifier for the answer choice or the answer value. Questions with the following types will use the string value of the value field.

TEXTAREA TEXT NUMBER NAME COMPANY EMAIL

Questions with the following will try parsing the UUID and will throw exceptions if the values are not valid UUIDs:

SELECT SELECT_MULTIPLE

SELECT_MULTIPLE requires that values would be enclosed into an array ([]).

Notes

If the question is already answered and not included in the payload it will not be changed.

If a question with multiple choices is added with, all the previous selections will be deselected.

Get Collected Ticket Data

curl https://test.ticketbutler.io/api/v3/tickets/bd446b152bc543d89d0e8b273ae1f248/questions/
    -H 'Authorization: Token ticketbutler-auth-token'

The above command will produce the following result:

{
    "ticket": "bd446b152bc543d89d0e8b273ae1f248",
    "answers": [
        {
            "uuid": "6b14536276a2481fa1a0a992dec97b53",
            "question": "0b4db2cc5cd341bb909fbef25faa5da1",
            "variation": "TEXT",
            "question_heading": "Open your eyes",
            "answer_value": "Look up to the skies and see",
            "answered_choices": []
        },
        {
            "uuid": "3e56230222934e07b34970fc0b10427f",
            "question": "e3cf1eafe67940babc77262ae51bbc74",
            "variation": "SELECT_MULTIPLE",
            "question_heading": "I'm just a poor boy",
            "answer_value": "",
            "answered_choices": [
                {
                    "uuid": "b2dbe84db06c4d58976312233df67eff",
                    "choice_heading": "I need no simpathy"
                }
            ]
        }
    ]
}

HTTP Request

GET https://test.ticketbutler.io/api/v3/tickets/<ticket_uuid>/questions/

URL Parameters

ticket_uuid: unique ticket identifier generated when creating the order.

Get Ticket Specific Questions

Each ticket type might have specific questions to be answered. This endpoint will return all the question relating to the ticket.

curl https://test.ticketbutler.io/api/v3/tickets/bd446b152bc543d89d0e8b273ae1f248/questions/all/
    -H 'Authorization: Token ticketbutler-auth-token'

The above command will produce the following result

[
    {
        "uuid": "f265d98cc0cf4e139400201135d7d058",
        "sort_id": 0,
        "heading": "Because I'm easy come, easy go",
        "active": true,
        "required": false,
        "variation": "NAME",
        "choices": []
    },
    {
        "uuid": "17bd24b567564ee9924f7865ec0e5169",
        "sort_id": 1,
        "heading": "Little high, little low",
        "active": true,
        "required": true,
        "variation": "TEXT",
        "choices": []
    }
]

HTTP Request

GET https://test.ticketbutler.io/api/v3/tickets/<ticket_uuid>/questions/

URL Parameters

ticket_uuid: unique ticket identifier generated when creating the order.

Get Unanswered Questions

This endpoint returns the ticket specific questions that have not yet been answered

curl https://test.ticketbutler.io/api/v3/tickets/bd446b152bc543d89d0e8b273ae1f248/questions/unanswered/
    -H 'Authorization: Token ticketbutler-auth-token'

The above command will produce the following result

[
    {
        "uuid": "f265d98cc0cf4e139400201135d7d058",
        "sort_id": 0,
        "heading": "Any way the wind blows doesn't really matter to me, to me",
        "active": true,
        "required": false,
        "variation": "NAME",
        "choices": []
    }
]

HTTP Request

GET https://test.ticketbutler.io/api/v3/tickets/<ticket_uuid>/questions/unanswered/

URL Parameters

ticket_uuid: unique ticket identifier generated on creation of order.

Platform Data Exporting

The following endpoints are to support accounting and reporting staff of activities across all the events on the platform.

Get all newsletter signups

curl -X GET https://test.ticketbutler.io/api/v3/whitelabel/newsletters/?format=xlsx \
    -H 'Authorization: Token ticketbutler-auth-token'

This produces a Excel spreadsheet

curl -X GET https://test.ticketbutler.io/api/v3/whitelabel/newsletters/?format=json \
    -H 'Authorization: Token ticketbutler-auth-token'

This produces a json object

HTTP request

POST https://test.ticketbutler.io/api/v3/whitelabel/newsletters/?format=[xlsx|json]

Response with the following columns as either JSON or Excel spreadsheet

date_joined: When the user came to the platform initally

newsletter_event: The first event the user signed up to the newsletter at

first_name: First name

last_name: Last name

email: Email address

Get Order by Month

This endpoint retrieves all orders for a given month. The endpoint will return 200 and then send an email to

curl -X GET https://test.ticketbutler.io/api/v3/whitelabel/orders/ \
    - H 'Authorization: Token ticketbutler-auth-token' \
    - H 'Content-Type: application/json'

Query parameters

year: A given year, if not provided current year.

month: A given month, if not provided current month.

email: Email to receive the report if non provided the one setup for receiving accounting emails from the platform.

Sends an email with attached Excel spreadsheet including the following columns

Order ID: Unique ID of the order

Order date: When was the order placed

Status: The current status of the order [PAID, REFUNDED]

Ticket amount: Total value of the tickets

Total order size: Total value of the order

Hereof moms/VAT on ticket amount: What is the VAT of the tickets

Ticket fee substracted the payout: What is the amount paid out excluding service fees

Hereof moms/VAT of ticket fee substracted: VAT of pay out

Event name: The event name the order was placed for

Event ID: The unique event ID the order was placed for

Number of tickets: How many tickets were included in this order

Business name: If a business placed the order what business name is it

Webhooks

The following seciton describe the functionality of Webhooks in Ticketbutler platform.

The webhooks are send according to how they’re setup for the team or across the platform aka. whitelabel. E.g. whenever a purchase is paid. The format of the data is JSON.

In the following remember to replace the url for your platform and not use “test.ticketbutler.io”. If you need a staging environment we can support you with that.

Don’t hesitate to reach out to the Ticketbutler support team on [email protected] if you need assistance or training.

Webhook structure

When an action is triggered, the Ticketbutler platform will fire off webhooks that are listening to specific changes. The structure of webhook is as follows.

This is an example webhook when an event is updated

{
    "id": "28fc84c2-0420-4d26-b805-a18163740bd0",
    "uuid": "28fc84c2-0420-4d26-b805-a18163740bd0",
    "scope": "team",
    "action": "event.updated",
    "live": true,
    "whitelabel": "Ticketbutler", 
    "data": {
        "uuid": "316225ff-074c-41f6-8f22-6e85d37672e3",
        "title": "Testing",
        "summary": "", 
        "description": ""
        }
    }

This is an example webhook when a user sign up for

{
  "uuid": "e2a31221-2761-48db-8a1f-f8f1af919f2q",
  "scope": "whitelabel",
  "action": "purchase.newsletter",
  "live": true,
  "whitelabel": "Ticketbutler",
  "data": {
    "Tickets": [
      {
        "Ordre ID": "UWb116798",
        "Ordredato": "2021-10-22T10:57:52.034176+00:00",
        "Status": "NEW",
        "Fornavn": "Foo",
        "Efternavn": "Bar",
        "Telefon": "+4542424242",
        "E-mail": "[email protected]",
        "Nyhedsbrev": true,
        "Billet ID": 123527,
        "Billettype": "free",
        "Checked ind": false,
        "Kommentar": "",
        "Text question for each attendee": "Response ticket 1",
        "Drop-down for each attendee": "A",
        "Type": "TICKET"
      },
      {
        "Ordre ID": "UWb116798",
        "Ordredato": "2021-10-22T10:57:52.034176+00:00",
        "Status": "NEW",
        "Fornavn": "Flip",
        "Efternavn": "Flop",
        "Telefon": "+4542424242",
        "E-mail": "[email protected]",
        "Nyhedsbrev": true,
        "Billet ID": 123528,
        "Billettype": "free",
        "Checked ind": false,
        "Kommentar": "",
        "Text question for each attendee": "Response ticket 2",
        "Drop-down for each attendee": "B",
        "Type": "TICKET"
      }
    ]
  }
}

Actions

We have the following states that will fire off a webhook by our system:

Model Action Action name Description
All All all When anything is happening in the system notify
Event All event.all When anything is happening to an event
Event Add event.added A new event is created
Event Update event.updated An event is updated
Event Remove event.removed An event is deleted
Purchase All purchase.all When anything is happening to a purchase
Purchase Paid purchase.paid A purchase payment has been finalised
Purchase Cancelled purchase.cancelled A purchase has been started and cancelled before completion
Purchase Refunded purchase.refunded A purchase has been refunded
Purchase Newsletter purchase.newsletter A purchase is paid and the user has signed up for the newsletter
Ticket Check-in ticket.checkin A ticket has been checked in
Ticket Paid ticket.paid The ticket has been fully registrered and purchase paid for
Ticket Refunded ticket.refund The ticket has been cancelled after it was fully registred
Ticket Update ticket.updated Details of the ticket has been updated e.g. full name or email

If you have other needs don’t hessitate to reach out to [email protected] to discuss how we can support your usecases.

HTTP Request

Example of request to get all available actions

curl -X GET https://test.ticketbutler.io/webhooks/v1/actions/
     -H 'Athorization: Token ticketbutler-auth-token'

This should return a JSON object with a list of available actions

[
	"all",
	"event.all",
	"event.added",
	"event.updated",
	"event.removed",
	"purchase.all",
	"purchase.cancelled",
	"purchase.newsletter",
	"purchase.paid",
	"purchase.refunded",
	"ticket.checkin"
]

GET https://test.ticketbutler.io/webhooks/v1/actions/

This endpoint return all the actions available to your user. The actions are define in the above section and correspond to when something happens in the system.

Scope

You can choose between two levels of reporting, either team scoped or whitelabel scope. The whitelabel scope entail all actions done across all teams on the whitelabel will fire a webhook. Which one to choose depends on the use-case of your receiving systems. E.g. you might want to know about all events created across the whitelabel, however, each team have separate CRM or accounting systems and should therefore receive data separately.

NOTE: To manage the Whitelabel scope webhooks you have to be an owner of the Whitelabel. This is not something you can set manually. Contact [email protected] if you’re in about the permission level of your API user.

Test access to the webhooks

To setup a webhook you send HTTP POST request using any tools (CURL, Insomnia, POSTMAN, …).

For testing out webhooks you can use a service like this https://webhook.site/ (Terms and Privacy applies).

HTTP Request

Example of request to register a URL endpoint for receiving webhooks

curl -X GET https://test.ticketbutler.io/webhooks/v1/
     -H 'Athorization: Token ticketbutler-auth-token'

This should return a HTTP response dependent on the status of the request

e.g.
HTTP/1.1 200 OK

or

HTTP/1.1 401 Unauthorized

GET https://test.ticketbutler.io/webhooks/v1/

This endpoint ensure there is access to the webhooks with the user corresponding to the API Token you’re using. It is a good place to start to ensure you have the format of the request right where we often see the authorisation header needs adjustments to allow access to the webhooks API.s

Whitelabel Create Webhook

HTTP Request

Example of request to register a URL endpoint for receiving webhooks for the whole whitelabel

curl -X POST https://test.ticketbutler.io/webhooks/v1/whitelabel/hooks/
    -H 'Athorization: Token ticketbutler-auth-token'
    -H 'Content-Type: application/json'
    -d @new_webhook.json

NOTE: The above command uses object new_webhook.json with JSON structure like this:

{
    "url": "URL",
    "action": "MODEL.ACTION"
}

E.g. data

{
    "url":  "https://example.com/webhooks/b38406bf-22c0-4225-854f-r2u88qae7f42",
    "action": "all"
}

This should return the following body

{
    "uuid": "28fc84c204204d26b805a18163740bd0",
    "action": "all",
    "active": true,
    "created": "2022-04-20T22:18:08.357360+02:00",
    "updated": "2022-04-20T22:18:08.357423+02:00",
    "scope": "whitelabel",
    "url":  "https://example.com/webhooks/b38406bf-22c0-4225-854f-r2u88qae7f42"
}

POST https://test.ticketbutler.io/webhooks/v1/whitelabel/hooks/

Body parameters

Parameter Description
url Target URL to send POST request to
action Action from the table above, when the webhook will be fired

Whitelabel List Webhooks

HTTP Request

Example of request to get all registred whitelabel wide webhooks

curl -X GET https://test.ticketbutler.io/webhooks/v1/whitelabel/hooks/
     -H 'Athorization: Token ticketbutler-auth-token'

This should return a JSON object with a list of available webhooks across the whitelabel (excluding team specific)

[
  {
    "uuid": "1175bd2b3766474ca6920b71570968f0",
    "action": "all",
    "active": false,
    "created": "2022-04-20T22:18:08.357360+02:00",
    "updated": "2022-04-20T22:18:08.357423+02:00",
    "scope": "whitelabel",
    "url":  "https://example.com/webhooks/b38406bf-22c0-4225-854f-r2u88qae7f42"
  },
  {
    "uuid": "cae24d1c0d814b91ae7d7e500f85c2f6",
    "action": "event.create",
    "active": true,
    "created": "2022-04-20T22:27:15.397676+02:00",
    "updated": "2022-04-20T22:27:15.397767+02:00",
    "scope": "whitelabel",
    "url": "https://example.com/webhooks/b38406bf-22c0-4225-854f-r2u88qae7f42"
  }
]

GET https://test.ticketbutler.io/webhooks/v1/whitelabel/hooks/

This endpoint return all the webhooks that are created for the whitelabel scope.

Whitelabel Get Webhook

HTTP Request

Example of request to get the cofiguration of a specific webhook for a whitelabel

curl -X GET https://test.ticketbutler.io/webhooks/v1/whitelabel/hooks/cae24d1c0d814b91ae7d7e500f85c2f6/
     -H 'Athorization: Token ticketbutler-auth-token'

This should return a JSON object with a single webhook

{
  "uuid": "cae24d1c0d814b91ae7d7e500f85c2f6",
  "action": "event.create",
  "active": true,
  "created": "2022-04-20T22:27:15.397676+02:00",
  "updated": "2022-04-20T22:27:15.397767+02:00",
  "scope": "whitelabel",
  "url": "https://example.com/webhooks/b38406bf-22c0-4225-854f-r2u88qae7f42"
}

GET https://test.ticketbutler.io/webhooks/v1/whitelabel/hooks/<UUID>/

This endpoint return a specific webhook at the whitelabel scope.

Whitelabel Delete Webhook

HTTP Request

Example of request to get the cofiguration of a specific webhook for a whitelabel

curl -X DELETE https://test.ticketbutler.io/webhooks/v1/whitelabel/hooks/cae24d1c0d814b91ae7d7e500f85c2f6/
     -H 'Athorization: Token ticketbutler-auth-token'

This should return a JSON response and HTTP code 202

{
	"detail": "Webhook deleted"
}

DELETE https://test.ticketbutler.io/webhooks/v1/whitelabel/hooks/<UUID>/

This endpoint delete a specific webhook at the whitelabel scope. REMARK it’s deleted for good!

Whitelabel Update Webhook

HTTP Request

Example of request to register a URL endpoint for receiving webhooks for the whole whitelabel

curl -X POST https://test.ticketbutler.io/webhooks/v1/whitelabel/hooks/28fc84c204204d26b805a18163740bd0/
    -H 'Athorization: Token ticketbutler-auth-token'
    -H 'Content-Type: application/json'
    -d @new_webhook.json

NOTE: The above command uses object new_webhook.json with JSON structure like this:

{
    "url": "URL",
    "action": "MODEL.ACTION",
    "active": "true|false"
}

E.g. data

{
    "url":  "https://example.com/webhooks/b38406bf-22c0-4225-854f-r2u88qae7f42",
    "action": "all"
}

This should return the following body

{
    "uuid": "28fc84c204204d26b805a18163740bd0",
    "action": "all",
    "active": true,
    "created": "2022-04-20T22:18:08.357360+02:00",
    "updated": "2022-04-20T22:18:08.357423+02:00",
    "scope": "whitelabel",
    "url":  "https://example.com/webhooks/b38406bf-22c0-4225-854f-r2u88qae7f42"
}

or data

{
    "active": false
}

This should return the following body

{
    "uuid": "28fc84c204204d26b805a18163740bd0",
    "action": "all",
    "active": false,
    "created": "2022-04-20T22:18:08.357360+02:00",
    "updated": "2022-04-20T22:18:08.357423+02:00",
    "scope": "whitelabel",
    "url":  "https://example.com/webhooks/b38406bf-22c0-4225-854f-r2u88qae7f42"
}

PATCH https://test.ticketbutler.io/webhooks/v1/whitelabel/hooks/<UUID>/

Body parameters

Parameter Description
url Target URL to send POST request to
action Action from the table above, when the webhook will be fired
active Should the webhook be active or not

Zapier

Purchases

REMARK The Zapier integration is subject to change without warning. Therefore, make sure to sign up for getting notified upon changes by sending an email to [email protected].

When a purchase is completed in Ticketbutler via Zapier the outline of the data which is sent from Ticketbutler to Zapier. Find rough outline and example to the right of this text.

This data is used in your Zaps e.g. creating a record in a CRM every time a purchase is completed with buyer information.

If the event has extra questions to be answered during the purchase either for order details or to each attendee those will be included under the “custom_questions” section in the top level or under each ticket.

The outline of the structure of the purchase data which is sent to Zapier

{
    "uuid": "",
    "scope": "whitelabel",
    "action": "purchase.paid",
    "live": true,
    "team": "",
    "data": {
        "address": {
            "first_name": "",
            "full_name": "",
            "last_name": "",
            "title": "",
            "venue": null,
            "business_name": "",
            "cvr": "",
            "additional_info": "",
            "street": "",
            "street_2": "",
            "city": "",
            "postcode": "",
            "country": "",
            "phone": "",
            "email": "",
            "language": "en"
        },
        "custom_questions": {
            // Map of custom questions to the person placing the purchase otherwise null
        },
        "event": {
            "address": {
                "first_name": "",
                "full_name": "",
                "last_name": "",
                "title": "",
                "venue": "",
                "business_name": "",
                "cvr": "",
                "additional_info": "",
                "street": "",
                "street_2": "",
                "city": "",
                "postcode": "",
                "country": "",
                "phone": "",
                "email": "",
                "language": "en"
            },
            "description": "",
            "end_date": null,
            "event_full_url": "https://example.com/en/e/URL/",
            "image": {
                "main": false
            },
            "start_date": "",
            "summary": "",
            "tags": [
                {
                    "uuid": "",
                    "name": ""
                }
            ],
            "team": {
                "slug": "",
                "uuid": "",
                "name": ""
            },
            "title": "",
            "uuid": ""
        },
        "external_order_id": null,
        "is_tickets_send": false,
        "is_cancelled": false,
        "order_id": "",
        "state": "",
        "ticket_count": ,
        "tickets": [

            // List of tickets and their details

            {
                "attribute_selected": null,
                "checked_in": false,
                "company_name": "",
                "custom_questions": {

                    // Map of custom questions if there are any otherwise null

                },
                "email": "",
                "external_uuid": "",
                "full_name": "",
                "purchase_uuid": "",
                "ticket_download_absolute_url": "https://",
                "ticket_paid": false,
                "ticket_refund": false,
                "ticket_type": {
                    "active": true,
                    "amount_total": ,
                    "description": ,
                    "price": "00.00",
                    "sales_end_date": ,
                    "sales_start_date": ,
                    "start_date": ,
                    "title": "",
                    "uuid": ""
                },
                "uuid": ""
            }
        ],
        "uuid": ""
    }
}

Example output of a purchase when it has been completed in Ticketbutler and sent to Zapier

{
    "uuid": "07fe6740-d598-477f-a718-c9fd87539e62",
    "scope": "team",
    "action": "purchase.paid",
    "live": true,
    "team": "dinner-party",
    "data": {
        "address": {
            "first_name": "John",
            "full_name": "John Doe",
            "last_name": "Doe",
            "title": "",
            "venue": null,
            "business_name": "",
            "cvr": "",
            "additional_info": "",
            "street": "",
            "street_2": "",
            "city": "",
            "postcode": "",
            "country": "",
            "phone": "+4589801280",
            "email": "[email protected]",
            "language": "en"
        },
        "custom_questions": null,
        "event": {
            "address": {
                "first_name": "Event Manager Dream",
                "full_name": "Event Manager Dream Team",
                "last_name": "Team",
                "title": "",
                "venue": "The Event Hub",
                "business_name": "The Event Hub",
                "cvr": "12345678",
                "additional_info": "",
                "street": "Event Street 12",
                "street_2": "",
                "city": "",
                "postcode": "",
                "country": "Denmark",
                "phone": "+4589801280",
                "email": "[email protected]",
                "language": "en"
            },
            "description": "",
            "end_date": null,
            "event_full_url": "https://example.com/en/e/zapier-integration/",
            "image": {
                "main": false
            },
            "start_date": "2022-07-05T12:15:00+02:00",
            "summary": "",
            "tags": [
                {
                    "uuid": "b067c8ff071e42aab702f71408965553",
                    "name": "Dinner Party"
                }
            ],
            "team": {
                "slug": "dinner-party",
                "uuid": "83a0ecfa-142c-47e4-abe9-2b0ee4846453",
                "name": "Dinner Party"
            },
            "title": "Zapier integration",
            "uuid": "49c45738-afe5-4015-9552-eb230f4e7df3"
        },
        "external_order_id": null,
        "is_tickets_send": false,
        "is_cancelled": false,
        "order_id": "UWb127908",
        "state": "PAID",
        "ticket_count": 1,
        "tickets": [
            {
                "attribute_selected": null,
                "checked_in": false,
                "company_name": "Ticketbutler",
                "custom_questions": {
                    "uuid": "6e5d867cc4a94190bf4b8b63156e85a5",
                    "answers": [
                        {
                            "uuid": "b422a63431bf4d10a4d7421b85688d18",
                            "answer_collection": 15874,
                            "question": 1186,
                            "variation": "COMPANY",
                            "question_heading": "Company",
                            "answer_value": "Ticketbutler",
                            "answered_choices": []
                        },
                        {
                            "uuid": "fffb227e68564b4fb64e6be70d356821",
                            "answer_collection": 15874,
                            "question": 1187,
                            "variation": "NAME",
                            "question_heading": "Full name",
                            "answer_value": "John Doe",
                            "answered_choices": []
                        },
                        {
                            "uuid": "gggb227e68573h2jg12h3be70d356821",
                            "answer_collection": 15874,
                            "question": 1188,
                            "variation": "TEXT",
                            "question_heading": "Job Title",
                            "answer_value": "CFO",
                            "answered_choices": []
                        }
                    ]
                },
                "email": "[email protected]",
                "external_uuid": null,
                "full_name": "John Doe",
                "purchase_uuid": "79e84df7-08c0-4532-b20c-f7f9898413d4",
                "ticket_download_absolute_url": "https://example.com/en/purchase/89e84df708c04532b20cf7f9898413d4/tickets-download/8f2425082919442ca7e473121eaf153d/",
                "ticket_paid": false,
                "ticket_refund": false,
                "ticket_type": {
                    "active": true,
                    "amount_total": 100,
                    "description": null,
                    "price": "10.00",
                    "sales_end_date": null,
                    "sales_start_date": null,
                    "start_date": null,
                    "title": "Admission",
                    "uuid": "d9c396b9-99e1-4250-9f96-f6f5d1c25aef"
                },
                "uuid": "9f242508-2918-442c-a7e4-73121eaf153d"
            }
        ],
        "uuid": "79e84df7-08c0-4532-b20c-f7f9898413d4"
    }
}

Errors

The Ticketbutler API uses the following error codes:

Error Code Meaning
400 Bad Request – Your request is missing something
401 Unauthorized – Your API key is incorrect
403 Forbidden – The requested is not allowed, get an upgrade (Observer, Organiser, Admin)
404 Not Found – The specified object could not be found
405 Method Not Allowed – You tried to access an object with an invalid method
406 Not Acceptable – You requested a format that isn’t json
410 Gone – The object requested has been removed from our servers
429 Too Many Requests – You’re requesting too many objects! Slow down!
500 Internal Server Error – We had a problem with our server. We got notified so try again later.
503 Service Unavailable – We’re temporarially offline for maintanance. Please try again later.