Home Features Pricing Blog Docs
Log in Start for Free
English | Deutsch

Events are the top-level objects in your account: a date and venue customers can buy tickets to.

GET /admin/events

Returns the events in your account, split into upcoming and past, plus aggregate stats for the period filter.

curl -H "Authorization: Bearer your-token-here" \
  -H "Accept: application/json" \
  https://app.usetix.io/admin/events

Query parameters:

Parameter Description
period One of today, week, month, year, all. Filters past events and the stats. Upcoming events are not affected. Defaults to month.

Response:

{
  "upcoming_events": [
    {
      "id": 42,
      "slug": "spring-showcase",
      "title": "Spring Showcase",
      "description": "Our annual seasonal event.",
      "starts_at": "2026-05-01T19:00:00Z",
      "ends_at": "2026-05-01T23:00:00Z",
      "sales_starts_at": null,
      "sales_ends_at": "2026-05-01T19:00:00Z",
      "published": true,
      "capacity": 500,
      "venue": {
        "id": 7,
        "name": "The Venue",
        "city": "Berlin"
      }
    }
  ],
  "past_events": [],
  "stats": {
    "upcoming_count": 1,
    "revenue": { "amount": "0.00", "currency": "EUR" },
    "tickets_sold": 0
  }
}

GET /admin/events/:slug

Returns a single event by its URL slug, plus live sales stats and a per-ticket-type breakdown — the same numbers your admin dashboard shows for that event.

curl -H "Authorization: Bearer your-token-here" \
  -H "Accept: application/json" \
  https://app.usetix.io/admin/events/spring-showcase

Response:

{
  "id": 42,
  "slug": "spring-showcase",
  "title": "Spring Showcase",
  "description": "Our annual seasonal event.",
  "starts_at": "2026-05-01T19:00:00Z",
  "ends_at": "2026-05-01T23:00:00Z",
  "sales_starts_at": null,
  "sales_ends_at": "2026-05-01T19:00:00Z",
  "published": true,
  "capacity": 500,
  "venue": {
    "id": 7,
    "name": "The Venue",
    "city": "Berlin"
  },
  "stats": {
    "sold_count": 142,
    "remaining_count": 358,
    "sell_through_percentage": 28,
    "total_orders": 87,
    "total_revenue": { "amount": "3550.00", "currency": "EUR" },
    "redemption_rate": 0.0,
    "sales_velocity": 7.1,
    "capacity_consumed": 145,
    "capacity_remaining": 355
  },
  "tickets_breakdown": [
    {
      "title": "Early Bird",
      "kind": "StandardTicket",
      "color": "#3B82F6",
      "sold": 100,
      "reserved": 2,
      "stock": 0,
      "capacity": 102,
      "price":   { "amount": "20.00", "currency": "EUR" },
      "revenue": { "amount": "2000.00", "currency": "EUR" }
    },
    {
      "title": "Regular",
      "kind": "StandardTicket",
      "color": "#10B981",
      "sold": 42,
      "reserved": 1,
      "stock": 355,
      "capacity": 398,
      "price":   { "amount": "25.00", "currency": "EUR" },
      "revenue": { "amount": "1050.00", "currency": "EUR" }
    }
  ],
  "performers": [
    {
      "id": 17,
      "event_performer_id": 89,
      "name": "DJ Snake",
      "performer_type": "person",
      "role": "headliner",
      "genre": "Techno",
      "position": 1,
      "starts_at": "2026-05-01T22:00:00Z",
      "ends_at": "2026-05-01T23:30:00Z",
      "bio": "House DJ since 2010.",
      "bio_html": "<div class=\"trix-content\"><p>House DJ since 2010.</p></div>",
      "website_url": "https://djsnake.example.com",
      "instagram_url": null,
      "spotify_url": null,
      "soundcloud_url": null,
      "tiktok_url": null,
      "youtube_url": null,
      "image_url": null
    }
  ],
  "faq_items": [],
  "custom_fields": []
}

Stats fields

Field Type Notes
sold_count integer Tickets sold to date (paid orders only). For group tickets, each individual seat counts.
remaining_count integer Tickets still available across all types. -1 means at least one ticket type has unlimited stock.
sell_through_percentage integer | null Percentage of finite-stock tickets sold (0100). null if the event has any unlimited-stock ticket or no stock at all.
total_orders integer Distinct paid orders for this event.
total_revenue object { "amount": "...", "currency": "..." }. Sum of paid order totals.
redemption_rate decimal Percentage of sold tickets already scanned at the door (0.0100.0).
sales_velocity decimal Tickets sold per day since the first paid order. 0 for past or unsold events.
capacity_consumed integer Seats currently held against the event’s capacity (paid + reserved). Only present when capacity is set.
capacity_remaining integer capacity - capacity_consumed, floored at 0. Only present when capacity is set.

Tickets breakdown

tickets_breakdown is an array, one entry per ticket type on the event, in display order. Use it to render a sell-through view per ticket type.

