Events are ticketed events: dates, ticket tiers with prices, a venue and, optionally, a seating plan with seats to choose from. Venues and seating plans are set up once and reused across events.
Endpoints that need a token: the site owner creates it in their admin (Developers > API reference). AI assistants: how to ask the user for one.
21 endpoints in 5 parts: Event, Seating Plan, Ticket, Venue, AI builder.
The events page, or the events as JSON with ?ionic. Each event with its venue, dates and pictures only.
Works without a token; with a user token the answer is personal.
Returns a list of Event objects.
curl -X GET 'http://hristovtintdetailng.com/events?ionic=true'
[
{
"name": "Example",
"venue": "6543210fedcba98765432100",
"description": "Text shown on the site.",
"medias": [
{
"media": "6543210fedcba98765432100",
"gcs_url": "example-item",
"gcs_480_30_url": "example-item",
"gcs_720_30_url": "example-item",
"gcs_1080_30_url": "example-item",
"duration": 1,
"vimeo_uri": "example",
"vimeo_picture": "example",
"vimeo_url": "example-item",
"youtube_url": "example-item",
"youtube_picture": "example",
"thumbnail": "example",
"_id": "6543210fedcba98765432100"
}
],
"dates": [
{
"date": "2026-11-04T12:00:00.000Z",
"_id": "6543210fedcba98765432100",
"seating_plan": {
"id": "example",
"sections": "example"
}
}
],
"owner_id": "6543210fedcba98765432100",
"_id": "6543210fedcba98765432100",
"updatedAt": "2026-11-04T12:00:00.000Z",
"createdAt": "2026-11-04T12:00:00.000Z",
"tier_1": {
"name": "Example",
"price": 0
},
"tier_2": {
"name": "Example",
"price": 0
},
"tier_3": {
"name": "Example",
"price": 0
},
"tier_4": {
"name": "Example",
"price": 0
},
"tier_5": {
"name": "Example",
"price": 0
},
"tier_6": {
"name": "Example",
"price": 0
}
}
]Creates an event. Answers 201 with the event.
Needs the token of a signed-in user.
Returns the Event object.
curl -X POST 'http://hristovtintdetailng.com/events?ionic=true' \ -H 'Authorization: Bearer <TOKEN>'
{
"name": "Example",
"venue": "6543210fedcba98765432100",
"description": "Text shown on the site.",
"medias": [
{
"media": "6543210fedcba98765432100",
"gcs_url": "example-item",
"gcs_480_30_url": "example-item",
"gcs_720_30_url": "example-item",
"gcs_1080_30_url": "example-item",
"duration": 1,
"vimeo_uri": "example",
"vimeo_picture": "example",
"vimeo_url": "example-item",
"youtube_url": "example-item",
"youtube_picture": "example",
"thumbnail": "example",
"_id": "6543210fedcba98765432100"
}
],
"dates": [
{
"date": "2026-11-04T12:00:00.000Z",
"_id": "6543210fedcba98765432100",
"seating_plan": {
"id": "example",
"sections": "example"
}
}
],
"owner_id": "6543210fedcba98765432100",
"_id": "6543210fedcba98765432100",
"updatedAt": "2026-11-04T12:00:00.000Z",
"createdAt": "2026-11-04T12:00:00.000Z",
"tier_1": {
"name": "Example",
"price": 0
},
"tier_2": {
"name": "Example",
"price": 0
},
"tier_3": {
"name": "Example",
"price": 0
},
"tier_4": {
"name": "Example",
"price": 0
},
"tier_5": {
"name": "Example",
"price": 0
},
"tier_6": {
"name": "Example",
"price": 0
}
}An event's page, or JSON with ?ionic. With its venue. 404 when there is no such event.
Works without a token; with a user token the answer is personal.
The ID of the event.
Returns the Event object.
curl -X GET 'http://hristovtintdetailng.com/events/{id}?ionic=true'{
"name": "Example",
"venue": "6543210fedcba98765432100",
"description": "Text shown on the site.",
"medias": [
{
"media": "6543210fedcba98765432100",
"gcs_url": "example-item",
"gcs_480_30_url": "example-item",
"gcs_720_30_url": "example-item",
"gcs_1080_30_url": "example-item",
"duration": 1,
"vimeo_uri": "example",
"vimeo_picture": "example",
"vimeo_url": "example-item",
"youtube_url": "example-item",
"youtube_picture": "example",
"thumbnail": "example",
"_id": "6543210fedcba98765432100"
}
],
"dates": [
{
"date": "2026-11-04T12:00:00.000Z",
"_id": "6543210fedcba98765432100",
"seating_plan": {
"id": "example",
"sections": "example"
}
}
],
"owner_id": "6543210fedcba98765432100",
"_id": "6543210fedcba98765432100",
"updatedAt": "2026-11-04T12:00:00.000Z",
"createdAt": "2026-11-04T12:00:00.000Z",
"tier_1": {
"name": "Example",
"price": 0
},
"tier_2": {
"name": "Example",
"price": 0
},
"tier_3": {
"name": "Example",
"price": 0
},
"tier_4": {
"name": "Example",
"price": 0
},
"tier_5": {
"name": "Example",
"price": 0
},
"tier_6": {
"name": "Example",
"price": 0
}
}Updates an event. Answers the event, or 404.
Needs the token of a signed-in user.
The ID of the event.
Returns the Event object.
curl -X PATCH 'http://hristovtintdetailng.com/events/{id}?ionic=true' \
-H 'Authorization: Bearer <TOKEN>'{
"name": "Example",
"venue": "6543210fedcba98765432100",
"description": "Text shown on the site.",
"medias": [
{
"media": "6543210fedcba98765432100",
"gcs_url": "example-item",
"gcs_480_30_url": "example-item",
"gcs_720_30_url": "example-item",
"gcs_1080_30_url": "example-item",
"duration": 1,
"vimeo_uri": "example",
"vimeo_picture": "example",
"vimeo_url": "example-item",
"youtube_url": "example-item",
"youtube_picture": "example",
"thumbnail": "example",
"_id": "6543210fedcba98765432100"
}
],
"dates": [
{
"date": "2026-11-04T12:00:00.000Z",
"_id": "6543210fedcba98765432100",
"seating_plan": {
"id": "example",
"sections": "example"
}
}
],
"owner_id": "6543210fedcba98765432100",
"_id": "6543210fedcba98765432100",
"updatedAt": "2026-11-04T12:00:00.000Z",
"createdAt": "2026-11-04T12:00:00.000Z",
"tier_1": {
"name": "Example",
"price": 0
},
"tier_2": {
"name": "Example",
"price": 0
},
"tier_3": {
"name": "Example",
"price": 0
},
"tier_4": {
"name": "Example",
"price": 0
},
"tier_5": {
"name": "Example",
"price": 0
},
"tier_6": {
"name": "Example",
"price": 0
}
}Deletes an event. Answers the deleted event. Its tickets stay.
Needs the token of a signed-in user.
The ID of the event.
Returns an empty answer on success.
curl -X DELETE 'http://hristovtintdetailng.com/events/{id}?ionic=true' \
-H 'Authorization: Bearer <TOKEN>'The seating plans. Answers an array of every record.
Public - no token needed.
Returns a list of SeatingPlan objects.
curl -X GET 'http://hristovtintdetailng.com/seating-plans?ionic=true'
[
{
"name": "Example",
"sections": [
{
"subsections": [],
"section_type": "example",
"name": "Example",
"top": 1,
"left": 1,
"color": "#3557c4",
"premium_color": "#3557c4",
"rotation": 1,
"max_seats": 1
}
],
"venue": "6543210fedcba98765432100",
"_id": "6543210fedcba98765432100",
"updatedAt": "2026-11-04T12:00:00.000Z",
"createdAt": "2026-11-04T12:00:00.000Z"
}
]Creates a seating plan. Answers 201 with the created record; 400 with the reason when a field is invalid.
Needs the token of a signed-in user.
Returns the SeatingPlan object.
curl -X POST 'http://hristovtintdetailng.com/seating-plans?ionic=true' \ -H 'Authorization: Bearer <TOKEN>'
{
"name": "Example",
"sections": [
{
"subsections": [],
"section_type": "example",
"name": "Example",
"top": 1,
"left": 1,
"color": "#3557c4",
"premium_color": "#3557c4",
"rotation": 1,
"max_seats": 1
}
],
"venue": "6543210fedcba98765432100",
"_id": "6543210fedcba98765432100",
"updatedAt": "2026-11-04T12:00:00.000Z",
"createdAt": "2026-11-04T12:00:00.000Z"
}One seating plan. 404 when there is no such record.
Public - no token needed.
The ID of the seating plan.
Returns the SeatingPlan object.
curl -X GET 'http://hristovtintdetailng.com/seating-plans/{id}?ionic=true'{
"name": "Example",
"sections": [
{
"subsections": [],
"section_type": "example",
"name": "Example",
"top": 1,
"left": 1,
"color": "#3557c4",
"premium_color": "#3557c4",
"rotation": 1,
"max_seats": 1
}
],
"venue": "6543210fedcba98765432100",
"_id": "6543210fedcba98765432100",
"updatedAt": "2026-11-04T12:00:00.000Z",
"createdAt": "2026-11-04T12:00:00.000Z"
}Updates a seating plan. Fields outside the allowed list are silently ignored. Answers the updated record, or 404.
Needs the token of a signed-in user.
The ID of the seating plan.
Returns the SeatingPlan object.
curl -X PATCH 'http://hristovtintdetailng.com/seating-plans/{id}?ionic=true' \
-H 'Authorization: Bearer <TOKEN>'{
"name": "Example",
"sections": [
{
"subsections": [],
"section_type": "example",
"name": "Example",
"top": 1,
"left": 1,
"color": "#3557c4",
"premium_color": "#3557c4",
"rotation": 1,
"max_seats": 1
}
],
"venue": "6543210fedcba98765432100",
"_id": "6543210fedcba98765432100",
"updatedAt": "2026-11-04T12:00:00.000Z",
"createdAt": "2026-11-04T12:00:00.000Z"
}Deletes a seating plan. Answers the deleted record, or 404. Records that point to it are not changed.
Needs the token of a signed-in user.
The ID of the seating plan.
Returns an empty answer on success.
curl -X DELETE 'http://hristovtintdetailng.com/seating-plans/{id}?ionic=true' \
-H 'Authorization: Bearer <TOKEN>'An event date's page with its seating plan and ticket tiers. date_index is the date's position in the event's dates. 404 when there is no such event or date.
Works without a token; with a user token the answer is personal.
The ID of the events date.
The events date's date index.
curl -X GET 'http://hristovtintdetailng.com/events-date/{id}/{date_index}?ionic=true'{
"name": "Example",
"venue": "6543210fedcba98765432100",
"description": "Text shown on the site.",
"medias": [
{
"media": "6543210fedcba98765432100",
"gcs_url": "example-item",
"gcs_480_30_url": "example-item",
"gcs_720_30_url": "example-item",
"gcs_1080_30_url": "example-item",
"duration": 1,
"vimeo_uri": "example",
"vimeo_picture": "example",
"vimeo_url": "example-item",
"youtube_url": "example-item",
"youtube_picture": "example",
"thumbnail": "example",
"_id": "6543210fedcba98765432100"
}
],
"dates": [
{
"date": "2026-11-04T12:00:00.000Z",
"_id": "6543210fedcba98765432100",
"seating_plan": {
"id": "example",
"sections": "example"
}
}
],
"owner_id": "6543210fedcba98765432100",
"_id": "6543210fedcba98765432100",
"updatedAt": "2026-11-04T12:00:00.000Z",
"createdAt": "2026-11-04T12:00:00.000Z",
"tier_1": {
"name": "Example",
"price": 0
},
"tier_2": {
"name": "Example",
"price": 0
},
"tier_3": {
"name": "Example",
"price": 0
},
"tier_4": {
"name": "Example",
"price": 0
},
"tier_5": {
"name": "Example",
"price": 0
},
"tier_6": {
"name": "Example",
"price": 0
}
}A ticket's page with its QR code. 404 when there is no such ticket. JSON with ?ionic.
Works without a token; with a user token the answer is personal.
The ID of the ticket.
Returns the Ticket object.
curl -X GET 'http://hristovtintdetailng.com/ticket/{id}?ionic=true'{
"event": "6543210fedcba98765432100",
"date": 1,
"section": 1,
"subsection": 1,
"row": 1,
"seat": 1,
"row_index_formated": 1,
"seat_index_formated": 1,
"lead_id": "6543210fedcba98765432100",
"socket_id": "example",
"status": "frozen",
"expiration_time": "2026-11-04T12:00:00.000Z",
"qr_code": "6543210fedcba98765432100",
"_id": "6543210fedcba98765432100",
"updatedAt": "2026-11-04T12:00:00.000Z",
"createdAt": "2026-11-04T12:00:00.000Z",
"tier": {
"name": "Example",
"price": 0
}
}Holds, releases or sells seats for the visitor (tickets, freeze). Seats are held for the visitor until expiration_time, then released if not paid. 400 for an invalid section, date or seat, a seat already taken or a full section.
Works without a token; with a user token the answer is personal.
The ticket's find index.
The ticket's splice.
The ticket's push.
The ticket's tickets.
The ticket's freeze action.
The ticket's bought by admin.
The ticket's freeze.
Returns the Ticket object.
curl -X POST 'http://hristovtintdetailng.com/tickets?ionic=true' \
-H 'Content-Type: application/json' \
-d '{ "findIndex": "...", "splice": "...", "push": "...", "tickets": "...", "freeze_action": "..." }'{
"event": "6543210fedcba98765432100",
"date": 1,
"section": 1,
"subsection": 1,
"row": 1,
"seat": 1,
"row_index_formated": 1,
"seat_index_formated": 1,
"lead_id": "6543210fedcba98765432100",
"socket_id": "example",
"status": "frozen",
"expiration_time": "2026-11-04T12:00:00.000Z",
"qr_code": "6543210fedcba98765432100",
"_id": "6543210fedcba98765432100",
"updatedAt": "2026-11-04T12:00:00.000Z",
"createdAt": "2026-11-04T12:00:00.000Z",
"tier": {
"name": "Example",
"price": 0
}
}The venues. Answers an array of every venue. Reads no token.
Public - no token needed.
Returns a list of Venue objects.
curl -X GET 'http://hristovtintdetailng.com/venues?ionic=true'
[
{
"name": "Example",
"origin_address": "6543210fedcba98765432100",
"address": "example",
"medias": [
{
"media": "6543210fedcba98765432100",
"gcs_url": "example-item",
"gcs_480_30_url": "example-item",
"gcs_720_30_url": "example-item",
"gcs_1080_30_url": "example-item",
"duration": 1,
"vimeo_uri": "example",
"vimeo_picture": "example",
"vimeo_url": "example-item",
"youtube_url": "example-item",
"youtube_picture": "example",
"thumbnail": "example",
"_id": "6543210fedcba98765432100"
}
],
"_id": "6543210fedcba98765432100",
"updatedAt": "2026-11-04T12:00:00.000Z",
"createdAt": "2026-11-04T12:00:00.000Z"
}
]Creates a venue. Answers 201 with the venue.
Needs the token of a signed-in user.
Returns the Venue object.
curl -X POST 'http://hristovtintdetailng.com/venues?ionic=true' \ -H 'Authorization: Bearer <TOKEN>'
{
"name": "Example",
"origin_address": "6543210fedcba98765432100",
"address": "example",
"medias": [
{
"media": "6543210fedcba98765432100",
"gcs_url": "example-item",
"gcs_480_30_url": "example-item",
"gcs_720_30_url": "example-item",
"gcs_1080_30_url": "example-item",
"duration": 1,
"vimeo_uri": "example",
"vimeo_picture": "example",
"vimeo_url": "example-item",
"youtube_url": "example-item",
"youtube_picture": "example",
"thumbnail": "example",
"_id": "6543210fedcba98765432100"
}
],
"_id": "6543210fedcba98765432100",
"updatedAt": "2026-11-04T12:00:00.000Z",
"createdAt": "2026-11-04T12:00:00.000Z"
}One venue. 404 when there is no such venue.
Public - no token needed.
The ID of the venue.
Returns the Venue object.
curl -X GET 'http://hristovtintdetailng.com/venues/{id}?ionic=true'{
"name": "Example",
"origin_address": "6543210fedcba98765432100",
"address": "example",
"medias": [
{
"media": "6543210fedcba98765432100",
"gcs_url": "example-item",
"gcs_480_30_url": "example-item",
"gcs_720_30_url": "example-item",
"gcs_1080_30_url": "example-item",
"duration": 1,
"vimeo_uri": "example",
"vimeo_picture": "example",
"vimeo_url": "example-item",
"youtube_url": "example-item",
"youtube_picture": "example",
"thumbnail": "example",
"_id": "6543210fedcba98765432100"
}
],
"_id": "6543210fedcba98765432100",
"updatedAt": "2026-11-04T12:00:00.000Z",
"createdAt": "2026-11-04T12:00:00.000Z"
}Updates a venue. Answers the venue, or 404.
Needs the token of a signed-in user.
The ID of the venue.
Returns the Venue object.
curl -X PATCH 'http://hristovtintdetailng.com/venues/{id}?ionic=true' \
-H 'Authorization: Bearer <TOKEN>'{
"name": "Example",
"origin_address": "6543210fedcba98765432100",
"address": "example",
"medias": [
{
"media": "6543210fedcba98765432100",
"gcs_url": "example-item",
"gcs_480_30_url": "example-item",
"gcs_720_30_url": "example-item",
"gcs_1080_30_url": "example-item",
"duration": 1,
"vimeo_uri": "example",
"vimeo_picture": "example",
"vimeo_url": "example-item",
"youtube_url": "example-item",
"youtube_picture": "example",
"thumbnail": "example",
"_id": "6543210fedcba98765432100"
}
],
"_id": "6543210fedcba98765432100",
"updatedAt": "2026-11-04T12:00:00.000Z",
"createdAt": "2026-11-04T12:00:00.000Z"
}Deletes a venue. Answers the deleted venue. Its seating plans and events keep pointing at it.
Needs the token of a signed-in user.
The ID of the venue.
Returns an empty answer on success.
curl -X DELETE 'http://hristovtintdetailng.com/venues/{id}?ionic=true' \
-H 'Authorization: Bearer <TOKEN>'AI: designs a seating plan for one of the venues. Answers { action: 'JOB', async_job } at once; the admin polls GET /async-jobs/:id, and the result arrives in the chat as a message when the job ends. The AI work is charged to the account's credits.
Needs a site admin token.
What the AI should do with the seating plan, in plain words - any language.
The AI chat this request belongs to; its history and language carry over. Leave it out to start a new chat.
Which version of the AI builder to use; leave it out for the current one.
The ID of the seating plan to change.
curl -X POST 'http://hristovtintdetailng.com/create-new-seating-plan?ionic=true' \
-H 'Authorization: Bearer <TOKEN>' \
-H 'Content-Type: application/json' \
-d '{ "prompt": "...", "chatId": "...", "aiVersion": "...", "item_id": "..." }'AI: routes a request for a seating plan to create-new-seating-plan. Does no AI work itself: answers { action: 'REDIRECT', target_url, response } and the chat client calls target_url next with response as the prompt.
Needs a site admin token.
What the AI should do with the seating plan, in plain words - any language.
The AI chat this request belongs to; its history and language carry over. Leave it out to start a new chat.
curl -X POST 'http://hristovtintdetailng.com/generate-seating-plan?ionic=true' \
-H 'Authorization: Bearer <TOKEN>' \
-H 'Content-Type: application/json' \
-d '{ "prompt": "...", "chatId": "..." }'AI: routes a change to a seating plan. Does no AI work itself: answers { action: 'REDIRECT', target_url, response } and the chat client calls target_url next with response as the prompt.
Needs a site admin token.
What the AI should do with the seating plan, in plain words - any language.
The current seating plan, as JSON - the AI changes it and returns the result.
The AI chat this request belongs to; its history and language carry over. Leave it out to start a new chat.
curl -X POST 'http://hristovtintdetailng.com/modify-seating-plan?ionic=true' \
-H 'Authorization: Bearer <TOKEN>' \
-H 'Content-Type: application/json' \
-d '{ "prompt": "...", "item_data": "...", "chatId": "..." }'