Field Type Notes
title string Ticket title.
kind string StandardTicket or GroupTicket.
color string Hex color code used in the admin dashboard.
sold integer Paid units. For GroupTicket, this counts bundles, not individual seats — matches the stock unit.
reserved integer Units currently held in pending checkouts.
stock integer Remaining stock. -1 means unlimited.
capacity integer Original allocation, reconstructed as sold + reserved + stock. -1 for unlimited tickets.
price object { "amount": "...", "currency": "..." } for the ticket price.
revenue object { "amount": "...", "currency": "..." }. Total paid for this ticket type.

Performers

performers is an array, one entry per performer assigned to the event, in display order (position ascending). The shape mirrors the standalone performers endpoint with extra fields describing the assignment (role, set time, etc.).

Field Type Notes
id integer Internal performer ID — the same value used by GET /admin/performers/:id.
event_performer_id integer Internal ID of the assignment row, in case you need to PATCH/DELETE it directly.
name string Performer display name.
performer_type string person or performing_group.
role string headliner, support, or guest.
genre string | null Free-form genre tag set on the assignment.
position integer Sort order within the event’s lineup, lower first.
starts_at string | null ISO 8601 UTC. Set time within the event, if scheduled.
ends_at string | null ISO 8601 UTC.
bio string | null Plain-text bio (rich text body stripped of HTML).
bio_html string | null Sanitized HTML version of the bio, ready to embed.
website_url string | null External URL.
instagram_url string | null External URL.
spotify_url string | null External URL.
soundcloud_url string | null External URL.
tiktok_url string | null External URL.
youtube_url string | null External URL.
image_url string | null URL to the performer’s image, if attached.

POST /admin/events

Creates a new draft event. Requires a write token. To attach an image, direct-upload the file first and pass its signed_id as the image field.

curl -X POST \
  -H "Authorization: Bearer your-token-here" \
  -H "Accept: application/json" \
  -H "Content-Type: application/json" \
  -d '{"title": "Spring Showcase", "venue_id": 7, "starts_at": "2026-05-01T19:00:00Z", "ends_at": "2026-05-01T23:00:00Z", "sales_ends_at": "2026-05-01T19:00:00Z"}' \
  https://app.usetix.io/admin/events

Body parameters:

Field Required Notes
title yes Event title.
venue_id yes Internal ID of an existing venue in your account.
starts_at yes ISO 8601. Parsed in the venue’s timezone if no zone is included.
ends_at yes ISO 8601.
sales_ends_at yes ISO 8601. When ticket sales close.
sales_starts_at no ISO 8601. When sales open. Omit to open immediately.
description no Plain-text description.
slug no URL slug. Auto-generated from title if omitted.
capacity no Total seats across ticket types. Omit for uncapped.
minimum_age no Age restriction.
customer_vat_rate_override no Per-event VAT override (decimal percentage).
image no signed_id from a direct upload.
background_image no signed_id from a direct upload.

Response: 201 Created with the event JSON and a Location header pointing at GET /admin/events/:slug.

PATCH /admin/events/:slug

Updates an existing event. Send only the fields you want to change.

curl -X PATCH \
  -H "Authorization: Bearer your-token-here" \
  -H "Accept: application/json" \
  -H "Content-Type: application/json" \
  -d '{"title": "Updated title"}' \
  https://app.usetix.io/admin/events/spring-showcase

Accepts the same body parameters as POST /admin/events.

Response: 200 OK with the updated event JSON.

DELETE /admin/events/:slug

Deletes an event. Events with paid orders cannot be deleted; the API returns 422 Unprocessable Entity in that case.

curl -X DELETE \
  -H "Authorization: Bearer your-token-here" \
  -H "Accept: application/json" \
  https://app.usetix.io/admin/events/spring-showcase

Response: 204 No Content on success.

POST /admin/events/:slug/publication

Publishes the event, making it visible on the public shop. Requires a description and at least one ticket; otherwise returns 422 with the missing requirements.

curl -X POST \
  -H "Authorization: Bearer your-token-here" \
  -H "Accept: application/json" \
  https://app.usetix.io/admin/events/spring-showcase/publication

Response: 200 OK with the event JSON (published: true).

DELETE /admin/events/:slug/publication

Unpublishes the event, removing it from the public shop. Existing orders are unaffected.

curl -X DELETE \
  -H "Authorization: Bearer your-token-here" \
  -H "Accept: application/json" \
  https://app.usetix.io/admin/events/spring-showcase/publication

Response: 200 OK with the event JSON (published: false).

Event fields

Field Type Notes
id integer Internal numeric ID. Stable.
slug string URL slug, used as the path parameter. The event’s public URL is https://<your-subdomain>.usetix.io/events/<slug>.
title string Event title.
description string | null Plain-text description. May contain newlines.
starts_at string ISO 8601 UTC. When doors/the event begin.
ends_at string ISO 8601 UTC.
sales_starts_at string | null When ticket sales open. null means sales are open immediately.
sales_ends_at string When ticket sales close. Always set; defaults to starts_at if you didn’t pick a custom value.
published boolean true if the event is live on the public shop, false for drafts.
capacity integer | null Total seats across all ticket types. null means uncapped.
venue.id integer Internal venue ID.
venue.name string Venue name.
venue.city string Venue city.