{"info":{"title":"Session Services API","version":"2025-09-22","description":"### Overview\n\nThe Session Services API exposes core Sessions business resources (events, orders, payouts, tenants, promoters) over JSON-based HTTP endpoints.\n\n### Base URL\n\nhttps://api.session.services\n\n### Authentication\n\nAccess tokens are issued by OpenAuth. Provide the access token via the Authorization header alongside the x-tenant-id header identifying the target tenant (for example: curl -H \"x-tenant-id: <tenant-id>\" -H \"Authorization: Bearer <access-token>\" https://api.session.services/events).\n\n### Errors\n\nError responses follow a consistent JSON shape with a message, status code, and optional validation issues array.\n\n### Response Format\n\nSingle-resource responses wrap data by type, while list endpoints rely on cursor-based pagination for efficient iteration."},"servers":[{"url":"https://api.session.services","description":"Production — Live environment for real usage"},{"url":"https://api.sandbox.session.services","description":"Sandbox — Safe test environment with fake data"}],"security":[{"tenantId":[]}],"x-tagGroups":[{"name":"Identity","tags":["Users","Tenant"]},{"name":"Events","tags":["Events","Admissions","Sections"]},{"name":"Places","tags":["Venues","Locations"]},{"name":"Analytics","tags":["Event Performance","Event Stats","Promoter Performance"]},{"name":"Checkout","tags":["Orders","Tickets","Coupons","Coupon Codes","Statistics"]},{"name":"Teams","tags":["Teams","Team Members","Team Invites"]},{"name":"Promoters","tags":["Promoters","Promoter Members","Promoter Invites"]},{"name":"Payouts","tags":["Payouts","Beneficiaries"]},{"name":"System","tags":["Health"]},{"name":"Media","tags":["QR Codes"]}],"components":{"securitySchemes":{"bearerAuth":{"type":"http","scheme":"bearer","bearerFormat":"JWT","description":"Session token obtained from login endpoint"},"tenantId":{"type":"apiKey","in":"header","name":"x-tenant-id","description":"Tenant identifier required for multi-tenant routing across all endpoints."}},"parameters":{"TenantId":{"name":"x-tenant-id","in":"header","required":true,"schema":{"type":"string","default":"tnt_01jqpj2t2kfvmstt6f6tzkbaf2","example":"tnt_01jqpj2t2kfvmstt6f6tzkbaf2"},"description":"Tenant identifier for multi-tenant routing"},"ApiVersion":{"name":"x-api-version","in":"header","required":true,"schema":{"type":"string","enum":["2025-09-22"],"default":"2025-09-22"},"description":"API version in YYYY-MM-DD format. Specify the version to ensure compatibility with your integration."}},"schemas":{"User":{"type":"object","properties":{"id":{"type":"string","readOnly":true,"description":"Unique identifier for the user","examples":["usr_01jps5cgsd4tzjghtnt45qnhn0"]},"createdAt":{"type":"string","format":"date-time","readOnly":true,"description":"ISO 8601 timestamp when the user account was created","examples":["2026-06-07T11:39:32.854Z"]},"updatedAt":{"type":"string","format":"date-time","readOnly":true,"description":"ISO 8601 timestamp when the user account was last updated","examples":["2026-06-07T11:39:32.856Z"]},"email":{"type":"string","format":"email","description":"User's email address, used for authentication and communication","examples":["test@session.services"]},"firstName":{"type":"string","minLength":1,"description":"User's first name","examples":["Jay"]},"lastName":{"type":"string","minLength":1,"description":"User's last name","examples":["McMullen"]},"imageUrl":{"type":"string","format":"uri","description":"Optional URL to the user's profile image or avatar","examples":["https://assets.session.services/examples/avatar.jpg"]},"metadata":{"type":"object","propertyNames":{"type":"string"},"additionalProperties":{"anyOf":[{"anyOf":[{"type":"string"},{"type":"number"},{"type":"boolean"},{"type":"null"}]},{"type":"array","items":{"anyOf":[{"anyOf":[{"type":"string"},{"type":"number"},{"type":"boolean"},{"type":"null"}]},{"type":"array","items":{}},{"type":"object","propertyNames":{"type":"string"},"additionalProperties":{}}]}},{"type":"object","propertyNames":{"type":"string"},"additionalProperties":{"anyOf":[{"anyOf":[{"type":"string"},{"type":"number"},{"type":"boolean"},{"type":"null"}]},{"type":"array","items":{}},{"type":"object","propertyNames":{"type":"string"},"additionalProperties":{}}]}}]},"description":"Arbitrary key-value metadata for storing user preferences and settings","examples":[{"widgets:team_abc123":{"visibleWidgets":["revenue"]}}]}},"required":["id","createdAt","updatedAt","email","firstName","lastName"],"description":"User entity containing profile and audit information scoped to a specific tenant","examples":[{"id":"usr_01jps5cgsd4tzjghtnt45qnhn0","createdAt":"2026-06-07T11:39:32.854Z","updatedAt":"2026-06-07T11:39:32.856Z","email":"test@session.services","firstName":"Jay","lastName":"McMullen","imageUrl":"https://assets.session.services/examples/avatar.jpg","tenantId":"tnt_01jqpj2t2kfvmstt6f6tzkbaf2"}]},"Event":{"type":"object","properties":{"id":{"type":"string","pattern":"^evt_[0-9a-z]{26}$","description":"A unique identifier for this event","examples":["evt_01jps5cgsenjrazw6wswmyspa3"],"readOnly":true},"createdAt":{"type":"string","format":"date-time","readOnly":true,"description":"Timestamp in ISO 8601 format when this event was created","examples":["2026-06-07T11:39:32.857Z"]},"updatedAt":{"type":"string","format":"date-time","readOnly":true,"description":"Timestamp in ISO 8601 format when this event was last updated","examples":["2026-06-07T11:39:32.857Z"]},"name":{"type":"string","description":"The title of the event shown to attendees","examples":["Test Event"]},"slug":{"type":"string","description":"URL-friendly identifier for the event","examples":["test-event"]},"description":{"type":"string","description":"Detailed description of the event","examples":["This is only a test..."]},"approval":{"enum":["PENDING","APPROVED","REJECTED"],"type":"string","description":"Approval status of the event","examples":["APPROVED"]},"status":{"enum":["UPCOMING","ENDED"],"type":"string","description":"Current stage of the event lifecycle","examples":["UPCOMING","ENDED"]},"visibility":{"enum":["PUBLIC","PRIVATE","SCHEDULED","PASSCODE","CANCELLED"],"type":"string","description":"Who can see the event","examples":["PUBLIC"]},"currency":{"enum":["AED","ALL","AMD","ANG","AOA","ARS","AUD","AWG","AZN","BAM","BBD","BDT","BGN","BHD","BIF","BMD","BND","BOB","BRL","BSD","BTN","BWP","BZD","CAD","CHF","CLP","CNY","COP","CRC","CVE","CZK","DJF","DKK","DOP","DZD","EGP","ERN","ETB","EUR","FJD","FKP","GBP","GEL","GHS","GIP","GMD","GNF","GTQ","GYD","HKD","HNL","HUF","IDR","ILS","INR","ISK","JMD","JOD","JPY","KES","KGS","KHR","KMF","KRW","KWD","KYD","KZT","LAK","LBP","LKR","LRD","LSL","LYD","MAD","MDL","MGA","MKD","MNT","MOP","MUR","MVR","MWK","MXN","MYR","NAD","NGN","NIO","NOK","NPR","NZD","OMR","PAB","PEN","PGK","PHP","PKR","PLN","PYG","QAR","RON","RSD","RWF","SAR","SBD","SCR","SEK","SGD","SHP","SLE","SRD","SVC","SZL","THB","TJS","TMT","TND","TOP","TRY","TTD","TWD","TZS","UAH","UGX","USD","UYU","UZS","VND","VUV","WST","XAF","XCD","XOF","XPF","ZAR","ZMW","ZWL"],"type":"string","description":"Three-letter ISO 4217 currency code used for ticket prices","examples":["AUD"]},"url":{"type":"string","format":"uri","description":"External URL for the event website or ticket page","examples":["https://example.com"]},"entryStartsAt":{"type":"string","pattern":"^\\d{4}-\\d{2}-\\d{2}T\\d{2}:\\d{2}:\\d{2}$","description":"Wall clock time when event entry begins (no timezone, displays same everywhere)","examples":["2026-06-08T11:39:32"]},"entryEndsAt":{"type":"string","pattern":"^\\d{4}-\\d{2}-\\d{2}T\\d{2}:\\d{2}:\\d{2}$","description":"Wall clock time when event entry ends (no timezone, displays same everywhere)","examples":["2026-06-09T11:39:32"]},"publishAt":{"type":"string","pattern":"^\\d{4}-\\d{2}-\\d{2}T\\d{2}:\\d{2}:\\d{2}$","description":"Wall clock time when the event becomes publicly visible (no timezone)","examples":["2026-06-07T11:39:32"]},"images":{"type":"object","properties":{"mobile":{"type":"object","properties":{"src":{"type":"string","format":"uri","examples":["https://assets.session.services/my-image.jpg"]},"alt":{"type":"string","examples":["My Image"]},"width":{"type":"number","examples":[1080]},"height":{"type":"number","examples":[1080]}},"required":["src","alt","width","height"],"description":"Mobile-optimized image for the event"},"desktop":{"type":"object","properties":{"src":{"type":"string","format":"uri","examples":["https://assets.session.services/my-image.jpg"]},"alt":{"type":"string","examples":["My Image"]},"width":{"type":"number","examples":[1080]},"height":{"type":"number","examples":[1080]}},"required":["src","alt","width","height"],"description":"Desktop-optimized image for the event"}},"required":["mobile","desktop"]},"geohash":{"type":"string","description":"Geohash representing the event location","examples":["r3gx1"]},"location":{"type":"object","properties":{"id":{"type":"string","pattern":"^loc_[0-9a-z]{26}$","description":"Location identifier","examples":["loc_01hk153x00eh99pagyydz03sbz"],"readOnly":true},"googlePlaceId":{"type":"string","description":"Google Place ID for this location","examples":["ChIJP3Sa8ziYEmsRUKgyFmh9AQM"]},"createdAt":{"type":"string","format":"date-time","description":"Timestamp in ISO 8601 format when the location was created","examples":["2026-06-07T11:39:32.857Z"]},"updatedAt":{"type":"string","format":"date-time","description":"Timestamp in ISO 8601 format when the location was last updated","examples":["2026-06-07T11:39:32.857Z"]},"name":{"type":"string","description":"Location name","examples":["Watson's EQ"]},"address":{"type":"string","description":"Formatted address","examples":["The, Entertainment Quarter, 1 Bent St, Moore Park NSW 2021, Australia"]},"city":{"type":"string","description":"City name","examples":["Moore Park"]},"state":{"type":"string","description":"State or region","examples":["New South Wales"]},"postcode":{"type":"string","description":"Postal code","examples":["2021"]},"country":{"type":"string","description":"Country name","examples":["Australia"]},"latitude":{"type":"number","minimum":-90,"maximum":90,"description":"Latitude coordinate","examples":[-33.8944593]},"longitude":{"type":"number","minimum":-180,"maximum":180,"description":"Longitude coordinate","examples":[151.2252255]},"timeZone":{"type":"string","minLength":1,"pattern":"^[A-Za-z0-9_+-]+(\\/[A-Za-z0-9_+-]+)*$","description":"IANA timezone identifier (e.g., 'America/New_York', 'Europe/London', 'Australia/Sydney', 'UTC'). Must be validated against the IANA timezone database where used.","examples":["Australia/Sydney"]},"types":{"type":"array","items":{"type":"string"},"description":"Google Place types indicating the category and nature of this location","examples":[["establishment","point_of_interest","stadium"]]},"description":{"type":"string","description":"AI-generated description of the place, when available","examples":["Historic outdoor amphitheater known for summer concerts"]},"image":{"type":"object","properties":{"src":{"type":"string","format":"uri","examples":["https://assets.session.services/my-image.jpg"]},"alt":{"type":"string","examples":["My Image"]},"width":{"type":"number","examples":[1080]},"height":{"type":"number","examples":[1080]}},"required":["src","alt","width","height"],"description":"Primary location photo"},"venue":{"type":"object","properties":{"id":{"type":"string","pattern":"^ven_[0-9a-z]{26}$","description":"Venue identifier"},"name":{"type":"string","description":"Venue name"},"slug":{"type":"string","description":"URL-friendly venue slug"},"teamId":{"type":"string","description":"Team that owns this venue"},"approval":{"enum":["PENDING","APPROVED","REJECTED"],"type":"string","description":"Venue approval status"},"image":{"type":"object","properties":{"src":{"type":"string","format":"uri","examples":["https://assets.session.services/my-image.jpg"]},"alt":{"type":"string","examples":["My Image"]},"width":{"type":"number","examples":[1080]},"height":{"type":"number","examples":[1080]}},"required":["src","alt","width","height"],"description":"Venue image"},"description":{"type":"string","description":"Venue description"}},"required":["id","name","slug","teamId","approval"],"description":"Denormalized venue details if this location is a managed venue. Only included when venue is approved."}},"required":["id","createdAt","updatedAt","name","address","country","latitude","longitude","timeZone"],"description":"Structured location details for the event"},"teamId":{"type":"string","pattern":"^tem_[0-9a-z]{26}$","description":"Team that owns this event. Denormalized for efficient queries."},"promoterId":{"type":"string","pattern":"^pmt_[0-9a-z]{26}$","description":"Promoter organizing the event. Must belong to the team.","examples":["pmt_01jqpjksnsen9vprw95et60t2m"]},"metadata":{"type":"object","propertyNames":{"type":"string","minLength":1,"maxLength":40,"description":"Metadata key. Must be 1-40 characters"},"additionalProperties":{"type":"string","maxLength":500,"description":"Metadata value. Must not exceed 500 characters"},"description":"Flexible key-value metadata storage for custom configuration. Similar to Stripe's metadata API. Maximum 50 keys, key names up to 40 characters, values up to 500 characters."},"genres":{"type":"array","items":{"type":"string"},"description":"Music genres for the event (1-5 genres)","examples":[["Tech House","Melodic Techno"]]},"categories":{"type":"array","items":{"type":"string"},"description":"Event characteristics like vibe, venue type, and amenities (up to 10)","examples":[["Day Party","Open Air","Free Entry"]]},"featured":{"type":"boolean","description":"Whether this event is an editorial pick","examples":[true]},"likes":{"type":"integer","minimum":0,"maximum":9007199254740991,"description":"Number of users who liked this event","examples":[42]}},"required":["id","createdAt","updatedAt","name","slug","description","approval","status","visibility","currency","entryStartsAt","entryEndsAt","publishAt","images","geohash","location","teamId","promoterId"],"description":"event"},"Admission":{"type":"object","properties":{"id":{"type":"string","pattern":"^adm_[0-9a-z]{26}$","description":"A unique identifier for this admission","examples":["adm_01jps5cgsee0xvapbk92e8eb4g"],"readOnly":true},"name":{"type":"string","description":"The display name of the admission type shown to customers","examples":["Final Release"]},"subtitle":{"type":"string","maxLength":100,"description":"Short supporting text shown below the admission name","examples":["Entry before 10pm"]},"description":{"type":"string","maxLength":500,"description":"Detailed information shown when customers expand 'More info'","examples":["Early bird pricing with priority entry. Must present valid ID at gate."]},"capacity":{"type":"number","minimum":-1,"default":-1,"description":"Maximum number of tickets that can be sold for this admission type. A value of -1 indicates unlimited","examples":[100000]},"limit":{"type":"number","minimum":-1,"default":-1,"description":"Maximum number of tickets of this admission type that can be purchased in a single order. A value of -1 indicates unlimited","examples":[-1]},"available":{"type":"number","minimum":-1,"readOnly":true,"description":"Current number of tickets available for purchase, calculated as capacity minus sold minus reserved. A value of -1 indicates unlimited","examples":[70000]},"sold":{"type":"number","minimum":0,"readOnly":true,"description":"Total number of tickets of this admission type that have been purchased","examples":[20000]},"reserved":{"type":"number","minimum":0,"readOnly":true,"description":"Number of tickets held for customers during checkout and not available to others","examples":[10000]},"order":{"type":"number","minimum":0,"description":"Determines the position in which this admission type appears when listed. Lower values appear first","examples":[0]},"createdAt":{"type":"string","format":"date-time","readOnly":true,"description":"Timestamp in ISO 8601 format when this admission type was created","examples":["2026-06-07T11:39:32.857Z"]},"updatedAt":{"type":"string","format":"date-time","readOnly":true,"description":"Timestamp in ISO 8601 format when this admission type was last updated","examples":["2026-06-07T11:39:32.857Z"]},"entryStartsAt":{"type":"string","pattern":"^\\d{4}-\\d{2}-\\d{2}T\\d{2}:\\d{2}:\\d{2}$","description":"Wall clock time from which tickets of this type are valid for entry (no timezone)","examples":["2026-06-08T11:39:32"]},"entryEndsAt":{"type":"string","pattern":"^\\d{4}-\\d{2}-\\d{2}T\\d{2}:\\d{2}:\\d{2}$","description":"Wall clock time until which tickets of this type are valid for entry (no timezone)","examples":["2026-06-09T11:39:32"]},"saleStartsAt":{"type":"string","pattern":"^\\d{4}-\\d{2}-\\d{2}T\\d{2}:\\d{2}:\\d{2}$","description":"Wall clock time when ticket sales for this admission type begin (no timezone)","examples":["2026-06-07T11:39:32"]},"saleEndsAt":{"type":"string","pattern":"^\\d{4}-\\d{2}-\\d{2}T\\d{2}:\\d{2}:\\d{2}$","description":"Wall clock time when ticket sales for this admission type end (no timezone)","examples":["2026-06-09T11:39:32"]},"saleEndsBehavior":{"enum":["SALE_ENDED","SOLD_OUT","DOOR"],"type":"string","default":"SALE_ENDED","description":"Label to display for this admission after ticket sales have ended","examples":["SALE_ENDED"]},"price":{"type":"object","properties":{"base":{"type":"integer","minimum":0,"maximum":9007199254740991,"description":"Base cost of a ticket for this admission type before fees, in cents","examples":[1000]},"booking":{"type":"integer","minimum":0,"maximum":9007199254740991,"description":"Additional booking fee applied to the ticket price, in cents","examples":[200]},"currency":{"enum":["AED","ALL","AMD","ANG","AOA","ARS","AUD","AWG","AZN","BAM","BBD","BDT","BGN","BHD","BIF","BMD","BND","BOB","BRL","BSD","BTN","BWP","BZD","CAD","CHF","CLP","CNY","COP","CRC","CVE","CZK","DJF","DKK","DOP","DZD","EGP","ERN","ETB","EUR","FJD","FKP","GBP","GEL","GHS","GIP","GMD","GNF","GTQ","GYD","HKD","HNL","HUF","IDR","ILS","INR","ISK","JMD","JOD","JPY","KES","KGS","KHR","KMF","KRW","KWD","KYD","KZT","LAK","LBP","LKR","LRD","LSL","LYD","MAD","MDL","MGA","MKD","MNT","MOP","MUR","MVR","MWK","MXN","MYR","NAD","NGN","NIO","NOK","NPR","NZD","OMR","PAB","PEN","PGK","PHP","PKR","PLN","PYG","QAR","RON","RSD","RWF","SAR","SBD","SCR","SEK","SGD","SHP","SLE","SRD","SVC","SZL","THB","TJS","TMT","TND","TOP","TRY","TTD","TWD","TZS","UAH","UGX","USD","UYU","UZS","VND","VUV","WST","XAF","XCD","XOF","XPF","ZAR","ZMW","ZWL"],"type":"string","description":"Three-letter ISO 4217 currency code for the ticket price","examples":["AUD"]}},"required":["base","booking","currency"],"description":"Pricing details for this admission type, including base cost and fees in cents, and currency","examples":[{"base":1000,"booking":200,"currency":"AUD"}]},"visibility":{"enum":["ALWAYS","HIDDEN"],"type":"string","default":"ALWAYS","description":"Controls whether this admission type is shown publicly or only revealed by a scoped coupon.","examples":["ALWAYS"]},"sectionId":{"anyOf":[{"type":"string","pattern":"^sct_[0-9a-z]{26}$","description":"Unique section identifier"},{"type":"null"}],"description":"Identifier of the section this admission type belongs to, if any","examples":["sct_01jps5cgse0g3qj16kpq8t221r"]},"teamId":{"type":"string","pattern":"^tem_[0-9a-z]{26}$","description":"Team that owns this admission. Denormalized for efficient queries."},"promoterId":{"type":"string","pattern":"^pmt_[0-9a-z]{26}$","description":"Identifier of the promoter responsible for this admission type","examples":["pmt_01jqpjksnsen9vprw95et60t2m"]},"eventId":{"type":"string","pattern":"^evt_[0-9a-z]{26}$","description":"Identifier of the event to which this admission type is linked","examples":["evt_01jps5cgsenjrazw6wswmyspa3"]},"eventSlug":{"type":"string","description":"URL-friendly slug for the event associated with this admission type","examples":["test-event"]}},"required":["id","name","available","sold","reserved","order","createdAt","updatedAt","entryStartsAt","entryEndsAt","saleStartsAt","saleEndsAt","price","teamId","promoterId","eventId","eventSlug"],"description":"Admission represents a specific type or category of ticket available for an event","examples":[{"id":"adm_01jps5cgsee0xvapbk92e8eb4g","createdAt":"2026-06-07T11:39:32.857Z","updatedAt":"2026-06-07T11:39:32.857Z","sectionId":"sct_01jps5cgse0g3qj16kpq8t221r","teamId":"tem_01jqpjksnsen9vprw95et60t2m","promoterId":"pmt_01jqpjksnsen9vprw95et60t2m","eventId":"evt_01jps5cgsenjrazw6wswmyspa3","eventSlug":"test-event","name":"Final Release","subtitle":"Entry before 10pm","description":"Early bird pricing with priority entry. Must present valid ID at gate.","capacity":100000,"limit":-1,"available":70000,"sold":20000,"reserved":10000,"order":0,"entryStartsAt":"2026-06-08T11:39:32","entryEndsAt":"2026-06-09T11:39:32","saleStartsAt":"2026-06-07T11:39:32","saleEndsAt":"2026-06-09T11:39:32","saleEndsBehavior":"SALE_ENDED","price":{"base":1000,"booking":200,"currency":"AUD"},"visibility":"ALWAYS","tenantId":"tnt_01jqpj2t2kfvmstt6f6tzkbaf2","deleted":false,"orderPadded":"0000000000"}]},"Section":{"type":"object","properties":{"id":{"type":"string","readOnly":true,"description":"Unique identifier for the section","examples":["sct_01jps5cgse0g3qj16kpq8t221r"]},"createdAt":{"type":"string","format":"date-time","readOnly":true,"description":"Timestamp when the section was created in ISO 8601 format","examples":["2026-06-07T11:39:32.857Z"]},"updatedAt":{"type":"string","format":"date-time","readOnly":true,"description":"Timestamp when the section was last updated in ISO 8601 format","examples":["2026-06-07T11:39:32.857Z"]},"name":{"type":"string","description":"Display name of the section (e.g., 'VIP Area', 'General Admission')","examples":["General Admission"]},"capacity":{"type":"number","minimum":-1,"default":-1,"description":"Maximum number of attendees for this section. Use -1 for unlimited capacity","examples":[1000]},"limit":{"type":"number","minimum":-1,"default":-1,"description":"Maximum number of tickets for this section that can be purchased in a single order. A value of -1 indicates unlimited","examples":[-1]},"available":{"type":"number","minimum":-1,"readOnly":true,"description":"Number of tickets currently available for purchase in this section. Use -1 when capacity is unlimited","examples":[700]},"sold":{"type":"number","minimum":0,"readOnly":true,"description":"Number of tickets sold for this section","examples":[200]},"reserved":{"type":"number","readOnly":true,"description":"Number of tickets currently reserved (in pending orders) for this section","examples":[100]},"order":{"type":"number","minimum":0,"description":"Display order of the section. Lower numbers appear first in listings","examples":[0]},"visibility":{"enum":["ALWAYS","STACKED","HIDDEN"],"type":"string","default":"ALWAYS","description":"Controls how this section is shown: always list all visible admissions, stack to show the cheapest available admission, or hide until a scoped coupon reveals it.","examples":["ALWAYS"]},"location":{"type":"object","properties":{"id":{"type":"string","pattern":"^loc_[0-9a-z]{26}$","description":"Location identifier","examples":["loc_01hk153x00eh99pagyydz03sbz"],"readOnly":true},"googlePlaceId":{"type":"string","description":"Google Place ID for this location","examples":["ChIJP3Sa8ziYEmsRUKgyFmh9AQM"]},"createdAt":{"type":"string","format":"date-time","description":"Timestamp in ISO 8601 format when the location was created","examples":["2026-06-07T11:39:32.857Z"]},"updatedAt":{"type":"string","format":"date-time","description":"Timestamp in ISO 8601 format when the location was last updated","examples":["2026-06-07T11:39:32.857Z"]},"name":{"type":"string","description":"Location name","examples":["Watson's EQ"]},"address":{"type":"string","description":"Formatted address","examples":["The, Entertainment Quarter, 1 Bent St, Moore Park NSW 2021, Australia"]},"city":{"type":"string","description":"City name","examples":["Moore Park"]},"state":{"type":"string","description":"State or region","examples":["New South Wales"]},"postcode":{"type":"string","description":"Postal code","examples":["2021"]},"country":{"type":"string","description":"Country name","examples":["Australia"]},"latitude":{"type":"number","minimum":-90,"maximum":90,"description":"Latitude coordinate","examples":[-33.8944593]},"longitude":{"type":"number","minimum":-180,"maximum":180,"description":"Longitude coordinate","examples":[151.2252255]},"timeZone":{"type":"string","minLength":1,"pattern":"^[A-Za-z0-9_+-]+(\\/[A-Za-z0-9_+-]+)*$","description":"IANA timezone identifier (e.g., 'America/New_York', 'Europe/London', 'Australia/Sydney', 'UTC'). Must be validated against the IANA timezone database where used.","examples":["Australia/Sydney"]},"types":{"type":"array","items":{"type":"string"},"description":"Google Place types indicating the category and nature of this location","examples":[["establishment","point_of_interest","stadium"]]},"description":{"type":"string","description":"AI-generated description of the place, when available","examples":["Historic outdoor amphitheater known for summer concerts"]},"image":{"type":"object","properties":{"src":{"type":"string","format":"uri","examples":["https://assets.session.services/my-image.jpg"]},"alt":{"type":"string","examples":["My Image"]},"width":{"type":"number","examples":[1080]},"height":{"type":"number","examples":[1080]}},"required":["src","alt","width","height"],"description":"Primary location photo"},"venueId":{"type":"string","pattern":"^ven_[0-9a-z]{26}$","description":"Venue identifier if this location is a managed venue on the platform"}},"required":["id","createdAt","updatedAt","name","address","country","latitude","longitude","timeZone"],"description":"Physical location details for the section"},"teamId":{"type":"string","description":"Team that owns this section. Denormalized for efficient queries."},"promoterId":{"type":"string","description":"Unique identifier of the promoter who owns this section","examples":["pmt_01jqpjksnsen9vprw95et60t2m"]},"eventId":{"type":"string","description":"Unique identifier of the event this section belongs to","examples":["evt_01jps5cgsenjrazw6wswmyspa3"]},"eventSlug":{"type":"string","description":"URL-friendly identifier of the event this section belongs to","examples":["test-event"]}},"required":["id","createdAt","updatedAt","name","available","sold","reserved","order","location","teamId","promoterId","eventId","eventSlug"],"description":"A section represents a distinct area or tier within an event venue with its own capacity and pricing"},"Order":{"type":"object","properties":{"id":{"type":"string","pattern":"^ord_[0-9a-z]{26}$","description":"A unique identifier for this order.","examples":["ord_01jps5cgsfgve5b5g2666kyryh"],"readOnly":true},"createdAt":{"type":"string","format":"date-time","readOnly":true,"description":"Timestamp in ISO 8601 format when this order was created.","examples":["2026-06-07T11:39:32.858Z"]},"updatedAt":{"type":"string","format":"date-time","readOnly":true,"description":"Timestamp in ISO 8601 format when this order was last updated.","examples":["2026-06-07T11:39:32.858Z"]},"status":{"enum":["PENDING","PROCESSING","SUCCESSFUL","DISPUTED","ABANDONED"],"type":"string","description":"Current payment lifecycle status. PENDING: awaiting payment. PROCESSING: payment in progress. SUCCESSFUL: payment confirmed. DISPUTED: chargeback filed. ABANDONED: expired or cancelled.","examples":["PENDING"]},"payment":{"type":"object","properties":{"method":{"enum":["FREE","AIRWALLEX","STRIPE"],"type":"string","description":"Payment gateway used to process this order: FREE for no-cost orders, AIRWALLEX or STRIPE for paid orders","examples":["FREE"]},"source":{"enum":["ACH_DIRECT_DEBIT","ACSS_DEBIT","AFFIRM","AFTERPAY","ALFAMART","ALIPAY","ALIPAYCN","ALIPAYHK","ALMA","AMAZON_PAY","APPLEPAY","ATOME","BACS_DIRECT_DEBIT","BANCONTACT","BANK_TRANSFER","BECS_DIRECT_DEBIT","BILLIE","BITPAY","BLIK","BOLETO","BOOST","CARD","CARD_PRESENT","CASHAPP","CRYPTO","CUSTOM","CUSTOMER_BALANCE","DANA","DOKU_EWALLET","DRAGONPAY","DUIT_NOW","EFT_DIRECT_DEBIT","EPS","ESUN","FAMILY_MART","FPX","FPS","GCASH","GIROPAY","GOOGLEPAY","GO_PAY","GRABPAY","HI_LIFE","IDEAL","INDOMARET","INTERAC_PRESENT","JENIUS_PAY","KAKAOPAY","KLARNA","KONBINI","KOREAN_LOCAL_CARD","LINK","LINKAJA","MAXIMA","MB_WAY","MOBILEPAY","MULTIBANCO","MYBANK","NARVESEN","NAVER_PAY","NZ_BANK_ACCOUNT","ONLINE_BANKING","OVO","OXXO","P24","PAYBYBANKAPP","PAYCO","PAYEASY","PAYPAL","PAYPAY","PAYSAFECASH","PAYSAFECARD","PAYSERA","PAY_NOW","PERLAS_TERMINALS","PIX","PROMPTPAY","RABBIT_LINE_PAY","REVOLUT_PAY","SAMSUNG_PAY","SATISPAY","SEPA_DIRECT_DEBIT","SEVEN_ELEVEN","SHOPEE_PAY","SKRILL","SOFORT","SWISH","TNG","TOSS_PAY","TRUEMONEY","TRUSTLY","TWINT","VERKKOPANKKI","WECHATPAY","ZIP"],"type":"string","description":"Payment method used by the customer such as ApplePay, GooglePay, or card-based payments","examples":["APPLEPAY","GOOGLEPAY","CARD"]},"brand":{"enum":["AMERICAN_EXPRESS","CHINA_UNION_PAY","DINERS_CLUB_INTERNATIONAL","DISCOVER","JCB","MAESTRO","MASTERCARD","UNION_PAY","VISA"],"type":"string","description":"Card brand when source is CARD (Visa, Mastercard, American Express, etc.)","examples":["VISA","MASTERCARD","AMERICAN_EXPRESS"]},"last4":{"type":"string","description":"Last 4 digits of the card number when source is CARD","examples":["4242"]},"stripeId":{"type":"string","description":"Stripe payment intent identifier when using Stripe gateway","examples":["pi_1234567890abcdef"]},"stripeClientSecret":{"type":"string","description":"Stripe PaymentIntent client secret associated with the order, used to complete the payment flow","examples":["pi_1234567890abcdef_secret_xyz"]},"stripeAccountId":{"type":"string","description":"Connected Stripe account ID for direct charges. When present, payment is processed directly on the connected account rather than the platform account.","examples":["acct_1234567890abcdef"]},"airwallexId":{"type":"string","description":"Airwallex payment intent identifier when using Airwallex gateway","examples":["int_hkdmr7v9rg1j8donpkmv96"]},"airwallexClientSecret":{"type":"string","description":"Airwallex client secret used to authenticate requests for payment initialization","examples":["eyJhbGciOiJIUzI1NiJ9.eyJpYXQiOjE3MDAwMDAwMDAsImV4cCI6MTcwMDAwMzYwMCwiaW50ZW50X2lkIjoiaW50X2hrZG1yN3Y5cmcxajhkb25wa212OTYifQ.K8vLx2nPzQHdR5mT1wYcBfJkLmNpS3xG7aE9dH4qZvM"]},"airwallexCustomerId":{"type":"string","description":"Airwallex customer ID attached to the PaymentIntent for saved cards functionality","examples":["cus_hkdmrhkh8he4j3kvela"]},"airwallexCustomerClientSecret":{"type":"string","description":"Airwallex customer client secret for accessing saved payment methods in the Drop-in Element","examples":["eyJhbGciOiJIUzI1NiJ9.eyJpYXQiOjE3MDAwMDAwMDAsImV4cCI6MTcwMDAwMzYwMCwiY3VzdG9tZXJfaWQiOiJjdXNfaGtkbXJoa2g4aGU0ajNrdmVsYSJ9.abc123"]}},"required":["method"],"description":"Payment gateway details including method, card brand, and transaction identifiers. Absent for free orders."},"items":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string","description":"Unique identifier for this order item","examples":["itm_01jps5cgsfwyxj0516571eaf17"]},"kind":{"enum":["ADMISSION","ADDON"],"type":"string","description":"Type of item: ADMISSION for tickets, ADDON for additional products or services","examples":["ADMISSION"]},"quantity":{"type":"integer","minimum":1,"maximum":9007199254740991,"description":"Number of items purchased (minimum 1)","examples":[2]},"admissionId":{"type":"string","description":"Unique identifier of the admission ticket type, required for ADMISSION items","examples":["adm_01jps5cgsee0xvapbk92e8eb4g"]},"sectionId":{"type":"string","description":"Unique identifier of the venue section for this admission","examples":["sct_01jps5cgse0g3qj16kpq8t221r"]},"admission":{"$ref":"#/components/schemas/Admission","description":"Complete admission details captured at time of purchase. This is a snapshot that preserves the exact ticket type information as it was when the order was placed","examples":[{"id":"adm_01jps5cgsee0xvapbk92e8eb4g","createdAt":"2026-06-07T11:39:32.857Z","updatedAt":"2026-06-07T11:39:32.857Z","sectionId":"sct_01jps5cgse0g3qj16kpq8t221r","teamId":"tem_01jqpjksnsen9vprw95et60t2m","promoterId":"pmt_01jqpjksnsen9vprw95et60t2m","eventId":"evt_01jps5cgsenjrazw6wswmyspa3","eventSlug":"test-event","name":"Final Release","subtitle":"Entry before 10pm","description":"Early bird pricing with priority entry. Must present valid ID at gate.","capacity":100000,"limit":-1,"available":70000,"sold":20000,"reserved":10000,"order":0,"entryStartsAt":"2026-06-08T11:39:32","entryEndsAt":"2026-06-09T11:39:32","saleStartsAt":"2026-06-07T11:39:32","saleEndsAt":"2026-06-09T11:39:32","saleEndsBehavior":"SALE_ENDED","price":{"base":1000,"booking":200,"currency":"AUD"},"visibility":"ALWAYS","tenantId":"tnt_01jqpj2t2kfvmstt6f6tzkbaf2","deleted":false,"orderPadded":"0000000000"}]},"section":{"$ref":"#/components/schemas/Section","description":"Complete section details captured at time of purchase. This is a snapshot that preserves the exact venue area or category information as it was when the order was placed","examples":[{"id":"sct_01jps5cgse0g3qj16kpq8t221r","createdAt":"2026-06-07T11:39:32.857Z","updatedAt":"2026-06-07T11:39:32.857Z","teamId":"tem_01jqpjksnsen9vprw95et60t2m","promoterId":"pmt_01jqpjksnsen9vprw95et60t2m","eventId":"evt_01jps5cgsenjrazw6wswmyspa3","eventSlug":"test-event","name":"General Admission","capacity":1000,"limit":-1,"available":700,"sold":200,"reserved":100,"order":0,"visibility":"ALWAYS","location":{"id":"loc_01hk153x00eh99pagyydz03sbz","createdAt":"2026-06-07T11:39:32.857Z","updatedAt":"2026-06-07T11:39:32.857Z","googlePlaceId":"ChIJ6zWCPUyxEmsRmc6BPrNaP4s","name":"Watson's EQ","address":"The, Entertainment Quarter, 1 Bent St, Moore Park NSW 2021, Australia","city":"Moore Park","state":"New South Wales","postcode":"2021","country":"Australia","latitude":-33.8944593,"longitude":151.2252255,"timeZone":"Australia/Sydney","types":["establishment","point_of_interest","restaurant","bar"],"image":{"src":"https://assets.session.services/locations/watsons-eq.jpg","alt":"Watson's EQ","width":1200,"height":800}},"tenantId":"tnt_01jqpj2t2kfvmstt6f6tzkbaf2","deleted":false,"orderPadded":"0000000000"}]},"price":{"type":"object","properties":{"net":{"type":"integer","minimum":0,"maximum":9007199254740991,"description":"Total amount to pay to promoter in cents.\nCalculated as: total - booking - refunded","examples":[1200]},"total":{"type":"integer","minimum":0,"maximum":9007199254740991,"description":"Total amount the customer should pay in cents.\nCalculated as: gross - discount","examples":[1200]},"gross":{"type":"integer","minimum":0,"maximum":9007199254740991,"description":"Total amount before refunds and discounts in cents.\nCalculated as: base + booking","examples":[1200]},"base":{"type":"integer","minimum":0,"maximum":9007199254740991,"description":"Total ticket price in cents","examples":[1000]},"booking":{"type":"integer","minimum":0,"maximum":9007199254740991,"description":"Total booking fees in cents (non-refundable)","examples":[200]},"refunded":{"type":"integer","minimum":-9007199254740991,"maximum":0,"description":"Total amount refunded in cents","examples":[0]},"discount":{"type":"integer","minimum":-9007199254740991,"maximum":0,"description":"Total amount discounted in cents","examples":[0]},"currency":{"enum":["AED","ALL","AMD","ANG","AOA","ARS","AUD","AWG","AZN","BAM","BBD","BDT","BGN","BHD","BIF","BMD","BND","BOB","BRL","BSD","BTN","BWP","BZD","CAD","CHF","CLP","CNY","COP","CRC","CVE","CZK","DJF","DKK","DOP","DZD","EGP","ERN","ETB","EUR","FJD","FKP","GBP","GEL","GHS","GIP","GMD","GNF","GTQ","GYD","HKD","HNL","HUF","IDR","ILS","INR","ISK","JMD","JOD","JPY","KES","KGS","KHR","KMF","KRW","KWD","KYD","KZT","LAK","LBP","LKR","LRD","LSL","LYD","MAD","MDL","MGA","MKD","MNT","MOP","MUR","MVR","MWK","MXN","MYR","NAD","NGN","NIO","NOK","NPR","NZD","OMR","PAB","PEN","PGK","PHP","PKR","PLN","PYG","QAR","RON","RSD","RWF","SAR","SBD","SCR","SEK","SGD","SHP","SLE","SRD","SVC","SZL","THB","TJS","TMT","TND","TOP","TRY","TTD","TWD","TZS","UAH","UGX","USD","UYU","UZS","VND","VUV","WST","XAF","XCD","XOF","XPF","ZAR","ZMW","ZWL"],"type":"string","description":"Currency code in ISO 4217 format.","examples":["AUD"]}},"required":["net","total","gross","base","booking","refunded","discount","currency"],"description":"Pricing breakdown for this order item including all fees and discounts"}},"required":["id","kind","quantity","price"]},"description":"Line items in this order, each with a ticket type, quantity, and price breakdown."},"fees":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string","description":"Unique identifier for this order fee","examples":["fee_01jps5cgsgamykd6kh2t738qkh"]},"createdAt":{"type":"string","format":"date-time","readOnly":true,"description":"Timestamp in ISO 8601 format when this fee was created","examples":["2026-06-07T11:39:32.858Z"]},"reason":{"type":"string","description":"Description explaining why this fee was applied to the order","examples":["Gateway Fee"]},"amount":{"type":"number","description":"Fee amount in cents (positive value indicates charge to customer, negative value indicates credit or discount)","examples":[-30]},"currency":{"enum":["AED","ALL","AMD","ANG","AOA","ARS","AUD","AWG","AZN","BAM","BBD","BDT","BGN","BHD","BIF","BMD","BND","BOB","BRL","BSD","BTN","BWP","BZD","CAD","CHF","CLP","CNY","COP","CRC","CVE","CZK","DJF","DKK","DOP","DZD","EGP","ERN","ETB","EUR","FJD","FKP","GBP","GEL","GHS","GIP","GMD","GNF","GTQ","GYD","HKD","HNL","HUF","IDR","ILS","INR","ISK","JMD","JOD","JPY","KES","KGS","KHR","KMF","KRW","KWD","KYD","KZT","LAK","LBP","LKR","LRD","LSL","LYD","MAD","MDL","MGA","MKD","MNT","MOP","MUR","MVR","MWK","MXN","MYR","NAD","NGN","NIO","NOK","NPR","NZD","OMR","PAB","PEN","PGK","PHP","PKR","PLN","PYG","QAR","RON","RSD","RWF","SAR","SBD","SCR","SEK","SGD","SHP","SLE","SRD","SVC","SZL","THB","TJS","TMT","TND","TOP","TRY","TTD","TWD","TZS","UAH","UGX","USD","UYU","UZS","VND","VUV","WST","XAF","XCD","XOF","XPF","ZAR","ZMW","ZWL"],"type":"string","description":"Currency code in ISO 4217 format","examples":["AUD"]},"requestId":{"type":"string","description":"External payment processor request identifier for tracking this fee","examples":["att_sgpdz4v2ph1axmdmdx8_m8w6qv"]},"kind":{"enum":["GATEWAY","SHIPPING","SMS_DELIVERY"],"type":"string","description":"Type of fee for categorization and reporting","examples":["GATEWAY"]}},"required":["id","createdAt","reason","amount","currency","requestId"]},"description":"Gateway fees recorded against this order from settlement processing (e.g. payment processing fees, dispute fees)."},"price":{"type":"object","properties":{"net":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991,"description":"Total amount to pay to promoter in cents.\nCalculated as: total + booking + refunded + dispute","examples":[500]},"total":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991,"description":"Total amount the customer should pay in cents.\nCalculated as: gross + discount","examples":[1400]},"gross":{"type":"integer","minimum":0,"maximum":9007199254740991,"description":"Total amount before refunds and discounts in cents.\nCalculated as: base + booking + shipping","examples":[2200]},"base":{"type":"integer","minimum":0,"maximum":9007199254740991,"description":"Total ticket price in cents","examples":[1000]},"booking":{"type":"integer","minimum":0,"maximum":9007199254740991,"description":"Total booking fees in cents (non-refundable)","examples":[400]},"shipping":{"type":"integer","minimum":0,"maximum":9007199254740991,"description":"Total shipping amount in cents","examples":[0]},"sms":{"type":"integer","minimum":0,"maximum":9007199254740991,"default":0,"description":"SMS delivery fee in cents (customer-facing price in event currency)","examples":[200]},"refunded":{"type":"integer","minimum":-9007199254740991,"maximum":0,"description":"Total amount refunded in cents (negative value)","examples":[-700]},"discount":{"type":"integer","minimum":-9007199254740991,"maximum":0,"description":"Total amount discounted in cents (negative value)","examples":[-1000]},"gateway":{"type":"integer","minimum":-9007199254740991,"maximum":0,"description":"Total absorbed payment gateway fees in cents (negative value)","examples":[0]},"dispute":{"type":"integer","minimum":-9007199254740991,"maximum":0,"description":"Total non-absorbed payment gateway fees in cents (negative value)","examples":[0]},"currency":{"enum":["AED","ALL","AMD","ANG","AOA","ARS","AUD","AWG","AZN","BAM","BBD","BDT","BGN","BHD","BIF","BMD","BND","BOB","BRL","BSD","BTN","BWP","BZD","CAD","CHF","CLP","CNY","COP","CRC","CVE","CZK","DJF","DKK","DOP","DZD","EGP","ERN","ETB","EUR","FJD","FKP","GBP","GEL","GHS","GIP","GMD","GNF","GTQ","GYD","HKD","HNL","HUF","IDR","ILS","INR","ISK","JMD","JOD","JPY","KES","KGS","KHR","KMF","KRW","KWD","KYD","KZT","LAK","LBP","LKR","LRD","LSL","LYD","MAD","MDL","MGA","MKD","MNT","MOP","MUR","MVR","MWK","MXN","MYR","NAD","NGN","NIO","NOK","NPR","NZD","OMR","PAB","PEN","PGK","PHP","PKR","PLN","PYG","QAR","RON","RSD","RWF","SAR","SBD","SCR","SEK","SGD","SHP","SLE","SRD","SVC","SZL","THB","TJS","TMT","TND","TOP","TRY","TTD","TWD","TZS","UAH","UGX","USD","UYU","UZS","VND","VUV","WST","XAF","XCD","XOF","XPF","ZAR","ZMW","ZWL"],"type":"string","description":"Currency code in ISO 4217 format","examples":["AUD"]}},"required":["net","total","gross","base","booking","shipping","refunded","discount","gateway","dispute","currency"],"description":"Price breakdown in the event currency. This reflects what the customer was charged."},"settlement":{"type":"object","properties":{"net":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991,"description":"Total amount to pay to promoter in cents.\nCalculated as: total + booking + refunded + dispute","examples":[500]},"total":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991,"description":"Total amount the customer should pay in cents.\nCalculated as: gross + discount","examples":[1400]},"gross":{"type":"integer","minimum":0,"maximum":9007199254740991,"description":"Total amount before refunds and discounts in cents.\nCalculated as: base + booking + shipping","examples":[2200]},"base":{"type":"integer","minimum":0,"maximum":9007199254740991,"description":"Total ticket price in cents","examples":[1000]},"booking":{"type":"integer","minimum":0,"maximum":9007199254740991,"description":"Total booking fees in cents (non-refundable)","examples":[400]},"shipping":{"type":"integer","minimum":0,"maximum":9007199254740991,"description":"Total shipping amount in cents","examples":[0]},"sms":{"type":"integer","minimum":0,"maximum":9007199254740991,"default":0,"description":"SMS delivery fee in cents (customer-facing price in event currency)","examples":[200]},"refunded":{"type":"integer","minimum":-9007199254740991,"maximum":0,"description":"Total amount refunded in cents (negative value)","examples":[-700]},"discount":{"type":"integer","minimum":-9007199254740991,"maximum":0,"description":"Total amount discounted in cents (negative value)","examples":[-1000]},"gateway":{"type":"integer","minimum":-9007199254740991,"maximum":0,"description":"Total absorbed payment gateway fees in cents (negative value)","examples":[0]},"dispute":{"type":"integer","minimum":-9007199254740991,"maximum":0,"description":"Total non-absorbed payment gateway fees in cents (negative value)","examples":[0]},"currency":{"enum":["AED","ALL","AMD","ANG","AOA","ARS","AUD","AWG","AZN","BAM","BBD","BDT","BGN","BHD","BIF","BMD","BND","BOB","BRL","BSD","BTN","BWP","BZD","CAD","CHF","CLP","CNY","COP","CRC","CVE","CZK","DJF","DKK","DOP","DZD","EGP","ERN","ETB","EUR","FJD","FKP","GBP","GEL","GHS","GIP","GMD","GNF","GTQ","GYD","HKD","HNL","HUF","IDR","ILS","INR","ISK","JMD","JOD","JPY","KES","KGS","KHR","KMF","KRW","KWD","KYD","KZT","LAK","LBP","LKR","LRD","LSL","LYD","MAD","MDL","MGA","MKD","MNT","MOP","MUR","MVR","MWK","MXN","MYR","NAD","NGN","NIO","NOK","NPR","NZD","OMR","PAB","PEN","PGK","PHP","PKR","PLN","PYG","QAR","RON","RSD","RWF","SAR","SBD","SCR","SEK","SGD","SHP","SLE","SRD","SVC","SZL","THB","TJS","TMT","TND","TOP","TRY","TTD","TWD","TZS","UAH","UGX","USD","UYU","UZS","VND","VUV","WST","XAF","XCD","XOF","XPF","ZAR","ZMW","ZWL"],"type":"string","description":"Currency code in ISO 4217 format","examples":["AUD"]},"exchangeRate":{"type":"number","description":"Conversion rate applied from the original payment currency to the settlement currency. 1.0 when both currencies are the same","examples":[1.4]}},"required":["net","total","gross","base","booking","shipping","refunded","discount","gateway","dispute","currency","exchangeRate"],"description":"Price breakdown in the payout currency with the exchange rate applied. When the event currency differs from the settlement currency, all amounts are converted. For same-currency orders the values match the order price with an exchange rate of 1.0."},"couponCode":{"type":"object","properties":{"id":{"type":"string","description":"Unique identifier of the coupon code used in the order","examples":["cod_01jps5cgsfzftw7hxcvr2wftk2"]},"name":{"type":"string","description":"The coupon code string that was entered by the customer","examples":["TEST50"]},"couponId":{"type":"string","description":"Unique identifier of the parent coupon configuration","examples":["cpn_01jps5cgsfzs1ksqaet5hba8ac"]}},"required":["id","name","couponId"],"description":"Coupon code applied to this order for discount calculation."},"customer":{"type":"object","properties":{"id":{"type":"string","description":"Unique identifier of the customer who placed the order","examples":["cus_01jps5cgsf4pn2a32eamppnap1"]},"firstName":{"type":"string","description":"First name of the customer","examples":["Test"]},"lastName":{"type":"string","description":"Last name of the customer","examples":["User"]},"email":{"type":"string","format":"email","description":"Email address of the customer","examples":["test@session.services"]},"phone":{"type":"string","description":"Customer phone number in E.164 format for SMS delivery","examples":["+61411111111"]}},"required":["id","firstName","lastName","email"],"description":"Customer who placed this order. Absent for guest checkouts before customer details are captured."},"marketingConsent":{"type":"object","properties":{"promoter":{"type":"boolean"},"tenant":{"type":"boolean"}},"required":["promoter","tenant"],"description":"Marketing opt-in choices captured during checkout."},"timeline":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string","description":"Unique identifier of the timeline entry","examples":["tln_01jps5cgsfgve5b5g2666kyryh"]},"createdAt":{"type":"string","format":"date-time","readOnly":true,"description":"Timestamp in ISO 8601 format when this timeline entry was created","examples":["2026-06-07T11:39:32.858Z"]},"status":{"type":"string","description":"Order status associated with this timeline entry, when applicable.","examples":["SUCCESSFUL"]},"kind":{"enum":["ORDER_STATUS_UPDATED","ORDER_EXPIRED","ORDER_COMPLETED","PAYMENT_INITIATED","PAYMENT_PROCESSING","PAYMENT_FAILED","PAYMENT_SUCCEEDED","REFUND_INITIATED","REFUND_PROCESSING","REFUND_SUCCEEDED","REFUND_SETTLED","REFUND_FAILED","CHARGEBACK_INITIATED","CHARGEBACK_EVIDENCE_SUBMITTED","CHARGEBACK_WON","CHARGEBACK_LOST","CHARGEBACK_FUNDS_WITHDRAWN","TICKETS_GENERATED","TICKET_ADDED","TICKETS_SCANNED","TICKET_EDITED","TICKET_STATUS_CHANGED","EMAIL_SENT","EMAIL_DELIVERED","EMAIL_OPENED","EMAIL_BOUNCED","EMAIL_COMPLAINED","EMAIL_FAILED","SMS_SENT","SMS_DELIVERED","SMS_FAILED","NOTE"],"type":"string","description":"Type of timeline event (ORDER_COMPLETED, PAYMENT_SUCCEEDED, REFUND_INITIATED, etc.)","examples":["ORDER_COMPLETED"]},"editable":{"type":"boolean","description":"Whether this timeline entry can be edited by users","examples":[false]},"pinned":{"type":"boolean","description":"Whether this timeline entry is pinned to the top of the timeline","examples":[false]},"description":{"type":"string","description":"Human-readable description of what happened in this timeline event","examples":["Order was created successfully"]},"author":{"type":"string","description":"Name of the user or system that created this timeline entry","examples":["System"]},"userId":{"type":"string","description":"Identifier of the user who created this timeline entry, when available.","examples":["usr_01jps5cgsd4tzjghtnt45qnhn0"]},"externalId":{"type":"string","description":"External idempotency key for deduplication (e.g., SES messageId + eventType)","examples":["ses:01234567-89ab-cdef-0123-456789abcdef:Delivery"]}},"required":["id","createdAt","kind","editable","pinned","description","author"]},"description":"Chronological audit trail of events for this order (payments, refunds, emails, scans)."},"refunds":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string","description":"Unique identifier for this refund","examples":["rfd_01jps5cgsfgve5b5g2666kyryh"]},"request":{"type":"object","properties":{"idempotencyKey":{"type":"string","description":"Client-provided key to prevent duplicate refund processing","examples":["refund_12345_customer_request"]}},"description":"Request metadata supplied by Sessions or API callers"},"status":{"enum":["PENDING","PROCESSING","SUCCEEDED","FAILED"],"type":"string","description":"Current processing status. PENDING: awaiting gateway confirmation or async processing (e.g., bank transfers). PROCESSING: gateway confirmed, ticket cancellation in progress. SUCCEEDED/FAILED: terminal states.","examples":["PENDING","SUCCEEDED"]},"acceptedAt":{"type":"string","format":"date-time","description":"Timestamp when the payment gateway accepted the refund","examples":["2026-06-07T11:39:32.858Z"]},"failedAt":{"type":"string","format":"date-time","description":"Timestamp when the refund failed","examples":["2026-06-07T11:39:32.858Z"]},"failure":{"type":"object","properties":{"reason":{"type":"string","description":"Gateway or system failure reason","examples":["Insufficient funds for refund"]},"message":{"type":"string","description":"User-facing failure message when available","examples":["The refund could not be processed."]}},"required":["reason"],"description":"Failure details when the refund failed"},"price":{"type":"object","properties":{"currency":{"type":"string","description":"Currency used for all refund amounts","examples":["AUD"]},"total":{"type":"integer","minimum":1,"maximum":9007199254740991,"description":"Total refund amount in cents, including ticket, shipping, and fee portions.","examples":[1200]},"items":{"type":"integer","minimum":0,"maximum":9007199254740991,"description":"Ticket item portion of the refund in cents","examples":[1200]},"shipping":{"type":"integer","minimum":0,"maximum":9007199254740991,"description":"Shipping portion of the refund in cents","examples":[0]},"fees":{"type":"integer","minimum":0,"maximum":9007199254740991,"description":"Fee portion of the refund in cents","examples":[0]}},"required":["currency","total","items","shipping","fees"],"description":"Refund amount breakdown"},"reason":{"enum":["CUSTOMER_REQUEST","DUPLICATE","EVENT_CANCELLED","OTHER"],"type":"string","description":"Categorized reason for the refund used for analytics","examples":["CUSTOMER_REQUEST","DUPLICATE","EVENT_CANCELLED"]},"note":{"type":"string","description":"Free-form notes explaining the refund","examples":["Customer requested refund due to schedule conflict"]},"items":{"type":"array","items":{"type":"object","properties":{"orderItemId":{"type":"string","description":"Identifier of the order item being refunded","examples":["itm_01jps5cgsfwyxj0516571eaf17"]},"quantity":{"type":"integer","minimum":1,"maximum":9007199254740991,"description":"Number of units refunded for this item","examples":[2]},"amount":{"type":"integer","minimum":0,"maximum":9007199254740991,"description":"Refund amount for this item in cents (base price only, excludes booking fee)","examples":[1200]},"ticketIds":{"type":"array","items":{"type":"string"},"description":"Specific ticket identifiers that were refunded (selected via FIFO)","examples":[["tkt_01jps5cgsg0s32w2pr73vbccde"]]}},"required":["orderItemId","quantity","amount","ticketIds"]},"description":"Line items included in this refund with quantities and amounts"},"tickets":{"type":"object","properties":{"cancelRequested":{"type":"boolean","description":"Whether ticket cancellation was requested for the refund","examples":[true]},"cancelled":{"type":"boolean","description":"Whether tickets were cancelled as part of this refund","examples":[true]},"cancelledCount":{"type":"integer","minimum":0,"maximum":9007199254740991,"description":"Number of tickets that were cancelled","examples":[2]}},"required":["cancelRequested","cancelled","cancelledCount"],"description":"Ticket cancellation state for the refund"},"gateway":{"type":"object","properties":{"provider":{"enum":["FREE","AIRWALLEX","STRIPE"],"type":"string","description":"Payment gateway used to process the refund","examples":["STRIPE","AIRWALLEX"]},"refundId":{"type":"string","description":"Refund identifier from the payment gateway","examples":["re_1234567890abcdef"]},"idempotencyKey":{"type":"string","description":"Idempotency key sent to the payment gateway","examples":["rfd_01jps5cgsfgve5b5g2666kyryh"]}},"required":["provider"],"description":"Gateway refund identifiers"},"actor":{"type":"object","properties":{"type":{"enum":["USER","GATEWAY","SYSTEM"],"type":"string","description":"Who initiated the refund","examples":["USER","GATEWAY"]},"userId":{"type":"string","description":"Identifier of the user who initiated the refund","examples":["usr_01jps5cgsd4tzjghtnt45qnhn0"]}},"required":["type"],"description":"Refund initiator"},"metadata":{"type":"object","propertyNames":{"type":"string"},"additionalProperties":{"type":"string"},"description":"Custom key-value pairs passed through to the payment gateway","examples":[{"supportTicket":"#12345"}]},"notification":{"type":"object","properties":{"requested":{"type":"boolean","description":"Whether a customer refund confirmation email was requested.","examples":[true]},"sentAt":{"type":"string","format":"date-time","description":"Timestamp when the refund confirmation email was sent.","examples":["2026-06-07T11:39:32.858Z"]}},"required":["requested"],"description":"Refund confirmation notification state"},"createdAt":{"type":"string","format":"date-time","description":"Timestamp when the refund was created","examples":["2026-06-07T11:39:32.858Z"]}},"required":["id","status","price","reason","items","tickets","gateway","actor","notification","createdAt"]},"default":[],"description":"Refunds processed for this order including pending, succeeded, and failed attempts."},"offers":{"type":"array","items":{"type":"object","properties":{"kind":{"enum":["SMS_DELIVERY"],"type":"string","description":"Discriminator identifying the type of offer","examples":["SMS_DELIVERY"]},"label":{"type":"string","description":"Human-readable label for the offer","examples":["SMS ticket delivery"]},"price":{"type":"object","properties":{"amount":{"type":"integer","minimum":0,"maximum":9007199254740991,"description":"Offer price in the smallest currency unit (e.g. cents)","examples":[200]},"currency":{"enum":["AED","ALL","AMD","ANG","AOA","ARS","AUD","AWG","AZN","BAM","BBD","BDT","BGN","BHD","BIF","BMD","BND","BOB","BRL","BSD","BTN","BWP","BZD","CAD","CHF","CLP","CNY","COP","CRC","CVE","CZK","DJF","DKK","DOP","DZD","EGP","ERN","ETB","EUR","FJD","FKP","GBP","GEL","GHS","GIP","GMD","GNF","GTQ","GYD","HKD","HNL","HUF","IDR","ILS","INR","ISK","JMD","JOD","JPY","KES","KGS","KHR","KMF","KRW","KWD","KYD","KZT","LAK","LBP","LKR","LRD","LSL","LYD","MAD","MDL","MGA","MKD","MNT","MOP","MUR","MVR","MWK","MXN","MYR","NAD","NGN","NIO","NOK","NPR","NZD","OMR","PAB","PEN","PGK","PHP","PKR","PLN","PYG","QAR","RON","RSD","RWF","SAR","SBD","SCR","SEK","SGD","SHP","SLE","SRD","SVC","SZL","THB","TJS","TMT","TND","TOP","TRY","TTD","TWD","TZS","UAH","UGX","USD","UYU","UZS","VND","VUV","WST","XAF","XCD","XOF","XPF","ZAR","ZMW","ZWL"],"type":"string","description":"Three-letter ISO 4217 currency code","examples":["AUD"]}},"required":["amount","currency"],"description":"Pre-computed price for this offer"}},"required":["kind","label","price"]},"default":[],"description":"Pre-computed add-on offers available during checkout (e.g. SMS ticket delivery)."},"customerId":{"type":"string","pattern":"^cus_[0-9a-z]{26}$","description":"Identifier of the customer who placed this order.","examples":["cus_01jps5cgsf4pn2a32eamppnap1"]},"createdBy":{"type":"object","properties":{"id":{"type":"string","description":"Unique identifier of the customer who placed the order","examples":["cus_01jps5cgsf4pn2a32eamppnap1"]},"firstName":{"type":"string","description":"First name of the customer","examples":["Test"]},"lastName":{"type":"string","description":"Last name of the customer","examples":["User"]},"email":{"type":"string","format":"email","description":"Email address of the customer","examples":["test@session.services"]},"phone":{"type":"string","description":"Customer phone number in E.164 format for SMS delivery","examples":["+61411111111"]}},"required":["id","firstName","lastName","email"],"description":"Admin user who created this order on behalf of the customer."},"teamId":{"type":"string","pattern":"^tem_[0-9a-z]{26}$","description":"Team that owns this order."},"promoterId":{"type":"string","pattern":"^pmt_[0-9a-z]{26}$","description":"Promoter managing this order.","examples":["pmt_01jqpjksnsen9vprw95et60t2m"]},"event":{"type":"object","properties":{"id":{"type":"string","description":"Unique identifier of the event associated with the order","examples":["evt_01jps5cgsenjrazw6wswmyspa3"]},"name":{"type":"string","description":"Display name of the event","examples":["Test Event"]},"slug":{"type":"string","description":"URL-friendly slug of the event","examples":["test-event"]},"location":{"type":"string","description":"Name of the venue or location where the event takes place","examples":["Watson's EQ"]}},"required":["id","name","slug"],"description":"Snapshot of the event at time of purchase (name, slug, location)."},"payoutIds":{"type":"array","items":{"type":"string","pattern":"^pyt_[0-9a-z]{26}$","description":"Payout identifier.","examples":["pay_01HQXYZ"]},"description":"Payout identifiers for settlements that included this order."},"eventId":{"type":"string","pattern":"^evt_[0-9a-z]{26}$","description":"Identifier of the event this order belongs to.","examples":["evt_01jps5cgsenjrazw6wswmyspa3"]},"checkoutUrl":{"type":"string","readOnly":true,"description":"Derived checkout URL where the customer can complete payment for this order.","examples":["https://example.com/checkout/ord_1234567890"]},"returnUrl":{"type":"string","description":"URL to redirect to after successful payment completion.","examples":["https://example.com/event/success"]},"channel":{"type":"object","properties":{"name":{"type":"string","description":"Free-form channel identifier describing where the order originated.","examples":["tenant-web","team-web","api","partner"]},"referrer":{"type":"string","description":"Optional referrer URL captured at order creation for redirect routing and attribution.","examples":["https://sash.teams.mixmag.au/events/example-event"]},"utmSource":{"type":"string","description":"Optional UTM source captured from the originating URL.","examples":["instagram"]},"utmMedium":{"type":"string","description":"Optional UTM medium captured from the originating URL.","examples":["social"]},"utmCampaign":{"type":"string","description":"Optional UTM campaign captured from the originating URL.","examples":["summer-launch"]},"deviceType":{"enum":["MOBILE","TABLET","DESKTOP"],"type":"string","description":"Optional analytics device classification captured at order creation.","examples":["MOBILE"]},"browser":{"type":"string","description":"Optional analytics browser classification captured at order creation.","examples":["Chrome"]},"country":{"type":"string","description":"Optional viewer country captured at order creation for analytics attribution.","examples":["Australia"]},"region":{"type":"string","description":"Optional viewer region captured at order creation for analytics attribution.","examples":["Australia - New South Wales"]},"sessionId":{"type":"string","description":"Session ID captured at order creation for client/server analytics linking.","examples":["ses_01HX..."]},"anonymousId":{"type":"string","description":"Browser anonymous ID captured at order creation for attribution linking.","examples":["aid_01HX..."]}},"required":["name"],"description":"Channel metadata captured at order creation to identify origin and redirect context."},"reservedAt":{"type":"string","format":"date-time","description":"Timestamp when inventory was reserved for this order. Used for checkout countdown timer.","examples":["2026-06-07T11:39:33.049Z"]}},"required":["id","createdAt","updatedAt","status","items","fees","price","teamId","promoterId","event","payoutIds","eventId"],"description":"A customer order for event tickets. Tracks the full lifecycle from checkout through payment, settlement, and payout."},"Ticket":{"type":"object","properties":{"id":{"type":"string","readOnly":true,"description":"Unique identifier for the ticket","examples":["tkt_01jps5cgsg0s32w2pr73vbccde"]},"createdAt":{"type":"string","format":"date-time","readOnly":true,"description":"Timestamp when the ticket was created in ISO 8601 format","examples":["2026-06-07T11:39:32.858Z"]},"updatedAt":{"type":"string","format":"date-time","readOnly":true,"description":"Timestamp when the ticket was last updated in ISO 8601 format","examples":["2026-06-07T11:39:32.858Z"]},"scans":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string","description":"Unique identifier of the ticket scan record","examples":["scn_01jq4rjmtzyzgtsavn9f34mxan"]},"scannedAt":{"type":"string","format":"date-time","readOnly":true,"description":"Timestamp when the ticket was scanned in ISO 8601 format","examples":["2026-06-07T11:39:32.858Z"]},"scannedById":{"type":"string","description":"Unique identifier of the user who performed the scan","examples":["usr_01jps5cgsd4tzjghtnt45qnhn0"]},"scannedBy":{"type":"object","properties":{"id":{"type":"string","description":"Unique identifier of the user who performed the ticket scan","examples":["usr_01jps5cgsd4tzjghtnt45qnhn0"]},"firstName":{"type":"string","description":"First name of the user who performed the scan","examples":["Jay"]},"lastName":{"type":"string","description":"Last name of the user who performed the scan","examples":["McMullen"]},"email":{"type":"string","format":"email","description":"Email address of the user who performed the scan","examples":["test@session.services"]}},"required":["id","firstName","lastName","email"],"description":"Detailed information about the user who performed the scan"},"deviceId":{"type":"string","description":"Unique identifier of the device used for scanning","examples":["dev_01jq4rjvrgar43zwvyakbje22m"]},"kind":{"enum":["CHECK_IN","CHECK_OUT"],"type":"string","description":"Type of scan operation: CHECK_IN for entry, CHECK_OUT for exit","examples":["CHECK_IN"]}},"required":["id","scannedAt","scannedById","scannedBy","deviceId","kind"],"description":"Record of a ticket scan operation including when, who, and what type of scan"},"description":"Array of all scan records for this ticket (check-ins and check-outs)"},"status":{"enum":["ACTIVE","REDEEMED","CANCELLED"],"type":"string","description":"Current status of the ticket: ACTIVE (can be used), REDEEMED (already used), CANCELLED (invalidated or refunded)","examples":["ACTIVE"]},"attendee":{"type":"object","properties":{"firstName":{"type":"string","minLength":1,"description":"First name of the ticket attendee","examples":["Test"]},"lastName":{"type":"string","minLength":1,"description":"Last name of the ticket attendee","examples":["User"]},"email":{"type":"string","format":"email","description":"Email address of the ticket attendee","examples":["test@session.services"]},"phone":{"type":"string","description":"Phone number of the ticket attendee (optional)","examples":["+61411111111"]}},"required":["firstName","lastName","email"],"description":"Attendee information for this ticket - editable by tenant admins"},"customerId":{"type":"string","pattern":"^cus_[0-9a-z]{26}$","description":"Unique identifier of the customer who purchased this ticket (read-only)","examples":["cus_01jps5cgsf4pn2a32eamppnap1"]},"eventId":{"type":"string","pattern":"^evt_[0-9a-z]{26}$","description":"Unique identifier of the event this ticket grants access to","examples":["evt_01jps5cgsenjrazw6wswmyspa3"]},"event":{"type":"object","properties":{"id":{"type":"string","description":"Event ID reference","examples":["evt_01jps5cgsenjrazw6wswmyspa3"]},"name":{"type":"string","description":"The title of the event shown to attendees","examples":["Test Event"]},"slug":{"type":"string","description":"URL-friendly identifier for the event","examples":["test-event"]},"location":{"type":"object","properties":{"id":{"type":"string","pattern":"^loc_[0-9a-z]{26}$","description":"Location identifier","examples":["loc_01hk153x00eh99pagyydz03sbz"],"readOnly":true},"googlePlaceId":{"type":"string","description":"Google Place ID for this location","examples":["ChIJP3Sa8ziYEmsRUKgyFmh9AQM"]},"createdAt":{"type":"string","format":"date-time","description":"Timestamp in ISO 8601 format when the location was created","examples":["2026-06-07T11:39:32.857Z"]},"updatedAt":{"type":"string","format":"date-time","description":"Timestamp in ISO 8601 format when the location was last updated","examples":["2026-06-07T11:39:32.857Z"]},"name":{"type":"string","description":"Location name","examples":["Watson's EQ"]},"address":{"type":"string","description":"Formatted address","examples":["The, Entertainment Quarter, 1 Bent St, Moore Park NSW 2021, Australia"]},"city":{"type":"string","description":"City name","examples":["Moore Park"]},"state":{"type":"string","description":"State or region","examples":["New South Wales"]},"postcode":{"type":"string","description":"Postal code","examples":["2021"]},"country":{"type":"string","description":"Country name","examples":["Australia"]},"latitude":{"type":"number","minimum":-90,"maximum":90,"description":"Latitude coordinate","examples":[-33.8944593]},"longitude":{"type":"number","minimum":-180,"maximum":180,"description":"Longitude coordinate","examples":[151.2252255]},"timeZone":{"type":"string","minLength":1,"pattern":"^[A-Za-z0-9_+-]+(\\/[A-Za-z0-9_+-]+)*$","description":"IANA timezone identifier (e.g., 'America/New_York', 'Europe/London', 'Australia/Sydney', 'UTC'). Must be validated against the IANA timezone database where used.","examples":["Australia/Sydney"]},"types":{"type":"array","items":{"type":"string"},"description":"Google Place types indicating the category and nature of this location","examples":[["establishment","point_of_interest","stadium"]]},"description":{"type":"string","description":"AI-generated description of the place, when available","examples":["Historic outdoor amphitheater known for summer concerts"]},"image":{"type":"object","properties":{"src":{"type":"string","format":"uri","examples":["https://assets.session.services/my-image.jpg"]},"alt":{"type":"string","examples":["My Image"]},"width":{"type":"number","examples":[1080]},"height":{"type":"number","examples":[1080]}},"required":["src","alt","width","height"],"description":"Primary location photo"},"venueId":{"type":"string","pattern":"^ven_[0-9a-z]{26}$","description":"Venue identifier if this location is a managed venue on the platform"}},"required":["id","createdAt","updatedAt","name","address","country","latitude","longitude","timeZone"],"description":"Structured location details for the event"},"entryStartsAt":{"type":"string","pattern":"^\\d{4}-\\d{2}-\\d{2}T\\d{2}:\\d{2}:\\d{2}$","description":"Wall clock time when event entry begins (no timezone, displays same everywhere)","examples":["2026-06-08T11:39:32"]},"entryEndsAt":{"type":"string","pattern":"^\\d{4}-\\d{2}-\\d{2}T\\d{2}:\\d{2}:\\d{2}$","description":"Wall clock time when event entry ends (no timezone, displays same everywhere)","examples":["2026-06-09T11:39:32"]},"images":{"type":"object","properties":{"mobile":{"type":"object","properties":{"src":{"type":"string","format":"uri","examples":["https://assets.session.services/my-image.jpg"]},"alt":{"type":"string","examples":["My Image"]},"width":{"type":"number","examples":[1080]},"height":{"type":"number","examples":[1080]}},"required":["src","alt","width","height"],"description":"Mobile-optimized image for the event"},"desktop":{"type":"object","properties":{"src":{"type":"string","format":"uri","examples":["https://assets.session.services/my-image.jpg"]},"alt":{"type":"string","examples":["My Image"]},"width":{"type":"number","examples":[1080]},"height":{"type":"number","examples":[1080]}},"required":["src","alt","width","height"],"description":"Desktop-optimized image for the event"}},"required":["mobile","desktop"]}},"required":["id","name","slug","location","entryStartsAt","entryEndsAt","images"],"description":"Event details for this ticket"},"admissionId":{"type":"string","pattern":"^adm_[0-9a-z]{26}$","description":"Unique identifier of the admission type/tier this ticket represents","examples":["adm_01jps5cgsee0xvapbk92e8eb4g"]},"admission":{"type":"object","properties":{"id":{"type":"string","description":"Admission ID reference","examples":["adm_01jps5cgsee0xvapbk92e8eb4g"]},"name":{"type":"string","description":"Admission type name at time of purchase","examples":["VIP Access","General Admission","Early Bird"]},"price":{"type":"object","properties":{"base":{"type":"number","description":"Base price in smallest currency unit (cents)"},"booking":{"type":"number","description":"Booking fee in smallest currency unit (cents)"},"currency":{"type":"string","description":"ISO 4217 currency code","examples":["USD","EUR","GBP"]}},"required":["base","booking","currency"],"description":"Price snapshot at time of purchase"},"entryStartsAt":{"type":"string","pattern":"^\\d{4}-\\d{2}-\\d{2}T\\d{2}:\\d{2}:\\d{2}$","description":"Wall clock time when ticket holder can enter (no timezone, displays same everywhere)","examples":["2025-03-15T19:30:00"]},"entryEndsAt":{"type":"string","pattern":"^\\d{4}-\\d{2}-\\d{2}T\\d{2}:\\d{2}:\\d{2}$","description":"Wall clock time when entry period ends (no timezone, displays same everywhere)","examples":["2025-03-15T19:30:00"]}},"required":["id","name","price","entryStartsAt","entryEndsAt"],"description":"Admission details for this ticket"},"section":{"type":"object","properties":{"id":{"type":"string","description":"Section ID reference","examples":["sct_01jps5cgse0g3qj16kpq8t221r"]},"name":{"type":"string","description":"Section name at time of purchase","examples":["Floor Section A","Balcony Left","VIP Lounge"]},"location":{"type":"object","properties":{"name":{"type":"string","description":"Venue or location name"},"address":{"type":"string","description":"Street address"},"city":{"type":"string","description":"City name"},"state":{"type":"string","description":"State or province"},"postcode":{"type":"string","description":"Postal/ZIP code"},"country":{"type":"string","description":"ISO country code"},"latitude":{"type":"number","description":"Geographic latitude coordinate"},"longitude":{"type":"number","description":"Geographic longitude coordinate"},"timeZone":{"type":"string","description":"IANA timezone identifier","examples":["America/New_York","Europe/London"]}},"required":["name"],"description":"Physical location details"}},"required":["id","name","location"],"description":"Section details for this ticket (if assigned to a section)"},"orderId":{"type":"string","pattern":"^ord_[0-9a-z]{26}$","description":"Unique identifier of the order this ticket was purchased in","examples":["ord_01jps5cgsfgve5b5g2666kyryh"]},"orderItemId":{"type":"string","description":"Unique identifier of the specific order item this ticket represents (optional for legacy tickets)","examples":["itm_01jps5cgsfwyxj0516571eaf17"]},"teamId":{"type":"string","pattern":"^tem_[0-9a-z]{26}$","description":"Identifier of the team that owns this ticket","examples":["tem_01jqpjksnsen9vprw95et60t2m"]},"promoterId":{"type":"string","pattern":"^pmt_[0-9a-z]{26}$","description":"Unique identifier of the promoter/organizer who created this event","examples":["pmt_01jqpjksnsen9vprw95et60t2m"]}},"required":["id","createdAt","updatedAt","scans","status","attendee","customerId","eventId","event","admissionId","admission","orderId","teamId","promoterId"],"description":"A ticket represents a customer's admission to an event. It tracks the purchase, scanning history, and current status."},"Payout":{"type":"object","properties":{"id":{"type":"string","readOnly":true,"description":"A unique identifier for this payout.","examples":["pyt_01jps5cgsfv2wre6hd0rc4w4t8"]},"createdAt":{"type":"string","format":"date-time","readOnly":true,"description":"Timestamp in ISO 8601 format when this payout was created.","examples":["2026-06-07T11:39:32.857Z"]},"updatedAt":{"type":"string","format":"date-time","readOnly":true,"description":"Timestamp in ISO 8601 format when this payout was last updated.","examples":["2026-06-07T11:39:32.857Z"]},"paidAt":{"type":"string","format":"date-time","description":"Timestamp in ISO 8601 format when this payout was completed.","examples":["2026-06-07T11:39:32.857Z"]},"dueAt":{"type":"string","format":"date-time","description":"Earliest timestamp in ISO 8601 format when this payout can be picked up for processing. This is not a guaranteed bank arrival time.","examples":["2026-06-07T11:39:32.857Z"]},"status":{"enum":["UPCOMING","FAILED","PROCESSING","PAID","CANCELLED"],"type":"string","description":"Current payment status of this payout.","examples":["PAID"]},"method":{"enum":["AIRWALLEX","STRIPE","MANUAL"],"type":"string","description":"The payout channel used for disbursing funds.","examples":["MANUAL"]},"approval":{"enum":["PENDING","APPROVED","REJECTED"],"type":"string","description":"Approval status for this payout.","examples":["APPROVED"]},"frequency":{"enum":["DAILY","WEEKLY","AFTER_EVENT","ON_DEMAND"],"type":"string","default":"AFTER_EVENT","description":"Schedule on which this payout is generated.","examples":["AFTER_EVENT"]},"structure":{"type":"string","description":"Data structure defining how funds are allocated in this payout.","examples":["DEFAULT"]},"transfers":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string","description":"Unique identifier for this transfer record.","examples":["xfr_01jq8s6c38f97w9yfrfcdhf47v"]},"createdAt":{"type":"string","format":"date-time","description":"Timestamp in ISO 8601 format when this transfer was created.","examples":["2026-06-07T11:39:32.857Z"]},"kind":{"enum":["TICKETS","TENANT","VENUE","TEAM","SESSIONS","UNKNOWN"],"type":"string","description":"Type of transfer. TICKETS: revenue from ticket sales, TENANT: platform fees, VENUE: venue split, TEAM: team split, SESSIONS: platform commission, UNKNOWN: unclassified transfer.","examples":["TICKETS"]},"amount":{"type":"integer","minimum":0,"maximum":9007199254740991,"description":"Transfer amount in cents. Positive values represent money being transferred to the beneficiary.","examples":[1000]},"currency":{"enum":["AED","ALL","AMD","ANG","AOA","ARS","AUD","AWG","AZN","BAM","BBD","BDT","BGN","BHD","BIF","BMD","BND","BOB","BRL","BSD","BTN","BWP","BZD","CAD","CHF","CLP","CNY","COP","CRC","CVE","CZK","DJF","DKK","DOP","DZD","EGP","ERN","ETB","EUR","FJD","FKP","GBP","GEL","GHS","GIP","GMD","GNF","GTQ","GYD","HKD","HNL","HUF","IDR","ILS","INR","ISK","JMD","JOD","JPY","KES","KGS","KHR","KMF","KRW","KWD","KYD","KZT","LAK","LBP","LKR","LRD","LSL","LYD","MAD","MDL","MGA","MKD","MNT","MOP","MUR","MVR","MWK","MXN","MYR","NAD","NGN","NIO","NOK","NPR","NZD","OMR","PAB","PEN","PGK","PHP","PKR","PLN","PYG","QAR","RON","RSD","RWF","SAR","SBD","SCR","SEK","SGD","SHP","SLE","SRD","SVC","SZL","THB","TJS","TMT","TND","TOP","TRY","TTD","TWD","TZS","UAH","UGX","USD","UYU","UZS","VND","VUV","WST","XAF","XCD","XOF","XPF","ZAR","ZMW","ZWL"],"type":"string","description":"Currency code in ISO 4217 format for the transfer amount.","examples":["AUD"]},"fee":{"type":"integer","minimum":0,"maximum":9007199254740991,"description":"Gateway processing fee for this transfer in cents. This fee is deducted from the transfer amount.","examples":[0]},"feeCurrency":{"enum":["AED","ALL","AMD","ANG","AOA","ARS","AUD","AWG","AZN","BAM","BBD","BDT","BGN","BHD","BIF","BMD","BND","BOB","BRL","BSD","BTN","BWP","BZD","CAD","CHF","CLP","CNY","COP","CRC","CVE","CZK","DJF","DKK","DOP","DZD","EGP","ERN","ETB","EUR","FJD","FKP","GBP","GEL","GHS","GIP","GMD","GNF","GTQ","GYD","HKD","HNL","HUF","IDR","ILS","INR","ISK","JMD","JOD","JPY","KES","KGS","KHR","KMF","KRW","KWD","KYD","KZT","LAK","LBP","LKR","LRD","LSL","LYD","MAD","MDL","MGA","MKD","MNT","MOP","MUR","MVR","MWK","MXN","MYR","NAD","NGN","NIO","NOK","NPR","NZD","OMR","PAB","PEN","PGK","PHP","PKR","PLN","PYG","QAR","RON","RSD","RWF","SAR","SBD","SCR","SEK","SGD","SHP","SLE","SRD","SVC","SZL","THB","TJS","TMT","TND","TOP","TRY","TTD","TWD","TZS","UAH","UGX","USD","UYU","UZS","VND","VUV","WST","XAF","XCD","XOF","XPF","ZAR","ZMW","ZWL"],"type":"string","description":"Currency code in ISO 4217 format for the gateway fee.","examples":["AUD"]},"reference":{"type":"string","description":"External reference identifier for tracking this transfer with the payment gateway.","examples":["XYZ"]},"gateway":{"enum":["AIRWALLEX","STRIPE"],"type":"string","description":"Payment gateway used to process this transfer.","examples":["AIRWALLEX"]},"gatewayId":{"type":"string","description":"Unique identifier assigned by the payment gateway for this transfer.","examples":["fe33fb0f-d9d8-47cd-8eef-6a19bd6223eb"]},"beneficiary":{"type":"string","description":"Human-readable name of the beneficiary receiving this transfer.","examples":["My Bank Account"]},"beneficiaryId":{"type":"string","description":"Unique identifier of the beneficiary account receiving this transfer.","examples":["ben_01jps5cgse5n6mg1ymkew9tsfh"]},"status":{"type":"string","description":"Transfer status from the payment gateway (e.g. SCHEDULED, IN_PROGRESS, COMPLETED).","examples":["SCHEDULED"]},"settlementAmount":{"type":"integer","minimum":0,"maximum":9007199254740991,"description":"Amount received by the beneficiary in their local currency, in cents. Present only for cross-currency transfers where the settlement currency differs from the source currency.","examples":[3550]},"settlementCurrency":{"enum":["AED","ALL","AMD","ANG","AOA","ARS","AUD","AWG","AZN","BAM","BBD","BDT","BGN","BHD","BIF","BMD","BND","BOB","BRL","BSD","BTN","BWP","BZD","CAD","CHF","CLP","CNY","COP","CRC","CVE","CZK","DJF","DKK","DOP","DZD","EGP","ERN","ETB","EUR","FJD","FKP","GBP","GEL","GHS","GIP","GMD","GNF","GTQ","GYD","HKD","HNL","HUF","IDR","ILS","INR","ISK","JMD","JOD","JPY","KES","KGS","KHR","KMF","KRW","KWD","KYD","KZT","LAK","LBP","LKR","LRD","LSL","LYD","MAD","MDL","MGA","MKD","MNT","MOP","MUR","MVR","MWK","MXN","MYR","NAD","NGN","NIO","NOK","NPR","NZD","OMR","PAB","PEN","PGK","PHP","PKR","PLN","PYG","QAR","RON","RSD","RWF","SAR","SBD","SCR","SEK","SGD","SHP","SLE","SRD","SVC","SZL","THB","TJS","TMT","TND","TOP","TRY","TTD","TWD","TZS","UAH","UGX","USD","UYU","UZS","VND","VUV","WST","XAF","XCD","XOF","XPF","ZAR","ZMW","ZWL"],"type":"string","description":"Currency code in ISO 4217 format for the settlement amount. Present only for cross-currency transfers.","examples":["USD"]},"deductionId":{"type":"string","description":"Optional reference to a deduction record when this transfer represents money being held back from a previous negative payout."},"deductionPayoutId":{"type":"string","description":"Optional reference to the payout that originated this transfer when it represents an outstanding balance being carried forward."}},"required":["id","createdAt","kind","amount","currency","fee","feeCurrency","reference","gateway","gatewayId","beneficiary","beneficiaryId"]},"description":"List of individual transfer records included in this payout."},"deductions":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string","readOnly":true,"description":"Unique identifier for this deduction record.","examples":["pad_01jq90naksfzf8gt2xnn71h21h"]},"createdAt":{"type":"string","format":"date-time","readOnly":true,"description":"Timestamp in ISO 8601 format when this deduction was created.","examples":["2026-06-07T11:39:32.857Z"]},"updatedAt":{"type":"string","format":"date-time","readOnly":true,"description":"Timestamp in ISO 8601 format when this deduction was last updated.","examples":["2026-06-07T11:39:32.857Z"]},"amount":{"type":"integer","minimum":-9007199254740991,"maximum":0,"description":"Deduction amount in cents. Negative values reduce the payout.","examples":[-100]},"currency":{"enum":["AED","ALL","AMD","ANG","AOA","ARS","AUD","AWG","AZN","BAM","BBD","BDT","BGN","BHD","BIF","BMD","BND","BOB","BRL","BSD","BTN","BWP","BZD","CAD","CHF","CLP","CNY","COP","CRC","CVE","CZK","DJF","DKK","DOP","DZD","EGP","ERN","ETB","EUR","FJD","FKP","GBP","GEL","GHS","GIP","GMD","GNF","GTQ","GYD","HKD","HNL","HUF","IDR","ILS","INR","ISK","JMD","JOD","JPY","KES","KGS","KHR","KMF","KRW","KWD","KYD","KZT","LAK","LBP","LKR","LRD","LSL","LYD","MAD","MDL","MGA","MKD","MNT","MOP","MUR","MVR","MWK","MXN","MYR","NAD","NGN","NIO","NOK","NPR","NZD","OMR","PAB","PEN","PGK","PHP","PKR","PLN","PYG","QAR","RON","RSD","RWF","SAR","SBD","SCR","SEK","SGD","SHP","SLE","SRD","SVC","SZL","THB","TJS","TMT","TND","TOP","TRY","TTD","TWD","TZS","UAH","UGX","USD","UYU","UZS","VND","VUV","WST","XAF","XCD","XOF","XPF","ZAR","ZMW","ZWL"],"type":"string","description":"Currency code in ISO 4217 format for the deduction amount.","examples":["AUD"]},"description":{"type":"string","description":"Human-readable description explaining the reason for this deduction (e.g., 'Minimum bar spend not met', 'Venue damage charge').","examples":["Minimum bar spend not met"]},"gateway":{"type":"string","description":"Payment gateway identifier where this deduction was processed.","examples":["AIRWALLEX"]},"gatewayId":{"type":"string","description":"Unique identifier assigned by the payment gateway for this deduction transaction.","examples":["1221bbbc-cc97-4119-a597-69019e9d8a93"]},"beneficiary":{"type":"string","description":"Human-readable name of the beneficiary account from which this deduction was taken.","examples":["My Bank Account"]},"beneficiaryId":{"type":"string","description":"Unique identifier of the beneficiary account from which this deduction was taken.","examples":["ben_01jps5cgse5n6mg1ymkew9tsfh"]},"transferId":{"type":"string","description":"Optional reference to a transfer record when this deduction results in money being moved to a future payout."},"transferPayoutId":{"type":"string","description":"Optional reference to a future payout where the deducted amount will be applied."}},"required":["id","createdAt","updatedAt","amount","currency","description","gateway","gatewayId","beneficiary","beneficiaryId"]},"description":"List of deductions applied before calculating the payout total."},"price":{"type":"object","properties":{"net":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991,"description":"Total amount to pay to promoter.\nCalculated as: total + booking + refunded + dispute + deductions","examples":[1000]},"total":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991,"description":"Total amount the collected in ticket revenue.\nCalculated as: gross + discount","examples":[1000]},"gross":{"type":"integer","minimum":0,"maximum":9007199254740991,"description":"Total amount before refunds, disputes, deductions and discounts.\nCalculated as: base + booking + shipping","examples":[1000]},"base":{"type":"integer","minimum":0,"maximum":9007199254740991,"description":"Total value of tickets.","examples":[1000]},"booking":{"type":"integer","minimum":0,"maximum":9007199254740991,"description":"Total value of booking fees (non-refundable).","examples":[0]},"shipping":{"type":"integer","minimum":0,"maximum":9007199254740991,"description":"Total value of shipping.","examples":[0]},"sms":{"type":"integer","minimum":0,"maximum":9007199254740991,"default":0,"description":"Total SMS delivery fees collected in cents (owed to Session Services, not the event organiser).","examples":[0]},"refunded":{"type":"integer","minimum":-9007199254740991,"maximum":0,"description":"Total value of refunds (negative value).","examples":[0]},"discount":{"type":"integer","minimum":-9007199254740991,"maximum":0,"description":"Total value of discounts (negative value).","examples":[0]},"gateway":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991,"description":"Total value of absorbed payment gateway fees. Negative values are charges; positive values are reversals.","examples":[0]},"dispute":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991,"description":"Total value of non-absorbed payment gateway fees. Negative values are charges; positive values are reversals.","examples":[0]},"deductions":{"type":"integer","minimum":-9007199254740991,"maximum":0,"description":"Total value of payout-level deductions (negative value).","examples":[0]},"currency":{"enum":["AED","ALL","AMD","ANG","AOA","ARS","AUD","AWG","AZN","BAM","BBD","BDT","BGN","BHD","BIF","BMD","BND","BOB","BRL","BSD","BTN","BWP","BZD","CAD","CHF","CLP","CNY","COP","CRC","CVE","CZK","DJF","DKK","DOP","DZD","EGP","ERN","ETB","EUR","FJD","FKP","GBP","GEL","GHS","GIP","GMD","GNF","GTQ","GYD","HKD","HNL","HUF","IDR","ILS","INR","ISK","JMD","JOD","JPY","KES","KGS","KHR","KMF","KRW","KWD","KYD","KZT","LAK","LBP","LKR","LRD","LSL","LYD","MAD","MDL","MGA","MKD","MNT","MOP","MUR","MVR","MWK","MXN","MYR","NAD","NGN","NIO","NOK","NPR","NZD","OMR","PAB","PEN","PGK","PHP","PKR","PLN","PYG","QAR","RON","RSD","RWF","SAR","SBD","SCR","SEK","SGD","SHP","SLE","SRD","SVC","SZL","THB","TJS","TMT","TND","TOP","TRY","TTD","TWD","TZS","UAH","UGX","USD","UYU","UZS","VND","VUV","WST","XAF","XCD","XOF","XPF","ZAR","ZMW","ZWL"],"type":"string","description":"Currency code in ISO 4217 format.","examples":["AUD"]}},"required":["net","total","gross","base","booking","shipping","refunded","discount","gateway","dispute","deductions","currency"],"description":"Summary of amounts for transfers and deductions in this payout."},"event":{"type":"object","properties":{"id":{"type":"string","description":"Unique identifier for the event associated with this payout.","examples":["evt_01jps5cgsenjrazw6wswmyspa3"]},"name":{"type":"string","description":"Human-readable name of the event.","examples":["Test Event"]},"slug":{"type":"string","description":"URL-friendly slug identifier for the event.","examples":["test-event"]},"location":{"type":"string","description":"Optional human-readable location name where the event takes place.","examples":["Watson's EQ"]}},"required":["id","name","slug"],"description":"Information about the event associated with this payout."},"timeline":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string","description":"Unique identifier for this timeline entry","examples":["tl_01jgxyz123abc"]},"createdAt":{"type":"string","format":"date-time","readOnly":true,"description":"Timestamp in ISO 8601 format when this timeline entry was created","examples":["2026-06-07T11:39:32.857Z"]},"kind":{"enum":["CREATED","APPROVED","REJECTED","PROCESSING","PAID","FAILED","CANCELLED","NOTE"],"type":"string","description":"Type of timeline event (CREATED, APPROVED, PROCESSING, PAID, NOTE, etc.)","examples":["CREATED","APPROVED","PAID"]},"editable":{"type":"boolean","description":"Whether this timeline entry can be edited by users","examples":[false]},"pinned":{"type":"boolean","description":"Whether this timeline entry is pinned to the top of the timeline","examples":[false]},"description":{"type":"string","description":"Human-readable description of what happened in this timeline event","examples":["Payout was created after event settlement"]},"author":{"type":"string","description":"Name of the user or system that created this timeline entry","examples":["System"]},"userId":{"type":"string","description":"Identifier of the user who created this timeline entry, when available","examples":["usr_01jps5cgsd4tzjghtnt45qnhn0"]},"externalId":{"type":"string","description":"External idempotency key for deduplication (e.g., Airwallex transfer events)","examples":["airwallex:transfer_abc123:completed"]}},"required":["id","createdAt","kind","editable","pinned","description","author"]},"description":"Chronological list of status changes and notes for this payout."},"eventId":{"type":"string","description":"Identifier of the event for which this payout was generated.","examples":["evt_01jps5cgsenjrazw6wswmyspa3"]},"teamId":{"type":"string","description":"Team receiving this payout. BREAKING CHANGE: Replaced promoterId/promoterSlug."}},"required":["id","createdAt","updatedAt","status","method","approval","structure","transfers","deductions","price","event","eventId","teamId"],"description":"payout"},"Promoter":{"type":"object","properties":{"id":{"type":"string","pattern":"^pmt_[0-9a-z]{26}$","description":"Unique identifier for the promoter organization","examples":["pmt_01jqpjksnsen9vprw95et60t2m"],"readOnly":true},"createdAt":{"type":"string","format":"date-time","readOnly":true,"description":"Timestamp in ISO 8601 format when the promoter was created","examples":["2026-06-07T11:39:32.856Z"]},"updatedAt":{"type":"string","format":"date-time","readOnly":true,"description":"Timestamp in ISO 8601 format when the promoter was last updated","examples":["2026-06-07T11:39:32.856Z"]},"name":{"type":"string","minLength":3,"maxLength":30,"description":"Display name of the promoter organization. Must be between 3 and 30 characters","examples":["Session Services"]},"slug":{"type":"string","minLength":3,"maxLength":30,"description":"URL-friendly slug for the promoter organization. Must be unique and between 3 and 30 characters","examples":["session-services"]},"teamId":{"type":"string","pattern":"^tem_[0-9a-z]{26}$","description":"ID of the team that owns this promoter. Establishes team-based organization and permissions.","examples":["tem_01jqpjksnsen9vprw95et60t2m"]},"description":{"type":"string","description":"Detailed description of the promoter organization and their events","examples":["This is only a test..."]},"approval":{"enum":["PENDING","APPROVED","REJECTED"],"type":"string","description":"Approval status of the promoter. PENDING: awaiting review, APPROVED: can create events, REJECTED: cannot operate","examples":["APPROVED"]},"image":{"type":"object","properties":{"src":{"type":"string","format":"uri","examples":["https://assets.session.services/my-image.jpg"]},"alt":{"type":"string","examples":["My Image"]},"width":{"type":"number","examples":[1080]},"height":{"type":"number","examples":[1080]}},"required":["src","alt","width","height"],"description":"Optional promotional image for the promoter organization with dimensions and alt text"},"location":{"type":"object","properties":{"id":{"type":"string","pattern":"^loc_[0-9a-z]{26}$","description":"Location identifier","examples":["loc_01hk153x00eh99pagyydz03sbz"],"readOnly":true},"googlePlaceId":{"type":"string","description":"Google Place ID for this location","examples":["ChIJP3Sa8ziYEmsRUKgyFmh9AQM"]},"createdAt":{"type":"string","format":"date-time","description":"Timestamp in ISO 8601 format when the location was created","examples":["2026-06-07T11:39:32.857Z"]},"updatedAt":{"type":"string","format":"date-time","description":"Timestamp in ISO 8601 format when the location was last updated","examples":["2026-06-07T11:39:32.857Z"]},"name":{"type":"string","description":"Location name","examples":["Watson's EQ"]},"address":{"type":"string","description":"Formatted address","examples":["The, Entertainment Quarter, 1 Bent St, Moore Park NSW 2021, Australia"]},"city":{"type":"string","description":"City name","examples":["Moore Park"]},"state":{"type":"string","description":"State or region","examples":["New South Wales"]},"postcode":{"type":"string","description":"Postal code","examples":["2021"]},"country":{"type":"string","description":"Country name","examples":["Australia"]},"latitude":{"type":"number","minimum":-90,"maximum":90,"description":"Latitude coordinate","examples":[-33.8944593]},"longitude":{"type":"number","minimum":-180,"maximum":180,"description":"Longitude coordinate","examples":[151.2252255]},"timeZone":{"type":"string","minLength":1,"pattern":"^[A-Za-z0-9_+-]+(\\/[A-Za-z0-9_+-]+)*$","description":"IANA timezone identifier (e.g., 'America/New_York', 'Europe/London', 'Australia/Sydney', 'UTC'). Must be validated against the IANA timezone database where used.","examples":["Australia/Sydney"]},"types":{"type":"array","items":{"type":"string"},"description":"Google Place types indicating the category and nature of this location","examples":[["establishment","point_of_interest","stadium"]]},"description":{"type":"string","description":"AI-generated description of the place, when available","examples":["Historic outdoor amphitheater known for summer concerts"]},"image":{"type":"object","properties":{"src":{"type":"string","format":"uri","examples":["https://assets.session.services/my-image.jpg"]},"alt":{"type":"string","examples":["My Image"]},"width":{"type":"number","examples":[1080]},"height":{"type":"number","examples":[1080]}},"required":["src","alt","width","height"],"description":"Primary location photo"},"venue":{"type":"object","properties":{"id":{"type":"string","pattern":"^ven_[0-9a-z]{26}$","description":"Venue identifier"},"name":{"type":"string","description":"Venue name"},"slug":{"type":"string","description":"URL-friendly venue slug"},"teamId":{"type":"string","description":"Team that owns this venue"},"approval":{"enum":["PENDING","APPROVED","REJECTED"],"type":"string","description":"Venue approval status"},"image":{"type":"object","properties":{"src":{"type":"string","format":"uri","examples":["https://assets.session.services/my-image.jpg"]},"alt":{"type":"string","examples":["My Image"]},"width":{"type":"number","examples":[1080]},"height":{"type":"number","examples":[1080]}},"required":["src","alt","width","height"],"description":"Venue image"},"description":{"type":"string","description":"Venue description"}},"required":["id","name","slug","teamId","approval"],"description":"Denormalized venue details if this location is a managed venue. Only included when venue is approved."}},"required":["id","createdAt","updatedAt","name","address","country","latitude","longitude","timeZone"],"description":"Primary location details for the promoter including address, coordinates, and timezone"},"geohash":{"type":"string","description":"Geohash encoding of the promoter's location for efficient spatial queries","examples":["r3gx1"]},"tracking":{"type":"object","properties":{"fbId":{"type":"string","description":"Facebook pixel ID for tracking conversions and analytics","examples":["485739562847563"]},"gtmId":{"type":"string","description":"Google Tag Manager container ID for web analytics","examples":["GTM-K8WPM5N"]},"tikTokId":{"type":"string","description":"TikTok pixel ID for advertising and conversion tracking","examples":["BQCKPH3RC77U8GPMLJ5G"]}},"description":"Optional tracking configuration for analytics and advertising platforms"},"metadata":{"type":"object","propertyNames":{"type":"string","minLength":1,"maxLength":40,"description":"Metadata key. Must be 1-40 characters"},"additionalProperties":{"type":"string","maxLength":500,"description":"Metadata value. Must not exceed 500 characters"},"description":"Flexible key-value metadata storage for custom configuration. Similar to Stripe's metadata API. Maximum 50 keys, key names up to 40 characters, values up to 500 characters."}},"required":["id","createdAt","updatedAt","name","slug","teamId","description","approval","location","geohash"],"description":"Promoter organization with location and approval status"},"Beneficiary":{"type":"object","properties":{"id":{"type":"string","readOnly":true,"description":"A unique identifier for this beneficiary.","examples":["ben_01jps5cgse5n6mg1ymkew9tsfh"]},"createdAt":{"type":"string","format":"date-time","readOnly":true,"description":"Timestamp in ISO 8601 format when this beneficiary was created.","examples":["2026-06-07T11:39:32.857Z"]},"updatedAt":{"type":"string","format":"date-time","readOnly":true,"description":"Timestamp in ISO 8601 format when this beneficiary was last updated.","examples":["2026-06-07T11:39:32.857Z"]},"name":{"type":"string","description":"The account name for this beneficiary.","examples":["My Bank Account"]},"currency":{"enum":["AED","ALL","AMD","ANG","AOA","ARS","AUD","AWG","AZN","BAM","BBD","BDT","BGN","BHD","BIF","BMD","BND","BOB","BRL","BSD","BTN","BWP","BZD","CAD","CHF","CLP","CNY","COP","CRC","CVE","CZK","DJF","DKK","DOP","DZD","EGP","ERN","ETB","EUR","FJD","FKP","GBP","GEL","GHS","GIP","GMD","GNF","GTQ","GYD","HKD","HNL","HUF","IDR","ILS","INR","ISK","JMD","JOD","JPY","KES","KGS","KHR","KMF","KRW","KWD","KYD","KZT","LAK","LBP","LKR","LRD","LSL","LYD","MAD","MDL","MGA","MKD","MNT","MOP","MUR","MVR","MWK","MXN","MYR","NAD","NGN","NIO","NOK","NPR","NZD","OMR","PAB","PEN","PGK","PHP","PKR","PLN","PYG","QAR","RON","RSD","RWF","SAR","SBD","SCR","SEK","SGD","SHP","SLE","SRD","SVC","SZL","THB","TJS","TMT","TND","TOP","TRY","TTD","TWD","TZS","UAH","UGX","USD","UYU","UZS","VND","VUV","WST","XAF","XCD","XOF","XPF","ZAR","ZMW","ZWL"],"type":"string","description":"Three-letter ISO 4217 currency code for payouts.","examples":["AUD"]},"gateway":{"enum":["AIRWALLEX","STRIPE"],"type":"string","description":"The payment gateway used for processing payouts.","examples":["STRIPE"]},"gatewayId":{"type":"string","description":"The identifier assigned by the payment gateway to this account.","examples":["7489cb17-24c5-4acf-a0cf-d93ed38081fe"]},"teamId":{"type":"string","description":"Team that owns this beneficiary account."},"teamIds":{"type":"array","items":{"type":"string"},"description":"List of team IDs this beneficiary is assigned to. Empty array means available to all teams.","examples":[[]]},"venueIds":{"type":"array","items":{"type":"string"},"description":"List of venue IDs this beneficiary is assigned to. Empty array means team-level only (available to all venues).","examples":[[]]}},"required":["id","createdAt","updatedAt","name","currency","gateway","gatewayId","teamId","teamIds","venueIds"],"description":"beneficiary"},"Coupon":{"type":"object","properties":{"id":{"type":"string","readOnly":true,"description":"A unique identifier for this coupon.","examples":["cpn_01jps5cgsfzs1ksqaet5hba8ac"]},"couponId":{"type":"string","readOnly":true,"description":"Duplicate of id field for GSI queries.","examples":["cpn_01jps5cgsfzs1ksqaet5hba8ac"]},"createdAt":{"type":"string","format":"date-time","readOnly":true,"description":"Timestamp in ISO 8601 format when this coupon was created.","examples":["2026-06-07T11:39:32.857Z"]},"updatedAt":{"type":"string","format":"date-time","readOnly":true,"description":"Timestamp in ISO 8601 format when this coupon was last updated.","examples":["2026-06-07T11:39:32.857Z"]},"name":{"type":"string","description":"Internal label for the coupon, visible to event organisers.","examples":["Half Price"]},"active":{"type":"boolean","description":"Whether this coupon is currently active.","examples":[true]},"showHidden":{"type":"boolean","description":"Whether this coupon reveals hidden admissions and sections within its scope.","examples":[false]},"kind":{"enum":["AMOUNT","PERCENT"],"type":"string","description":"Type of discount this coupon gives: a fixed amount or a percentage.","examples":["PERCENT"]},"filter":{"enum":["TEAM","PROMOTER","EVENTS","SECTIONS","ADMISSIONS"],"type":"string","description":"Scope of the coupon. TEAM applies to all events in the team. PROMOTER applies to all events by specified promoters. EVENTS/SECTIONS/ADMISSIONS apply to specific items.","examples":["EVENTS"]},"currency":{"enum":["AED","ALL","AMD","ANG","AOA","ARS","AUD","AWG","AZN","BAM","BBD","BDT","BGN","BHD","BIF","BMD","BND","BOB","BRL","BSD","BTN","BWP","BZD","CAD","CHF","CLP","CNY","COP","CRC","CVE","CZK","DJF","DKK","DOP","DZD","EGP","ERN","ETB","EUR","FJD","FKP","GBP","GEL","GHS","GIP","GMD","GNF","GTQ","GYD","HKD","HNL","HUF","IDR","ILS","INR","ISK","JMD","JOD","JPY","KES","KGS","KHR","KMF","KRW","KWD","KYD","KZT","LAK","LBP","LKR","LRD","LSL","LYD","MAD","MDL","MGA","MKD","MNT","MOP","MUR","MVR","MWK","MXN","MYR","NAD","NGN","NIO","NOK","NPR","NZD","OMR","PAB","PEN","PGK","PHP","PKR","PLN","PYG","QAR","RON","RSD","RWF","SAR","SBD","SCR","SEK","SGD","SHP","SLE","SRD","SVC","SZL","THB","TJS","TMT","TND","TOP","TRY","TTD","TWD","TZS","UAH","UGX","USD","UYU","UZS","VND","VUV","WST","XAF","XCD","XOF","XPF","ZAR","ZMW","ZWL"],"type":"string","description":"Three-letter ISO 4217 currency code. Required for AMOUNT coupons. Optional for PERCENT coupons - when omitted, applies to all currencies.","examples":["AUD"]},"discount":{"type":"number","minimum":0,"description":"The discount value. If kind is 'amount', this is a currency amount. If kind is 'percent', this is a percentage.","examples":[50]},"limit":{"type":"number","description":"Maximum number of times the coupon can be redeemed across all customers.","examples":[-1]},"uses":{"type":"number","description":"Number of times this coupon has been redeemed so far.","examples":[0]},"promoters":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string","description":"Identifier of a promoter this coupon applies to."},"name":{"type":"string","description":"Name of a promoter this coupon applies to."},"slug":{"type":"string","description":"URL slug of a promoter this coupon applies to."}},"required":["id","name","slug"]},"description":"List of promoters this coupon applies to when filter is PROMOTER."},"events":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string","description":"Identifier of an event this coupon applies to."},"name":{"type":"string","description":"Name of an event this coupon applies to."},"slug":{"type":"string","description":"URL slug of an event this coupon applies to."}},"required":["id","name","slug"]},"description":"List of events this coupon applies to when filter is EVENTS."},"sections":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string","description":"Identifier of a section this coupon applies to."},"name":{"type":"string","description":"Name of a section this coupon applies to."},"eventId":{"type":"string","description":"Identifier of the event this section belongs to."}},"required":["id","name","eventId"]},"description":"List of sections this coupon applies to when filter is 'sections'."},"admissions":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string","description":"Identifier of an admission this coupon applies to."},"name":{"type":"string","description":"Name of an admission this coupon applies to."},"eventId":{"type":"string","description":"Identifier of the event this admission belongs to."}},"required":["id","name","eventId"]},"description":"List of admissions this coupon applies to when filter is 'admissions'."},"saleStartsAt":{"type":"string","pattern":"^\\d{4}-\\d{2}-\\d{2}T\\d{2}:\\d{2}:\\d{2}$","description":"Wall clock time when this coupon becomes valid (no timezone, ISO 8601 format: YYYY-MM-DDTHH:mm:ss)","examples":["2025-02-10T03:00:00"]},"saleEndsAt":{"type":"string","pattern":"^\\d{4}-\\d{2}-\\d{2}T\\d{2}:\\d{2}:\\d{2}$","description":"Wall clock time when this coupon expires (no timezone, ISO 8601 format: YYYY-MM-DDTHH:mm:ss)","examples":[null]},"teamId":{"type":"string","description":"Team that created this coupon."}},"required":["id","createdAt","updatedAt","name","kind","filter","discount","limit","saleStartsAt","teamId"],"description":"coupon"},"CouponCode":{"type":"object","properties":{"id":{"type":"string","readOnly":true,"description":"A unique identifier for this coupon code.","examples":["cod_01jps5cgsfzftw7hxcvr2wftk2"]},"createdAt":{"type":"string","format":"date-time","readOnly":true,"description":"Timestamp in ISO 8601 format when this coupon code was created.","examples":["2026-06-07T11:39:32.857Z"]},"updatedAt":{"type":"string","format":"date-time","readOnly":true,"description":"Timestamp in ISO 8601 format when this coupon code was last updated.","examples":["2026-06-07T11:39:32.857Z"]},"name":{"type":"string","description":"The code string that customers enter to redeem the coupon.","examples":["TEST50"]},"active":{"type":"boolean","description":"Whether this coupon code is currently enabled for use.","examples":[true]},"couponId":{"type":"string","description":"Identifier of the coupon to which this code belongs.","examples":["cpn_01jps5cgsfzs1ksqaet5hba8ac"]},"teamId":{"type":"string","description":"Team that created this coupon code."},"uses":{"type":"integer","minimum":0,"maximum":9007199254740991,"default":0,"readOnly":true,"description":"Number of times this specific coupon code has been used in successful orders.","examples":[0]}},"required":["id","createdAt","updatedAt","name","active","couponId","teamId"],"description":"coupon-code"},"Venue":{"type":"object","properties":{"id":{"type":"string","readOnly":true,"description":"Unique identifier for the venue"},"createdAt":{"type":"string","format":"date-time","readOnly":true,"description":"Timestamp in ISO 8601 format when the venue was created"},"updatedAt":{"type":"string","format":"date-time","readOnly":true,"description":"Timestamp in ISO 8601 format when the venue was last updated"},"teamId":{"type":"string","description":"Team that manages this venue"},"locationId":{"type":"string","pattern":"^loc_[0-9a-z]{26}$","description":"Location identifier for this venue","examples":["loc_01h2xk3j9k8m2n5p7q9r1s3t4v"]},"googlePlaceId":{"type":"string","description":"Google Place ID when this venue is linked to a Google Places location","examples":["ChIJP3Sa8ziYEmsRUKgyFmh9AQM"]},"approval":{"enum":["PENDING","APPROVED","REJECTED"],"type":"string","description":"Approval status of the venue","examples":["APPROVED"]},"name":{"type":"string","minLength":3,"maxLength":100,"description":"Display name of the venue. Must be between 3 and 100 characters"},"slug":{"type":"string","minLength":3,"description":"URL-friendly slug for the venue. Must be unique within tenant"},"description":{"type":"string","maxLength":500,"description":"Short description of the venue for listings and discovery"},"image":{"type":"object","properties":{"src":{"type":"string","format":"uri","examples":["https://assets.session.services/my-image.jpg"]},"alt":{"type":"string","examples":["My Image"]},"width":{"type":"number","examples":[1080]},"height":{"type":"number","examples":[1080]}},"required":["src","alt","width","height"],"description":"Venue image"},"contact":{"type":"object","properties":{"email":{"type":"string","format":"email","description":"Public contact email for venue inquiries"},"phone":{"type":"string","description":"Public contact phone number"},"website":{"type":"string","format":"uri","description":"Venue website URL"},"instagram":{"type":"string","description":"Instagram profile URL"},"facebook":{"type":"string","description":"Facebook page URL"},"twitter":{"type":"string","description":"Twitter/X profile URL"},"tiktok":{"type":"string","description":"TikTok profile URL"},"youtube":{"type":"string","description":"YouTube channel URL"}},"description":"Public contact information and social media links"},"location":{"type":"object","properties":{"id":{"type":"string","pattern":"^loc_[0-9a-z]{26}$","description":"Location identifier","examples":["loc_01hk153x00eh99pagyydz03sbz"],"readOnly":true},"googlePlaceId":{"type":"string","description":"Google Place ID for this location","examples":["ChIJP3Sa8ziYEmsRUKgyFmh9AQM"]},"createdAt":{"type":"string","format":"date-time","description":"Timestamp in ISO 8601 format when the location was created","examples":["2026-06-07T11:39:32.857Z"]},"updatedAt":{"type":"string","format":"date-time","description":"Timestamp in ISO 8601 format when the location was last updated","examples":["2026-06-07T11:39:32.857Z"]},"name":{"type":"string","description":"Location name","examples":["Watson's EQ"]},"address":{"type":"string","description":"Formatted address","examples":["The, Entertainment Quarter, 1 Bent St, Moore Park NSW 2021, Australia"]},"city":{"type":"string","description":"City name","examples":["Moore Park"]},"state":{"type":"string","description":"State or region","examples":["New South Wales"]},"postcode":{"type":"string","description":"Postal code","examples":["2021"]},"country":{"type":"string","description":"Country name","examples":["Australia"]},"latitude":{"type":"number","minimum":-90,"maximum":90,"description":"Latitude coordinate","examples":[-33.8944593]},"longitude":{"type":"number","minimum":-180,"maximum":180,"description":"Longitude coordinate","examples":[151.2252255]},"timeZone":{"type":"string","minLength":1,"pattern":"^[A-Za-z0-9_+-]+(\\/[A-Za-z0-9_+-]+)*$","description":"IANA timezone identifier (e.g., 'America/New_York', 'Europe/London', 'Australia/Sydney', 'UTC'). Must be validated against the IANA timezone database where used.","examples":["Australia/Sydney"]},"types":{"type":"array","items":{"type":"string"},"description":"Google Place types indicating the category and nature of this location","examples":[["establishment","point_of_interest","stadium"]]},"description":{"type":"string","description":"AI-generated description of the place, when available","examples":["Historic outdoor amphitheater known for summer concerts"]},"image":{"type":"object","properties":{"src":{"type":"string","format":"uri","examples":["https://assets.session.services/my-image.jpg"]},"alt":{"type":"string","examples":["My Image"]},"width":{"type":"number","examples":[1080]},"height":{"type":"number","examples":[1080]}},"required":["src","alt","width","height"],"description":"Primary location photo"}},"required":["id","createdAt","updatedAt","name","address","country","latitude","longitude","timeZone"],"description":"Physical location details including address, coordinates, and timezone"},"geohash":{"type":"string","description":"Geohash encoding of the venue's location for efficient spatial queries"},"capacity":{"type":"integer","minimum":1,"maximum":9007199254740991,"description":"Maximum capacity of the venue (number of attendees)"},"metadata":{"type":"object","propertyNames":{"type":"string","minLength":1,"maxLength":40,"description":"Metadata key. Must be 1-40 characters"},"additionalProperties":{"type":"string","maxLength":500,"description":"Metadata value. Must not exceed 500 characters"},"description":"Flexible key-value metadata storage for custom configuration. Similar to Stripe's metadata API. Maximum 50 keys, key names up to 40 characters, values up to 500 characters."},"deletedAt":{"type":"string","format":"date-time","readOnly":true,"description":"Timestamp in ISO 8601 format when the venue was soft-deleted. Null if not deleted"},"tenantId":{"type":"string","readOnly":true,"description":"Tenant ID for multi-tenant isolation"}},"required":["id","createdAt","updatedAt","teamId","locationId","approval","name","slug","location","geohash","tenantId"],"description":"Managed venue with custom branding and details. Teams can claim venues which then appear in location search results."},"Location":{"type":"object","properties":{"id":{"type":"string","pattern":"^loc_[0-9a-z]{26}$","description":"Location identifier","examples":["loc_01hk153x00eh99pagyydz03sbz"],"readOnly":true},"googlePlaceId":{"type":"string","description":"Google Place ID for this location","examples":["ChIJP3Sa8ziYEmsRUKgyFmh9AQM"]},"createdAt":{"type":"string","format":"date-time","description":"Timestamp in ISO 8601 format when the location was created","examples":["2026-06-07T11:39:32.857Z"]},"updatedAt":{"type":"string","format":"date-time","description":"Timestamp in ISO 8601 format when the location was last updated","examples":["2026-06-07T11:39:32.857Z"]},"name":{"type":"string","description":"Location name","examples":["Watson's EQ"]},"address":{"type":"string","description":"Formatted address","examples":["The, Entertainment Quarter, 1 Bent St, Moore Park NSW 2021, Australia"]},"city":{"type":"string","description":"City name","examples":["Moore Park"]},"state":{"type":"string","description":"State or region","examples":["New South Wales"]},"postcode":{"type":"string","description":"Postal code","examples":["2021"]},"country":{"type":"string","description":"Country name","examples":["Australia"]},"latitude":{"type":"number","minimum":-90,"maximum":90,"description":"Latitude coordinate","examples":[-33.8944593]},"longitude":{"type":"number","minimum":-180,"maximum":180,"description":"Longitude coordinate","examples":[151.2252255]},"timeZone":{"type":"string","minLength":1,"pattern":"^[A-Za-z0-9_+-]+(\\/[A-Za-z0-9_+-]+)*$","description":"IANA timezone identifier (e.g., 'America/New_York', 'Europe/London', 'Australia/Sydney', 'UTC'). Must be validated against the IANA timezone database where used.","examples":["Australia/Sydney"]},"types":{"type":"array","items":{"type":"string"},"description":"Google Place types indicating the category and nature of this location","examples":[["establishment","point_of_interest","stadium"]]},"description":{"type":"string","description":"AI-generated description of the place, when available","examples":["Historic outdoor amphitheater known for summer concerts"]},"image":{"type":"object","properties":{"src":{"type":"string","format":"uri","examples":["https://assets.session.services/my-image.jpg"]},"alt":{"type":"string","examples":["My Image"]},"width":{"type":"number","examples":[1080]},"height":{"type":"number","examples":[1080]}},"required":["src","alt","width","height"],"description":"Primary location photo"},"venueId":{"type":"string","pattern":"^ven_[0-9a-z]{26}$","description":"Venue identifier if this location is a managed venue on the platform"}},"required":["id","createdAt","updatedAt","name","address","country","latitude","longitude","timeZone"],"description":"Location with full details including coordinates and timezone"},"DetailedLocation":{"type":"object","properties":{"id":{"type":"string","pattern":"^loc_[0-9a-z]{26}$","description":"Location identifier","examples":["loc_01hk153x00eh99pagyydz03sbz"],"readOnly":true},"googlePlaceId":{"type":"string","description":"Google Place ID for this location","examples":["ChIJP3Sa8ziYEmsRUKgyFmh9AQM"]},"createdAt":{"type":"string","format":"date-time","description":"Timestamp in ISO 8601 format when the location was created","examples":["2026-06-07T11:39:32.857Z"]},"updatedAt":{"type":"string","format":"date-time","description":"Timestamp in ISO 8601 format when the location was last updated","examples":["2026-06-07T11:39:32.857Z"]},"name":{"type":"string","description":"Location name","examples":["Watson's EQ"]},"address":{"type":"string","description":"Formatted address","examples":["The, Entertainment Quarter, 1 Bent St, Moore Park NSW 2021, Australia"]},"city":{"type":"string","description":"City name","examples":["Moore Park"]},"state":{"type":"string","description":"State or region","examples":["New South Wales"]},"postcode":{"type":"string","description":"Postal code","examples":["2021"]},"country":{"type":"string","description":"Country name","examples":["Australia"]},"latitude":{"type":"number","minimum":-90,"maximum":90,"description":"Latitude coordinate","examples":[-33.8944593]},"longitude":{"type":"number","minimum":-180,"maximum":180,"description":"Longitude coordinate","examples":[151.2252255]},"timeZone":{"type":"string","minLength":1,"pattern":"^[A-Za-z0-9_+-]+(\\/[A-Za-z0-9_+-]+)*$","description":"IANA timezone identifier (e.g., 'America/New_York', 'Europe/London', 'Australia/Sydney', 'UTC'). Must be validated against the IANA timezone database where used.","examples":["Australia/Sydney"]},"types":{"type":"array","items":{"type":"string"},"description":"Google Place types indicating the category and nature of this location","examples":[["establishment","point_of_interest","stadium"]]},"description":{"type":"string","description":"AI-generated description of the place, when available","examples":["Historic outdoor amphitheater known for summer concerts"]},"image":{"type":"object","properties":{"src":{"type":"string","format":"uri","examples":["https://assets.session.services/my-image.jpg"]},"alt":{"type":"string","examples":["My Image"]},"width":{"type":"number","examples":[1080]},"height":{"type":"number","examples":[1080]}},"required":["src","alt","width","height"],"description":"Primary location photo"},"venue":{"type":"object","properties":{"id":{"type":"string","pattern":"^ven_[0-9a-z]{26}$","description":"Venue identifier"},"name":{"type":"string","description":"Venue name"},"slug":{"type":"string","description":"URL-friendly venue slug"},"teamId":{"type":"string","description":"Team that owns this venue"},"approval":{"enum":["PENDING","APPROVED","REJECTED"],"type":"string","description":"Venue approval status"},"image":{"type":"object","properties":{"src":{"type":"string","format":"uri","examples":["https://assets.session.services/my-image.jpg"]},"alt":{"type":"string","examples":["My Image"]},"width":{"type":"number","examples":[1080]},"height":{"type":"number","examples":[1080]}},"required":["src","alt","width","height"],"description":"Venue image"},"description":{"type":"string","description":"Venue description"}},"required":["id","name","slug","teamId","approval"],"description":"Denormalized venue details if this location is a managed venue. Only included when venue is approved."}},"required":["id","createdAt","updatedAt","name","address","country","latitude","longitude","timeZone"]},"Tenant":{"type":"object","properties":{"tenant":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"},"slug":{"type":"string"},"adminTeamId":{"type":"string"},"legacyTenantsToTeams":{"type":"object","propertyNames":{"type":"string"},"additionalProperties":{"type":"string"}},"features":{"type":"object","propertyNames":{"type":"string"},"additionalProperties":{"type":"boolean"}},"defaultCurrency":{"type":"string"},"logo":{"type":"object","properties":{"email":{"type":"object","properties":{"src":{"type":"string"},"width":{"type":"number"},"height":{"type":"number"}},"required":["src","width","height"]},"website":{"type":"object","properties":{"src":{"type":"string"},"width":{"type":"number"},"height":{"type":"number"}},"required":["src","width","height"]}},"required":["email","website"]},"baseUrl":{"type":"object","properties":{"dev":{"type":"string"},"production":{"type":"string"}}},"publicBaseUrl":{"type":"object","properties":{"dev":{"type":"string"},"sandbox":{"type":"string"},"production":{"type":"string"}}}},"required":["id","name","slug","adminTeamId","defaultCurrency","logo","baseUrl"]},"regions":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"},"slug":{"type":"string"},"kind":{"enum":["ALL","COUNTRY","STATE","CITY","VENUE"],"type":"string"},"parentId":{"type":"string"},"latitude":{"type":"number"},"longitude":{"type":"number"},"radius":{"type":"number"},"enabled":{"type":"boolean"},"order":{"type":"number"},"zoom":{"type":"number"},"heroImage":{"type":"string"},"description":{"type":"string"}},"required":["id","name","slug","kind","enabled","order"]}}},"required":["tenant","regions"]},"Region":{"type":"object","properties":{"regions":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"},"slug":{"type":"string"},"kind":{"enum":["ALL","COUNTRY","STATE","CITY","VENUE"],"type":"string"},"parentId":{"type":"string"},"latitude":{"type":"number"},"longitude":{"type":"number"},"radius":{"type":"number"},"enabled":{"type":"boolean"},"order":{"type":"number"},"zoom":{"type":"number"},"heroImage":{"type":"string"},"description":{"type":"string"}},"required":["id","name","slug","kind","enabled","order"]}}},"required":["regions"]}}},"tags":[{"name":"Events","description":"Represents an event, including scheduling, visibility, and related metadata"},{"name":"Event Performance","description":"Analytics and performance metrics for events based on tracking event data (page views, conversions, etc.)"},{"name":"Event Stats","description":"Statistics for events based on actual entity data (orders, tickets, coupons)."},{"name":"Promoter Performance","description":"Analytics and performance metrics for promoters based on tracking event data across all their events."},{"name":"Admissions","description":"An admission represents a specific type or category of ticket available for an event. It defines the pricing, capacity, and sales schedule for a ticket."},{"name":"Sections","description":"Represents a seating section within an event venue with specific capacity and pricing."},{"name":"Venues","description":"Represents managed venues with custom branding, details, and contact information. Teams can claim venues which then appear in location search results."},{"name":"Locations","description":"Represents physical locations with coordinates, addresses, and timezone information. Can be standalone or linked to managed venues."},{"name":"Orders","description":"Represents a ticket order transaction including customer information and payment details."},{"name":"Tickets","description":"Represents individual tickets within an order that can be scanned for event entry."},{"name":"Coupons","description":"Represents a discount coupon that can be applied to purchases."},{"name":"Coupon Codes","description":"Represents a redeemable code tied to a coupon."},{"name":"Statistics","description":"Provides aggregated financial and operational statistics for analytics and reporting."},{"name":"Payouts","description":"Represents a scheduled or completed payout for event ticket sales."},{"name":"Beneficiaries","description":"Represents a payout account for a promoter where ticket sale profits are sent."},{"name":"Teams","description":"Represents a team organization that can manage venues, events, and collaborate across multiple locations."},{"name":"Team Members","description":"Represents a user's membership and permissions within a team organization."},{"name":"Team Invites","description":"Represents an invitation sent to a user to join a team with specific permissions."},{"name":"Promoters","description":"Represents an event promoter organization that can host events and manage staff."},{"name":"Promoter Members","description":"Represents a user's membership and permissions within a promoter organization."},{"name":"Promoter Invites","description":"Represents an invitation sent to a user to join a promoter with specific permissions."},{"name":"Health","description":"Health check endpoint for monitoring service availability."},{"name":"Users","description":"Endpoints for the current authenticated user (me)."},{"name":"Tenant","description":"Tenant configuration endpoints for retrieving tenant-specific settings, features, and regions."},{"name":"QR Codes","description":"Generate customizable QR codes as PNG images with configurable colors, sizes, error correction levels, and optional logo overlays."}],"openapi":"3.1.1","paths":{"/analytics/track":{"post":{"operationId":"analytics.track","summary":"Track event","tags":["Analytics"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"anyOf":[{"type":"object","properties":{"eventId":{"type":"string","minLength":1,"description":"Event being tracked (evt_123)"},"teamId":{"type":"string","minLength":1,"description":"Team ID (team_123)"},"promoterId":{"type":"string","minLength":1,"description":"Promoter ID (pmt_123)"},"eventType":{"enum":["Page Viewed","Screen Viewed","Products Searched","Product List Viewed","Product List Filtered","Promotion Viewed","Promotion Clicked","Product Clicked","Product Viewed","Product Added","Product Removed","Cart Viewed","Checkout Started","Checkout Step Viewed","Checkout Step Completed","Payment Info Entered","Order Completed","Order Updated","Order Refunded","Order Cancelled","Coupon Entered","Coupon Applied","Coupon Denied","Coupon Removed","Product Added to Wishlist","Product Removed from Wishlist","Wishlist Product Added to Cart","Product Shared","Cart Shared","Product Reviewed"],"type":"string"},"properties":{"type":"object","properties":{"query":{"anyOf":[{"type":"string"},{"type":"object","propertyNames":{"type":"string"},"additionalProperties":{}}]},"list_id":{"type":"string"},"category":{"type":"string"},"filters":{"type":"array","items":{"type":"object","properties":{"type":{"type":"string"},"value":{"type":"string"}},"required":["type","value"]}},"sorts":{"type":"array","items":{"type":"object","properties":{"type":{"type":"string"},"value":{"type":"string"}},"required":["type","value"]}},"promotion_id":{"type":"string"},"creative":{"type":"string"},"name":{"type":"string"},"position":{"anyOf":[{"type":"string"},{"type":"number"}]},"product_id":{"type":"string"},"sku":{"type":"string"},"brand":{"type":"string"},"variant":{"type":"string"},"price":{"type":"number"},"quantity":{"type":"number"},"coupon":{"type":"string"},"currency":{"type":"string"},"value":{"type":"number"},"url":{"type":"string"},"image_url":{"type":"string"},"cart_id":{"type":"string"},"step":{"type":"number"},"shipping_method":{"type":"string"},"payment_method":{"type":"string"},"ticketing_mode":{"enum":["internal","external"],"type":"string"},"external_ticket_url":{"type":"string"},"external_ticket_domain":{"type":"string"},"cta_surface":{"type":"string"},"order_id":{"type":"string"},"affiliation":{"type":"string"},"subtotal":{"type":"number"},"total":{"type":"number"},"revenue":{"type":"number"},"shipping":{"type":"number"},"tax":{"type":"number"},"discount":{"type":"number"},"coupon_id":{"type":"string"},"coupon_name":{"type":"string"},"reason":{"type":"string"},"wishlist_id":{"type":"string"},"wishlist_name":{"type":"string"},"share_via":{"type":"string"},"share_message":{"type":"string"},"recipient":{"type":"string"},"review_id":{"type":"string"},"review_body":{"type":"string"},"rating":{"type":"string"},"products":{"type":"array","items":{"type":"object","properties":{"product_id":{"type":"string","description":"admission_id in ticketing context"},"sku":{"type":"string","description":"admission_id or admission_name"},"category":{"type":"string","description":"event_name or \"Admission\""},"name":{"type":"string","description":"admission_name"},"brand":{"type":"string","description":"promoter_name"},"variant":{"type":"string","description":"section_name"},"price":{"type":"number","description":"admission price (base + booking fee)"},"quantity":{"type":"number","description":"number of tickets"},"coupon":{"type":"string","description":"coupon code applied"},"position":{"type":"number","description":"position in list"},"url":{"type":"string","description":"URL to event/admission page"},"image_url":{"type":"string","description":"event image"},"admission_id":{"type":"string","description":"Explicit admission ID"},"section_id":{"type":"string","description":"Section ID if applicable"},"event_id":{"type":"string","description":"Event ID for this admission"},"promoter_id":{"type":"string","description":"Promoter ID"},"price_base":{"anyOf":[{"type":"number"},{"type":"null"}],"description":"Base price before fees"},"price_booking_fee":{"anyOf":[{"type":"number"},{"type":"null"}],"description":"Booking fee"},"capacity":{"type":"number","description":"Total capacity for this admission"},"available":{"type":"number","description":"Remaining tickets available"},"sold":{"type":"number","description":"Tickets already sold"}}}},"event_id":{"type":"string","description":"ID of the ticketed event (evt_xxx)"},"event_name":{"type":"string","description":"Name of the ticketed event"},"event_slug":{"type":"string","description":"URL slug of event"},"event_starts_at":{"type":"string","pattern":"^\\d{4}-\\d{2}-\\d{2}T\\d{2}:\\d{2}:\\d{2}$","description":"When the event starts (naive datetime, no timezone)"},"event_ends_at":{"type":"string","pattern":"^\\d{4}-\\d{2}-\\d{2}T\\d{2}:\\d{2}:\\d{2}$","description":"When the event ends (naive datetime, no timezone)"},"event_status":{"enum":["UPCOMING","LIVE","ENDED","CANCELLED"],"type":"string"},"event_visibility":{"enum":["PUBLIC","PRIVATE"],"type":"string"},"event_location":{"type":"string","description":"Venue name"},"event_city":{"type":"string","description":"Venue city"},"event_country":{"type":"string","description":"Venue country"},"promoter_id":{"type":"string","description":"ID of the promoter (pmt_xxx)"},"promoter_name":{"type":"string","description":"Name of the promoter"},"promoter_slug":{"type":"string","description":"URL slug of promoter"},"admission_id":{"type":"string","description":"ID of admission type (adm_xxx)"},"admission_name":{"type":"string","description":"Name of admission (e.g., \"General Admission\")"},"admission_capacity":{"type":"number","description":"Total capacity for this admission"},"admission_available":{"type":"number","description":"Tickets still available"},"admission_sold":{"type":"number","description":"Tickets already sold"},"section_id":{"type":"string","description":"ID of section (sct_xxx)"},"section_name":{"type":"string","description":"Name of section (e.g., \"VIP\", \"General\")"},"section_capacity":{"type":"number","description":"Total capacity for this section"},"section_available":{"type":"number","description":"Spots still available in section"},"ticket_id":{"type":"string","description":"Individual ticket ID (tkt_xxx)"},"ticket_status":{"enum":["VALID","REDEEMED","CANCELLED"],"type":"string"},"tickets_quantity":{"type":"number","description":"Number of tickets in transaction"},"customer_id":{"type":"string","description":"Customer ID (cus_xxx)"},"customer_email":{"type":"string","description":"Customer email"},"customer_first_name":{"type":"string"},"customer_last_name":{"type":"string"},"price_base":{"anyOf":[{"type":"number"},{"type":"null"}],"description":"Base price before fees"},"price_booking_fee":{"anyOf":[{"type":"number"},{"type":"null"}],"description":"Booking fee amount"},"price_discount_amount":{"anyOf":[{"type":"number"},{"type":"null"}],"description":"Discount amount applied"},"sale_starts_at":{"type":"string","pattern":"^\\d{4}-\\d{2}-\\d{2}T\\d{2}:\\d{2}:\\d{2}$","description":"When tickets go on sale (naive datetime, no timezone)"},"sale_ends_at":{"type":"string","pattern":"^\\d{4}-\\d{2}-\\d{2}T\\d{2}:\\d{2}:\\d{2}$","description":"When ticket sales end (naive datetime, no timezone)"},"entry_starts_at":{"type":"string","pattern":"^\\d{4}-\\d{2}-\\d{2}T\\d{2}:\\d{2}:\\d{2}$","description":"When entry to event begins (naive datetime, no timezone)"},"entry_ends_at":{"type":"string","pattern":"^\\d{4}-\\d{2}-\\d{2}T\\d{2}:\\d{2}:\\d{2}$","description":"When entry to event ends (naive datetime, no timezone)"},"funnel_step":{"type":"string","description":"Current funnel step (e.g., \"browse\", \"cart\", \"checkout\")"},"time_to_purchase":{"type":"number","description":"Seconds from first view to purchase"},"session_duration":{"type":"number","description":"Total session duration in seconds"},"referrer_type":{"enum":["DIRECT","SOCIAL","EMAIL","SEARCH","REFERRAL","AD"],"type":"string"},"campaign_id":{"type":"string","description":"Marketing campaign ID"},"affiliate_id":{"type":"string","description":"Affiliate partner ID"},"promo_code_used":{"type":"string","description":"Promotional code applied"},"platform":{"enum":["WEB","MOBILE_WEB","IOS","ANDROID"],"type":"string"},"app_version":{"type":"string"},"device_type":{"enum":["MOBILE","TABLET","DESKTOP"],"type":"string"},"anonymous_id":{"type":"string"},"browser":{"type":"string"},"browser_session_id":{"type":"string"},"country":{"type":"string"},"page_path":{"type":"string"},"page_title":{"type":"string"},"page_url":{"type":"string"},"referrer":{"type":"string"},"region":{"type":"string"},"user_agent":{"type":"string"},"utm_source":{"type":"string"},"utm_medium":{"type":"string"},"utm_campaign":{"type":"string"},"utm_term":{"type":"string"},"utm_content":{"type":"string"}}},"context":{"type":"object","properties":{"session_id":{"type":"string"},"user_id":{"type":"string"},"anonymous_id":{"type":"string"},"utm_source":{"type":"string"},"utm_medium":{"type":"string"},"utm_campaign":{"type":"string"},"utm_term":{"type":"string"},"utm_content":{"type":"string"},"page":{"type":"object","properties":{"url":{"type":"string"},"path":{"type":"string"},"title":{"type":"string"}},"required":["url","path","title"]},"referrer":{"type":"string"},"user_agent":{"type":"string"},"ip":{"type":"string"},"geo":{"type":"object","properties":{"country":{"type":"string","description":"Country code (e.g., \"AU\")"},"countryName":{"type":"string","description":"Country name (e.g., \"Australia\")"},"region":{"type":"string","description":"State/province code"},"regionName":{"type":"string","description":"State/province name (e.g., \"New South Wales\")"},"city":{"type":"string","description":"City name"},"latitude":{"type":"string","description":"Latitude"},"longitude":{"type":"string","description":"Longitude"}}},"fbc":{"type":"string","description":"Facebook click ID"},"fbp":{"type":"string","description":"Facebook browser ID"},"ttclid":{"type":"string","description":"TikTok click ID"}},"required":["session_id","page"]},"productId":{"type":"string"},"messageId":{"type":"string","minLength":1,"description":"Analytics message id for retry-safe event delivery and linking."},"occurredAt":{"type":"string","format":"date-time","description":"Client-observed event time. Server ingest time remains authoritative for writes."}},"required":["eventId","teamId","promoterId","eventType","properties","context"],"description":"Schema for tracking an analytics event. Excludes system-generated fields"},{"type":"object","properties":{"eventName":{"type":"string","minLength":1},"eventType":{"enum":["Page Viewed","Screen Viewed","Products Searched","Product List Viewed","Product List Filtered","Promotion Viewed","Promotion Clicked","Product Clicked","Product Viewed","Product Added","Product Removed","Cart Viewed","Checkout Started","Checkout Step Viewed","Checkout Step Completed","Payment Info Entered","Order Completed","Order Updated","Order Refunded","Order Cancelled","Coupon Entered","Coupon Applied","Coupon Denied","Coupon Removed","Product Added to Wishlist","Product Removed from Wishlist","Wishlist Product Added to Cart","Product Shared","Cart Shared","Product Reviewed"],"type":"string"},"eventId":{"type":"string","minLength":1},"teamId":{"type":"string","minLength":1},"promoterId":{"type":"string","minLength":1},"properties":{"type":"object","propertyNames":{"type":"string"},"additionalProperties":{}},"context":{"type":"object","properties":{"session_id":{"type":"string"},"user_id":{"type":"string"},"anonymous_id":{"type":"string"},"utm_source":{"type":"string"},"utm_medium":{"type":"string"},"utm_campaign":{"type":"string"},"utm_term":{"type":"string"},"utm_content":{"type":"string"},"page":{"type":"object","properties":{"url":{"type":"string"},"path":{"type":"string"},"title":{"type":"string"}},"required":["url","path","title"]},"referrer":{"type":"string"},"user_agent":{"type":"string"},"ip":{"type":"string"},"geo":{"type":"object","properties":{"country":{"type":"string","description":"Country code (e.g., \"AU\")"},"countryName":{"type":"string","description":"Country name (e.g., \"Australia\")"},"region":{"type":"string","description":"State/province code"},"regionName":{"type":"string","description":"State/province name (e.g., \"New South Wales\")"},"city":{"type":"string","description":"City name"},"latitude":{"type":"string","description":"Latitude"},"longitude":{"type":"string","description":"Longitude"}}},"fbc":{"type":"string","description":"Facebook click ID"},"fbp":{"type":"string","description":"Facebook browser ID"},"ttclid":{"type":"string","description":"TikTok click ID"}}},"legacyContext":{"type":"object","properties":{"legacyOrgId":{"type":"string","minLength":1},"legacyEventId":{"type":"string","minLength":1},"legacyTeamId":{"type":"string","minLength":1},"legacyEventName":{"type":"string"},"legacyEventSlug":{"type":"string"},"legacyEventCreatedAt":{"anyOf":[{"type":"string"},{"type":"string","format":"date-time","x-native-type":"date"},{"type":"null"}]},"legacyTeamCreatedAt":{"anyOf":[{"type":"string"},{"type":"string","format":"date-time","x-native-type":"date"},{"type":"null"}]}},"required":["legacyOrgId","legacyEventId","legacyTeamId"]}},"additionalProperties":{},"description":"Compatibility schema for legacy Sash analytics payloads that require server-side ID normalization"}],"description":"Analytics ingress schema accepting both canonical payloads and legacy Sash-compatible payloads"}}}},"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"object","properties":{"id":{"type":"string"},"eventId":{"type":"string","minLength":1,"description":"Event being tracked (evt_123)"},"teamId":{"type":"string","minLength":1,"description":"Team ID (team_123)"},"promoterId":{"type":"string","minLength":1,"description":"Promoter ID (pmt_123)"},"eventType":{"enum":["Page Viewed","Screen Viewed","Products Searched","Product List Viewed","Product List Filtered","Promotion Viewed","Promotion Clicked","Product Clicked","Product Viewed","Product Added","Product Removed","Cart Viewed","Checkout Started","Checkout Step Viewed","Checkout Step Completed","Payment Info Entered","Order Completed","Order Updated","Order Refunded","Order Cancelled","Coupon Entered","Coupon Applied","Coupon Denied","Coupon Removed","Product Added to Wishlist","Product Removed from Wishlist","Wishlist Product Added to Cart","Product Shared","Cart Shared","Product Reviewed"],"type":"string"},"timestamp":{"type":"string"},"date":{"type":"string","description":"YYYY-MM-DD"},"hour":{"type":"integer","minimum":0,"maximum":23},"properties":{"type":"object","properties":{"query":{"anyOf":[{"type":"string"},{"type":"object","propertyNames":{"type":"string"},"additionalProperties":{}}]},"list_id":{"type":"string"},"category":{"type":"string"},"filters":{"type":"array","items":{"type":"object","properties":{"type":{"type":"string"},"value":{"type":"string"}},"required":["type","value"]}},"sorts":{"type":"array","items":{"type":"object","properties":{"type":{"type":"string"},"value":{"type":"string"}},"required":["type","value"]}},"promotion_id":{"type":"string"},"creative":{"type":"string"},"name":{"type":"string"},"position":{"anyOf":[{"type":"string"},{"type":"number"}]},"product_id":{"type":"string"},"sku":{"type":"string"},"brand":{"type":"string"},"variant":{"type":"string"},"price":{"type":"number"},"quantity":{"type":"number"},"coupon":{"type":"string"},"currency":{"type":"string"},"value":{"type":"number"},"url":{"type":"string"},"image_url":{"type":"string"},"cart_id":{"type":"string"},"step":{"type":"number"},"shipping_method":{"type":"string"},"payment_method":{"type":"string"},"ticketing_mode":{"enum":["internal","external"],"type":"string"},"external_ticket_url":{"type":"string"},"external_ticket_domain":{"type":"string"},"cta_surface":{"type":"string"},"order_id":{"type":"string"},"affiliation":{"type":"string"},"subtotal":{"type":"number"},"total":{"type":"number"},"revenue":{"type":"number"},"shipping":{"type":"number"},"tax":{"type":"number"},"discount":{"type":"number"},"coupon_id":{"type":"string"},"coupon_name":{"type":"string"},"reason":{"type":"string"},"wishlist_id":{"type":"string"},"wishlist_name":{"type":"string"},"share_via":{"type":"string"},"share_message":{"type":"string"},"recipient":{"type":"string"},"review_id":{"type":"string"},"review_body":{"type":"string"},"rating":{"type":"string"},"products":{"type":"array","items":{"type":"object","properties":{"product_id":{"type":"string","description":"admission_id in ticketing context"},"sku":{"type":"string","description":"admission_id or admission_name"},"category":{"type":"string","description":"event_name or \"Admission\""},"name":{"type":"string","description":"admission_name"},"brand":{"type":"string","description":"promoter_name"},"variant":{"type":"string","description":"section_name"},"price":{"type":"number","description":"admission price (base + booking fee)"},"quantity":{"type":"number","description":"number of tickets"},"coupon":{"type":"string","description":"coupon code applied"},"position":{"type":"number","description":"position in list"},"url":{"type":"string","description":"URL to event/admission page"},"image_url":{"type":"string","description":"event image"},"admission_id":{"type":"string","description":"Explicit admission ID"},"section_id":{"type":"string","description":"Section ID if applicable"},"event_id":{"type":"string","description":"Event ID for this admission"},"promoter_id":{"type":"string","description":"Promoter ID"},"price_base":{"anyOf":[{"type":"number"},{"type":"null"}],"description":"Base price before fees"},"price_booking_fee":{"anyOf":[{"type":"number"},{"type":"null"}],"description":"Booking fee"},"capacity":{"type":"number","description":"Total capacity for this admission"},"available":{"type":"number","description":"Remaining tickets available"},"sold":{"type":"number","description":"Tickets already sold"}}}},"event_id":{"type":"string","description":"ID of the ticketed event (evt_xxx)"},"event_name":{"type":"string","description":"Name of the ticketed event"},"event_slug":{"type":"string","description":"URL slug of event"},"event_starts_at":{"type":"string","pattern":"^\\d{4}-\\d{2}-\\d{2}T\\d{2}:\\d{2}:\\d{2}$","description":"When the event starts (naive datetime, no timezone)"},"event_ends_at":{"type":"string","pattern":"^\\d{4}-\\d{2}-\\d{2}T\\d{2}:\\d{2}:\\d{2}$","description":"When the event ends (naive datetime, no timezone)"},"event_status":{"enum":["UPCOMING","LIVE","ENDED","CANCELLED"],"type":"string"},"event_visibility":{"enum":["PUBLIC","PRIVATE"],"type":"string"},"event_location":{"type":"string","description":"Venue name"},"event_city":{"type":"string","description":"Venue city"},"event_country":{"type":"string","description":"Venue country"},"promoter_id":{"type":"string","description":"ID of the promoter (pmt_xxx)"},"promoter_name":{"type":"string","description":"Name of the promoter"},"promoter_slug":{"type":"string","description":"URL slug of promoter"},"admission_id":{"type":"string","description":"ID of admission type (adm_xxx)"},"admission_name":{"type":"string","description":"Name of admission (e.g., \"General Admission\")"},"admission_capacity":{"type":"number","description":"Total capacity for this admission"},"admission_available":{"type":"number","description":"Tickets still available"},"admission_sold":{"type":"number","description":"Tickets already sold"},"section_id":{"type":"string","description":"ID of section (sct_xxx)"},"section_name":{"type":"string","description":"Name of section (e.g., \"VIP\", \"General\")"},"section_capacity":{"type":"number","description":"Total capacity for this section"},"section_available":{"type":"number","description":"Spots still available in section"},"ticket_id":{"type":"string","description":"Individual ticket ID (tkt_xxx)"},"ticket_status":{"enum":["VALID","REDEEMED","CANCELLED"],"type":"string"},"tickets_quantity":{"type":"number","description":"Number of tickets in transaction"},"customer_id":{"type":"string","description":"Customer ID (cus_xxx)"},"customer_email":{"type":"string","description":"Customer email"},"customer_first_name":{"type":"string"},"customer_last_name":{"type":"string"},"price_base":{"anyOf":[{"type":"number"},{"type":"null"}],"description":"Base price before fees"},"price_booking_fee":{"anyOf":[{"type":"number"},{"type":"null"}],"description":"Booking fee amount"},"price_discount_amount":{"anyOf":[{"type":"number"},{"type":"null"}],"description":"Discount amount applied"},"sale_starts_at":{"type":"string","pattern":"^\\d{4}-\\d{2}-\\d{2}T\\d{2}:\\d{2}:\\d{2}$","description":"When tickets go on sale (naive datetime, no timezone)"},"sale_ends_at":{"type":"string","pattern":"^\\d{4}-\\d{2}-\\d{2}T\\d{2}:\\d{2}:\\d{2}$","description":"When ticket sales end (naive datetime, no timezone)"},"entry_starts_at":{"type":"string","pattern":"^\\d{4}-\\d{2}-\\d{2}T\\d{2}:\\d{2}:\\d{2}$","description":"When entry to event begins (naive datetime, no timezone)"},"entry_ends_at":{"type":"string","pattern":"^\\d{4}-\\d{2}-\\d{2}T\\d{2}:\\d{2}:\\d{2}$","description":"When entry to event ends (naive datetime, no timezone)"},"funnel_step":{"type":"string","description":"Current funnel step (e.g., \"browse\", \"cart\", \"checkout\")"},"time_to_purchase":{"type":"number","description":"Seconds from first view to purchase"},"session_duration":{"type":"number","description":"Total session duration in seconds"},"referrer_type":{"enum":["DIRECT","SOCIAL","EMAIL","SEARCH","REFERRAL","AD"],"type":"string"},"campaign_id":{"type":"string","description":"Marketing campaign ID"},"affiliate_id":{"type":"string","description":"Affiliate partner ID"},"promo_code_used":{"type":"string","description":"Promotional code applied"},"platform":{"enum":["WEB","MOBILE_WEB","IOS","ANDROID"],"type":"string"},"app_version":{"type":"string"},"device_type":{"enum":["MOBILE","TABLET","DESKTOP"],"type":"string"},"anonymous_id":{"type":"string"},"browser":{"type":"string"},"browser_session_id":{"type":"string"},"country":{"type":"string"},"page_path":{"type":"string"},"page_title":{"type":"string"},"page_url":{"type":"string"},"referrer":{"type":"string"},"region":{"type":"string"},"user_agent":{"type":"string"},"utm_source":{"type":"string"},"utm_medium":{"type":"string"},"utm_campaign":{"type":"string"},"utm_term":{"type":"string"},"utm_content":{"type":"string"}}},"context":{"type":"object","properties":{"session_id":{"type":"string"},"user_id":{"type":"string"},"anonymous_id":{"type":"string"},"utm_source":{"type":"string"},"utm_medium":{"type":"string"},"utm_campaign":{"type":"string"},"utm_term":{"type":"string"},"utm_content":{"type":"string"},"page":{"type":"object","properties":{"url":{"type":"string"},"path":{"type":"string"},"title":{"type":"string"}},"required":["url","path","title"]},"referrer":{"type":"string"},"user_agent":{"type":"string"},"ip":{"type":"string"},"geo":{"type":"object","properties":{"country":{"type":"string","description":"Country code (e.g., \"AU\")"},"countryName":{"type":"string","description":"Country name (e.g., \"Australia\")"},"region":{"type":"string","description":"State/province code"},"regionName":{"type":"string","description":"State/province name (e.g., \"New South Wales\")"},"city":{"type":"string","description":"City name"},"latitude":{"type":"string","description":"Latitude"},"longitude":{"type":"string","description":"Longitude"}}},"fbc":{"type":"string","description":"Facebook click ID"},"fbp":{"type":"string","description":"Facebook browser ID"},"ttclid":{"type":"string","description":"TikTok click ID"}},"required":["session_id","page"]},"productId":{"type":"string"},"createdAt":{"type":"string"},"updatedAt":{"type":"string"}},"required":["id","eventId","teamId","promoterId","eventType","timestamp","date","hour","properties","context","createdAt","updatedAt"]}}}}}}},"/analytics/page":{"post":{"operationId":"analytics.page","summary":"Page event","tags":["Analytics"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"anyOf":[{"type":"object","properties":{"eventId":{"type":"string","minLength":1,"description":"Event being tracked (evt_123)"},"teamId":{"type":"string","minLength":1,"description":"Team ID (team_123)"},"promoterId":{"type":"string","minLength":1,"description":"Promoter ID (pmt_123)"},"eventType":{"enum":["Page Viewed","Screen Viewed","Products Searched","Product List Viewed","Product List Filtered","Promotion Viewed","Promotion Clicked","Product Clicked","Product Viewed","Product Added","Product Removed","Cart Viewed","Checkout Started","Checkout Step Viewed","Checkout Step Completed","Payment Info Entered","Order Completed","Order Updated","Order Refunded","Order Cancelled","Coupon Entered","Coupon Applied","Coupon Denied","Coupon Removed","Product Added to Wishlist","Product Removed from Wishlist","Wishlist Product Added to Cart","Product Shared","Cart Shared","Product Reviewed"],"type":"string"},"properties":{"type":"object","properties":{"query":{"anyOf":[{"type":"string"},{"type":"object","propertyNames":{"type":"string"},"additionalProperties":{}}]},"list_id":{"type":"string"},"category":{"type":"string"},"filters":{"type":"array","items":{"type":"object","properties":{"type":{"type":"string"},"value":{"type":"string"}},"required":["type","value"]}},"sorts":{"type":"array","items":{"type":"object","properties":{"type":{"type":"string"},"value":{"type":"string"}},"required":["type","value"]}},"promotion_id":{"type":"string"},"creative":{"type":"string"},"name":{"type":"string"},"position":{"anyOf":[{"type":"string"},{"type":"number"}]},"product_id":{"type":"string"},"sku":{"type":"string"},"brand":{"type":"string"},"variant":{"type":"string"},"price":{"type":"number"},"quantity":{"type":"number"},"coupon":{"type":"string"},"currency":{"type":"string"},"value":{"type":"number"},"url":{"type":"string"},"image_url":{"type":"string"},"cart_id":{"type":"string"},"step":{"type":"number"},"shipping_method":{"type":"string"},"payment_method":{"type":"string"},"ticketing_mode":{"enum":["internal","external"],"type":"string"},"external_ticket_url":{"type":"string"},"external_ticket_domain":{"type":"string"},"cta_surface":{"type":"string"},"order_id":{"type":"string"},"affiliation":{"type":"string"},"subtotal":{"type":"number"},"total":{"type":"number"},"revenue":{"type":"number"},"shipping":{"type":"number"},"tax":{"type":"number"},"discount":{"type":"number"},"coupon_id":{"type":"string"},"coupon_name":{"type":"string"},"reason":{"type":"string"},"wishlist_id":{"type":"string"},"wishlist_name":{"type":"string"},"share_via":{"type":"string"},"share_message":{"type":"string"},"recipient":{"type":"string"},"review_id":{"type":"string"},"review_body":{"type":"string"},"rating":{"type":"string"},"products":{"type":"array","items":{"type":"object","properties":{"product_id":{"type":"string","description":"admission_id in ticketing context"},"sku":{"type":"string","description":"admission_id or admission_name"},"category":{"type":"string","description":"event_name or \"Admission\""},"name":{"type":"string","description":"admission_name"},"brand":{"type":"string","description":"promoter_name"},"variant":{"type":"string","description":"section_name"},"price":{"type":"number","description":"admission price (base + booking fee)"},"quantity":{"type":"number","description":"number of tickets"},"coupon":{"type":"string","description":"coupon code applied"},"position":{"type":"number","description":"position in list"},"url":{"type":"string","description":"URL to event/admission page"},"image_url":{"type":"string","description":"event image"},"admission_id":{"type":"string","description":"Explicit admission ID"},"section_id":{"type":"string","description":"Section ID if applicable"},"event_id":{"type":"string","description":"Event ID for this admission"},"promoter_id":{"type":"string","description":"Promoter ID"},"price_base":{"anyOf":[{"type":"number"},{"type":"null"}],"description":"Base price before fees"},"price_booking_fee":{"anyOf":[{"type":"number"},{"type":"null"}],"description":"Booking fee"},"capacity":{"type":"number","description":"Total capacity for this admission"},"available":{"type":"number","description":"Remaining tickets available"},"sold":{"type":"number","description":"Tickets already sold"}}}},"event_id":{"type":"string","description":"ID of the ticketed event (evt_xxx)"},"event_name":{"type":"string","description":"Name of the ticketed event"},"event_slug":{"type":"string","description":"URL slug of event"},"event_starts_at":{"type":"string","pattern":"^\\d{4}-\\d{2}-\\d{2}T\\d{2}:\\d{2}:\\d{2}$","description":"When the event starts (naive datetime, no timezone)"},"event_ends_at":{"type":"string","pattern":"^\\d{4}-\\d{2}-\\d{2}T\\d{2}:\\d{2}:\\d{2}$","description":"When the event ends (naive datetime, no timezone)"},"event_status":{"enum":["UPCOMING","LIVE","ENDED","CANCELLED"],"type":"string"},"event_visibility":{"enum":["PUBLIC","PRIVATE"],"type":"string"},"event_location":{"type":"string","description":"Venue name"},"event_city":{"type":"string","description":"Venue city"},"event_country":{"type":"string","description":"Venue country"},"promoter_id":{"type":"string","description":"ID of the promoter (pmt_xxx)"},"promoter_name":{"type":"string","description":"Name of the promoter"},"promoter_slug":{"type":"string","description":"URL slug of promoter"},"admission_id":{"type":"string","description":"ID of admission type (adm_xxx)"},"admission_name":{"type":"string","description":"Name of admission (e.g., \"General Admission\")"},"admission_capacity":{"type":"number","description":"Total capacity for this admission"},"admission_available":{"type":"number","description":"Tickets still available"},"admission_sold":{"type":"number","description":"Tickets already sold"},"section_id":{"type":"string","description":"ID of section (sct_xxx)"},"section_name":{"type":"string","description":"Name of section (e.g., \"VIP\", \"General\")"},"section_capacity":{"type":"number","description":"Total capacity for this section"},"section_available":{"type":"number","description":"Spots still available in section"},"ticket_id":{"type":"string","description":"Individual ticket ID (tkt_xxx)"},"ticket_status":{"enum":["VALID","REDEEMED","CANCELLED"],"type":"string"},"tickets_quantity":{"type":"number","description":"Number of tickets in transaction"},"customer_id":{"type":"string","description":"Customer ID (cus_xxx)"},"customer_email":{"type":"string","description":"Customer email"},"customer_first_name":{"type":"string"},"customer_last_name":{"type":"string"},"price_base":{"anyOf":[{"type":"number"},{"type":"null"}],"description":"Base price before fees"},"price_booking_fee":{"anyOf":[{"type":"number"},{"type":"null"}],"description":"Booking fee amount"},"price_discount_amount":{"anyOf":[{"type":"number"},{"type":"null"}],"description":"Discount amount applied"},"sale_starts_at":{"type":"string","pattern":"^\\d{4}-\\d{2}-\\d{2}T\\d{2}:\\d{2}:\\d{2}$","description":"When tickets go on sale (naive datetime, no timezone)"},"sale_ends_at":{"type":"string","pattern":"^\\d{4}-\\d{2}-\\d{2}T\\d{2}:\\d{2}:\\d{2}$","description":"When ticket sales end (naive datetime, no timezone)"},"entry_starts_at":{"type":"string","pattern":"^\\d{4}-\\d{2}-\\d{2}T\\d{2}:\\d{2}:\\d{2}$","description":"When entry to event begins (naive datetime, no timezone)"},"entry_ends_at":{"type":"string","pattern":"^\\d{4}-\\d{2}-\\d{2}T\\d{2}:\\d{2}:\\d{2}$","description":"When entry to event ends (naive datetime, no timezone)"},"funnel_step":{"type":"string","description":"Current funnel step (e.g., \"browse\", \"cart\", \"checkout\")"},"time_to_purchase":{"type":"number","description":"Seconds from first view to purchase"},"session_duration":{"type":"number","description":"Total session duration in seconds"},"referrer_type":{"enum":["DIRECT","SOCIAL","EMAIL","SEARCH","REFERRAL","AD"],"type":"string"},"campaign_id":{"type":"string","description":"Marketing campaign ID"},"affiliate_id":{"type":"string","description":"Affiliate partner ID"},"promo_code_used":{"type":"string","description":"Promotional code applied"},"platform":{"enum":["WEB","MOBILE_WEB","IOS","ANDROID"],"type":"string"},"app_version":{"type":"string"},"device_type":{"enum":["MOBILE","TABLET","DESKTOP"],"type":"string"},"anonymous_id":{"type":"string"},"browser":{"type":"string"},"browser_session_id":{"type":"string"},"country":{"type":"string"},"page_path":{"type":"string"},"page_title":{"type":"string"},"page_url":{"type":"string"},"referrer":{"type":"string"},"region":{"type":"string"},"user_agent":{"type":"string"},"utm_source":{"type":"string"},"utm_medium":{"type":"string"},"utm_campaign":{"type":"string"},"utm_term":{"type":"string"},"utm_content":{"type":"string"}}},"context":{"type":"object","properties":{"session_id":{"type":"string"},"user_id":{"type":"string"},"anonymous_id":{"type":"string"},"utm_source":{"type":"string"},"utm_medium":{"type":"string"},"utm_campaign":{"type":"string"},"utm_term":{"type":"string"},"utm_content":{"type":"string"},"page":{"type":"object","properties":{"url":{"type":"string"},"path":{"type":"string"},"title":{"type":"string"}},"required":["url","path","title"]},"referrer":{"type":"string"},"user_agent":{"type":"string"},"ip":{"type":"string"},"geo":{"type":"object","properties":{"country":{"type":"string","description":"Country code (e.g., \"AU\")"},"countryName":{"type":"string","description":"Country name (e.g., \"Australia\")"},"region":{"type":"string","description":"State/province code"},"regionName":{"type":"string","description":"State/province name (e.g., \"New South Wales\")"},"city":{"type":"string","description":"City name"},"latitude":{"type":"string","description":"Latitude"},"longitude":{"type":"string","description":"Longitude"}}},"fbc":{"type":"string","description":"Facebook click ID"},"fbp":{"type":"string","description":"Facebook browser ID"},"ttclid":{"type":"string","description":"TikTok click ID"}},"required":["session_id","page"]},"productId":{"type":"string"},"messageId":{"type":"string","minLength":1,"description":"Analytics message id for retry-safe event delivery and linking."},"occurredAt":{"type":"string","format":"date-time","description":"Client-observed event time. Server ingest time remains authoritative for writes."}},"required":["eventId","teamId","promoterId","eventType","properties","context"],"description":"Schema for tracking an analytics event. Excludes system-generated fields"},{"type":"object","properties":{"eventName":{"type":"string","minLength":1},"eventType":{"enum":["Page Viewed","Screen Viewed","Products Searched","Product List Viewed","Product List Filtered","Promotion Viewed","Promotion Clicked","Product Clicked","Product Viewed","Product Added","Product Removed","Cart Viewed","Checkout Started","Checkout Step Viewed","Checkout Step Completed","Payment Info Entered","Order Completed","Order Updated","Order Refunded","Order Cancelled","Coupon Entered","Coupon Applied","Coupon Denied","Coupon Removed","Product Added to Wishlist","Product Removed from Wishlist","Wishlist Product Added to Cart","Product Shared","Cart Shared","Product Reviewed"],"type":"string"},"eventId":{"type":"string","minLength":1},"teamId":{"type":"string","minLength":1},"promoterId":{"type":"string","minLength":1},"properties":{"type":"object","propertyNames":{"type":"string"},"additionalProperties":{}},"context":{"type":"object","properties":{"session_id":{"type":"string"},"user_id":{"type":"string"},"anonymous_id":{"type":"string"},"utm_source":{"type":"string"},"utm_medium":{"type":"string"},"utm_campaign":{"type":"string"},"utm_term":{"type":"string"},"utm_content":{"type":"string"},"page":{"type":"object","properties":{"url":{"type":"string"},"path":{"type":"string"},"title":{"type":"string"}},"required":["url","path","title"]},"referrer":{"type":"string"},"user_agent":{"type":"string"},"ip":{"type":"string"},"geo":{"type":"object","properties":{"country":{"type":"string","description":"Country code (e.g., \"AU\")"},"countryName":{"type":"string","description":"Country name (e.g., \"Australia\")"},"region":{"type":"string","description":"State/province code"},"regionName":{"type":"string","description":"State/province name (e.g., \"New South Wales\")"},"city":{"type":"string","description":"City name"},"latitude":{"type":"string","description":"Latitude"},"longitude":{"type":"string","description":"Longitude"}}},"fbc":{"type":"string","description":"Facebook click ID"},"fbp":{"type":"string","description":"Facebook browser ID"},"ttclid":{"type":"string","description":"TikTok click ID"}}},"legacyContext":{"type":"object","properties":{"legacyOrgId":{"type":"string","minLength":1},"legacyEventId":{"type":"string","minLength":1},"legacyTeamId":{"type":"string","minLength":1},"legacyEventName":{"type":"string"},"legacyEventSlug":{"type":"string"},"legacyEventCreatedAt":{"anyOf":[{"type":"string"},{"type":"string","format":"date-time","x-native-type":"date"},{"type":"null"}]},"legacyTeamCreatedAt":{"anyOf":[{"type":"string"},{"type":"string","format":"date-time","x-native-type":"date"},{"type":"null"}]}},"required":["legacyOrgId","legacyEventId","legacyTeamId"]}},"additionalProperties":{},"description":"Compatibility schema for legacy Sash analytics payloads that require server-side ID normalization"}],"description":"Analytics ingress schema accepting both canonical payloads and legacy Sash-compatible payloads"}}}},"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"object","properties":{"id":{"type":"string"},"eventId":{"type":"string","minLength":1,"description":"Event being tracked (evt_123)"},"teamId":{"type":"string","minLength":1,"description":"Team ID (team_123)"},"promoterId":{"type":"string","minLength":1,"description":"Promoter ID (pmt_123)"},"eventType":{"enum":["Page Viewed","Screen Viewed","Products Searched","Product List Viewed","Product List Filtered","Promotion Viewed","Promotion Clicked","Product Clicked","Product Viewed","Product Added","Product Removed","Cart Viewed","Checkout Started","Checkout Step Viewed","Checkout Step Completed","Payment Info Entered","Order Completed","Order Updated","Order Refunded","Order Cancelled","Coupon Entered","Coupon Applied","Coupon Denied","Coupon Removed","Product Added to Wishlist","Product Removed from Wishlist","Wishlist Product Added to Cart","Product Shared","Cart Shared","Product Reviewed"],"type":"string"},"timestamp":{"type":"string"},"date":{"type":"string","description":"YYYY-MM-DD"},"hour":{"type":"integer","minimum":0,"maximum":23},"properties":{"type":"object","properties":{"query":{"anyOf":[{"type":"string"},{"type":"object","propertyNames":{"type":"string"},"additionalProperties":{}}]},"list_id":{"type":"string"},"category":{"type":"string"},"filters":{"type":"array","items":{"type":"object","properties":{"type":{"type":"string"},"value":{"type":"string"}},"required":["type","value"]}},"sorts":{"type":"array","items":{"type":"object","properties":{"type":{"type":"string"},"value":{"type":"string"}},"required":["type","value"]}},"promotion_id":{"type":"string"},"creative":{"type":"string"},"name":{"type":"string"},"position":{"anyOf":[{"type":"string"},{"type":"number"}]},"product_id":{"type":"string"},"sku":{"type":"string"},"brand":{"type":"string"},"variant":{"type":"string"},"price":{"type":"number"},"quantity":{"type":"number"},"coupon":{"type":"string"},"currency":{"type":"string"},"value":{"type":"number"},"url":{"type":"string"},"image_url":{"type":"string"},"cart_id":{"type":"string"},"step":{"type":"number"},"shipping_method":{"type":"string"},"payment_method":{"type":"string"},"ticketing_mode":{"enum":["internal","external"],"type":"string"},"external_ticket_url":{"type":"string"},"external_ticket_domain":{"type":"string"},"cta_surface":{"type":"string"},"order_id":{"type":"string"},"affiliation":{"type":"string"},"subtotal":{"type":"number"},"total":{"type":"number"},"revenue":{"type":"number"},"shipping":{"type":"number"},"tax":{"type":"number"},"discount":{"type":"number"},"coupon_id":{"type":"string"},"coupon_name":{"type":"string"},"reason":{"type":"string"},"wishlist_id":{"type":"string"},"wishlist_name":{"type":"string"},"share_via":{"type":"string"},"share_message":{"type":"string"},"recipient":{"type":"string"},"review_id":{"type":"string"},"review_body":{"type":"string"},"rating":{"type":"string"},"products":{"type":"array","items":{"type":"object","properties":{"product_id":{"type":"string","description":"admission_id in ticketing context"},"sku":{"type":"string","description":"admission_id or admission_name"},"category":{"type":"string","description":"event_name or \"Admission\""},"name":{"type":"string","description":"admission_name"},"brand":{"type":"string","description":"promoter_name"},"variant":{"type":"string","description":"section_name"},"price":{"type":"number","description":"admission price (base + booking fee)"},"quantity":{"type":"number","description":"number of tickets"},"coupon":{"type":"string","description":"coupon code applied"},"position":{"type":"number","description":"position in list"},"url":{"type":"string","description":"URL to event/admission page"},"image_url":{"type":"string","description":"event image"},"admission_id":{"type":"string","description":"Explicit admission ID"},"section_id":{"type":"string","description":"Section ID if applicable"},"event_id":{"type":"string","description":"Event ID for this admission"},"promoter_id":{"type":"string","description":"Promoter ID"},"price_base":{"anyOf":[{"type":"number"},{"type":"null"}],"description":"Base price before fees"},"price_booking_fee":{"anyOf":[{"type":"number"},{"type":"null"}],"description":"Booking fee"},"capacity":{"type":"number","description":"Total capacity for this admission"},"available":{"type":"number","description":"Remaining tickets available"},"sold":{"type":"number","description":"Tickets already sold"}}}},"event_id":{"type":"string","description":"ID of the ticketed event (evt_xxx)"},"event_name":{"type":"string","description":"Name of the ticketed event"},"event_slug":{"type":"string","description":"URL slug of event"},"event_starts_at":{"type":"string","pattern":"^\\d{4}-\\d{2}-\\d{2}T\\d{2}:\\d{2}:\\d{2}$","description":"When the event starts (naive datetime, no timezone)"},"event_ends_at":{"type":"string","pattern":"^\\d{4}-\\d{2}-\\d{2}T\\d{2}:\\d{2}:\\d{2}$","description":"When the event ends (naive datetime, no timezone)"},"event_status":{"enum":["UPCOMING","LIVE","ENDED","CANCELLED"],"type":"string"},"event_visibility":{"enum":["PUBLIC","PRIVATE"],"type":"string"},"event_location":{"type":"string","description":"Venue name"},"event_city":{"type":"string","description":"Venue city"},"event_country":{"type":"string","description":"Venue country"},"promoter_id":{"type":"string","description":"ID of the promoter (pmt_xxx)"},"promoter_name":{"type":"string","description":"Name of the promoter"},"promoter_slug":{"type":"string","description":"URL slug of promoter"},"admission_id":{"type":"string","description":"ID of admission type (adm_xxx)"},"admission_name":{"type":"string","description":"Name of admission (e.g., \"General Admission\")"},"admission_capacity":{"type":"number","description":"Total capacity for this admission"},"admission_available":{"type":"number","description":"Tickets still available"},"admission_sold":{"type":"number","description":"Tickets already sold"},"section_id":{"type":"string","description":"ID of section (sct_xxx)"},"section_name":{"type":"string","description":"Name of section (e.g., \"VIP\", \"General\")"},"section_capacity":{"type":"number","description":"Total capacity for this section"},"section_available":{"type":"number","description":"Spots still available in section"},"ticket_id":{"type":"string","description":"Individual ticket ID (tkt_xxx)"},"ticket_status":{"enum":["VALID","REDEEMED","CANCELLED"],"type":"string"},"tickets_quantity":{"type":"number","description":"Number of tickets in transaction"},"customer_id":{"type":"string","description":"Customer ID (cus_xxx)"},"customer_email":{"type":"string","description":"Customer email"},"customer_first_name":{"type":"string"},"customer_last_name":{"type":"string"},"price_base":{"anyOf":[{"type":"number"},{"type":"null"}],"description":"Base price before fees"},"price_booking_fee":{"anyOf":[{"type":"number"},{"type":"null"}],"description":"Booking fee amount"},"price_discount_amount":{"anyOf":[{"type":"number"},{"type":"null"}],"description":"Discount amount applied"},"sale_starts_at":{"type":"string","pattern":"^\\d{4}-\\d{2}-\\d{2}T\\d{2}:\\d{2}:\\d{2}$","description":"When tickets go on sale (naive datetime, no timezone)"},"sale_ends_at":{"type":"string","pattern":"^\\d{4}-\\d{2}-\\d{2}T\\d{2}:\\d{2}:\\d{2}$","description":"When ticket sales end (naive datetime, no timezone)"},"entry_starts_at":{"type":"string","pattern":"^\\d{4}-\\d{2}-\\d{2}T\\d{2}:\\d{2}:\\d{2}$","description":"When entry to event begins (naive datetime, no timezone)"},"entry_ends_at":{"type":"string","pattern":"^\\d{4}-\\d{2}-\\d{2}T\\d{2}:\\d{2}:\\d{2}$","description":"When entry to event ends (naive datetime, no timezone)"},"funnel_step":{"type":"string","description":"Current funnel step (e.g., \"browse\", \"cart\", \"checkout\")"},"time_to_purchase":{"type":"number","description":"Seconds from first view to purchase"},"session_duration":{"type":"number","description":"Total session duration in seconds"},"referrer_type":{"enum":["DIRECT","SOCIAL","EMAIL","SEARCH","REFERRAL","AD"],"type":"string"},"campaign_id":{"type":"string","description":"Marketing campaign ID"},"affiliate_id":{"type":"string","description":"Affiliate partner ID"},"promo_code_used":{"type":"string","description":"Promotional code applied"},"platform":{"enum":["WEB","MOBILE_WEB","IOS","ANDROID"],"type":"string"},"app_version":{"type":"string"},"device_type":{"enum":["MOBILE","TABLET","DESKTOP"],"type":"string"},"anonymous_id":{"type":"string"},"browser":{"type":"string"},"browser_session_id":{"type":"string"},"country":{"type":"string"},"page_path":{"type":"string"},"page_title":{"type":"string"},"page_url":{"type":"string"},"referrer":{"type":"string"},"region":{"type":"string"},"user_agent":{"type":"string"},"utm_source":{"type":"string"},"utm_medium":{"type":"string"},"utm_campaign":{"type":"string"},"utm_term":{"type":"string"},"utm_content":{"type":"string"}}},"context":{"type":"object","properties":{"session_id":{"type":"string"},"user_id":{"type":"string"},"anonymous_id":{"type":"string"},"utm_source":{"type":"string"},"utm_medium":{"type":"string"},"utm_campaign":{"type":"string"},"utm_term":{"type":"string"},"utm_content":{"type":"string"},"page":{"type":"object","properties":{"url":{"type":"string"},"path":{"type":"string"},"title":{"type":"string"}},"required":["url","path","title"]},"referrer":{"type":"string"},"user_agent":{"type":"string"},"ip":{"type":"string"},"geo":{"type":"object","properties":{"country":{"type":"string","description":"Country code (e.g., \"AU\")"},"countryName":{"type":"string","description":"Country name (e.g., \"Australia\")"},"region":{"type":"string","description":"State/province code"},"regionName":{"type":"string","description":"State/province name (e.g., \"New South Wales\")"},"city":{"type":"string","description":"City name"},"latitude":{"type":"string","description":"Latitude"},"longitude":{"type":"string","description":"Longitude"}}},"fbc":{"type":"string","description":"Facebook click ID"},"fbp":{"type":"string","description":"Facebook browser ID"},"ttclid":{"type":"string","description":"TikTok click ID"}},"required":["session_id","page"]},"productId":{"type":"string"},"createdAt":{"type":"string"},"updatedAt":{"type":"string"}},"required":["id","eventId","teamId","promoterId","eventType","timestamp","date","hour","properties","context","createdAt","updatedAt"]}}}}}}},"/analytics/identify":{"post":{"operationId":"analytics.identify","summary":"Identify event","tags":["Analytics"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"anyOf":[{"type":"object","properties":{"eventId":{"type":"string","minLength":1,"description":"Event being tracked (evt_123)"},"teamId":{"type":"string","minLength":1,"description":"Team ID (team_123)"},"promoterId":{"type":"string","minLength":1,"description":"Promoter ID (pmt_123)"},"eventType":{"enum":["Page Viewed","Screen Viewed","Products Searched","Product List Viewed","Product List Filtered","Promotion Viewed","Promotion Clicked","Product Clicked","Product Viewed","Product Added","Product Removed","Cart Viewed","Checkout Started","Checkout Step Viewed","Checkout Step Completed","Payment Info Entered","Order Completed","Order Updated","Order Refunded","Order Cancelled","Coupon Entered","Coupon Applied","Coupon Denied","Coupon Removed","Product Added to Wishlist","Product Removed from Wishlist","Wishlist Product Added to Cart","Product Shared","Cart Shared","Product Reviewed"],"type":"string"},"properties":{"type":"object","properties":{"query":{"anyOf":[{"type":"string"},{"type":"object","propertyNames":{"type":"string"},"additionalProperties":{}}]},"list_id":{"type":"string"},"category":{"type":"string"},"filters":{"type":"array","items":{"type":"object","properties":{"type":{"type":"string"},"value":{"type":"string"}},"required":["type","value"]}},"sorts":{"type":"array","items":{"type":"object","properties":{"type":{"type":"string"},"value":{"type":"string"}},"required":["type","value"]}},"promotion_id":{"type":"string"},"creative":{"type":"string"},"name":{"type":"string"},"position":{"anyOf":[{"type":"string"},{"type":"number"}]},"product_id":{"type":"string"},"sku":{"type":"string"},"brand":{"type":"string"},"variant":{"type":"string"},"price":{"type":"number"},"quantity":{"type":"number"},"coupon":{"type":"string"},"currency":{"type":"string"},"value":{"type":"number"},"url":{"type":"string"},"image_url":{"type":"string"},"cart_id":{"type":"string"},"step":{"type":"number"},"shipping_method":{"type":"string"},"payment_method":{"type":"string"},"ticketing_mode":{"enum":["internal","external"],"type":"string"},"external_ticket_url":{"type":"string"},"external_ticket_domain":{"type":"string"},"cta_surface":{"type":"string"},"order_id":{"type":"string"},"affiliation":{"type":"string"},"subtotal":{"type":"number"},"total":{"type":"number"},"revenue":{"type":"number"},"shipping":{"type":"number"},"tax":{"type":"number"},"discount":{"type":"number"},"coupon_id":{"type":"string"},"coupon_name":{"type":"string"},"reason":{"type":"string"},"wishlist_id":{"type":"string"},"wishlist_name":{"type":"string"},"share_via":{"type":"string"},"share_message":{"type":"string"},"recipient":{"type":"string"},"review_id":{"type":"string"},"review_body":{"type":"string"},"rating":{"type":"string"},"products":{"type":"array","items":{"type":"object","properties":{"product_id":{"type":"string","description":"admission_id in ticketing context"},"sku":{"type":"string","description":"admission_id or admission_name"},"category":{"type":"string","description":"event_name or \"Admission\""},"name":{"type":"string","description":"admission_name"},"brand":{"type":"string","description":"promoter_name"},"variant":{"type":"string","description":"section_name"},"price":{"type":"number","description":"admission price (base + booking fee)"},"quantity":{"type":"number","description":"number of tickets"},"coupon":{"type":"string","description":"coupon code applied"},"position":{"type":"number","description":"position in list"},"url":{"type":"string","description":"URL to event/admission page"},"image_url":{"type":"string","description":"event image"},"admission_id":{"type":"string","description":"Explicit admission ID"},"section_id":{"type":"string","description":"Section ID if applicable"},"event_id":{"type":"string","description":"Event ID for this admission"},"promoter_id":{"type":"string","description":"Promoter ID"},"price_base":{"anyOf":[{"type":"number"},{"type":"null"}],"description":"Base price before fees"},"price_booking_fee":{"anyOf":[{"type":"number"},{"type":"null"}],"description":"Booking fee"},"capacity":{"type":"number","description":"Total capacity for this admission"},"available":{"type":"number","description":"Remaining tickets available"},"sold":{"type":"number","description":"Tickets already sold"}}}},"event_id":{"type":"string","description":"ID of the ticketed event (evt_xxx)"},"event_name":{"type":"string","description":"Name of the ticketed event"},"event_slug":{"type":"string","description":"URL slug of event"},"event_starts_at":{"type":"string","pattern":"^\\d{4}-\\d{2}-\\d{2}T\\d{2}:\\d{2}:\\d{2}$","description":"When the event starts (naive datetime, no timezone)"},"event_ends_at":{"type":"string","pattern":"^\\d{4}-\\d{2}-\\d{2}T\\d{2}:\\d{2}:\\d{2}$","description":"When the event ends (naive datetime, no timezone)"},"event_status":{"enum":["UPCOMING","LIVE","ENDED","CANCELLED"],"type":"string"},"event_visibility":{"enum":["PUBLIC","PRIVATE"],"type":"string"},"event_location":{"type":"string","description":"Venue name"},"event_city":{"type":"string","description":"Venue city"},"event_country":{"type":"string","description":"Venue country"},"promoter_id":{"type":"string","description":"ID of the promoter (pmt_xxx)"},"promoter_name":{"type":"string","description":"Name of the promoter"},"promoter_slug":{"type":"string","description":"URL slug of promoter"},"admission_id":{"type":"string","description":"ID of admission type (adm_xxx)"},"admission_name":{"type":"string","description":"Name of admission (e.g., \"General Admission\")"},"admission_capacity":{"type":"number","description":"Total capacity for this admission"},"admission_available":{"type":"number","description":"Tickets still available"},"admission_sold":{"type":"number","description":"Tickets already sold"},"section_id":{"type":"string","description":"ID of section (sct_xxx)"},"section_name":{"type":"string","description":"Name of section (e.g., \"VIP\", \"General\")"},"section_capacity":{"type":"number","description":"Total capacity for this section"},"section_available":{"type":"number","description":"Spots still available in section"},"ticket_id":{"type":"string","description":"Individual ticket ID (tkt_xxx)"},"ticket_status":{"enum":["VALID","REDEEMED","CANCELLED"],"type":"string"},"tickets_quantity":{"type":"number","description":"Number of tickets in transaction"},"customer_id":{"type":"string","description":"Customer ID (cus_xxx)"},"customer_email":{"type":"string","description":"Customer email"},"customer_first_name":{"type":"string"},"customer_last_name":{"type":"string"},"price_base":{"anyOf":[{"type":"number"},{"type":"null"}],"description":"Base price before fees"},"price_booking_fee":{"anyOf":[{"type":"number"},{"type":"null"}],"description":"Booking fee amount"},"price_discount_amount":{"anyOf":[{"type":"number"},{"type":"null"}],"description":"Discount amount applied"},"sale_starts_at":{"type":"string","pattern":"^\\d{4}-\\d{2}-\\d{2}T\\d{2}:\\d{2}:\\d{2}$","description":"When tickets go on sale (naive datetime, no timezone)"},"sale_ends_at":{"type":"string","pattern":"^\\d{4}-\\d{2}-\\d{2}T\\d{2}:\\d{2}:\\d{2}$","description":"When ticket sales end (naive datetime, no timezone)"},"entry_starts_at":{"type":"string","pattern":"^\\d{4}-\\d{2}-\\d{2}T\\d{2}:\\d{2}:\\d{2}$","description":"When entry to event begins (naive datetime, no timezone)"},"entry_ends_at":{"type":"string","pattern":"^\\d{4}-\\d{2}-\\d{2}T\\d{2}:\\d{2}:\\d{2}$","description":"When entry to event ends (naive datetime, no timezone)"},"funnel_step":{"type":"string","description":"Current funnel step (e.g., \"browse\", \"cart\", \"checkout\")"},"time_to_purchase":{"type":"number","description":"Seconds from first view to purchase"},"session_duration":{"type":"number","description":"Total session duration in seconds"},"referrer_type":{"enum":["DIRECT","SOCIAL","EMAIL","SEARCH","REFERRAL","AD"],"type":"string"},"campaign_id":{"type":"string","description":"Marketing campaign ID"},"affiliate_id":{"type":"string","description":"Affiliate partner ID"},"promo_code_used":{"type":"string","description":"Promotional code applied"},"platform":{"enum":["WEB","MOBILE_WEB","IOS","ANDROID"],"type":"string"},"app_version":{"type":"string"},"device_type":{"enum":["MOBILE","TABLET","DESKTOP"],"type":"string"},"anonymous_id":{"type":"string"},"browser":{"type":"string"},"browser_session_id":{"type":"string"},"country":{"type":"string"},"page_path":{"type":"string"},"page_title":{"type":"string"},"page_url":{"type":"string"},"referrer":{"type":"string"},"region":{"type":"string"},"user_agent":{"type":"string"},"utm_source":{"type":"string"},"utm_medium":{"type":"string"},"utm_campaign":{"type":"string"},"utm_term":{"type":"string"},"utm_content":{"type":"string"}}},"context":{"type":"object","properties":{"session_id":{"type":"string"},"user_id":{"type":"string"},"anonymous_id":{"type":"string"},"utm_source":{"type":"string"},"utm_medium":{"type":"string"},"utm_campaign":{"type":"string"},"utm_term":{"type":"string"},"utm_content":{"type":"string"},"page":{"type":"object","properties":{"url":{"type":"string"},"path":{"type":"string"},"title":{"type":"string"}},"required":["url","path","title"]},"referrer":{"type":"string"},"user_agent":{"type":"string"},"ip":{"type":"string"},"geo":{"type":"object","properties":{"country":{"type":"string","description":"Country code (e.g., \"AU\")"},"countryName":{"type":"string","description":"Country name (e.g., \"Australia\")"},"region":{"type":"string","description":"State/province code"},"regionName":{"type":"string","description":"State/province name (e.g., \"New South Wales\")"},"city":{"type":"string","description":"City name"},"latitude":{"type":"string","description":"Latitude"},"longitude":{"type":"string","description":"Longitude"}}},"fbc":{"type":"string","description":"Facebook click ID"},"fbp":{"type":"string","description":"Facebook browser ID"},"ttclid":{"type":"string","description":"TikTok click ID"}},"required":["session_id","page"]},"productId":{"type":"string"},"messageId":{"type":"string","minLength":1,"description":"Analytics message id for retry-safe event delivery and linking."},"occurredAt":{"type":"string","format":"date-time","description":"Client-observed event time. Server ingest time remains authoritative for writes."}},"required":["eventId","teamId","promoterId","eventType","properties","context"],"description":"Schema for tracking an analytics event. Excludes system-generated fields"},{"type":"object","properties":{"eventName":{"type":"string","minLength":1},"eventType":{"enum":["Page Viewed","Screen Viewed","Products Searched","Product List Viewed","Product List Filtered","Promotion Viewed","Promotion Clicked","Product Clicked","Product Viewed","Product Added","Product Removed","Cart Viewed","Checkout Started","Checkout Step Viewed","Checkout Step Completed","Payment Info Entered","Order Completed","Order Updated","Order Refunded","Order Cancelled","Coupon Entered","Coupon Applied","Coupon Denied","Coupon Removed","Product Added to Wishlist","Product Removed from Wishlist","Wishlist Product Added to Cart","Product Shared","Cart Shared","Product Reviewed"],"type":"string"},"eventId":{"type":"string","minLength":1},"teamId":{"type":"string","minLength":1},"promoterId":{"type":"string","minLength":1},"properties":{"type":"object","propertyNames":{"type":"string"},"additionalProperties":{}},"context":{"type":"object","properties":{"session_id":{"type":"string"},"user_id":{"type":"string"},"anonymous_id":{"type":"string"},"utm_source":{"type":"string"},"utm_medium":{"type":"string"},"utm_campaign":{"type":"string"},"utm_term":{"type":"string"},"utm_content":{"type":"string"},"page":{"type":"object","properties":{"url":{"type":"string"},"path":{"type":"string"},"title":{"type":"string"}},"required":["url","path","title"]},"referrer":{"type":"string"},"user_agent":{"type":"string"},"ip":{"type":"string"},"geo":{"type":"object","properties":{"country":{"type":"string","description":"Country code (e.g., \"AU\")"},"countryName":{"type":"string","description":"Country name (e.g., \"Australia\")"},"region":{"type":"string","description":"State/province code"},"regionName":{"type":"string","description":"State/province name (e.g., \"New South Wales\")"},"city":{"type":"string","description":"City name"},"latitude":{"type":"string","description":"Latitude"},"longitude":{"type":"string","description":"Longitude"}}},"fbc":{"type":"string","description":"Facebook click ID"},"fbp":{"type":"string","description":"Facebook browser ID"},"ttclid":{"type":"string","description":"TikTok click ID"}}},"legacyContext":{"type":"object","properties":{"legacyOrgId":{"type":"string","minLength":1},"legacyEventId":{"type":"string","minLength":1},"legacyTeamId":{"type":"string","minLength":1},"legacyEventName":{"type":"string"},"legacyEventSlug":{"type":"string"},"legacyEventCreatedAt":{"anyOf":[{"type":"string"},{"type":"string","format":"date-time","x-native-type":"date"},{"type":"null"}]},"legacyTeamCreatedAt":{"anyOf":[{"type":"string"},{"type":"string","format":"date-time","x-native-type":"date"},{"type":"null"}]}},"required":["legacyOrgId","legacyEventId","legacyTeamId"]}},"additionalProperties":{},"description":"Compatibility schema for legacy Sash analytics payloads that require server-side ID normalization"}],"description":"Analytics ingress schema accepting both canonical payloads and legacy Sash-compatible payloads"}}}},"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"object","properties":{"id":{"type":"string"},"eventId":{"type":"string","minLength":1,"description":"Event being tracked (evt_123)"},"teamId":{"type":"string","minLength":1,"description":"Team ID (team_123)"},"promoterId":{"type":"string","minLength":1,"description":"Promoter ID (pmt_123)"},"eventType":{"enum":["Page Viewed","Screen Viewed","Products Searched","Product List Viewed","Product List Filtered","Promotion Viewed","Promotion Clicked","Product Clicked","Product Viewed","Product Added","Product Removed","Cart Viewed","Checkout Started","Checkout Step Viewed","Checkout Step Completed","Payment Info Entered","Order Completed","Order Updated","Order Refunded","Order Cancelled","Coupon Entered","Coupon Applied","Coupon Denied","Coupon Removed","Product Added to Wishlist","Product Removed from Wishlist","Wishlist Product Added to Cart","Product Shared","Cart Shared","Product Reviewed"],"type":"string"},"timestamp":{"type":"string"},"date":{"type":"string","description":"YYYY-MM-DD"},"hour":{"type":"integer","minimum":0,"maximum":23},"properties":{"type":"object","properties":{"query":{"anyOf":[{"type":"string"},{"type":"object","propertyNames":{"type":"string"},"additionalProperties":{}}]},"list_id":{"type":"string"},"category":{"type":"string"},"filters":{"type":"array","items":{"type":"object","properties":{"type":{"type":"string"},"value":{"type":"string"}},"required":["type","value"]}},"sorts":{"type":"array","items":{"type":"object","properties":{"type":{"type":"string"},"value":{"type":"string"}},"required":["type","value"]}},"promotion_id":{"type":"string"},"creative":{"type":"string"},"name":{"type":"string"},"position":{"anyOf":[{"type":"string"},{"type":"number"}]},"product_id":{"type":"string"},"sku":{"type":"string"},"brand":{"type":"string"},"variant":{"type":"string"},"price":{"type":"number"},"quantity":{"type":"number"},"coupon":{"type":"string"},"currency":{"type":"string"},"value":{"type":"number"},"url":{"type":"string"},"image_url":{"type":"string"},"cart_id":{"type":"string"},"step":{"type":"number"},"shipping_method":{"type":"string"},"payment_method":{"type":"string"},"ticketing_mode":{"enum":["internal","external"],"type":"string"},"external_ticket_url":{"type":"string"},"external_ticket_domain":{"type":"string"},"cta_surface":{"type":"string"},"order_id":{"type":"string"},"affiliation":{"type":"string"},"subtotal":{"type":"number"},"total":{"type":"number"},"revenue":{"type":"number"},"shipping":{"type":"number"},"tax":{"type":"number"},"discount":{"type":"number"},"coupon_id":{"type":"string"},"coupon_name":{"type":"string"},"reason":{"type":"string"},"wishlist_id":{"type":"string"},"wishlist_name":{"type":"string"},"share_via":{"type":"string"},"share_message":{"type":"string"},"recipient":{"type":"string"},"review_id":{"type":"string"},"review_body":{"type":"string"},"rating":{"type":"string"},"products":{"type":"array","items":{"type":"object","properties":{"product_id":{"type":"string","description":"admission_id in ticketing context"},"sku":{"type":"string","description":"admission_id or admission_name"},"category":{"type":"string","description":"event_name or \"Admission\""},"name":{"type":"string","description":"admission_name"},"brand":{"type":"string","description":"promoter_name"},"variant":{"type":"string","description":"section_name"},"price":{"type":"number","description":"admission price (base + booking fee)"},"quantity":{"type":"number","description":"number of tickets"},"coupon":{"type":"string","description":"coupon code applied"},"position":{"type":"number","description":"position in list"},"url":{"type":"string","description":"URL to event/admission page"},"image_url":{"type":"string","description":"event image"},"admission_id":{"type":"string","description":"Explicit admission ID"},"section_id":{"type":"string","description":"Section ID if applicable"},"event_id":{"type":"string","description":"Event ID for this admission"},"promoter_id":{"type":"string","description":"Promoter ID"},"price_base":{"anyOf":[{"type":"number"},{"type":"null"}],"description":"Base price before fees"},"price_booking_fee":{"anyOf":[{"type":"number"},{"type":"null"}],"description":"Booking fee"},"capacity":{"type":"number","description":"Total capacity for this admission"},"available":{"type":"number","description":"Remaining tickets available"},"sold":{"type":"number","description":"Tickets already sold"}}}},"event_id":{"type":"string","description":"ID of the ticketed event (evt_xxx)"},"event_name":{"type":"string","description":"Name of the ticketed event"},"event_slug":{"type":"string","description":"URL slug of event"},"event_starts_at":{"type":"string","pattern":"^\\d{4}-\\d{2}-\\d{2}T\\d{2}:\\d{2}:\\d{2}$","description":"When the event starts (naive datetime, no timezone)"},"event_ends_at":{"type":"string","pattern":"^\\d{4}-\\d{2}-\\d{2}T\\d{2}:\\d{2}:\\d{2}$","description":"When the event ends (naive datetime, no timezone)"},"event_status":{"enum":["UPCOMING","LIVE","ENDED","CANCELLED"],"type":"string"},"event_visibility":{"enum":["PUBLIC","PRIVATE"],"type":"string"},"event_location":{"type":"string","description":"Venue name"},"event_city":{"type":"string","description":"Venue city"},"event_country":{"type":"string","description":"Venue country"},"promoter_id":{"type":"string","description":"ID of the promoter (pmt_xxx)"},"promoter_name":{"type":"string","description":"Name of the promoter"},"promoter_slug":{"type":"string","description":"URL slug of promoter"},"admission_id":{"type":"string","description":"ID of admission type (adm_xxx)"},"admission_name":{"type":"string","description":"Name of admission (e.g., \"General Admission\")"},"admission_capacity":{"type":"number","description":"Total capacity for this admission"},"admission_available":{"type":"number","description":"Tickets still available"},"admission_sold":{"type":"number","description":"Tickets already sold"},"section_id":{"type":"string","description":"ID of section (sct_xxx)"},"section_name":{"type":"string","description":"Name of section (e.g., \"VIP\", \"General\")"},"section_capacity":{"type":"number","description":"Total capacity for this section"},"section_available":{"type":"number","description":"Spots still available in section"},"ticket_id":{"type":"string","description":"Individual ticket ID (tkt_xxx)"},"ticket_status":{"enum":["VALID","REDEEMED","CANCELLED"],"type":"string"},"tickets_quantity":{"type":"number","description":"Number of tickets in transaction"},"customer_id":{"type":"string","description":"Customer ID (cus_xxx)"},"customer_email":{"type":"string","description":"Customer email"},"customer_first_name":{"type":"string"},"customer_last_name":{"type":"string"},"price_base":{"anyOf":[{"type":"number"},{"type":"null"}],"description":"Base price before fees"},"price_booking_fee":{"anyOf":[{"type":"number"},{"type":"null"}],"description":"Booking fee amount"},"price_discount_amount":{"anyOf":[{"type":"number"},{"type":"null"}],"description":"Discount amount applied"},"sale_starts_at":{"type":"string","pattern":"^\\d{4}-\\d{2}-\\d{2}T\\d{2}:\\d{2}:\\d{2}$","description":"When tickets go on sale (naive datetime, no timezone)"},"sale_ends_at":{"type":"string","pattern":"^\\d{4}-\\d{2}-\\d{2}T\\d{2}:\\d{2}:\\d{2}$","description":"When ticket sales end (naive datetime, no timezone)"},"entry_starts_at":{"type":"string","pattern":"^\\d{4}-\\d{2}-\\d{2}T\\d{2}:\\d{2}:\\d{2}$","description":"When entry to event begins (naive datetime, no timezone)"},"entry_ends_at":{"type":"string","pattern":"^\\d{4}-\\d{2}-\\d{2}T\\d{2}:\\d{2}:\\d{2}$","description":"When entry to event ends (naive datetime, no timezone)"},"funnel_step":{"type":"string","description":"Current funnel step (e.g., \"browse\", \"cart\", \"checkout\")"},"time_to_purchase":{"type":"number","description":"Seconds from first view to purchase"},"session_duration":{"type":"number","description":"Total session duration in seconds"},"referrer_type":{"enum":["DIRECT","SOCIAL","EMAIL","SEARCH","REFERRAL","AD"],"type":"string"},"campaign_id":{"type":"string","description":"Marketing campaign ID"},"affiliate_id":{"type":"string","description":"Affiliate partner ID"},"promo_code_used":{"type":"string","description":"Promotional code applied"},"platform":{"enum":["WEB","MOBILE_WEB","IOS","ANDROID"],"type":"string"},"app_version":{"type":"string"},"device_type":{"enum":["MOBILE","TABLET","DESKTOP"],"type":"string"},"anonymous_id":{"type":"string"},"browser":{"type":"string"},"browser_session_id":{"type":"string"},"country":{"type":"string"},"page_path":{"type":"string"},"page_title":{"type":"string"},"page_url":{"type":"string"},"referrer":{"type":"string"},"region":{"type":"string"},"user_agent":{"type":"string"},"utm_source":{"type":"string"},"utm_medium":{"type":"string"},"utm_campaign":{"type":"string"},"utm_term":{"type":"string"},"utm_content":{"type":"string"}}},"context":{"type":"object","properties":{"session_id":{"type":"string"},"user_id":{"type":"string"},"anonymous_id":{"type":"string"},"utm_source":{"type":"string"},"utm_medium":{"type":"string"},"utm_campaign":{"type":"string"},"utm_term":{"type":"string"},"utm_content":{"type":"string"},"page":{"type":"object","properties":{"url":{"type":"string"},"path":{"type":"string"},"title":{"type":"string"}},"required":["url","path","title"]},"referrer":{"type":"string"},"user_agent":{"type":"string"},"ip":{"type":"string"},"geo":{"type":"object","properties":{"country":{"type":"string","description":"Country code (e.g., \"AU\")"},"countryName":{"type":"string","description":"Country name (e.g., \"Australia\")"},"region":{"type":"string","description":"State/province code"},"regionName":{"type":"string","description":"State/province name (e.g., \"New South Wales\")"},"city":{"type":"string","description":"City name"},"latitude":{"type":"string","description":"Latitude"},"longitude":{"type":"string","description":"Longitude"}}},"fbc":{"type":"string","description":"Facebook click ID"},"fbp":{"type":"string","description":"Facebook browser ID"},"ttclid":{"type":"string","description":"TikTok click ID"}},"required":["session_id","page"]},"productId":{"type":"string"},"createdAt":{"type":"string"},"updatedAt":{"type":"string"}},"required":["id","eventId","teamId","promoterId","eventType","timestamp","date","hour","properties","context","createdAt","updatedAt"]}}}}}}},"/analytics/alias":{"post":{"operationId":"analytics.alias","summary":"Alias event","tags":["Analytics"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"anyOf":[{"type":"object","properties":{"eventId":{"type":"string","minLength":1,"description":"Event being tracked (evt_123)"},"teamId":{"type":"string","minLength":1,"description":"Team ID (team_123)"},"promoterId":{"type":"string","minLength":1,"description":"Promoter ID (pmt_123)"},"eventType":{"enum":["Page Viewed","Screen Viewed","Products Searched","Product List Viewed","Product List Filtered","Promotion Viewed","Promotion Clicked","Product Clicked","Product Viewed","Product Added","Product Removed","Cart Viewed","Checkout Started","Checkout Step Viewed","Checkout Step Completed","Payment Info Entered","Order Completed","Order Updated","Order Refunded","Order Cancelled","Coupon Entered","Coupon Applied","Coupon Denied","Coupon Removed","Product Added to Wishlist","Product Removed from Wishlist","Wishlist Product Added to Cart","Product Shared","Cart Shared","Product Reviewed"],"type":"string"},"properties":{"type":"object","properties":{"query":{"anyOf":[{"type":"string"},{"type":"object","propertyNames":{"type":"string"},"additionalProperties":{}}]},"list_id":{"type":"string"},"category":{"type":"string"},"filters":{"type":"array","items":{"type":"object","properties":{"type":{"type":"string"},"value":{"type":"string"}},"required":["type","value"]}},"sorts":{"type":"array","items":{"type":"object","properties":{"type":{"type":"string"},"value":{"type":"string"}},"required":["type","value"]}},"promotion_id":{"type":"string"},"creative":{"type":"string"},"name":{"type":"string"},"position":{"anyOf":[{"type":"string"},{"type":"number"}]},"product_id":{"type":"string"},"sku":{"type":"string"},"brand":{"type":"string"},"variant":{"type":"string"},"price":{"type":"number"},"quantity":{"type":"number"},"coupon":{"type":"string"},"currency":{"type":"string"},"value":{"type":"number"},"url":{"type":"string"},"image_url":{"type":"string"},"cart_id":{"type":"string"},"step":{"type":"number"},"shipping_method":{"type":"string"},"payment_method":{"type":"string"},"ticketing_mode":{"enum":["internal","external"],"type":"string"},"external_ticket_url":{"type":"string"},"external_ticket_domain":{"type":"string"},"cta_surface":{"type":"string"},"order_id":{"type":"string"},"affiliation":{"type":"string"},"subtotal":{"type":"number"},"total":{"type":"number"},"revenue":{"type":"number"},"shipping":{"type":"number"},"tax":{"type":"number"},"discount":{"type":"number"},"coupon_id":{"type":"string"},"coupon_name":{"type":"string"},"reason":{"type":"string"},"wishlist_id":{"type":"string"},"wishlist_name":{"type":"string"},"share_via":{"type":"string"},"share_message":{"type":"string"},"recipient":{"type":"string"},"review_id":{"type":"string"},"review_body":{"type":"string"},"rating":{"type":"string"},"products":{"type":"array","items":{"type":"object","properties":{"product_id":{"type":"string","description":"admission_id in ticketing context"},"sku":{"type":"string","description":"admission_id or admission_name"},"category":{"type":"string","description":"event_name or \"Admission\""},"name":{"type":"string","description":"admission_name"},"brand":{"type":"string","description":"promoter_name"},"variant":{"type":"string","description":"section_name"},"price":{"type":"number","description":"admission price (base + booking fee)"},"quantity":{"type":"number","description":"number of tickets"},"coupon":{"type":"string","description":"coupon code applied"},"position":{"type":"number","description":"position in list"},"url":{"type":"string","description":"URL to event/admission page"},"image_url":{"type":"string","description":"event image"},"admission_id":{"type":"string","description":"Explicit admission ID"},"section_id":{"type":"string","description":"Section ID if applicable"},"event_id":{"type":"string","description":"Event ID for this admission"},"promoter_id":{"type":"string","description":"Promoter ID"},"price_base":{"anyOf":[{"type":"number"},{"type":"null"}],"description":"Base price before fees"},"price_booking_fee":{"anyOf":[{"type":"number"},{"type":"null"}],"description":"Booking fee"},"capacity":{"type":"number","description":"Total capacity for this admission"},"available":{"type":"number","description":"Remaining tickets available"},"sold":{"type":"number","description":"Tickets already sold"}}}},"event_id":{"type":"string","description":"ID of the ticketed event (evt_xxx)"},"event_name":{"type":"string","description":"Name of the ticketed event"},"event_slug":{"type":"string","description":"URL slug of event"},"event_starts_at":{"type":"string","pattern":"^\\d{4}-\\d{2}-\\d{2}T\\d{2}:\\d{2}:\\d{2}$","description":"When the event starts (naive datetime, no timezone)"},"event_ends_at":{"type":"string","pattern":"^\\d{4}-\\d{2}-\\d{2}T\\d{2}:\\d{2}:\\d{2}$","description":"When the event ends (naive datetime, no timezone)"},"event_status":{"enum":["UPCOMING","LIVE","ENDED","CANCELLED"],"type":"string"},"event_visibility":{"enum":["PUBLIC","PRIVATE"],"type":"string"},"event_location":{"type":"string","description":"Venue name"},"event_city":{"type":"string","description":"Venue city"},"event_country":{"type":"string","description":"Venue country"},"promoter_id":{"type":"string","description":"ID of the promoter (pmt_xxx)"},"promoter_name":{"type":"string","description":"Name of the promoter"},"promoter_slug":{"type":"string","description":"URL slug of promoter"},"admission_id":{"type":"string","description":"ID of admission type (adm_xxx)"},"admission_name":{"type":"string","description":"Name of admission (e.g., \"General Admission\")"},"admission_capacity":{"type":"number","description":"Total capacity for this admission"},"admission_available":{"type":"number","description":"Tickets still available"},"admission_sold":{"type":"number","description":"Tickets already sold"},"section_id":{"type":"string","description":"ID of section (sct_xxx)"},"section_name":{"type":"string","description":"Name of section (e.g., \"VIP\", \"General\")"},"section_capacity":{"type":"number","description":"Total capacity for this section"},"section_available":{"type":"number","description":"Spots still available in section"},"ticket_id":{"type":"string","description":"Individual ticket ID (tkt_xxx)"},"ticket_status":{"enum":["VALID","REDEEMED","CANCELLED"],"type":"string"},"tickets_quantity":{"type":"number","description":"Number of tickets in transaction"},"customer_id":{"type":"string","description":"Customer ID (cus_xxx)"},"customer_email":{"type":"string","description":"Customer email"},"customer_first_name":{"type":"string"},"customer_last_name":{"type":"string"},"price_base":{"anyOf":[{"type":"number"},{"type":"null"}],"description":"Base price before fees"},"price_booking_fee":{"anyOf":[{"type":"number"},{"type":"null"}],"description":"Booking fee amount"},"price_discount_amount":{"anyOf":[{"type":"number"},{"type":"null"}],"description":"Discount amount applied"},"sale_starts_at":{"type":"string","pattern":"^\\d{4}-\\d{2}-\\d{2}T\\d{2}:\\d{2}:\\d{2}$","description":"When tickets go on sale (naive datetime, no timezone)"},"sale_ends_at":{"type":"string","pattern":"^\\d{4}-\\d{2}-\\d{2}T\\d{2}:\\d{2}:\\d{2}$","description":"When ticket sales end (naive datetime, no timezone)"},"entry_starts_at":{"type":"string","pattern":"^\\d{4}-\\d{2}-\\d{2}T\\d{2}:\\d{2}:\\d{2}$","description":"When entry to event begins (naive datetime, no timezone)"},"entry_ends_at":{"type":"string","pattern":"^\\d{4}-\\d{2}-\\d{2}T\\d{2}:\\d{2}:\\d{2}$","description":"When entry to event ends (naive datetime, no timezone)"},"funnel_step":{"type":"string","description":"Current funnel step (e.g., \"browse\", \"cart\", \"checkout\")"},"time_to_purchase":{"type":"number","description":"Seconds from first view to purchase"},"session_duration":{"type":"number","description":"Total session duration in seconds"},"referrer_type":{"enum":["DIRECT","SOCIAL","EMAIL","SEARCH","REFERRAL","AD"],"type":"string"},"campaign_id":{"type":"string","description":"Marketing campaign ID"},"affiliate_id":{"type":"string","description":"Affiliate partner ID"},"promo_code_used":{"type":"string","description":"Promotional code applied"},"platform":{"enum":["WEB","MOBILE_WEB","IOS","ANDROID"],"type":"string"},"app_version":{"type":"string"},"device_type":{"enum":["MOBILE","TABLET","DESKTOP"],"type":"string"},"anonymous_id":{"type":"string"},"browser":{"type":"string"},"browser_session_id":{"type":"string"},"country":{"type":"string"},"page_path":{"type":"string"},"page_title":{"type":"string"},"page_url":{"type":"string"},"referrer":{"type":"string"},"region":{"type":"string"},"user_agent":{"type":"string"},"utm_source":{"type":"string"},"utm_medium":{"type":"string"},"utm_campaign":{"type":"string"},"utm_term":{"type":"string"},"utm_content":{"type":"string"}}},"context":{"type":"object","properties":{"session_id":{"type":"string"},"user_id":{"type":"string"},"anonymous_id":{"type":"string"},"utm_source":{"type":"string"},"utm_medium":{"type":"string"},"utm_campaign":{"type":"string"},"utm_term":{"type":"string"},"utm_content":{"type":"string"},"page":{"type":"object","properties":{"url":{"type":"string"},"path":{"type":"string"},"title":{"type":"string"}},"required":["url","path","title"]},"referrer":{"type":"string"},"user_agent":{"type":"string"},"ip":{"type":"string"},"geo":{"type":"object","properties":{"country":{"type":"string","description":"Country code (e.g., \"AU\")"},"countryName":{"type":"string","description":"Country name (e.g., \"Australia\")"},"region":{"type":"string","description":"State/province code"},"regionName":{"type":"string","description":"State/province name (e.g., \"New South Wales\")"},"city":{"type":"string","description":"City name"},"latitude":{"type":"string","description":"Latitude"},"longitude":{"type":"string","description":"Longitude"}}},"fbc":{"type":"string","description":"Facebook click ID"},"fbp":{"type":"string","description":"Facebook browser ID"},"ttclid":{"type":"string","description":"TikTok click ID"}},"required":["session_id","page"]},"productId":{"type":"string"},"messageId":{"type":"string","minLength":1,"description":"Analytics message id for retry-safe event delivery and linking."},"occurredAt":{"type":"string","format":"date-time","description":"Client-observed event time. Server ingest time remains authoritative for writes."}},"required":["eventId","teamId","promoterId","eventType","properties","context"],"description":"Schema for tracking an analytics event. Excludes system-generated fields"},{"type":"object","properties":{"eventName":{"type":"string","minLength":1},"eventType":{"enum":["Page Viewed","Screen Viewed","Products Searched","Product List Viewed","Product List Filtered","Promotion Viewed","Promotion Clicked","Product Clicked","Product Viewed","Product Added","Product Removed","Cart Viewed","Checkout Started","Checkout Step Viewed","Checkout Step Completed","Payment Info Entered","Order Completed","Order Updated","Order Refunded","Order Cancelled","Coupon Entered","Coupon Applied","Coupon Denied","Coupon Removed","Product Added to Wishlist","Product Removed from Wishlist","Wishlist Product Added to Cart","Product Shared","Cart Shared","Product Reviewed"],"type":"string"},"eventId":{"type":"string","minLength":1},"teamId":{"type":"string","minLength":1},"promoterId":{"type":"string","minLength":1},"properties":{"type":"object","propertyNames":{"type":"string"},"additionalProperties":{}},"context":{"type":"object","properties":{"session_id":{"type":"string"},"user_id":{"type":"string"},"anonymous_id":{"type":"string"},"utm_source":{"type":"string"},"utm_medium":{"type":"string"},"utm_campaign":{"type":"string"},"utm_term":{"type":"string"},"utm_content":{"type":"string"},"page":{"type":"object","properties":{"url":{"type":"string"},"path":{"type":"string"},"title":{"type":"string"}},"required":["url","path","title"]},"referrer":{"type":"string"},"user_agent":{"type":"string"},"ip":{"type":"string"},"geo":{"type":"object","properties":{"country":{"type":"string","description":"Country code (e.g., \"AU\")"},"countryName":{"type":"string","description":"Country name (e.g., \"Australia\")"},"region":{"type":"string","description":"State/province code"},"regionName":{"type":"string","description":"State/province name (e.g., \"New South Wales\")"},"city":{"type":"string","description":"City name"},"latitude":{"type":"string","description":"Latitude"},"longitude":{"type":"string","description":"Longitude"}}},"fbc":{"type":"string","description":"Facebook click ID"},"fbp":{"type":"string","description":"Facebook browser ID"},"ttclid":{"type":"string","description":"TikTok click ID"}}},"legacyContext":{"type":"object","properties":{"legacyOrgId":{"type":"string","minLength":1},"legacyEventId":{"type":"string","minLength":1},"legacyTeamId":{"type":"string","minLength":1},"legacyEventName":{"type":"string"},"legacyEventSlug":{"type":"string"},"legacyEventCreatedAt":{"anyOf":[{"type":"string"},{"type":"string","format":"date-time","x-native-type":"date"},{"type":"null"}]},"legacyTeamCreatedAt":{"anyOf":[{"type":"string"},{"type":"string","format":"date-time","x-native-type":"date"},{"type":"null"}]}},"required":["legacyOrgId","legacyEventId","legacyTeamId"]}},"additionalProperties":{},"description":"Compatibility schema for legacy Sash analytics payloads that require server-side ID normalization"}],"description":"Analytics ingress schema accepting both canonical payloads and legacy Sash-compatible payloads"}}}},"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"object","properties":{"id":{"type":"string"},"eventId":{"type":"string","minLength":1,"description":"Event being tracked (evt_123)"},"teamId":{"type":"string","minLength":1,"description":"Team ID (team_123)"},"promoterId":{"type":"string","minLength":1,"description":"Promoter ID (pmt_123)"},"eventType":{"enum":["Page Viewed","Screen Viewed","Products Searched","Product List Viewed","Product List Filtered","Promotion Viewed","Promotion Clicked","Product Clicked","Product Viewed","Product Added","Product Removed","Cart Viewed","Checkout Started","Checkout Step Viewed","Checkout Step Completed","Payment Info Entered","Order Completed","Order Updated","Order Refunded","Order Cancelled","Coupon Entered","Coupon Applied","Coupon Denied","Coupon Removed","Product Added to Wishlist","Product Removed from Wishlist","Wishlist Product Added to Cart","Product Shared","Cart Shared","Product Reviewed"],"type":"string"},"timestamp":{"type":"string"},"date":{"type":"string","description":"YYYY-MM-DD"},"hour":{"type":"integer","minimum":0,"maximum":23},"properties":{"type":"object","properties":{"query":{"anyOf":[{"type":"string"},{"type":"object","propertyNames":{"type":"string"},"additionalProperties":{}}]},"list_id":{"type":"string"},"category":{"type":"string"},"filters":{"type":"array","items":{"type":"object","properties":{"type":{"type":"string"},"value":{"type":"string"}},"required":["type","value"]}},"sorts":{"type":"array","items":{"type":"object","properties":{"type":{"type":"string"},"value":{"type":"string"}},"required":["type","value"]}},"promotion_id":{"type":"string"},"creative":{"type":"string"},"name":{"type":"string"},"position":{"anyOf":[{"type":"string"},{"type":"number"}]},"product_id":{"type":"string"},"sku":{"type":"string"},"brand":{"type":"string"},"variant":{"type":"string"},"price":{"type":"number"},"quantity":{"type":"number"},"coupon":{"type":"string"},"currency":{"type":"string"},"value":{"type":"number"},"url":{"type":"string"},"image_url":{"type":"string"},"cart_id":{"type":"string"},"step":{"type":"number"},"shipping_method":{"type":"string"},"payment_method":{"type":"string"},"ticketing_mode":{"enum":["internal","external"],"type":"string"},"external_ticket_url":{"type":"string"},"external_ticket_domain":{"type":"string"},"cta_surface":{"type":"string"},"order_id":{"type":"string"},"affiliation":{"type":"string"},"subtotal":{"type":"number"},"total":{"type":"number"},"revenue":{"type":"number"},"shipping":{"type":"number"},"tax":{"type":"number"},"discount":{"type":"number"},"coupon_id":{"type":"string"},"coupon_name":{"type":"string"},"reason":{"type":"string"},"wishlist_id":{"type":"string"},"wishlist_name":{"type":"string"},"share_via":{"type":"string"},"share_message":{"type":"string"},"recipient":{"type":"string"},"review_id":{"type":"string"},"review_body":{"type":"string"},"rating":{"type":"string"},"products":{"type":"array","items":{"type":"object","properties":{"product_id":{"type":"string","description":"admission_id in ticketing context"},"sku":{"type":"string","description":"admission_id or admission_name"},"category":{"type":"string","description":"event_name or \"Admission\""},"name":{"type":"string","description":"admission_name"},"brand":{"type":"string","description":"promoter_name"},"variant":{"type":"string","description":"section_name"},"price":{"type":"number","description":"admission price (base + booking fee)"},"quantity":{"type":"number","description":"number of tickets"},"coupon":{"type":"string","description":"coupon code applied"},"position":{"type":"number","description":"position in list"},"url":{"type":"string","description":"URL to event/admission page"},"image_url":{"type":"string","description":"event image"},"admission_id":{"type":"string","description":"Explicit admission ID"},"section_id":{"type":"string","description":"Section ID if applicable"},"event_id":{"type":"string","description":"Event ID for this admission"},"promoter_id":{"type":"string","description":"Promoter ID"},"price_base":{"anyOf":[{"type":"number"},{"type":"null"}],"description":"Base price before fees"},"price_booking_fee":{"anyOf":[{"type":"number"},{"type":"null"}],"description":"Booking fee"},"capacity":{"type":"number","description":"Total capacity for this admission"},"available":{"type":"number","description":"Remaining tickets available"},"sold":{"type":"number","description":"Tickets already sold"}}}},"event_id":{"type":"string","description":"ID of the ticketed event (evt_xxx)"},"event_name":{"type":"string","description":"Name of the ticketed event"},"event_slug":{"type":"string","description":"URL slug of event"},"event_starts_at":{"type":"string","pattern":"^\\d{4}-\\d{2}-\\d{2}T\\d{2}:\\d{2}:\\d{2}$","description":"When the event starts (naive datetime, no timezone)"},"event_ends_at":{"type":"string","pattern":"^\\d{4}-\\d{2}-\\d{2}T\\d{2}:\\d{2}:\\d{2}$","description":"When the event ends (naive datetime, no timezone)"},"event_status":{"enum":["UPCOMING","LIVE","ENDED","CANCELLED"],"type":"string"},"event_visibility":{"enum":["PUBLIC","PRIVATE"],"type":"string"},"event_location":{"type":"string","description":"Venue name"},"event_city":{"type":"string","description":"Venue city"},"event_country":{"type":"string","description":"Venue country"},"promoter_id":{"type":"string","description":"ID of the promoter (pmt_xxx)"},"promoter_name":{"type":"string","description":"Name of the promoter"},"promoter_slug":{"type":"string","description":"URL slug of promoter"},"admission_id":{"type":"string","description":"ID of admission type (adm_xxx)"},"admission_name":{"type":"string","description":"Name of admission (e.g., \"General Admission\")"},"admission_capacity":{"type":"number","description":"Total capacity for this admission"},"admission_available":{"type":"number","description":"Tickets still available"},"admission_sold":{"type":"number","description":"Tickets already sold"},"section_id":{"type":"string","description":"ID of section (sct_xxx)"},"section_name":{"type":"string","description":"Name of section (e.g., \"VIP\", \"General\")"},"section_capacity":{"type":"number","description":"Total capacity for this section"},"section_available":{"type":"number","description":"Spots still available in section"},"ticket_id":{"type":"string","description":"Individual ticket ID (tkt_xxx)"},"ticket_status":{"enum":["VALID","REDEEMED","CANCELLED"],"type":"string"},"tickets_quantity":{"type":"number","description":"Number of tickets in transaction"},"customer_id":{"type":"string","description":"Customer ID (cus_xxx)"},"customer_email":{"type":"string","description":"Customer email"},"customer_first_name":{"type":"string"},"customer_last_name":{"type":"string"},"price_base":{"anyOf":[{"type":"number"},{"type":"null"}],"description":"Base price before fees"},"price_booking_fee":{"anyOf":[{"type":"number"},{"type":"null"}],"description":"Booking fee amount"},"price_discount_amount":{"anyOf":[{"type":"number"},{"type":"null"}],"description":"Discount amount applied"},"sale_starts_at":{"type":"string","pattern":"^\\d{4}-\\d{2}-\\d{2}T\\d{2}:\\d{2}:\\d{2}$","description":"When tickets go on sale (naive datetime, no timezone)"},"sale_ends_at":{"type":"string","pattern":"^\\d{4}-\\d{2}-\\d{2}T\\d{2}:\\d{2}:\\d{2}$","description":"When ticket sales end (naive datetime, no timezone)"},"entry_starts_at":{"type":"string","pattern":"^\\d{4}-\\d{2}-\\d{2}T\\d{2}:\\d{2}:\\d{2}$","description":"When entry to event begins (naive datetime, no timezone)"},"entry_ends_at":{"type":"string","pattern":"^\\d{4}-\\d{2}-\\d{2}T\\d{2}:\\d{2}:\\d{2}$","description":"When entry to event ends (naive datetime, no timezone)"},"funnel_step":{"type":"string","description":"Current funnel step (e.g., \"browse\", \"cart\", \"checkout\")"},"time_to_purchase":{"type":"number","description":"Seconds from first view to purchase"},"session_duration":{"type":"number","description":"Total session duration in seconds"},"referrer_type":{"enum":["DIRECT","SOCIAL","EMAIL","SEARCH","REFERRAL","AD"],"type":"string"},"campaign_id":{"type":"string","description":"Marketing campaign ID"},"affiliate_id":{"type":"string","description":"Affiliate partner ID"},"promo_code_used":{"type":"string","description":"Promotional code applied"},"platform":{"enum":["WEB","MOBILE_WEB","IOS","ANDROID"],"type":"string"},"app_version":{"type":"string"},"device_type":{"enum":["MOBILE","TABLET","DESKTOP"],"type":"string"},"anonymous_id":{"type":"string"},"browser":{"type":"string"},"browser_session_id":{"type":"string"},"country":{"type":"string"},"page_path":{"type":"string"},"page_title":{"type":"string"},"page_url":{"type":"string"},"referrer":{"type":"string"},"region":{"type":"string"},"user_agent":{"type":"string"},"utm_source":{"type":"string"},"utm_medium":{"type":"string"},"utm_campaign":{"type":"string"},"utm_term":{"type":"string"},"utm_content":{"type":"string"}}},"context":{"type":"object","properties":{"session_id":{"type":"string"},"user_id":{"type":"string"},"anonymous_id":{"type":"string"},"utm_source":{"type":"string"},"utm_medium":{"type":"string"},"utm_campaign":{"type":"string"},"utm_term":{"type":"string"},"utm_content":{"type":"string"},"page":{"type":"object","properties":{"url":{"type":"string"},"path":{"type":"string"},"title":{"type":"string"}},"required":["url","path","title"]},"referrer":{"type":"string"},"user_agent":{"type":"string"},"ip":{"type":"string"},"geo":{"type":"object","properties":{"country":{"type":"string","description":"Country code (e.g., \"AU\")"},"countryName":{"type":"string","description":"Country name (e.g., \"Australia\")"},"region":{"type":"string","description":"State/province code"},"regionName":{"type":"string","description":"State/province name (e.g., \"New South Wales\")"},"city":{"type":"string","description":"City name"},"latitude":{"type":"string","description":"Latitude"},"longitude":{"type":"string","description":"Longitude"}}},"fbc":{"type":"string","description":"Facebook click ID"},"fbp":{"type":"string","description":"Facebook browser ID"},"ttclid":{"type":"string","description":"TikTok click ID"}},"required":["session_id","page"]},"productId":{"type":"string"},"createdAt":{"type":"string"},"updatedAt":{"type":"string"}},"required":["id","eventId","teamId","promoterId","eventType","timestamp","date","hour","properties","context","createdAt","updatedAt"]}}}}}}},"/analytics/group":{"post":{"operationId":"analytics.group","summary":"Group event","tags":["Analytics"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"anyOf":[{"type":"object","properties":{"eventId":{"type":"string","minLength":1,"description":"Event being tracked (evt_123)"},"teamId":{"type":"string","minLength":1,"description":"Team ID (team_123)"},"promoterId":{"type":"string","minLength":1,"description":"Promoter ID (pmt_123)"},"eventType":{"enum":["Page Viewed","Screen Viewed","Products Searched","Product List Viewed","Product List Filtered","Promotion Viewed","Promotion Clicked","Product Clicked","Product Viewed","Product Added","Product Removed","Cart Viewed","Checkout Started","Checkout Step Viewed","Checkout Step Completed","Payment Info Entered","Order Completed","Order Updated","Order Refunded","Order Cancelled","Coupon Entered","Coupon Applied","Coupon Denied","Coupon Removed","Product Added to Wishlist","Product Removed from Wishlist","Wishlist Product Added to Cart","Product Shared","Cart Shared","Product Reviewed"],"type":"string"},"properties":{"type":"object","properties":{"query":{"anyOf":[{"type":"string"},{"type":"object","propertyNames":{"type":"string"},"additionalProperties":{}}]},"list_id":{"type":"string"},"category":{"type":"string"},"filters":{"type":"array","items":{"type":"object","properties":{"type":{"type":"string"},"value":{"type":"string"}},"required":["type","value"]}},"sorts":{"type":"array","items":{"type":"object","properties":{"type":{"type":"string"},"value":{"type":"string"}},"required":["type","value"]}},"promotion_id":{"type":"string"},"creative":{"type":"string"},"name":{"type":"string"},"position":{"anyOf":[{"type":"string"},{"type":"number"}]},"product_id":{"type":"string"},"sku":{"type":"string"},"brand":{"type":"string"},"variant":{"type":"string"},"price":{"type":"number"},"quantity":{"type":"number"},"coupon":{"type":"string"},"currency":{"type":"string"},"value":{"type":"number"},"url":{"type":"string"},"image_url":{"type":"string"},"cart_id":{"type":"string"},"step":{"type":"number"},"shipping_method":{"type":"string"},"payment_method":{"type":"string"},"ticketing_mode":{"enum":["internal","external"],"type":"string"},"external_ticket_url":{"type":"string"},"external_ticket_domain":{"type":"string"},"cta_surface":{"type":"string"},"order_id":{"type":"string"},"affiliation":{"type":"string"},"subtotal":{"type":"number"},"total":{"type":"number"},"revenue":{"type":"number"},"shipping":{"type":"number"},"tax":{"type":"number"},"discount":{"type":"number"},"coupon_id":{"type":"string"},"coupon_name":{"type":"string"},"reason":{"type":"string"},"wishlist_id":{"type":"string"},"wishlist_name":{"type":"string"},"share_via":{"type":"string"},"share_message":{"type":"string"},"recipient":{"type":"string"},"review_id":{"type":"string"},"review_body":{"type":"string"},"rating":{"type":"string"},"products":{"type":"array","items":{"type":"object","properties":{"product_id":{"type":"string","description":"admission_id in ticketing context"},"sku":{"type":"string","description":"admission_id or admission_name"},"category":{"type":"string","description":"event_name or \"Admission\""},"name":{"type":"string","description":"admission_name"},"brand":{"type":"string","description":"promoter_name"},"variant":{"type":"string","description":"section_name"},"price":{"type":"number","description":"admission price (base + booking fee)"},"quantity":{"type":"number","description":"number of tickets"},"coupon":{"type":"string","description":"coupon code applied"},"position":{"type":"number","description":"position in list"},"url":{"type":"string","description":"URL to event/admission page"},"image_url":{"type":"string","description":"event image"},"admission_id":{"type":"string","description":"Explicit admission ID"},"section_id":{"type":"string","description":"Section ID if applicable"},"event_id":{"type":"string","description":"Event ID for this admission"},"promoter_id":{"type":"string","description":"Promoter ID"},"price_base":{"anyOf":[{"type":"number"},{"type":"null"}],"description":"Base price before fees"},"price_booking_fee":{"anyOf":[{"type":"number"},{"type":"null"}],"description":"Booking fee"},"capacity":{"type":"number","description":"Total capacity for this admission"},"available":{"type":"number","description":"Remaining tickets available"},"sold":{"type":"number","description":"Tickets already sold"}}}},"event_id":{"type":"string","description":"ID of the ticketed event (evt_xxx)"},"event_name":{"type":"string","description":"Name of the ticketed event"},"event_slug":{"type":"string","description":"URL slug of event"},"event_starts_at":{"type":"string","pattern":"^\\d{4}-\\d{2}-\\d{2}T\\d{2}:\\d{2}:\\d{2}$","description":"When the event starts (naive datetime, no timezone)"},"event_ends_at":{"type":"string","pattern":"^\\d{4}-\\d{2}-\\d{2}T\\d{2}:\\d{2}:\\d{2}$","description":"When the event ends (naive datetime, no timezone)"},"event_status":{"enum":["UPCOMING","LIVE","ENDED","CANCELLED"],"type":"string"},"event_visibility":{"enum":["PUBLIC","PRIVATE"],"type":"string"},"event_location":{"type":"string","description":"Venue name"},"event_city":{"type":"string","description":"Venue city"},"event_country":{"type":"string","description":"Venue country"},"promoter_id":{"type":"string","description":"ID of the promoter (pmt_xxx)"},"promoter_name":{"type":"string","description":"Name of the promoter"},"promoter_slug":{"type":"string","description":"URL slug of promoter"},"admission_id":{"type":"string","description":"ID of admission type (adm_xxx)"},"admission_name":{"type":"string","description":"Name of admission (e.g., \"General Admission\")"},"admission_capacity":{"type":"number","description":"Total capacity for this admission"},"admission_available":{"type":"number","description":"Tickets still available"},"admission_sold":{"type":"number","description":"Tickets already sold"},"section_id":{"type":"string","description":"ID of section (sct_xxx)"},"section_name":{"type":"string","description":"Name of section (e.g., \"VIP\", \"General\")"},"section_capacity":{"type":"number","description":"Total capacity for this section"},"section_available":{"type":"number","description":"Spots still available in section"},"ticket_id":{"type":"string","description":"Individual ticket ID (tkt_xxx)"},"ticket_status":{"enum":["VALID","REDEEMED","CANCELLED"],"type":"string"},"tickets_quantity":{"type":"number","description":"Number of tickets in transaction"},"customer_id":{"type":"string","description":"Customer ID (cus_xxx)"},"customer_email":{"type":"string","description":"Customer email"},"customer_first_name":{"type":"string"},"customer_last_name":{"type":"string"},"price_base":{"anyOf":[{"type":"number"},{"type":"null"}],"description":"Base price before fees"},"price_booking_fee":{"anyOf":[{"type":"number"},{"type":"null"}],"description":"Booking fee amount"},"price_discount_amount":{"anyOf":[{"type":"number"},{"type":"null"}],"description":"Discount amount applied"},"sale_starts_at":{"type":"string","pattern":"^\\d{4}-\\d{2}-\\d{2}T\\d{2}:\\d{2}:\\d{2}$","description":"When tickets go on sale (naive datetime, no timezone)"},"sale_ends_at":{"type":"string","pattern":"^\\d{4}-\\d{2}-\\d{2}T\\d{2}:\\d{2}:\\d{2}$","description":"When ticket sales end (naive datetime, no timezone)"},"entry_starts_at":{"type":"string","pattern":"^\\d{4}-\\d{2}-\\d{2}T\\d{2}:\\d{2}:\\d{2}$","description":"When entry to event begins (naive datetime, no timezone)"},"entry_ends_at":{"type":"string","pattern":"^\\d{4}-\\d{2}-\\d{2}T\\d{2}:\\d{2}:\\d{2}$","description":"When entry to event ends (naive datetime, no timezone)"},"funnel_step":{"type":"string","description":"Current funnel step (e.g., \"browse\", \"cart\", \"checkout\")"},"time_to_purchase":{"type":"number","description":"Seconds from first view to purchase"},"session_duration":{"type":"number","description":"Total session duration in seconds"},"referrer_type":{"enum":["DIRECT","SOCIAL","EMAIL","SEARCH","REFERRAL","AD"],"type":"string"},"campaign_id":{"type":"string","description":"Marketing campaign ID"},"affiliate_id":{"type":"string","description":"Affiliate partner ID"},"promo_code_used":{"type":"string","description":"Promotional code applied"},"platform":{"enum":["WEB","MOBILE_WEB","IOS","ANDROID"],"type":"string"},"app_version":{"type":"string"},"device_type":{"enum":["MOBILE","TABLET","DESKTOP"],"type":"string"},"anonymous_id":{"type":"string"},"browser":{"type":"string"},"browser_session_id":{"type":"string"},"country":{"type":"string"},"page_path":{"type":"string"},"page_title":{"type":"string"},"page_url":{"type":"string"},"referrer":{"type":"string"},"region":{"type":"string"},"user_agent":{"type":"string"},"utm_source":{"type":"string"},"utm_medium":{"type":"string"},"utm_campaign":{"type":"string"},"utm_term":{"type":"string"},"utm_content":{"type":"string"}}},"context":{"type":"object","properties":{"session_id":{"type":"string"},"user_id":{"type":"string"},"anonymous_id":{"type":"string"},"utm_source":{"type":"string"},"utm_medium":{"type":"string"},"utm_campaign":{"type":"string"},"utm_term":{"type":"string"},"utm_content":{"type":"string"},"page":{"type":"object","properties":{"url":{"type":"string"},"path":{"type":"string"},"title":{"type":"string"}},"required":["url","path","title"]},"referrer":{"type":"string"},"user_agent":{"type":"string"},"ip":{"type":"string"},"geo":{"type":"object","properties":{"country":{"type":"string","description":"Country code (e.g., \"AU\")"},"countryName":{"type":"string","description":"Country name (e.g., \"Australia\")"},"region":{"type":"string","description":"State/province code"},"regionName":{"type":"string","description":"State/province name (e.g., \"New South Wales\")"},"city":{"type":"string","description":"City name"},"latitude":{"type":"string","description":"Latitude"},"longitude":{"type":"string","description":"Longitude"}}},"fbc":{"type":"string","description":"Facebook click ID"},"fbp":{"type":"string","description":"Facebook browser ID"},"ttclid":{"type":"string","description":"TikTok click ID"}},"required":["session_id","page"]},"productId":{"type":"string"},"messageId":{"type":"string","minLength":1,"description":"Analytics message id for retry-safe event delivery and linking."},"occurredAt":{"type":"string","format":"date-time","description":"Client-observed event time. Server ingest time remains authoritative for writes."}},"required":["eventId","teamId","promoterId","eventType","properties","context"],"description":"Schema for tracking an analytics event. Excludes system-generated fields"},{"type":"object","properties":{"eventName":{"type":"string","minLength":1},"eventType":{"enum":["Page Viewed","Screen Viewed","Products Searched","Product List Viewed","Product List Filtered","Promotion Viewed","Promotion Clicked","Product Clicked","Product Viewed","Product Added","Product Removed","Cart Viewed","Checkout Started","Checkout Step Viewed","Checkout Step Completed","Payment Info Entered","Order Completed","Order Updated","Order Refunded","Order Cancelled","Coupon Entered","Coupon Applied","Coupon Denied","Coupon Removed","Product Added to Wishlist","Product Removed from Wishlist","Wishlist Product Added to Cart","Product Shared","Cart Shared","Product Reviewed"],"type":"string"},"eventId":{"type":"string","minLength":1},"teamId":{"type":"string","minLength":1},"promoterId":{"type":"string","minLength":1},"properties":{"type":"object","propertyNames":{"type":"string"},"additionalProperties":{}},"context":{"type":"object","properties":{"session_id":{"type":"string"},"user_id":{"type":"string"},"anonymous_id":{"type":"string"},"utm_source":{"type":"string"},"utm_medium":{"type":"string"},"utm_campaign":{"type":"string"},"utm_term":{"type":"string"},"utm_content":{"type":"string"},"page":{"type":"object","properties":{"url":{"type":"string"},"path":{"type":"string"},"title":{"type":"string"}},"required":["url","path","title"]},"referrer":{"type":"string"},"user_agent":{"type":"string"},"ip":{"type":"string"},"geo":{"type":"object","properties":{"country":{"type":"string","description":"Country code (e.g., \"AU\")"},"countryName":{"type":"string","description":"Country name (e.g., \"Australia\")"},"region":{"type":"string","description":"State/province code"},"regionName":{"type":"string","description":"State/province name (e.g., \"New South Wales\")"},"city":{"type":"string","description":"City name"},"latitude":{"type":"string","description":"Latitude"},"longitude":{"type":"string","description":"Longitude"}}},"fbc":{"type":"string","description":"Facebook click ID"},"fbp":{"type":"string","description":"Facebook browser ID"},"ttclid":{"type":"string","description":"TikTok click ID"}}},"legacyContext":{"type":"object","properties":{"legacyOrgId":{"type":"string","minLength":1},"legacyEventId":{"type":"string","minLength":1},"legacyTeamId":{"type":"string","minLength":1},"legacyEventName":{"type":"string"},"legacyEventSlug":{"type":"string"},"legacyEventCreatedAt":{"anyOf":[{"type":"string"},{"type":"string","format":"date-time","x-native-type":"date"},{"type":"null"}]},"legacyTeamCreatedAt":{"anyOf":[{"type":"string"},{"type":"string","format":"date-time","x-native-type":"date"},{"type":"null"}]}},"required":["legacyOrgId","legacyEventId","legacyTeamId"]}},"additionalProperties":{},"description":"Compatibility schema for legacy Sash analytics payloads that require server-side ID normalization"}],"description":"Analytics ingress schema accepting both canonical payloads and legacy Sash-compatible payloads"}}}},"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"object","properties":{"id":{"type":"string"},"eventId":{"type":"string","minLength":1,"description":"Event being tracked (evt_123)"},"teamId":{"type":"string","minLength":1,"description":"Team ID (team_123)"},"promoterId":{"type":"string","minLength":1,"description":"Promoter ID (pmt_123)"},"eventType":{"enum":["Page Viewed","Screen Viewed","Products Searched","Product List Viewed","Product List Filtered","Promotion Viewed","Promotion Clicked","Product Clicked","Product Viewed","Product Added","Product Removed","Cart Viewed","Checkout Started","Checkout Step Viewed","Checkout Step Completed","Payment Info Entered","Order Completed","Order Updated","Order Refunded","Order Cancelled","Coupon Entered","Coupon Applied","Coupon Denied","Coupon Removed","Product Added to Wishlist","Product Removed from Wishlist","Wishlist Product Added to Cart","Product Shared","Cart Shared","Product Reviewed"],"type":"string"},"timestamp":{"type":"string"},"date":{"type":"string","description":"YYYY-MM-DD"},"hour":{"type":"integer","minimum":0,"maximum":23},"properties":{"type":"object","properties":{"query":{"anyOf":[{"type":"string"},{"type":"object","propertyNames":{"type":"string"},"additionalProperties":{}}]},"list_id":{"type":"string"},"category":{"type":"string"},"filters":{"type":"array","items":{"type":"object","properties":{"type":{"type":"string"},"value":{"type":"string"}},"required":["type","value"]}},"sorts":{"type":"array","items":{"type":"object","properties":{"type":{"type":"string"},"value":{"type":"string"}},"required":["type","value"]}},"promotion_id":{"type":"string"},"creative":{"type":"string"},"name":{"type":"string"},"position":{"anyOf":[{"type":"string"},{"type":"number"}]},"product_id":{"type":"string"},"sku":{"type":"string"},"brand":{"type":"string"},"variant":{"type":"string"},"price":{"type":"number"},"quantity":{"type":"number"},"coupon":{"type":"string"},"currency":{"type":"string"},"value":{"type":"number"},"url":{"type":"string"},"image_url":{"type":"string"},"cart_id":{"type":"string"},"step":{"type":"number"},"shipping_method":{"type":"string"},"payment_method":{"type":"string"},"ticketing_mode":{"enum":["internal","external"],"type":"string"},"external_ticket_url":{"type":"string"},"external_ticket_domain":{"type":"string"},"cta_surface":{"type":"string"},"order_id":{"type":"string"},"affiliation":{"type":"string"},"subtotal":{"type":"number"},"total":{"type":"number"},"revenue":{"type":"number"},"shipping":{"type":"number"},"tax":{"type":"number"},"discount":{"type":"number"},"coupon_id":{"type":"string"},"coupon_name":{"type":"string"},"reason":{"type":"string"},"wishlist_id":{"type":"string"},"wishlist_name":{"type":"string"},"share_via":{"type":"string"},"share_message":{"type":"string"},"recipient":{"type":"string"},"review_id":{"type":"string"},"review_body":{"type":"string"},"rating":{"type":"string"},"products":{"type":"array","items":{"type":"object","properties":{"product_id":{"type":"string","description":"admission_id in ticketing context"},"sku":{"type":"string","description":"admission_id or admission_name"},"category":{"type":"string","description":"event_name or \"Admission\""},"name":{"type":"string","description":"admission_name"},"brand":{"type":"string","description":"promoter_name"},"variant":{"type":"string","description":"section_name"},"price":{"type":"number","description":"admission price (base + booking fee)"},"quantity":{"type":"number","description":"number of tickets"},"coupon":{"type":"string","description":"coupon code applied"},"position":{"type":"number","description":"position in list"},"url":{"type":"string","description":"URL to event/admission page"},"image_url":{"type":"string","description":"event image"},"admission_id":{"type":"string","description":"Explicit admission ID"},"section_id":{"type":"string","description":"Section ID if applicable"},"event_id":{"type":"string","description":"Event ID for this admission"},"promoter_id":{"type":"string","description":"Promoter ID"},"price_base":{"anyOf":[{"type":"number"},{"type":"null"}],"description":"Base price before fees"},"price_booking_fee":{"anyOf":[{"type":"number"},{"type":"null"}],"description":"Booking fee"},"capacity":{"type":"number","description":"Total capacity for this admission"},"available":{"type":"number","description":"Remaining tickets available"},"sold":{"type":"number","description":"Tickets already sold"}}}},"event_id":{"type":"string","description":"ID of the ticketed event (evt_xxx)"},"event_name":{"type":"string","description":"Name of the ticketed event"},"event_slug":{"type":"string","description":"URL slug of event"},"event_starts_at":{"type":"string","pattern":"^\\d{4}-\\d{2}-\\d{2}T\\d{2}:\\d{2}:\\d{2}$","description":"When the event starts (naive datetime, no timezone)"},"event_ends_at":{"type":"string","pattern":"^\\d{4}-\\d{2}-\\d{2}T\\d{2}:\\d{2}:\\d{2}$","description":"When the event ends (naive datetime, no timezone)"},"event_status":{"enum":["UPCOMING","LIVE","ENDED","CANCELLED"],"type":"string"},"event_visibility":{"enum":["PUBLIC","PRIVATE"],"type":"string"},"event_location":{"type":"string","description":"Venue name"},"event_city":{"type":"string","description":"Venue city"},"event_country":{"type":"string","description":"Venue country"},"promoter_id":{"type":"string","description":"ID of the promoter (pmt_xxx)"},"promoter_name":{"type":"string","description":"Name of the promoter"},"promoter_slug":{"type":"string","description":"URL slug of promoter"},"admission_id":{"type":"string","description":"ID of admission type (adm_xxx)"},"admission_name":{"type":"string","description":"Name of admission (e.g., \"General Admission\")"},"admission_capacity":{"type":"number","description":"Total capacity for this admission"},"admission_available":{"type":"number","description":"Tickets still available"},"admission_sold":{"type":"number","description":"Tickets already sold"},"section_id":{"type":"string","description":"ID of section (sct_xxx)"},"section_name":{"type":"string","description":"Name of section (e.g., \"VIP\", \"General\")"},"section_capacity":{"type":"number","description":"Total capacity for this section"},"section_available":{"type":"number","description":"Spots still available in section"},"ticket_id":{"type":"string","description":"Individual ticket ID (tkt_xxx)"},"ticket_status":{"enum":["VALID","REDEEMED","CANCELLED"],"type":"string"},"tickets_quantity":{"type":"number","description":"Number of tickets in transaction"},"customer_id":{"type":"string","description":"Customer ID (cus_xxx)"},"customer_email":{"type":"string","description":"Customer email"},"customer_first_name":{"type":"string"},"customer_last_name":{"type":"string"},"price_base":{"anyOf":[{"type":"number"},{"type":"null"}],"description":"Base price before fees"},"price_booking_fee":{"anyOf":[{"type":"number"},{"type":"null"}],"description":"Booking fee amount"},"price_discount_amount":{"anyOf":[{"type":"number"},{"type":"null"}],"description":"Discount amount applied"},"sale_starts_at":{"type":"string","pattern":"^\\d{4}-\\d{2}-\\d{2}T\\d{2}:\\d{2}:\\d{2}$","description":"When tickets go on sale (naive datetime, no timezone)"},"sale_ends_at":{"type":"string","pattern":"^\\d{4}-\\d{2}-\\d{2}T\\d{2}:\\d{2}:\\d{2}$","description":"When ticket sales end (naive datetime, no timezone)"},"entry_starts_at":{"type":"string","pattern":"^\\d{4}-\\d{2}-\\d{2}T\\d{2}:\\d{2}:\\d{2}$","description":"When entry to event begins (naive datetime, no timezone)"},"entry_ends_at":{"type":"string","pattern":"^\\d{4}-\\d{2}-\\d{2}T\\d{2}:\\d{2}:\\d{2}$","description":"When entry to event ends (naive datetime, no timezone)"},"funnel_step":{"type":"string","description":"Current funnel step (e.g., \"browse\", \"cart\", \"checkout\")"},"time_to_purchase":{"type":"number","description":"Seconds from first view to purchase"},"session_duration":{"type":"number","description":"Total session duration in seconds"},"referrer_type":{"enum":["DIRECT","SOCIAL","EMAIL","SEARCH","REFERRAL","AD"],"type":"string"},"campaign_id":{"type":"string","description":"Marketing campaign ID"},"affiliate_id":{"type":"string","description":"Affiliate partner ID"},"promo_code_used":{"type":"string","description":"Promotional code applied"},"platform":{"enum":["WEB","MOBILE_WEB","IOS","ANDROID"],"type":"string"},"app_version":{"type":"string"},"device_type":{"enum":["MOBILE","TABLET","DESKTOP"],"type":"string"},"anonymous_id":{"type":"string"},"browser":{"type":"string"},"browser_session_id":{"type":"string"},"country":{"type":"string"},"page_path":{"type":"string"},"page_title":{"type":"string"},"page_url":{"type":"string"},"referrer":{"type":"string"},"region":{"type":"string"},"user_agent":{"type":"string"},"utm_source":{"type":"string"},"utm_medium":{"type":"string"},"utm_campaign":{"type":"string"},"utm_term":{"type":"string"},"utm_content":{"type":"string"}}},"context":{"type":"object","properties":{"session_id":{"type":"string"},"user_id":{"type":"string"},"anonymous_id":{"type":"string"},"utm_source":{"type":"string"},"utm_medium":{"type":"string"},"utm_campaign":{"type":"string"},"utm_term":{"type":"string"},"utm_content":{"type":"string"},"page":{"type":"object","properties":{"url":{"type":"string"},"path":{"type":"string"},"title":{"type":"string"}},"required":["url","path","title"]},"referrer":{"type":"string"},"user_agent":{"type":"string"},"ip":{"type":"string"},"geo":{"type":"object","properties":{"country":{"type":"string","description":"Country code (e.g., \"AU\")"},"countryName":{"type":"string","description":"Country name (e.g., \"Australia\")"},"region":{"type":"string","description":"State/province code"},"regionName":{"type":"string","description":"State/province name (e.g., \"New South Wales\")"},"city":{"type":"string","description":"City name"},"latitude":{"type":"string","description":"Latitude"},"longitude":{"type":"string","description":"Longitude"}}},"fbc":{"type":"string","description":"Facebook click ID"},"fbp":{"type":"string","description":"Facebook browser ID"},"ttclid":{"type":"string","description":"TikTok click ID"}},"required":["session_id","page"]},"productId":{"type":"string"},"createdAt":{"type":"string"},"updatedAt":{"type":"string"}},"required":["id","eventId","teamId","promoterId","eventType","timestamp","date","hour","properties","context","createdAt","updatedAt"]}}}}}}},"/analytics/screen":{"post":{"operationId":"analytics.screen","summary":"Screen event","tags":["Analytics"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"anyOf":[{"type":"object","properties":{"eventId":{"type":"string","minLength":1,"description":"Event being tracked (evt_123)"},"teamId":{"type":"string","minLength":1,"description":"Team ID (team_123)"},"promoterId":{"type":"string","minLength":1,"description":"Promoter ID (pmt_123)"},"eventType":{"enum":["Page Viewed","Screen Viewed","Products Searched","Product List Viewed","Product List Filtered","Promotion Viewed","Promotion Clicked","Product Clicked","Product Viewed","Product Added","Product Removed","Cart Viewed","Checkout Started","Checkout Step Viewed","Checkout Step Completed","Payment Info Entered","Order Completed","Order Updated","Order Refunded","Order Cancelled","Coupon Entered","Coupon Applied","Coupon Denied","Coupon Removed","Product Added to Wishlist","Product Removed from Wishlist","Wishlist Product Added to Cart","Product Shared","Cart Shared","Product Reviewed"],"type":"string"},"properties":{"type":"object","properties":{"query":{"anyOf":[{"type":"string"},{"type":"object","propertyNames":{"type":"string"},"additionalProperties":{}}]},"list_id":{"type":"string"},"category":{"type":"string"},"filters":{"type":"array","items":{"type":"object","properties":{"type":{"type":"string"},"value":{"type":"string"}},"required":["type","value"]}},"sorts":{"type":"array","items":{"type":"object","properties":{"type":{"type":"string"},"value":{"type":"string"}},"required":["type","value"]}},"promotion_id":{"type":"string"},"creative":{"type":"string"},"name":{"type":"string"},"position":{"anyOf":[{"type":"string"},{"type":"number"}]},"product_id":{"type":"string"},"sku":{"type":"string"},"brand":{"type":"string"},"variant":{"type":"string"},"price":{"type":"number"},"quantity":{"type":"number"},"coupon":{"type":"string"},"currency":{"type":"string"},"value":{"type":"number"},"url":{"type":"string"},"image_url":{"type":"string"},"cart_id":{"type":"string"},"step":{"type":"number"},"shipping_method":{"type":"string"},"payment_method":{"type":"string"},"ticketing_mode":{"enum":["internal","external"],"type":"string"},"external_ticket_url":{"type":"string"},"external_ticket_domain":{"type":"string"},"cta_surface":{"type":"string"},"order_id":{"type":"string"},"affiliation":{"type":"string"},"subtotal":{"type":"number"},"total":{"type":"number"},"revenue":{"type":"number"},"shipping":{"type":"number"},"tax":{"type":"number"},"discount":{"type":"number"},"coupon_id":{"type":"string"},"coupon_name":{"type":"string"},"reason":{"type":"string"},"wishlist_id":{"type":"string"},"wishlist_name":{"type":"string"},"share_via":{"type":"string"},"share_message":{"type":"string"},"recipient":{"type":"string"},"review_id":{"type":"string"},"review_body":{"type":"string"},"rating":{"type":"string"},"products":{"type":"array","items":{"type":"object","properties":{"product_id":{"type":"string","description":"admission_id in ticketing context"},"sku":{"type":"string","description":"admission_id or admission_name"},"category":{"type":"string","description":"event_name or \"Admission\""},"name":{"type":"string","description":"admission_name"},"brand":{"type":"string","description":"promoter_name"},"variant":{"type":"string","description":"section_name"},"price":{"type":"number","description":"admission price (base + booking fee)"},"quantity":{"type":"number","description":"number of tickets"},"coupon":{"type":"string","description":"coupon code applied"},"position":{"type":"number","description":"position in list"},"url":{"type":"string","description":"URL to event/admission page"},"image_url":{"type":"string","description":"event image"},"admission_id":{"type":"string","description":"Explicit admission ID"},"section_id":{"type":"string","description":"Section ID if applicable"},"event_id":{"type":"string","description":"Event ID for this admission"},"promoter_id":{"type":"string","description":"Promoter ID"},"price_base":{"anyOf":[{"type":"number"},{"type":"null"}],"description":"Base price before fees"},"price_booking_fee":{"anyOf":[{"type":"number"},{"type":"null"}],"description":"Booking fee"},"capacity":{"type":"number","description":"Total capacity for this admission"},"available":{"type":"number","description":"Remaining tickets available"},"sold":{"type":"number","description":"Tickets already sold"}}}},"event_id":{"type":"string","description":"ID of the ticketed event (evt_xxx)"},"event_name":{"type":"string","description":"Name of the ticketed event"},"event_slug":{"type":"string","description":"URL slug of event"},"event_starts_at":{"type":"string","pattern":"^\\d{4}-\\d{2}-\\d{2}T\\d{2}:\\d{2}:\\d{2}$","description":"When the event starts (naive datetime, no timezone)"},"event_ends_at":{"type":"string","pattern":"^\\d{4}-\\d{2}-\\d{2}T\\d{2}:\\d{2}:\\d{2}$","description":"When the event ends (naive datetime, no timezone)"},"event_status":{"enum":["UPCOMING","LIVE","ENDED","CANCELLED"],"type":"string"},"event_visibility":{"enum":["PUBLIC","PRIVATE"],"type":"string"},"event_location":{"type":"string","description":"Venue name"},"event_city":{"type":"string","description":"Venue city"},"event_country":{"type":"string","description":"Venue country"},"promoter_id":{"type":"string","description":"ID of the promoter (pmt_xxx)"},"promoter_name":{"type":"string","description":"Name of the promoter"},"promoter_slug":{"type":"string","description":"URL slug of promoter"},"admission_id":{"type":"string","description":"ID of admission type (adm_xxx)"},"admission_name":{"type":"string","description":"Name of admission (e.g., \"General Admission\")"},"admission_capacity":{"type":"number","description":"Total capacity for this admission"},"admission_available":{"type":"number","description":"Tickets still available"},"admission_sold":{"type":"number","description":"Tickets already sold"},"section_id":{"type":"string","description":"ID of section (sct_xxx)"},"section_name":{"type":"string","description":"Name of section (e.g., \"VIP\", \"General\")"},"section_capacity":{"type":"number","description":"Total capacity for this section"},"section_available":{"type":"number","description":"Spots still available in section"},"ticket_id":{"type":"string","description":"Individual ticket ID (tkt_xxx)"},"ticket_status":{"enum":["VALID","REDEEMED","CANCELLED"],"type":"string"},"tickets_quantity":{"type":"number","description":"Number of tickets in transaction"},"customer_id":{"type":"string","description":"Customer ID (cus_xxx)"},"customer_email":{"type":"string","description":"Customer email"},"customer_first_name":{"type":"string"},"customer_last_name":{"type":"string"},"price_base":{"anyOf":[{"type":"number"},{"type":"null"}],"description":"Base price before fees"},"price_booking_fee":{"anyOf":[{"type":"number"},{"type":"null"}],"description":"Booking fee amount"},"price_discount_amount":{"anyOf":[{"type":"number"},{"type":"null"}],"description":"Discount amount applied"},"sale_starts_at":{"type":"string","pattern":"^\\d{4}-\\d{2}-\\d{2}T\\d{2}:\\d{2}:\\d{2}$","description":"When tickets go on sale (naive datetime, no timezone)"},"sale_ends_at":{"type":"string","pattern":"^\\d{4}-\\d{2}-\\d{2}T\\d{2}:\\d{2}:\\d{2}$","description":"When ticket sales end (naive datetime, no timezone)"},"entry_starts_at":{"type":"string","pattern":"^\\d{4}-\\d{2}-\\d{2}T\\d{2}:\\d{2}:\\d{2}$","description":"When entry to event begins (naive datetime, no timezone)"},"entry_ends_at":{"type":"string","pattern":"^\\d{4}-\\d{2}-\\d{2}T\\d{2}:\\d{2}:\\d{2}$","description":"When entry to event ends (naive datetime, no timezone)"},"funnel_step":{"type":"string","description":"Current funnel step (e.g., \"browse\", \"cart\", \"checkout\")"},"time_to_purchase":{"type":"number","description":"Seconds from first view to purchase"},"session_duration":{"type":"number","description":"Total session duration in seconds"},"referrer_type":{"enum":["DIRECT","SOCIAL","EMAIL","SEARCH","REFERRAL","AD"],"type":"string"},"campaign_id":{"type":"string","description":"Marketing campaign ID"},"affiliate_id":{"type":"string","description":"Affiliate partner ID"},"promo_code_used":{"type":"string","description":"Promotional code applied"},"platform":{"enum":["WEB","MOBILE_WEB","IOS","ANDROID"],"type":"string"},"app_version":{"type":"string"},"device_type":{"enum":["MOBILE","TABLET","DESKTOP"],"type":"string"},"anonymous_id":{"type":"string"},"browser":{"type":"string"},"browser_session_id":{"type":"string"},"country":{"type":"string"},"page_path":{"type":"string"},"page_title":{"type":"string"},"page_url":{"type":"string"},"referrer":{"type":"string"},"region":{"type":"string"},"user_agent":{"type":"string"},"utm_source":{"type":"string"},"utm_medium":{"type":"string"},"utm_campaign":{"type":"string"},"utm_term":{"type":"string"},"utm_content":{"type":"string"}}},"context":{"type":"object","properties":{"session_id":{"type":"string"},"user_id":{"type":"string"},"anonymous_id":{"type":"string"},"utm_source":{"type":"string"},"utm_medium":{"type":"string"},"utm_campaign":{"type":"string"},"utm_term":{"type":"string"},"utm_content":{"type":"string"},"page":{"type":"object","properties":{"url":{"type":"string"},"path":{"type":"string"},"title":{"type":"string"}},"required":["url","path","title"]},"referrer":{"type":"string"},"user_agent":{"type":"string"},"ip":{"type":"string"},"geo":{"type":"object","properties":{"country":{"type":"string","description":"Country code (e.g., \"AU\")"},"countryName":{"type":"string","description":"Country name (e.g., \"Australia\")"},"region":{"type":"string","description":"State/province code"},"regionName":{"type":"string","description":"State/province name (e.g., \"New South Wales\")"},"city":{"type":"string","description":"City name"},"latitude":{"type":"string","description":"Latitude"},"longitude":{"type":"string","description":"Longitude"}}},"fbc":{"type":"string","description":"Facebook click ID"},"fbp":{"type":"string","description":"Facebook browser ID"},"ttclid":{"type":"string","description":"TikTok click ID"}},"required":["session_id","page"]},"productId":{"type":"string"},"messageId":{"type":"string","minLength":1,"description":"Analytics message id for retry-safe event delivery and linking."},"occurredAt":{"type":"string","format":"date-time","description":"Client-observed event time. Server ingest time remains authoritative for writes."}},"required":["eventId","teamId","promoterId","eventType","properties","context"],"description":"Schema for tracking an analytics event. Excludes system-generated fields"},{"type":"object","properties":{"eventName":{"type":"string","minLength":1},"eventType":{"enum":["Page Viewed","Screen Viewed","Products Searched","Product List Viewed","Product List Filtered","Promotion Viewed","Promotion Clicked","Product Clicked","Product Viewed","Product Added","Product Removed","Cart Viewed","Checkout Started","Checkout Step Viewed","Checkout Step Completed","Payment Info Entered","Order Completed","Order Updated","Order Refunded","Order Cancelled","Coupon Entered","Coupon Applied","Coupon Denied","Coupon Removed","Product Added to Wishlist","Product Removed from Wishlist","Wishlist Product Added to Cart","Product Shared","Cart Shared","Product Reviewed"],"type":"string"},"eventId":{"type":"string","minLength":1},"teamId":{"type":"string","minLength":1},"promoterId":{"type":"string","minLength":1},"properties":{"type":"object","propertyNames":{"type":"string"},"additionalProperties":{}},"context":{"type":"object","properties":{"session_id":{"type":"string"},"user_id":{"type":"string"},"anonymous_id":{"type":"string"},"utm_source":{"type":"string"},"utm_medium":{"type":"string"},"utm_campaign":{"type":"string"},"utm_term":{"type":"string"},"utm_content":{"type":"string"},"page":{"type":"object","properties":{"url":{"type":"string"},"path":{"type":"string"},"title":{"type":"string"}},"required":["url","path","title"]},"referrer":{"type":"string"},"user_agent":{"type":"string"},"ip":{"type":"string"},"geo":{"type":"object","properties":{"country":{"type":"string","description":"Country code (e.g., \"AU\")"},"countryName":{"type":"string","description":"Country name (e.g., \"Australia\")"},"region":{"type":"string","description":"State/province code"},"regionName":{"type":"string","description":"State/province name (e.g., \"New South Wales\")"},"city":{"type":"string","description":"City name"},"latitude":{"type":"string","description":"Latitude"},"longitude":{"type":"string","description":"Longitude"}}},"fbc":{"type":"string","description":"Facebook click ID"},"fbp":{"type":"string","description":"Facebook browser ID"},"ttclid":{"type":"string","description":"TikTok click ID"}}},"legacyContext":{"type":"object","properties":{"legacyOrgId":{"type":"string","minLength":1},"legacyEventId":{"type":"string","minLength":1},"legacyTeamId":{"type":"string","minLength":1},"legacyEventName":{"type":"string"},"legacyEventSlug":{"type":"string"},"legacyEventCreatedAt":{"anyOf":[{"type":"string"},{"type":"string","format":"date-time","x-native-type":"date"},{"type":"null"}]},"legacyTeamCreatedAt":{"anyOf":[{"type":"string"},{"type":"string","format":"date-time","x-native-type":"date"},{"type":"null"}]}},"required":["legacyOrgId","legacyEventId","legacyTeamId"]}},"additionalProperties":{},"description":"Compatibility schema for legacy Sash analytics payloads that require server-side ID normalization"}],"description":"Analytics ingress schema accepting both canonical payloads and legacy Sash-compatible payloads"}}}},"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"object","properties":{"id":{"type":"string"},"eventId":{"type":"string","minLength":1,"description":"Event being tracked (evt_123)"},"teamId":{"type":"string","minLength":1,"description":"Team ID (team_123)"},"promoterId":{"type":"string","minLength":1,"description":"Promoter ID (pmt_123)"},"eventType":{"enum":["Page Viewed","Screen Viewed","Products Searched","Product List Viewed","Product List Filtered","Promotion Viewed","Promotion Clicked","Product Clicked","Product Viewed","Product Added","Product Removed","Cart Viewed","Checkout Started","Checkout Step Viewed","Checkout Step Completed","Payment Info Entered","Order Completed","Order Updated","Order Refunded","Order Cancelled","Coupon Entered","Coupon Applied","Coupon Denied","Coupon Removed","Product Added to Wishlist","Product Removed from Wishlist","Wishlist Product Added to Cart","Product Shared","Cart Shared","Product Reviewed"],"type":"string"},"timestamp":{"type":"string"},"date":{"type":"string","description":"YYYY-MM-DD"},"hour":{"type":"integer","minimum":0,"maximum":23},"properties":{"type":"object","properties":{"query":{"anyOf":[{"type":"string"},{"type":"object","propertyNames":{"type":"string"},"additionalProperties":{}}]},"list_id":{"type":"string"},"category":{"type":"string"},"filters":{"type":"array","items":{"type":"object","properties":{"type":{"type":"string"},"value":{"type":"string"}},"required":["type","value"]}},"sorts":{"type":"array","items":{"type":"object","properties":{"type":{"type":"string"},"value":{"type":"string"}},"required":["type","value"]}},"promotion_id":{"type":"string"},"creative":{"type":"string"},"name":{"type":"string"},"position":{"anyOf":[{"type":"string"},{"type":"number"}]},"product_id":{"type":"string"},"sku":{"type":"string"},"brand":{"type":"string"},"variant":{"type":"string"},"price":{"type":"number"},"quantity":{"type":"number"},"coupon":{"type":"string"},"currency":{"type":"string"},"value":{"type":"number"},"url":{"type":"string"},"image_url":{"type":"string"},"cart_id":{"type":"string"},"step":{"type":"number"},"shipping_method":{"type":"string"},"payment_method":{"type":"string"},"ticketing_mode":{"enum":["internal","external"],"type":"string"},"external_ticket_url":{"type":"string"},"external_ticket_domain":{"type":"string"},"cta_surface":{"type":"string"},"order_id":{"type":"string"},"affiliation":{"type":"string"},"subtotal":{"type":"number"},"total":{"type":"number"},"revenue":{"type":"number"},"shipping":{"type":"number"},"tax":{"type":"number"},"discount":{"type":"number"},"coupon_id":{"type":"string"},"coupon_name":{"type":"string"},"reason":{"type":"string"},"wishlist_id":{"type":"string"},"wishlist_name":{"type":"string"},"share_via":{"type":"string"},"share_message":{"type":"string"},"recipient":{"type":"string"},"review_id":{"type":"string"},"review_body":{"type":"string"},"rating":{"type":"string"},"products":{"type":"array","items":{"type":"object","properties":{"product_id":{"type":"string","description":"admission_id in ticketing context"},"sku":{"type":"string","description":"admission_id or admission_name"},"category":{"type":"string","description":"event_name or \"Admission\""},"name":{"type":"string","description":"admission_name"},"brand":{"type":"string","description":"promoter_name"},"variant":{"type":"string","description":"section_name"},"price":{"type":"number","description":"admission price (base + booking fee)"},"quantity":{"type":"number","description":"number of tickets"},"coupon":{"type":"string","description":"coupon code applied"},"position":{"type":"number","description":"position in list"},"url":{"type":"string","description":"URL to event/admission page"},"image_url":{"type":"string","description":"event image"},"admission_id":{"type":"string","description":"Explicit admission ID"},"section_id":{"type":"string","description":"Section ID if applicable"},"event_id":{"type":"string","description":"Event ID for this admission"},"promoter_id":{"type":"string","description":"Promoter ID"},"price_base":{"anyOf":[{"type":"number"},{"type":"null"}],"description":"Base price before fees"},"price_booking_fee":{"anyOf":[{"type":"number"},{"type":"null"}],"description":"Booking fee"},"capacity":{"type":"number","description":"Total capacity for this admission"},"available":{"type":"number","description":"Remaining tickets available"},"sold":{"type":"number","description":"Tickets already sold"}}}},"event_id":{"type":"string","description":"ID of the ticketed event (evt_xxx)"},"event_name":{"type":"string","description":"Name of the ticketed event"},"event_slug":{"type":"string","description":"URL slug of event"},"event_starts_at":{"type":"string","pattern":"^\\d{4}-\\d{2}-\\d{2}T\\d{2}:\\d{2}:\\d{2}$","description":"When the event starts (naive datetime, no timezone)"},"event_ends_at":{"type":"string","pattern":"^\\d{4}-\\d{2}-\\d{2}T\\d{2}:\\d{2}:\\d{2}$","description":"When the event ends (naive datetime, no timezone)"},"event_status":{"enum":["UPCOMING","LIVE","ENDED","CANCELLED"],"type":"string"},"event_visibility":{"enum":["PUBLIC","PRIVATE"],"type":"string"},"event_location":{"type":"string","description":"Venue name"},"event_city":{"type":"string","description":"Venue city"},"event_country":{"type":"string","description":"Venue country"},"promoter_id":{"type":"string","description":"ID of the promoter (pmt_xxx)"},"promoter_name":{"type":"string","description":"Name of the promoter"},"promoter_slug":{"type":"string","description":"URL slug of promoter"},"admission_id":{"type":"string","description":"ID of admission type (adm_xxx)"},"admission_name":{"type":"string","description":"Name of admission (e.g., \"General Admission\")"},"admission_capacity":{"type":"number","description":"Total capacity for this admission"},"admission_available":{"type":"number","description":"Tickets still available"},"admission_sold":{"type":"number","description":"Tickets already sold"},"section_id":{"type":"string","description":"ID of section (sct_xxx)"},"section_name":{"type":"string","description":"Name of section (e.g., \"VIP\", \"General\")"},"section_capacity":{"type":"number","description":"Total capacity for this section"},"section_available":{"type":"number","description":"Spots still available in section"},"ticket_id":{"type":"string","description":"Individual ticket ID (tkt_xxx)"},"ticket_status":{"enum":["VALID","REDEEMED","CANCELLED"],"type":"string"},"tickets_quantity":{"type":"number","description":"Number of tickets in transaction"},"customer_id":{"type":"string","description":"Customer ID (cus_xxx)"},"customer_email":{"type":"string","description":"Customer email"},"customer_first_name":{"type":"string"},"customer_last_name":{"type":"string"},"price_base":{"anyOf":[{"type":"number"},{"type":"null"}],"description":"Base price before fees"},"price_booking_fee":{"anyOf":[{"type":"number"},{"type":"null"}],"description":"Booking fee amount"},"price_discount_amount":{"anyOf":[{"type":"number"},{"type":"null"}],"description":"Discount amount applied"},"sale_starts_at":{"type":"string","pattern":"^\\d{4}-\\d{2}-\\d{2}T\\d{2}:\\d{2}:\\d{2}$","description":"When tickets go on sale (naive datetime, no timezone)"},"sale_ends_at":{"type":"string","pattern":"^\\d{4}-\\d{2}-\\d{2}T\\d{2}:\\d{2}:\\d{2}$","description":"When ticket sales end (naive datetime, no timezone)"},"entry_starts_at":{"type":"string","pattern":"^\\d{4}-\\d{2}-\\d{2}T\\d{2}:\\d{2}:\\d{2}$","description":"When entry to event begins (naive datetime, no timezone)"},"entry_ends_at":{"type":"string","pattern":"^\\d{4}-\\d{2}-\\d{2}T\\d{2}:\\d{2}:\\d{2}$","description":"When entry to event ends (naive datetime, no timezone)"},"funnel_step":{"type":"string","description":"Current funnel step (e.g., \"browse\", \"cart\", \"checkout\")"},"time_to_purchase":{"type":"number","description":"Seconds from first view to purchase"},"session_duration":{"type":"number","description":"Total session duration in seconds"},"referrer_type":{"enum":["DIRECT","SOCIAL","EMAIL","SEARCH","REFERRAL","AD"],"type":"string"},"campaign_id":{"type":"string","description":"Marketing campaign ID"},"affiliate_id":{"type":"string","description":"Affiliate partner ID"},"promo_code_used":{"type":"string","description":"Promotional code applied"},"platform":{"enum":["WEB","MOBILE_WEB","IOS","ANDROID"],"type":"string"},"app_version":{"type":"string"},"device_type":{"enum":["MOBILE","TABLET","DESKTOP"],"type":"string"},"anonymous_id":{"type":"string"},"browser":{"type":"string"},"browser_session_id":{"type":"string"},"country":{"type":"string"},"page_path":{"type":"string"},"page_title":{"type":"string"},"page_url":{"type":"string"},"referrer":{"type":"string"},"region":{"type":"string"},"user_agent":{"type":"string"},"utm_source":{"type":"string"},"utm_medium":{"type":"string"},"utm_campaign":{"type":"string"},"utm_term":{"type":"string"},"utm_content":{"type":"string"}}},"context":{"type":"object","properties":{"session_id":{"type":"string"},"user_id":{"type":"string"},"anonymous_id":{"type":"string"},"utm_source":{"type":"string"},"utm_medium":{"type":"string"},"utm_campaign":{"type":"string"},"utm_term":{"type":"string"},"utm_content":{"type":"string"},"page":{"type":"object","properties":{"url":{"type":"string"},"path":{"type":"string"},"title":{"type":"string"}},"required":["url","path","title"]},"referrer":{"type":"string"},"user_agent":{"type":"string"},"ip":{"type":"string"},"geo":{"type":"object","properties":{"country":{"type":"string","description":"Country code (e.g., \"AU\")"},"countryName":{"type":"string","description":"Country name (e.g., \"Australia\")"},"region":{"type":"string","description":"State/province code"},"regionName":{"type":"string","description":"State/province name (e.g., \"New South Wales\")"},"city":{"type":"string","description":"City name"},"latitude":{"type":"string","description":"Latitude"},"longitude":{"type":"string","description":"Longitude"}}},"fbc":{"type":"string","description":"Facebook click ID"},"fbp":{"type":"string","description":"Facebook browser ID"},"ttclid":{"type":"string","description":"TikTok click ID"}},"required":["session_id","page"]},"productId":{"type":"string"},"createdAt":{"type":"string"},"updatedAt":{"type":"string"}},"required":["id","eventId","teamId","promoterId","eventType","timestamp","date","hour","properties","context","createdAt","updatedAt"]}}}}}}},"/beneficiaries/{id}":{"get":{"operationId":"beneficiary.get","summary":"Get beneficiary by ID","tags":["Beneficiaries"],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string","readOnly":true,"description":"A unique identifier for this beneficiary.","examples":["ben_01jps5cgse5n6mg1ymkew9tsfh"]}}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"object","properties":{"beneficiary":{"$ref":"#/components/schemas/Beneficiary"}},"required":["beneficiary"]}}}}}},"delete":{"operationId":"beneficiary.remove","summary":"Delete a beneficiary","tags":["Beneficiaries"],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string","readOnly":true,"description":"A unique identifier for this beneficiary.","examples":["ben_01jps5cgse5n6mg1ymkew9tsfh"]}}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"object","properties":{"beneficiary":{"$ref":"#/components/schemas/Beneficiary"}},"required":["beneficiary"]}}}}}}},"/beneficiaries":{"get":{"operationId":"beneficiary.list","summary":"List beneficiaries with cursor-based pagination","description":"Returns beneficiary data with cursor-based pagination and optional full-text search via the `query` parameter.","tags":["Beneficiaries"],"parameters":[{"name":"teamId","in":"query","schema":{"type":"string","description":"Optional identifier of the team whose beneficiaries to list. When provided, only beneficiaries for that team are returned.","examples":["tem_01jqpjksnsen9vprw95et60t2m"]},"allowEmptyValue":true,"allowReserved":true},{"name":"gateway","in":"query","schema":{"enum":["AIRWALLEX","STRIPE"],"type":"string","description":"Filter beneficiaries by payment gateway provider (optional)","examples":["AIRWALLEX"]},"allowEmptyValue":true,"allowReserved":true},{"name":"currency","in":"query","schema":{"enum":["AED","ALL","AMD","ANG","AOA","ARS","AUD","AWG","AZN","BAM","BBD","BDT","BGN","BHD","BIF","BMD","BND","BOB","BRL","BSD","BTN","BWP","BZD","CAD","CHF","CLP","CNY","COP","CRC","CVE","CZK","DJF","DKK","DOP","DZD","EGP","ERN","ETB","EUR","FJD","FKP","GBP","GEL","GHS","GIP","GMD","GNF","GTQ","GYD","HKD","HNL","HUF","IDR","ILS","INR","ISK","JMD","JOD","JPY","KES","KGS","KHR","KMF","KRW","KWD","KYD","KZT","LAK","LBP","LKR","LRD","LSL","LYD","MAD","MDL","MGA","MKD","MNT","MOP","MUR","MVR","MWK","MXN","MYR","NAD","NGN","NIO","NOK","NPR","NZD","OMR","PAB","PEN","PGK","PHP","PKR","PLN","PYG","QAR","RON","RSD","RWF","SAR","SBD","SCR","SEK","SGD","SHP","SLE","SRD","SVC","SZL","THB","TJS","TMT","TND","TOP","TRY","TTD","TWD","TZS","UAH","UGX","USD","UYU","UZS","VND","VUV","WST","XAF","XCD","XOF","XPF","ZAR","ZMW","ZWL"],"type":"string","description":"Filter beneficiaries by currency code (optional)","examples":["AUD"]},"allowEmptyValue":true,"allowReserved":true},{"name":"query","in":"query","schema":{"type":"string","description":"Optional search query to filter beneficiaries by name or gateway identifier. When provided, search-backed pagination is used.","examples":["beneficiary"]},"allowEmptyValue":true,"allowReserved":true},{"name":"limit","in":"query","schema":{"type":"integer","minimum":1,"maximum":100,"default":20,"description":"Maximum number of beneficiaries to return per request (1-100, default: 20)","examples":[20]},"allowEmptyValue":true,"allowReserved":true},{"name":"cursor","in":"query","schema":{"type":"string","description":"Pagination cursor returned by a previous request. Omit on the first request.","examples":["eyJpZCI6ImJlbl8wMWpwczVjZ3NlNW42bWcxeW1rZXc5dHNmaCJ9"]},"allowEmptyValue":true,"allowReserved":true}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"object","properties":{"beneficiaries":{"type":"array","items":{"$ref":"#/components/schemas/Beneficiary"},"description":"Array of beneficiaries for the current result set"},"before":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Cursor for navigating backward in the result set. Omitted when there are no prior results.","examples":["eyJ2ZXJzaW9uIjoxLCJpbnRlbnQiOnsic291cmNlIjoiZGVtbyJ9LCJwb3MiOnsicHJpbWFyeUtleSI6InBybV8wMXM4NTNqIn19"]},"after":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Cursor for navigating forward in the result set. Omitted when there are no subsequent results.","examples":["eyJ2ZXJzaW9uIjoxLCJpbnRlbnQiOnsic291cmNlIjoiZGVtbyJ9LCJwb3MiOnsicHJpbWFyeUtleSI6InBybV8wMXM4NTNkIn19"]},"limit":{"type":"number","minimum":1,"description":"Maximum number of items to return in each result set","examples":[20]}},"required":["beneficiaries","limit"]}}}}}},"post":{"operationId":"beneficiary.create","summary":"Create a new beneficiary","tags":["Beneficiaries"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"name":{"type":"string","description":"The account name for this beneficiary.","examples":["My Bank Account"]},"gateway":{"enum":["AIRWALLEX","STRIPE"],"type":"string","description":"The payment gateway used for processing payouts.","examples":["STRIPE"]},"gatewayId":{"type":"string","description":"The identifier assigned by the payment gateway to this account.","examples":["7489cb17-24c5-4acf-a0cf-d93ed38081fe"]},"teamId":{"type":"string","description":"Team that owns this beneficiary account."},"teamIds":{"type":"array","items":{"type":"string"},"default":[],"description":"List of team IDs to assign this beneficiary to. Empty array or omitted means available to all teams.","examples":[[]]},"venueIds":{"type":"array","items":{"type":"string"},"default":[],"description":"List of venue IDs to assign this beneficiary to. Empty array or omitted means team-level only.","examples":[[]]},"currency":{"enum":["AED","ALL","AMD","ANG","AOA","ARS","AUD","AWG","AZN","BAM","BBD","BDT","BGN","BHD","BIF","BMD","BND","BOB","BRL","BSD","BTN","BWP","BZD","CAD","CHF","CLP","CNY","COP","CRC","CVE","CZK","DJF","DKK","DOP","DZD","EGP","ERN","ETB","EUR","FJD","FKP","GBP","GEL","GHS","GIP","GMD","GNF","GTQ","GYD","HKD","HNL","HUF","IDR","ILS","INR","ISK","JMD","JOD","JPY","KES","KGS","KHR","KMF","KRW","KWD","KYD","KZT","LAK","LBP","LKR","LRD","LSL","LYD","MAD","MDL","MGA","MKD","MNT","MOP","MUR","MVR","MWK","MXN","MYR","NAD","NGN","NIO","NOK","NPR","NZD","OMR","PAB","PEN","PGK","PHP","PKR","PLN","PYG","QAR","RON","RSD","RWF","SAR","SBD","SCR","SEK","SGD","SHP","SLE","SRD","SVC","SZL","THB","TJS","TMT","TND","TOP","TRY","TTD","TWD","TZS","UAH","UGX","USD","UYU","UZS","VND","VUV","WST","XAF","XCD","XOF","XPF","ZAR","ZMW","ZWL"],"type":"string","description":"Three-letter ISO 4217 currency code for payouts to this beneficiary account","examples":["AUD"]},"airwallex":{"type":"object","properties":{"transfer_methods":{"type":"array","items":{"enum":["SWIFT","LOCAL"],"type":"string"},"description":"Transfer methods supported for this beneficiary","examples":[["LOCAL"]]},"beneficiary":{"type":"object","properties":{"company_name":{"type":"string"},"date_of_birth":{"type":"string"},"entity_type":{"type":"string","description":"Whether the beneficiary is PERSONAL or COMPANY","examples":["COMPANY"]},"first_name":{"type":"string"},"last_name":{"type":"string"},"address":{"type":"object","properties":{"city":{"type":"string"},"country_code":{"type":"string"},"postcode":{"type":"string"},"state":{"type":"string"},"street_address":{"type":"string"}},"required":["country_code"]},"bank_details":{"type":"object","properties":{"account_currency":{"type":"string"},"account_name":{"type":"string"},"account_number":{"type":"string"},"account_routing_type1":{"type":"string"},"account_routing_value1":{"type":"string"},"account_routing_type2":{"type":"string"},"account_routing_value2":{"type":"string"},"bank_account_category":{"type":"string"},"bank_branch":{"type":"string"},"bank_country_code":{"type":"string"},"bank_name":{"type":"string"},"bank_street_address":{"type":"string"},"binding_mobile_number":{"type":"string"},"fingerprint":{"type":"string"},"iban":{"type":"string"},"local_clearing_system":{"type":"string"},"swift_code":{"type":"string"},"transaction_reference":{"type":"string"},"account_identifier_type":{"type":"string"},"account_identifier_value":{"type":"string"}},"required":["account_currency","account_name","bank_country_code"]},"additional_info":{"type":"object","properties":{"personal_email":{"type":"string","format":"email"}}}},"required":["entity_type","address","bank_details"],"description":"Beneficiary details including personal/company info, address, and bank details"},"id":{"type":"string"}},"required":["transfer_methods","beneficiary"],"description":"Airwallex-specific beneficiary details including bank account information and address (required when gateway is AIRWALLEX)","examples":[{"transfer_methods":["LOCAL"],"beneficiary":{"additional_info":{"personal_email":"test@session.services"},"address":{"city":"Sydney","country_code":"AU","postcode":"2000","state":"AU-NSW","street_address":"123 George Street"},"bank_details":{"account_currency":"AUD","account_name":"John Doe","account_number":"999994","account_routing_type1":"bsb","account_routing_value1":"062004","bank_country_code":"AU","local_clearing_system":"BANK_TRANSFER"},"entity_type":"PERSONAL","company_name":"Doe Enterprises Pty Ltd","first_name":"John","last_name":"Doe"}}]}},"required":["name","gateway","gatewayId","teamId","currency"],"additionalProperties":false}}}},"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"object","properties":{"beneficiary":{"$ref":"#/components/schemas/Beneficiary"}},"required":["beneficiary"]}}}}}}},"/beneficiaries/schema":{"get":{"operationId":"beneficiary.schema","summary":"Get beneficiary form schema","description":"Returns the form schema containing all fields required to create a beneficiary for the given country, currency, entity type, and transfer method combination. Use this to dynamically render the beneficiary creation form.","tags":["Beneficiaries"],"parameters":[{"name":"bankCountryCode","in":"query","required":true,"schema":{"type":"string","pattern":"^[A-Z]{2}$","description":"Two-letter ISO 3166-1 alpha-2 country code for the bank location","examples":["AU"]},"allowEmptyValue":true,"allowReserved":true},{"name":"accountCurrency","in":"query","required":true,"schema":{"enum":["AED","ALL","AMD","ANG","AOA","ARS","AUD","AWG","AZN","BAM","BBD","BDT","BGN","BHD","BIF","BMD","BND","BOB","BRL","BSD","BTN","BWP","BZD","CAD","CHF","CLP","CNY","COP","CRC","CVE","CZK","DJF","DKK","DOP","DZD","EGP","ERN","ETB","EUR","FJD","FKP","GBP","GEL","GHS","GIP","GMD","GNF","GTQ","GYD","HKD","HNL","HUF","IDR","ILS","INR","ISK","JMD","JOD","JPY","KES","KGS","KHR","KMF","KRW","KWD","KYD","KZT","LAK","LBP","LKR","LRD","LSL","LYD","MAD","MDL","MGA","MKD","MNT","MOP","MUR","MVR","MWK","MXN","MYR","NAD","NGN","NIO","NOK","NPR","NZD","OMR","PAB","PEN","PGK","PHP","PKR","PLN","PYG","QAR","RON","RSD","RWF","SAR","SBD","SCR","SEK","SGD","SHP","SLE","SRD","SVC","SZL","THB","TJS","TMT","TND","TOP","TRY","TTD","TWD","TZS","UAH","UGX","USD","UYU","UZS","VND","VUV","WST","XAF","XCD","XOF","XPF","ZAR","ZMW","ZWL"],"type":"string","description":"Three-letter ISO 4217 currency code for the beneficiary account","examples":["AUD"]},"allowEmptyValue":true,"allowReserved":true},{"name":"entityType","in":"query","required":true,"schema":{"enum":["PERSONAL","COMPANY"],"type":"string","description":"Whether the beneficiary is an individual or a company","examples":["COMPANY"]},"allowEmptyValue":true,"allowReserved":true},{"name":"transferMethod","in":"query","required":false,"schema":{"enum":["LOCAL","SWIFT"],"type":"string","description":"Transfer method: SWIFT for international wire transfers, LOCAL for domestic transfers","examples":["LOCAL"]},"allowEmptyValue":true,"allowReserved":true},{"name":"localClearingSystem","in":"query","required":false,"schema":{"type":"string","description":"Local clearing system for domestic transfers (e.g., NPP, BANK_TRANSFER, BPAY for Australia). Only applicable when transferMethod is LOCAL.","examples":["NPP"]},"allowEmptyValue":true,"allowReserved":true},{"name":"fieldValues","in":"query","required":false,"schema":{"type":"object","propertyNames":{"type":"string"},"additionalProperties":{"type":"string"},"description":"Current values of fields with refresh=true. Used to get dynamic schema updates based on user selections.","examples":[{"beneficiary.bank_details.account_routing_type1":"phone_number"}]},"style":"deepObject","explode":true,"allowEmptyValue":true,"allowReserved":true}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"object","properties":{"fields":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string","description":"Dot-notation path to the field in the beneficiary request object","examples":["beneficiary.bank_details.account_number"]},"enabled":{"type":"boolean","description":"Whether this field should be displayed","examples":[true]},"required":{"type":"boolean","description":"Whether this field is required for submission","examples":[true]},"field":{"type":"object","properties":{"type":{"enum":["INPUT","SELECT","RADIO","TRANSFER_METHOD","DYNAMIC_SELECT"],"type":"string","description":"The type of form input to render","examples":["INPUT"]},"label":{"type":"string","description":"Display label for the field"},"placeholder":{"type":"string","description":"Placeholder text for input fields"},"description":{"type":"string","description":"Detailed description of the field"},"tip":{"type":"string","description":"Tooltip information shown on hover"},"example":{"type":"string","description":"Example value for the field"},"default":{"type":"string","description":"Default value to pre-populate the field"},"key":{"type":"string","description":"Unique key identifier for the field"},"options":{"type":"array","items":{"type":"object","properties":{"label":{"type":"string","description":"Display label for the option"},"value":{"type":"string","description":"Value to submit when selected"},"flightTime":{"type":"object","properties":{"min":{"type":"number","description":"Minimum number of time units for the transfer"},"max":{"type":"number","description":"Maximum number of time units for the transfer"},"unit":{"type":"string","description":"Time unit (e.g., 'day', 'hour')","examples":["day"]}},"description":"Expected transfer time for TRANSFER_METHOD options"},"transferLimit":{"type":"object","properties":{"min":{"type":"number","description":"Minimum transfer amount"},"max":{"type":"number","description":"Maximum transfer amount"}},"description":"Transfer amount limits for TRANSFER_METHOD options"},"processingTime":{"type":"string","description":"Human-readable processing time description"}},"required":["label","value"],"description":"A selectable option in a form field"},"description":"Available options for SELECT and RADIO field types"},"refresh":{"type":"boolean","description":"When true, changing this field's value should trigger a schema refresh. Note: only documented API parameters (transfer_method, local_clearing_system) actually update the schema."}},"required":["type"],"description":"Field definition with type, label, and options"},"rule":{"type":"object","properties":{"pattern":{"type":"string","description":"Regex pattern for field validation"},"type":{"type":"string","description":"Validation type identifier"}},"description":"Validation rules for the field"}},"required":["path","enabled","required"],"description":"A single field in the beneficiary form schema with display and validation rules"},"description":"Array of form fields with their display and validation configuration"},"selectedTransferMethod":{"enum":["LOCAL","SWIFT"],"type":"string","description":"The transfer method used to generate this schema. When not provided in the request, LOCAL is auto-selected if available.","examples":["LOCAL"]},"selectedLocalClearingSystem":{"type":"string","description":"The local clearing system used to generate this schema, if applicable.","examples":["NPP"]}},"required":["fields"],"description":"Form schema response containing all fields needed to collect beneficiary details"}}}}}}},"/beneficiaries/validate":{"post":{"operationId":"beneficiary.validate","summary":"Validate beneficiary request","description":"Validates a beneficiary request against Airwallex rules without creating the beneficiary. Use this to provide real-time validation feedback before submission.","tags":["Beneficiaries"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"transfer_methods":{"type":"array","items":{"enum":["SWIFT","LOCAL"],"type":"string"},"description":"Transfer methods supported for this beneficiary","examples":[["LOCAL"]]},"beneficiary":{"type":"object","properties":{"company_name":{"type":"string"},"date_of_birth":{"type":"string"},"entity_type":{"type":"string","description":"Whether the beneficiary is PERSONAL or COMPANY","examples":["COMPANY"]},"first_name":{"type":"string"},"last_name":{"type":"string"},"address":{"type":"object","properties":{"city":{"type":"string"},"country_code":{"type":"string"},"postcode":{"type":"string"},"state":{"type":"string"},"street_address":{"type":"string"}},"required":["country_code"]},"bank_details":{"type":"object","properties":{"account_currency":{"type":"string"},"account_name":{"type":"string"},"account_number":{"type":"string"},"account_routing_type1":{"type":"string"},"account_routing_value1":{"type":"string"},"account_routing_type2":{"type":"string"},"account_routing_value2":{"type":"string"},"bank_account_category":{"type":"string"},"bank_branch":{"type":"string"},"bank_country_code":{"type":"string"},"bank_name":{"type":"string"},"bank_street_address":{"type":"string"},"binding_mobile_number":{"type":"string"},"fingerprint":{"type":"string"},"iban":{"type":"string"},"local_clearing_system":{"type":"string"},"swift_code":{"type":"string"},"transaction_reference":{"type":"string"},"account_identifier_type":{"type":"string"},"account_identifier_value":{"type":"string"}},"required":["account_currency","account_name","bank_country_code"]},"additional_info":{"type":"object","properties":{"personal_email":{"type":"string","format":"email"}}}},"required":["entity_type","address","bank_details"],"description":"Beneficiary details including personal/company info, address, and bank details"}},"required":["transfer_methods","beneficiary"],"additionalProperties":false}}}},"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"object","properties":{"valid":{"type":"boolean","description":"Whether the beneficiary request passed all validation rules","examples":[true]},"errors":{"type":"array","items":{"type":"object","properties":{"source":{"type":"string","description":"Dot-notation path to the field that failed validation","examples":["beneficiary.bank_details.account_number"]},"code":{"type":"string","description":"Airwallex validation error code","examples":["001"]},"message":{"type":"string","description":"Human-readable error message","examples":["This field is required"]}},"required":["source","code","message"],"description":"Details about a single validation error for a field"},"description":"Array of validation errors when valid is false. Each error contains the field path, error code, and message."}},"required":["valid"],"description":"Validation result indicating whether the beneficiary request is valid for creation"}}}}}}},"/events/{eventId}/sections/{id}":{"get":{"operationId":"section.get","summary":"Get section by ID","tags":["Sections"],"parameters":[{"name":"eventId","in":"path","required":true,"schema":{"type":"string","description":"Unique identifier of the event to verify section belongs to","examples":["evt_01jps5cgsenjrazw6wswmyspa3"]}},{"name":"id","in":"path","required":true,"schema":{"type":"string","readOnly":true,"description":"Unique identifier for the section","examples":["sct_01jps5cgse0g3qj16kpq8t221r"]}}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"object","properties":{"section":{"$ref":"#/components/schemas/Section"}},"required":["section"]}}}}}},"put":{"operationId":"section.update","summary":"Update a section","tags":["Sections"],"parameters":[{"name":"eventId","in":"path","required":true,"schema":{"type":"string","description":"Unique identifier of the event to verify section belongs to","examples":["evt_01jps5cgsenjrazw6wswmyspa3"]}},{"name":"id","in":"path","required":true,"schema":{"type":"string","description":"Unique identifier of the section to update","examples":["sct_01jps5cgse0g3qj16kpq8t221r"]}}],"requestBody":{"required":false,"content":{"application/json":{"schema":{"type":"object","properties":{"visibility":{"enum":["ALWAYS","STACKED","HIDDEN"],"type":"string"},"name":{"type":"string","description":"Display name of the section (e.g., 'VIP Area', 'General Admission')","examples":["General Admission"]},"capacity":{"type":"number","minimum":-1},"limit":{"type":"number","minimum":-1},"order":{"type":"number","minimum":0,"description":"Display order of the section. Lower numbers appear first in listings","examples":[0]},"locationId":{"type":"string","pattern":"^loc_[0-9a-z]{26}$","description":"ID of an existing location to update to. Either locationId or googlePlaceId can be provided.","examples":["loc_01jqpjksnsen9vprw95et60t2m"]},"googlePlaceId":{"type":"string","description":"Google Place ID to update location from. Either locationId or googlePlaceId can be provided.","examples":["ChIJN1t_tDeuEmsRUsoyG83frY4"]}},"additionalProperties":false}}}},"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"object","properties":{"section":{"$ref":"#/components/schemas/Section"}},"required":["section"]}}}}}},"delete":{"operationId":"section.remove","summary":"Delete a section","tags":["Sections"],"parameters":[{"name":"eventId","in":"path","required":true,"schema":{"type":"string","description":"Unique identifier of the event to verify section belongs to","examples":["evt_01jps5cgsenjrazw6wswmyspa3"]}},{"name":"id","in":"path","required":true,"schema":{"type":"string","readOnly":true,"description":"Unique identifier for the section","examples":["sct_01jps5cgse0g3qj16kpq8t221r"]}}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"object","properties":{"section":{"$ref":"#/components/schemas/Section"}},"required":["section"]}}}}}}},"/events/{eventId}/sections":{"get":{"operationId":"section.list","summary":"List sections","description":"Returns sections with cursor-based pagination. Automatically uses search-backed pagination when query parameter is provided for full-text search capabilities.","tags":["Sections"],"parameters":[{"name":"eventId","in":"path","required":true,"schema":{"type":"string","description":"Unique identifier of the event this section belongs to","examples":["evt_01jps5cgsenjrazw6wswmyspa3"]}},{"name":"query","in":"query","schema":{"type":"string","description":"Optional search query. When provided, automatically uses search-backed pagination for full-text search capabilities","examples":["VIP"]},"allowEmptyValue":true,"allowReserved":true},{"name":"limit","in":"query","schema":{"type":"number","minimum":1,"maximum":100,"default":20,"description":"Maximum number of sections to return in each result set. Must be between 1 and 100, defaults to 20","examples":[20]},"allowEmptyValue":true,"allowReserved":true},{"name":"cursor","in":"query","schema":{"type":"string","description":"Opaque pagination cursor from a previous response. Provide to continue fetching subsequent results","examples":["eyJpbnRlbnQiOnsicmVzb3VyY2UiOiJzZWN0aW9uLmxpc3QifSwicG9zaXRpb24iOnsiZW5naW5lIjoiZHluYW1vIiwgImN1cnNvciI6InNlY18wMWpwczVjZ3NlMGczcWo1NnZkODZ6N3FqIiwgImhpc3RvcnkiOltdfX0="]},"allowEmptyValue":true,"allowReserved":true}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"object","properties":{"sections":{"type":"array","items":{"$ref":"#/components/schemas/Section"},"description":"Array of sections for the current result set"},"before":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Cursor for navigating backward in the result set. Omitted when there are no prior results.","examples":["eyJ2ZXJzaW9uIjoxLCJpbnRlbnQiOnsic291cmNlIjoiZGVtbyJ9LCJwb3MiOnsicHJpbWFyeUtleSI6InBybV8wMXM4NTNqIn19"]},"after":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Cursor for navigating forward in the result set. Omitted when there are no subsequent results.","examples":["eyJ2ZXJzaW9uIjoxLCJpbnRlbnQiOnsic291cmNlIjoiZGVtbyJ9LCJwb3MiOnsicHJpbWFyeUtleSI6InBybV8wMXM4NTNkIn19"]},"limit":{"type":"number","minimum":1,"description":"Maximum number of items to return in each result set","examples":[20]}},"required":["sections","limit"]}}}}}},"post":{"operationId":"section.create","summary":"Create a new section","tags":["Sections"],"parameters":[{"name":"eventId","in":"path","required":true,"schema":{"type":"string","description":"Unique identifier of the event this section belongs to","examples":["evt_01jps5cgsenjrazw6wswmyspa3"]}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"name":{"type":"string","description":"Display name of the section (e.g., 'VIP Area', 'General Admission')","examples":["General Admission"]},"capacity":{"type":"number","minimum":-1,"default":-1,"description":"Maximum number of attendees for this section. Use -1 for unlimited capacity","examples":[1000]},"limit":{"type":"number","minimum":-1,"default":-1,"description":"Maximum number of tickets for this section that can be purchased in a single order. A value of -1 indicates unlimited","examples":[-1]},"teamId":{"type":"string","description":"Team that owns this section. Denormalized for efficient queries."},"order":{"type":"number","description":"Display order of the section. Lower numbers appear first in listings. Defaults to 0 if not specified","examples":[0]},"visibility":{"enum":["ALWAYS","STACKED","HIDDEN"],"type":"string","default":"ALWAYS","description":"Controls how this section is shown: always list all visible admissions, stack to show the cheapest available admission, or hide until a scoped coupon reveals it.","examples":["ALWAYS"]},"locationId":{"type":"string","pattern":"^loc_[0-9a-z]{26}$","description":"ID of an existing location. Either locationId or googlePlaceId must be provided.","examples":["loc_01jqpjksnsen9vprw95et60t2m"]},"googlePlaceId":{"type":"string","description":"Google Place ID to create a new location from. Either locationId or googlePlaceId must be provided.","examples":["ChIJN1t_tDeuEmsRUsoyG83frY4"]}},"required":["name","teamId"],"additionalProperties":false}}}},"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"object","properties":{"section":{"$ref":"#/components/schemas/Section"}},"required":["section"]}}}}}}},"/events/slugs":{"get":{"operationId":"event.slugs","summary":"List event slugs","description":"List current event slugs with the same filters and access rules as event lists. Supports skip/limit pagination for sitemap generation.","tags":["Events"],"parameters":[{"name":"status","in":"query","schema":{"enum":["UPCOMING","ENDED"],"type":"string","description":"Filter events by their current lifecycle status","examples":["UPCOMING"]},"allowEmptyValue":true,"allowReserved":true},{"name":"approval","in":"query","schema":{"enum":["PENDING","APPROVED","REJECTED"],"type":"string","description":"Filter events by their approval status","examples":["APPROVED"]},"allowEmptyValue":true,"allowReserved":true},{"name":"visibility","in":"query","schema":{"enum":["PUBLIC","PRIVATE","SCHEDULED","PASSCODE"],"type":"string","description":"Filter events by their visibility setting","examples":["PUBLIC"]},"allowEmptyValue":true,"allowReserved":true},{"name":"promoterId","in":"query","schema":{"type":"string","description":"Filter events to only those belonging to a specific promoter. If not provided, returns events from all promoters the user has access to","examples":["pmt_01jqpjksnsen9vprw95et60t2m"]},"allowEmptyValue":true,"allowReserved":true},{"name":"teamId","in":"query","schema":{"type":"string","description":"Filter events to only those belonging to a specific team. If not provided, returns events from all teams the user has access to"},"allowEmptyValue":true,"allowReserved":true},{"name":"venueId","in":"query","schema":{"type":"string","description":"Filter events to only those at a specific venue. If not provided, returns events at all venues"},"allowEmptyValue":true,"allowReserved":true},{"name":"query","in":"query","schema":{"type":"string","description":"Search term to filter events by name, description, or location. Triggers full‑text search when provided","examples":["Test Event"]},"allowEmptyValue":true,"allowReserved":true},{"name":"latitude","in":"query","schema":{"type":"number","minimum":-90,"maximum":90,"description":"Latitude coordinate for geographic search. Provide with longitude (and optional radius)","examples":[-33.8944593]},"allowEmptyValue":true,"allowReserved":true},{"name":"longitude","in":"query","schema":{"type":"number","minimum":-180,"maximum":180,"description":"Longitude coordinate for geographic search. Provide with latitude (and optional radius)","examples":[151.2252255]},"allowEmptyValue":true,"allowReserved":true},{"name":"radius","in":"query","schema":{"type":"number","description":"Search radius in kilometers from the provided coordinates. Defaults to 20km","examples":[20]},"allowEmptyValue":true,"allowReserved":true},{"name":"country","in":"query","schema":{"type":"string","description":"Filter by country region slug. Matches events where location.country equals the region name","examples":["australia"]},"allowEmptyValue":true,"allowReserved":true},{"name":"state","in":"query","schema":{"type":"string","description":"Filter by state/province region slug. Matches events where location.state equals the region name","examples":["nsw"]},"allowEmptyValue":true,"allowReserved":true},{"name":"city","in":"query","schema":{"type":"string","description":"Filter by city region slug. Matches events where location.city equals the region name","examples":["sydney"]},"allowEmptyValue":true,"allowReserved":true},{"name":"from","in":"query","schema":{"type":"string","format":"date","description":"Filter events that start on or after this date (YYYY-MM-DD format). Events with entryStartsAt >= from","examples":["2024-01-01"]},"allowEmptyValue":true,"allowReserved":true},{"name":"to","in":"query","schema":{"type":"string","format":"date","description":"Filter events that start on or before this date (YYYY-MM-DD format). Events with entryStartsAt <= to","examples":["2024-12-31"]},"allowEmptyValue":true,"allowReserved":true},{"name":"sort","in":"query","schema":{"enum":["entryStartsAt","createdAt"],"type":"string","description":"Optional list sort field. Defaults to event start time. Use `createdAt` to return newest or oldest events first.","examples":["createdAt"]},"allowEmptyValue":true,"allowReserved":true},{"name":"direction","in":"query","schema":{"enum":["asc","desc"],"type":"string","description":"Sort direction for event lists. Defaults to lifecycle-aware event start order unless `sort` is provided.","examples":["desc"]},"allowEmptyValue":true,"allowReserved":true},{"name":"genres","in":"query","schema":{"type":"array","maxItems":20,"items":{"enum":["House","Deep House","Tech House","Progressive House","Minimal House","Romanian Minimal","Afro House","Afro Tech","Acid House","Funky House","Jackin House","Soulful House","Melodic House","Latin House","Techno","Melodic Techno","Hard Techno","Industrial Techno","Minimal Techno","Detroit Techno","Dub Techno","Acid Techno","Hypnotic Techno","Drum & Bass","Jungle","Dubstep","Bass House","Breakbeat","UK Garage","Bassline","Grime","Liquid DnB","Neurofunk","Footwork","Jersey Club","Trance","Psytrance","Progressive Trance","Disco","Nu Disco","Italo Disco","Funk","Soul","Balearic","Hardcore","Hardstyle","Gabber","Happy Hardcore","Amapiano","Gqom","Afrobeats","Kuduro","Singeli","Baile Funk","Reggaeton","Dancehall","Dembow","Ambient","Downtempo","Electronica","Trip Hop","Lo-Fi","Electro","Synth Pop","Industrial","EBM","Indie Dance","Experimental","Hip-Hop","R&B","Jazz","Pop","Rock","Reggae","Live"],"type":"string"},"description":"Filter events by music genre(s). Returns events matching ANY of the provided genres (OR logic). Maximum 20 genres","examples":[["Tech House","Melodic Techno"]]},"style":"deepObject","explode":true,"allowEmptyValue":true,"allowReserved":true},{"name":"categories","in":"query","schema":{"type":"array","maxItems":10,"items":{"enum":["Day Party","Festival","Afterparty","Boat Party","Pool Party","Live Performance","Warehouse","Open Air","Rooftop","Beach Party","Secret Location","DIY","Basement","Free Entry","Donation","Vinyl Only","Silent Disco","Underground","Intimate","Queer Friendly","FLINTA","Safe Space","No Photos","Rave","BYO","Cash Only","Card Only","Food Available","Dress Code"],"type":"string"},"description":"Filter events by category(s). Returns events matching ANY of the provided categories (OR logic). Maximum 10 categories","examples":[["Day Party","Open Air"]]},"style":"deepObject","explode":true,"allowEmptyValue":true,"allowReserved":true},{"name":"featured","in":"query","schema":{"type":"boolean","description":"Filter to only featured (editorial pick) events","examples":[true]},"allowEmptyValue":true,"allowReserved":true},{"name":"limit","in":"query","schema":{"type":"integer","minimum":1,"maximum":1000,"default":1000,"description":"Maximum number of event slugs to return. Must be between 1 and 1000, defaults to 1000","examples":[1000]},"allowEmptyValue":true,"allowReserved":true},{"name":"skip","in":"query","schema":{"type":"integer","minimum":0,"maximum":9007199254740991,"default":0,"description":"Number of matching event slugs to skip before returning results","examples":[0]},"allowEmptyValue":true,"allowReserved":true}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"object","properties":{"slugs":{"type":"array","items":{"type":"string"},"description":"Current event slugs for the matching event list"},"skip":{"type":"integer","minimum":0,"maximum":9007199254740991,"description":"Number of matching event slugs skipped","examples":[0]},"limit":{"type":"integer","minimum":1,"maximum":1000,"description":"Maximum number of event slugs returned","examples":[1000]}},"required":["slugs","skip","limit"]}}}}}}},"/events/{key}":{"get":{"operationId":"event.get","summary":"Get event by ID or slug","description":"Retrieve an event using either its unique ID or URL-friendly slug","tags":["Events"],"parameters":[{"name":"key","in":"path","required":true,"schema":{"type":"string","minLength":1,"description":"Event key - either a unique ID (evt_xxx format) or URL-friendly slug","examples":["evt_01jps5cgsenjrazw6wswmyspa3","test-event"]}},{"name":"passcode","in":"query","schema":{"type":"string","description":"Passcode for accessing protected events"},"allowEmptyValue":true,"allowReserved":true},{"name":"couponCode","in":"query","schema":{"type":"string","description":"Coupon code used to reveal hidden admissions and sections when eligible."},"allowEmptyValue":true,"allowReserved":true},{"name":"teamId","in":"query","schema":{"type":"string","description":"Optional team scope. When provided, event must belong to this team."},"allowEmptyValue":true,"allowReserved":true}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"object","properties":{"event":{"type":"object","properties":{"id":{"type":"string","pattern":"^evt_[0-9a-z]{26}$","description":"A unique identifier for this event","examples":["evt_01jps5cgsenjrazw6wswmyspa3"],"readOnly":true},"createdAt":{"type":"string","format":"date-time","readOnly":true,"description":"Timestamp in ISO 8601 format when this event was created","examples":["2026-06-07T11:39:32.857Z"]},"updatedAt":{"type":"string","format":"date-time","readOnly":true,"description":"Timestamp in ISO 8601 format when this event was last updated","examples":["2026-06-07T11:39:32.857Z"]},"name":{"type":"string","description":"The title of the event shown to attendees","examples":["Test Event"]},"slug":{"type":"string","description":"URL-friendly identifier for the event","examples":["test-event"]},"description":{"type":"string","description":"Detailed description of the event","examples":["This is only a test..."]},"approval":{"enum":["PENDING","APPROVED","REJECTED"],"type":"string","description":"Approval status of the event","examples":["APPROVED"]},"status":{"enum":["UPCOMING","ENDED"],"type":"string","description":"Current stage of the event lifecycle","examples":["UPCOMING","ENDED"]},"visibility":{"enum":["PUBLIC","PRIVATE","SCHEDULED","PASSCODE","CANCELLED"],"type":"string","description":"Who can see the event","examples":["PUBLIC"]},"currency":{"enum":["AED","ALL","AMD","ANG","AOA","ARS","AUD","AWG","AZN","BAM","BBD","BDT","BGN","BHD","BIF","BMD","BND","BOB","BRL","BSD","BTN","BWP","BZD","CAD","CHF","CLP","CNY","COP","CRC","CVE","CZK","DJF","DKK","DOP","DZD","EGP","ERN","ETB","EUR","FJD","FKP","GBP","GEL","GHS","GIP","GMD","GNF","GTQ","GYD","HKD","HNL","HUF","IDR","ILS","INR","ISK","JMD","JOD","JPY","KES","KGS","KHR","KMF","KRW","KWD","KYD","KZT","LAK","LBP","LKR","LRD","LSL","LYD","MAD","MDL","MGA","MKD","MNT","MOP","MUR","MVR","MWK","MXN","MYR","NAD","NGN","NIO","NOK","NPR","NZD","OMR","PAB","PEN","PGK","PHP","PKR","PLN","PYG","QAR","RON","RSD","RWF","SAR","SBD","SCR","SEK","SGD","SHP","SLE","SRD","SVC","SZL","THB","TJS","TMT","TND","TOP","TRY","TTD","TWD","TZS","UAH","UGX","USD","UYU","UZS","VND","VUV","WST","XAF","XCD","XOF","XPF","ZAR","ZMW","ZWL"],"type":"string","description":"Three-letter ISO 4217 currency code used for ticket prices","examples":["AUD"]},"url":{"type":"string","format":"uri","description":"External URL for the event website or ticket page","examples":["https://example.com"]},"entryStartsAt":{"type":"string","pattern":"^\\d{4}-\\d{2}-\\d{2}T\\d{2}:\\d{2}:\\d{2}$","description":"Wall clock time when event entry begins (no timezone, displays same everywhere)","examples":["2026-06-08T11:39:32"]},"entryEndsAt":{"type":"string","pattern":"^\\d{4}-\\d{2}-\\d{2}T\\d{2}:\\d{2}:\\d{2}$","description":"Wall clock time when event entry ends (no timezone, displays same everywhere)","examples":["2026-06-09T11:39:32"]},"publishAt":{"type":"string","pattern":"^\\d{4}-\\d{2}-\\d{2}T\\d{2}:\\d{2}:\\d{2}$","description":"Wall clock time when the event becomes publicly visible (no timezone)","examples":["2026-06-07T11:39:32"]},"images":{"type":"object","properties":{"mobile":{"type":"object","properties":{"src":{"type":"string","format":"uri","examples":["https://assets.session.services/my-image.jpg"]},"alt":{"type":"string","examples":["My Image"]},"width":{"type":"number","examples":[1080]},"height":{"type":"number","examples":[1080]}},"required":["src","alt","width","height"],"description":"Mobile-optimized image for the event"},"desktop":{"type":"object","properties":{"src":{"type":"string","format":"uri","examples":["https://assets.session.services/my-image.jpg"]},"alt":{"type":"string","examples":["My Image"]},"width":{"type":"number","examples":[1080]},"height":{"type":"number","examples":[1080]}},"required":["src","alt","width","height"],"description":"Desktop-optimized image for the event"}},"required":["mobile","desktop"]},"geohash":{"type":"string","description":"Geohash representing the event location","examples":["r3gx1"]},"location":{"type":"object","properties":{"id":{"type":"string","pattern":"^loc_[0-9a-z]{26}$","description":"Location identifier","examples":["loc_01hk153x00eh99pagyydz03sbz"],"readOnly":true},"googlePlaceId":{"type":"string","description":"Google Place ID for this location","examples":["ChIJP3Sa8ziYEmsRUKgyFmh9AQM"]},"createdAt":{"type":"string","format":"date-time","description":"Timestamp in ISO 8601 format when the location was created","examples":["2026-06-07T11:39:32.857Z"]},"updatedAt":{"type":"string","format":"date-time","description":"Timestamp in ISO 8601 format when the location was last updated","examples":["2026-06-07T11:39:32.857Z"]},"name":{"type":"string","description":"Location name","examples":["Watson's EQ"]},"address":{"type":"string","description":"Formatted address","examples":["The, Entertainment Quarter, 1 Bent St, Moore Park NSW 2021, Australia"]},"city":{"type":"string","description":"City name","examples":["Moore Park"]},"state":{"type":"string","description":"State or region","examples":["New South Wales"]},"postcode":{"type":"string","description":"Postal code","examples":["2021"]},"country":{"type":"string","description":"Country name","examples":["Australia"]},"latitude":{"type":"number","minimum":-90,"maximum":90,"description":"Latitude coordinate","examples":[-33.8944593]},"longitude":{"type":"number","minimum":-180,"maximum":180,"description":"Longitude coordinate","examples":[151.2252255]},"timeZone":{"type":"string","minLength":1,"pattern":"^[A-Za-z0-9_+-]+(\\/[A-Za-z0-9_+-]+)*$","description":"IANA timezone identifier (e.g., 'America/New_York', 'Europe/London', 'Australia/Sydney', 'UTC'). Must be validated against the IANA timezone database where used.","examples":["Australia/Sydney"]},"types":{"type":"array","items":{"type":"string"},"description":"Google Place types indicating the category and nature of this location","examples":[["establishment","point_of_interest","stadium"]]},"description":{"type":"string","description":"AI-generated description of the place, when available","examples":["Historic outdoor amphitheater known for summer concerts"]},"image":{"type":"object","properties":{"src":{"type":"string","format":"uri","examples":["https://assets.session.services/my-image.jpg"]},"alt":{"type":"string","examples":["My Image"]},"width":{"type":"number","examples":[1080]},"height":{"type":"number","examples":[1080]}},"required":["src","alt","width","height"],"description":"Primary location photo"},"venue":{"type":"object","properties":{"id":{"type":"string","pattern":"^ven_[0-9a-z]{26}$","description":"Venue identifier"},"name":{"type":"string","description":"Venue name"},"slug":{"type":"string","description":"URL-friendly venue slug"},"teamId":{"type":"string","description":"Team that owns this venue"},"approval":{"enum":["PENDING","APPROVED","REJECTED"],"type":"string","description":"Venue approval status"},"image":{"type":"object","properties":{"src":{"type":"string","format":"uri","examples":["https://assets.session.services/my-image.jpg"]},"alt":{"type":"string","examples":["My Image"]},"width":{"type":"number","examples":[1080]},"height":{"type":"number","examples":[1080]}},"required":["src","alt","width","height"],"description":"Venue image"},"description":{"type":"string","description":"Venue description"}},"required":["id","name","slug","teamId","approval"],"description":"Denormalized venue details if this location is a managed venue. Only included when venue is approved."}},"required":["id","createdAt","updatedAt","name","address","country","latitude","longitude","timeZone"],"description":"Structured location details for the event"},"teamId":{"type":"string","pattern":"^tem_[0-9a-z]{26}$","description":"Team that owns this event. Denormalized for efficient queries."},"promoterId":{"type":"string","pattern":"^pmt_[0-9a-z]{26}$","description":"Promoter organizing the event. Must belong to the team.","examples":["pmt_01jqpjksnsen9vprw95et60t2m"]},"metadata":{"type":"object","propertyNames":{"type":"string","minLength":1,"maxLength":40,"description":"Metadata key. Must be 1-40 characters"},"additionalProperties":{"type":"string","maxLength":500,"description":"Metadata value. Must not exceed 500 characters"},"description":"Flexible key-value metadata storage for custom configuration. Similar to Stripe's metadata API. Maximum 50 keys, key names up to 40 characters, values up to 500 characters."},"genres":{"type":"array","items":{"type":"string"},"description":"Music genres for the event (1-5 genres)","examples":[["Tech House","Melodic Techno"]]},"categories":{"type":"array","items":{"type":"string"},"description":"Event characteristics like vibe, venue type, and amenities (up to 10)","examples":[["Day Party","Open Air","Free Entry"]]},"featured":{"type":"boolean","description":"Whether this event is an editorial pick","examples":[true]},"likes":{"type":"integer","minimum":0,"maximum":9007199254740991,"description":"Number of users who liked this event","examples":[42]},"passcode":{"type":"string","description":"Plain-text event passcode. Included only on internal event detail responses for users with event.read access."},"sections":{"type":"array","items":{"$ref":"#/components/schemas/Section"}},"admissions":{"type":"array","items":{"$ref":"#/components/schemas/Admission"}},"promoter":{"type":"object","properties":{"id":{"type":"string","pattern":"^pmt_[0-9a-z]{26}$","description":"Unique identifier for the promoter organization","examples":["pmt_01jqpjksnsen9vprw95et60t2m"],"readOnly":true},"name":{"type":"string","minLength":3,"maxLength":30,"description":"Display name of the promoter organization. Must be between 3 and 30 characters","examples":["Session Services"]},"slug":{"type":"string","minLength":3,"maxLength":30,"description":"URL-friendly slug for the promoter organization. Must be unique and between 3 and 30 characters","examples":["session-services"]},"description":{"type":"string","description":"Detailed description of the promoter organization and their events","examples":["This is only a test..."]},"image":{"type":"object","properties":{"src":{"type":"string","format":"uri","examples":["https://assets.session.services/my-image.jpg"]},"alt":{"type":"string","examples":["My Image"]},"width":{"type":"number","examples":[1080]},"height":{"type":"number","examples":[1080]}},"required":["src","alt","width","height"],"description":"Optional promotional image for the promoter organization with dimensions and alt text"}},"required":["id","name","slug","description"],"description":"Public summary of the promoter organizing this event. Included on event detail responses only."},"liked":{"type":"boolean","description":"Whether the current user has liked this event","examples":[true,false]}},"required":["id","createdAt","updatedAt","name","slug","description","approval","status","visibility","currency","entryStartsAt","entryEndsAt","publishAt","images","geohash","location","teamId","promoterId","sections","admissions"]}},"required":["event"]}}}}}},"put":{"operationId":"event.update","summary":"Update an event","description":"Update an event using either its unique ID or URL-friendly slug","tags":["Events"],"parameters":[{"name":"key","in":"path","required":true,"schema":{"type":"string","description":"Event key - either a unique ID (evt_xxx format) or URL-friendly slug","examples":["evt_01jps5cgsenjrazw6wswmyspa3","test-event"]}}],"requestBody":{"required":false,"content":{"application/json":{"schema":{"type":"object","properties":{"id":{"type":"string","pattern":"^evt_[0-9a-z]{26}$","description":"A unique identifier for this event","examples":["evt_01jps5cgsenjrazw6wswmyspa3"],"readOnly":true},"name":{"type":"string","description":"The title of the event shown to attendees","examples":["Test Event"]},"slug":{"type":"string","description":"URL-friendly identifier for the event","examples":["test-event"]},"description":{"type":"string","description":"Detailed description of the event","examples":["This is only a test..."]},"approval":{"enum":["PENDING","APPROVED","REJECTED"],"type":"string","description":"Approval status of the event","examples":["APPROVED"]},"visibility":{"enum":["PUBLIC","PRIVATE","SCHEDULED","PASSCODE","CANCELLED"],"type":"string","description":"Who can see the event","examples":["PUBLIC"]},"currency":{"enum":["AED","ALL","AMD","ANG","AOA","ARS","AUD","AWG","AZN","BAM","BBD","BDT","BGN","BHD","BIF","BMD","BND","BOB","BRL","BSD","BTN","BWP","BZD","CAD","CHF","CLP","CNY","COP","CRC","CVE","CZK","DJF","DKK","DOP","DZD","EGP","ERN","ETB","EUR","FJD","FKP","GBP","GEL","GHS","GIP","GMD","GNF","GTQ","GYD","HKD","HNL","HUF","IDR","ILS","INR","ISK","JMD","JOD","JPY","KES","KGS","KHR","KMF","KRW","KWD","KYD","KZT","LAK","LBP","LKR","LRD","LSL","LYD","MAD","MDL","MGA","MKD","MNT","MOP","MUR","MVR","MWK","MXN","MYR","NAD","NGN","NIO","NOK","NPR","NZD","OMR","PAB","PEN","PGK","PHP","PKR","PLN","PYG","QAR","RON","RSD","RWF","SAR","SBD","SCR","SEK","SGD","SHP","SLE","SRD","SVC","SZL","THB","TJS","TMT","TND","TOP","TRY","TTD","TWD","TZS","UAH","UGX","USD","UYU","UZS","VND","VUV","WST","XAF","XCD","XOF","XPF","ZAR","ZMW","ZWL"],"type":"string","description":"Three-letter ISO 4217 currency code used for ticket prices","examples":["AUD"]},"url":{"anyOf":[{"type":"string","format":"uri"},{"type":"null"}],"description":"External event URL. Pass null to clear; omit to leave unchanged.","examples":["https://example.com/events/summer-festival-2025"]},"entryStartsAt":{"type":"string","pattern":"^\\d{4}-\\d{2}-\\d{2}T\\d{2}:\\d{2}:\\d{2}$","description":"Wall clock time when event entry begins (no timezone, displays same everywhere)","examples":["2026-06-08T11:39:32"]},"entryEndsAt":{"type":"string","pattern":"^\\d{4}-\\d{2}-\\d{2}T\\d{2}:\\d{2}:\\d{2}$","description":"Wall clock time when event entry ends (no timezone, displays same everywhere)","examples":["2026-06-09T11:39:32"]},"publishAt":{"type":"string","pattern":"^\\d{4}-\\d{2}-\\d{2}T\\d{2}:\\d{2}:\\d{2}$","description":"Wall clock time when the event becomes publicly visible (no timezone)","examples":["2026-06-07T11:39:32"]},"images":{"type":"object","properties":{"mobile":{"type":"object","properties":{"src":{"type":"string","format":"uri","examples":["https://assets.session.services/my-image.jpg"]},"alt":{"type":"string","examples":["My Image"]},"width":{"type":"number","examples":[1080]},"height":{"type":"number","examples":[1080]}},"required":["src","alt","width","height"],"description":"Mobile-optimized image for the event"},"desktop":{"type":"object","properties":{"src":{"type":"string","format":"uri","examples":["https://assets.session.services/my-image.jpg"]},"alt":{"type":"string","examples":["My Image"]},"width":{"type":"number","examples":[1080]},"height":{"type":"number","examples":[1080]}},"required":["src","alt","width","height"],"description":"Desktop-optimized image for the event"}},"required":["mobile","desktop"]},"teamId":{"type":"string","pattern":"^tem_[0-9a-z]{26}$","description":"Team that owns this event. Denormalized for efficient queries."},"promoterId":{"type":"string","pattern":"^pmt_[0-9a-z]{26}$","description":"Promoter organizing the event. Must belong to the team.","examples":["pmt_01jqpjksnsen9vprw95et60t2m"]},"metadata":{"type":"object","propertyNames":{"type":"string","minLength":1,"maxLength":40,"description":"Metadata key. Must be 1-40 characters"},"additionalProperties":{"type":"string","maxLength":500,"description":"Metadata value. Must not exceed 500 characters"},"description":"Flexible key-value metadata storage for custom configuration. Similar to Stripe's metadata API. Maximum 50 keys, key names up to 40 characters, values up to 500 characters."},"genres":{"type":"array","minItems":1,"maxItems":5,"items":{"enum":["House","Deep House","Tech House","Progressive House","Minimal House","Romanian Minimal","Afro House","Afro Tech","Acid House","Funky House","Jackin House","Soulful House","Melodic House","Latin House","Techno","Melodic Techno","Hard Techno","Industrial Techno","Minimal Techno","Detroit Techno","Dub Techno","Acid Techno","Hypnotic Techno","Drum & Bass","Jungle","Dubstep","Bass House","Breakbeat","UK Garage","Bassline","Grime","Liquid DnB","Neurofunk","Footwork","Jersey Club","Trance","Psytrance","Progressive Trance","Disco","Nu Disco","Italo Disco","Funk","Soul","Balearic","Hardcore","Hardstyle","Gabber","Happy Hardcore","Amapiano","Gqom","Afrobeats","Kuduro","Singeli","Baile Funk","Reggaeton","Dancehall","Dembow","Ambient","Downtempo","Electronica","Trip Hop","Lo-Fi","Electro","Synth Pop","Industrial","EBM","Indie Dance","Experimental","Hip-Hop","R&B","Jazz","Pop","Rock","Reggae","Live"],"type":"string"},"description":"Music genres for the event (1-5 genres)","examples":[["Tech House","Melodic Techno"]]},"categories":{"type":"array","maxItems":10,"items":{"enum":["Day Party","Festival","Afterparty","Boat Party","Pool Party","Live Performance","Warehouse","Open Air","Rooftop","Beach Party","Secret Location","DIY","Basement","Free Entry","Donation","Vinyl Only","Silent Disco","Underground","Intimate","Queer Friendly","FLINTA","Safe Space","No Photos","Rave","BYO","Cash Only","Card Only","Food Available","Dress Code"],"type":"string"},"description":"Event characteristics like vibe, venue type, and amenities (up to 10)","examples":[["Day Party","Open Air","Free Entry"]]},"passcode":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Passcode for protected access. Pass null to clear; omit to leave unchanged."},"locationId":{"type":"string","pattern":"^loc_[0-9a-z]{26}$","description":"ID of an existing location to update to. Either locationId or googlePlaceId can be provided.","examples":["loc_01jqpjksnsen9vprw95et60t2m"]},"googlePlaceId":{"type":"string","description":"Google Place ID to update location from. Either locationId or googlePlaceId can be provided.","examples":["ChIJN1t_tDeuEmsRUsoyG83frY4"]},"notify":{"type":"boolean","description":"Whether attendees should be notified about this event update.","examples":[true]}},"additionalProperties":false}}}},"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"object","properties":{"event":{"$ref":"#/components/schemas/Event"}},"required":["event"]}}}}}},"delete":{"operationId":"event.remove","summary":"Delete an event","description":"Delete an event using either its unique ID or URL-friendly slug","tags":["Events"],"parameters":[{"name":"key","in":"path","required":true,"schema":{"type":"string","minLength":1,"description":"Event key - either a unique ID (evt_xxx format) or URL-friendly slug","examples":["evt_01jps5cgsenjrazw6wswmyspa3","test-event"]}}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"object","properties":{"event":{"$ref":"#/components/schemas/Event"}},"required":["event"]}}}}}}},"/events":{"get":{"operationId":"event.list","summary":"List events","description":"List events with filters for status, approval, visibility, and promoter. Supports full‑text search (query), geo search (latitude/longitude/radius), and cursor-based pagination.","tags":["Events"],"parameters":[{"name":"status","in":"query","schema":{"enum":["UPCOMING","ENDED"],"type":"string","description":"Filter events by their current lifecycle status","examples":["UPCOMING"]},"allowEmptyValue":true,"allowReserved":true},{"name":"approval","in":"query","schema":{"enum":["PENDING","APPROVED","REJECTED"],"type":"string","description":"Filter events by their approval status","examples":["APPROVED"]},"allowEmptyValue":true,"allowReserved":true},{"name":"visibility","in":"query","schema":{"enum":["PUBLIC","PRIVATE","SCHEDULED","PASSCODE"],"type":"string","description":"Filter events by their visibility setting","examples":["PUBLIC"]},"allowEmptyValue":true,"allowReserved":true},{"name":"promoterId","in":"query","schema":{"type":"string","description":"Filter events to only those belonging to a specific promoter. If not provided, returns events from all promoters the user has access to","examples":["pmt_01jqpjksnsen9vprw95et60t2m"]},"allowEmptyValue":true,"allowReserved":true},{"name":"teamId","in":"query","schema":{"type":"string","description":"Filter events to only those belonging to a specific team. If not provided, returns events from all teams the user has access to"},"allowEmptyValue":true,"allowReserved":true},{"name":"venueId","in":"query","schema":{"type":"string","description":"Filter events to only those at a specific venue. If not provided, returns events at all venues"},"allowEmptyValue":true,"allowReserved":true},{"name":"limit","in":"query","schema":{"type":"number","minimum":1,"maximum":100,"default":20,"description":"Maximum number of events to return in each result set. Must be between 1 and 100, defaults to 20","examples":[20]},"allowEmptyValue":true,"allowReserved":true},{"name":"cursor","in":"query","schema":{"type":"string","description":"Cursor token for pagination. Provide the cursor from the previous response to continue fetching results","examples":["evt_01jps5cgsenjrazw6wswmyspa3"]},"allowEmptyValue":true,"allowReserved":true},{"name":"query","in":"query","schema":{"type":"string","description":"Search term to filter events by name, description, or location. Triggers full‑text search when provided","examples":["Test Event"]},"allowEmptyValue":true,"allowReserved":true},{"name":"latitude","in":"query","schema":{"type":"number","minimum":-90,"maximum":90,"description":"Latitude coordinate for geographic search. Provide with longitude (and optional radius)","examples":[-33.8944593]},"allowEmptyValue":true,"allowReserved":true},{"name":"longitude","in":"query","schema":{"type":"number","minimum":-180,"maximum":180,"description":"Longitude coordinate for geographic search. Provide with latitude (and optional radius)","examples":[151.2252255]},"allowEmptyValue":true,"allowReserved":true},{"name":"radius","in":"query","schema":{"type":"number","description":"Search radius in kilometers from the provided coordinates. Defaults to 20km","examples":[20]},"allowEmptyValue":true,"allowReserved":true},{"name":"country","in":"query","schema":{"type":"string","description":"Filter by country region slug. Matches events where location.country equals the region name","examples":["australia"]},"allowEmptyValue":true,"allowReserved":true},{"name":"state","in":"query","schema":{"type":"string","description":"Filter by state/province region slug. Matches events where location.state equals the region name","examples":["nsw"]},"allowEmptyValue":true,"allowReserved":true},{"name":"city","in":"query","schema":{"type":"string","description":"Filter by city region slug. Matches events where location.city equals the region name","examples":["sydney"]},"allowEmptyValue":true,"allowReserved":true},{"name":"from","in":"query","schema":{"type":"string","format":"date","description":"Filter events that start on or after this date (YYYY-MM-DD format). Events with entryStartsAt >= from","examples":["2024-01-01"]},"allowEmptyValue":true,"allowReserved":true},{"name":"to","in":"query","schema":{"type":"string","format":"date","description":"Filter events that start on or before this date (YYYY-MM-DD format). Events with entryStartsAt <= to","examples":["2024-12-31"]},"allowEmptyValue":true,"allowReserved":true},{"name":"sort","in":"query","schema":{"enum":["entryStartsAt","createdAt"],"type":"string","description":"Optional list sort field. Defaults to event start time. Use `createdAt` to return newest or oldest events first.","examples":["createdAt"]},"allowEmptyValue":true,"allowReserved":true},{"name":"direction","in":"query","schema":{"enum":["asc","desc"],"type":"string","description":"Sort direction for event lists. Defaults to lifecycle-aware event start order unless `sort` is provided.","examples":["desc"]},"allowEmptyValue":true,"allowReserved":true},{"name":"genres","in":"query","schema":{"type":"array","maxItems":20,"items":{"enum":["House","Deep House","Tech House","Progressive House","Minimal House","Romanian Minimal","Afro House","Afro Tech","Acid House","Funky House","Jackin House","Soulful House","Melodic House","Latin House","Techno","Melodic Techno","Hard Techno","Industrial Techno","Minimal Techno","Detroit Techno","Dub Techno","Acid Techno","Hypnotic Techno","Drum & Bass","Jungle","Dubstep","Bass House","Breakbeat","UK Garage","Bassline","Grime","Liquid DnB","Neurofunk","Footwork","Jersey Club","Trance","Psytrance","Progressive Trance","Disco","Nu Disco","Italo Disco","Funk","Soul","Balearic","Hardcore","Hardstyle","Gabber","Happy Hardcore","Amapiano","Gqom","Afrobeats","Kuduro","Singeli","Baile Funk","Reggaeton","Dancehall","Dembow","Ambient","Downtempo","Electronica","Trip Hop","Lo-Fi","Electro","Synth Pop","Industrial","EBM","Indie Dance","Experimental","Hip-Hop","R&B","Jazz","Pop","Rock","Reggae","Live"],"type":"string"},"description":"Filter events by music genre(s). Returns events matching ANY of the provided genres (OR logic). Maximum 20 genres","examples":[["Tech House","Melodic Techno"]]},"style":"deepObject","explode":true,"allowEmptyValue":true,"allowReserved":true},{"name":"categories","in":"query","schema":{"type":"array","maxItems":10,"items":{"enum":["Day Party","Festival","Afterparty","Boat Party","Pool Party","Live Performance","Warehouse","Open Air","Rooftop","Beach Party","Secret Location","DIY","Basement","Free Entry","Donation","Vinyl Only","Silent Disco","Underground","Intimate","Queer Friendly","FLINTA","Safe Space","No Photos","Rave","BYO","Cash Only","Card Only","Food Available","Dress Code"],"type":"string"},"description":"Filter events by category(s). Returns events matching ANY of the provided categories (OR logic). Maximum 10 categories","examples":[["Day Party","Open Air"]]},"style":"deepObject","explode":true,"allowEmptyValue":true,"allowReserved":true},{"name":"featured","in":"query","schema":{"type":"boolean","description":"Filter to only featured (editorial pick) events","examples":[true]},"allowEmptyValue":true,"allowReserved":true}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"object","properties":{"events":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string","pattern":"^evt_[0-9a-z]{26}$","description":"A unique identifier for this event","examples":["evt_01jps5cgsenjrazw6wswmyspa3"],"readOnly":true},"createdAt":{"type":"string","format":"date-time","readOnly":true,"description":"Timestamp in ISO 8601 format when this event was created","examples":["2026-06-07T11:39:32.857Z"]},"updatedAt":{"type":"string","format":"date-time","readOnly":true,"description":"Timestamp in ISO 8601 format when this event was last updated","examples":["2026-06-07T11:39:32.857Z"]},"name":{"type":"string","description":"The title of the event shown to attendees","examples":["Test Event"]},"slug":{"type":"string","description":"URL-friendly identifier for the event","examples":["test-event"]},"description":{"type":"string","description":"Detailed description of the event","examples":["This is only a test..."]},"approval":{"enum":["PENDING","APPROVED","REJECTED"],"type":"string","description":"Approval status of the event","examples":["APPROVED"]},"status":{"enum":["UPCOMING","ENDED"],"type":"string","description":"Current stage of the event lifecycle","examples":["UPCOMING","ENDED"]},"visibility":{"enum":["PUBLIC","PRIVATE","SCHEDULED","PASSCODE","CANCELLED"],"type":"string","description":"Who can see the event","examples":["PUBLIC"]},"currency":{"enum":["AED","ALL","AMD","ANG","AOA","ARS","AUD","AWG","AZN","BAM","BBD","BDT","BGN","BHD","BIF","BMD","BND","BOB","BRL","BSD","BTN","BWP","BZD","CAD","CHF","CLP","CNY","COP","CRC","CVE","CZK","DJF","DKK","DOP","DZD","EGP","ERN","ETB","EUR","FJD","FKP","GBP","GEL","GHS","GIP","GMD","GNF","GTQ","GYD","HKD","HNL","HUF","IDR","ILS","INR","ISK","JMD","JOD","JPY","KES","KGS","KHR","KMF","KRW","KWD","KYD","KZT","LAK","LBP","LKR","LRD","LSL","LYD","MAD","MDL","MGA","MKD","MNT","MOP","MUR","MVR","MWK","MXN","MYR","NAD","NGN","NIO","NOK","NPR","NZD","OMR","PAB","PEN","PGK","PHP","PKR","PLN","PYG","QAR","RON","RSD","RWF","SAR","SBD","SCR","SEK","SGD","SHP","SLE","SRD","SVC","SZL","THB","TJS","TMT","TND","TOP","TRY","TTD","TWD","TZS","UAH","UGX","USD","UYU","UZS","VND","VUV","WST","XAF","XCD","XOF","XPF","ZAR","ZMW","ZWL"],"type":"string","description":"Three-letter ISO 4217 currency code used for ticket prices","examples":["AUD"]},"url":{"type":"string","format":"uri","description":"External URL for the event website or ticket page","examples":["https://example.com"]},"entryStartsAt":{"type":"string","pattern":"^\\d{4}-\\d{2}-\\d{2}T\\d{2}:\\d{2}:\\d{2}$","description":"Wall clock time when event entry begins (no timezone, displays same everywhere)","examples":["2026-06-08T11:39:32"]},"entryEndsAt":{"type":"string","pattern":"^\\d{4}-\\d{2}-\\d{2}T\\d{2}:\\d{2}:\\d{2}$","description":"Wall clock time when event entry ends (no timezone, displays same everywhere)","examples":["2026-06-09T11:39:32"]},"publishAt":{"type":"string","pattern":"^\\d{4}-\\d{2}-\\d{2}T\\d{2}:\\d{2}:\\d{2}$","description":"Wall clock time when the event becomes publicly visible (no timezone)","examples":["2026-06-07T11:39:32"]},"images":{"type":"object","properties":{"mobile":{"type":"object","properties":{"src":{"type":"string","format":"uri","examples":["https://assets.session.services/my-image.jpg"]},"alt":{"type":"string","examples":["My Image"]},"width":{"type":"number","examples":[1080]},"height":{"type":"number","examples":[1080]}},"required":["src","alt","width","height"],"description":"Mobile-optimized image for the event"},"desktop":{"type":"object","properties":{"src":{"type":"string","format":"uri","examples":["https://assets.session.services/my-image.jpg"]},"alt":{"type":"string","examples":["My Image"]},"width":{"type":"number","examples":[1080]},"height":{"type":"number","examples":[1080]}},"required":["src","alt","width","height"],"description":"Desktop-optimized image for the event"}},"required":["mobile","desktop"]},"geohash":{"type":"string","description":"Geohash representing the event location","examples":["r3gx1"]},"location":{"type":"object","properties":{"id":{"type":"string","pattern":"^loc_[0-9a-z]{26}$","description":"Location identifier","examples":["loc_01hk153x00eh99pagyydz03sbz"],"readOnly":true},"googlePlaceId":{"type":"string","description":"Google Place ID for this location","examples":["ChIJP3Sa8ziYEmsRUKgyFmh9AQM"]},"createdAt":{"type":"string","format":"date-time","description":"Timestamp in ISO 8601 format when the location was created","examples":["2026-06-07T11:39:32.857Z"]},"updatedAt":{"type":"string","format":"date-time","description":"Timestamp in ISO 8601 format when the location was last updated","examples":["2026-06-07T11:39:32.857Z"]},"name":{"type":"string","description":"Location name","examples":["Watson's EQ"]},"address":{"type":"string","description":"Formatted address","examples":["The, Entertainment Quarter, 1 Bent St, Moore Park NSW 2021, Australia"]},"city":{"type":"string","description":"City name","examples":["Moore Park"]},"state":{"type":"string","description":"State or region","examples":["New South Wales"]},"postcode":{"type":"string","description":"Postal code","examples":["2021"]},"country":{"type":"string","description":"Country name","examples":["Australia"]},"latitude":{"type":"number","minimum":-90,"maximum":90,"description":"Latitude coordinate","examples":[-33.8944593]},"longitude":{"type":"number","minimum":-180,"maximum":180,"description":"Longitude coordinate","examples":[151.2252255]},"timeZone":{"type":"string","minLength":1,"pattern":"^[A-Za-z0-9_+-]+(\\/[A-Za-z0-9_+-]+)*$","description":"IANA timezone identifier (e.g., 'America/New_York', 'Europe/London', 'Australia/Sydney', 'UTC'). Must be validated against the IANA timezone database where used.","examples":["Australia/Sydney"]},"types":{"type":"array","items":{"type":"string"},"description":"Google Place types indicating the category and nature of this location","examples":[["establishment","point_of_interest","stadium"]]},"description":{"type":"string","description":"AI-generated description of the place, when available","examples":["Historic outdoor amphitheater known for summer concerts"]},"image":{"type":"object","properties":{"src":{"type":"string","format":"uri","examples":["https://assets.session.services/my-image.jpg"]},"alt":{"type":"string","examples":["My Image"]},"width":{"type":"number","examples":[1080]},"height":{"type":"number","examples":[1080]}},"required":["src","alt","width","height"],"description":"Primary location photo"},"venue":{"type":"object","properties":{"id":{"type":"string","pattern":"^ven_[0-9a-z]{26}$","description":"Venue identifier"},"name":{"type":"string","description":"Venue name"},"slug":{"type":"string","description":"URL-friendly venue slug"},"teamId":{"type":"string","description":"Team that owns this venue"},"approval":{"enum":["PENDING","APPROVED","REJECTED"],"type":"string","description":"Venue approval status"},"image":{"type":"object","properties":{"src":{"type":"string","format":"uri","examples":["https://assets.session.services/my-image.jpg"]},"alt":{"type":"string","examples":["My Image"]},"width":{"type":"number","examples":[1080]},"height":{"type":"number","examples":[1080]}},"required":["src","alt","width","height"],"description":"Venue image"},"description":{"type":"string","description":"Venue description"}},"required":["id","name","slug","teamId","approval"],"description":"Denormalized venue details if this location is a managed venue. Only included when venue is approved."}},"required":["id","createdAt","updatedAt","name","address","country","latitude","longitude","timeZone"],"description":"Structured location details for the event"},"teamId":{"type":"string","pattern":"^tem_[0-9a-z]{26}$","description":"Team that owns this event. Denormalized for efficient queries."},"promoterId":{"type":"string","pattern":"^pmt_[0-9a-z]{26}$","description":"Promoter organizing the event. Must belong to the team.","examples":["pmt_01jqpjksnsen9vprw95et60t2m"]},"metadata":{"type":"object","propertyNames":{"type":"string","minLength":1,"maxLength":40,"description":"Metadata key. Must be 1-40 characters"},"additionalProperties":{"type":"string","maxLength":500,"description":"Metadata value. Must not exceed 500 characters"},"description":"Flexible key-value metadata storage for custom configuration. Similar to Stripe's metadata API. Maximum 50 keys, key names up to 40 characters, values up to 500 characters."},"genres":{"type":"array","items":{"type":"string"},"description":"Music genres for the event (1-5 genres)","examples":[["Tech House","Melodic Techno"]]},"categories":{"type":"array","items":{"type":"string"},"description":"Event characteristics like vibe, venue type, and amenities (up to 10)","examples":[["Day Party","Open Air","Free Entry"]]},"featured":{"type":"boolean","description":"Whether this event is an editorial pick","examples":[true]},"likes":{"type":"integer","minimum":0,"maximum":9007199254740991,"description":"Number of users who liked this event","examples":[42]},"inventory":{"type":"object","properties":{"sold":{"type":"number","minimum":0,"description":"Number of tickets sold (net of refunds)"},"reserved":{"type":"number","minimum":0,"description":"Number of tickets reserved"},"available":{"type":"number","minimum":-1,"description":"Number of tickets available (-1 for unlimited)"},"capacity":{"type":"number","minimum":-1,"description":"Total capacity (-1 for unlimited)"}},"required":["sold","reserved","available","capacity"]},"liked":{"type":"boolean","description":"Whether the current user has liked this event","examples":[true,false]},"price":{"anyOf":[{"type":"object","properties":{"base":{"type":"integer","minimum":0,"maximum":9007199254740991,"description":"Base cost of a ticket for this admission type before fees, in cents","examples":[1000]},"booking":{"type":"integer","minimum":0,"maximum":9007199254740991,"description":"Booking fee for the cheapest publicly purchasable admission, in cents","examples":[200]},"currency":{"enum":["AED","ALL","AMD","ANG","AOA","ARS","AUD","AWG","AZN","BAM","BBD","BDT","BGN","BHD","BIF","BMD","BND","BOB","BRL","BSD","BTN","BWP","BZD","CAD","CHF","CLP","CNY","COP","CRC","CVE","CZK","DJF","DKK","DOP","DZD","EGP","ERN","ETB","EUR","FJD","FKP","GBP","GEL","GHS","GIP","GMD","GNF","GTQ","GYD","HKD","HNL","HUF","IDR","ILS","INR","ISK","JMD","JOD","JPY","KES","KGS","KHR","KMF","KRW","KWD","KYD","KZT","LAK","LBP","LKR","LRD","LSL","LYD","MAD","MDL","MGA","MKD","MNT","MOP","MUR","MVR","MWK","MXN","MYR","NAD","NGN","NIO","NOK","NPR","NZD","OMR","PAB","PEN","PGK","PHP","PKR","PLN","PYG","QAR","RON","RSD","RWF","SAR","SBD","SCR","SEK","SGD","SHP","SLE","SRD","SVC","SZL","THB","TJS","TMT","TND","TOP","TRY","TTD","TWD","TZS","UAH","UGX","USD","UYU","UZS","VND","VUV","WST","XAF","XCD","XOF","XPF","ZAR","ZMW","ZWL"],"type":"string","description":"Three-letter ISO 4217 currency code for the cheapest publicly purchasable admission","examples":["AUD"]}},"required":["base","booking","currency"],"description":"Cheapest publicly purchasable admission price for this event, selected by base price","examples":[{"base":1000,"booking":200,"currency":"AUD"}]},{"type":"null"}],"description":"Cheapest publicly purchasable admission price, or null when no public admission is currently available"}},"required":["id","createdAt","updatedAt","name","slug","description","approval","status","visibility","currency","entryStartsAt","entryEndsAt","publishAt","images","geohash","location","teamId","promoterId","price"]},"description":"Array of events for the current result set"},"before":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Cursor for navigating backward in the result set. Omitted when there are no prior results.","examples":["eyJ2ZXJzaW9uIjoxLCJpbnRlbnQiOnsic291cmNlIjoiZGVtbyJ9LCJwb3MiOnsicHJpbWFyeUtleSI6InBybV8wMXM4NTNqIn19"]},"after":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Cursor for navigating forward in the result set. Omitted when there are no subsequent results.","examples":["eyJ2ZXJzaW9uIjoxLCJpbnRlbnQiOnsic291cmNlIjoiZGVtbyJ9LCJwb3MiOnsicHJpbWFyeUtleSI6InBybV8wMXM4NTNkIn19"]},"limit":{"type":"number","minimum":1,"description":"Maximum number of items to return in each result set","examples":[20]}},"required":["events","limit"]}}}}}},"post":{"operationId":"event.create","summary":"Create a new event","tags":["Events"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"name":{"type":"string","description":"The title of the event shown to attendees","examples":["Test Event"]},"slug":{"type":"string","minLength":3,"maxLength":100,"description":"URL-friendly slug for the event. If not provided, will be automatically generated from the name. Must be unique and between 3 and 100 characters","examples":["test-event"]},"description":{"type":"string","description":"Detailed description of the event","examples":["This is only a test..."]},"visibility":{"enum":["PUBLIC","PRIVATE","SCHEDULED","PASSCODE","CANCELLED"],"type":"string","description":"Who can see the event","examples":["PUBLIC"]},"currency":{"enum":["AED","ALL","AMD","ANG","AOA","ARS","AUD","AWG","AZN","BAM","BBD","BDT","BGN","BHD","BIF","BMD","BND","BOB","BRL","BSD","BTN","BWP","BZD","CAD","CHF","CLP","CNY","COP","CRC","CVE","CZK","DJF","DKK","DOP","DZD","EGP","ERN","ETB","EUR","FJD","FKP","GBP","GEL","GHS","GIP","GMD","GNF","GTQ","GYD","HKD","HNL","HUF","IDR","ILS","INR","ISK","JMD","JOD","JPY","KES","KGS","KHR","KMF","KRW","KWD","KYD","KZT","LAK","LBP","LKR","LRD","LSL","LYD","MAD","MDL","MGA","MKD","MNT","MOP","MUR","MVR","MWK","MXN","MYR","NAD","NGN","NIO","NOK","NPR","NZD","OMR","PAB","PEN","PGK","PHP","PKR","PLN","PYG","QAR","RON","RSD","RWF","SAR","SBD","SCR","SEK","SGD","SHP","SLE","SRD","SVC","SZL","THB","TJS","TMT","TND","TOP","TRY","TTD","TWD","TZS","UAH","UGX","USD","UYU","UZS","VND","VUV","WST","XAF","XCD","XOF","XPF","ZAR","ZMW","ZWL"],"type":"string","description":"Three-letter ISO 4217 currency code used for ticket prices","examples":["AUD"]},"url":{"type":"string","format":"uri","description":"External URL for the event website or ticket page","examples":["https://example.com"]},"entryStartsAt":{"type":"string","pattern":"^\\d{4}-\\d{2}-\\d{2}T\\d{2}:\\d{2}:\\d{2}$","description":"Wall clock time when event entry begins (no timezone, displays same everywhere)","examples":["2026-06-08T11:39:32"]},"entryEndsAt":{"type":"string","pattern":"^\\d{4}-\\d{2}-\\d{2}T\\d{2}:\\d{2}:\\d{2}$","description":"Wall clock time when event entry ends (no timezone, displays same everywhere)","examples":["2026-06-09T11:39:32"]},"publishAt":{"type":"string","pattern":"^\\d{4}-\\d{2}-\\d{2}T\\d{2}:\\d{2}:\\d{2}$","description":"Wall clock time when the event becomes publicly visible (no timezone)","examples":["2026-06-07T11:39:32"]},"images":{"type":"object","properties":{"mobile":{"type":"object","properties":{"src":{"type":"string","format":"uri","examples":["https://assets.session.services/my-image.jpg"]},"alt":{"type":"string","examples":["My Image"]},"width":{"type":"number","examples":[1080]},"height":{"type":"number","examples":[1080]}},"required":["src","alt","width","height"],"description":"Mobile-optimized image for the event"},"desktop":{"type":"object","properties":{"src":{"type":"string","format":"uri","examples":["https://assets.session.services/my-image.jpg"]},"alt":{"type":"string","examples":["My Image"]},"width":{"type":"number","examples":[1080]},"height":{"type":"number","examples":[1080]}},"required":["src","alt","width","height"],"description":"Desktop-optimized image for the event"}},"required":["mobile","desktop"]},"promoterId":{"type":"string","pattern":"^pmt_[0-9a-z]{26}$","description":"Promoter organizing the event. Must belong to the team.","examples":["pmt_01jqpjksnsen9vprw95et60t2m"]},"metadata":{"type":"object","propertyNames":{"type":"string","minLength":1,"maxLength":40,"description":"Metadata key. Must be 1-40 characters"},"additionalProperties":{"type":"string","maxLength":500,"description":"Metadata value. Must not exceed 500 characters"},"description":"Flexible key-value metadata storage for custom configuration. Similar to Stripe's metadata API. Maximum 50 keys, key names up to 40 characters, values up to 500 characters."},"genres":{"type":"array","minItems":1,"maxItems":5,"items":{"enum":["House","Deep House","Tech House","Progressive House","Minimal House","Romanian Minimal","Afro House","Afro Tech","Acid House","Funky House","Jackin House","Soulful House","Melodic House","Latin House","Techno","Melodic Techno","Hard Techno","Industrial Techno","Minimal Techno","Detroit Techno","Dub Techno","Acid Techno","Hypnotic Techno","Drum & Bass","Jungle","Dubstep","Bass House","Breakbeat","UK Garage","Bassline","Grime","Liquid DnB","Neurofunk","Footwork","Jersey Club","Trance","Psytrance","Progressive Trance","Disco","Nu Disco","Italo Disco","Funk","Soul","Balearic","Hardcore","Hardstyle","Gabber","Happy Hardcore","Amapiano","Gqom","Afrobeats","Kuduro","Singeli","Baile Funk","Reggaeton","Dancehall","Dembow","Ambient","Downtempo","Electronica","Trip Hop","Lo-Fi","Electro","Synth Pop","Industrial","EBM","Indie Dance","Experimental","Hip-Hop","R&B","Jazz","Pop","Rock","Reggae","Live"],"type":"string"},"description":"Music genres for the event (1-5 genres)","examples":[["Tech House","Melodic Techno"]]},"categories":{"type":"array","maxItems":10,"items":{"enum":["Day Party","Festival","Afterparty","Boat Party","Pool Party","Live Performance","Warehouse","Open Air","Rooftop","Beach Party","Secret Location","DIY","Basement","Free Entry","Donation","Vinyl Only","Silent Disco","Underground","Intimate","Queer Friendly","FLINTA","Safe Space","No Photos","Rave","BYO","Cash Only","Card Only","Food Available","Dress Code"],"type":"string"},"description":"Event characteristics like vibe, venue type, and amenities (up to 10)","examples":[["Day Party","Open Air","Free Entry"]]},"passcode":{"type":"string","description":"Passcode for protected access to the event"},"locationId":{"type":"string","pattern":"^loc_[0-9a-z]{26}$","description":"ID of an existing location. Either locationId or googlePlaceId must be provided.","examples":["loc_01jqpjksnsen9vprw95et60t2m"]},"googlePlaceId":{"type":"string","description":"Google Place ID to create a new location from. Either locationId or googlePlaceId must be provided.","examples":["ChIJN1t_tDeuEmsRUsoyG83frY4"]}},"required":["name","description","visibility","currency","entryStartsAt","entryEndsAt","publishAt","images","promoterId"],"additionalProperties":false}}}},"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"object","properties":{"event":{"$ref":"#/components/schemas/Event"}},"required":["event"]}}}}}}},"/events/{key}/duplicate":{"post":{"operationId":"event.duplicate","summary":"Duplicate an event","description":"Create a new event by copying event details, sections, and admissions from an existing event.","tags":["Events"],"parameters":[{"name":"key","in":"path","required":true,"schema":{"type":"string","minLength":1,"description":"Event key - either a unique ID (evt_xxx format) or URL-friendly slug","examples":["evt_01jps5cgsenjrazw6wswmyspa3","test-event"]}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"name":{"type":"string","minLength":1,"description":"Name for the duplicated event","examples":["Test Event (Copy)"]},"entryStartsAt":{"type":"string","pattern":"^\\d{4}-\\d{2}-\\d{2}T\\d{2}:\\d{2}:\\d{2}$","description":"New event entry start time. Other copied event and admission datetimes are shifted by the same offset.","examples":["2026-06-08T11:39:32"]}},"required":["name","entryStartsAt"],"additionalProperties":false}}}},"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"object","properties":{"event":{"$ref":"#/components/schemas/Event"}},"required":["event"]}}}}}}},"/events/{key}/feature":{"post":{"operationId":"event.feature","summary":"Toggle event featured status","description":"Set or remove featured status on an event. Tenant admin only.","tags":["Events"],"parameters":[{"name":"key","in":"path","required":true,"schema":{"type":"string","minLength":1,"description":"Event key - either a unique ID (evt_xxx format) or URL-friendly slug","examples":["evt_01jps5cgsenjrazw6wswmyspa3","test-event"]}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"featured":{"type":"boolean","description":"Whether the event should be featured (editorial pick)","examples":[true,false]}},"required":["featured"],"additionalProperties":false}}}},"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"object","properties":{"event":{"$ref":"#/components/schemas/Event"}},"required":["event"]}}}}}}},"/events/{eventId}/performance/summary":{"get":{"operationId":"event.performance.summary","summary":"Get event performance summary","description":"Top-level KPI metrics with period comparison based on tracking events","tags":["Event Performance"],"parameters":[{"name":"eventId","in":"path","required":true,"schema":{"type":"string","description":"Event identifier"}},{"name":"startDate","in":"query","schema":{"type":"string","format":"date","description":"Start date (YYYY-MM-DD)"},"allowEmptyValue":true,"allowReserved":true},{"name":"endDate","in":"query","schema":{"type":"string","format":"date","description":"End date (YYYY-MM-DD)"},"allowEmptyValue":true,"allowReserved":true},{"name":"timeZone","in":"query","schema":{"type":"string","minLength":1,"maxLength":128,"description":"IANA time zone for interpreting date ranges"},"allowEmptyValue":true,"allowReserved":true}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"object","properties":{"meta":{"type":"object","properties":{"eventId":{"type":"string","description":"Event identifier"},"eventName":{"type":"string","description":"Event name"},"currency":{"type":"string","description":"Currency code (e.g., USD, EUR)"},"dateRange":{"type":"object","properties":{"start":{"type":"string","description":"Period start date"},"end":{"type":"string","description":"Period end date"}},"required":["start","end"],"description":"Present only when startDate/endDate are provided"},"comparisonRange":{"type":"object","properties":{"start":{"type":"string","description":"Comparison period start date"},"end":{"type":"string","description":"Comparison period end date"}},"required":["start","end"],"description":"Present only when startDate/endDate are provided"}},"required":["eventId","eventName","currency"]},"metrics":{"type":"object","properties":{"revenue":{"type":"object","properties":{"value":{"type":"number","description":"Current period value"},"previous":{"type":"number","description":"Comparison period value"},"change":{"type":"number","description":"Percentage change from previous period"},"changeType":{"enum":["increase","decrease","unchanged"],"type":"string","description":"Direction of change"}},"required":["value","previous","change","changeType"],"description":"Total revenue in cents"},"ticketsSold":{"type":"object","properties":{"value":{"type":"number","description":"Current period value"},"previous":{"type":"number","description":"Comparison period value"},"change":{"type":"number","description":"Percentage change from previous period"},"changeType":{"enum":["increase","decrease","unchanged"],"type":"string","description":"Direction of change"}},"required":["value","previous","change","changeType"],"description":"Number of tickets sold"},"orderCount":{"type":"object","properties":{"value":{"type":"number","description":"Current period value"},"previous":{"type":"number","description":"Comparison period value"},"change":{"type":"number","description":"Percentage change from previous period"},"changeType":{"enum":["increase","decrease","unchanged"],"type":"string","description":"Direction of change"}},"required":["value","previous","change","changeType"],"description":"Number of orders placed"},"averageOrderValue":{"type":"object","properties":{"value":{"type":"number","description":"Current period value"},"previous":{"type":"number","description":"Comparison period value"},"change":{"type":"number","description":"Percentage change from previous period"},"changeType":{"enum":["increase","decrease","unchanged"],"type":"string","description":"Direction of change"}},"required":["value","previous","change","changeType"],"description":"Average order value in cents"},"conversionRate":{"type":"object","properties":{"value":{"type":"number","description":"Current period value"},"previous":{"type":"number","description":"Comparison period value"},"change":{"type":"number","description":"Percentage change from previous period"},"changeType":{"enum":["increase","decrease","unchanged"],"type":"string","description":"Direction of change"}},"required":["value","previous","change","changeType"],"description":"Conversion rate as percentage"},"pageViews":{"type":"object","properties":{"value":{"type":"number","description":"Current period value"},"previous":{"type":"number","description":"Comparison period value"},"change":{"type":"number","description":"Percentage change from previous period"},"changeType":{"enum":["increase","decrease","unchanged"],"type":"string","description":"Direction of change"}},"required":["value","previous","change","changeType"],"description":"Total page/product views"},"uniqueVisitors":{"type":"object","properties":{"value":{"type":"number","description":"Current period value"},"previous":{"type":"number","description":"Comparison period value"},"change":{"type":"number","description":"Percentage change from previous period"},"changeType":{"enum":["increase","decrease","unchanged"],"type":"string","description":"Direction of change"}},"required":["value","previous","change","changeType"],"description":"Unique visitors (estimated)"},"checkoutStarted":{"type":"object","properties":{"value":{"type":"number","description":"Current period value"},"previous":{"type":"number","description":"Comparison period value"},"change":{"type":"number","description":"Percentage change from previous period"},"changeType":{"enum":["increase","decrease","unchanged"],"type":"string","description":"Direction of change"}},"required":["value","previous","change","changeType"],"description":"Number of checkout started events (external link clicks for external events)"}},"required":["revenue","ticketsSold","orderCount","averageOrderValue","conversionRate","pageViews","uniqueVisitors","checkoutStarted"]}},"required":["meta","metrics"]}}}}}}},"/events/{eventId}/performance/tickets":{"get":{"operationId":"event.performance.tickets","summary":"Get ticket sales performance","description":"Time series of sold tickets and successful-order revenue by period, with admission and section breakdowns","tags":["Event Performance"],"parameters":[{"name":"eventId","in":"path","required":true,"schema":{"type":"string","description":"Event identifier"}},{"name":"granularity","in":"query","required":false,"schema":{"enum":["HOUR","DAY","WEEK","MONTH"],"type":"string","default":"DAY","description":"Time granularity for aggregation"},"allowEmptyValue":true,"allowReserved":true},{"name":"breakdown","in":"query","required":false,"schema":{"enum":["TOTAL"],"type":"string","default":"TOTAL","description":"Breakdown type (always TOTAL for performance)"},"allowEmptyValue":true,"allowReserved":true},{"name":"includeBreakdowns","in":"query","required":false,"schema":{"type":"boolean","default":true,"description":"Whether to include admission and section breakdowns in each time bucket"},"allowEmptyValue":true,"allowReserved":true},{"name":"startDate","in":"query","required":true,"schema":{"type":"string","format":"date","description":"Start date (YYYY-MM-DD)"},"allowEmptyValue":true,"allowReserved":true},{"name":"endDate","in":"query","required":true,"schema":{"type":"string","format":"date","description":"End date (YYYY-MM-DD)"},"allowEmptyValue":true,"allowReserved":true},{"name":"timeZone","in":"query","required":false,"schema":{"type":"string","minLength":1,"maxLength":128,"description":"IANA time zone for interpreting date ranges"},"allowEmptyValue":true,"allowReserved":true}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"object","properties":{"meta":{"type":"object","properties":{"eventId":{"type":"string"},"eventName":{"type":"string","description":"Event name"},"currency":{"type":"string","description":"Currency code"},"dateRange":{"type":"object","properties":{"start":{"type":"string","description":"Period start date"},"end":{"type":"string","description":"Period end date"}},"required":["start","end"]},"granularity":{"enum":["HOUR","DAY","WEEK","MONTH"],"type":"string"}},"required":["eventId","eventName","currency","dateRange","granularity"]},"series":{"type":"array","items":{"type":"object","properties":{"date":{"type":"string","description":"Date or timestamp"},"tickets":{"type":"number","description":"Tickets sold in period"},"revenue":{"type":"number","description":"Revenue in period (cents)"},"admissions":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"},"quantity":{"type":"number"}},"required":["id","name","quantity"]}},"sections":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"},"quantity":{"type":"number"}},"required":["id","name","quantity"]}}},"required":["date","tickets","revenue","admissions","sections"]}}},"required":["meta","series"]}}}}}}},"/events/{eventId}/performance/timeseries":{"get":{"operationId":"event.performance.timeseries","summary":"Get event metric time series","description":"Per-bucket series of revenue, tickets, orders, page views, visitors, and conversion rate for the selected range","tags":["Event Performance"],"parameters":[{"name":"eventId","in":"path","required":true,"schema":{"type":"string","description":"Event identifier"}},{"name":"granularity","in":"query","required":false,"schema":{"enum":["HOUR","DAY","WEEK","MONTH"],"type":"string","description":"Time granularity for aggregation","default":"DAY"},"allowEmptyValue":true,"allowReserved":true},{"name":"startDate","in":"query","required":true,"schema":{"type":"string","format":"date","description":"Start date (YYYY-MM-DD)"},"allowEmptyValue":true,"allowReserved":true},{"name":"endDate","in":"query","required":true,"schema":{"type":"string","format":"date","description":"End date (YYYY-MM-DD)"},"allowEmptyValue":true,"allowReserved":true},{"name":"timeZone","in":"query","required":false,"schema":{"type":"string","minLength":1,"maxLength":128,"description":"IANA time zone for interpreting date ranges"},"allowEmptyValue":true,"allowReserved":true}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"object","properties":{"meta":{"type":"object","properties":{"eventId":{"type":"string"},"eventName":{"type":"string","description":"Event name"},"currency":{"type":"string","description":"Currency code"},"dateRange":{"type":"object","properties":{"start":{"type":"string","description":"Period start date"},"end":{"type":"string","description":"Period end date"}},"required":["start","end"]},"granularity":{"enum":["HOUR","DAY","WEEK","MONTH"],"type":"string","description":"Time granularity for aggregation"}},"required":["eventId","eventName","currency","dateRange","granularity"]},"series":{"type":"array","items":{"type":"object","properties":{"date":{"type":"string","description":"Date or timestamp"},"revenue":{"type":"number","description":"Net revenue in period (cents)"},"tickets":{"type":"number","description":"Tickets sold in period"},"orders":{"type":"number","description":"Completed orders in period"},"pageViews":{"type":"number","description":"Product/page views in period"},"visitors":{"type":"number","description":"Unique visitors in period (estimated)"},"checkoutStarted":{"type":"number","description":"Checkout started events in period"},"convertedVisitors":{"type":"number","description":"Unique visitors who completed an order in period"},"eligibleVisitors":{"type":"number","description":"Unique visitors eligible for conversion in period"},"conversionRate":{"type":"number","description":"Converted visitors divided by eligible visitors in period (%)"}},"required":["date","revenue","tickets","orders","pageViews","visitors","checkoutStarted","convertedVisitors","eligibleVisitors","conversionRate"]}}},"required":["meta","series"]}}}}}}},"/events/{eventId}/performance/funnel":{"get":{"operationId":"event.performance.funnel","summary":"Get sales funnel performance","description":"Conversion funnel showing drop-off at each stage from tracking events","tags":["Event Performance"],"parameters":[{"name":"eventId","in":"path","required":true,"schema":{"type":"string","description":"Event identifier"}},{"name":"startDate","in":"query","required":true,"schema":{"type":"string","format":"date","description":"Start date (YYYY-MM-DD)"},"allowEmptyValue":true,"allowReserved":true},{"name":"endDate","in":"query","required":true,"schema":{"type":"string","format":"date","description":"End date (YYYY-MM-DD)"},"allowEmptyValue":true,"allowReserved":true},{"name":"timeZone","in":"query","required":false,"schema":{"type":"string","minLength":1,"maxLength":128,"description":"IANA time zone for interpreting date ranges"},"allowEmptyValue":true,"allowReserved":true}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"object","properties":{"meta":{"type":"object","properties":{"eventId":{"type":"string"},"eventName":{"type":"string","description":"Event name"},"currency":{"type":"string","description":"Currency code"},"dateRange":{"type":"object","properties":{"start":{"type":"string","description":"Period start date"},"end":{"type":"string","description":"Period end date"}},"required":["start","end"]}},"required":["eventId","eventName","currency","dateRange"]},"totals":{"type":"object","properties":{"entered":{"type":"number","description":"Total entered funnel (product viewed)"},"completed":{"type":"number","description":"Total completed (orders)"},"overallConversionRate":{"type":"number","description":"Overall conversion rate (%)"},"totalDropped":{"type":"number","description":"Total dropped off"}},"required":["entered","completed","overallConversionRate","totalDropped"]},"stages":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string","description":"Funnel stage identifier"},"name":{"type":"string","description":"Human-readable stage name"},"count":{"type":"number","description":"Number of events at this stage"},"conversionRate":{"type":"number","description":"Conversion rate from first stage (%)"},"dropoffRate":{"type":"number","description":"Dropoff rate from previous stage (%)"}},"required":["id","name","count","conversionRate","dropoffRate"]}}},"required":["meta","totals","stages"]}}}}}}},"/events/{eventId}/performance/campaigns":{"get":{"operationId":"event.performance.campaigns","summary":"Get campaign performance","description":"Marketing campaign metrics from tracking events (UTM campaign parameter)","tags":["Event Performance"],"parameters":[{"name":"eventId","in":"path","required":true,"schema":{"type":"string"}},{"name":"limit","in":"query","required":false,"schema":{"type":"number","minimum":1,"maximum":100,"default":10},"allowEmptyValue":true,"allowReserved":true},{"name":"sortBy","in":"query","required":false,"schema":{"enum":["revenue","tickets","orders","pageViews","visitors","conversion","clicks","clickRate"],"type":"string","description":"Metric used to sort breakdown rows before limiting results","default":"orders"},"allowEmptyValue":true,"allowReserved":true},{"name":"startDate","in":"query","required":true,"schema":{"type":"string","format":"date","description":"Start date (YYYY-MM-DD)"},"allowEmptyValue":true,"allowReserved":true},{"name":"endDate","in":"query","required":true,"schema":{"type":"string","format":"date","description":"End date (YYYY-MM-DD)"},"allowEmptyValue":true,"allowReserved":true},{"name":"timeZone","in":"query","required":false,"schema":{"type":"string","minLength":1,"maxLength":128,"description":"IANA time zone for interpreting date ranges"},"allowEmptyValue":true,"allowReserved":true}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"object","properties":{"data":{"type":"array","items":{"type":"object","properties":{"campaign":{"type":"string"},"views":{"type":"number"},"visitors":{"type":"number"},"clicks":{"type":"number"},"orders":{"type":"number"},"tickets":{"type":"number"},"revenue":{"type":"number"},"conversionRate":{"type":"number"},"sharePercent":{"type":"number"}},"required":["campaign","views","visitors","orders","tickets","revenue","conversionRate","sharePercent"]}},"totalOrders":{"type":"number"},"totalTickets":{"type":"number"},"totalRevenue":{"type":"number"}},"required":["data","totalOrders","totalTickets","totalRevenue"]}}}}}}},"/events/{eventId}/performance/coupons":{"get":{"operationId":"event.performance.coupons","summary":"Get coupon performance","description":"Coupon usage and revenue from actual order data","tags":["Event Performance"],"parameters":[{"name":"eventId","in":"path","required":true,"schema":{"type":"string"}},{"name":"limit","in":"query","required":false,"schema":{"type":"number","minimum":1,"maximum":100,"default":10},"allowEmptyValue":true,"allowReserved":true},{"name":"startDate","in":"query","required":true,"schema":{"type":"string","format":"date","description":"Start date (YYYY-MM-DD)"},"allowEmptyValue":true,"allowReserved":true},{"name":"endDate","in":"query","required":true,"schema":{"type":"string","format":"date","description":"End date (YYYY-MM-DD)"},"allowEmptyValue":true,"allowReserved":true},{"name":"timeZone","in":"query","required":false,"schema":{"type":"string","minLength":1,"maxLength":128,"description":"IANA time zone for interpreting date ranges"},"allowEmptyValue":true,"allowReserved":true}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"object","properties":{"meta":{"type":"object","properties":{"eventId":{"type":"string","description":"Event identifier"},"eventName":{"type":"string","description":"Event name"},"currency":{"type":"string","description":"Currency code (e.g., USD, EUR)"},"dateRange":{"type":"object","properties":{"start":{"type":"string","description":"Period start date"},"end":{"type":"string","description":"Period end date"}},"required":["start","end"]},"limit":{"type":"number","description":"Maximum number of results returned"}},"required":["eventId","eventName","currency","dateRange","limit"]},"totals":{"type":"object","properties":{"uses":{"type":"number","description":"Total coupon uses across all coupons"},"revenue":{"type":"number","description":"Total revenue from coupon-discounted orders (cents)"}},"required":["uses","revenue"]},"coupons":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string","description":"Coupon code identifier"},"code":{"type":"string","description":"Coupon code"},"uses":{"type":"number","description":"Number of times this coupon was used"},"revenue":{"type":"number","description":"Revenue from this coupon (cents)"},"discount":{"type":"string","description":"Discount amount or percentage"},"share":{"type":"number","description":"Share of total coupon uses (%)"}},"required":["id","code","uses","revenue","discount","share"]},"description":"Coupons sorted by uses descending"}},"required":["meta","totals","coupons"]}}}}}}},"/events/{eventId}/performance/mediums":{"get":{"operationId":"event.performance.mediums","summary":"Get traffic medium performance","description":"Performance by traffic medium (social, email, cpc) from tracking events","tags":["Event Performance"],"parameters":[{"name":"eventId","in":"path","required":true,"schema":{"type":"string"}},{"name":"limit","in":"query","required":false,"schema":{"type":"number","minimum":1,"maximum":100,"default":10},"allowEmptyValue":true,"allowReserved":true},{"name":"sortBy","in":"query","required":false,"schema":{"enum":["revenue","tickets","orders","pageViews","visitors","conversion","clicks","clickRate"],"type":"string","description":"Metric used to sort breakdown rows before limiting results","default":"orders"},"allowEmptyValue":true,"allowReserved":true},{"name":"startDate","in":"query","required":true,"schema":{"type":"string","format":"date","description":"Start date (YYYY-MM-DD)"},"allowEmptyValue":true,"allowReserved":true},{"name":"endDate","in":"query","required":true,"schema":{"type":"string","format":"date","description":"End date (YYYY-MM-DD)"},"allowEmptyValue":true,"allowReserved":true},{"name":"timeZone","in":"query","required":false,"schema":{"type":"string","minLength":1,"maxLength":128,"description":"IANA time zone for interpreting date ranges"},"allowEmptyValue":true,"allowReserved":true}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"object","properties":{"meta":{"type":"object","properties":{"eventId":{"type":"string","description":"Event identifier"},"eventName":{"type":"string","description":"Event name"},"currency":{"type":"string","description":"Currency code (e.g., USD, EUR)"},"dateRange":{"type":"object","properties":{"start":{"type":"string","description":"Period start date"},"end":{"type":"string","description":"Period end date"}},"required":["start","end"]},"limit":{"type":"number","description":"Maximum number of results returned"}},"required":["eventId","eventName","currency","dateRange","limit"]},"totals":{"type":"object","properties":{"views":{"type":"number","description":"Total views across all mediums"},"visitors":{"type":"number","description":"Total unique visitors across all mediums"},"orders":{"type":"number","description":"Total orders across all mediums"},"tickets":{"type":"number","description":"Total tickets across all mediums"},"revenue":{"type":"number","description":"Total revenue across all mediums (cents)"}},"required":["views","visitors","orders","tickets","revenue"]},"mediums":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string","description":"Medium identifier (e.g., 'social', 'email')"},"name":{"type":"string","description":"Medium name"},"views":{"type":"number","description":"Views from this medium"},"visitors":{"type":"number","description":"Unique visitors from this medium"},"clicks":{"type":"number","description":"Ticket link clicks"},"orders":{"type":"number","description":"Orders from this medium"},"tickets":{"type":"number","description":"Tickets from this medium"},"revenue":{"type":"number","description":"Revenue from this medium (cents)"},"conversionRate":{"type":"number","description":"Conversion rate (%)"},"share":{"type":"number","description":"Share of total orders (%)"}},"required":["id","name","views","visitors","orders","tickets","revenue","conversionRate","share"]},"description":"Mediums sorted by orders descending"}},"required":["meta","totals","mediums"]}}}}}}},"/events/{eventId}/performance/devices":{"get":{"operationId":"event.performance.devices","summary":"Get device performance","description":"Performance breakdown by device type from tracking events","tags":["Event Performance"],"parameters":[{"name":"eventId","in":"path","required":true,"schema":{"type":"string"}},{"name":"limit","in":"query","required":false,"schema":{"type":"number","minimum":1,"maximum":100,"default":10},"allowEmptyValue":true,"allowReserved":true},{"name":"sortBy","in":"query","required":false,"schema":{"enum":["revenue","tickets","orders","pageViews","visitors","conversion","clicks","clickRate"],"type":"string","description":"Metric used to sort breakdown rows before limiting results","default":"orders"},"allowEmptyValue":true,"allowReserved":true},{"name":"startDate","in":"query","required":true,"schema":{"type":"string","format":"date","description":"Start date (YYYY-MM-DD)"},"allowEmptyValue":true,"allowReserved":true},{"name":"endDate","in":"query","required":true,"schema":{"type":"string","format":"date","description":"End date (YYYY-MM-DD)"},"allowEmptyValue":true,"allowReserved":true},{"name":"timeZone","in":"query","required":false,"schema":{"type":"string","minLength":1,"maxLength":128,"description":"IANA time zone for interpreting date ranges"},"allowEmptyValue":true,"allowReserved":true}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"object","properties":{"meta":{"type":"object","properties":{"eventId":{"type":"string","description":"Event identifier"},"eventName":{"type":"string","description":"Event name"},"currency":{"type":"string","description":"Currency code (e.g., USD, EUR)"},"dateRange":{"type":"object","properties":{"start":{"type":"string","description":"Period start date"},"end":{"type":"string","description":"Period end date"}},"required":["start","end"]}},"required":["eventId","eventName","currency","dateRange"]},"totals":{"type":"object","properties":{"views":{"type":"number","description":"Total views across all devices"},"visitors":{"type":"number","description":"Total unique visitors across all devices"},"revenue":{"type":"number","description":"Total revenue across all devices (cents)"},"orders":{"type":"number","description":"Total orders across all devices"},"tickets":{"type":"number","description":"Total tickets across all devices"}},"required":["views","visitors","revenue","orders","tickets"]},"devices":{"type":"array","items":{"type":"object","properties":{"id":{"enum":["MOBILE","DESKTOP","TABLET","Unknown"],"type":"string","description":"Device type"},"name":{"type":"string","description":"Human-readable device name"},"views":{"type":"number","description":"Page views from this device"},"visitors":{"type":"number","description":"Unique visitors from this device"},"revenue":{"type":"number","description":"Revenue from this device (cents)"},"clicks":{"type":"number","description":"Ticket link clicks"},"orders":{"type":"number","description":"Orders from this device"},"tickets":{"type":"number","description":"Tickets from this device"},"conversionRate":{"type":"number","description":"Conversion rate (%)"},"share":{"type":"number","description":"Share of total orders (%)"}},"required":["id","name","visitors","revenue","orders","tickets","conversionRate","share"]},"description":"Devices sorted by orders descending"}},"required":["meta","totals","devices"]}}}}}}},"/events/{eventId}/performance/browsers":{"get":{"operationId":"event.performance.browsers","summary":"Get browser performance","description":"Traffic breakdown by browser from tracking events","tags":["Event Performance"],"parameters":[{"name":"eventId","in":"path","required":true,"schema":{"type":"string"}},{"name":"limit","in":"query","required":false,"schema":{"type":"number","minimum":1,"maximum":100,"default":10},"allowEmptyValue":true,"allowReserved":true},{"name":"sortBy","in":"query","required":false,"schema":{"enum":["revenue","tickets","orders","pageViews","visitors","conversion","clicks","clickRate"],"type":"string","description":"Metric used to sort breakdown rows before limiting results","default":"visitors"},"allowEmptyValue":true,"allowReserved":true},{"name":"startDate","in":"query","required":true,"schema":{"type":"string","format":"date","description":"Start date (YYYY-MM-DD)"},"allowEmptyValue":true,"allowReserved":true},{"name":"endDate","in":"query","required":true,"schema":{"type":"string","format":"date","description":"End date (YYYY-MM-DD)"},"allowEmptyValue":true,"allowReserved":true},{"name":"timeZone","in":"query","required":false,"schema":{"type":"string","minLength":1,"maxLength":128,"description":"IANA time zone for interpreting date ranges"},"allowEmptyValue":true,"allowReserved":true}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"object","properties":{"meta":{"type":"object","properties":{"eventId":{"type":"string","description":"Event identifier"},"eventName":{"type":"string","description":"Event name"},"currency":{"type":"string","description":"Currency code (e.g., USD, EUR)"},"dateRange":{"type":"object","properties":{"start":{"type":"string","description":"Period start date"},"end":{"type":"string","description":"Period end date"}},"required":["start","end"]},"limit":{"type":"number","description":"Maximum number of results returned"}},"required":["eventId","eventName","currency","dateRange","limit"]},"totals":{"type":"object","properties":{"views":{"type":"number","description":"Total views across all browsers"},"visitors":{"type":"number","description":"Total unique visitors across all browsers"},"orders":{"type":"number","description":"Total orders across all browsers"},"tickets":{"type":"number","description":"Total tickets across all browsers"},"revenue":{"type":"number","description":"Total revenue across all browsers (cents)"}},"required":["views","visitors","orders","tickets","revenue"]},"browsers":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string","description":"Browser identifier"},"name":{"type":"string","description":"Human-readable browser name"},"views":{"type":"number","description":"Page views from this browser"},"clicks":{"type":"number","description":"Ticket link clicks"},"visitors":{"type":"number","description":"Unique visitors from this browser"},"orders":{"type":"number","description":"Orders from this browser"},"tickets":{"type":"number","description":"Tickets from this browser"},"revenue":{"type":"number","description":"Revenue from this browser (cents)"},"conversionRate":{"type":"number","description":"Conversion rate (%)"},"share":{"type":"number","description":"Share of total visitors (%)"}},"required":["id","name","views","visitors","orders","tickets","revenue","conversionRate","share"]},"description":"Browsers sorted by visitors descending"}},"required":["meta","totals","browsers"]}}}}}}},"/events/{eventId}/performance/locations":{"get":{"operationId":"event.performance.locations","summary":"Get geographic performance","description":"Performance by geographic location from tracking events","tags":["Event Performance"],"parameters":[{"name":"eventId","in":"path","required":true,"schema":{"type":"string"}},{"name":"limit","in":"query","required":false,"schema":{"type":"number","minimum":1,"maximum":100,"default":10},"allowEmptyValue":true,"allowReserved":true},{"name":"sortBy","in":"query","required":false,"schema":{"enum":["revenue","tickets","orders","pageViews","visitors","conversion","clicks","clickRate"],"type":"string","description":"Metric used to sort breakdown rows before limiting results","default":"pageViews"},"allowEmptyValue":true,"allowReserved":true},{"name":"startDate","in":"query","required":true,"schema":{"type":"string","format":"date","description":"Start date (YYYY-MM-DD)"},"allowEmptyValue":true,"allowReserved":true},{"name":"endDate","in":"query","required":true,"schema":{"type":"string","format":"date","description":"End date (YYYY-MM-DD)"},"allowEmptyValue":true,"allowReserved":true},{"name":"timeZone","in":"query","required":false,"schema":{"type":"string","minLength":1,"maxLength":128,"description":"IANA time zone for interpreting date ranges"},"allowEmptyValue":true,"allowReserved":true}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"object","properties":{"meta":{"type":"object","properties":{"eventId":{"type":"string","description":"Event identifier"},"eventName":{"type":"string","description":"Event name"},"currency":{"type":"string","description":"Currency code (e.g., USD, EUR)"},"dateRange":{"type":"object","properties":{"start":{"type":"string","description":"Period start date"},"end":{"type":"string","description":"Period end date"}},"required":["start","end"]},"limit":{"type":"number","description":"Maximum number of results returned"}},"required":["eventId","eventName","currency","dateRange","limit"]},"totals":{"type":"object","properties":{"views":{"type":"number","description":"Total views across all locations"},"visitors":{"type":"number","description":"Total unique visitors across all locations"},"orders":{"type":"number","description":"Total orders across all locations"},"tickets":{"type":"number","description":"Total tickets across all locations"},"revenue":{"type":"number","description":"Total revenue across all locations (cents)"}},"required":["views","visitors","orders","tickets","revenue"]},"locations":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string","description":"Location/region code (e.g., 'US-CA', 'GB')"},"name":{"type":"string","description":"Human-readable location name"},"views":{"type":"number","description":"Page views from this location"},"visitors":{"type":"number","description":"Unique visitors from this location"},"clicks":{"type":"number","description":"Ticket link clicks"},"orders":{"type":"number","description":"Orders from this location"},"tickets":{"type":"number","description":"Tickets from this location"},"revenue":{"type":"number","description":"Revenue from this location (cents)"},"conversionRate":{"type":"number","description":"Conversion rate (%)"},"share":{"type":"number","description":"Share of total views (%)"}},"required":["id","name","views","visitors","orders","tickets","revenue","conversionRate","share"]},"description":"Locations sorted by views descending"}},"required":["meta","totals","locations"]}}}}}}},"/events/{eventId}/performance/traffic":{"get":{"operationId":"event.performance.traffic","summary":"Get traffic source performance","description":"Top referral sources and channels from tracking events","tags":["Event Performance"],"parameters":[{"name":"eventId","in":"path","required":true,"schema":{"type":"string"}},{"name":"limit","in":"query","required":false,"schema":{"type":"number","minimum":1,"maximum":100,"default":10},"allowEmptyValue":true,"allowReserved":true},{"name":"sortBy","in":"query","required":false,"schema":{"enum":["revenue","tickets","orders","pageViews","visitors","conversion","clicks","clickRate"],"type":"string","description":"Metric used to sort breakdown rows before limiting results","default":"pageViews"},"allowEmptyValue":true,"allowReserved":true},{"name":"startDate","in":"query","required":true,"schema":{"type":"string","format":"date","description":"Start date (YYYY-MM-DD)"},"allowEmptyValue":true,"allowReserved":true},{"name":"endDate","in":"query","required":true,"schema":{"type":"string","format":"date","description":"End date (YYYY-MM-DD)"},"allowEmptyValue":true,"allowReserved":true},{"name":"timeZone","in":"query","required":false,"schema":{"type":"string","minLength":1,"maxLength":128,"description":"IANA time zone for interpreting date ranges"},"allowEmptyValue":true,"allowReserved":true}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"object","properties":{"meta":{"type":"object","properties":{"eventId":{"type":"string","description":"Event identifier"},"eventName":{"type":"string","description":"Event name"},"currency":{"type":"string","description":"Currency code (e.g., USD, EUR)"},"dateRange":{"type":"object","properties":{"start":{"type":"string","description":"Period start date"},"end":{"type":"string","description":"Period end date"}},"required":["start","end"]},"limit":{"type":"number","description":"Maximum number of results returned"}},"required":["eventId","eventName","currency","dateRange","limit"]},"totals":{"type":"object","properties":{"sessions":{"type":"number","description":"Total sessions across all sources"},"visitors":{"type":"number","description":"Total unique visitors across all sources"},"orders":{"type":"number","description":"Total orders across all sources"},"tickets":{"type":"number","description":"Total tickets across all sources"},"revenue":{"type":"number","description":"Total revenue across all sources (cents)"}},"required":["sessions","visitors","orders","tickets","revenue"]},"sources":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string","description":"Traffic source identifier"},"name":{"type":"string","description":"Traffic source name"},"referrer":{"type":"string","description":"Referrer URL or domain"},"sessions":{"type":"number","description":"Sessions from this source"},"visitors":{"type":"number","description":"Unique visitors from this source"},"clicks":{"type":"number","description":"Ticket link clicks"},"orders":{"type":"number","description":"Orders from this source"},"tickets":{"type":"number","description":"Tickets from this source"},"conversionRate":{"type":"number","description":"Conversion rate (%)"},"revenue":{"type":"number","description":"Revenue from this source (cents)"},"share":{"type":"number","description":"Share of total sessions (%)"}},"required":["id","name","referrer","sessions","visitors","orders","tickets","conversionRate","revenue","share"]},"description":"Traffic sources sorted by sessions descending"}},"required":["meta","totals","sources"]}}}}}}},"/events/{eventId}/performance/attendance":{"get":{"operationId":"event.performance.attendance","summary":"Get event attendance statistics","description":"Check-in statistics and attendance breakdown by admission and section","tags":["Event Performance"],"parameters":[{"name":"eventId","in":"path","required":true,"schema":{"type":"string"}},{"name":"includeAdmission","in":"query","schema":{"type":"boolean","default":true},"allowEmptyValue":true,"allowReserved":true},{"name":"includeSection","in":"query","schema":{"type":"boolean","default":true},"allowEmptyValue":true,"allowReserved":true},{"name":"granularity","in":"query","schema":{"enum":["HOUR","MINUTE"],"type":"string"},"allowEmptyValue":true,"allowReserved":true}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"anyOf":[{"type":"object","properties":{"totalTickets":{"type":"number"},"checkedIn":{"type":"number"},"notCheckedIn":{"type":"number"},"checkinRate":{"type":"number"},"byAdmission":{"type":"array","items":{"type":"object","properties":{"totalTickets":{"type":"number"},"checkedIn":{"type":"number"},"notCheckedIn":{"type":"number"},"checkinRate":{"type":"number"},"admissionId":{"type":"string"},"admissionName":{"type":"string"}},"required":["totalTickets","checkedIn","notCheckedIn","checkinRate","admissionId","admissionName"]}},"bySection":{"type":"array","items":{"type":"object","properties":{"totalTickets":{"type":"number"},"checkedIn":{"type":"number"},"notCheckedIn":{"type":"number"},"checkinRate":{"type":"number"},"sectionId":{"type":"string"},"sectionName":{"type":"string"}},"required":["totalTickets","checkedIn","notCheckedIn","checkinRate","sectionId","sectionName"]}}},"required":["totalTickets","checkedIn","notCheckedIn","checkinRate","byAdmission","bySection"]},{"type":"object","properties":{"granularity":{"enum":["HOUR","MINUTE"],"type":"string"},"totalTickets":{"type":"number"},"data":{"type":"array","items":{"type":"object","properties":{"timestamp":{"type":"string"},"checkedIn":{"type":"number"},"rate":{"type":"number"},"checkinsThisPeriod":{"type":"number"}},"required":["timestamp","checkedIn","rate","checkinsThisPeriod"]}},"byAdmission":{"type":"array","items":{"type":"object","properties":{"admissionId":{"type":"string"},"admissionName":{"type":"string"},"data":{"type":"array","items":{"type":"object","properties":{"timestamp":{"type":"string"},"checkedIn":{"type":"number"},"rate":{"type":"number"}},"required":["timestamp","checkedIn","rate"]}}},"required":["admissionId","admissionName","data"]}},"bySection":{"type":"array","items":{"type":"object","properties":{"sectionId":{"type":"string"},"sectionName":{"type":"string"},"data":{"type":"array","items":{"type":"object","properties":{"timestamp":{"type":"string"},"checkedIn":{"type":"number"},"rate":{"type":"number"}},"required":["timestamp","checkedIn","rate"]}}},"required":["sectionId","sectionName","data"]}}},"required":["granularity","totalTickets","data"]}]}}}}}}},"/events/{eventId}/performance/scanners":{"get":{"operationId":"event.performance.scanners","summary":"Get door staff scanner activity","description":"Ranked check-in activity by scanner for post-event door staff analytics","tags":["Event Performance"],"parameters":[{"name":"eventId","in":"path","required":true,"schema":{"type":"string"}},{"name":"limit","in":"query","schema":{"type":"number","minimum":1,"maximum":50,"default":10},"allowEmptyValue":true,"allowReserved":true}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"object","properties":{"totalCheckIns":{"type":"number"},"scanners":{"type":"array","items":{"type":"object","properties":{"userId":{"type":"string"},"name":{"type":"string"},"email":{"type":"string"},"checkIns":{"type":"number"},"sharePercent":{"type":"number"},"firstScanAt":{"anyOf":[{"type":"string"},{"type":"null"}]},"lastScanAt":{"anyOf":[{"type":"string"},{"type":"null"}]},"activeMinutes":{"type":"number"},"scansPerHour":{"type":"number"},"devices":{"type":"array","items":{"type":"object","properties":{"deviceId":{"type":"string"},"checkIns":{"type":"number"}},"required":["deviceId","checkIns"]}}},"required":["userId","name","email","checkIns","sharePercent","firstScanAt","lastScanAt","activeMinutes","scansPerHour","devices"]},"description":"Door staff sorted by check-ins descending"}},"required":["totalCheckIns","scanners"]}}}}}}},"/events/{eventId}/performance/turnout":{"get":{"operationId":"event.performance.turnout","summary":"Get event turnout analysis","description":"Post-event sold versus checked-in tickets by admission and section","tags":["Event Performance"],"parameters":[{"name":"eventId","in":"path","required":true,"schema":{"type":"string"}},{"name":"includeAdmission","in":"query","schema":{"type":"boolean","default":true},"allowEmptyValue":true,"allowReserved":true},{"name":"includeSection","in":"query","schema":{"type":"boolean","default":true},"allowEmptyValue":true,"allowReserved":true}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"object","properties":{"totalTickets":{"type":"number"},"checkedIn":{"type":"number"},"noShows":{"type":"number"},"checkInRate":{"type":"number"},"noShowRate":{"type":"number"},"byAdmission":{"type":"array","items":{"type":"object","properties":{"totalTickets":{"type":"number"},"checkedIn":{"type":"number"},"noShows":{"type":"number"},"checkInRate":{"type":"number"},"noShowRate":{"type":"number"},"admissionId":{"type":"string"},"admissionName":{"type":"string"}},"required":["totalTickets","checkedIn","noShows","checkInRate","noShowRate","admissionId","admissionName"]}},"bySection":{"type":"array","items":{"type":"object","properties":{"totalTickets":{"type":"number"},"checkedIn":{"type":"number"},"noShows":{"type":"number"},"checkInRate":{"type":"number"},"noShowRate":{"type":"number"},"sectionId":{"type":"string"},"sectionName":{"type":"string"}},"required":["totalTickets","checkedIn","noShows","checkInRate","noShowRate","sectionId","sectionName"]}}},"required":["totalTickets","checkedIn","noShows","checkInRate","noShowRate","byAdmission","bySection"]}}}}}}},"/events/{eventId}/performance/pace":{"get":{"operationId":"event.performance.pace","summary":"Get event check-in pace","description":"Post-event check-in flow over the admission entry window with peak door volume","tags":["Event Performance"],"parameters":[{"name":"eventId","in":"path","required":true,"schema":{"type":"string"}},{"name":"granularity","in":"query","schema":{"enum":["MINUTE","FIFTEEN_MINUTE","HOUR"],"type":"string","default":"FIFTEEN_MINUTE"},"allowEmptyValue":true,"allowReserved":true}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"object","properties":{"granularity":{"enum":["MINUTE","FIFTEEN_MINUTE","HOUR"],"type":"string"},"totalCheckIns":{"type":"number"},"peakWindow":{"type":"object","properties":{"start":{"anyOf":[{"type":"string"},{"type":"null"}]},"end":{"anyOf":[{"type":"string"},{"type":"null"}]},"checkIns":{"type":"number"}},"required":["start","end","checkIns"]},"data":{"type":"array","items":{"type":"object","properties":{"timestamp":{"type":"string"},"checkIns":{"type":"number"},"cumulativeCheckIns":{"type":"number"},"cumulativeRate":{"type":"number"}},"required":["timestamp","checkIns","cumulativeCheckIns","cumulativeRate"]}}},"required":["granularity","totalCheckIns","peakWindow","data"]}}}}}}},"/events/{eventId}/like":{"post":{"operationId":"event.like.add","summary":"Like an event","description":"Like an event as the current user. Atomically increments the event's likes counter.","tags":["Events"],"parameters":[{"name":"eventId","in":"path","required":true,"schema":{"type":"string","pattern":"^evt_[0-9a-z]{26}$","description":"Event to like"}}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"object","properties":{"like":{"type":"object","properties":{"tenantId":{"type":"string","readOnly":true,"description":"Tenant ID for multi-tenant isolation"},"userId":{"type":"string","pattern":"^usr_[0-9a-z]{26}$","description":"User who liked the event","readOnly":true},"eventId":{"type":"string","pattern":"^evt_[0-9a-z]{26}$","description":"Event the user liked"},"createdAt":{"type":"string","format":"date-time","readOnly":true,"description":"Timestamp when the user liked the event"}},"required":["tenantId","userId","eventId","createdAt"],"description":"Represents a user's like on an event. Used for tracking popular events and building personalized recommendations."}},"required":["like"]}}}}}},"delete":{"operationId":"event.like.remove","summary":"Remove like from an event","description":"Remove the current user's like from an event. Atomically decrements the event's likes counter.","tags":["Events"],"parameters":[{"name":"eventId","in":"path","required":true,"schema":{"type":"string","pattern":"^evt_[0-9a-z]{26}$","description":"Event to remove like from"}}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"anyOf":[{"not":{}},{"not":{}}]}}}}}}},"/events/likes":{"get":{"operationId":"event.like.list","summary":"List liked events","description":"List all events the current user has liked, with cursor-based pagination.","tags":["Events"],"parameters":[{"name":"limit","in":"query","schema":{"type":"integer","minimum":1,"maximum":100,"default":20,"description":"Maximum number of likes to return per request (1-100, default: 20)","examples":[20]},"allowEmptyValue":true,"allowReserved":true},{"name":"cursor","in":"query","schema":{"type":"string","description":"Pagination cursor from previous response. Used to fetch next page of results"},"allowEmptyValue":true,"allowReserved":true}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"object","properties":{"likes":{"type":"array","items":{"type":"object","properties":{"tenantId":{"type":"string","readOnly":true,"description":"Tenant ID for multi-tenant isolation"},"userId":{"type":"string","pattern":"^usr_[0-9a-z]{26}$","description":"User who liked the event","readOnly":true},"eventId":{"type":"string","pattern":"^evt_[0-9a-z]{26}$","description":"Event the user liked"},"createdAt":{"type":"string","format":"date-time","readOnly":true,"description":"Timestamp when the user liked the event"}},"required":["tenantId","userId","eventId","createdAt"],"description":"Represents a user's like on an event. Used for tracking popular events and building personalized recommendations."},"description":"Array of likes for the current result set"},"before":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Cursor for navigating backward in the result set. Omitted when there are no prior results.","examples":["eyJ2ZXJzaW9uIjoxLCJpbnRlbnQiOnsic291cmNlIjoiZGVtbyJ9LCJwb3MiOnsicHJpbWFyeUtleSI6InBybV8wMXM4NTNqIn19"]},"after":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Cursor for navigating forward in the result set. Omitted when there are no subsequent results.","examples":["eyJ2ZXJzaW9uIjoxLCJpbnRlbnQiOnsic291cmNlIjoiZGVtbyJ9LCJwb3MiOnsicHJpbWFyeUtleSI6InBybV8wMXM4NTNkIn19"]},"limit":{"type":"number","minimum":1,"description":"Maximum number of items to return in each result set","examples":[20]}},"required":["likes","limit"],"description":"Paginated list of event likes. Use cursor-based pagination to navigate through results."}}}}}}},"/events/tags":{"post":{"operationId":"event.tags","summary":"Suggest event genres and categories","description":"Uses AI to analyze event description and optional artwork to suggest relevant music genres and event categories. Returns up to 5 genres and 10 categories with a confidence score.","tags":["Events"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"eventId":{"type":"string","pattern":"^evt_[0-9a-z]{26}$","description":"Event ID for rate limiting and change detection. If provided, suggestions are limited to once per day per event and only if the description changed significantly.","examples":["evt_01jps5cgsenjrazw6wswmyspa3"]},"description":{"type":"string","minLength":100,"maxLength":10000,"description":"Event description to analyze for genre and category suggestions. Minimum 100 characters required for meaningful AI analysis.","examples":["Join us for an all-night warehouse party featuring the best in tech house and melodic techno. BYO drinks, intimate vibes, and a killer sound system."]},"eventName":{"type":"string","description":"Optional event name for additional context","examples":["Warehouse Sessions Vol. 5"]},"imageUrl":{"type":"string","format":"uri","description":"Optional event artwork URL for visual analysis (multimodal)","examples":["https://assets.session.services/events/poster.jpg"]}},"required":["description"],"additionalProperties":false}}}},"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"object","properties":{"genres":{"type":"array","maxItems":5,"items":{"enum":["House","Deep House","Tech House","Progressive House","Minimal House","Romanian Minimal","Afro House","Afro Tech","Acid House","Funky House","Jackin House","Soulful House","Melodic House","Latin House","Techno","Melodic Techno","Hard Techno","Industrial Techno","Minimal Techno","Detroit Techno","Dub Techno","Acid Techno","Hypnotic Techno","Drum & Bass","Jungle","Dubstep","Bass House","Breakbeat","UK Garage","Bassline","Grime","Liquid DnB","Neurofunk","Footwork","Jersey Club","Trance","Psytrance","Progressive Trance","Disco","Nu Disco","Italo Disco","Funk","Soul","Balearic","Hardcore","Hardstyle","Gabber","Happy Hardcore","Amapiano","Gqom","Afrobeats","Kuduro","Singeli","Baile Funk","Reggaeton","Dancehall","Dembow","Ambient","Downtempo","Electronica","Trip Hop","Lo-Fi","Electro","Synth Pop","Industrial","EBM","Indie Dance","Experimental","Hip-Hop","R&B","Jazz","Pop","Rock","Reggae","Live"],"type":"string"},"description":"Suggested music genres based on event description and artwork","examples":[["Tech House","Melodic Techno"]]},"categories":{"type":"array","maxItems":10,"items":{"enum":["Day Party","Festival","Afterparty","Boat Party","Pool Party","Live Performance","Warehouse","Open Air","Rooftop","Beach Party","Secret Location","DIY","Basement","Free Entry","Donation","Vinyl Only","Silent Disco","Underground","Intimate","Queer Friendly","FLINTA","Safe Space","No Photos","Rave","BYO","Cash Only","Card Only","Food Available","Dress Code"],"type":"string"},"description":"Suggested event categories based on description and artwork","examples":[["Warehouse","Underground","BYO"]]},"confidence":{"type":"number","minimum":0,"maximum":1,"description":"AI confidence score for the suggestions (0-1)","examples":[0.85]},"startDate":{"type":"string","description":"Event start date/time. Either ISO 8601 format (if specific date found) or natural language hint for relative dates (e.g., 'next Saturday 9pm').","examples":["2025-02-15T21:00:00","next Saturday 9pm"]},"endDate":{"type":"string","description":"Event end date/time. Either ISO 8601 format (if specific date found) or natural language hint.","examples":["2025-02-16T04:00:00","6am Sunday"]},"venueName":{"type":"string","description":"Venue or location name extracted from the description or artwork. Used to search for and prefill the event location.","examples":["Warehouse 21","The Metro Theatre"]},"ticketUrl":{"type":"string","format":"uri","description":"External ticket purchase URL if found in the description. Only extracted if different from the host platform.","examples":["https://www.eventbrite.com/e/warehouse-sessions-tickets-123"]}},"required":["genres","categories","confidence"],"description":"AI-generated genre and category suggestions for an event"}}}}}}},"/events/{eventId}/collaborators/{id}":{"get":{"operationId":"eventCollaborator.get","summary":"Get event collaborator by ID","description":"Retrieve an active event collaboration by its unique ID. Returns the collaborator record with promoter and permission details.","tags":["Event Collaborators"],"parameters":[{"name":"eventId","in":"path","required":true,"schema":{"type":"string","pattern":"^evt_[0-9a-z]{26}$","description":"Event ID that the collaboration belongs to"}},{"name":"id","in":"path","required":true,"schema":{"type":"string","pattern":"^ecl_[0-9a-z]{26}$","description":"Event team access grant ID to retrieve"}}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"object","properties":{"collaborator":{"type":"object","properties":{"id":{"type":"string","pattern":"^ecl_[0-9a-z]{26}$","description":"Unique identifier for the event collaborator","readOnly":true},"createdAt":{"type":"string","format":"date-time","readOnly":true,"description":"Timestamp in ISO 8601 format when the collaborator was added"},"updatedAt":{"type":"string","format":"date-time","readOnly":true,"description":"Timestamp in ISO 8601 format when the collaborator was last updated"},"eventId":{"type":"string","pattern":"^evt_[0-9a-z]{26}$","description":"Event this collaboration applies to"},"promoterId":{"type":"string","pattern":"^pmt_[0-9a-z]{26}$","description":"Promoter collaborating on the event"},"acceptedBy":{"type":"string","pattern":"^usr_[0-9a-z]{26}$","description":"User ID who accepted the invitation to collaborate"},"promoter":{"type":"object","properties":{"id":{"type":"string","pattern":"^pmt_[0-9a-z]{26}$","description":"Unique identifier of the promoter"},"name":{"type":"string","description":"Name of the promoter"},"teamId":{"type":"string","pattern":"^tem_[0-9a-z]{26}$","description":"Team ID of the promoter"}},"required":["id","name","teamId"],"description":"Populated promoter details. Only included when explicitly requested."},"permissions":{"type":"array","items":{"type":"string","pattern":"^-?(?:\\*|(?:[a-z][a-z0-9-]*)(?:\\.[a-z][a-z0-9-]*)*(?:\\.\\*|\\.bypass|\\.[a-z]{3}_[0-9a-z]{26})?)$","description":"Permission node in minecraft-style format. Supports exact, scoped wildcard, resource target, bypass target, and deny prefix.","examples":["team.read","team.member.write","ticket.scan","ticket.scan.*","ticket.scan.evt_01h8c3jm9zs2v6h2k9p9r8f5a1","team.gateway.connect.bypass","team.*","*","-team.gateway.write","-ticket.scan.evt_01h8c3jm9zs2v6h2k9p9r8f5a1"]},"description":"Permissions granted to this collaborator. User must have permission in BOTH this grant AND their team membership (intersection).","examples":[[],["event.read","event.write"],["order.read"],["ticket.scan"],["*"]]},"tenantId":{"type":"string","readOnly":true,"description":"Tenant ID for multi-tenant isolation"}},"required":["id","createdAt","updatedAt","eventId","promoterId","acceptedBy","permissions","tenantId"],"description":"Active event collaborator. Created when a promoter accepts an invitation or is directly added to an event. Hard deleted when removed."}},"required":["collaborator"]}}}}}},"delete":{"operationId":"eventCollaborator.remove","summary":"Remove active event collaboration","description":"Remove an active collaboration (hard delete). Can be done by event team members or the collaborating team members. This completely removes access.","tags":["Event Collaborators"],"parameters":[{"name":"eventId","in":"path","required":true,"schema":{"type":"string","pattern":"^evt_[0-9a-z]{26}$","description":"Event ID that the collaboration belongs to"}},{"name":"id","in":"path","required":true,"schema":{"type":"string","pattern":"^ecl_[0-9a-z]{26}$","description":"Event team access grant ID to retrieve"}}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"anyOf":[{"not":{}},{"not":{}}]}}}}}}},"/events/{eventId}/collaborators":{"get":{"operationId":"eventCollaborator.list","summary":"List active event collaborators with cursor-based pagination","description":"Returns active event collaborations for a specific event with cursor pagination. Only shows accepted collaborators. For pending invitations, use the invite endpoints.","tags":["Event Collaborators"],"parameters":[{"name":"eventId","in":"path","required":true,"schema":{"type":"string","description":"Event ID to list collaborators for"}},{"name":"accessPromoterId","in":"query","schema":{"type":"string","description":"DEPRECATED: Use 'promoterId' instead. Filter by collaborating promoter ID (what events can this promoter access). Maintained for backward compatibility."},"allowEmptyValue":true,"allowReserved":true},{"name":"ownerPromoterId","in":"query","schema":{"type":"string","description":"DEPRECATED: No longer used. Maintained for backward compatibility only."},"allowEmptyValue":true,"allowReserved":true},{"name":"limit","in":"query","schema":{"type":"integer","minimum":1,"maximum":100,"default":20,"description":"Maximum number of event collaborators to return per request (1-100, default: 20)","examples":[20]},"allowEmptyValue":true,"allowReserved":true},{"name":"cursor","in":"query","schema":{"type":"string","description":"Pagination cursor from previous response. Used to fetch next page of results"},"allowEmptyValue":true,"allowReserved":true}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"object","properties":{"grants":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string","pattern":"^ecl_[0-9a-z]{26}$","description":"Unique identifier for the event collaborator","readOnly":true},"createdAt":{"type":"string","format":"date-time","readOnly":true,"description":"Timestamp in ISO 8601 format when the collaborator was added"},"updatedAt":{"type":"string","format":"date-time","readOnly":true,"description":"Timestamp in ISO 8601 format when the collaborator was last updated"},"eventId":{"type":"string","pattern":"^evt_[0-9a-z]{26}$","description":"Event this collaboration applies to"},"promoterId":{"type":"string","pattern":"^pmt_[0-9a-z]{26}$","description":"Promoter collaborating on the event"},"acceptedBy":{"type":"string","pattern":"^usr_[0-9a-z]{26}$","description":"User ID who accepted the invitation to collaborate"},"promoter":{"type":"object","properties":{"id":{"type":"string","pattern":"^pmt_[0-9a-z]{26}$","description":"Unique identifier of the promoter"},"name":{"type":"string","description":"Name of the promoter"},"teamId":{"type":"string","pattern":"^tem_[0-9a-z]{26}$","description":"Team ID of the promoter"}},"required":["id","name","teamId"],"description":"Populated promoter details. Only included when explicitly requested."},"permissions":{"type":"array","items":{"type":"string","pattern":"^-?(?:\\*|(?:[a-z][a-z0-9-]*)(?:\\.[a-z][a-z0-9-]*)*(?:\\.\\*|\\.bypass|\\.[a-z]{3}_[0-9a-z]{26})?)$","description":"Permission node in minecraft-style format. Supports exact, scoped wildcard, resource target, bypass target, and deny prefix.","examples":["team.read","team.member.write","ticket.scan","ticket.scan.*","ticket.scan.evt_01h8c3jm9zs2v6h2k9p9r8f5a1","team.gateway.connect.bypass","team.*","*","-team.gateway.write","-ticket.scan.evt_01h8c3jm9zs2v6h2k9p9r8f5a1"]},"description":"Permissions granted to this collaborator. User must have permission in BOTH this grant AND their team membership (intersection).","examples":[[],["event.read","event.write"],["order.read"],["ticket.scan"],["*"]]},"tenantId":{"type":"string","readOnly":true,"description":"Tenant ID for multi-tenant isolation"}},"required":["id","createdAt","updatedAt","eventId","promoterId","acceptedBy","permissions","tenantId"],"description":"Active event collaborator. Created when a promoter accepts an invitation or is directly added to an event. Hard deleted when removed."},"description":"Array of grants for the current result set"},"before":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Cursor for navigating backward in the result set. Omitted when there are no prior results.","examples":["eyJ2ZXJzaW9uIjoxLCJpbnRlbnQiOnsic291cmNlIjoiZGVtbyJ9LCJwb3MiOnsicHJpbWFyeUtleSI6InBybV8wMXM4NTNqIn19"]},"after":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Cursor for navigating forward in the result set. Omitted when there are no subsequent results.","examples":["eyJ2ZXJzaW9uIjoxLCJpbnRlbnQiOnsic291cmNlIjoiZGVtbyJ9LCJwb3MiOnsicHJpbWFyeUtleSI6InBybV8wMXM4NTNkIn19"]},"limit":{"type":"number","minimum":1,"description":"Maximum number of items to return in each result set","examples":[20]}},"required":["grants","limit"]}}}}}},"post":{"operationId":"eventCollaborator.create","summary":"Invite a promoter to collaborate on an event","description":"Send a collaboration invitation to a promoter (can be from a different team). Enables cross-team promoter-to-promoter collaboration. Creates a pending invitation with a secure token that expires in 7 days. The invited promoter must accept to create an active collaboration.","tags":["Event Collaborators"],"parameters":[{"name":"eventId","in":"path","required":true,"schema":{"type":"string","pattern":"^evt_[0-9a-z]{26}$","description":"Event this invitation applies to"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"promoterId":{"type":"string","pattern":"^pmt_[0-9a-z]{26}$","description":"Promoter being invited to collaborate on the event."},"permissions":{"type":"array","items":{"type":"string","pattern":"^-?(?:\\*|(?:[a-z][a-z0-9-]*)(?:\\.[a-z][a-z0-9-]*)*(?:\\.\\*|\\.bypass|\\.[a-z]{3}_[0-9a-z]{26})?)$","description":"Permission node in minecraft-style format. Supports exact, scoped wildcard, resource target, bypass target, and deny prefix.","examples":["team.read","team.member.write","ticket.scan","ticket.scan.*","ticket.scan.evt_01h8c3jm9zs2v6h2k9p9r8f5a1","team.gateway.connect.bypass","team.*","*","-team.gateway.write","-ticket.scan.evt_01h8c3jm9zs2v6h2k9p9r8f5a1"]},"description":"Permissions the promoter will receive upon accepting the invitation.","examples":[[],["event.read","event.write"],["order.read"],["ticket.scan"],["*"]]},"invitedBy":{"type":"string","pattern":"^usr_[0-9a-z]{26}$","description":"User ID who sent the invitation"}},"required":["promoterId","permissions","invitedBy"],"additionalProperties":false}}}},"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"object","properties":{"invite":{"type":"object","properties":{"id":{"type":"string","pattern":"^ecl_[0-9a-z]{26}$","description":"Unique identifier for the event collaboration invitation","readOnly":true},"createdAt":{"type":"string","format":"date-time","readOnly":true,"description":"Timestamp in ISO 8601 format when the invitation was created"},"updatedAt":{"type":"string","format":"date-time","readOnly":true,"description":"Timestamp in ISO 8601 format when the invitation was last updated"},"eventId":{"type":"string","pattern":"^evt_[0-9a-z]{26}$","description":"Event this invitation applies to"},"promoterId":{"type":"string","pattern":"^pmt_[0-9a-z]{26}$","description":"Promoter being invited to collaborate on the event."},"invitedByPromoterId":{"type":"string","pattern":"^pmt_[0-9a-z]{26}$","description":"Promoter who sent this invitation (event owner or collaborator with permission)."},"permissions":{"type":"array","items":{"type":"string","pattern":"^-?(?:\\*|(?:[a-z][a-z0-9-]*)(?:\\.[a-z][a-z0-9-]*)*(?:\\.\\*|\\.bypass|\\.[a-z]{3}_[0-9a-z]{26})?)$","description":"Permission node in minecraft-style format. Supports exact, scoped wildcard, resource target, bypass target, and deny prefix.","examples":["team.read","team.member.write","ticket.scan","ticket.scan.*","ticket.scan.evt_01h8c3jm9zs2v6h2k9p9r8f5a1","team.gateway.connect.bypass","team.*","*","-team.gateway.write","-ticket.scan.evt_01h8c3jm9zs2v6h2k9p9r8f5a1"]},"description":"Permissions the promoter will receive upon accepting the invitation.","examples":[[],["event.read","event.write"],["order.read"],["ticket.scan"],["*"]]},"token":{"type":"string","readOnly":true,"description":"Secure token for invite acceptance. Required to accept the invitation."},"invitedBy":{"type":"string","pattern":"^usr_[0-9a-z]{26}$","description":"User ID who sent the invitation"},"expiresAt":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991,"exclusiveMinimum":0,"description":"Unix timestamp (seconds) for DynamoDB TTL. Invitation will be automatically deleted after 7 days."},"tenantId":{"type":"string","readOnly":true,"description":"Tenant ID for multi-tenant isolation"}},"required":["id","createdAt","updatedAt","eventId","promoterId","invitedByPromoterId","permissions","token","invitedBy","expiresAt","tenantId"],"description":"Pending event collaborator invitation. Automatically deleted after 7 days via DynamoDB TTL. When accepted, creates an EventCollaborator record and deletes the invitation."}},"required":["invite"]}}}}}}},"/events/{eventId}/collaborators/{id}/accept":{"post":{"operationId":"eventCollaborator.accept","summary":"Accept an event collaboration invitation","description":"Accept a pending event collaboration invitation. User must be a member of the invited promoter's team. Deletes the invitation and creates an active collaboration record.","tags":["Event Collaborators"],"parameters":[{"name":"eventId","in":"path","required":true,"schema":{"type":"string","pattern":"^evt_[0-9a-z]{26}$","description":"Event this collaboration applies to"}},{"name":"id","in":"path","required":true,"schema":{"type":"string","pattern":"^ecl_[0-9a-z]{26}$","description":"Unique identifier for the event collaborator","readOnly":true}}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"object","properties":{"collaborator":{"type":"object","properties":{"id":{"type":"string","pattern":"^ecl_[0-9a-z]{26}$","description":"Unique identifier for the event collaborator","readOnly":true},"createdAt":{"type":"string","format":"date-time","readOnly":true,"description":"Timestamp in ISO 8601 format when the collaborator was added"},"updatedAt":{"type":"string","format":"date-time","readOnly":true,"description":"Timestamp in ISO 8601 format when the collaborator was last updated"},"eventId":{"type":"string","pattern":"^evt_[0-9a-z]{26}$","description":"Event this collaboration applies to"},"promoterId":{"type":"string","pattern":"^pmt_[0-9a-z]{26}$","description":"Promoter collaborating on the event"},"acceptedBy":{"type":"string","pattern":"^usr_[0-9a-z]{26}$","description":"User ID who accepted the invitation to collaborate"},"promoter":{"type":"object","properties":{"id":{"type":"string","pattern":"^pmt_[0-9a-z]{26}$","description":"Unique identifier of the promoter"},"name":{"type":"string","description":"Name of the promoter"},"teamId":{"type":"string","pattern":"^tem_[0-9a-z]{26}$","description":"Team ID of the promoter"}},"required":["id","name","teamId"],"description":"Populated promoter details. Only included when explicitly requested."},"permissions":{"type":"array","items":{"type":"string","pattern":"^-?(?:\\*|(?:[a-z][a-z0-9-]*)(?:\\.[a-z][a-z0-9-]*)*(?:\\.\\*|\\.bypass|\\.[a-z]{3}_[0-9a-z]{26})?)$","description":"Permission node in minecraft-style format. Supports exact, scoped wildcard, resource target, bypass target, and deny prefix.","examples":["team.read","team.member.write","ticket.scan","ticket.scan.*","ticket.scan.evt_01h8c3jm9zs2v6h2k9p9r8f5a1","team.gateway.connect.bypass","team.*","*","-team.gateway.write","-ticket.scan.evt_01h8c3jm9zs2v6h2k9p9r8f5a1"]},"description":"Permissions granted to this collaborator. User must have permission in BOTH this grant AND their team membership (intersection).","examples":[[],["event.read","event.write"],["order.read"],["ticket.scan"],["*"]]},"tenantId":{"type":"string","readOnly":true,"description":"Tenant ID for multi-tenant isolation"}},"required":["id","createdAt","updatedAt","eventId","promoterId","acceptedBy","permissions","tenantId"],"description":"Active event collaborator. Created when a promoter accepts an invitation or is directly added to an event. Hard deleted when removed."}},"required":["collaborator"]}}}}}}},"/events/{eventId}/admissions/{id}":{"get":{"operationId":"admission.get","summary":"Get admission by ID","tags":["Admissions"],"parameters":[{"name":"eventId","in":"path","required":true,"schema":{"type":"string","pattern":"^evt_[0-9a-z]{26}$","description":"Identifier of the event to which this admission type belongs","examples":["evt_01jps5cgsenjrazw6wswmyspa3"]}},{"name":"id","in":"path","required":true,"schema":{"type":"string","pattern":"^adm_[0-9a-z]{26}$","description":"A unique identifier for this admission","examples":["adm_01jps5cgsee0xvapbk92e8eb4g"],"readOnly":true}}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"object","properties":{"admission":{"$ref":"#/components/schemas/Admission"}},"required":["admission"]}}}}}},"put":{"operationId":"admission.update","summary":"Update an admission","tags":["Admissions"],"parameters":[{"name":"eventId","in":"path","required":true,"schema":{"type":"string","pattern":"^evt_[0-9a-z]{26}$","description":"Identifier of the event to which this admission type is linked","examples":["evt_01jps5cgsenjrazw6wswmyspa3"]}},{"name":"id","in":"path","required":true,"schema":{"type":"string","pattern":"^adm_[0-9a-z]{26}$","description":"A unique identifier for this admission","examples":["adm_01jps5cgsee0xvapbk92e8eb4g"],"readOnly":true}}],"requestBody":{"required":false,"content":{"application/json":{"schema":{"type":"object","properties":{"name":{"type":"string","description":"The display name of the admission type shown to customers","examples":["Final Release"]},"subtitle":{"type":"string","maxLength":100,"description":"Short supporting text shown below the admission name","examples":["Entry before 10pm"]},"description":{"type":"string","maxLength":500,"description":"Detailed information shown when customers expand 'More info'","examples":["Early bird pricing with priority entry. Must present valid ID at gate."]},"capacity":{"type":"number","minimum":-1},"limit":{"type":"number","minimum":-1},"order":{"type":"number","minimum":0,"description":"Determines the position in which this admission type appears when listed. Lower values appear first","examples":[0]},"entryStartsAt":{"type":"string","pattern":"^\\d{4}-\\d{2}-\\d{2}T\\d{2}:\\d{2}:\\d{2}$","description":"Wall clock time from which tickets of this type are valid for entry (no timezone)","examples":["2026-06-08T11:39:32"]},"entryEndsAt":{"type":"string","pattern":"^\\d{4}-\\d{2}-\\d{2}T\\d{2}:\\d{2}:\\d{2}$","description":"Wall clock time until which tickets of this type are valid for entry (no timezone)","examples":["2026-06-09T11:39:32"]},"saleStartsAt":{"type":"string","pattern":"^\\d{4}-\\d{2}-\\d{2}T\\d{2}:\\d{2}:\\d{2}$","description":"Wall clock time when ticket sales for this admission type begin (no timezone)","examples":["2026-06-07T11:39:32"]},"saleEndsAt":{"type":"string","pattern":"^\\d{4}-\\d{2}-\\d{2}T\\d{2}:\\d{2}:\\d{2}$","description":"Wall clock time when ticket sales for this admission type end (no timezone)","examples":["2026-06-09T11:39:32"]},"saleEndsBehavior":{"enum":["SALE_ENDED","SOLD_OUT","DOOR"],"type":"string"},"price":{"type":"object","properties":{"base":{"type":"integer","minimum":0,"maximum":9007199254740991,"description":"Base cost of a ticket for this admission type before fees, in cents","examples":[1000]},"booking":{"type":"integer","minimum":0,"maximum":9007199254740991,"description":"Additional booking fee applied to the ticket price, in cents","examples":[200]},"currency":{"enum":["AED","ALL","AMD","ANG","AOA","ARS","AUD","AWG","AZN","BAM","BBD","BDT","BGN","BHD","BIF","BMD","BND","BOB","BRL","BSD","BTN","BWP","BZD","CAD","CHF","CLP","CNY","COP","CRC","CVE","CZK","DJF","DKK","DOP","DZD","EGP","ERN","ETB","EUR","FJD","FKP","GBP","GEL","GHS","GIP","GMD","GNF","GTQ","GYD","HKD","HNL","HUF","IDR","ILS","INR","ISK","JMD","JOD","JPY","KES","KGS","KHR","KMF","KRW","KWD","KYD","KZT","LAK","LBP","LKR","LRD","LSL","LYD","MAD","MDL","MGA","MKD","MNT","MOP","MUR","MVR","MWK","MXN","MYR","NAD","NGN","NIO","NOK","NPR","NZD","OMR","PAB","PEN","PGK","PHP","PKR","PLN","PYG","QAR","RON","RSD","RWF","SAR","SBD","SCR","SEK","SGD","SHP","SLE","SRD","SVC","SZL","THB","TJS","TMT","TND","TOP","TRY","TTD","TWD","TZS","UAH","UGX","USD","UYU","UZS","VND","VUV","WST","XAF","XCD","XOF","XPF","ZAR","ZMW","ZWL"],"type":"string","description":"Three-letter ISO 4217 currency code for the ticket price","examples":["AUD"]}},"required":["base","booking","currency"],"description":"Pricing details for this admission type, including base cost and fees in cents, and currency","examples":[{"base":1000,"booking":200,"currency":"AUD"}]},"visibility":{"enum":["ALWAYS","HIDDEN"],"type":"string"},"sectionId":{"anyOf":[{"type":"string","pattern":"^sct_[0-9a-z]{26}$","description":"Unique section identifier"},{"type":"null"}],"description":"Section ID. Pass null to unassign from section; omit to leave unchanged."}},"additionalProperties":false}}}},"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"object","properties":{"admission":{"$ref":"#/components/schemas/Admission"}},"required":["admission"]}}}}}},"delete":{"operationId":"admission.remove","summary":"Delete an admission","tags":["Admissions"],"parameters":[{"name":"eventId","in":"path","required":true,"schema":{"type":"string","pattern":"^evt_[0-9a-z]{26}$","description":"Identifier of the event to which this admission type belongs","examples":["evt_01jps5cgsenjrazw6wswmyspa3"]}},{"name":"id","in":"path","required":true,"schema":{"type":"string","pattern":"^adm_[0-9a-z]{26}$","description":"A unique identifier for this admission","examples":["adm_01jps5cgsee0xvapbk92e8eb4g"],"readOnly":true}}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"object","properties":{"admission":{"$ref":"#/components/schemas/Admission"}},"required":["admission"]}}}}}}},"/events/{eventId}/admissions":{"get":{"operationId":"admission.list","summary":"List admissions","description":"Returns admissions with cursor-based pagination. Automatically uses search-backed pagination when query parameter is provided for full-text search capabilities.","tags":["Admissions"],"parameters":[{"name":"eventId","in":"path","required":true,"schema":{"type":"string","description":"Identifier of the event to list admission types for","examples":["evt_01jps5cgsenjrazw6wswmyspa3"]}},{"name":"sectionId","in":"query","schema":{"type":"string","description":"Filter admission types by section identifier. If provided, only admissions for this section are returned","examples":["sct_01jps5cgse0g3qj16kpq8t221r"]},"allowEmptyValue":true,"allowReserved":true},{"name":"query","in":"query","schema":{"type":"string","description":"Optional search query to filter admissions by name. When provided, search-backed pagination is used.","examples":["Early Bird"]},"allowEmptyValue":true,"allowReserved":true},{"name":"limit","in":"query","schema":{"type":"integer","minimum":1,"maximum":100,"default":20,"description":"Maximum number of admission types to return per request (1-100, default: 20)","examples":[20]},"allowEmptyValue":true,"allowReserved":true},{"name":"cursor","in":"query","schema":{"type":"string","description":"Pagination cursor for retrieving the next set of results. Obtained from previous response","examples":["eyJpZCI6ImFkbV8wMWpwczVjZ3NlZTB4dmFwYms5MmU4ZWI0ZyJ9"]},"allowEmptyValue":true,"allowReserved":true}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"object","properties":{"admissions":{"type":"array","items":{"$ref":"#/components/schemas/Admission"},"description":"Array of admissions for the current result set"},"before":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Cursor for navigating backward in the result set. Omitted when there are no prior results.","examples":["eyJ2ZXJzaW9uIjoxLCJpbnRlbnQiOnsic291cmNlIjoiZGVtbyJ9LCJwb3MiOnsicHJpbWFyeUtleSI6InBybV8wMXM4NTNqIn19"]},"after":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Cursor for navigating forward in the result set. Omitted when there are no subsequent results.","examples":["eyJ2ZXJzaW9uIjoxLCJpbnRlbnQiOnsic291cmNlIjoiZGVtbyJ9LCJwb3MiOnsicHJpbWFyeUtleSI6InBybV8wMXM4NTNkIn19"]},"limit":{"type":"number","minimum":1,"description":"Maximum number of items to return in each result set","examples":[20]}},"required":["admissions","limit"]}}}}}},"post":{"operationId":"admission.create","summary":"Create a new admission","tags":["Admissions"],"parameters":[{"name":"eventId","in":"path","required":true,"schema":{"type":"string","pattern":"^evt_[0-9a-z]{26}$","description":"Identifier of the event to which this admission type is linked","examples":["evt_01jps5cgsenjrazw6wswmyspa3"]}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"name":{"type":"string","description":"The display name of the admission type shown to customers","examples":["Final Release"]},"subtitle":{"type":"string","maxLength":100,"description":"Short supporting text shown below the admission name","examples":["Entry before 10pm"]},"description":{"type":"string","maxLength":500,"description":"Detailed information shown when customers expand 'More info'","examples":["Early bird pricing with priority entry. Must present valid ID at gate."]},"capacity":{"type":"number","minimum":-1,"default":-1,"description":"Maximum number of tickets that can be sold for this admission type. A value of -1 indicates unlimited","examples":[100000]},"limit":{"type":"number","minimum":-1,"default":-1,"description":"Maximum number of tickets of this admission type that can be purchased in a single order. A value of -1 indicates unlimited","examples":[-1]},"order":{"type":"number","minimum":0,"description":"Determines the position in which this admission type appears when listed. Lower values appear first","examples":[0]},"entryStartsAt":{"type":"string","pattern":"^\\d{4}-\\d{2}-\\d{2}T\\d{2}:\\d{2}:\\d{2}$","description":"Wall clock time from which tickets of this type are valid for entry (no timezone)","examples":["2026-06-08T11:39:32"]},"entryEndsAt":{"type":"string","pattern":"^\\d{4}-\\d{2}-\\d{2}T\\d{2}:\\d{2}:\\d{2}$","description":"Wall clock time until which tickets of this type are valid for entry (no timezone)","examples":["2026-06-09T11:39:32"]},"saleStartsAt":{"type":"string","pattern":"^\\d{4}-\\d{2}-\\d{2}T\\d{2}:\\d{2}:\\d{2}$","description":"Wall clock time when ticket sales for this admission type begin (no timezone)","examples":["2026-06-07T11:39:32"]},"saleEndsAt":{"type":"string","pattern":"^\\d{4}-\\d{2}-\\d{2}T\\d{2}:\\d{2}:\\d{2}$","description":"Wall clock time when ticket sales for this admission type end (no timezone)","examples":["2026-06-09T11:39:32"]},"saleEndsBehavior":{"enum":["SALE_ENDED","SOLD_OUT","DOOR"],"type":"string","default":"SALE_ENDED","description":"Label to display for this admission after ticket sales have ended","examples":["SALE_ENDED"]},"price":{"type":"object","properties":{"base":{"type":"integer","minimum":0,"maximum":9007199254740991,"description":"Base cost of a ticket for this admission type before fees, in cents","examples":[1000]},"booking":{"type":"integer","minimum":0,"maximum":9007199254740991,"description":"Additional booking fee applied to the ticket price, in cents","examples":[200]},"currency":{"enum":["AED","ALL","AMD","ANG","AOA","ARS","AUD","AWG","AZN","BAM","BBD","BDT","BGN","BHD","BIF","BMD","BND","BOB","BRL","BSD","BTN","BWP","BZD","CAD","CHF","CLP","CNY","COP","CRC","CVE","CZK","DJF","DKK","DOP","DZD","EGP","ERN","ETB","EUR","FJD","FKP","GBP","GEL","GHS","GIP","GMD","GNF","GTQ","GYD","HKD","HNL","HUF","IDR","ILS","INR","ISK","JMD","JOD","JPY","KES","KGS","KHR","KMF","KRW","KWD","KYD","KZT","LAK","LBP","LKR","LRD","LSL","LYD","MAD","MDL","MGA","MKD","MNT","MOP","MUR","MVR","MWK","MXN","MYR","NAD","NGN","NIO","NOK","NPR","NZD","OMR","PAB","PEN","PGK","PHP","PKR","PLN","PYG","QAR","RON","RSD","RWF","SAR","SBD","SCR","SEK","SGD","SHP","SLE","SRD","SVC","SZL","THB","TJS","TMT","TND","TOP","TRY","TTD","TWD","TZS","UAH","UGX","USD","UYU","UZS","VND","VUV","WST","XAF","XCD","XOF","XPF","ZAR","ZMW","ZWL"],"type":"string","description":"Three-letter ISO 4217 currency code for the ticket price","examples":["AUD"]}},"required":["base","booking","currency"],"description":"Pricing details for this admission type, including base cost and fees in cents, and currency","examples":[{"base":1000,"booking":200,"currency":"AUD"}]},"visibility":{"enum":["ALWAYS","HIDDEN"],"type":"string","default":"ALWAYS","description":"Controls whether this admission type is shown publicly or only revealed by a scoped coupon.","examples":["ALWAYS"]},"sectionId":{"anyOf":[{"type":"string","pattern":"^sct_[0-9a-z]{26}$","description":"Unique section identifier"},{"type":"null"}],"description":"Identifier of the section this admission type belongs to, if any","examples":["sct_01jps5cgse0g3qj16kpq8t221r"]},"teamId":{"type":"string","pattern":"^tem_[0-9a-z]{26}$","description":"Team that owns this admission. Denormalized for efficient queries."},"promoterId":{"type":"string","pattern":"^pmt_[0-9a-z]{26}$","description":"Identifier of the promoter responsible for this admission type","examples":["pmt_01jqpjksnsen9vprw95et60t2m"]},"eventSlug":{"type":"string","description":"URL-friendly slug for the event associated with this admission type","examples":["test-event"]}},"required":["name","order","entryStartsAt","entryEndsAt","saleStartsAt","saleEndsAt","price","teamId","promoterId","eventSlug"],"additionalProperties":false}}}},"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"object","properties":{"admission":{"$ref":"#/components/schemas/Admission"}},"required":["admission"]}}}}}}},"/events/{eventId}/admissions/quote":{"post":{"operationId":"admission.quote","summary":"Create an admission quote","tags":["Admissions"],"parameters":[{"name":"eventId","in":"path","required":true,"schema":{"type":"string","pattern":"^evt_[0-9a-z]{26}$","description":"Identifier of the event to which this admission type is linked","examples":["evt_01jps5cgsenjrazw6wswmyspa3"]}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"base":{"type":"integer","minimum":0,"maximum":9007199254740991,"description":"Base cost of a ticket for this admission type before fees, in cents","examples":[1000]},"currency":{"enum":["AED","ALL","AMD","ANG","AOA","ARS","AUD","AWG","AZN","BAM","BBD","BDT","BGN","BHD","BIF","BMD","BND","BOB","BRL","BSD","BTN","BWP","BZD","CAD","CHF","CLP","CNY","COP","CRC","CVE","CZK","DJF","DKK","DOP","DZD","EGP","ERN","ETB","EUR","FJD","FKP","GBP","GEL","GHS","GIP","GMD","GNF","GTQ","GYD","HKD","HNL","HUF","IDR","ILS","INR","ISK","JMD","JOD","JPY","KES","KGS","KHR","KMF","KRW","KWD","KYD","KZT","LAK","LBP","LKR","LRD","LSL","LYD","MAD","MDL","MGA","MKD","MNT","MOP","MUR","MVR","MWK","MXN","MYR","NAD","NGN","NIO","NOK","NPR","NZD","OMR","PAB","PEN","PGK","PHP","PKR","PLN","PYG","QAR","RON","RSD","RWF","SAR","SBD","SCR","SEK","SGD","SHP","SLE","SRD","SVC","SZL","THB","TJS","TMT","TND","TOP","TRY","TTD","TWD","TZS","UAH","UGX","USD","UYU","UZS","VND","VUV","WST","XAF","XCD","XOF","XPF","ZAR","ZMW","ZWL"],"type":"string","description":"Three-letter ISO 4217 currency code for the ticket price","examples":["AUD"]}},"required":["base","currency"],"additionalProperties":false}}}},"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"object","properties":{"quote":{"type":"object","properties":{"eventId":{"type":"string","pattern":"^evt_[0-9a-z]{26}$","description":"Identifier of the event to which this admission type is linked","examples":["evt_01jps5cgsenjrazw6wswmyspa3"]},"message":{"type":"string","description":"Detailed explanation of the booking fee calculation applied to this admission type","examples":["7.5% of the ticket price or $2 AUD, whichever is higher"]},"price":{"type":"object","properties":{"base":{"type":"integer","minimum":0,"maximum":9007199254740991,"description":"Base cost of a ticket for this admission type before fees, in cents","examples":[1000]},"booking":{"type":"integer","minimum":0,"maximum":9007199254740991,"description":"Calculated booking fee applied to the ticket price, in cents","examples":[200]},"currency":{"enum":["AED","ALL","AMD","ANG","AOA","ARS","AUD","AWG","AZN","BAM","BBD","BDT","BGN","BHD","BIF","BMD","BND","BOB","BRL","BSD","BTN","BWP","BZD","CAD","CHF","CLP","CNY","COP","CRC","CVE","CZK","DJF","DKK","DOP","DZD","EGP","ERN","ETB","EUR","FJD","FKP","GBP","GEL","GHS","GIP","GMD","GNF","GTQ","GYD","HKD","HNL","HUF","IDR","ILS","INR","ISK","JMD","JOD","JPY","KES","KGS","KHR","KMF","KRW","KWD","KYD","KZT","LAK","LBP","LKR","LRD","LSL","LYD","MAD","MDL","MGA","MKD","MNT","MOP","MUR","MVR","MWK","MXN","MYR","NAD","NGN","NIO","NOK","NPR","NZD","OMR","PAB","PEN","PGK","PHP","PKR","PLN","PYG","QAR","RON","RSD","RWF","SAR","SBD","SCR","SEK","SGD","SHP","SLE","SRD","SVC","SZL","THB","TJS","TMT","TND","TOP","TRY","TTD","TWD","TZS","UAH","UGX","USD","UYU","UZS","VND","VUV","WST","XAF","XCD","XOF","XPF","ZAR","ZMW","ZWL"],"type":"string","description":"Three-letter ISO 4217 currency code for the quoted price","examples":["AUD"]}},"required":["base","booking","currency"],"description":"Pricing quote for this admission type, showing base cost and calculated booking fee in cents","examples":[{"base":1000,"booking":200,"currency":"AUD"}]}},"required":["eventId","message","price"],"description":"Response schema for admission pricing quotes, including booking fee calculations and explanatory messages"}},"required":["quote"]}}}}}}},"/orders/{id}":{"get":{"operationId":"order.get","summary":"Get order by ID","tags":["Orders"],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string","description":"Unique identifier of the order to retrieve","examples":["ord_01jps5cgsfgve5b5g2666kyryh"]}},{"name":"signature","in":"query","schema":{"type":"string","minLength":16,"maxLength":16,"description":"HMAC signature for public order access (16 characters, base64url encoded)"},"allowEmptyValue":true,"allowReserved":true}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"object","properties":{"order":{"$ref":"#/components/schemas/Order"}},"required":["order"]}}}}}},"put":{"operationId":"order.update","summary":"Update an order","tags":["Orders"],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string","description":"Unique identifier of the order to update","examples":["ord_01jps5cgsfgve5b5g2666kyryh"]}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"items":{"type":"array","minItems":1,"items":{"type":"object","properties":{"quantity":{"type":"integer","minimum":1,"maximum":9007199254740991,"description":"Number of items purchased (minimum 1)","examples":[2]},"admissionId":{"type":"string","description":"Unique identifier of the admission ticket type, required for ADMISSION items","examples":["adm_01jps5cgsee0xvapbk92e8eb4g"]},"sectionId":{"type":"string","description":"Unique identifier of the venue section for this admission","examples":["sct_01jps5cgse0g3qj16kpq8t221r"]},"admission":{"$ref":"#/components/schemas/Admission","description":"Complete admission details captured at time of purchase. This is a snapshot that preserves the exact ticket type information as it was when the order was placed","examples":[{"id":"adm_01jps5cgsee0xvapbk92e8eb4g","createdAt":"2026-06-07T11:39:32.857Z","updatedAt":"2026-06-07T11:39:32.857Z","sectionId":"sct_01jps5cgse0g3qj16kpq8t221r","teamId":"tem_01jqpjksnsen9vprw95et60t2m","promoterId":"pmt_01jqpjksnsen9vprw95et60t2m","eventId":"evt_01jps5cgsenjrazw6wswmyspa3","eventSlug":"test-event","name":"Final Release","subtitle":"Entry before 10pm","description":"Early bird pricing with priority entry. Must present valid ID at gate.","capacity":100000,"limit":-1,"available":70000,"sold":20000,"reserved":10000,"order":0,"entryStartsAt":"2026-06-08T11:39:32","entryEndsAt":"2026-06-09T11:39:32","saleStartsAt":"2026-06-07T11:39:32","saleEndsAt":"2026-06-09T11:39:32","saleEndsBehavior":"SALE_ENDED","price":{"base":1000,"booking":200,"currency":"AUD"},"visibility":"ALWAYS","tenantId":"tnt_01jqpj2t2kfvmstt6f6tzkbaf2","deleted":false,"orderPadded":"0000000000"}]},"section":{"$ref":"#/components/schemas/Section","description":"Complete section details captured at time of purchase. This is a snapshot that preserves the exact venue area or category information as it was when the order was placed","examples":[{"id":"sct_01jps5cgse0g3qj16kpq8t221r","createdAt":"2026-06-07T11:39:32.857Z","updatedAt":"2026-06-07T11:39:32.857Z","teamId":"tem_01jqpjksnsen9vprw95et60t2m","promoterId":"pmt_01jqpjksnsen9vprw95et60t2m","eventId":"evt_01jps5cgsenjrazw6wswmyspa3","eventSlug":"test-event","name":"General Admission","capacity":1000,"limit":-1,"available":700,"sold":200,"reserved":100,"order":0,"visibility":"ALWAYS","location":{"id":"loc_01hk153x00eh99pagyydz03sbz","createdAt":"2026-06-07T11:39:32.857Z","updatedAt":"2026-06-07T11:39:32.857Z","googlePlaceId":"ChIJ6zWCPUyxEmsRmc6BPrNaP4s","name":"Watson's EQ","address":"The, Entertainment Quarter, 1 Bent St, Moore Park NSW 2021, Australia","city":"Moore Park","state":"New South Wales","postcode":"2021","country":"Australia","latitude":-33.8944593,"longitude":151.2252255,"timeZone":"Australia/Sydney","types":["establishment","point_of_interest","restaurant","bar"],"image":{"src":"https://assets.session.services/locations/watsons-eq.jpg","alt":"Watson's EQ","width":1200,"height":800}},"tenantId":"tnt_01jqpj2t2kfvmstt6f6tzkbaf2","deleted":false,"orderPadded":"0000000000"}]},"id":{"type":"string","description":"Unique identifier for this order item. When omitted, the server assigns an id during processing","examples":["itm_01jps5cgsfwyxj0516571eaf17"]}},"required":["quantity"]},"description":"Updated list of items for the order. Requires signature. Prices will be recalculated and payment intent updated."},"couponCode":{"type":"string","description":"Optional coupon code to apply discount to the order","examples":["TEST50"]},"returnUrl":{"type":"string","description":"Optional URL to redirect to after successful payment","examples":["https://example.com/event/success"]},"signature":{"type":"string","minLength":16,"maxLength":16,"description":"HMAC signature for customer access during checkout (16 characters, base64url encoded). Required for all order updates.","examples":["a1B2c3D4e5F6g7H8"]},"customer":{"type":"object","properties":{"firstName":{"type":"string","description":"Updated first name of the customer","examples":["Test"]},"lastName":{"type":"string","description":"Updated last name of the customer","examples":["User"]},"email":{"type":"string","format":"email","description":"Updated email address of the customer","examples":["test@session.services"]},"phone":{"type":"string","description":"Updated phone number in E.164 format (e.g., +61412345678)","examples":["+61411111111"]},"deliveryMethod":{"enum":["EMAIL","SMS"],"type":"string","description":"Method used to deliver tickets to the customer: EMAIL or SMS","examples":["EMAIL"]}},"description":"Updated customer information for the order. All fields are optional for partial updates."},"marketingConsent":{"type":"object","properties":{"promoter":{"type":"boolean"},"tenant":{"type":"boolean"}},"required":["promoter","tenant"],"description":"Marketing opt-in choices captured during checkout."}},"required":["signature"],"additionalProperties":false}}}},"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"object","properties":{"order":{"$ref":"#/components/schemas/Order"}},"required":["order"]}}}}}}},"/orders":{"get":{"operationId":"order.list","summary":"List orders with cursor-based pagination","description":"Returns order data with cursor-based pagination, optional full-text search via `query`, advanced filters, and deterministic sorting.","tags":["Orders"],"parameters":[{"name":"mine","in":"query","schema":{"type":"boolean","description":"When true, returns only the authenticated user's orders. Can be combined with teamId or eventId to further filter results.","examples":[true]},"allowEmptyValue":true,"allowReserved":true},{"name":"teamId","in":"query","schema":{"type":"string","description":"Filter orders by team unique identifier"},"allowEmptyValue":true,"allowReserved":true},{"name":"eventId","in":"query","schema":{"type":"string","description":"Filter orders by event unique identifier","examples":["evt_01jps5cgsenjrazw6wswmyspa3"]},"allowEmptyValue":true,"allowReserved":true},{"name":"status","in":"query","schema":{"enum":["PENDING","PROCESSING","SUCCESSFUL","DISPUTED","ABANDONED"],"type":"string","description":"Filter orders by payment status","examples":["SUCCESSFUL"]},"allowEmptyValue":true,"allowReserved":true},{"name":"query","in":"query","schema":{"type":"string","description":"Optional search query to filter orders by customer details. When provided, search-backed pagination is used.","examples":["John Doe"]},"allowEmptyValue":true,"allowReserved":true},{"name":"includeEventTerms","in":"query","schema":{"type":"boolean","description":"When true for authenticated user-owned order searches, also matches event name, slug, and location unless eventId is already provided.","examples":[true]},"allowEmptyValue":true,"allowReserved":true},{"name":"filters","in":"query","schema":{"type":"array","maxItems":10,"items":{"type":"object","properties":{"field":{"enum":["STATUS","DELIVERY_METHOD","CUSTOMER_EMAIL","CUSTOMER_PHONE","COUPON_CODE","PAYMENT_SOURCE","PAYMENT_METHOD","CURRENCY","CREATED_AT","UPDATED_AT","RESERVED_AT","TOTAL","TICKETS","ORDER_ID","CUSTOMER_ID","EVENT_ID","PROMOTER_ID","PAYOUT_ID"],"type":"string"},"operator":{"enum":["IS","IS_NOT","IS_ANY_OF","CONTAINS","IS_EMPTY","IS_NOT_EMPTY","BETWEEN","GTE","LTE"],"type":"string"},"values":{"type":"array","maxItems":20,"items":{"type":"string"}}},"required":["field","operator","values"]},"description":"Optional advanced filters for order lists."},"style":"deepObject","explode":true,"allowEmptyValue":true,"allowReserved":true},{"name":"sort","in":"query","schema":{"enum":["UPDATED_AT","CREATED_AT","EVENT_NAME","TOTAL","STATUS","CUSTOMER_NAME","PAYMENT_SOURCE","COUPON_CODE","TICKETS","DELIVERY_METHOD","CUSTOMER_EMAIL","CUSTOMER_PHONE","ORDER_ID"],"type":"string","description":"Field to sort order lists by.","examples":["UPDATED_AT","CREATED_AT","CUSTOMER_NAME"]},"allowEmptyValue":true,"allowReserved":true},{"name":"direction","in":"query","schema":{"enum":["asc","desc"],"type":"string","description":"Sort direction for order lists. Defaults to `desc` when omitted.","examples":["asc","desc"]},"allowEmptyValue":true,"allowReserved":true},{"name":"from","in":"query","schema":{"type":"string","format":"date","description":"Filter orders created on or after this date (YYYY-MM-DD format). Inclusive of the entire day.","examples":["2025-01-01"]},"allowEmptyValue":true,"allowReserved":true},{"name":"to","in":"query","schema":{"type":"string","format":"date","description":"Filter orders created on or before this date (YYYY-MM-DD format). Inclusive of the entire day.","examples":["2025-12-31"]},"allowEmptyValue":true,"allowReserved":true},{"name":"limit","in":"query","schema":{"type":"integer","minimum":1,"maximum":100,"default":20,"description":"Maximum number of orders to return per request (1-100, default: 20)","examples":[20]},"allowEmptyValue":true,"allowReserved":true},{"name":"cursor","in":"query","schema":{"type":"string","description":"Pagination cursor for continuing to fetch subsequent results","examples":["eyJpZCI6Im9yZF8wMWpwczVjZ3NmZ3ZlNWI1ZzI2NjZreXJ5aCJ9"]},"allowEmptyValue":true,"allowReserved":true}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"object","properties":{"orders":{"type":"array","items":{"$ref":"#/components/schemas/Order"},"description":"Array of orders for the current result set"},"before":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Cursor for navigating backward in the result set. Omitted when there are no prior results.","examples":["eyJ2ZXJzaW9uIjoxLCJpbnRlbnQiOnsic291cmNlIjoiZGVtbyJ9LCJwb3MiOnsicHJpbWFyeUtleSI6InBybV8wMXM4NTNqIn19"]},"after":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Cursor for navigating forward in the result set. Omitted when there are no subsequent results.","examples":["eyJ2ZXJzaW9uIjoxLCJpbnRlbnQiOnsic291cmNlIjoiZGVtbyJ9LCJwb3MiOnsicHJpbWFyeUtleSI6InBybV8wMXM4NTNkIn19"]},"limit":{"type":"number","minimum":1,"description":"Maximum number of items to return in each result set","examples":[20]}},"required":["orders","limit"]}}}}}},"post":{"operationId":"order.create","summary":"Create a new order","tags":["Orders"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"eventId":{"type":"string","description":"Unique identifier of the event for which to create the order","examples":["evt_01jps5cgsenjrazw6wswmyspa3"]},"items":{"type":"array","items":{"type":"object","properties":{"quantity":{"type":"integer","minimum":1,"maximum":9007199254740991,"description":"Number of items purchased (minimum 1)","examples":[2]},"admissionId":{"type":"string","description":"Unique identifier of the admission ticket type, required for ADMISSION items","examples":["adm_01jps5cgsee0xvapbk92e8eb4g"]},"sectionId":{"type":"string","description":"Unique identifier of the venue section for this admission","examples":["sct_01jps5cgse0g3qj16kpq8t221r"]},"admission":{"$ref":"#/components/schemas/Admission","description":"Complete admission details captured at time of purchase. This is a snapshot that preserves the exact ticket type information as it was when the order was placed","examples":[{"id":"adm_01jps5cgsee0xvapbk92e8eb4g","createdAt":"2026-06-07T11:39:32.857Z","updatedAt":"2026-06-07T11:39:32.857Z","sectionId":"sct_01jps5cgse0g3qj16kpq8t221r","teamId":"tem_01jqpjksnsen9vprw95et60t2m","promoterId":"pmt_01jqpjksnsen9vprw95et60t2m","eventId":"evt_01jps5cgsenjrazw6wswmyspa3","eventSlug":"test-event","name":"Final Release","subtitle":"Entry before 10pm","description":"Early bird pricing with priority entry. Must present valid ID at gate.","capacity":100000,"limit":-1,"available":70000,"sold":20000,"reserved":10000,"order":0,"entryStartsAt":"2026-06-08T11:39:32","entryEndsAt":"2026-06-09T11:39:32","saleStartsAt":"2026-06-07T11:39:32","saleEndsAt":"2026-06-09T11:39:32","saleEndsBehavior":"SALE_ENDED","price":{"base":1000,"booking":200,"currency":"AUD"},"visibility":"ALWAYS","tenantId":"tnt_01jqpj2t2kfvmstt6f6tzkbaf2","deleted":false,"orderPadded":"0000000000"}]},"section":{"$ref":"#/components/schemas/Section","description":"Complete section details captured at time of purchase. This is a snapshot that preserves the exact venue area or category information as it was when the order was placed","examples":[{"id":"sct_01jps5cgse0g3qj16kpq8t221r","createdAt":"2026-06-07T11:39:32.857Z","updatedAt":"2026-06-07T11:39:32.857Z","teamId":"tem_01jqpjksnsen9vprw95et60t2m","promoterId":"pmt_01jqpjksnsen9vprw95et60t2m","eventId":"evt_01jps5cgsenjrazw6wswmyspa3","eventSlug":"test-event","name":"General Admission","capacity":1000,"limit":-1,"available":700,"sold":200,"reserved":100,"order":0,"visibility":"ALWAYS","location":{"id":"loc_01hk153x00eh99pagyydz03sbz","createdAt":"2026-06-07T11:39:32.857Z","updatedAt":"2026-06-07T11:39:32.857Z","googlePlaceId":"ChIJ6zWCPUyxEmsRmc6BPrNaP4s","name":"Watson's EQ","address":"The, Entertainment Quarter, 1 Bent St, Moore Park NSW 2021, Australia","city":"Moore Park","state":"New South Wales","postcode":"2021","country":"Australia","latitude":-33.8944593,"longitude":151.2252255,"timeZone":"Australia/Sydney","types":["establishment","point_of_interest","restaurant","bar"],"image":{"src":"https://assets.session.services/locations/watsons-eq.jpg","alt":"Watson's EQ","width":1200,"height":800}},"tenantId":"tnt_01jqpj2t2kfvmstt6f6tzkbaf2","deleted":false,"orderPadded":"0000000000"}]},"id":{"type":"string","description":"Unique identifier for this order item. When omitted, the server assigns an id during processing","examples":["itm_01jps5cgsfwyxj0516571eaf17"]}},"required":["quantity"]},"description":"List of items to include in the new order"},"couponCode":{"type":"string","description":"Optional coupon code to apply discount to the order","examples":["TEST50"]},"returnUrl":{"type":"string","description":"Optional URL to redirect to after successful payment","examples":["https://example.com/event/success"]},"channel":{"type":"object","properties":{"name":{"type":"string","description":"Free-form channel identifier describing where the order originated.","examples":["tenant-web","team-web","api","partner"]},"referrer":{"type":"string","description":"Optional referrer URL captured at order creation for redirect routing and attribution.","examples":["https://sash.teams.mixmag.au/events/example-event"]},"utmSource":{"type":"string","description":"Optional UTM source captured from the originating URL.","examples":["instagram"]},"utmMedium":{"type":"string","description":"Optional UTM medium captured from the originating URL.","examples":["social"]},"utmCampaign":{"type":"string","description":"Optional UTM campaign captured from the originating URL.","examples":["summer-launch"]},"deviceType":{"enum":["MOBILE","TABLET","DESKTOP"],"type":"string","description":"Optional analytics device classification captured at order creation.","examples":["MOBILE"]},"browser":{"type":"string","description":"Optional analytics browser classification captured at order creation.","examples":["Chrome"]},"country":{"type":"string","description":"Optional viewer country captured at order creation for analytics attribution.","examples":["Australia"]},"region":{"type":"string","description":"Optional viewer region captured at order creation for analytics attribution.","examples":["Australia - New South Wales"]},"sessionId":{"type":"string","description":"Session ID captured at order creation for client/server analytics linking.","examples":["ses_01HX..."]},"anonymousId":{"type":"string","description":"Browser anonymous ID captured at order creation for attribution linking.","examples":["aid_01HX..."]}},"required":["name"],"description":"Optional channel metadata for where the order originated (for attribution and redirect routing)."},"analytics":{"type":"object","properties":{"postHogDistinctId":{"type":"string","minLength":1,"maxLength":256}},"description":"Optional browser analytics metadata used for cross-domain checkout attribution."}},"required":["eventId","items"],"additionalProperties":false}}}},"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"object","properties":{"order":{"$ref":"#/components/schemas/Order"}},"required":["order"]}}}}}}},"/orders/complimentary":{"post":{"operationId":"order.createComplimentary","summary":"Create a complimentary order","tags":["Orders"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"eventId":{"type":"string","description":"Unique identifier of the event for which to create a complimentary order"},"items":{"type":"array","minItems":1,"items":{"type":"object","properties":{"quantity":{"type":"integer","minimum":1,"maximum":9007199254740991,"description":"Number of items purchased (minimum 1)","examples":[2]},"admissionId":{"type":"string","description":"Unique identifier of the admission ticket type, required for ADMISSION items","examples":["adm_01jps5cgsee0xvapbk92e8eb4g"]},"sectionId":{"type":"string","description":"Unique identifier of the venue section for this admission","examples":["sct_01jps5cgse0g3qj16kpq8t221r"]},"admission":{"$ref":"#/components/schemas/Admission","description":"Complete admission details captured at time of purchase. This is a snapshot that preserves the exact ticket type information as it was when the order was placed","examples":[{"id":"adm_01jps5cgsee0xvapbk92e8eb4g","createdAt":"2026-06-07T11:39:32.857Z","updatedAt":"2026-06-07T11:39:32.857Z","sectionId":"sct_01jps5cgse0g3qj16kpq8t221r","teamId":"tem_01jqpjksnsen9vprw95et60t2m","promoterId":"pmt_01jqpjksnsen9vprw95et60t2m","eventId":"evt_01jps5cgsenjrazw6wswmyspa3","eventSlug":"test-event","name":"Final Release","subtitle":"Entry before 10pm","description":"Early bird pricing with priority entry. Must present valid ID at gate.","capacity":100000,"limit":-1,"available":70000,"sold":20000,"reserved":10000,"order":0,"entryStartsAt":"2026-06-08T11:39:32","entryEndsAt":"2026-06-09T11:39:32","saleStartsAt":"2026-06-07T11:39:32","saleEndsAt":"2026-06-09T11:39:32","saleEndsBehavior":"SALE_ENDED","price":{"base":1000,"booking":200,"currency":"AUD"},"visibility":"ALWAYS","tenantId":"tnt_01jqpj2t2kfvmstt6f6tzkbaf2","deleted":false,"orderPadded":"0000000000"}]},"section":{"$ref":"#/components/schemas/Section","description":"Complete section details captured at time of purchase. This is a snapshot that preserves the exact venue area or category information as it was when the order was placed","examples":[{"id":"sct_01jps5cgse0g3qj16kpq8t221r","createdAt":"2026-06-07T11:39:32.857Z","updatedAt":"2026-06-07T11:39:32.857Z","teamId":"tem_01jqpjksnsen9vprw95et60t2m","promoterId":"pmt_01jqpjksnsen9vprw95et60t2m","eventId":"evt_01jps5cgsenjrazw6wswmyspa3","eventSlug":"test-event","name":"General Admission","capacity":1000,"limit":-1,"available":700,"sold":200,"reserved":100,"order":0,"visibility":"ALWAYS","location":{"id":"loc_01hk153x00eh99pagyydz03sbz","createdAt":"2026-06-07T11:39:32.857Z","updatedAt":"2026-06-07T11:39:32.857Z","googlePlaceId":"ChIJ6zWCPUyxEmsRmc6BPrNaP4s","name":"Watson's EQ","address":"The, Entertainment Quarter, 1 Bent St, Moore Park NSW 2021, Australia","city":"Moore Park","state":"New South Wales","postcode":"2021","country":"Australia","latitude":-33.8944593,"longitude":151.2252255,"timeZone":"Australia/Sydney","types":["establishment","point_of_interest","restaurant","bar"],"image":{"src":"https://assets.session.services/locations/watsons-eq.jpg","alt":"Watson's EQ","width":1200,"height":800}},"tenantId":"tnt_01jqpj2t2kfvmstt6f6tzkbaf2","deleted":false,"orderPadded":"0000000000"}]},"id":{"type":"string","description":"Unique identifier for this order item. When omitted, the server assigns an id during processing","examples":["itm_01jps5cgsfwyxj0516571eaf17"]}},"required":["quantity"]},"description":"Admission items to include in the complimentary order"},"customer":{"type":"object","properties":{"firstName":{"type":"string","minLength":1},"lastName":{"type":"string","minLength":1},"email":{"type":"string","format":"email"}},"required":["firstName","lastName","email"]},"notifyCustomer":{"type":"boolean","default":true,"description":"Whether to send the standard order confirmation email after tickets are generated"},"reason":{"type":"string","minLength":1},"idempotencyKey":{"type":"string","minLength":1,"maxLength":255}},"required":["eventId","items","customer","reason"],"additionalProperties":false}}}},"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"object","properties":{"order":{"$ref":"#/components/schemas/Order"}},"required":["order"]}}}}}}},"/orders/{id}/reserve":{"post":{"operationId":"order.reserve","summary":"Re-reserve inventory for an abandoned order","description":"Attempts to re-reserve inventory for an abandoned order. If inventory is available, the order status is set back to PENDING with a new reservation timer. Returns the updated order with a new reservedAt timestamp if successful.","tags":["Orders"],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string","description":"Unique identifier of the order to reserve inventory for","examples":["ord_01jps5cgsfgve5b5g2666kyryh"]}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"signature":{"type":"string","minLength":16,"maxLength":16,"description":"HMAC signature for customer access during checkout (16 characters, base64url encoded).","examples":["a1B2c3D4e5F6g7H8"]}},"required":["signature"],"additionalProperties":false}}}},"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"object","properties":{"order":{"$ref":"#/components/schemas/Order"}},"required":["order"]}}}}}}},"/orders/quote":{"post":{"operationId":"order.quote","summary":"Create order quote","tags":["Orders"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"eventId":{"type":"string","description":"Unique identifier of the event for which to generate a price quote","examples":["evt_01jps5cgsenjrazw6wswmyspa3"]},"items":{"type":"array","items":{"type":"object","properties":{"quantity":{"type":"integer","minimum":1,"maximum":9007199254740991,"description":"Number of items purchased (minimum 1)","examples":[2]},"admissionId":{"type":"string","description":"Unique identifier of the admission ticket type, required for ADMISSION items","examples":["adm_01jps5cgsee0xvapbk92e8eb4g"]},"sectionId":{"type":"string","description":"Unique identifier of the venue section for this admission","examples":["sct_01jps5cgse0g3qj16kpq8t221r"]},"admission":{"$ref":"#/components/schemas/Admission","description":"Complete admission details captured at time of purchase. This is a snapshot that preserves the exact ticket type information as it was when the order was placed","examples":[{"id":"adm_01jps5cgsee0xvapbk92e8eb4g","createdAt":"2026-06-07T11:39:32.857Z","updatedAt":"2026-06-07T11:39:32.857Z","sectionId":"sct_01jps5cgse0g3qj16kpq8t221r","teamId":"tem_01jqpjksnsen9vprw95et60t2m","promoterId":"pmt_01jqpjksnsen9vprw95et60t2m","eventId":"evt_01jps5cgsenjrazw6wswmyspa3","eventSlug":"test-event","name":"Final Release","subtitle":"Entry before 10pm","description":"Early bird pricing with priority entry. Must present valid ID at gate.","capacity":100000,"limit":-1,"available":70000,"sold":20000,"reserved":10000,"order":0,"entryStartsAt":"2026-06-08T11:39:32","entryEndsAt":"2026-06-09T11:39:32","saleStartsAt":"2026-06-07T11:39:32","saleEndsAt":"2026-06-09T11:39:32","saleEndsBehavior":"SALE_ENDED","price":{"base":1000,"booking":200,"currency":"AUD"},"visibility":"ALWAYS","tenantId":"tnt_01jqpj2t2kfvmstt6f6tzkbaf2","deleted":false,"orderPadded":"0000000000"}]},"section":{"$ref":"#/components/schemas/Section","description":"Complete section details captured at time of purchase. This is a snapshot that preserves the exact venue area or category information as it was when the order was placed","examples":[{"id":"sct_01jps5cgse0g3qj16kpq8t221r","createdAt":"2026-06-07T11:39:32.857Z","updatedAt":"2026-06-07T11:39:32.857Z","teamId":"tem_01jqpjksnsen9vprw95et60t2m","promoterId":"pmt_01jqpjksnsen9vprw95et60t2m","eventId":"evt_01jps5cgsenjrazw6wswmyspa3","eventSlug":"test-event","name":"General Admission","capacity":1000,"limit":-1,"available":700,"sold":200,"reserved":100,"order":0,"visibility":"ALWAYS","location":{"id":"loc_01hk153x00eh99pagyydz03sbz","createdAt":"2026-06-07T11:39:32.857Z","updatedAt":"2026-06-07T11:39:32.857Z","googlePlaceId":"ChIJ6zWCPUyxEmsRmc6BPrNaP4s","name":"Watson's EQ","address":"The, Entertainment Quarter, 1 Bent St, Moore Park NSW 2021, Australia","city":"Moore Park","state":"New South Wales","postcode":"2021","country":"Australia","latitude":-33.8944593,"longitude":151.2252255,"timeZone":"Australia/Sydney","types":["establishment","point_of_interest","restaurant","bar"],"image":{"src":"https://assets.session.services/locations/watsons-eq.jpg","alt":"Watson's EQ","width":1200,"height":800}},"tenantId":"tnt_01jqpj2t2kfvmstt6f6tzkbaf2","deleted":false,"orderPadded":"0000000000"}]},"id":{"type":"string","description":"Unique identifier for this order item. When omitted, the server assigns an id during processing","examples":["itm_01jps5cgsfwyxj0516571eaf17"]}},"required":["quantity"]},"description":"List of items to include in the price quote calculation"},"couponCode":{"type":"string","description":"Optional coupon code to apply discount to the quote","examples":["TEST50"]}},"required":["eventId","items"],"additionalProperties":false}}}},"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"object","properties":{"quote":{"type":"object","properties":{"items":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string","description":"Unique identifier for this order item","examples":["itm_01jps5cgsfwyxj0516571eaf17"]},"kind":{"enum":["ADMISSION","ADDON"],"type":"string","description":"Type of item: ADMISSION for tickets, ADDON for additional products or services","examples":["ADMISSION"]},"quantity":{"type":"integer","minimum":1,"maximum":9007199254740991,"description":"Number of items purchased (minimum 1)","examples":[2]},"admissionId":{"type":"string","description":"Unique identifier of the admission ticket type, required for ADMISSION items","examples":["adm_01jps5cgsee0xvapbk92e8eb4g"]},"sectionId":{"type":"string","description":"Unique identifier of the venue section for this admission","examples":["sct_01jps5cgse0g3qj16kpq8t221r"]},"admission":{"$ref":"#/components/schemas/Admission","description":"Complete admission details for this order item when available"},"section":{"$ref":"#/components/schemas/Section","description":"Complete section details for this order item when applicable"},"price":{"type":"object","properties":{"net":{"type":"integer","minimum":0,"maximum":9007199254740991,"description":"Total amount to pay to promoter in cents.\nCalculated as: total - booking - refunded","examples":[1200]},"total":{"type":"integer","minimum":0,"maximum":9007199254740991,"description":"Total amount the customer should pay in cents.\nCalculated as: gross - discount","examples":[1200]},"gross":{"type":"integer","minimum":0,"maximum":9007199254740991,"description":"Total amount before refunds and discounts in cents.\nCalculated as: base + booking","examples":[1200]},"base":{"type":"integer","minimum":0,"maximum":9007199254740991,"description":"Total ticket price in cents","examples":[1000]},"booking":{"type":"integer","minimum":0,"maximum":9007199254740991,"description":"Total booking fees in cents (non-refundable)","examples":[200]},"refunded":{"type":"integer","minimum":-9007199254740991,"maximum":0,"description":"Total amount refunded in cents","examples":[0]},"discount":{"type":"integer","minimum":-9007199254740991,"maximum":0,"description":"Total amount discounted in cents","examples":[0]},"currency":{"enum":["AED","ALL","AMD","ANG","AOA","ARS","AUD","AWG","AZN","BAM","BBD","BDT","BGN","BHD","BIF","BMD","BND","BOB","BRL","BSD","BTN","BWP","BZD","CAD","CHF","CLP","CNY","COP","CRC","CVE","CZK","DJF","DKK","DOP","DZD","EGP","ERN","ETB","EUR","FJD","FKP","GBP","GEL","GHS","GIP","GMD","GNF","GTQ","GYD","HKD","HNL","HUF","IDR","ILS","INR","ISK","JMD","JOD","JPY","KES","KGS","KHR","KMF","KRW","KWD","KYD","KZT","LAK","LBP","LKR","LRD","LSL","LYD","MAD","MDL","MGA","MKD","MNT","MOP","MUR","MVR","MWK","MXN","MYR","NAD","NGN","NIO","NOK","NPR","NZD","OMR","PAB","PEN","PGK","PHP","PKR","PLN","PYG","QAR","RON","RSD","RWF","SAR","SBD","SCR","SEK","SGD","SHP","SLE","SRD","SVC","SZL","THB","TJS","TMT","TND","TOP","TRY","TTD","TWD","TZS","UAH","UGX","USD","UYU","UZS","VND","VUV","WST","XAF","XCD","XOF","XPF","ZAR","ZMW","ZWL"],"type":"string","description":"Currency code in ISO 4217 format.","examples":["AUD"]}},"required":["net","total","gross","base","booking","refunded","discount","currency"],"description":"Pricing breakdown for this order item including all fees and discounts"}},"required":["id","kind","quantity","price"]},"description":"List of order items with complete pricing and admission details"},"price":{"type":"object","properties":{"net":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991,"description":"Total amount to pay to promoter in cents.\nCalculated as: total + booking + refunded + dispute","examples":[500]},"total":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991,"description":"Total amount the customer should pay in cents.\nCalculated as: gross + discount","examples":[1400]},"gross":{"type":"integer","minimum":0,"maximum":9007199254740991,"description":"Total amount before refunds and discounts in cents.\nCalculated as: base + booking + shipping","examples":[2200]},"base":{"type":"integer","minimum":0,"maximum":9007199254740991,"description":"Total ticket price in cents","examples":[1000]},"booking":{"type":"integer","minimum":0,"maximum":9007199254740991,"description":"Total booking fees in cents (non-refundable)","examples":[400]},"shipping":{"type":"integer","minimum":0,"maximum":9007199254740991,"description":"Total shipping amount in cents","examples":[0]},"sms":{"type":"integer","minimum":0,"maximum":9007199254740991,"default":0,"description":"SMS delivery fee in cents (customer-facing price in event currency)","examples":[200]},"refunded":{"type":"integer","minimum":-9007199254740991,"maximum":0,"description":"Total amount refunded in cents (negative value)","examples":[-700]},"discount":{"type":"integer","minimum":-9007199254740991,"maximum":0,"description":"Total amount discounted in cents (negative value)","examples":[-1000]},"gateway":{"type":"integer","minimum":-9007199254740991,"maximum":0,"description":"Total absorbed payment gateway fees in cents (negative value)","examples":[0]},"dispute":{"type":"integer","minimum":-9007199254740991,"maximum":0,"description":"Total non-absorbed payment gateway fees in cents (negative value)","examples":[0]},"currency":{"enum":["AED","ALL","AMD","ANG","AOA","ARS","AUD","AWG","AZN","BAM","BBD","BDT","BGN","BHD","BIF","BMD","BND","BOB","BRL","BSD","BTN","BWP","BZD","CAD","CHF","CLP","CNY","COP","CRC","CVE","CZK","DJF","DKK","DOP","DZD","EGP","ERN","ETB","EUR","FJD","FKP","GBP","GEL","GHS","GIP","GMD","GNF","GTQ","GYD","HKD","HNL","HUF","IDR","ILS","INR","ISK","JMD","JOD","JPY","KES","KGS","KHR","KMF","KRW","KWD","KYD","KZT","LAK","LBP","LKR","LRD","LSL","LYD","MAD","MDL","MGA","MKD","MNT","MOP","MUR","MVR","MWK","MXN","MYR","NAD","NGN","NIO","NOK","NPR","NZD","OMR","PAB","PEN","PGK","PHP","PKR","PLN","PYG","QAR","RON","RSD","RWF","SAR","SBD","SCR","SEK","SGD","SHP","SLE","SRD","SVC","SZL","THB","TJS","TMT","TND","TOP","TRY","TTD","TWD","TZS","UAH","UGX","USD","UYU","UZS","VND","VUV","WST","XAF","XCD","XOF","XPF","ZAR","ZMW","ZWL"],"type":"string","description":"Currency code in ISO 4217 format","examples":["AUD"]}},"required":["net","total","gross","base","booking","shipping","refunded","discount","gateway","dispute","currency"],"description":"Total pricing breakdown for the entire order quote"},"couponCode":{"$ref":"#/components/schemas/CouponCode","description":"Applied coupon code details if a discount was used in this quote"}},"required":["items","price"]}},"required":["quote"]}}}}}}},"/orders/{id}/resend":{"post":{"operationId":"order.resend","summary":"Resend tickets to customer","description":"Resend order tickets to the customer's email. Optionally provide a different email address.","tags":["Orders"],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string","description":"Order ID to resend tickets for","examples":["ord_01jps5cgsfgve5b5g2666kyryh"]}}],"requestBody":{"required":false,"content":{"application/json":{"schema":{"type":"object","properties":{"email":{"type":"string","format":"email","description":"Email address to send tickets to. If not provided, uses order.customer.email","examples":["customer@example.com"]}},"additionalProperties":false}}}},"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"object","properties":{"order":{"$ref":"#/components/schemas/Order"}},"required":["order"]}}}}}}},"/orders/{id}/refund":{"post":{"operationId":"order.refund","summary":"Refund order items","description":"Process a refund for order items. Supports full or partial refunds with optional ticket cancellation.","tags":["Orders"],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string","pattern":"^ord_[0-9a-z]{26}$","description":"Identifier of the order to refund","examples":["ord_01jps5cgsfgve5b5g2666kyryh"]}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"fullRefund":{"type":"boolean","default":false,"description":"When true, refunds all remaining refundable items. Mutually exclusive with items.","examples":[false]},"items":{"type":"array","items":{"type":"object","properties":{"orderItemId":{"type":"string","description":"Identifier of the order item to refund","examples":["itm_01jps5cgsfwyxj0516571eaf17"]},"quantity":{"type":"integer","minimum":1,"maximum":9007199254740991,"description":"Number of units to refund for this item","examples":[2]}},"required":["orderItemId","quantity"]},"description":"Specific items and quantities to refund. Required if fullRefund is false."},"shippingAmount":{"type":"integer","minimum":0,"maximum":9007199254740991,"description":"Amount of shipping to refund in cents. Cannot exceed remaining refundable shipping.","examples":[500]},"cancelTickets":{"type":"boolean","default":true,"description":"Whether to cancel tickets associated with refunded items. Defaults to true.","examples":[true]},"notify":{"type":"boolean","default":true,"description":"Whether to send a refund confirmation email to the customer. Defaults to true.","examples":[true]},"reason":{"enum":["CUSTOMER_REQUEST","DUPLICATE","EVENT_CANCELLED","OTHER"],"type":"string","description":"Categorized reason for the refund","examples":["CUSTOMER_REQUEST","DUPLICATE","EVENT_CANCELLED"]},"note":{"type":"string","description":"Free-form notes explaining the refund","examples":["Customer requested refund due to schedule conflict"]},"idempotencyKey":{"type":"string","description":"Client-provided key to prevent duplicate refund processing. Recommended for programmatic refunds.","examples":["refund_12345_customer_request"]},"metadata":{"type":"object","propertyNames":{"type":"string"},"additionalProperties":{"type":"string"},"description":"Custom key-value pairs passed through to the payment gateway","examples":[{"supportTicket":"#12345"}]}},"required":["reason"],"additionalProperties":false}}}},"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"object","properties":{"refund":{"type":"object","properties":{"id":{"type":"string","description":"Unique identifier for this refund","examples":["rfd_01jps5cgsfgve5b5g2666kyryh"]},"request":{"type":"object","properties":{"idempotencyKey":{"type":"string","description":"Client-provided key to prevent duplicate refund processing","examples":["refund_12345_customer_request"]}},"description":"Request metadata supplied by Sessions or API callers"},"status":{"enum":["PENDING","PROCESSING","SUCCEEDED","FAILED"],"type":"string","description":"Current processing status. PENDING: awaiting gateway confirmation or async processing (e.g., bank transfers). PROCESSING: gateway confirmed, ticket cancellation in progress. SUCCEEDED/FAILED: terminal states.","examples":["PENDING","SUCCEEDED"]},"acceptedAt":{"type":"string","format":"date-time","description":"Timestamp when the payment gateway accepted the refund","examples":["2026-06-07T11:39:32.858Z"]},"failedAt":{"type":"string","format":"date-time","description":"Timestamp when the refund failed","examples":["2026-06-07T11:39:32.858Z"]},"failure":{"type":"object","properties":{"reason":{"type":"string","description":"Gateway or system failure reason","examples":["Insufficient funds for refund"]},"message":{"type":"string","description":"User-facing failure message when available","examples":["The refund could not be processed."]}},"required":["reason"],"description":"Failure details when the refund failed"},"price":{"type":"object","properties":{"currency":{"type":"string","description":"Currency used for all refund amounts","examples":["AUD"]},"total":{"type":"integer","minimum":1,"maximum":9007199254740991,"description":"Total refund amount in cents, including ticket, shipping, and fee portions.","examples":[1200]},"items":{"type":"integer","minimum":0,"maximum":9007199254740991,"description":"Ticket item portion of the refund in cents","examples":[1200]},"shipping":{"type":"integer","minimum":0,"maximum":9007199254740991,"description":"Shipping portion of the refund in cents","examples":[0]},"fees":{"type":"integer","minimum":0,"maximum":9007199254740991,"description":"Fee portion of the refund in cents","examples":[0]}},"required":["currency","total","items","shipping","fees"],"description":"Refund amount breakdown"},"reason":{"enum":["CUSTOMER_REQUEST","DUPLICATE","EVENT_CANCELLED","OTHER"],"type":"string","description":"Categorized reason for the refund used for analytics","examples":["CUSTOMER_REQUEST","DUPLICATE","EVENT_CANCELLED"]},"note":{"type":"string","description":"Free-form notes explaining the refund","examples":["Customer requested refund due to schedule conflict"]},"items":{"type":"array","items":{"type":"object","properties":{"orderItemId":{"type":"string","description":"Identifier of the order item being refunded","examples":["itm_01jps5cgsfwyxj0516571eaf17"]},"quantity":{"type":"integer","minimum":1,"maximum":9007199254740991,"description":"Number of units refunded for this item","examples":[2]},"amount":{"type":"integer","minimum":0,"maximum":9007199254740991,"description":"Refund amount for this item in cents (base price only, excludes booking fee)","examples":[1200]},"ticketIds":{"type":"array","items":{"type":"string"},"description":"Specific ticket identifiers that were refunded (selected via FIFO)","examples":[["tkt_01jps5cgsg0s32w2pr73vbccde"]]}},"required":["orderItemId","quantity","amount","ticketIds"]},"description":"Line items included in this refund with quantities and amounts"},"tickets":{"type":"object","properties":{"cancelRequested":{"type":"boolean","description":"Whether ticket cancellation was requested for the refund","examples":[true]},"cancelled":{"type":"boolean","description":"Whether tickets were cancelled as part of this refund","examples":[true]},"cancelledCount":{"type":"integer","minimum":0,"maximum":9007199254740991,"description":"Number of tickets that were cancelled","examples":[2]}},"required":["cancelRequested","cancelled","cancelledCount"],"description":"Ticket cancellation state for the refund"},"gateway":{"type":"object","properties":{"provider":{"enum":["FREE","AIRWALLEX","STRIPE"],"type":"string","description":"Payment gateway used to process the refund","examples":["STRIPE","AIRWALLEX"]},"refundId":{"type":"string","description":"Refund identifier from the payment gateway","examples":["re_1234567890abcdef"]},"idempotencyKey":{"type":"string","description":"Idempotency key sent to the payment gateway","examples":["rfd_01jps5cgsfgve5b5g2666kyryh"]}},"required":["provider"],"description":"Gateway refund identifiers"},"actor":{"type":"object","properties":{"type":{"enum":["USER","GATEWAY","SYSTEM"],"type":"string","description":"Who initiated the refund","examples":["USER","GATEWAY"]},"userId":{"type":"string","description":"Identifier of the user who initiated the refund","examples":["usr_01jps5cgsd4tzjghtnt45qnhn0"]}},"required":["type"],"description":"Refund initiator"},"metadata":{"type":"object","propertyNames":{"type":"string"},"additionalProperties":{"type":"string"},"description":"Custom key-value pairs passed through to the payment gateway","examples":[{"supportTicket":"#12345"}]},"notification":{"type":"object","properties":{"requested":{"type":"boolean","description":"Whether a customer refund confirmation email was requested.","examples":[true]},"sentAt":{"type":"string","format":"date-time","description":"Timestamp when the refund confirmation email was sent.","examples":["2026-06-07T11:39:32.858Z"]}},"required":["requested"],"description":"Refund confirmation notification state"},"createdAt":{"type":"string","format":"date-time","description":"Timestamp when the refund was created","examples":["2026-06-07T11:39:32.858Z"]}},"required":["id","status","price","reason","items","tickets","gateway","actor","notification","createdAt"]}},"required":["refund"]}}}}}}},"/orders/{id}/notes":{"post":{"operationId":"order.note.create","summary":"Add note to order timeline (promoter only)","description":"Add a user note to the order timeline. Note will be marked as editable by the author.","tags":["Orders"],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string","description":"Unique identifier of the order to add a note to","examples":["ord_01jps5cgsfgve5b5g2666kyryh"]}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"note":{"type":"string","minLength":1,"maxLength":1000,"description":"Note text content (1-1000 characters)","examples":["Customer requested special seating arrangements"]}},"required":["note"],"additionalProperties":false}}}},"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"object","properties":{"order":{"$ref":"#/components/schemas/Order"}},"required":["order"]}}}}}}},"/orders/{id}/notes/{noteId}":{"patch":{"operationId":"order.note.update","summary":"Update timeline note (author only)","description":"Update a timeline note. Only the author can edit their own notes. System-generated entries cannot be edited.","tags":["Orders"],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string","description":"Unique identifier of the order","examples":["ord_01jps5cgsfgve5b5g2666kyryh"]}},{"name":"noteId","in":"path","required":true,"schema":{"type":"string","description":"Unique identifier of the timeline note to update","examples":["tl_1234567890_abc123"]}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"note":{"type":"string","minLength":1,"maxLength":1000,"description":"Updated note text content (1-1000 characters)","examples":["Updated: Customer confirmed special seating arrangements"]}},"required":["note"],"additionalProperties":false}}}},"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"object","properties":{"order":{"$ref":"#/components/schemas/Order"}},"required":["order"]}}}}}},"delete":{"operationId":"order.note.remove","summary":"Delete timeline note (author only)","description":"Delete a timeline note. Only the author can delete their own notes. System-generated entries cannot be deleted.","tags":["Orders"],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string","description":"Unique identifier of the order","examples":["ord_01jps5cgsfgve5b5g2666kyryh"]}},{"name":"noteId","in":"path","required":true,"schema":{"type":"string","description":"Unique identifier of the timeline note to delete","examples":["tl_1234567890_abc123"]}}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"anyOf":[{"not":{}},{"not":{}}]}}}}}}},"/tickets/{id}":{"get":{"operationId":"ticket.get","summary":"Get ticket by ID","tags":["Tickets"],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string","readOnly":true,"description":"Unique identifier for the ticket","examples":["tkt_01jps5cgsg0s32w2pr73vbccde"]}},{"name":"signature","in":"query","schema":{"type":"string","minLength":16,"maxLength":16,"description":"HMAC signature for public ticket access (16 characters, base64url encoded)"},"allowEmptyValue":true,"allowReserved":true}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"object","properties":{"ticket":{"$ref":"#/components/schemas/Ticket"}},"required":["ticket"]}}}}}},"put":{"operationId":"ticket.update","summary":"Update a ticket","tags":["Tickets"],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string","description":"Unique identifier of the ticket to update","examples":["tkt_01jps5cgsg0s32w2pr73vbccde"]}}],"requestBody":{"required":false,"content":{"application/json":{"schema":{"type":"object","properties":{"status":{"enum":["ACTIVE","CANCELLED"],"type":"string","description":"Update ticket status: CANCELLED to void, ACTIVE to reactivate"},"attendee":{"anyOf":[{"type":"object","properties":{"firstName":{"type":"string","minLength":1,"description":"First name of the ticket attendee","examples":["Test"]},"lastName":{"type":"string","minLength":1,"description":"Last name of the ticket attendee","examples":["User"]},"email":{"type":"string","format":"email","description":"Email address of the ticket attendee","examples":["test@session.services"]},"phone":{"type":"string","description":"Phone number of the ticket attendee (optional)","examples":["+61411111111"]}}},{"type":"null"}],"description":"Attendee info. Pass object to set/update, null to clear, or omit to leave unchanged."},"admissionId":{"type":"string","description":"Change ticket type/admission (admission and section objects will be fetched from event and stored)","examples":["adm_01jps5cgsee0xvapbk92e8eb4g"]}},"additionalProperties":false}}}},"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"object","properties":{"ticket":{"$ref":"#/components/schemas/Ticket"}},"required":["ticket"]}}}}}}},"/tickets":{"get":{"operationId":"ticket.list","summary":"List tickets with cursor-based pagination","description":"Returns ticket data with cursor-based pagination, optional full-text search via `query`, and a fixed attendee-name ascending order for non-search list paths.","tags":["Tickets"],"parameters":[{"name":"promoterId","in":"query","schema":{"type":"string","description":"Filter tickets by promoter/organizer unique identifier (optional)","examples":["pmt_01jqpjksnsen9vprw95et60t2m"]},"allowEmptyValue":true,"allowReserved":true},{"name":"eventId","in":"query","schema":{"type":"string","description":"Filter tickets by event unique identifier (optional)","examples":["evt_01jps5cgsenjrazw6wswmyspa3"]},"allowEmptyValue":true,"allowReserved":true},{"name":"customerId","in":"query","schema":{"type":"string","description":"Filter tickets by customer unique identifier (optional)","examples":["cus_01jps5cgsf4pn2a32eamppnap1"]},"allowEmptyValue":true,"allowReserved":true},{"name":"orderId","in":"query","schema":{"type":"string","description":"Filter tickets by order unique identifier (optional)","examples":["ord_01jps5cgsfgve5b5g2666kyryh"]},"allowEmptyValue":true,"allowReserved":true},{"name":"status","in":"query","schema":{"enum":["ACTIVE","REDEEMED","CANCELLED"],"type":"string","description":"Filter tickets by status: ACTIVE (can be used), REDEEMED (already used), CANCELLED (invalidated or refunded)","examples":["ACTIVE"]},"allowEmptyValue":true,"allowReserved":true},{"name":"orderSignature","in":"query","schema":{"type":"string","minLength":16,"maxLength":16,"description":"Order signature used to access tickets for a specific order without permissions (16 characters, base64url encoded)"},"allowEmptyValue":true,"allowReserved":true},{"name":"query","in":"query","schema":{"type":"string","description":"Optional search query to filter tickets by customer details. When provided, search-backed pagination is used.","examples":["John Doe"]},"allowEmptyValue":true,"allowReserved":true},{"name":"limit","in":"query","schema":{"type":"integer","minimum":1,"maximum":100,"default":20,"description":"Maximum number of tickets to return per request (1-100, default: 20)","examples":[20]},"allowEmptyValue":true,"allowReserved":true},{"name":"cursor","in":"query","schema":{"type":"string","description":"Pagination cursor for continuing to fetch subsequent results (optional)","examples":["eyJpZCI6InRrdF8wMWpwczVjZ3NnMHMzMncycHI3M3ZiY2NkZSJ9"]},"allowEmptyValue":true,"allowReserved":true}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"object","properties":{"tickets":{"type":"array","items":{"$ref":"#/components/schemas/Ticket"},"description":"Array of tickets for the current result set"},"before":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Cursor for navigating backward in the result set. Omitted when there are no prior results.","examples":["eyJ2ZXJzaW9uIjoxLCJpbnRlbnQiOnsic291cmNlIjoiZGVtbyJ9LCJwb3MiOnsicHJpbWFyeUtleSI6InBybV8wMXM4NTNqIn19"]},"after":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Cursor for navigating forward in the result set. Omitted when there are no subsequent results.","examples":["eyJ2ZXJzaW9uIjoxLCJpbnRlbnQiOnsic291cmNlIjoiZGVtbyJ9LCJwb3MiOnsicHJpbWFyeUtleSI6InBybV8wMXM4NTNkIn19"]},"limit":{"type":"number","minimum":1,"description":"Maximum number of items to return in each result set","examples":[20]}},"required":["tickets","limit"]}}}}}},"post":{"operationId":"ticket.create","summary":"Create a new ticket","tags":["Tickets"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"status":{"enum":["ACTIVE","REDEEMED","CANCELLED"],"type":"string","description":"Current status of the ticket: ACTIVE (can be used), REDEEMED (already used), CANCELLED (invalidated or refunded)","examples":["ACTIVE"]},"admissionId":{"type":"string","pattern":"^adm_[0-9a-z]{26}$","description":"Unique identifier of the admission type/tier this ticket represents","examples":["adm_01jps5cgsee0xvapbk92e8eb4g"]},"orderItemId":{"type":"string","description":"Unique identifier of the specific order item this ticket represents (optional for legacy tickets)","examples":["itm_01jps5cgsfwyxj0516571eaf17"]},"orderId":{"type":"string","description":"The order this ticket belongs to","examples":["ord_01jps5cgsfgve5b5g2666kyryh"]},"customerId":{"type":"string","description":"The customer who purchased this ticket","examples":["cus_01jps5cgsf4pn2a32eamppnap1"]},"attendee":{"type":"object","properties":{"firstName":{"type":"string","minLength":1,"description":"First name of the ticket attendee","examples":["Test"]},"lastName":{"type":"string","minLength":1,"description":"Last name of the ticket attendee","examples":["User"]},"email":{"type":"string","format":"email","description":"Email address of the ticket attendee","examples":["test@session.services"]},"phone":{"type":"string","description":"Phone number of the ticket attendee (optional)","examples":["+61411111111"]}},"required":["firstName","lastName","email"],"description":"Optional attendee information - defaults to order customer details if not provided"}},"required":["status","admissionId","orderId","customerId"],"additionalProperties":false}}}},"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"object","properties":{"ticket":{"$ref":"#/components/schemas/Ticket"}},"required":["ticket"]}}}}}}},"/tickets/attendees":{"get":{"operationId":"ticket.attendees.list","summary":"List event attendees with alpha-navigation support","description":"Returns ticket-backed attendee roster rows for an event. Supports bounded browsing, alpha jump bookmarks, and attendee search.","tags":["Tickets"],"parameters":[{"name":"eventId","in":"query","required":true,"schema":{"type":"string","pattern":"^evt_[0-9a-z]{26}$","description":"Event identifier for the attendee roster.","examples":["evt_01jps5cgsenjrazw6wswmyspa3"]},"allowEmptyValue":true,"allowReserved":true},{"name":"admissionIds","in":"query","required":false,"schema":{"type":"array","items":{"type":"string","pattern":"^adm_[0-9a-z]{26}$","description":"Unique admission identifier"},"description":"Optional admission filters. When provided, only matching ticket admissions are included.","examples":[["adm_01jps5cgsee0xvapbk92e8eb4g"]]},"style":"deepObject","explode":true,"allowEmptyValue":true,"allowReserved":true},{"name":"sectionIds","in":"query","required":false,"schema":{"type":"array","items":{"type":"string","pattern":"^sct_[0-9a-z]{26}$","description":"Unique section identifier"},"description":"Optional section filters. When provided, only matching ticket sections are included.","examples":[["sct_01jps5cgse0g3qj16kpq8t221r"]]},"style":"deepObject","explode":true,"allowEmptyValue":true,"allowReserved":true},{"name":"query","in":"query","required":false,"schema":{"type":"string","description":"Optional attendee search query. Matches attendee name, email, and phone.","examples":["John","john@example.com","+61400000000"]},"allowEmptyValue":true,"allowReserved":true},{"name":"cursor","in":"query","required":false,"schema":{"type":"string","description":"Opaque cursor for pagination. Use the cursor from the previous response to continue fetching results."},"allowEmptyValue":true,"allowReserved":true},{"name":"before","in":"query","required":false,"schema":{"type":"string","description":"Cursor for loading roster rows before the current window. Mutually exclusive with cursor and anchor."},"allowEmptyValue":true,"allowReserved":true},{"name":"anchor","in":"query","required":false,"schema":{"type":"string","description":"Server-issued bookmark used to jump to a roster bucket. Mutually exclusive with cursor and before."},"allowEmptyValue":true,"allowReserved":true},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","minimum":1,"maximum":100,"default":100,"description":"Maximum number of attendee roster rows to return per request (1-100, default: 100).","examples":[100]},"allowEmptyValue":true,"allowReserved":true}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"object","properties":{"tickets":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string","pattern":"^tkt_[0-9a-z]{26}$","description":"Ticket identifier for this attendee roster row.","examples":["tkt_01jps5cgsg0s32w2pr73vbccde"]},"orderId":{"type":"string","pattern":"^ord_[0-9a-z]{26}$","description":"Order identifier used to navigate to order details.","examples":["ord_01jps5cgsfgve5b5g2666kyryh"]},"status":{"enum":["ACTIVE","REDEEMED","CANCELLED"],"type":"string","description":"Current ticket status for the attendee row."},"attendee":{"type":"object","properties":{"firstName":{"type":"string","minLength":1,"description":"First name of the ticket attendee","examples":["Test"]},"lastName":{"type":"string","minLength":1,"description":"Last name of the ticket attendee","examples":["User"]},"email":{"type":"string","format":"email","description":"Email address of the ticket attendee","examples":["test@session.services"]},"phone":{"type":"string","description":"Phone number of the ticket attendee (optional)","examples":["+61411111111"]}},"required":["firstName","lastName","email"],"description":"Editable attendee identity fields for this ticket."},"admission":{"type":"object","properties":{"id":{"type":"string","description":"Admission ID reference","examples":["adm_01jps5cgsee0xvapbk92e8eb4g"]},"name":{"type":"string","description":"Admission type name at time of purchase","examples":["VIP Access","General Admission","Early Bird"]},"entryEndsAt":{"type":"string","pattern":"^\\d{4}-\\d{2}-\\d{2}T\\d{2}:\\d{2}:\\d{2}$","description":"Wall clock time when entry period ends (no timezone, displays same everywhere)","examples":["2025-03-15T19:30:00"]}},"required":["id","name","entryEndsAt"],"description":"Admission snapshot needed for roster labels and expiry state."},"section":{"type":"object","properties":{"id":{"type":"string","description":"Section ID reference","examples":["sct_01jps5cgse0g3qj16kpq8t221r"]},"name":{"type":"string","description":"Section name at time of purchase","examples":["Floor Section A","Balcony Left","VIP Lounge"]}},"required":["id","name"],"description":"Optional section label shown in the roster row."},"lastScan":{"type":"object","properties":{"kind":{"enum":["CHECK_IN","CHECK_OUT"],"type":"string","description":"The most recent attendee scan action."},"scannedAt":{"type":"string","format":"date-time","description":"Timestamp for the most recent attendee scan."}},"required":["kind","scannedAt"],"description":"Most recent scan event for compact roster activity text."},"lastCheckInAt":{"type":"string","format":"date-time","description":"Timestamp for the most recent check-in scan, used for checked-in labels."}},"required":["id","orderId","status","attendee","admission"]},"description":"Array of tickets for the current result set"},"before":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Cursor for navigating backward in the result set. Omitted when there are no prior results.","examples":["eyJ2ZXJzaW9uIjoxLCJpbnRlbnQiOnsic291cmNlIjoiZGVtbyJ9LCJwb3MiOnsicHJpbWFyeUtleSI6InBybV8wMXM4NTNqIn19"]},"after":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Cursor for navigating forward in the result set. Omitted when there are no subsequent results.","examples":["eyJ2ZXJzaW9uIjoxLCJpbnRlbnQiOnsic291cmNlIjoiZGVtbyJ9LCJwb3MiOnsicHJpbWFyeUtleSI6InBybV8wMXM4NTNkIn19"]},"limit":{"type":"number","minimum":1,"description":"Maximum number of items to return in each result set","examples":[20]}},"required":["tickets","limit"]}}}}}}},"/tickets/attendees/index":{"get":{"operationId":"ticket.attendees.index","summary":"Get attendee alpha-navigation buckets","description":"Returns available alpha buckets and server-issued bookmarks for the ticket attendee roster.","tags":["Tickets"],"parameters":[{"name":"eventId","in":"query","required":true,"schema":{"type":"string","pattern":"^evt_[0-9a-z]{26}$","description":"Event identifier for the attendee alpha index.","examples":["evt_01jps5cgsenjrazw6wswmyspa3"]},"allowEmptyValue":true,"allowReserved":true},{"name":"admissionIds","in":"query","required":false,"schema":{"type":"array","items":{"type":"string","pattern":"^adm_[0-9a-z]{26}$","description":"Unique admission identifier"},"description":"Optional admission filters used when computing available attendee buckets.","examples":[["adm_01jps5cgsee0xvapbk92e8eb4g"]]},"style":"deepObject","explode":true,"allowEmptyValue":true,"allowReserved":true},{"name":"sectionIds","in":"query","required":false,"schema":{"type":"array","items":{"type":"string","pattern":"^sct_[0-9a-z]{26}$","description":"Unique section identifier"},"description":"Optional section filters used when computing available attendee buckets.","examples":[["sct_01jps5cgse0g3qj16kpq8t221r"]]},"style":"deepObject","explode":true,"allowEmptyValue":true,"allowReserved":true}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"object","properties":{"buckets":{"type":"array","items":{"type":"object","properties":{"key":{"enum":["#","A","B","C","D","E","F","G","H","I","J","K","L","M","N","O","P","Q","R","S","T","U","V","W","X","Y","Z"],"type":"string","description":"Alpha navigation bucket key for attendee roster jumps."},"count":{"type":"integer","minimum":0,"maximum":9007199254740991,"description":"Number of roster rows currently available in this bucket."},"anchor":{"type":"string","description":"Server-issued bookmark for the first roster row in this bucket under the active filters."}},"required":["key","count","anchor"]},"description":"Available attendee alpha buckets for the active filter set."}},"required":["buckets"]}}}}}}},"/tickets/{key}/check-in":{"put":{"operationId":"ticket.checkInByKey","summary":"Check in tickets by key","tags":["Tickets"],"parameters":[{"name":"key","in":"path","required":true,"schema":{"type":"string","readOnly":true,"description":"Transition key. Supports canonical ticket IDs (tkt_*), order IDs (ord_*), and legacy Neon ticket IDs.","examples":["tkt_01jps5cgsg0s32w2pr73vbccde"]}}],"requestBody":{"required":false,"content":{"application/json":{"schema":{"type":"object","properties":{"eventId":{"type":"string","pattern":"^evt_[0-9a-z]{26}$","description":"Optional event scope guard for check-in transitions. When provided, check-in fails if the ticket/order event does not match."},"deviceId":{"type":"string","description":"Unique identifier of the scanning device (optional)."},"allowPartialOrderCheckIn":{"type":"boolean","description":"Confirms an order-level check-in when some tickets are already redeemed and some remain active."},"idempotencyKey":{"type":"string","minLength":1,"maxLength":255,"description":"Stable client-generated key used to replay a scan request without turning a timed-out success into a duplicate denial."}},"additionalProperties":false}}}},"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"object","properties":{"tickets":{"type":"array","items":{"$ref":"#/components/schemas/Ticket"},"description":"Transition result tickets. Single-item array for ticket/legacy targets and full order tickets for order targets."},"targetType":{"enum":["ticket","order","legacy"],"type":"string","description":"Resolved target scope from the provided key."},"order":{"type":"object","properties":{"id":{"type":"string","pattern":"^ord_[0-9a-z]{26}$","description":"Unique identifier of the order this ticket was purchased in","examples":["ord_01jps5cgsfgve5b5g2666kyryh"]},"checkedInCount":{"type":"integer","minimum":0,"maximum":9007199254740991},"items":{"type":"array","items":{"type":"object","properties":{"quantity":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991,"exclusiveMinimum":0}},"required":["quantity"]}}},"required":["id","items"]}},"required":["tickets","targetType"]}}}},"500":{"description":"500","content":{"application/json":{"schema":{"oneOf":[{"type":"object","properties":{"defined":{"const":true},"code":{"const":"UNPROCESSABLE_ENTITY"},"status":{"const":500},"message":{"type":"string","default":"UNPROCESSABLE_ENTITY"},"data":{"anyOf":[{"type":"object","properties":{"reason":{"enum":["NOOP_TRANSITION"],"type":"string"},"kind":{"enum":["CHECK_IN","CHECK_OUT"],"type":"string"},"targetType":{"enum":["ticket","order","legacy"],"type":"string"},"order":{"type":"object","properties":{"id":{"type":"string","pattern":"^ord_[0-9a-z]{26}$","description":"Unique identifier of the order this ticket was purchased in","examples":["ord_01jps5cgsfgve5b5g2666kyryh"]},"checkedInCount":{"type":"integer","minimum":0,"maximum":9007199254740991},"items":{"type":"array","items":{"type":"object","properties":{"quantity":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991,"exclusiveMinimum":0}},"required":["quantity"]}}},"required":["id","items"]},"ticket":{"$ref":"#/components/schemas/Ticket"}},"required":["reason","kind","targetType"]},{"type":"object","properties":{"reason":{"enum":["EVENT_MISMATCH"],"type":"string"},"kind":{"enum":["CHECK_IN","CHECK_OUT"],"type":"string"},"targetType":{"enum":["ticket","order","legacy"],"type":"string"},"requestedEventId":{"type":"string","pattern":"^evt_[0-9a-z]{26}$","description":"Unique identifier of the event this ticket grants access to","examples":["evt_01jps5cgsenjrazw6wswmyspa3"]},"event":{"type":"object","properties":{"id":{"type":"string","description":"Event ID reference","examples":["evt_01jps5cgsenjrazw6wswmyspa3"]},"name":{"type":"string","description":"The title of the event shown to attendees","examples":["Test Event"]},"slug":{"type":"string","description":"URL-friendly identifier for the event","examples":["test-event"]},"entryStartsAt":{"type":"string","pattern":"^\\d{4}-\\d{2}-\\d{2}T\\d{2}:\\d{2}:\\d{2}$","description":"Wall clock time when event entry begins (no timezone, displays same everywhere)","examples":["2026-06-08T11:39:32"]},"teamId":{"type":"string","pattern":"^tem_[0-9a-z]{26}$","description":"Identifier of the team that owns this ticket","examples":["tem_01jqpjksnsen9vprw95et60t2m"]}},"required":["id","name","slug","entryStartsAt","teamId"]},"order":{"type":"object","properties":{"id":{"type":"string","pattern":"^ord_[0-9a-z]{26}$","description":"Unique identifier of the order this ticket was purchased in","examples":["ord_01jps5cgsfgve5b5g2666kyryh"]},"checkedInCount":{"type":"integer","minimum":0,"maximum":9007199254740991},"items":{"type":"array","items":{"type":"object","properties":{"quantity":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991,"exclusiveMinimum":0}},"required":["quantity"]}}},"required":["id","items"]},"ticket":{"$ref":"#/components/schemas/Ticket"}},"required":["reason","kind","targetType","event"]},{"type":"object","properties":{"reason":{"enum":["PARTIAL_ORDER_CONFIRMATION_REQUIRED"],"type":"string"},"kind":{"const":"CHECK_IN"},"targetType":{"const":"order"},"order":{"type":"object","properties":{"id":{"type":"string","pattern":"^ord_[0-9a-z]{26}$","description":"Unique identifier of the order this ticket was purchased in","examples":["ord_01jps5cgsfgve5b5g2666kyryh"]},"checkedInCount":{"type":"integer","minimum":0,"maximum":9007199254740991},"items":{"type":"array","items":{"type":"object","properties":{"quantity":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991,"exclusiveMinimum":0}},"required":["quantity"]}}},"required":["id","items"]},"ticket":{"$ref":"#/components/schemas/Ticket"}},"required":["reason","kind","targetType","order"]}]}},"required":["defined","code","status","message","data"]},{"type":"object","properties":{"defined":{"const":false},"code":{"type":"string"},"status":{"type":"number"},"message":{"type":"string"},"data":{}},"required":["defined","code","status","message"]}]}}}}}}},"/tickets/{key}/check-out":{"put":{"operationId":"ticket.checkOutByKey","summary":"Check out tickets by key","tags":["Tickets"],"parameters":[{"name":"key","in":"path","required":true,"schema":{"type":"string","readOnly":true,"description":"Transition key. Supports canonical ticket IDs (tkt_*), order IDs (ord_*), and legacy Neon ticket IDs.","examples":["tkt_01jps5cgsg0s32w2pr73vbccde"]}}],"requestBody":{"required":false,"content":{"application/json":{"schema":{"type":"object","properties":{"eventId":{"type":"string","pattern":"^evt_[0-9a-z]{26}$","description":"Optional event scope guard for check-in transitions. When provided, check-in fails if the ticket/order event does not match."},"deviceId":{"type":"string","description":"Unique identifier of the scanning device (optional)."},"allowPartialOrderCheckIn":{"type":"boolean","description":"Confirms an order-level check-in when some tickets are already redeemed and some remain active."},"idempotencyKey":{"type":"string","minLength":1,"maxLength":255,"description":"Stable client-generated key used to replay a scan request without turning a timed-out success into a duplicate denial."}},"additionalProperties":false}}}},"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"object","properties":{"tickets":{"type":"array","items":{"$ref":"#/components/schemas/Ticket"},"description":"Transition result tickets. Single-item array for ticket/legacy targets and full order tickets for order targets."},"targetType":{"enum":["ticket","order","legacy"],"type":"string","description":"Resolved target scope from the provided key."},"order":{"type":"object","properties":{"id":{"type":"string","pattern":"^ord_[0-9a-z]{26}$","description":"Unique identifier of the order this ticket was purchased in","examples":["ord_01jps5cgsfgve5b5g2666kyryh"]},"checkedInCount":{"type":"integer","minimum":0,"maximum":9007199254740991},"items":{"type":"array","items":{"type":"object","properties":{"quantity":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991,"exclusiveMinimum":0}},"required":["quantity"]}}},"required":["id","items"]}},"required":["tickets","targetType"]}}}},"500":{"description":"500","content":{"application/json":{"schema":{"oneOf":[{"type":"object","properties":{"defined":{"const":true},"code":{"const":"UNPROCESSABLE_ENTITY"},"status":{"const":500},"message":{"type":"string","default":"UNPROCESSABLE_ENTITY"},"data":{"anyOf":[{"type":"object","properties":{"reason":{"enum":["NOOP_TRANSITION"],"type":"string"},"kind":{"enum":["CHECK_IN","CHECK_OUT"],"type":"string"},"targetType":{"enum":["ticket","order","legacy"],"type":"string"},"order":{"type":"object","properties":{"id":{"type":"string","pattern":"^ord_[0-9a-z]{26}$","description":"Unique identifier of the order this ticket was purchased in","examples":["ord_01jps5cgsfgve5b5g2666kyryh"]},"checkedInCount":{"type":"integer","minimum":0,"maximum":9007199254740991},"items":{"type":"array","items":{"type":"object","properties":{"quantity":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991,"exclusiveMinimum":0}},"required":["quantity"]}}},"required":["id","items"]},"ticket":{"$ref":"#/components/schemas/Ticket"}},"required":["reason","kind","targetType"]},{"type":"object","properties":{"reason":{"enum":["EVENT_MISMATCH"],"type":"string"},"kind":{"enum":["CHECK_IN","CHECK_OUT"],"type":"string"},"targetType":{"enum":["ticket","order","legacy"],"type":"string"},"requestedEventId":{"type":"string","pattern":"^evt_[0-9a-z]{26}$","description":"Unique identifier of the event this ticket grants access to","examples":["evt_01jps5cgsenjrazw6wswmyspa3"]},"event":{"type":"object","properties":{"id":{"type":"string","description":"Event ID reference","examples":["evt_01jps5cgsenjrazw6wswmyspa3"]},"name":{"type":"string","description":"The title of the event shown to attendees","examples":["Test Event"]},"slug":{"type":"string","description":"URL-friendly identifier for the event","examples":["test-event"]},"entryStartsAt":{"type":"string","pattern":"^\\d{4}-\\d{2}-\\d{2}T\\d{2}:\\d{2}:\\d{2}$","description":"Wall clock time when event entry begins (no timezone, displays same everywhere)","examples":["2026-06-08T11:39:32"]},"teamId":{"type":"string","pattern":"^tem_[0-9a-z]{26}$","description":"Identifier of the team that owns this ticket","examples":["tem_01jqpjksnsen9vprw95et60t2m"]}},"required":["id","name","slug","entryStartsAt","teamId"]},"order":{"type":"object","properties":{"id":{"type":"string","pattern":"^ord_[0-9a-z]{26}$","description":"Unique identifier of the order this ticket was purchased in","examples":["ord_01jps5cgsfgve5b5g2666kyryh"]},"checkedInCount":{"type":"integer","minimum":0,"maximum":9007199254740991},"items":{"type":"array","items":{"type":"object","properties":{"quantity":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991,"exclusiveMinimum":0}},"required":["quantity"]}}},"required":["id","items"]},"ticket":{"$ref":"#/components/schemas/Ticket"}},"required":["reason","kind","targetType","event"]},{"type":"object","properties":{"reason":{"enum":["PARTIAL_ORDER_CONFIRMATION_REQUIRED"],"type":"string"},"kind":{"const":"CHECK_IN"},"targetType":{"const":"order"},"order":{"type":"object","properties":{"id":{"type":"string","pattern":"^ord_[0-9a-z]{26}$","description":"Unique identifier of the order this ticket was purchased in","examples":["ord_01jps5cgsfgve5b5g2666kyryh"]},"checkedInCount":{"type":"integer","minimum":0,"maximum":9007199254740991},"items":{"type":"array","items":{"type":"object","properties":{"quantity":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991,"exclusiveMinimum":0}},"required":["quantity"]}}},"required":["id","items"]},"ticket":{"$ref":"#/components/schemas/Ticket"}},"required":["reason","kind","targetType","order"]}]}},"required":["defined","code","status","message","data"]},{"type":"object","properties":{"defined":{"const":false},"code":{"type":"string"},"status":{"type":"number"},"message":{"type":"string"},"data":{}},"required":["defined","code","status","message"]}]}}}}}}},"/internal/feedback":{"post":{"operationId":"internal.shareFeedback","summary":"Share product feedback","description":"Send authenticated tenant dashboard feedback to the Sessions team.","tags":["Internal"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"key":{"type":"string","minLength":1},"message":{"type":"string","minLength":10,"maxLength":4000},"pageUrl":{"type":"string","maxLength":2000,"format":"uri"},"pageTitle":{"type":"string","maxLength":300},"browser":{"type":"object","properties":{"language":{"type":"string","maxLength":80},"platform":{"type":"string","maxLength":120},"timezone":{"type":"string","maxLength":120},"userAgent":{"type":"string","maxLength":800},"viewport":{"type":"object","properties":{"width":{"type":"integer","minimum":-9007199254740991,"maximum":10000,"exclusiveMinimum":0},"height":{"type":"integer","minimum":-9007199254740991,"maximum":10000,"exclusiveMinimum":0},"devicePixelRatio":{"type":"number","maximum":10,"exclusiveMinimum":0}},"required":["width","height"]}}}},"required":["key","message","pageUrl"],"additionalProperties":false}}}},"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"object","properties":{"ok":{"const":true}},"required":["ok"]}}}}}}},"/internal/upload/image":{"post":{"operationId":"internal.uploadImage","summary":"Upload and compress image","description":"Upload an image file (PNG, JPEG, or SVG), optionally resize it, and compress it for web. SVG files are uploaded as-is without compression. Returns the uploaded image URL and metadata.","tags":["Internal"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"file":{"description":"Image file to upload (max 10MB)"},"folder":{"enum":["avatars","events","teams","promoters","venues"],"type":"string","description":"Folder to upload to"},"width":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991,"exclusiveMinimum":0,"description":"Target width in pixels"},"height":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991,"exclusiveMinimum":0,"description":"Target height in pixels"}},"required":["folder"],"additionalProperties":false}}}},"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"object","properties":{"src":{"type":"string","format":"uri","examples":["https://assets.session.services/my-image.jpg"]},"alt":{"type":"string","examples":["My Image"]},"width":{"type":"number","examples":[1080]},"height":{"type":"number","examples":[1080]}},"required":["src","alt","width","height"]}}}}}}},"/locations":{"get":{"operationId":"location.list","summary":"Search for locations","description":"Search for locations by query. Returns predictions with venue badges for locations that are managed venues on the platform. The query parameter is required.","tags":["Locations"],"parameters":[{"name":"query","in":"query","required":true,"schema":{"type":"string","minLength":1,"description":"Search query for location search","examples":["sydney opera"]},"allowEmptyValue":true,"allowReserved":true},{"name":"latitude","in":"query","required":false,"schema":{"type":"number","minimum":-90,"maximum":90,"description":"User's latitude for proximity-based results (optional for better relevance)","examples":[-33.8944593]},"allowEmptyValue":true,"allowReserved":true},{"name":"longitude","in":"query","required":false,"schema":{"type":"number","minimum":-180,"maximum":180,"description":"User's longitude for proximity-based results (optional for better relevance)","examples":[151.2252255]},"allowEmptyValue":true,"allowReserved":true},{"name":"types","in":"query","required":false,"schema":{"type":"array","items":{"type":"string"},"description":"Filter results by Google Place types (e.g., 'establishment', 'night_club', 'bar')","examples":[["establishment"]]},"style":"deepObject","explode":true,"allowEmptyValue":true,"allowReserved":true}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"object","properties":{"predictions":{"type":"array","items":{"type":"object","properties":{"googlePlaceId":{"type":"string","description":"Google Place ID for this location","examples":["ChIJP3Sa8ziYEmsRUKgyFmh9AQM"]},"name":{"type":"string","description":"Primary name of the location","examples":["Watson's EQ"]},"description":{"type":"string","description":"Full formatted address","examples":["The, Entertainment Quarter, 1 Bent St, Moore Park NSW 2021, Australia"]},"venue":{"type":"object","properties":{"id":{"type":"string","pattern":"^ven_[0-9a-z]{26}$","description":"Venue ID if this location is a managed venue","examples":["ven_01jqpjksnsen9vprw95et60t2m"]},"name":{"type":"string","description":"Venue name","examples":["Sydney Opera House"]},"teamId":{"type":"string","description":"Team that manages this venue"},"image":{"type":"object","properties":{"src":{"type":"string","format":"uri","examples":["https://assets.session.services/my-image.jpg"]},"alt":{"type":"string","examples":["My Image"]},"width":{"type":"number","examples":[1080]},"height":{"type":"number","examples":[1080]}},"required":["src","alt","width","height"],"description":"Primary venue image"}},"required":["id","name","teamId"],"description":"Present if this location is a managed venue on the platform"}},"required":["googlePlaceId","name","description"],"description":"Single location search result with optional venue overlay"},"description":"Array of location predictions"}},"required":["predictions"],"description":"Response containing location search results"}}}}}}},"/locations/{key}":{"get":{"operationId":"location.get","summary":"Get location details","description":"Fetch full location details including coordinates, timezone, and photo. Accepts location ID or provider identifier (e.g., Google Place ID). Uses cache-first strategy.","tags":["Locations"],"parameters":[{"name":"key","in":"path","required":true,"schema":{"type":"string","minLength":1,"description":"Location key - either a location ID (loc_xxx format) or provider-specific identifier (e.g., Google Place ID)","examples":["loc_01hk153x00eh99pagyydz03sbz","ChIJP3Sa8ziYEmsRUKgyFmh9AQM"]}}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"object","properties":{"location":{"$ref":"#/components/schemas/DetailedLocation"}},"required":["location"]}}}}}}},"/coupons/{id}":{"get":{"operationId":"coupon.get","summary":"Get coupon by ID","tags":["Coupons"],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string","readOnly":true,"description":"A unique identifier for this coupon.","examples":["cpn_01jps5cgsfzs1ksqaet5hba8ac"]}}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"object","properties":{"coupon":{"$ref":"#/components/schemas/Coupon"}},"required":["coupon"]}}}}}},"put":{"operationId":"coupon.update","summary":"Update a coupon","tags":["Coupons"],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string","readOnly":true,"description":"Unique identifier of the coupon to update","examples":["cpn_01jps5cgsfzs1ksqaet5hba8ac"]}}],"requestBody":{"required":false,"content":{"application/json":{"schema":{"type":"object","properties":{"couponId":{"type":"string","readOnly":true,"description":"Duplicate of id field for GSI queries.","examples":["cpn_01jps5cgsfzs1ksqaet5hba8ac"]},"name":{"type":"string","description":"Internal label for the coupon, visible to event organisers.","examples":["Half Price"]},"active":{"type":"boolean","description":"Whether this coupon is currently active.","examples":[true]},"showHidden":{"type":"boolean","description":"Whether this coupon reveals hidden admissions and sections within its scope.","examples":[false]},"kind":{"enum":["AMOUNT","PERCENT"],"type":"string","description":"Type of discount this coupon gives: a fixed amount or a percentage.","examples":["PERCENT"]},"filter":{"enum":["TEAM","PROMOTER","EVENTS","SECTIONS","ADMISSIONS"],"type":"string","description":"Scope of the coupon. TEAM applies to all events in the team. PROMOTER applies to all events by specified promoters. EVENTS/SECTIONS/ADMISSIONS apply to specific items.","examples":["EVENTS"]},"currency":{"anyOf":[{"enum":["AED","ALL","AMD","ANG","AOA","ARS","AUD","AWG","AZN","BAM","BBD","BDT","BGN","BHD","BIF","BMD","BND","BOB","BRL","BSD","BTN","BWP","BZD","CAD","CHF","CLP","CNY","COP","CRC","CVE","CZK","DJF","DKK","DOP","DZD","EGP","ERN","ETB","EUR","FJD","FKP","GBP","GEL","GHS","GIP","GMD","GNF","GTQ","GYD","HKD","HNL","HUF","IDR","ILS","INR","ISK","JMD","JOD","JPY","KES","KGS","KHR","KMF","KRW","KWD","KYD","KZT","LAK","LBP","LKR","LRD","LSL","LYD","MAD","MDL","MGA","MKD","MNT","MOP","MUR","MVR","MWK","MXN","MYR","NAD","NGN","NIO","NOK","NPR","NZD","OMR","PAB","PEN","PGK","PHP","PKR","PLN","PYG","QAR","RON","RSD","RWF","SAR","SBD","SCR","SEK","SGD","SHP","SLE","SRD","SVC","SZL","THB","TJS","TMT","TND","TOP","TRY","TTD","TWD","TZS","UAH","UGX","USD","UYU","UZS","VND","VUV","WST","XAF","XCD","XOF","XPF","ZAR","ZMW","ZWL"],"type":"string","description":"Three-letter ISO 4217 currency code for transactions and payouts","examples":["AUD"]},{"type":"null"}],"description":"Three-letter ISO 4217 currency code. Pass null to clear; omit to leave unchanged.","examples":["AUD","USD","GBP"]},"discount":{"type":"number","minimum":0,"description":"The discount value. If kind is 'amount', this is a currency amount. If kind is 'percent', this is a percentage.","examples":[50]},"limit":{"type":"number","description":"Maximum number of times the coupon can be redeemed across all customers.","examples":[-1]},"uses":{"type":"number","description":"Number of times this coupon has been redeemed so far.","examples":[0]},"promoters":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string","description":"Identifier of a promoter this coupon applies to."},"name":{"type":"string","description":"Name of a promoter this coupon applies to."},"slug":{"type":"string","description":"URL slug of a promoter this coupon applies to."}},"required":["id","name","slug"]},"description":"List of promoters this coupon applies to when filter is PROMOTER."},"events":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string","description":"Identifier of an event this coupon applies to."},"name":{"type":"string","description":"Name of an event this coupon applies to."},"slug":{"type":"string","description":"URL slug of an event this coupon applies to."}},"required":["id","name","slug"]},"description":"List of events this coupon applies to when filter is EVENTS."},"sections":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string","description":"Identifier of a section this coupon applies to."},"name":{"type":"string","description":"Name of a section this coupon applies to."},"eventId":{"type":"string","description":"Identifier of the event this section belongs to."}},"required":["id","name","eventId"]},"description":"List of sections this coupon applies to when filter is 'sections'."},"admissions":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string","description":"Identifier of an admission this coupon applies to."},"name":{"type":"string","description":"Name of an admission this coupon applies to."},"eventId":{"type":"string","description":"Identifier of the event this admission belongs to."}},"required":["id","name","eventId"]},"description":"List of admissions this coupon applies to when filter is 'admissions'."},"saleStartsAt":{"type":"string","pattern":"^\\d{4}-\\d{2}-\\d{2}T\\d{2}:\\d{2}:\\d{2}$","description":"Wall clock time when this coupon becomes valid (no timezone, ISO 8601 format: YYYY-MM-DDTHH:mm:ss)","examples":["2025-02-10T03:00:00"]},"saleEndsAt":{"anyOf":[{"type":"string","pattern":"^\\d{4}-\\d{2}-\\d{2}T\\d{2}:\\d{2}:\\d{2}$","description":"Wall clock time without timezone (displays same everywhere)","examples":["2025-03-15T19:30:00"]},{"type":"null"}],"description":"Expiry time. Pass null to remove end date; omit to leave unchanged.","examples":[null]}},"additionalProperties":false,"description":"Schema for updating an existing coupon."}}}},"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"object","properties":{"coupon":{"$ref":"#/components/schemas/Coupon"}},"required":["coupon"]}}}}}},"delete":{"operationId":"coupon.remove","summary":"Delete a coupon","tags":["Coupons"],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string","readOnly":true,"description":"A unique identifier for this coupon.","examples":["cpn_01jps5cgsfzs1ksqaet5hba8ac"]}}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"object","properties":{"coupon":{"$ref":"#/components/schemas/Coupon"}},"required":["coupon"]}}}}}}},"/coupons":{"get":{"operationId":"coupon.list","summary":"List coupons with cursor-based pagination","description":"Returns coupon data with cursor-based pagination and optional full-text search via the `query` parameter.","tags":["Coupons"],"parameters":[{"name":"teamId","in":"query","required":true,"schema":{"type":"string","description":"Unique identifier of the team whose coupons to retrieve","examples":["tem_01jqpjksnsen9vprw95et60t2m"]},"allowEmptyValue":true,"allowReserved":true},{"name":"active","in":"query","required":false,"schema":{"type":"boolean","description":"Optional filter to retrieve only active or inactive coupons","examples":[true]},"allowEmptyValue":true,"allowReserved":true},{"name":"query","in":"query","required":false,"schema":{"type":"string","description":"Optional search query to filter coupons by name or description. When provided, search-backed pagination is used.","examples":["Half Price"]},"allowEmptyValue":true,"allowReserved":true},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","minimum":1,"maximum":100,"default":20,"description":"Maximum number of coupons to return per request (1-100, default: 20)","examples":[20]},"allowEmptyValue":true,"allowReserved":true},{"name":"cursor","in":"query","required":false,"schema":{"type":"string","description":"Pagination cursor returned by a previous request. Omit on the first request.","examples":["eyJpZCI6ImNwbl8wMWpwczVjZ3NmenMxa3NxYWV0NWhiYThhYyJ9"]},"allowEmptyValue":true,"allowReserved":true}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"object","properties":{"coupons":{"type":"array","items":{"$ref":"#/components/schemas/Coupon"},"description":"Array of coupons for the current result set"},"before":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Cursor for navigating backward in the result set. Omitted when there are no prior results.","examples":["eyJ2ZXJzaW9uIjoxLCJpbnRlbnQiOnsic291cmNlIjoiZGVtbyJ9LCJwb3MiOnsicHJpbWFyeUtleSI6InBybV8wMXM4NTNqIn19"]},"after":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Cursor for navigating forward in the result set. Omitted when there are no subsequent results.","examples":["eyJ2ZXJzaW9uIjoxLCJpbnRlbnQiOnsic291cmNlIjoiZGVtbyJ9LCJwb3MiOnsicHJpbWFyeUtleSI6InBybV8wMXM4NTNkIn19"]},"limit":{"type":"number","minimum":1,"description":"Maximum number of items to return in each result set","examples":[20]}},"required":["coupons","limit"]}}}}}},"post":{"operationId":"coupon.create","summary":"Create a new coupon","tags":["Coupons"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"couponId":{"type":"string","readOnly":true,"description":"Duplicate of id field for GSI queries.","examples":["cpn_01jps5cgsfzs1ksqaet5hba8ac"]},"name":{"type":"string","description":"Internal label for the coupon, visible to event organisers.","examples":["Half Price"]},"active":{"type":"boolean","description":"Whether this coupon is currently active.","examples":[true]},"showHidden":{"type":"boolean","description":"Whether this coupon reveals hidden admissions and sections within its scope.","examples":[false]},"kind":{"enum":["AMOUNT","PERCENT"],"type":"string","description":"Type of discount this coupon gives: a fixed amount or a percentage.","examples":["PERCENT"]},"filter":{"enum":["TEAM","PROMOTER","EVENTS","SECTIONS","ADMISSIONS"],"type":"string","description":"Scope of the coupon. TEAM applies to all events in the team. PROMOTER applies to all events by specified promoters. EVENTS/SECTIONS/ADMISSIONS apply to specific items.","examples":["EVENTS"]},"currency":{"enum":["AED","ALL","AMD","ANG","AOA","ARS","AUD","AWG","AZN","BAM","BBD","BDT","BGN","BHD","BIF","BMD","BND","BOB","BRL","BSD","BTN","BWP","BZD","CAD","CHF","CLP","CNY","COP","CRC","CVE","CZK","DJF","DKK","DOP","DZD","EGP","ERN","ETB","EUR","FJD","FKP","GBP","GEL","GHS","GIP","GMD","GNF","GTQ","GYD","HKD","HNL","HUF","IDR","ILS","INR","ISK","JMD","JOD","JPY","KES","KGS","KHR","KMF","KRW","KWD","KYD","KZT","LAK","LBP","LKR","LRD","LSL","LYD","MAD","MDL","MGA","MKD","MNT","MOP","MUR","MVR","MWK","MXN","MYR","NAD","NGN","NIO","NOK","NPR","NZD","OMR","PAB","PEN","PGK","PHP","PKR","PLN","PYG","QAR","RON","RSD","RWF","SAR","SBD","SCR","SEK","SGD","SHP","SLE","SRD","SVC","SZL","THB","TJS","TMT","TND","TOP","TRY","TTD","TWD","TZS","UAH","UGX","USD","UYU","UZS","VND","VUV","WST","XAF","XCD","XOF","XPF","ZAR","ZMW","ZWL"],"type":"string","description":"Three-letter ISO 4217 currency code. Required for AMOUNT coupons. Optional for PERCENT coupons - when omitted, applies to all currencies.","examples":["AUD"]},"discount":{"type":"number","minimum":0,"description":"The discount value. If kind is 'amount', this is a currency amount. If kind is 'percent', this is a percentage.","examples":[50]},"limit":{"type":"number","description":"Maximum number of times the coupon can be redeemed across all customers.","examples":[-1]},"uses":{"type":"number","description":"Number of times this coupon has been redeemed so far.","examples":[0]},"promoters":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string","description":"Identifier of a promoter this coupon applies to."},"name":{"type":"string","description":"Name of a promoter this coupon applies to."},"slug":{"type":"string","description":"URL slug of a promoter this coupon applies to."}},"required":["id","name","slug"]},"description":"List of promoters this coupon applies to when filter is PROMOTER."},"events":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string","description":"Identifier of an event this coupon applies to."},"name":{"type":"string","description":"Name of an event this coupon applies to."},"slug":{"type":"string","description":"URL slug of an event this coupon applies to."}},"required":["id","name","slug"]},"description":"List of events this coupon applies to when filter is EVENTS."},"sections":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string","description":"Identifier of a section this coupon applies to."},"name":{"type":"string","description":"Name of a section this coupon applies to."},"eventId":{"type":"string","description":"Identifier of the event this section belongs to."}},"required":["id","name","eventId"]},"description":"List of sections this coupon applies to when filter is 'sections'."},"admissions":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string","description":"Identifier of an admission this coupon applies to."},"name":{"type":"string","description":"Name of an admission this coupon applies to."},"eventId":{"type":"string","description":"Identifier of the event this admission belongs to."}},"required":["id","name","eventId"]},"description":"List of admissions this coupon applies to when filter is 'admissions'."},"saleStartsAt":{"type":"string","pattern":"^\\d{4}-\\d{2}-\\d{2}T\\d{2}:\\d{2}:\\d{2}$","description":"Wall clock time when this coupon becomes valid (no timezone, ISO 8601 format: YYYY-MM-DDTHH:mm:ss)","examples":["2025-02-10T03:00:00"]},"saleEndsAt":{"type":"string","pattern":"^\\d{4}-\\d{2}-\\d{2}T\\d{2}:\\d{2}:\\d{2}$","description":"Wall clock time when this coupon expires (no timezone, ISO 8601 format: YYYY-MM-DDTHH:mm:ss)","examples":[null]},"teamId":{"type":"string","description":"Team that created this coupon."}},"required":["name","kind","filter","discount","limit","saleStartsAt","teamId"],"additionalProperties":false,"description":"Schema for creating a new coupon without system-generated fields"}}}},"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"object","properties":{"coupon":{"$ref":"#/components/schemas/Coupon"}},"required":["coupon"]}}}}}}},"/coupon-codes/{id}":{"get":{"operationId":"coupon.code.get","summary":"Get coupon code by ID","tags":["Coupon Codes"],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string","readOnly":true,"description":"A unique identifier for this coupon code.","examples":["cod_01jps5cgsfzftw7hxcvr2wftk2"]}}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"object","properties":{"couponCode":{"$ref":"#/components/schemas/CouponCode"}},"required":["couponCode"]}}}}}},"put":{"operationId":"coupon.code.update","summary":"Update a coupon code","tags":["Coupon Codes"],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string","readOnly":true,"description":"A unique identifier for this coupon code.","examples":["cod_01jps5cgsfzftw7hxcvr2wftk2"]}}],"requestBody":{"required":false,"content":{"application/json":{"schema":{"type":"object","properties":{"name":{"type":"string","description":"The code string that customers enter to redeem the coupon.","examples":["TEST50"]},"active":{"type":"boolean","description":"Whether this coupon code is currently enabled for use.","examples":[true]}},"additionalProperties":false}}}},"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"object","properties":{"couponCode":{"$ref":"#/components/schemas/CouponCode"}},"required":["couponCode"]}}}}}},"delete":{"operationId":"coupon.code.remove","summary":"Delete a coupon code","tags":["Coupon Codes"],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string","readOnly":true,"description":"A unique identifier for this coupon code.","examples":["cod_01jps5cgsfzftw7hxcvr2wftk2"]}}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"object","properties":{"couponCode":{"$ref":"#/components/schemas/CouponCode"}},"required":["couponCode"]}}}}}}},"/coupon-codes":{"get":{"operationId":"coupon.code.list","summary":"List coupon codes with cursor-based pagination","description":"Returns coupon code data with cursor-based pagination and optional full-text search via the `query` parameter.","tags":["Coupon Codes"],"parameters":[{"name":"couponId","in":"query","schema":{"type":"string","description":"Optional filter to retrieve coupon codes for a specific coupon","examples":["cpn_01jps5cgsfzs1ksqaet5hba8ac"]},"allowEmptyValue":true,"allowReserved":true},{"name":"teamId","in":"query","schema":{"type":"string","description":"Optional filter to retrieve coupon codes created by a specific team","examples":["tem_01jqpjksnsen9vprw95et60t2m"]},"allowEmptyValue":true,"allowReserved":true},{"name":"active","in":"query","schema":{"type":"boolean","description":"Optional filter to retrieve only active or inactive coupon codes","examples":[true]},"allowEmptyValue":true,"allowReserved":true},{"name":"query","in":"query","schema":{"type":"string","description":"Optional search query to filter coupon codes by name. When provided, search-backed pagination is used.","examples":["SUMMER"]},"allowEmptyValue":true,"allowReserved":true},{"name":"limit","in":"query","schema":{"type":"integer","minimum":1,"maximum":100,"default":20,"description":"Maximum number of coupon codes to return per request (1-100, default: 20)","examples":[20]},"allowEmptyValue":true,"allowReserved":true},{"name":"cursor","in":"query","schema":{"type":"string","description":"Pagination cursor returned by a previous request. Omit on the first request.","examples":["eyJpZCI6ImNwY18wMWpwczVjZ3NmenR3N2h4Y3ZyMndmdGsyIn0"]},"allowEmptyValue":true,"allowReserved":true}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"object","properties":{"codes":{"type":"array","items":{"$ref":"#/components/schemas/CouponCode"},"description":"Array of codes for the current result set"},"before":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Cursor for navigating backward in the result set. Omitted when there are no prior results.","examples":["eyJ2ZXJzaW9uIjoxLCJpbnRlbnQiOnsic291cmNlIjoiZGVtbyJ9LCJwb3MiOnsicHJpbWFyeUtleSI6InBybV8wMXM4NTNqIn19"]},"after":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Cursor for navigating forward in the result set. Omitted when there are no subsequent results.","examples":["eyJ2ZXJzaW9uIjoxLCJpbnRlbnQiOnsic291cmNlIjoiZGVtbyJ9LCJwb3MiOnsicHJpbWFyeUtleSI6InBybV8wMXM4NTNkIn19"]},"limit":{"type":"number","minimum":1,"description":"Maximum number of items to return in each result set","examples":[20]}},"required":["codes","limit"]}}}}}},"post":{"operationId":"coupon.code.create","summary":"Create a new coupon code","tags":["Coupon Codes"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"name":{"type":"string","description":"The code string that customers enter to redeem the coupon.","examples":["TEST50"]},"active":{"type":"boolean","description":"Whether this coupon code is currently enabled for use.","examples":[true]},"couponId":{"type":"string","description":"Identifier of the coupon to which this code belongs.","examples":["cpn_01jps5cgsfzs1ksqaet5hba8ac"]},"teamId":{"type":"string","description":"Team that created this coupon code."}},"required":["name","active","couponId","teamId"],"additionalProperties":false}}}},"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"object","properties":{"couponCode":{"$ref":"#/components/schemas/CouponCode"}},"required":["couponCode"]}}}}}}},"/payouts/{id}":{"get":{"operationId":"payout.get","summary":"Get payout by ID with breakdown","tags":["Payouts"],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string","description":"Unique identifier of the payout to retrieve.","examples":["pyt_01jps5cgsfv2wre6hd0rc4w4t8"]}}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"object","properties":{"payout":{"$ref":"#/components/schemas/Payout"},"breakdown":{"type":"object","properties":{"total":{"type":"object","properties":{"orders":{"type":"number","description":"Total number of orders included in this payout breakdown.","examples":[150]},"price":{"type":"object","properties":{"net":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991,"description":"Total amount to pay to promoter in cents.\nCalculated as: total + booking + refunded + dispute","examples":[500]},"total":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991,"description":"Total amount the customer should pay in cents.\nCalculated as: gross + discount","examples":[1400]},"gross":{"type":"integer","minimum":0,"maximum":9007199254740991,"description":"Total amount before refunds and discounts in cents.\nCalculated as: base + booking + shipping","examples":[2200]},"base":{"type":"integer","minimum":0,"maximum":9007199254740991,"description":"Total ticket price in cents","examples":[1000]},"booking":{"type":"integer","minimum":0,"maximum":9007199254740991,"description":"Total booking fees in cents (non-refundable)","examples":[400]},"shipping":{"type":"integer","minimum":0,"maximum":9007199254740991,"description":"Total shipping amount in cents","examples":[0]},"sms":{"type":"integer","minimum":0,"maximum":9007199254740991,"default":0,"description":"SMS delivery fee in cents (customer-facing price in event currency)","examples":[200]},"refunded":{"type":"integer","minimum":-9007199254740991,"maximum":0,"description":"Total amount refunded in cents (negative value)","examples":[-700]},"discount":{"type":"integer","minimum":-9007199254740991,"maximum":0,"description":"Total amount discounted in cents (negative value)","examples":[-1000]},"gateway":{"type":"integer","minimum":-9007199254740991,"maximum":0,"description":"Total absorbed payment gateway fees in cents (negative value)","examples":[0]},"dispute":{"type":"integer","minimum":-9007199254740991,"maximum":0,"description":"Total non-absorbed payment gateway fees in cents (negative value)","examples":[0]},"currency":{"enum":["AED","ALL","AMD","ANG","AOA","ARS","AUD","AWG","AZN","BAM","BBD","BDT","BGN","BHD","BIF","BMD","BND","BOB","BRL","BSD","BTN","BWP","BZD","CAD","CHF","CLP","CNY","COP","CRC","CVE","CZK","DJF","DKK","DOP","DZD","EGP","ERN","ETB","EUR","FJD","FKP","GBP","GEL","GHS","GIP","GMD","GNF","GTQ","GYD","HKD","HNL","HUF","IDR","ILS","INR","ISK","JMD","JOD","JPY","KES","KGS","KHR","KMF","KRW","KWD","KYD","KZT","LAK","LBP","LKR","LRD","LSL","LYD","MAD","MDL","MGA","MKD","MNT","MOP","MUR","MVR","MWK","MXN","MYR","NAD","NGN","NIO","NOK","NPR","NZD","OMR","PAB","PEN","PGK","PHP","PKR","PLN","PYG","QAR","RON","RSD","RWF","SAR","SBD","SCR","SEK","SGD","SHP","SLE","SRD","SVC","SZL","THB","TJS","TMT","TND","TOP","TRY","TTD","TWD","TZS","UAH","UGX","USD","UYU","UZS","VND","VUV","WST","XAF","XCD","XOF","XPF","ZAR","ZMW","ZWL"],"type":"string","description":"Currency code in ISO 4217 format","examples":["AUD"]}},"required":["net","total","gross","base","booking","shipping","refunded","discount","gateway","dispute","currency"],"description":"Aggregated price information for all orders included in this payout, showing total revenue, fees, and deductions."},"split":{"type":"object","properties":{"tenant":{"type":"number","description":"Amount allocated to the tenant (platform) in cents. This represents the platform's share of the revenue.","examples":[50000]},"venue":{"type":"number","description":"Amount allocated to the venue in cents. This represents the venue's share of the revenue from events held at their location.","examples":[25000]},"team":{"type":"number","description":"Amount allocated to the team in cents. This represents the team's share of the revenue after fees and other deductions.","examples":[20000]},"sessions":{"type":"number","description":"Amount allocated to Sessions platform commission in cents. This represents the platform's service fees.","examples":[3000]},"tickets":{"type":"number","description":"Amount allocated to ticketing fees in cents. This represents fees charged for ticket processing and management.","examples":[2000]}},"required":["tenant","venue","team","sessions","tickets"],"description":"How the total payout amount is split between different beneficiaries (tenant, venue, promoter, etc.) in cents."},"structure":{"type":"string","description":"Fee structure identifier that was used to calculate the payout split and allocations.","examples":["DEFAULT"]}},"required":["orders","price","split","structure"],"description":"Summary totals for all orders included in this payout breakdown, including aggregated financial calculations."},"orders":{"type":"array","items":{"type":"object","properties":{"order":{"type":"object","properties":{"id":{"type":"string","pattern":"^ord_[0-9a-z]{26}$","description":"A unique identifier for this order.","examples":["ord_01jps5cgsfgve5b5g2666kyryh"],"readOnly":true},"createdAt":{"type":"string","format":"date-time","readOnly":true,"description":"Timestamp in ISO 8601 format when this order was created.","examples":["2026-06-07T11:39:32.858Z"]},"updatedAt":{"type":"string","format":"date-time","readOnly":true,"description":"Timestamp in ISO 8601 format when this order was last updated.","examples":["2026-06-07T11:39:32.858Z"]},"status":{"enum":["PENDING","PROCESSING","SUCCESSFUL","DISPUTED","ABANDONED"],"type":"string","description":"Current payment lifecycle status. PENDING: awaiting payment. PROCESSING: payment in progress. SUCCESSFUL: payment confirmed. DISPUTED: chargeback filed. ABANDONED: expired or cancelled.","examples":["PENDING"]},"payment":{"type":"object","properties":{"method":{"enum":["FREE","AIRWALLEX","STRIPE"],"type":"string","description":"Payment gateway used to process this order: FREE for no-cost orders, AIRWALLEX or STRIPE for paid orders","examples":["FREE"]},"source":{"enum":["ACH_DIRECT_DEBIT","ACSS_DEBIT","AFFIRM","AFTERPAY","ALFAMART","ALIPAY","ALIPAYCN","ALIPAYHK","ALMA","AMAZON_PAY","APPLEPAY","ATOME","BACS_DIRECT_DEBIT","BANCONTACT","BANK_TRANSFER","BECS_DIRECT_DEBIT","BILLIE","BITPAY","BLIK","BOLETO","BOOST","CARD","CARD_PRESENT","CASHAPP","CRYPTO","CUSTOM","CUSTOMER_BALANCE","DANA","DOKU_EWALLET","DRAGONPAY","DUIT_NOW","EFT_DIRECT_DEBIT","EPS","ESUN","FAMILY_MART","FPX","FPS","GCASH","GIROPAY","GOOGLEPAY","GO_PAY","GRABPAY","HI_LIFE","IDEAL","INDOMARET","INTERAC_PRESENT","JENIUS_PAY","KAKAOPAY","KLARNA","KONBINI","KOREAN_LOCAL_CARD","LINK","LINKAJA","MAXIMA","MB_WAY","MOBILEPAY","MULTIBANCO","MYBANK","NARVESEN","NAVER_PAY","NZ_BANK_ACCOUNT","ONLINE_BANKING","OVO","OXXO","P24","PAYBYBANKAPP","PAYCO","PAYEASY","PAYPAL","PAYPAY","PAYSAFECASH","PAYSAFECARD","PAYSERA","PAY_NOW","PERLAS_TERMINALS","PIX","PROMPTPAY","RABBIT_LINE_PAY","REVOLUT_PAY","SAMSUNG_PAY","SATISPAY","SEPA_DIRECT_DEBIT","SEVEN_ELEVEN","SHOPEE_PAY","SKRILL","SOFORT","SWISH","TNG","TOSS_PAY","TRUEMONEY","TRUSTLY","TWINT","VERKKOPANKKI","WECHATPAY","ZIP"],"type":"string","description":"Payment method used by the customer such as ApplePay, GooglePay, or card-based payments","examples":["APPLEPAY","GOOGLEPAY","CARD"]},"brand":{"enum":["AMERICAN_EXPRESS","CHINA_UNION_PAY","DINERS_CLUB_INTERNATIONAL","DISCOVER","JCB","MAESTRO","MASTERCARD","UNION_PAY","VISA"],"type":"string","description":"Card brand when source is CARD (Visa, Mastercard, American Express, etc.)","examples":["VISA","MASTERCARD","AMERICAN_EXPRESS"]},"last4":{"type":"string","description":"Last 4 digits of the card number when source is CARD","examples":["4242"]},"stripeId":{"type":"string","description":"Stripe payment intent identifier when using Stripe gateway","examples":["pi_1234567890abcdef"]},"stripeClientSecret":{"type":"string","description":"Stripe PaymentIntent client secret associated with the order, used to complete the payment flow","examples":["pi_1234567890abcdef_secret_xyz"]},"stripeAccountId":{"type":"string","description":"Connected Stripe account ID for direct charges. When present, payment is processed directly on the connected account rather than the platform account.","examples":["acct_1234567890abcdef"]},"airwallexId":{"type":"string","description":"Airwallex payment intent identifier when using Airwallex gateway","examples":["int_hkdmr7v9rg1j8donpkmv96"]},"airwallexClientSecret":{"type":"string","description":"Airwallex client secret used to authenticate requests for payment initialization","examples":["eyJhbGciOiJIUzI1NiJ9.eyJpYXQiOjE3MDAwMDAwMDAsImV4cCI6MTcwMDAwMzYwMCwiaW50ZW50X2lkIjoiaW50X2hrZG1yN3Y5cmcxajhkb25wa212OTYifQ.K8vLx2nPzQHdR5mT1wYcBfJkLmNpS3xG7aE9dH4qZvM"]},"airwallexCustomerId":{"type":"string","description":"Airwallex customer ID attached to the PaymentIntent for saved cards functionality","examples":["cus_hkdmrhkh8he4j3kvela"]},"airwallexCustomerClientSecret":{"type":"string","description":"Airwallex customer client secret for accessing saved payment methods in the Drop-in Element","examples":["eyJhbGciOiJIUzI1NiJ9.eyJpYXQiOjE3MDAwMDAwMDAsImV4cCI6MTcwMDAwMzYwMCwiY3VzdG9tZXJfaWQiOiJjdXNfaGtkbXJoa2g4aGU0ajNrdmVsYSJ9.abc123"]}},"required":["method"],"description":"Payment gateway details including method, card brand, and transaction identifiers. Absent for free orders."},"items":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string","description":"Unique identifier for this order item","examples":["itm_01jps5cgsfwyxj0516571eaf17"]},"kind":{"enum":["ADMISSION","ADDON"],"type":"string","description":"Type of item: ADMISSION for tickets, ADDON for additional products or services","examples":["ADMISSION"]},"quantity":{"type":"integer","minimum":1,"maximum":9007199254740991,"description":"Number of items purchased (minimum 1)","examples":[2]},"admissionId":{"type":"string","description":"Unique identifier of the admission ticket type, required for ADMISSION items","examples":["adm_01jps5cgsee0xvapbk92e8eb4g"]},"sectionId":{"type":"string","description":"Unique identifier of the venue section for this admission","examples":["sct_01jps5cgse0g3qj16kpq8t221r"]},"admission":{"$ref":"#/components/schemas/Admission","description":"Complete admission details captured at time of purchase. This is a snapshot that preserves the exact ticket type information as it was when the order was placed","examples":[{"id":"adm_01jps5cgsee0xvapbk92e8eb4g","createdAt":"2026-06-07T11:39:32.857Z","updatedAt":"2026-06-07T11:39:32.857Z","sectionId":"sct_01jps5cgse0g3qj16kpq8t221r","teamId":"tem_01jqpjksnsen9vprw95et60t2m","promoterId":"pmt_01jqpjksnsen9vprw95et60t2m","eventId":"evt_01jps5cgsenjrazw6wswmyspa3","eventSlug":"test-event","name":"Final Release","subtitle":"Entry before 10pm","description":"Early bird pricing with priority entry. Must present valid ID at gate.","capacity":100000,"limit":-1,"available":70000,"sold":20000,"reserved":10000,"order":0,"entryStartsAt":"2026-06-08T11:39:32","entryEndsAt":"2026-06-09T11:39:32","saleStartsAt":"2026-06-07T11:39:32","saleEndsAt":"2026-06-09T11:39:32","saleEndsBehavior":"SALE_ENDED","price":{"base":1000,"booking":200,"currency":"AUD"},"visibility":"ALWAYS","tenantId":"tnt_01jqpj2t2kfvmstt6f6tzkbaf2","deleted":false,"orderPadded":"0000000000"}]},"section":{"$ref":"#/components/schemas/Section","description":"Complete section details captured at time of purchase. This is a snapshot that preserves the exact venue area or category information as it was when the order was placed","examples":[{"id":"sct_01jps5cgse0g3qj16kpq8t221r","createdAt":"2026-06-07T11:39:32.857Z","updatedAt":"2026-06-07T11:39:32.857Z","teamId":"tem_01jqpjksnsen9vprw95et60t2m","promoterId":"pmt_01jqpjksnsen9vprw95et60t2m","eventId":"evt_01jps5cgsenjrazw6wswmyspa3","eventSlug":"test-event","name":"General Admission","capacity":1000,"limit":-1,"available":700,"sold":200,"reserved":100,"order":0,"visibility":"ALWAYS","location":{"id":"loc_01hk153x00eh99pagyydz03sbz","createdAt":"2026-06-07T11:39:32.857Z","updatedAt":"2026-06-07T11:39:32.857Z","googlePlaceId":"ChIJ6zWCPUyxEmsRmc6BPrNaP4s","name":"Watson's EQ","address":"The, Entertainment Quarter, 1 Bent St, Moore Park NSW 2021, Australia","city":"Moore Park","state":"New South Wales","postcode":"2021","country":"Australia","latitude":-33.8944593,"longitude":151.2252255,"timeZone":"Australia/Sydney","types":["establishment","point_of_interest","restaurant","bar"],"image":{"src":"https://assets.session.services/locations/watsons-eq.jpg","alt":"Watson's EQ","width":1200,"height":800}},"tenantId":"tnt_01jqpj2t2kfvmstt6f6tzkbaf2","deleted":false,"orderPadded":"0000000000"}]},"price":{"type":"object","properties":{"net":{"type":"integer","minimum":0,"maximum":9007199254740991,"description":"Total amount to pay to promoter in cents.\nCalculated as: total - booking - refunded","examples":[1200]},"total":{"type":"integer","minimum":0,"maximum":9007199254740991,"description":"Total amount the customer should pay in cents.\nCalculated as: gross - discount","examples":[1200]},"gross":{"type":"integer","minimum":0,"maximum":9007199254740991,"description":"Total amount before refunds and discounts in cents.\nCalculated as: base + booking","examples":[1200]},"base":{"type":"integer","minimum":0,"maximum":9007199254740991,"description":"Total ticket price in cents","examples":[1000]},"booking":{"type":"integer","minimum":0,"maximum":9007199254740991,"description":"Total booking fees in cents (non-refundable)","examples":[200]},"refunded":{"type":"integer","minimum":-9007199254740991,"maximum":0,"description":"Total amount refunded in cents","examples":[0]},"discount":{"type":"integer","minimum":-9007199254740991,"maximum":0,"description":"Total amount discounted in cents","examples":[0]},"currency":{"enum":["AED","ALL","AMD","ANG","AOA","ARS","AUD","AWG","AZN","BAM","BBD","BDT","BGN","BHD","BIF","BMD","BND","BOB","BRL","BSD","BTN","BWP","BZD","CAD","CHF","CLP","CNY","COP","CRC","CVE","CZK","DJF","DKK","DOP","DZD","EGP","ERN","ETB","EUR","FJD","FKP","GBP","GEL","GHS","GIP","GMD","GNF","GTQ","GYD","HKD","HNL","HUF","IDR","ILS","INR","ISK","JMD","JOD","JPY","KES","KGS","KHR","KMF","KRW","KWD","KYD","KZT","LAK","LBP","LKR","LRD","LSL","LYD","MAD","MDL","MGA","MKD","MNT","MOP","MUR","MVR","MWK","MXN","MYR","NAD","NGN","NIO","NOK","NPR","NZD","OMR","PAB","PEN","PGK","PHP","PKR","PLN","PYG","QAR","RON","RSD","RWF","SAR","SBD","SCR","SEK","SGD","SHP","SLE","SRD","SVC","SZL","THB","TJS","TMT","TND","TOP","TRY","TTD","TWD","TZS","UAH","UGX","USD","UYU","UZS","VND","VUV","WST","XAF","XCD","XOF","XPF","ZAR","ZMW","ZWL"],"type":"string","description":"Currency code in ISO 4217 format.","examples":["AUD"]}},"required":["net","total","gross","base","booking","refunded","discount","currency"],"description":"Pricing breakdown for this order item including all fees and discounts"}},"required":["id","kind","quantity","price"]},"description":"Line items in this order, each with a ticket type, quantity, and price breakdown."},"fees":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string","description":"Unique identifier for this order fee","examples":["fee_01jps5cgsgamykd6kh2t738qkh"]},"createdAt":{"type":"string","format":"date-time","readOnly":true,"description":"Timestamp in ISO 8601 format when this fee was created","examples":["2026-06-07T11:39:32.858Z"]},"reason":{"type":"string","description":"Description explaining why this fee was applied to the order","examples":["Gateway Fee"]},"amount":{"type":"number","description":"Fee amount in cents (positive value indicates charge to customer, negative value indicates credit or discount)","examples":[-30]},"currency":{"enum":["AED","ALL","AMD","ANG","AOA","ARS","AUD","AWG","AZN","BAM","BBD","BDT","BGN","BHD","BIF","BMD","BND","BOB","BRL","BSD","BTN","BWP","BZD","CAD","CHF","CLP","CNY","COP","CRC","CVE","CZK","DJF","DKK","DOP","DZD","EGP","ERN","ETB","EUR","FJD","FKP","GBP","GEL","GHS","GIP","GMD","GNF","GTQ","GYD","HKD","HNL","HUF","IDR","ILS","INR","ISK","JMD","JOD","JPY","KES","KGS","KHR","KMF","KRW","KWD","KYD","KZT","LAK","LBP","LKR","LRD","LSL","LYD","MAD","MDL","MGA","MKD","MNT","MOP","MUR","MVR","MWK","MXN","MYR","NAD","NGN","NIO","NOK","NPR","NZD","OMR","PAB","PEN","PGK","PHP","PKR","PLN","PYG","QAR","RON","RSD","RWF","SAR","SBD","SCR","SEK","SGD","SHP","SLE","SRD","SVC","SZL","THB","TJS","TMT","TND","TOP","TRY","TTD","TWD","TZS","UAH","UGX","USD","UYU","UZS","VND","VUV","WST","XAF","XCD","XOF","XPF","ZAR","ZMW","ZWL"],"type":"string","description":"Currency code in ISO 4217 format","examples":["AUD"]},"requestId":{"type":"string","description":"External payment processor request identifier for tracking this fee","examples":["att_sgpdz4v2ph1axmdmdx8_m8w6qv"]},"kind":{"enum":["GATEWAY","SHIPPING","SMS_DELIVERY"],"type":"string","description":"Type of fee for categorization and reporting","examples":["GATEWAY"]}},"required":["id","createdAt","reason","amount","currency","requestId"]},"description":"Gateway fees recorded against this order from settlement processing (e.g. payment processing fees, dispute fees)."},"price":{"type":"object","properties":{"net":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991,"description":"Total amount to pay to promoter in cents.\nCalculated as: total + booking + refunded + dispute","examples":[500]},"total":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991,"description":"Total amount the customer should pay in cents.\nCalculated as: gross + discount","examples":[1400]},"gross":{"type":"integer","minimum":0,"maximum":9007199254740991,"description":"Total amount before refunds and discounts in cents.\nCalculated as: base + booking + shipping","examples":[2200]},"base":{"type":"integer","minimum":0,"maximum":9007199254740991,"description":"Total ticket price in cents","examples":[1000]},"booking":{"type":"integer","minimum":0,"maximum":9007199254740991,"description":"Total booking fees in cents (non-refundable)","examples":[400]},"shipping":{"type":"integer","minimum":0,"maximum":9007199254740991,"description":"Total shipping amount in cents","examples":[0]},"sms":{"type":"integer","minimum":0,"maximum":9007199254740991,"default":0,"description":"SMS delivery fee in cents (customer-facing price in event currency)","examples":[200]},"refunded":{"type":"integer","minimum":-9007199254740991,"maximum":0,"description":"Total amount refunded in cents (negative value)","examples":[-700]},"discount":{"type":"integer","minimum":-9007199254740991,"maximum":0,"description":"Total amount discounted in cents (negative value)","examples":[-1000]},"gateway":{"type":"integer","minimum":-9007199254740991,"maximum":0,"description":"Total absorbed payment gateway fees in cents (negative value)","examples":[0]},"dispute":{"type":"integer","minimum":-9007199254740991,"maximum":0,"description":"Total non-absorbed payment gateway fees in cents (negative value)","examples":[0]},"currency":{"enum":["AED","ALL","AMD","ANG","AOA","ARS","AUD","AWG","AZN","BAM","BBD","BDT","BGN","BHD","BIF","BMD","BND","BOB","BRL","BSD","BTN","BWP","BZD","CAD","CHF","CLP","CNY","COP","CRC","CVE","CZK","DJF","DKK","DOP","DZD","EGP","ERN","ETB","EUR","FJD","FKP","GBP","GEL","GHS","GIP","GMD","GNF","GTQ","GYD","HKD","HNL","HUF","IDR","ILS","INR","ISK","JMD","JOD","JPY","KES","KGS","KHR","KMF","KRW","KWD","KYD","KZT","LAK","LBP","LKR","LRD","LSL","LYD","MAD","MDL","MGA","MKD","MNT","MOP","MUR","MVR","MWK","MXN","MYR","NAD","NGN","NIO","NOK","NPR","NZD","OMR","PAB","PEN","PGK","PHP","PKR","PLN","PYG","QAR","RON","RSD","RWF","SAR","SBD","SCR","SEK","SGD","SHP","SLE","SRD","SVC","SZL","THB","TJS","TMT","TND","TOP","TRY","TTD","TWD","TZS","UAH","UGX","USD","UYU","UZS","VND","VUV","WST","XAF","XCD","XOF","XPF","ZAR","ZMW","ZWL"],"type":"string","description":"Currency code in ISO 4217 format","examples":["AUD"]}},"required":["net","total","gross","base","booking","shipping","refunded","discount","gateway","dispute","currency"],"description":"Price breakdown in the event currency. This reflects what the customer was charged."},"settlement":{"type":"object","properties":{"net":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991,"description":"Total amount to pay to promoter in cents.\nCalculated as: total + booking + refunded + dispute","examples":[500]},"total":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991,"description":"Total amount the customer should pay in cents.\nCalculated as: gross + discount","examples":[1400]},"gross":{"type":"integer","minimum":0,"maximum":9007199254740991,"description":"Total amount before refunds and discounts in cents.\nCalculated as: base + booking + shipping","examples":[2200]},"base":{"type":"integer","minimum":0,"maximum":9007199254740991,"description":"Total ticket price in cents","examples":[1000]},"booking":{"type":"integer","minimum":0,"maximum":9007199254740991,"description":"Total booking fees in cents (non-refundable)","examples":[400]},"shipping":{"type":"integer","minimum":0,"maximum":9007199254740991,"description":"Total shipping amount in cents","examples":[0]},"sms":{"type":"integer","minimum":0,"maximum":9007199254740991,"default":0,"description":"SMS delivery fee in cents (customer-facing price in event currency)","examples":[200]},"refunded":{"type":"integer","minimum":-9007199254740991,"maximum":0,"description":"Total amount refunded in cents (negative value)","examples":[-700]},"discount":{"type":"integer","minimum":-9007199254740991,"maximum":0,"description":"Total amount discounted in cents (negative value)","examples":[-1000]},"gateway":{"type":"integer","minimum":-9007199254740991,"maximum":0,"description":"Total absorbed payment gateway fees in cents (negative value)","examples":[0]},"dispute":{"type":"integer","minimum":-9007199254740991,"maximum":0,"description":"Total non-absorbed payment gateway fees in cents (negative value)","examples":[0]},"currency":{"enum":["AED","ALL","AMD","ANG","AOA","ARS","AUD","AWG","AZN","BAM","BBD","BDT","BGN","BHD","BIF","BMD","BND","BOB","BRL","BSD","BTN","BWP","BZD","CAD","CHF","CLP","CNY","COP","CRC","CVE","CZK","DJF","DKK","DOP","DZD","EGP","ERN","ETB","EUR","FJD","FKP","GBP","GEL","GHS","GIP","GMD","GNF","GTQ","GYD","HKD","HNL","HUF","IDR","ILS","INR","ISK","JMD","JOD","JPY","KES","KGS","KHR","KMF","KRW","KWD","KYD","KZT","LAK","LBP","LKR","LRD","LSL","LYD","MAD","MDL","MGA","MKD","MNT","MOP","MUR","MVR","MWK","MXN","MYR","NAD","NGN","NIO","NOK","NPR","NZD","OMR","PAB","PEN","PGK","PHP","PKR","PLN","PYG","QAR","RON","RSD","RWF","SAR","SBD","SCR","SEK","SGD","SHP","SLE","SRD","SVC","SZL","THB","TJS","TMT","TND","TOP","TRY","TTD","TWD","TZS","UAH","UGX","USD","UYU","UZS","VND","VUV","WST","XAF","XCD","XOF","XPF","ZAR","ZMW","ZWL"],"type":"string","description":"Currency code in ISO 4217 format","examples":["AUD"]},"exchangeRate":{"type":"number","description":"Conversion rate applied from the original payment currency to the settlement currency. 1.0 when both currencies are the same","examples":[1.4]}},"required":["net","total","gross","base","booking","shipping","refunded","discount","gateway","dispute","currency","exchangeRate"],"description":"Price breakdown in the payout currency with the exchange rate applied. When the event currency differs from the settlement currency, all amounts are converted. For same-currency orders the values match the order price with an exchange rate of 1.0."},"couponCode":{"type":"object","properties":{"id":{"type":"string","description":"Unique identifier of the coupon code used in the order","examples":["cod_01jps5cgsfzftw7hxcvr2wftk2"]},"name":{"type":"string","description":"The coupon code string that was entered by the customer","examples":["TEST50"]},"couponId":{"type":"string","description":"Unique identifier of the parent coupon configuration","examples":["cpn_01jps5cgsfzs1ksqaet5hba8ac"]}},"required":["id","name","couponId"],"description":"Coupon code applied to this order for discount calculation."},"customer":{"type":"object","properties":{"id":{"type":"string","description":"Unique identifier of the customer who placed the order","examples":["cus_01jps5cgsf4pn2a32eamppnap1"]},"firstName":{"type":"string","description":"First name of the customer","examples":["Test"]},"lastName":{"type":"string","description":"Last name of the customer","examples":["User"]},"email":{"type":"string","format":"email","description":"Email address of the customer","examples":["test@session.services"]},"phone":{"type":"string","description":"Customer phone number in E.164 format for SMS delivery","examples":["+61411111111"]}},"required":["id","firstName","lastName","email"],"description":"Customer who placed this order. Absent for guest checkouts before customer details are captured."},"marketingConsent":{"type":"object","properties":{"promoter":{"type":"boolean"},"tenant":{"type":"boolean"}},"required":["promoter","tenant"],"description":"Marketing opt-in choices captured during checkout."},"timeline":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string","description":"Unique identifier of the timeline entry","examples":["tln_01jps5cgsfgve5b5g2666kyryh"]},"createdAt":{"type":"string","format":"date-time","readOnly":true,"description":"Timestamp in ISO 8601 format when this timeline entry was created","examples":["2026-06-07T11:39:32.858Z"]},"status":{"type":"string","description":"Order status associated with this timeline entry, when applicable.","examples":["SUCCESSFUL"]},"kind":{"enum":["ORDER_STATUS_UPDATED","ORDER_EXPIRED","ORDER_COMPLETED","PAYMENT_INITIATED","PAYMENT_PROCESSING","PAYMENT_FAILED","PAYMENT_SUCCEEDED","REFUND_INITIATED","REFUND_PROCESSING","REFUND_SUCCEEDED","REFUND_SETTLED","REFUND_FAILED","CHARGEBACK_INITIATED","CHARGEBACK_EVIDENCE_SUBMITTED","CHARGEBACK_WON","CHARGEBACK_LOST","CHARGEBACK_FUNDS_WITHDRAWN","TICKETS_GENERATED","TICKET_ADDED","TICKETS_SCANNED","TICKET_EDITED","TICKET_STATUS_CHANGED","EMAIL_SENT","EMAIL_DELIVERED","EMAIL_OPENED","EMAIL_BOUNCED","EMAIL_COMPLAINED","EMAIL_FAILED","SMS_SENT","SMS_DELIVERED","SMS_FAILED","NOTE"],"type":"string","description":"Type of timeline event (ORDER_COMPLETED, PAYMENT_SUCCEEDED, REFUND_INITIATED, etc.)","examples":["ORDER_COMPLETED"]},"editable":{"type":"boolean","description":"Whether this timeline entry can be edited by users","examples":[false]},"pinned":{"type":"boolean","description":"Whether this timeline entry is pinned to the top of the timeline","examples":[false]},"description":{"type":"string","description":"Human-readable description of what happened in this timeline event","examples":["Order was created successfully"]},"author":{"type":"string","description":"Name of the user or system that created this timeline entry","examples":["System"]},"userId":{"type":"string","description":"Identifier of the user who created this timeline entry, when available.","examples":["usr_01jps5cgsd4tzjghtnt45qnhn0"]},"externalId":{"type":"string","description":"External idempotency key for deduplication (e.g., SES messageId + eventType)","examples":["ses:01234567-89ab-cdef-0123-456789abcdef:Delivery"]}},"required":["id","createdAt","kind","editable","pinned","description","author"]},"description":"Chronological audit trail of events for this order (payments, refunds, emails, scans)."},"refunds":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string","description":"Unique identifier for this refund","examples":["rfd_01jps5cgsfgve5b5g2666kyryh"]},"request":{"type":"object","properties":{"idempotencyKey":{"type":"string","description":"Client-provided key to prevent duplicate refund processing","examples":["refund_12345_customer_request"]}},"description":"Request metadata supplied by Sessions or API callers"},"status":{"enum":["PENDING","PROCESSING","SUCCEEDED","FAILED"],"type":"string","description":"Current processing status. PENDING: awaiting gateway confirmation or async processing (e.g., bank transfers). PROCESSING: gateway confirmed, ticket cancellation in progress. SUCCEEDED/FAILED: terminal states.","examples":["PENDING","SUCCEEDED"]},"acceptedAt":{"type":"string","format":"date-time","description":"Timestamp when the payment gateway accepted the refund","examples":["2026-06-07T11:39:32.858Z"]},"failedAt":{"type":"string","format":"date-time","description":"Timestamp when the refund failed","examples":["2026-06-07T11:39:32.858Z"]},"failure":{"type":"object","properties":{"reason":{"type":"string","description":"Gateway or system failure reason","examples":["Insufficient funds for refund"]},"message":{"type":"string","description":"User-facing failure message when available","examples":["The refund could not be processed."]}},"required":["reason"],"description":"Failure details when the refund failed"},"price":{"type":"object","properties":{"currency":{"type":"string","description":"Currency used for all refund amounts","examples":["AUD"]},"total":{"type":"integer","minimum":1,"maximum":9007199254740991,"description":"Total refund amount in cents, including ticket, shipping, and fee portions.","examples":[1200]},"items":{"type":"integer","minimum":0,"maximum":9007199254740991,"description":"Ticket item portion of the refund in cents","examples":[1200]},"shipping":{"type":"integer","minimum":0,"maximum":9007199254740991,"description":"Shipping portion of the refund in cents","examples":[0]},"fees":{"type":"integer","minimum":0,"maximum":9007199254740991,"description":"Fee portion of the refund in cents","examples":[0]}},"required":["currency","total","items","shipping","fees"],"description":"Refund amount breakdown"},"reason":{"enum":["CUSTOMER_REQUEST","DUPLICATE","EVENT_CANCELLED","OTHER"],"type":"string","description":"Categorized reason for the refund used for analytics","examples":["CUSTOMER_REQUEST","DUPLICATE","EVENT_CANCELLED"]},"note":{"type":"string","description":"Free-form notes explaining the refund","examples":["Customer requested refund due to schedule conflict"]},"items":{"type":"array","items":{"type":"object","properties":{"orderItemId":{"type":"string","description":"Identifier of the order item being refunded","examples":["itm_01jps5cgsfwyxj0516571eaf17"]},"quantity":{"type":"integer","minimum":1,"maximum":9007199254740991,"description":"Number of units refunded for this item","examples":[2]},"amount":{"type":"integer","minimum":0,"maximum":9007199254740991,"description":"Refund amount for this item in cents (base price only, excludes booking fee)","examples":[1200]},"ticketIds":{"type":"array","items":{"type":"string"},"description":"Specific ticket identifiers that were refunded (selected via FIFO)","examples":[["tkt_01jps5cgsg0s32w2pr73vbccde"]]}},"required":["orderItemId","quantity","amount","ticketIds"]},"description":"Line items included in this refund with quantities and amounts"},"tickets":{"type":"object","properties":{"cancelRequested":{"type":"boolean","description":"Whether ticket cancellation was requested for the refund","examples":[true]},"cancelled":{"type":"boolean","description":"Whether tickets were cancelled as part of this refund","examples":[true]},"cancelledCount":{"type":"integer","minimum":0,"maximum":9007199254740991,"description":"Number of tickets that were cancelled","examples":[2]}},"required":["cancelRequested","cancelled","cancelledCount"],"description":"Ticket cancellation state for the refund"},"gateway":{"type":"object","properties":{"provider":{"enum":["FREE","AIRWALLEX","STRIPE"],"type":"string","description":"Payment gateway used to process the refund","examples":["STRIPE","AIRWALLEX"]},"refundId":{"type":"string","description":"Refund identifier from the payment gateway","examples":["re_1234567890abcdef"]},"idempotencyKey":{"type":"string","description":"Idempotency key sent to the payment gateway","examples":["rfd_01jps5cgsfgve5b5g2666kyryh"]}},"required":["provider"],"description":"Gateway refund identifiers"},"actor":{"type":"object","properties":{"type":{"enum":["USER","GATEWAY","SYSTEM"],"type":"string","description":"Who initiated the refund","examples":["USER","GATEWAY"]},"userId":{"type":"string","description":"Identifier of the user who initiated the refund","examples":["usr_01jps5cgsd4tzjghtnt45qnhn0"]}},"required":["type"],"description":"Refund initiator"},"metadata":{"type":"object","propertyNames":{"type":"string"},"additionalProperties":{"type":"string"},"description":"Custom key-value pairs passed through to the payment gateway","examples":[{"supportTicket":"#12345"}]},"notification":{"type":"object","properties":{"requested":{"type":"boolean","description":"Whether a customer refund confirmation email was requested.","examples":[true]},"sentAt":{"type":"string","format":"date-time","description":"Timestamp when the refund confirmation email was sent.","examples":["2026-06-07T11:39:32.858Z"]}},"required":["requested"],"description":"Refund confirmation notification state"},"createdAt":{"type":"string","format":"date-time","description":"Timestamp when the refund was created","examples":["2026-06-07T11:39:32.858Z"]}},"required":["id","status","price","reason","items","tickets","gateway","actor","notification","createdAt"]},"default":[],"description":"Refunds processed for this order including pending, succeeded, and failed attempts."},"offers":{"type":"array","items":{"type":"object","properties":{"kind":{"enum":["SMS_DELIVERY"],"type":"string","description":"Discriminator identifying the type of offer","examples":["SMS_DELIVERY"]},"label":{"type":"string","description":"Human-readable label for the offer","examples":["SMS ticket delivery"]},"price":{"type":"object","properties":{"amount":{"type":"integer","minimum":0,"maximum":9007199254740991,"description":"Offer price in the smallest currency unit (e.g. cents)","examples":[200]},"currency":{"enum":["AED","ALL","AMD","ANG","AOA","ARS","AUD","AWG","AZN","BAM","BBD","BDT","BGN","BHD","BIF","BMD","BND","BOB","BRL","BSD","BTN","BWP","BZD","CAD","CHF","CLP","CNY","COP","CRC","CVE","CZK","DJF","DKK","DOP","DZD","EGP","ERN","ETB","EUR","FJD","FKP","GBP","GEL","GHS","GIP","GMD","GNF","GTQ","GYD","HKD","HNL","HUF","IDR","ILS","INR","ISK","JMD","JOD","JPY","KES","KGS","KHR","KMF","KRW","KWD","KYD","KZT","LAK","LBP","LKR","LRD","LSL","LYD","MAD","MDL","MGA","MKD","MNT","MOP","MUR","MVR","MWK","MXN","MYR","NAD","NGN","NIO","NOK","NPR","NZD","OMR","PAB","PEN","PGK","PHP","PKR","PLN","PYG","QAR","RON","RSD","RWF","SAR","SBD","SCR","SEK","SGD","SHP","SLE","SRD","SVC","SZL","THB","TJS","TMT","TND","TOP","TRY","TTD","TWD","TZS","UAH","UGX","USD","UYU","UZS","VND","VUV","WST","XAF","XCD","XOF","XPF","ZAR","ZMW","ZWL"],"type":"string","description":"Three-letter ISO 4217 currency code","examples":["AUD"]}},"required":["amount","currency"],"description":"Pre-computed price for this offer"}},"required":["kind","label","price"]},"default":[],"description":"Pre-computed add-on offers available during checkout (e.g. SMS ticket delivery)."},"customerId":{"type":"string","pattern":"^cus_[0-9a-z]{26}$","description":"Identifier of the customer who placed this order.","examples":["cus_01jps5cgsf4pn2a32eamppnap1"]},"createdBy":{"type":"object","properties":{"id":{"type":"string","description":"Unique identifier of the customer who placed the order","examples":["cus_01jps5cgsf4pn2a32eamppnap1"]},"firstName":{"type":"string","description":"First name of the customer","examples":["Test"]},"lastName":{"type":"string","description":"Last name of the customer","examples":["User"]},"email":{"type":"string","format":"email","description":"Email address of the customer","examples":["test@session.services"]},"phone":{"type":"string","description":"Customer phone number in E.164 format for SMS delivery","examples":["+61411111111"]}},"required":["id","firstName","lastName","email"],"description":"Admin user who created this order on behalf of the customer."},"teamId":{"type":"string","pattern":"^tem_[0-9a-z]{26}$","description":"Team that owns this order."},"promoterId":{"type":"string","pattern":"^pmt_[0-9a-z]{26}$","description":"Promoter managing this order.","examples":["pmt_01jqpjksnsen9vprw95et60t2m"]},"event":{"type":"object","properties":{"id":{"type":"string","description":"Unique identifier of the event associated with the order","examples":["evt_01jps5cgsenjrazw6wswmyspa3"]},"name":{"type":"string","description":"Display name of the event","examples":["Test Event"]},"slug":{"type":"string","description":"URL-friendly slug of the event","examples":["test-event"]},"location":{"type":"string","description":"Name of the venue or location where the event takes place","examples":["Watson's EQ"]}},"required":["id","name","slug"],"description":"Snapshot of the event at time of purchase (name, slug, location)."},"payoutIds":{"type":"array","items":{"type":"string","pattern":"^pyt_[0-9a-z]{26}$","description":"Payout identifier.","examples":["pay_01HQXYZ"]},"description":"Payout identifiers for settlements that included this order."},"eventId":{"type":"string","pattern":"^evt_[0-9a-z]{26}$","description":"Identifier of the event this order belongs to.","examples":["evt_01jps5cgsenjrazw6wswmyspa3"]},"checkoutUrl":{"type":"string","readOnly":true,"description":"Derived checkout URL where the customer can complete payment for this order.","examples":["https://example.com/checkout/ord_1234567890"]},"returnUrl":{"type":"string","description":"URL to redirect to after successful payment completion.","examples":["https://example.com/event/success"]},"channel":{"type":"object","properties":{"name":{"type":"string","description":"Free-form channel identifier describing where the order originated.","examples":["tenant-web","team-web","api","partner"]},"referrer":{"type":"string","description":"Optional referrer URL captured at order creation for redirect routing and attribution.","examples":["https://sash.teams.mixmag.au/events/example-event"]},"utmSource":{"type":"string","description":"Optional UTM source captured from the originating URL.","examples":["instagram"]},"utmMedium":{"type":"string","description":"Optional UTM medium captured from the originating URL.","examples":["social"]},"utmCampaign":{"type":"string","description":"Optional UTM campaign captured from the originating URL.","examples":["summer-launch"]},"deviceType":{"enum":["MOBILE","TABLET","DESKTOP"],"type":"string","description":"Optional analytics device classification captured at order creation.","examples":["MOBILE"]},"browser":{"type":"string","description":"Optional analytics browser classification captured at order creation.","examples":["Chrome"]},"country":{"type":"string","description":"Optional viewer country captured at order creation for analytics attribution.","examples":["Australia"]},"region":{"type":"string","description":"Optional viewer region captured at order creation for analytics attribution.","examples":["Australia - New South Wales"]},"sessionId":{"type":"string","description":"Session ID captured at order creation for client/server analytics linking.","examples":["ses_01HX..."]},"anonymousId":{"type":"string","description":"Browser anonymous ID captured at order creation for attribution linking.","examples":["aid_01HX..."]}},"required":["name"],"description":"Channel metadata captured at order creation to identify origin and redirect context."},"reservedAt":{"type":"string","format":"date-time","description":"Timestamp when inventory was reserved for this order. Used for checkout countdown timer.","examples":["2026-06-07T11:39:33.049Z"]}},"required":["id","createdAt","updatedAt","status","items","fees","price","teamId","promoterId","event","payoutIds","eventId"],"description":"Complete order information including customer details, items, and payment status."},"price":{"type":"object","properties":{"net":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991,"description":"Total amount to pay to promoter in cents.\nCalculated as: total + booking + refunded + dispute","examples":[500]},"total":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991,"description":"Total amount the customer should pay in cents.\nCalculated as: gross + discount","examples":[1400]},"gross":{"type":"integer","minimum":0,"maximum":9007199254740991,"description":"Total amount before refunds and discounts in cents.\nCalculated as: base + booking + shipping","examples":[2200]},"base":{"type":"integer","minimum":0,"maximum":9007199254740991,"description":"Total ticket price in cents","examples":[1000]},"booking":{"type":"integer","minimum":0,"maximum":9007199254740991,"description":"Total booking fees in cents (non-refundable)","examples":[400]},"shipping":{"type":"integer","minimum":0,"maximum":9007199254740991,"description":"Total shipping amount in cents","examples":[0]},"sms":{"type":"integer","minimum":0,"maximum":9007199254740991,"default":0,"description":"SMS delivery fee in cents (customer-facing price in event currency)","examples":[200]},"refunded":{"type":"integer","minimum":-9007199254740991,"maximum":0,"description":"Total amount refunded in cents (negative value)","examples":[-700]},"discount":{"type":"integer","minimum":-9007199254740991,"maximum":0,"description":"Total amount discounted in cents (negative value)","examples":[-1000]},"gateway":{"type":"integer","minimum":-9007199254740991,"maximum":0,"description":"Total absorbed payment gateway fees in cents (negative value)","examples":[0]},"dispute":{"type":"integer","minimum":-9007199254740991,"maximum":0,"description":"Total non-absorbed payment gateway fees in cents (negative value)","examples":[0]},"currency":{"enum":["AED","ALL","AMD","ANG","AOA","ARS","AUD","AWG","AZN","BAM","BBD","BDT","BGN","BHD","BIF","BMD","BND","BOB","BRL","BSD","BTN","BWP","BZD","CAD","CHF","CLP","CNY","COP","CRC","CVE","CZK","DJF","DKK","DOP","DZD","EGP","ERN","ETB","EUR","FJD","FKP","GBP","GEL","GHS","GIP","GMD","GNF","GTQ","GYD","HKD","HNL","HUF","IDR","ILS","INR","ISK","JMD","JOD","JPY","KES","KGS","KHR","KMF","KRW","KWD","KYD","KZT","LAK","LBP","LKR","LRD","LSL","LYD","MAD","MDL","MGA","MKD","MNT","MOP","MUR","MVR","MWK","MXN","MYR","NAD","NGN","NIO","NOK","NPR","NZD","OMR","PAB","PEN","PGK","PHP","PKR","PLN","PYG","QAR","RON","RSD","RWF","SAR","SBD","SCR","SEK","SGD","SHP","SLE","SRD","SVC","SZL","THB","TJS","TMT","TND","TOP","TRY","TTD","TWD","TZS","UAH","UGX","USD","UYU","UZS","VND","VUV","WST","XAF","XCD","XOF","XPF","ZAR","ZMW","ZWL"],"type":"string","description":"Currency code in ISO 4217 format","examples":["AUD"]}},"required":["net","total","gross","base","booking","shipping","refunded","discount","gateway","dispute","currency"],"description":"Settled price information for this specific order, showing final amounts after refunds and adjustments."},"split":{"type":"object","properties":{"tenant":{"type":"number","description":"Amount allocated to the tenant (platform) in cents. This represents the platform's share of the revenue.","examples":[50000]},"venue":{"type":"number","description":"Amount allocated to the venue in cents. This represents the venue's share of the revenue from events held at their location.","examples":[25000]},"team":{"type":"number","description":"Amount allocated to the team in cents. This represents the team's share of the revenue after fees and other deductions.","examples":[20000]},"sessions":{"type":"number","description":"Amount allocated to Sessions platform commission in cents. This represents the platform's service fees.","examples":[3000]},"tickets":{"type":"number","description":"Amount allocated to ticketing fees in cents. This represents fees charged for ticket processing and management.","examples":[2000]}},"required":["tenant","venue","team","sessions","tickets"],"description":"How this individual order's revenue is split between different beneficiaries in cents."},"structure":{"type":"string","description":"Fee structure identifier used to calculate the split for this order.","examples":["DEFAULT"]}},"required":["order","price","split","structure"]},"description":"Detailed breakdown of individual orders included in this payout, showing how each order contributes to the total."}},"required":["total","orders"]},"canExportBookingFees":{"type":"boolean"}},"required":["payout","breakdown","canExportBookingFees"]}}}}}},"patch":{"operationId":"payout.update","summary":"Update a payout","description":"Update payout status or approval. Use approval field to approve or reject payouts.","tags":["Payouts"],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string","description":"Unique identifier of the payout to update.","examples":["pyt_01jps5cgsfv2wre6hd0rc4w4t8"]}}],"requestBody":{"required":false,"content":{"application/json":{"schema":{"type":"object","properties":{"status":{"enum":["CANCELLED"],"type":"string","description":"Optional new payment status for the payout. Only CANCELLED is allowed for manual updates.","examples":["CANCELLED"]},"approval":{"enum":["PENDING","APPROVED","REJECTED"],"type":"string","description":"Optional new approval status for the payout. PENDING: awaiting approval, APPROVED: approved for processing, REJECTED: rejected.","examples":["APPROVED"]}},"additionalProperties":false}}}},"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Payout"}}}}}}},"/payouts":{"get":{"operationId":"payout.list","summary":"List payouts with cursor-based pagination","description":"Returns payout data with cursor-based pagination and optional full-text search via the `query` parameter.","tags":["Payouts"],"parameters":[{"name":"mine","in":"query","schema":{"type":"boolean","description":"When true, returns payouts from teams where the authenticated user has payout access (for example, `payout.read` or `payout.write`).","examples":[true]},"allowEmptyValue":true,"allowReserved":true},{"name":"teamId","in":"query","schema":{"type":"string","description":"Filter payouts by specific team unique identifier. BREAKING CHANGE: Replaced promoterId filter."},"allowEmptyValue":true,"allowReserved":true},{"name":"eventId","in":"query","schema":{"type":"string","description":"Filter payouts by specific event unique identifier. When provided, only returns payouts for this event.","examples":["evt_01jps5cgsenjrazw6wswmyspa3"]},"allowEmptyValue":true,"allowReserved":true},{"name":"status","in":"query","schema":{"enum":["UPCOMING","FAILED","PROCESSING","PAID","CANCELLED"],"type":"string","description":"Filter payouts by payment status. UPCOMING: scheduled but not yet processed, FAILED: failed processing and will retry, PROCESSING: currently being processed, PAID: successfully completed, CANCELLED: cancelled before completion.","examples":["PAID"]},"allowEmptyValue":true,"allowReserved":true},{"name":"approval","in":"query","schema":{"enum":["PENDING","APPROVED","REJECTED"],"type":"string","description":"Filter payouts by approval status. PENDING: awaiting approval, APPROVED: approved for processing, REJECTED: rejected and will not be processed.","examples":["APPROVED"]},"allowEmptyValue":true,"allowReserved":true},{"name":"query","in":"query","schema":{"type":"string","description":"Optional search query to filter payouts by text fields. When provided, search-backed pagination is used.","examples":["PAID venue:sydney"]},"allowEmptyValue":true,"allowReserved":true},{"name":"sort","in":"query","schema":{"enum":["createdAt"],"type":"string","description":"Optional list sort field. Use `createdAt` to return newest or oldest payouts first.","examples":["createdAt"]},"allowEmptyValue":true,"allowReserved":true},{"name":"direction","in":"query","schema":{"enum":["asc","desc"],"type":"string","description":"Sort direction for payout lists. Defaults to `desc` when `sort` is provided.","examples":["desc"]},"allowEmptyValue":true,"allowReserved":true},{"name":"limit","in":"query","schema":{"type":"integer","minimum":1,"maximum":100,"default":20,"description":"Maximum number of payouts to return per request (1-100, default: 20)","examples":[20]},"allowEmptyValue":true,"allowReserved":true},{"name":"cursor","in":"query","schema":{"type":"string","description":"Pagination cursor for continuing to fetch subsequent results. Use the cursor from the previous response to continue.","examples":["eyJpZCI6InBheV8wMWpwczVjZ3NmdjJ3cmU2aGQwcmM0dzR0OCJ9"]},"allowEmptyValue":true,"allowReserved":true}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"object","properties":{"payouts":{"type":"array","items":{"$ref":"#/components/schemas/Payout"},"description":"Array of payouts for the current result set"},"before":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Cursor for navigating backward in the result set. Omitted when there are no prior results.","examples":["eyJ2ZXJzaW9uIjoxLCJpbnRlbnQiOnsic291cmNlIjoiZGVtbyJ9LCJwb3MiOnsicHJpbWFyeUtleSI6InBybV8wMXM4NTNqIn19"]},"after":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Cursor for navigating forward in the result set. Omitted when there are no subsequent results.","examples":["eyJ2ZXJzaW9uIjoxLCJpbnRlbnQiOnsic291cmNlIjoiZGVtbyJ9LCJwb3MiOnsicHJpbWFyeUtleSI6InBybV8wMXM4NTNkIn19"]},"limit":{"type":"number","minimum":1,"description":"Maximum number of items to return in each result set","examples":[20]}},"required":["payouts","limit"]}}}}}}},"/payouts/{id}/preview":{"get":{"operationId":"payout.preview","summary":"Get payout preview for approvals","description":"Returns lightweight payout split rows and beneficiary resolution status used by approvals dropdowns.","tags":["Payouts"],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string","description":"Unique identifier of the payout to retrieve.","examples":["pyt_01jps5cgsfv2wre6hd0rc4w4t8"]}},{"name":"includeSettlementSummary","in":"query","schema":{"type":"boolean","description":"When true, includes the Airwallex settlement summary for the payout preview.","examples":[true]},"allowEmptyValue":true,"allowReserved":true}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"object","properties":{"payout":{"type":"object","properties":{"id":{"type":"string","readOnly":true,"description":"A unique identifier for this payout.","examples":["pyt_01jps5cgsfv2wre6hd0rc4w4t8"]},"status":{"enum":["UPCOMING","FAILED","PROCESSING","PAID","CANCELLED"],"type":"string","description":"Current payment status of this payout.","examples":["PAID"]},"approval":{"enum":["PENDING","APPROVED","REJECTED"],"type":"string","description":"Approval status for this payout.","examples":["APPROVED"]},"method":{"enum":["AIRWALLEX","STRIPE","MANUAL"],"type":"string","description":"The payout channel used for disbursing funds.","examples":["MANUAL"]},"frequency":{"enum":["DAILY","WEEKLY","AFTER_EVENT","ON_DEMAND"],"type":"string","default":"AFTER_EVENT","description":"Schedule on which this payout is generated.","examples":["AFTER_EVENT"]},"structure":{"type":"string","description":"Data structure defining how funds are allocated in this payout.","examples":["DEFAULT"]},"createdAt":{"type":"string","format":"date-time","readOnly":true,"description":"Timestamp in ISO 8601 format when this payout was created.","examples":["2026-06-07T11:39:32.857Z"]},"dueAt":{"type":"string","format":"date-time","description":"Earliest timestamp in ISO 8601 format when this payout can be picked up for processing. This is not a guaranteed bank arrival time.","examples":["2026-06-07T11:39:32.857Z"]},"teamId":{"type":"string","description":"Team receiving this payout. BREAKING CHANGE: Replaced promoterId/promoterSlug."},"eventId":{"type":"string","description":"Identifier of the event for which this payout was generated.","examples":["evt_01jps5cgsenjrazw6wswmyspa3"]},"event":{"type":"object","properties":{"id":{"type":"string","description":"Unique identifier for the event associated with this payout.","examples":["evt_01jps5cgsenjrazw6wswmyspa3"]},"name":{"type":"string","description":"Human-readable name of the event.","examples":["Test Event"]},"slug":{"type":"string","description":"URL-friendly slug identifier for the event.","examples":["test-event"]},"location":{"type":"string","description":"Optional human-readable location name where the event takes place.","examples":["Watson's EQ"]}},"required":["id","name","slug"],"description":"Information about the event associated with this payout."},"price":{"type":"object","properties":{"net":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991,"description":"Total amount to pay to promoter.\nCalculated as: total + booking + refunded + dispute + deductions","examples":[1000]},"total":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991,"description":"Total amount the collected in ticket revenue.\nCalculated as: gross + discount","examples":[1000]},"gross":{"type":"integer","minimum":0,"maximum":9007199254740991,"description":"Total amount before refunds, disputes, deductions and discounts.\nCalculated as: base + booking + shipping","examples":[1000]},"base":{"type":"integer","minimum":0,"maximum":9007199254740991,"description":"Total value of tickets.","examples":[1000]},"booking":{"type":"integer","minimum":0,"maximum":9007199254740991,"description":"Total value of booking fees (non-refundable).","examples":[0]},"shipping":{"type":"integer","minimum":0,"maximum":9007199254740991,"description":"Total value of shipping.","examples":[0]},"sms":{"type":"integer","minimum":0,"maximum":9007199254740991,"default":0,"description":"Total SMS delivery fees collected in cents (owed to Session Services, not the event organiser).","examples":[0]},"refunded":{"type":"integer","minimum":-9007199254740991,"maximum":0,"description":"Total value of refunds (negative value).","examples":[0]},"discount":{"type":"integer","minimum":-9007199254740991,"maximum":0,"description":"Total value of discounts (negative value).","examples":[0]},"gateway":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991,"description":"Total value of absorbed payment gateway fees. Negative values are charges; positive values are reversals.","examples":[0]},"dispute":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991,"description":"Total value of non-absorbed payment gateway fees. Negative values are charges; positive values are reversals.","examples":[0]},"deductions":{"type":"integer","minimum":-9007199254740991,"maximum":0,"description":"Total value of payout-level deductions (negative value).","examples":[0]},"currency":{"enum":["AED","ALL","AMD","ANG","AOA","ARS","AUD","AWG","AZN","BAM","BBD","BDT","BGN","BHD","BIF","BMD","BND","BOB","BRL","BSD","BTN","BWP","BZD","CAD","CHF","CLP","CNY","COP","CRC","CVE","CZK","DJF","DKK","DOP","DZD","EGP","ERN","ETB","EUR","FJD","FKP","GBP","GEL","GHS","GIP","GMD","GNF","GTQ","GYD","HKD","HNL","HUF","IDR","ILS","INR","ISK","JMD","JOD","JPY","KES","KGS","KHR","KMF","KRW","KWD","KYD","KZT","LAK","LBP","LKR","LRD","LSL","LYD","MAD","MDL","MGA","MKD","MNT","MOP","MUR","MVR","MWK","MXN","MYR","NAD","NGN","NIO","NOK","NPR","NZD","OMR","PAB","PEN","PGK","PHP","PKR","PLN","PYG","QAR","RON","RSD","RWF","SAR","SBD","SCR","SEK","SGD","SHP","SLE","SRD","SVC","SZL","THB","TJS","TMT","TND","TOP","TRY","TTD","TWD","TZS","UAH","UGX","USD","UYU","UZS","VND","VUV","WST","XAF","XCD","XOF","XPF","ZAR","ZMW","ZWL"],"type":"string","description":"Currency code in ISO 4217 format.","examples":["AUD"]}},"required":["net","total","gross","base","booking","shipping","refunded","discount","gateway","dispute","deductions","currency"],"description":"Summary of amounts for transfers and deductions in this payout."}},"required":["id","status","approval","method","structure","createdAt","teamId","eventId","event","price"],"description":"Lightweight payout summary used by approvals and payout queue UIs."},"rows":{"type":"array","items":{"type":"object","properties":{"kind":{"enum":["tickets","tenant","venue","team","sessions"],"type":"string","description":"Split component represented by this row.","examples":["tickets"]},"amount":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991,"description":"Amount in cents for this split component.","examples":[114500]},"currency":{"enum":["AED","ALL","AMD","ANG","AOA","ARS","AUD","AWG","AZN","BAM","BBD","BDT","BGN","BHD","BIF","BMD","BND","BOB","BRL","BSD","BTN","BWP","BZD","CAD","CHF","CLP","CNY","COP","CRC","CVE","CZK","DJF","DKK","DOP","DZD","EGP","ERN","ETB","EUR","FJD","FKP","GBP","GEL","GHS","GIP","GMD","GNF","GTQ","GYD","HKD","HNL","HUF","IDR","ILS","INR","ISK","JMD","JOD","JPY","KES","KGS","KHR","KMF","KRW","KWD","KYD","KZT","LAK","LBP","LKR","LRD","LSL","LYD","MAD","MDL","MGA","MKD","MNT","MOP","MUR","MVR","MWK","MXN","MYR","NAD","NGN","NIO","NOK","NPR","NZD","OMR","PAB","PEN","PGK","PHP","PKR","PLN","PYG","QAR","RON","RSD","RWF","SAR","SBD","SCR","SEK","SGD","SHP","SLE","SRD","SVC","SZL","THB","TJS","TMT","TND","TOP","TRY","TTD","TWD","TZS","UAH","UGX","USD","UYU","UZS","VND","VUV","WST","XAF","XCD","XOF","XPF","ZAR","ZMW","ZWL"],"type":"string","description":"Currency code for this split component.","examples":["AUD"]},"beneficiary":{"type":"object","properties":{"status":{"enum":["VALID","FALLBACK","MISSING"],"type":"string","description":"Resolution status for the beneficiary used by this split. FALLBACK indicates a non-strict match was used, MISSING means no beneficiary is configured.","examples":["VALID"]},"warning":{"type":"string","description":"Optional warning message shown when fallback or missing beneficiary resolution was required.","examples":["Using fallback beneficiary with matching gateway only."]},"beneficiary":{"type":"object","properties":{"id":{"type":"string","description":"Identifier for the beneficiary.","examples":["ben_01jps5cgse5n6mg1ymkew9tsfh"]},"teamId":{"type":"string","description":"Team that owns this beneficiary configuration.","examples":["tem_01jqpjksnsen9vprw95et60t2m"]},"name":{"type":"string","description":"Display name for the resolved beneficiary.","examples":["My Bank Account"]},"gateway":{"enum":["AIRWALLEX","STRIPE"],"type":"string","description":"Payment gateway for this beneficiary when available from configuration.","examples":["AIRWALLEX"]},"gatewayId":{"type":"string","description":"Gateway-specific beneficiary identifier used for transfer creation.","examples":["7489cb17-24c5-4acf-a0cf-d93ed38081fe"]},"currency":{"enum":["AED","ALL","AMD","ANG","AOA","ARS","AUD","AWG","AZN","BAM","BBD","BDT","BGN","BHD","BIF","BMD","BND","BOB","BRL","BSD","BTN","BWP","BZD","CAD","CHF","CLP","CNY","COP","CRC","CVE","CZK","DJF","DKK","DOP","DZD","EGP","ERN","ETB","EUR","FJD","FKP","GBP","GEL","GHS","GIP","GMD","GNF","GTQ","GYD","HKD","HNL","HUF","IDR","ILS","INR","ISK","JMD","JOD","JPY","KES","KGS","KHR","KMF","KRW","KWD","KYD","KZT","LAK","LBP","LKR","LRD","LSL","LYD","MAD","MDL","MGA","MKD","MNT","MOP","MUR","MVR","MWK","MXN","MYR","NAD","NGN","NIO","NOK","NPR","NZD","OMR","PAB","PEN","PGK","PHP","PKR","PLN","PYG","QAR","RON","RSD","RWF","SAR","SBD","SCR","SEK","SGD","SHP","SLE","SRD","SVC","SZL","THB","TJS","TMT","TND","TOP","TRY","TTD","TWD","TZS","UAH","UGX","USD","UYU","UZS","VND","VUV","WST","XAF","XCD","XOF","XPF","ZAR","ZMW","ZWL"],"type":"string","description":"Currency configured for this beneficiary.","examples":["AUD"]}},"required":["name","gatewayId","currency"]}},"required":["status"]}},"required":["kind","amount","currency","beneficiary"]},"description":"Non-zero split rows with beneficiary resolution status and warnings."},"settlementSummary":{"type":"object","properties":{"state":{"enum":["TRACKED","N_A","SKIPPED"],"type":"string","description":"Whether settlement tracking applies to this payout preview. Non-Airwallex payouts return N_A.","examples":["TRACKED"]},"settled":{"type":"object","properties":{"orders":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991,"description":"Number of orders in this settlement bucket.","examples":[12]},"price":{"type":"object","properties":{"net":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991,"description":"Total amount to pay to promoter in cents.\nCalculated as: total + booking + refunded + dispute","examples":[500]},"total":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991,"description":"Total amount the customer should pay in cents.\nCalculated as: gross + discount","examples":[1400]},"gross":{"type":"integer","minimum":0,"maximum":9007199254740991,"description":"Total amount before refunds and discounts in cents.\nCalculated as: base + booking + shipping","examples":[2200]},"base":{"type":"integer","minimum":0,"maximum":9007199254740991,"description":"Total ticket price in cents","examples":[1000]},"booking":{"type":"integer","minimum":0,"maximum":9007199254740991,"description":"Total booking fees in cents (non-refundable)","examples":[400]},"shipping":{"type":"integer","minimum":0,"maximum":9007199254740991,"description":"Total shipping amount in cents","examples":[0]},"sms":{"type":"integer","minimum":0,"maximum":9007199254740991,"default":0,"description":"SMS delivery fee in cents (customer-facing price in event currency)","examples":[200]},"refunded":{"type":"integer","minimum":-9007199254740991,"maximum":0,"description":"Total amount refunded in cents (negative value)","examples":[-700]},"discount":{"type":"integer","minimum":-9007199254740991,"maximum":0,"description":"Total amount discounted in cents (negative value)","examples":[-1000]},"gateway":{"type":"integer","minimum":-9007199254740991,"maximum":0,"description":"Total absorbed payment gateway fees in cents (negative value)","examples":[0]},"dispute":{"type":"integer","minimum":-9007199254740991,"maximum":0,"description":"Total non-absorbed payment gateway fees in cents (negative value)","examples":[0]},"currency":{"enum":["AED","ALL","AMD","ANG","AOA","ARS","AUD","AWG","AZN","BAM","BBD","BDT","BGN","BHD","BIF","BMD","BND","BOB","BRL","BSD","BTN","BWP","BZD","CAD","CHF","CLP","CNY","COP","CRC","CVE","CZK","DJF","DKK","DOP","DZD","EGP","ERN","ETB","EUR","FJD","FKP","GBP","GEL","GHS","GIP","GMD","GNF","GTQ","GYD","HKD","HNL","HUF","IDR","ILS","INR","ISK","JMD","JOD","JPY","KES","KGS","KHR","KMF","KRW","KWD","KYD","KZT","LAK","LBP","LKR","LRD","LSL","LYD","MAD","MDL","MGA","MKD","MNT","MOP","MUR","MVR","MWK","MXN","MYR","NAD","NGN","NIO","NOK","NPR","NZD","OMR","PAB","PEN","PGK","PHP","PKR","PLN","PYG","QAR","RON","RSD","RWF","SAR","SBD","SCR","SEK","SGD","SHP","SLE","SRD","SVC","SZL","THB","TJS","TMT","TND","TOP","TRY","TTD","TWD","TZS","UAH","UGX","USD","UYU","UZS","VND","VUV","WST","XAF","XCD","XOF","XPF","ZAR","ZMW","ZWL"],"type":"string","description":"Currency code in ISO 4217 format","examples":["AUD"]}},"required":["net","total","gross","base","booking","shipping","refunded","discount","gateway","dispute","currency"],"description":"Aggregated totals for the orders in this bucket, in the bucket's native currency."}},"required":["orders","price"],"description":"Completed Airwallex orders that already have settlement data available."},"awaitingSettlement":{"type":"object","properties":{"orders":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991,"description":"Number of orders in this settlement bucket.","examples":[12]},"price":{"type":"object","properties":{"net":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991,"description":"Total amount to pay to promoter in cents.\nCalculated as: total + booking + refunded + dispute","examples":[500]},"total":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991,"description":"Total amount the customer should pay in cents.\nCalculated as: gross + discount","examples":[1400]},"gross":{"type":"integer","minimum":0,"maximum":9007199254740991,"description":"Total amount before refunds and discounts in cents.\nCalculated as: base + booking + shipping","examples":[2200]},"base":{"type":"integer","minimum":0,"maximum":9007199254740991,"description":"Total ticket price in cents","examples":[1000]},"booking":{"type":"integer","minimum":0,"maximum":9007199254740991,"description":"Total booking fees in cents (non-refundable)","examples":[400]},"shipping":{"type":"integer","minimum":0,"maximum":9007199254740991,"description":"Total shipping amount in cents","examples":[0]},"sms":{"type":"integer","minimum":0,"maximum":9007199254740991,"default":0,"description":"SMS delivery fee in cents (customer-facing price in event currency)","examples":[200]},"refunded":{"type":"integer","minimum":-9007199254740991,"maximum":0,"description":"Total amount refunded in cents (negative value)","examples":[-700]},"discount":{"type":"integer","minimum":-9007199254740991,"maximum":0,"description":"Total amount discounted in cents (negative value)","examples":[-1000]},"gateway":{"type":"integer","minimum":-9007199254740991,"maximum":0,"description":"Total absorbed payment gateway fees in cents (negative value)","examples":[0]},"dispute":{"type":"integer","minimum":-9007199254740991,"maximum":0,"description":"Total non-absorbed payment gateway fees in cents (negative value)","examples":[0]},"currency":{"enum":["AED","ALL","AMD","ANG","AOA","ARS","AUD","AWG","AZN","BAM","BBD","BDT","BGN","BHD","BIF","BMD","BND","BOB","BRL","BSD","BTN","BWP","BZD","CAD","CHF","CLP","CNY","COP","CRC","CVE","CZK","DJF","DKK","DOP","DZD","EGP","ERN","ETB","EUR","FJD","FKP","GBP","GEL","GHS","GIP","GMD","GNF","GTQ","GYD","HKD","HNL","HUF","IDR","ILS","INR","ISK","JMD","JOD","JPY","KES","KGS","KHR","KMF","KRW","KWD","KYD","KZT","LAK","LBP","LKR","LRD","LSL","LYD","MAD","MDL","MGA","MKD","MNT","MOP","MUR","MVR","MWK","MXN","MYR","NAD","NGN","NIO","NOK","NPR","NZD","OMR","PAB","PEN","PGK","PHP","PKR","PLN","PYG","QAR","RON","RSD","RWF","SAR","SBD","SCR","SEK","SGD","SHP","SLE","SRD","SVC","SZL","THB","TJS","TMT","TND","TOP","TRY","TTD","TWD","TZS","UAH","UGX","USD","UYU","UZS","VND","VUV","WST","XAF","XCD","XOF","XPF","ZAR","ZMW","ZWL"],"type":"string","description":"Currency code in ISO 4217 format","examples":["AUD"]}},"required":["net","total","gross","base","booking","shipping","refunded","discount","gateway","dispute","currency"],"description":"Aggregated totals for the orders in this bucket, in the bucket's native currency."}},"required":["orders","price"],"description":"Completed Airwallex orders still waiting on settlement ingestion."}},"required":["state"],"description":"Settlement status summary for the payout event. Airwallex payouts expose settled vs awaiting-settlement buckets."}},"required":["payout","rows","settlementSummary"]}}}}}}},"/payouts/stats":{"post":{"operationId":"payout.stats","summary":"Get payout statistics","tags":["Payouts"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"teamId":{"type":"string","description":"Filter stats by team ID"},"startDate":{"type":"string","description":"Start date for stats period (YYYY-MM-DD)"},"endDate":{"type":"string","description":"End date for stats period (YYYY-MM-DD)"}},"additionalProperties":false}}}},"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"object","propertyNames":{"type":"string"},"additionalProperties":{"type":"object","propertyNames":{"type":"string"},"additionalProperties":{"type":"object","properties":{"net":{"type":"number"},"total":{"type":"number"},"gross":{"type":"number"},"base":{"type":"number"},"booking":{"type":"number"},"shipping":{"type":"number"},"refunded":{"type":"number"},"discount":{"type":"number"},"gateway":{"type":"number"},"dispute":{"type":"number"},"deductions":{"type":"number"}},"required":["net","total","gross","base","booking","shipping","refunded","discount","gateway","dispute","deductions"]}},"description":"Payout statistics grouped by period (current/previous) and currency","examples":[{"current":{"USD":{"net":100000,"total":120000,"gross":115000,"base":110000,"booking":5000,"shipping":0,"refunded":0,"discount":5000,"gateway":3000,"dispute":0,"deductions":2000}},"previous":{"USD":{"net":80000,"total":95000,"gross":90000,"base":85000,"booking":5000,"shipping":0,"refunded":0,"discount":5000,"gateway":2500,"dispute":0,"deductions":1500}}}]}}}}}}},"/payouts/{payoutId}/breakdown":{"get":{"operationId":"payout.breakdown","summary":"Get payout breakdown","tags":["Payouts"],"parameters":[{"name":"payoutId","in":"path","required":true,"schema":{"type":"string","description":"Unique identifier of the payout for which to retrieve the detailed breakdown of orders and financial calculations.","examples":["pyt_01jps5cgsfv2wre6hd0rc4w4t8"]}}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"object","properties":{"total":{"type":"object","properties":{"orders":{"type":"number","description":"Total number of orders included in this payout breakdown.","examples":[150]},"price":{"type":"object","properties":{"net":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991,"description":"Total amount to pay to promoter in cents.\nCalculated as: total + booking + refunded + dispute","examples":[500]},"total":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991,"description":"Total amount the customer should pay in cents.\nCalculated as: gross + discount","examples":[1400]},"gross":{"type":"integer","minimum":0,"maximum":9007199254740991,"description":"Total amount before refunds and discounts in cents.\nCalculated as: base + booking + shipping","examples":[2200]},"base":{"type":"integer","minimum":0,"maximum":9007199254740991,"description":"Total ticket price in cents","examples":[1000]},"booking":{"type":"integer","minimum":0,"maximum":9007199254740991,"description":"Total booking fees in cents (non-refundable)","examples":[400]},"shipping":{"type":"integer","minimum":0,"maximum":9007199254740991,"description":"Total shipping amount in cents","examples":[0]},"sms":{"type":"integer","minimum":0,"maximum":9007199254740991,"default":0,"description":"SMS delivery fee in cents (customer-facing price in event currency)","examples":[200]},"refunded":{"type":"integer","minimum":-9007199254740991,"maximum":0,"description":"Total amount refunded in cents (negative value)","examples":[-700]},"discount":{"type":"integer","minimum":-9007199254740991,"maximum":0,"description":"Total amount discounted in cents (negative value)","examples":[-1000]},"gateway":{"type":"integer","minimum":-9007199254740991,"maximum":0,"description":"Total absorbed payment gateway fees in cents (negative value)","examples":[0]},"dispute":{"type":"integer","minimum":-9007199254740991,"maximum":0,"description":"Total non-absorbed payment gateway fees in cents (negative value)","examples":[0]},"currency":{"enum":["AED","ALL","AMD","ANG","AOA","ARS","AUD","AWG","AZN","BAM","BBD","BDT","BGN","BHD","BIF","BMD","BND","BOB","BRL","BSD","BTN","BWP","BZD","CAD","CHF","CLP","CNY","COP","CRC","CVE","CZK","DJF","DKK","DOP","DZD","EGP","ERN","ETB","EUR","FJD","FKP","GBP","GEL","GHS","GIP","GMD","GNF","GTQ","GYD","HKD","HNL","HUF","IDR","ILS","INR","ISK","JMD","JOD","JPY","KES","KGS","KHR","KMF","KRW","KWD","KYD","KZT","LAK","LBP","LKR","LRD","LSL","LYD","MAD","MDL","MGA","MKD","MNT","MOP","MUR","MVR","MWK","MXN","MYR","NAD","NGN","NIO","NOK","NPR","NZD","OMR","PAB","PEN","PGK","PHP","PKR","PLN","PYG","QAR","RON","RSD","RWF","SAR","SBD","SCR","SEK","SGD","SHP","SLE","SRD","SVC","SZL","THB","TJS","TMT","TND","TOP","TRY","TTD","TWD","TZS","UAH","UGX","USD","UYU","UZS","VND","VUV","WST","XAF","XCD","XOF","XPF","ZAR","ZMW","ZWL"],"type":"string","description":"Currency code in ISO 4217 format","examples":["AUD"]}},"required":["net","total","gross","base","booking","shipping","refunded","discount","gateway","dispute","currency"],"description":"Aggregated price information for all orders included in this payout, showing total revenue, fees, and deductions."},"split":{"type":"object","properties":{"tenant":{"type":"number","description":"Amount allocated to the tenant (platform) in cents. This represents the platform's share of the revenue.","examples":[50000]},"venue":{"type":"number","description":"Amount allocated to the venue in cents. This represents the venue's share of the revenue from events held at their location.","examples":[25000]},"team":{"type":"number","description":"Amount allocated to the team in cents. This represents the team's share of the revenue after fees and other deductions.","examples":[20000]},"sessions":{"type":"number","description":"Amount allocated to Sessions platform commission in cents. This represents the platform's service fees.","examples":[3000]},"tickets":{"type":"number","description":"Amount allocated to ticketing fees in cents. This represents fees charged for ticket processing and management.","examples":[2000]}},"required":["tenant","venue","team","sessions","tickets"],"description":"How the total payout amount is split between different beneficiaries (tenant, venue, promoter, etc.) in cents."},"structure":{"type":"string","description":"Fee structure identifier that was used to calculate the payout split and allocations.","examples":["DEFAULT"]}},"required":["orders","price","split","structure"],"description":"Summary totals for all orders included in this payout breakdown, including aggregated financial calculations."},"orders":{"type":"array","items":{"type":"object","properties":{"order":{"type":"object","properties":{"id":{"type":"string","pattern":"^ord_[0-9a-z]{26}$","description":"A unique identifier for this order.","examples":["ord_01jps5cgsfgve5b5g2666kyryh"],"readOnly":true},"createdAt":{"type":"string","format":"date-time","readOnly":true,"description":"Timestamp in ISO 8601 format when this order was created.","examples":["2026-06-07T11:39:32.858Z"]},"updatedAt":{"type":"string","format":"date-time","readOnly":true,"description":"Timestamp in ISO 8601 format when this order was last updated.","examples":["2026-06-07T11:39:32.858Z"]},"status":{"enum":["PENDING","PROCESSING","SUCCESSFUL","DISPUTED","ABANDONED"],"type":"string","description":"Current payment lifecycle status. PENDING: awaiting payment. PROCESSING: payment in progress. SUCCESSFUL: payment confirmed. DISPUTED: chargeback filed. ABANDONED: expired or cancelled.","examples":["PENDING"]},"payment":{"type":"object","properties":{"method":{"enum":["FREE","AIRWALLEX","STRIPE"],"type":"string","description":"Payment gateway used to process this order: FREE for no-cost orders, AIRWALLEX or STRIPE for paid orders","examples":["FREE"]},"source":{"enum":["ACH_DIRECT_DEBIT","ACSS_DEBIT","AFFIRM","AFTERPAY","ALFAMART","ALIPAY","ALIPAYCN","ALIPAYHK","ALMA","AMAZON_PAY","APPLEPAY","ATOME","BACS_DIRECT_DEBIT","BANCONTACT","BANK_TRANSFER","BECS_DIRECT_DEBIT","BILLIE","BITPAY","BLIK","BOLETO","BOOST","CARD","CARD_PRESENT","CASHAPP","CRYPTO","CUSTOM","CUSTOMER_BALANCE","DANA","DOKU_EWALLET","DRAGONPAY","DUIT_NOW","EFT_DIRECT_DEBIT","EPS","ESUN","FAMILY_MART","FPX","FPS","GCASH","GIROPAY","GOOGLEPAY","GO_PAY","GRABPAY","HI_LIFE","IDEAL","INDOMARET","INTERAC_PRESENT","JENIUS_PAY","KAKAOPAY","KLARNA","KONBINI","KOREAN_LOCAL_CARD","LINK","LINKAJA","MAXIMA","MB_WAY","MOBILEPAY","MULTIBANCO","MYBANK","NARVESEN","NAVER_PAY","NZ_BANK_ACCOUNT","ONLINE_BANKING","OVO","OXXO","P24","PAYBYBANKAPP","PAYCO","PAYEASY","PAYPAL","PAYPAY","PAYSAFECASH","PAYSAFECARD","PAYSERA","PAY_NOW","PERLAS_TERMINALS","PIX","PROMPTPAY","RABBIT_LINE_PAY","REVOLUT_PAY","SAMSUNG_PAY","SATISPAY","SEPA_DIRECT_DEBIT","SEVEN_ELEVEN","SHOPEE_PAY","SKRILL","SOFORT","SWISH","TNG","TOSS_PAY","TRUEMONEY","TRUSTLY","TWINT","VERKKOPANKKI","WECHATPAY","ZIP"],"type":"string","description":"Payment method used by the customer such as ApplePay, GooglePay, or card-based payments","examples":["APPLEPAY","GOOGLEPAY","CARD"]},"brand":{"enum":["AMERICAN_EXPRESS","CHINA_UNION_PAY","DINERS_CLUB_INTERNATIONAL","DISCOVER","JCB","MAESTRO","MASTERCARD","UNION_PAY","VISA"],"type":"string","description":"Card brand when source is CARD (Visa, Mastercard, American Express, etc.)","examples":["VISA","MASTERCARD","AMERICAN_EXPRESS"]},"last4":{"type":"string","description":"Last 4 digits of the card number when source is CARD","examples":["4242"]},"stripeId":{"type":"string","description":"Stripe payment intent identifier when using Stripe gateway","examples":["pi_1234567890abcdef"]},"stripeClientSecret":{"type":"string","description":"Stripe PaymentIntent client secret associated with the order, used to complete the payment flow","examples":["pi_1234567890abcdef_secret_xyz"]},"stripeAccountId":{"type":"string","description":"Connected Stripe account ID for direct charges. When present, payment is processed directly on the connected account rather than the platform account.","examples":["acct_1234567890abcdef"]},"airwallexId":{"type":"string","description":"Airwallex payment intent identifier when using Airwallex gateway","examples":["int_hkdmr7v9rg1j8donpkmv96"]},"airwallexClientSecret":{"type":"string","description":"Airwallex client secret used to authenticate requests for payment initialization","examples":["eyJhbGciOiJIUzI1NiJ9.eyJpYXQiOjE3MDAwMDAwMDAsImV4cCI6MTcwMDAwMzYwMCwiaW50ZW50X2lkIjoiaW50X2hrZG1yN3Y5cmcxajhkb25wa212OTYifQ.K8vLx2nPzQHdR5mT1wYcBfJkLmNpS3xG7aE9dH4qZvM"]},"airwallexCustomerId":{"type":"string","description":"Airwallex customer ID attached to the PaymentIntent for saved cards functionality","examples":["cus_hkdmrhkh8he4j3kvela"]},"airwallexCustomerClientSecret":{"type":"string","description":"Airwallex customer client secret for accessing saved payment methods in the Drop-in Element","examples":["eyJhbGciOiJIUzI1NiJ9.eyJpYXQiOjE3MDAwMDAwMDAsImV4cCI6MTcwMDAwMzYwMCwiY3VzdG9tZXJfaWQiOiJjdXNfaGtkbXJoa2g4aGU0ajNrdmVsYSJ9.abc123"]}},"required":["method"],"description":"Payment gateway details including method, card brand, and transaction identifiers. Absent for free orders."},"items":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string","description":"Unique identifier for this order item","examples":["itm_01jps5cgsfwyxj0516571eaf17"]},"kind":{"enum":["ADMISSION","ADDON"],"type":"string","description":"Type of item: ADMISSION for tickets, ADDON for additional products or services","examples":["ADMISSION"]},"quantity":{"type":"integer","minimum":1,"maximum":9007199254740991,"description":"Number of items purchased (minimum 1)","examples":[2]},"admissionId":{"type":"string","description":"Unique identifier of the admission ticket type, required for ADMISSION items","examples":["adm_01jps5cgsee0xvapbk92e8eb4g"]},"sectionId":{"type":"string","description":"Unique identifier of the venue section for this admission","examples":["sct_01jps5cgse0g3qj16kpq8t221r"]},"admission":{"$ref":"#/components/schemas/Admission","description":"Complete admission details captured at time of purchase. This is a snapshot that preserves the exact ticket type information as it was when the order was placed","examples":[{"id":"adm_01jps5cgsee0xvapbk92e8eb4g","createdAt":"2026-06-07T11:39:32.857Z","updatedAt":"2026-06-07T11:39:32.857Z","sectionId":"sct_01jps5cgse0g3qj16kpq8t221r","teamId":"tem_01jqpjksnsen9vprw95et60t2m","promoterId":"pmt_01jqpjksnsen9vprw95et60t2m","eventId":"evt_01jps5cgsenjrazw6wswmyspa3","eventSlug":"test-event","name":"Final Release","subtitle":"Entry before 10pm","description":"Early bird pricing with priority entry. Must present valid ID at gate.","capacity":100000,"limit":-1,"available":70000,"sold":20000,"reserved":10000,"order":0,"entryStartsAt":"2026-06-08T11:39:32","entryEndsAt":"2026-06-09T11:39:32","saleStartsAt":"2026-06-07T11:39:32","saleEndsAt":"2026-06-09T11:39:32","saleEndsBehavior":"SALE_ENDED","price":{"base":1000,"booking":200,"currency":"AUD"},"visibility":"ALWAYS","tenantId":"tnt_01jqpj2t2kfvmstt6f6tzkbaf2","deleted":false,"orderPadded":"0000000000"}]},"section":{"$ref":"#/components/schemas/Section","description":"Complete section details captured at time of purchase. This is a snapshot that preserves the exact venue area or category information as it was when the order was placed","examples":[{"id":"sct_01jps5cgse0g3qj16kpq8t221r","createdAt":"2026-06-07T11:39:32.857Z","updatedAt":"2026-06-07T11:39:32.857Z","teamId":"tem_01jqpjksnsen9vprw95et60t2m","promoterId":"pmt_01jqpjksnsen9vprw95et60t2m","eventId":"evt_01jps5cgsenjrazw6wswmyspa3","eventSlug":"test-event","name":"General Admission","capacity":1000,"limit":-1,"available":700,"sold":200,"reserved":100,"order":0,"visibility":"ALWAYS","location":{"id":"loc_01hk153x00eh99pagyydz03sbz","createdAt":"2026-06-07T11:39:32.857Z","updatedAt":"2026-06-07T11:39:32.857Z","googlePlaceId":"ChIJ6zWCPUyxEmsRmc6BPrNaP4s","name":"Watson's EQ","address":"The, Entertainment Quarter, 1 Bent St, Moore Park NSW 2021, Australia","city":"Moore Park","state":"New South Wales","postcode":"2021","country":"Australia","latitude":-33.8944593,"longitude":151.2252255,"timeZone":"Australia/Sydney","types":["establishment","point_of_interest","restaurant","bar"],"image":{"src":"https://assets.session.services/locations/watsons-eq.jpg","alt":"Watson's EQ","width":1200,"height":800}},"tenantId":"tnt_01jqpj2t2kfvmstt6f6tzkbaf2","deleted":false,"orderPadded":"0000000000"}]},"price":{"type":"object","properties":{"net":{"type":"integer","minimum":0,"maximum":9007199254740991,"description":"Total amount to pay to promoter in cents.\nCalculated as: total - booking - refunded","examples":[1200]},"total":{"type":"integer","minimum":0,"maximum":9007199254740991,"description":"Total amount the customer should pay in cents.\nCalculated as: gross - discount","examples":[1200]},"gross":{"type":"integer","minimum":0,"maximum":9007199254740991,"description":"Total amount before refunds and discounts in cents.\nCalculated as: base + booking","examples":[1200]},"base":{"type":"integer","minimum":0,"maximum":9007199254740991,"description":"Total ticket price in cents","examples":[1000]},"booking":{"type":"integer","minimum":0,"maximum":9007199254740991,"description":"Total booking fees in cents (non-refundable)","examples":[200]},"refunded":{"type":"integer","minimum":-9007199254740991,"maximum":0,"description":"Total amount refunded in cents","examples":[0]},"discount":{"type":"integer","minimum":-9007199254740991,"maximum":0,"description":"Total amount discounted in cents","examples":[0]},"currency":{"enum":["AED","ALL","AMD","ANG","AOA","ARS","AUD","AWG","AZN","BAM","BBD","BDT","BGN","BHD","BIF","BMD","BND","BOB","BRL","BSD","BTN","BWP","BZD","CAD","CHF","CLP","CNY","COP","CRC","CVE","CZK","DJF","DKK","DOP","DZD","EGP","ERN","ETB","EUR","FJD","FKP","GBP","GEL","GHS","GIP","GMD","GNF","GTQ","GYD","HKD","HNL","HUF","IDR","ILS","INR","ISK","JMD","JOD","JPY","KES","KGS","KHR","KMF","KRW","KWD","KYD","KZT","LAK","LBP","LKR","LRD","LSL","LYD","MAD","MDL","MGA","MKD","MNT","MOP","MUR","MVR","MWK","MXN","MYR","NAD","NGN","NIO","NOK","NPR","NZD","OMR","PAB","PEN","PGK","PHP","PKR","PLN","PYG","QAR","RON","RSD","RWF","SAR","SBD","SCR","SEK","SGD","SHP","SLE","SRD","SVC","SZL","THB","TJS","TMT","TND","TOP","TRY","TTD","TWD","TZS","UAH","UGX","USD","UYU","UZS","VND","VUV","WST","XAF","XCD","XOF","XPF","ZAR","ZMW","ZWL"],"type":"string","description":"Currency code in ISO 4217 format.","examples":["AUD"]}},"required":["net","total","gross","base","booking","refunded","discount","currency"],"description":"Pricing breakdown for this order item including all fees and discounts"}},"required":["id","kind","quantity","price"]},"description":"Line items in this order, each with a ticket type, quantity, and price breakdown."},"fees":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string","description":"Unique identifier for this order fee","examples":["fee_01jps5cgsgamykd6kh2t738qkh"]},"createdAt":{"type":"string","format":"date-time","readOnly":true,"description":"Timestamp in ISO 8601 format when this fee was created","examples":["2026-06-07T11:39:32.858Z"]},"reason":{"type":"string","description":"Description explaining why this fee was applied to the order","examples":["Gateway Fee"]},"amount":{"type":"number","description":"Fee amount in cents (positive value indicates charge to customer, negative value indicates credit or discount)","examples":[-30]},"currency":{"enum":["AED","ALL","AMD","ANG","AOA","ARS","AUD","AWG","AZN","BAM","BBD","BDT","BGN","BHD","BIF","BMD","BND","BOB","BRL","BSD","BTN","BWP","BZD","CAD","CHF","CLP","CNY","COP","CRC","CVE","CZK","DJF","DKK","DOP","DZD","EGP","ERN","ETB","EUR","FJD","FKP","GBP","GEL","GHS","GIP","GMD","GNF","GTQ","GYD","HKD","HNL","HUF","IDR","ILS","INR","ISK","JMD","JOD","JPY","KES","KGS","KHR","KMF","KRW","KWD","KYD","KZT","LAK","LBP","LKR","LRD","LSL","LYD","MAD","MDL","MGA","MKD","MNT","MOP","MUR","MVR","MWK","MXN","MYR","NAD","NGN","NIO","NOK","NPR","NZD","OMR","PAB","PEN","PGK","PHP","PKR","PLN","PYG","QAR","RON","RSD","RWF","SAR","SBD","SCR","SEK","SGD","SHP","SLE","SRD","SVC","SZL","THB","TJS","TMT","TND","TOP","TRY","TTD","TWD","TZS","UAH","UGX","USD","UYU","UZS","VND","VUV","WST","XAF","XCD","XOF","XPF","ZAR","ZMW","ZWL"],"type":"string","description":"Currency code in ISO 4217 format","examples":["AUD"]},"requestId":{"type":"string","description":"External payment processor request identifier for tracking this fee","examples":["att_sgpdz4v2ph1axmdmdx8_m8w6qv"]},"kind":{"enum":["GATEWAY","SHIPPING","SMS_DELIVERY"],"type":"string","description":"Type of fee for categorization and reporting","examples":["GATEWAY"]}},"required":["id","createdAt","reason","amount","currency","requestId"]},"description":"Gateway fees recorded against this order from settlement processing (e.g. payment processing fees, dispute fees)."},"price":{"type":"object","properties":{"net":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991,"description":"Total amount to pay to promoter in cents.\nCalculated as: total + booking + refunded + dispute","examples":[500]},"total":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991,"description":"Total amount the customer should pay in cents.\nCalculated as: gross + discount","examples":[1400]},"gross":{"type":"integer","minimum":0,"maximum":9007199254740991,"description":"Total amount before refunds and discounts in cents.\nCalculated as: base + booking + shipping","examples":[2200]},"base":{"type":"integer","minimum":0,"maximum":9007199254740991,"description":"Total ticket price in cents","examples":[1000]},"booking":{"type":"integer","minimum":0,"maximum":9007199254740991,"description":"Total booking fees in cents (non-refundable)","examples":[400]},"shipping":{"type":"integer","minimum":0,"maximum":9007199254740991,"description":"Total shipping amount in cents","examples":[0]},"sms":{"type":"integer","minimum":0,"maximum":9007199254740991,"default":0,"description":"SMS delivery fee in cents (customer-facing price in event currency)","examples":[200]},"refunded":{"type":"integer","minimum":-9007199254740991,"maximum":0,"description":"Total amount refunded in cents (negative value)","examples":[-700]},"discount":{"type":"integer","minimum":-9007199254740991,"maximum":0,"description":"Total amount discounted in cents (negative value)","examples":[-1000]},"gateway":{"type":"integer","minimum":-9007199254740991,"maximum":0,"description":"Total absorbed payment gateway fees in cents (negative value)","examples":[0]},"dispute":{"type":"integer","minimum":-9007199254740991,"maximum":0,"description":"Total non-absorbed payment gateway fees in cents (negative value)","examples":[0]},"currency":{"enum":["AED","ALL","AMD","ANG","AOA","ARS","AUD","AWG","AZN","BAM","BBD","BDT","BGN","BHD","BIF","BMD","BND","BOB","BRL","BSD","BTN","BWP","BZD","CAD","CHF","CLP","CNY","COP","CRC","CVE","CZK","DJF","DKK","DOP","DZD","EGP","ERN","ETB","EUR","FJD","FKP","GBP","GEL","GHS","GIP","GMD","GNF","GTQ","GYD","HKD","HNL","HUF","IDR","ILS","INR","ISK","JMD","JOD","JPY","KES","KGS","KHR","KMF","KRW","KWD","KYD","KZT","LAK","LBP","LKR","LRD","LSL","LYD","MAD","MDL","MGA","MKD","MNT","MOP","MUR","MVR","MWK","MXN","MYR","NAD","NGN","NIO","NOK","NPR","NZD","OMR","PAB","PEN","PGK","PHP","PKR","PLN","PYG","QAR","RON","RSD","RWF","SAR","SBD","SCR","SEK","SGD","SHP","SLE","SRD","SVC","SZL","THB","TJS","TMT","TND","TOP","TRY","TTD","TWD","TZS","UAH","UGX","USD","UYU","UZS","VND","VUV","WST","XAF","XCD","XOF","XPF","ZAR","ZMW","ZWL"],"type":"string","description":"Currency code in ISO 4217 format","examples":["AUD"]}},"required":["net","total","gross","base","booking","shipping","refunded","discount","gateway","dispute","currency"],"description":"Price breakdown in the event currency. This reflects what the customer was charged."},"settlement":{"type":"object","properties":{"net":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991,"description":"Total amount to pay to promoter in cents.\nCalculated as: total + booking + refunded + dispute","examples":[500]},"total":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991,"description":"Total amount the customer should pay in cents.\nCalculated as: gross + discount","examples":[1400]},"gross":{"type":"integer","minimum":0,"maximum":9007199254740991,"description":"Total amount before refunds and discounts in cents.\nCalculated as: base + booking + shipping","examples":[2200]},"base":{"type":"integer","minimum":0,"maximum":9007199254740991,"description":"Total ticket price in cents","examples":[1000]},"booking":{"type":"integer","minimum":0,"maximum":9007199254740991,"description":"Total booking fees in cents (non-refundable)","examples":[400]},"shipping":{"type":"integer","minimum":0,"maximum":9007199254740991,"description":"Total shipping amount in cents","examples":[0]},"sms":{"type":"integer","minimum":0,"maximum":9007199254740991,"default":0,"description":"SMS delivery fee in cents (customer-facing price in event currency)","examples":[200]},"refunded":{"type":"integer","minimum":-9007199254740991,"maximum":0,"description":"Total amount refunded in cents (negative value)","examples":[-700]},"discount":{"type":"integer","minimum":-9007199254740991,"maximum":0,"description":"Total amount discounted in cents (negative value)","examples":[-1000]},"gateway":{"type":"integer","minimum":-9007199254740991,"maximum":0,"description":"Total absorbed payment gateway fees in cents (negative value)","examples":[0]},"dispute":{"type":"integer","minimum":-9007199254740991,"maximum":0,"description":"Total non-absorbed payment gateway fees in cents (negative value)","examples":[0]},"currency":{"enum":["AED","ALL","AMD","ANG","AOA","ARS","AUD","AWG","AZN","BAM","BBD","BDT","BGN","BHD","BIF","BMD","BND","BOB","BRL","BSD","BTN","BWP","BZD","CAD","CHF","CLP","CNY","COP","CRC","CVE","CZK","DJF","DKK","DOP","DZD","EGP","ERN","ETB","EUR","FJD","FKP","GBP","GEL","GHS","GIP","GMD","GNF","GTQ","GYD","HKD","HNL","HUF","IDR","ILS","INR","ISK","JMD","JOD","JPY","KES","KGS","KHR","KMF","KRW","KWD","KYD","KZT","LAK","LBP","LKR","LRD","LSL","LYD","MAD","MDL","MGA","MKD","MNT","MOP","MUR","MVR","MWK","MXN","MYR","NAD","NGN","NIO","NOK","NPR","NZD","OMR","PAB","PEN","PGK","PHP","PKR","PLN","PYG","QAR","RON","RSD","RWF","SAR","SBD","SCR","SEK","SGD","SHP","SLE","SRD","SVC","SZL","THB","TJS","TMT","TND","TOP","TRY","TTD","TWD","TZS","UAH","UGX","USD","UYU","UZS","VND","VUV","WST","XAF","XCD","XOF","XPF","ZAR","ZMW","ZWL"],"type":"string","description":"Currency code in ISO 4217 format","examples":["AUD"]},"exchangeRate":{"type":"number","description":"Conversion rate applied from the original payment currency to the settlement currency. 1.0 when both currencies are the same","examples":[1.4]}},"required":["net","total","gross","base","booking","shipping","refunded","discount","gateway","dispute","currency","exchangeRate"],"description":"Price breakdown in the payout currency with the exchange rate applied. When the event currency differs from the settlement currency, all amounts are converted. For same-currency orders the values match the order price with an exchange rate of 1.0."},"couponCode":{"type":"object","properties":{"id":{"type":"string","description":"Unique identifier of the coupon code used in the order","examples":["cod_01jps5cgsfzftw7hxcvr2wftk2"]},"name":{"type":"string","description":"The coupon code string that was entered by the customer","examples":["TEST50"]},"couponId":{"type":"string","description":"Unique identifier of the parent coupon configuration","examples":["cpn_01jps5cgsfzs1ksqaet5hba8ac"]}},"required":["id","name","couponId"],"description":"Coupon code applied to this order for discount calculation."},"customer":{"type":"object","properties":{"id":{"type":"string","description":"Unique identifier of the customer who placed the order","examples":["cus_01jps5cgsf4pn2a32eamppnap1"]},"firstName":{"type":"string","description":"First name of the customer","examples":["Test"]},"lastName":{"type":"string","description":"Last name of the customer","examples":["User"]},"email":{"type":"string","format":"email","description":"Email address of the customer","examples":["test@session.services"]},"phone":{"type":"string","description":"Customer phone number in E.164 format for SMS delivery","examples":["+61411111111"]}},"required":["id","firstName","lastName","email"],"description":"Customer who placed this order. Absent for guest checkouts before customer details are captured."},"marketingConsent":{"type":"object","properties":{"promoter":{"type":"boolean"},"tenant":{"type":"boolean"}},"required":["promoter","tenant"],"description":"Marketing opt-in choices captured during checkout."},"timeline":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string","description":"Unique identifier of the timeline entry","examples":["tln_01jps5cgsfgve5b5g2666kyryh"]},"createdAt":{"type":"string","format":"date-time","readOnly":true,"description":"Timestamp in ISO 8601 format when this timeline entry was created","examples":["2026-06-07T11:39:32.858Z"]},"status":{"type":"string","description":"Order status associated with this timeline entry, when applicable.","examples":["SUCCESSFUL"]},"kind":{"enum":["ORDER_STATUS_UPDATED","ORDER_EXPIRED","ORDER_COMPLETED","PAYMENT_INITIATED","PAYMENT_PROCESSING","PAYMENT_FAILED","PAYMENT_SUCCEEDED","REFUND_INITIATED","REFUND_PROCESSING","REFUND_SUCCEEDED","REFUND_SETTLED","REFUND_FAILED","CHARGEBACK_INITIATED","CHARGEBACK_EVIDENCE_SUBMITTED","CHARGEBACK_WON","CHARGEBACK_LOST","CHARGEBACK_FUNDS_WITHDRAWN","TICKETS_GENERATED","TICKET_ADDED","TICKETS_SCANNED","TICKET_EDITED","TICKET_STATUS_CHANGED","EMAIL_SENT","EMAIL_DELIVERED","EMAIL_OPENED","EMAIL_BOUNCED","EMAIL_COMPLAINED","EMAIL_FAILED","SMS_SENT","SMS_DELIVERED","SMS_FAILED","NOTE"],"type":"string","description":"Type of timeline event (ORDER_COMPLETED, PAYMENT_SUCCEEDED, REFUND_INITIATED, etc.)","examples":["ORDER_COMPLETED"]},"editable":{"type":"boolean","description":"Whether this timeline entry can be edited by users","examples":[false]},"pinned":{"type":"boolean","description":"Whether this timeline entry is pinned to the top of the timeline","examples":[false]},"description":{"type":"string","description":"Human-readable description of what happened in this timeline event","examples":["Order was created successfully"]},"author":{"type":"string","description":"Name of the user or system that created this timeline entry","examples":["System"]},"userId":{"type":"string","description":"Identifier of the user who created this timeline entry, when available.","examples":["usr_01jps5cgsd4tzjghtnt45qnhn0"]},"externalId":{"type":"string","description":"External idempotency key for deduplication (e.g., SES messageId + eventType)","examples":["ses:01234567-89ab-cdef-0123-456789abcdef:Delivery"]}},"required":["id","createdAt","kind","editable","pinned","description","author"]},"description":"Chronological audit trail of events for this order (payments, refunds, emails, scans)."},"refunds":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string","description":"Unique identifier for this refund","examples":["rfd_01jps5cgsfgve5b5g2666kyryh"]},"request":{"type":"object","properties":{"idempotencyKey":{"type":"string","description":"Client-provided key to prevent duplicate refund processing","examples":["refund_12345_customer_request"]}},"description":"Request metadata supplied by Sessions or API callers"},"status":{"enum":["PENDING","PROCESSING","SUCCEEDED","FAILED"],"type":"string","description":"Current processing status. PENDING: awaiting gateway confirmation or async processing (e.g., bank transfers). PROCESSING: gateway confirmed, ticket cancellation in progress. SUCCEEDED/FAILED: terminal states.","examples":["PENDING","SUCCEEDED"]},"acceptedAt":{"type":"string","format":"date-time","description":"Timestamp when the payment gateway accepted the refund","examples":["2026-06-07T11:39:32.858Z"]},"failedAt":{"type":"string","format":"date-time","description":"Timestamp when the refund failed","examples":["2026-06-07T11:39:32.858Z"]},"failure":{"type":"object","properties":{"reason":{"type":"string","description":"Gateway or system failure reason","examples":["Insufficient funds for refund"]},"message":{"type":"string","description":"User-facing failure message when available","examples":["The refund could not be processed."]}},"required":["reason"],"description":"Failure details when the refund failed"},"price":{"type":"object","properties":{"currency":{"type":"string","description":"Currency used for all refund amounts","examples":["AUD"]},"total":{"type":"integer","minimum":1,"maximum":9007199254740991,"description":"Total refund amount in cents, including ticket, shipping, and fee portions.","examples":[1200]},"items":{"type":"integer","minimum":0,"maximum":9007199254740991,"description":"Ticket item portion of the refund in cents","examples":[1200]},"shipping":{"type":"integer","minimum":0,"maximum":9007199254740991,"description":"Shipping portion of the refund in cents","examples":[0]},"fees":{"type":"integer","minimum":0,"maximum":9007199254740991,"description":"Fee portion of the refund in cents","examples":[0]}},"required":["currency","total","items","shipping","fees"],"description":"Refund amount breakdown"},"reason":{"enum":["CUSTOMER_REQUEST","DUPLICATE","EVENT_CANCELLED","OTHER"],"type":"string","description":"Categorized reason for the refund used for analytics","examples":["CUSTOMER_REQUEST","DUPLICATE","EVENT_CANCELLED"]},"note":{"type":"string","description":"Free-form notes explaining the refund","examples":["Customer requested refund due to schedule conflict"]},"items":{"type":"array","items":{"type":"object","properties":{"orderItemId":{"type":"string","description":"Identifier of the order item being refunded","examples":["itm_01jps5cgsfwyxj0516571eaf17"]},"quantity":{"type":"integer","minimum":1,"maximum":9007199254740991,"description":"Number of units refunded for this item","examples":[2]},"amount":{"type":"integer","minimum":0,"maximum":9007199254740991,"description":"Refund amount for this item in cents (base price only, excludes booking fee)","examples":[1200]},"ticketIds":{"type":"array","items":{"type":"string"},"description":"Specific ticket identifiers that were refunded (selected via FIFO)","examples":[["tkt_01jps5cgsg0s32w2pr73vbccde"]]}},"required":["orderItemId","quantity","amount","ticketIds"]},"description":"Line items included in this refund with quantities and amounts"},"tickets":{"type":"object","properties":{"cancelRequested":{"type":"boolean","description":"Whether ticket cancellation was requested for the refund","examples":[true]},"cancelled":{"type":"boolean","description":"Whether tickets were cancelled as part of this refund","examples":[true]},"cancelledCount":{"type":"integer","minimum":0,"maximum":9007199254740991,"description":"Number of tickets that were cancelled","examples":[2]}},"required":["cancelRequested","cancelled","cancelledCount"],"description":"Ticket cancellation state for the refund"},"gateway":{"type":"object","properties":{"provider":{"enum":["FREE","AIRWALLEX","STRIPE"],"type":"string","description":"Payment gateway used to process the refund","examples":["STRIPE","AIRWALLEX"]},"refundId":{"type":"string","description":"Refund identifier from the payment gateway","examples":["re_1234567890abcdef"]},"idempotencyKey":{"type":"string","description":"Idempotency key sent to the payment gateway","examples":["rfd_01jps5cgsfgve5b5g2666kyryh"]}},"required":["provider"],"description":"Gateway refund identifiers"},"actor":{"type":"object","properties":{"type":{"enum":["USER","GATEWAY","SYSTEM"],"type":"string","description":"Who initiated the refund","examples":["USER","GATEWAY"]},"userId":{"type":"string","description":"Identifier of the user who initiated the refund","examples":["usr_01jps5cgsd4tzjghtnt45qnhn0"]}},"required":["type"],"description":"Refund initiator"},"metadata":{"type":"object","propertyNames":{"type":"string"},"additionalProperties":{"type":"string"},"description":"Custom key-value pairs passed through to the payment gateway","examples":[{"supportTicket":"#12345"}]},"notification":{"type":"object","properties":{"requested":{"type":"boolean","description":"Whether a customer refund confirmation email was requested.","examples":[true]},"sentAt":{"type":"string","format":"date-time","description":"Timestamp when the refund confirmation email was sent.","examples":["2026-06-07T11:39:32.858Z"]}},"required":["requested"],"description":"Refund confirmation notification state"},"createdAt":{"type":"string","format":"date-time","description":"Timestamp when the refund was created","examples":["2026-06-07T11:39:32.858Z"]}},"required":["id","status","price","reason","items","tickets","gateway","actor","notification","createdAt"]},"default":[],"description":"Refunds processed for this order including pending, succeeded, and failed attempts."},"offers":{"type":"array","items":{"type":"object","properties":{"kind":{"enum":["SMS_DELIVERY"],"type":"string","description":"Discriminator identifying the type of offer","examples":["SMS_DELIVERY"]},"label":{"type":"string","description":"Human-readable label for the offer","examples":["SMS ticket delivery"]},"price":{"type":"object","properties":{"amount":{"type":"integer","minimum":0,"maximum":9007199254740991,"description":"Offer price in the smallest currency unit (e.g. cents)","examples":[200]},"currency":{"enum":["AED","ALL","AMD","ANG","AOA","ARS","AUD","AWG","AZN","BAM","BBD","BDT","BGN","BHD","BIF","BMD","BND","BOB","BRL","BSD","BTN","BWP","BZD","CAD","CHF","CLP","CNY","COP","CRC","CVE","CZK","DJF","DKK","DOP","DZD","EGP","ERN","ETB","EUR","FJD","FKP","GBP","GEL","GHS","GIP","GMD","GNF","GTQ","GYD","HKD","HNL","HUF","IDR","ILS","INR","ISK","JMD","JOD","JPY","KES","KGS","KHR","KMF","KRW","KWD","KYD","KZT","LAK","LBP","LKR","LRD","LSL","LYD","MAD","MDL","MGA","MKD","MNT","MOP","MUR","MVR","MWK","MXN","MYR","NAD","NGN","NIO","NOK","NPR","NZD","OMR","PAB","PEN","PGK","PHP","PKR","PLN","PYG","QAR","RON","RSD","RWF","SAR","SBD","SCR","SEK","SGD","SHP","SLE","SRD","SVC","SZL","THB","TJS","TMT","TND","TOP","TRY","TTD","TWD","TZS","UAH","UGX","USD","UYU","UZS","VND","VUV","WST","XAF","XCD","XOF","XPF","ZAR","ZMW","ZWL"],"type":"string","description":"Three-letter ISO 4217 currency code","examples":["AUD"]}},"required":["amount","currency"],"description":"Pre-computed price for this offer"}},"required":["kind","label","price"]},"default":[],"description":"Pre-computed add-on offers available during checkout (e.g. SMS ticket delivery)."},"customerId":{"type":"string","pattern":"^cus_[0-9a-z]{26}$","description":"Identifier of the customer who placed this order.","examples":["cus_01jps5cgsf4pn2a32eamppnap1"]},"createdBy":{"type":"object","properties":{"id":{"type":"string","description":"Unique identifier of the customer who placed the order","examples":["cus_01jps5cgsf4pn2a32eamppnap1"]},"firstName":{"type":"string","description":"First name of the customer","examples":["Test"]},"lastName":{"type":"string","description":"Last name of the customer","examples":["User"]},"email":{"type":"string","format":"email","description":"Email address of the customer","examples":["test@session.services"]},"phone":{"type":"string","description":"Customer phone number in E.164 format for SMS delivery","examples":["+61411111111"]}},"required":["id","firstName","lastName","email"],"description":"Admin user who created this order on behalf of the customer."},"teamId":{"type":"string","pattern":"^tem_[0-9a-z]{26}$","description":"Team that owns this order."},"promoterId":{"type":"string","pattern":"^pmt_[0-9a-z]{26}$","description":"Promoter managing this order.","examples":["pmt_01jqpjksnsen9vprw95et60t2m"]},"event":{"type":"object","properties":{"id":{"type":"string","description":"Unique identifier of the event associated with the order","examples":["evt_01jps5cgsenjrazw6wswmyspa3"]},"name":{"type":"string","description":"Display name of the event","examples":["Test Event"]},"slug":{"type":"string","description":"URL-friendly slug of the event","examples":["test-event"]},"location":{"type":"string","description":"Name of the venue or location where the event takes place","examples":["Watson's EQ"]}},"required":["id","name","slug"],"description":"Snapshot of the event at time of purchase (name, slug, location)."},"payoutIds":{"type":"array","items":{"type":"string","pattern":"^pyt_[0-9a-z]{26}$","description":"Payout identifier.","examples":["pay_01HQXYZ"]},"description":"Payout identifiers for settlements that included this order."},"eventId":{"type":"string","pattern":"^evt_[0-9a-z]{26}$","description":"Identifier of the event this order belongs to.","examples":["evt_01jps5cgsenjrazw6wswmyspa3"]},"checkoutUrl":{"type":"string","readOnly":true,"description":"Derived checkout URL where the customer can complete payment for this order.","examples":["https://example.com/checkout/ord_1234567890"]},"returnUrl":{"type":"string","description":"URL to redirect to after successful payment completion.","examples":["https://example.com/event/success"]},"channel":{"type":"object","properties":{"name":{"type":"string","description":"Free-form channel identifier describing where the order originated.","examples":["tenant-web","team-web","api","partner"]},"referrer":{"type":"string","description":"Optional referrer URL captured at order creation for redirect routing and attribution.","examples":["https://sash.teams.mixmag.au/events/example-event"]},"utmSource":{"type":"string","description":"Optional UTM source captured from the originating URL.","examples":["instagram"]},"utmMedium":{"type":"string","description":"Optional UTM medium captured from the originating URL.","examples":["social"]},"utmCampaign":{"type":"string","description":"Optional UTM campaign captured from the originating URL.","examples":["summer-launch"]},"deviceType":{"enum":["MOBILE","TABLET","DESKTOP"],"type":"string","description":"Optional analytics device classification captured at order creation.","examples":["MOBILE"]},"browser":{"type":"string","description":"Optional analytics browser classification captured at order creation.","examples":["Chrome"]},"country":{"type":"string","description":"Optional viewer country captured at order creation for analytics attribution.","examples":["Australia"]},"region":{"type":"string","description":"Optional viewer region captured at order creation for analytics attribution.","examples":["Australia - New South Wales"]},"sessionId":{"type":"string","description":"Session ID captured at order creation for client/server analytics linking.","examples":["ses_01HX..."]},"anonymousId":{"type":"string","description":"Browser anonymous ID captured at order creation for attribution linking.","examples":["aid_01HX..."]}},"required":["name"],"description":"Channel metadata captured at order creation to identify origin and redirect context."},"reservedAt":{"type":"string","format":"date-time","description":"Timestamp when inventory was reserved for this order. Used for checkout countdown timer.","examples":["2026-06-07T11:39:33.049Z"]}},"required":["id","createdAt","updatedAt","status","items","fees","price","teamId","promoterId","event","payoutIds","eventId"],"description":"Complete order information including customer details, items, and payment status."},"price":{"type":"object","properties":{"net":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991,"description":"Total amount to pay to promoter in cents.\nCalculated as: total + booking + refunded + dispute","examples":[500]},"total":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991,"description":"Total amount the customer should pay in cents.\nCalculated as: gross + discount","examples":[1400]},"gross":{"type":"integer","minimum":0,"maximum":9007199254740991,"description":"Total amount before refunds and discounts in cents.\nCalculated as: base + booking + shipping","examples":[2200]},"base":{"type":"integer","minimum":0,"maximum":9007199254740991,"description":"Total ticket price in cents","examples":[1000]},"booking":{"type":"integer","minimum":0,"maximum":9007199254740991,"description":"Total booking fees in cents (non-refundable)","examples":[400]},"shipping":{"type":"integer","minimum":0,"maximum":9007199254740991,"description":"Total shipping amount in cents","examples":[0]},"sms":{"type":"integer","minimum":0,"maximum":9007199254740991,"default":0,"description":"SMS delivery fee in cents (customer-facing price in event currency)","examples":[200]},"refunded":{"type":"integer","minimum":-9007199254740991,"maximum":0,"description":"Total amount refunded in cents (negative value)","examples":[-700]},"discount":{"type":"integer","minimum":-9007199254740991,"maximum":0,"description":"Total amount discounted in cents (negative value)","examples":[-1000]},"gateway":{"type":"integer","minimum":-9007199254740991,"maximum":0,"description":"Total absorbed payment gateway fees in cents (negative value)","examples":[0]},"dispute":{"type":"integer","minimum":-9007199254740991,"maximum":0,"description":"Total non-absorbed payment gateway fees in cents (negative value)","examples":[0]},"currency":{"enum":["AED","ALL","AMD","ANG","AOA","ARS","AUD","AWG","AZN","BAM","BBD","BDT","BGN","BHD","BIF","BMD","BND","BOB","BRL","BSD","BTN","BWP","BZD","CAD","CHF","CLP","CNY","COP","CRC","CVE","CZK","DJF","DKK","DOP","DZD","EGP","ERN","ETB","EUR","FJD","FKP","GBP","GEL","GHS","GIP","GMD","GNF","GTQ","GYD","HKD","HNL","HUF","IDR","ILS","INR","ISK","JMD","JOD","JPY","KES","KGS","KHR","KMF","KRW","KWD","KYD","KZT","LAK","LBP","LKR","LRD","LSL","LYD","MAD","MDL","MGA","MKD","MNT","MOP","MUR","MVR","MWK","MXN","MYR","NAD","NGN","NIO","NOK","NPR","NZD","OMR","PAB","PEN","PGK","PHP","PKR","PLN","PYG","QAR","RON","RSD","RWF","SAR","SBD","SCR","SEK","SGD","SHP","SLE","SRD","SVC","SZL","THB","TJS","TMT","TND","TOP","TRY","TTD","TWD","TZS","UAH","UGX","USD","UYU","UZS","VND","VUV","WST","XAF","XCD","XOF","XPF","ZAR","ZMW","ZWL"],"type":"string","description":"Currency code in ISO 4217 format","examples":["AUD"]}},"required":["net","total","gross","base","booking","shipping","refunded","discount","gateway","dispute","currency"],"description":"Settled price information for this specific order, showing final amounts after refunds and adjustments."},"split":{"type":"object","properties":{"tenant":{"type":"number","description":"Amount allocated to the tenant (platform) in cents. This represents the platform's share of the revenue.","examples":[50000]},"venue":{"type":"number","description":"Amount allocated to the venue in cents. This represents the venue's share of the revenue from events held at their location.","examples":[25000]},"team":{"type":"number","description":"Amount allocated to the team in cents. This represents the team's share of the revenue after fees and other deductions.","examples":[20000]},"sessions":{"type":"number","description":"Amount allocated to Sessions platform commission in cents. This represents the platform's service fees.","examples":[3000]},"tickets":{"type":"number","description":"Amount allocated to ticketing fees in cents. This represents fees charged for ticket processing and management.","examples":[2000]}},"required":["tenant","venue","team","sessions","tickets"],"description":"How this individual order's revenue is split between different beneficiaries in cents."},"structure":{"type":"string","description":"Fee structure identifier used to calculate the split for this order.","examples":["DEFAULT"]}},"required":["order","price","split","structure"]},"description":"Detailed breakdown of individual orders included in this payout, showing how each order contributes to the total."}},"required":["total","orders"]}}}}}}},"/payouts/{id}/notes":{"post":{"operationId":"payout.note.create","summary":"Add note to payout timeline (`payout.write` required)","description":"Add a user note to the payout timeline. Note will be marked as editable by the author.","tags":["Payouts"],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string","description":"Unique identifier of the payout to add a note to","examples":["pyt_01jps5cgsfv2wre6hd0rc4w4t8"]}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"note":{"type":"string","minLength":1,"maxLength":1000,"description":"Note text content (1-1000 characters)","examples":["Transfer confirmed via bank statement"]}},"required":["note"],"additionalProperties":false}}}},"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"object","properties":{"payout":{"$ref":"#/components/schemas/Payout"}},"required":["payout"]}}}}}}},"/payouts/{id}/notes/{noteId}":{"patch":{"operationId":"payout.note.update","summary":"Update timeline note (author only)","description":"Update a timeline note. Only the author can edit their own notes. System-generated entries cannot be edited.","tags":["Payouts"],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string","description":"Unique identifier of the payout","examples":["pyt_01jps5cgsfv2wre6hd0rc4w4t8"]}},{"name":"noteId","in":"path","required":true,"schema":{"type":"string","description":"Unique identifier of the timeline note to update","examples":["tl_1234567890_abc123"]}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"note":{"type":"string","minLength":1,"maxLength":1000,"description":"Updated note text content (1-1000 characters)","examples":["Updated: Transfer confirmed - reference #12345"]}},"required":["note"],"additionalProperties":false}}}},"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"object","properties":{"payout":{"$ref":"#/components/schemas/Payout"}},"required":["payout"]}}}}}},"delete":{"operationId":"payout.note.remove","summary":"Delete timeline note (author only)","description":"Delete a timeline note. Only the author can delete their own notes. System-generated entries cannot be deleted.","tags":["Payouts"],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string","description":"Unique identifier of the payout","examples":["pyt_01jps5cgsfv2wre6hd0rc4w4t8"]}},{"name":"noteId","in":"path","required":true,"schema":{"type":"string","description":"Unique identifier of the timeline note to delete","examples":["tl_1234567890_abc123"]}}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"object","properties":{"payout":{"$ref":"#/components/schemas/Payout"}},"required":["payout"]}}}}}}},"/teams/{key}/roles":{"get":{"operationId":"teams.roles.list","summary":"List team roles","description":"Returns all roles configured for a team.","tags":["Permissions"],"parameters":[{"name":"key","in":"path","required":true,"schema":{"type":"string","description":"Team identifier (ID or slug)"}}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"object","properties":{"roles":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string","pattern":"^prl_[0-9a-z]{26}$","description":"Permission role ID"},"teamId":{"type":"string","pattern":"^tem_[0-9a-z]{26}$","description":"Team that owns this role"},"name":{"type":"string","minLength":1,"description":"Role display name"},"description":{"type":"string","description":"Optional role description"},"permissions":{"type":"array","minItems":1,"items":{"type":"string","pattern":"^-?(?:\\*|(?:[a-z][a-z0-9-]*)(?:\\.[a-z][a-z0-9-]*)*(?:\\.\\*|\\.bypass|\\.[a-z]{3}_[0-9a-z]{26})?)$","description":"Permission node in minecraft-style format. Supports exact, scoped wildcard, resource target, bypass target, and deny prefix.","examples":["team.read","team.member.write","ticket.scan","ticket.scan.*","ticket.scan.evt_01h8c3jm9zs2v6h2k9p9r8f5a1","team.gateway.connect.bypass","team.*","*","-team.gateway.write","-ticket.scan.evt_01h8c3jm9zs2v6h2k9p9r8f5a1"]},"description":"Permission nodes granted by this role","examples":[["team.read","team.member.write"],["event.read","event.write"],["*"],["-team.gateway.write"]]},"createdAt":{"type":"string","format":"date-time","description":"Timestamp in ISO 8601 format when the role was created"},"updatedAt":{"type":"string","format":"date-time","description":"Timestamp in ISO 8601 format when the role was last updated"}},"required":["id","teamId","name","permissions","createdAt","updatedAt"],"description":"Team-scoped permission role"}}},"required":["roles"]}}}}}},"post":{"operationId":"teams.roles.create","summary":"Create team role","description":"Creates a team-scoped permission role.","tags":["Permissions"],"parameters":[{"name":"key","in":"path","required":true,"schema":{"type":"string","description":"Team identifier (ID or slug)"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"name":{"type":"string","minLength":1,"description":"Role display name"},"description":{"type":"string","description":"Optional role description"},"permissions":{"type":"array","minItems":1,"items":{"type":"string","pattern":"^-?(?:\\*|(?:[a-z][a-z0-9-]*)(?:\\.[a-z][a-z0-9-]*)*(?:\\.\\*|\\.bypass|\\.[a-z]{3}_[0-9a-z]{26})?)$","description":"Permission node in minecraft-style format. Supports exact, scoped wildcard, resource target, bypass target, and deny prefix.","examples":["team.read","team.member.write","ticket.scan","ticket.scan.*","ticket.scan.evt_01h8c3jm9zs2v6h2k9p9r8f5a1","team.gateway.connect.bypass","team.*","*","-team.gateway.write","-ticket.scan.evt_01h8c3jm9zs2v6h2k9p9r8f5a1"]},"description":"Non-empty array of permission nodes. Supports wildcard and negation.","examples":[["team.read","team.member.write"],["event.read","event.write"],["*"],["-team.gateway.write"]]}},"required":["name","permissions"],"additionalProperties":false}}}},"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"object","properties":{"role":{"type":"object","properties":{"id":{"type":"string","pattern":"^prl_[0-9a-z]{26}$","description":"Permission role ID"},"teamId":{"type":"string","pattern":"^tem_[0-9a-z]{26}$","description":"Team that owns this role"},"name":{"type":"string","minLength":1,"description":"Role display name"},"description":{"type":"string","description":"Optional role description"},"permissions":{"type":"array","minItems":1,"items":{"type":"string","pattern":"^-?(?:\\*|(?:[a-z][a-z0-9-]*)(?:\\.[a-z][a-z0-9-]*)*(?:\\.\\*|\\.bypass|\\.[a-z]{3}_[0-9a-z]{26})?)$","description":"Permission node in minecraft-style format. Supports exact, scoped wildcard, resource target, bypass target, and deny prefix.","examples":["team.read","team.member.write","ticket.scan","ticket.scan.*","ticket.scan.evt_01h8c3jm9zs2v6h2k9p9r8f5a1","team.gateway.connect.bypass","team.*","*","-team.gateway.write","-ticket.scan.evt_01h8c3jm9zs2v6h2k9p9r8f5a1"]},"description":"Permission nodes granted by this role","examples":[["team.read","team.member.write"],["event.read","event.write"],["*"],["-team.gateway.write"]]},"createdAt":{"type":"string","format":"date-time","description":"Timestamp in ISO 8601 format when the role was created"},"updatedAt":{"type":"string","format":"date-time","description":"Timestamp in ISO 8601 format when the role was last updated"}},"required":["id","teamId","name","permissions","createdAt","updatedAt"],"description":"Team-scoped permission role"}},"required":["role"]}}}}}}},"/teams/{key}/roles/{roleId}":{"get":{"operationId":"teams.roles.get","summary":"Get team role","description":"Retrieves a team role by ID.","tags":["Permissions"],"parameters":[{"name":"key","in":"path","required":true,"schema":{"type":"string","description":"Team identifier (ID or slug)"}},{"name":"roleId","in":"path","required":true,"schema":{"type":"string","pattern":"^prl_[0-9a-z]{26}$","description":"Unique permission role identifier"}}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"object","properties":{"role":{"type":"object","properties":{"id":{"type":"string","pattern":"^prl_[0-9a-z]{26}$","description":"Permission role ID"},"teamId":{"type":"string","pattern":"^tem_[0-9a-z]{26}$","description":"Team that owns this role"},"name":{"type":"string","minLength":1,"description":"Role display name"},"description":{"type":"string","description":"Optional role description"},"permissions":{"type":"array","minItems":1,"items":{"type":"string","pattern":"^-?(?:\\*|(?:[a-z][a-z0-9-]*)(?:\\.[a-z][a-z0-9-]*)*(?:\\.\\*|\\.bypass|\\.[a-z]{3}_[0-9a-z]{26})?)$","description":"Permission node in minecraft-style format. Supports exact, scoped wildcard, resource target, bypass target, and deny prefix.","examples":["team.read","team.member.write","ticket.scan","ticket.scan.*","ticket.scan.evt_01h8c3jm9zs2v6h2k9p9r8f5a1","team.gateway.connect.bypass","team.*","*","-team.gateway.write","-ticket.scan.evt_01h8c3jm9zs2v6h2k9p9r8f5a1"]},"description":"Permission nodes granted by this role","examples":[["team.read","team.member.write"],["event.read","event.write"],["*"],["-team.gateway.write"]]},"createdAt":{"type":"string","format":"date-time","description":"Timestamp in ISO 8601 format when the role was created"},"updatedAt":{"type":"string","format":"date-time","description":"Timestamp in ISO 8601 format when the role was last updated"}},"required":["id","teamId","name","permissions","createdAt","updatedAt"],"description":"Team-scoped permission role"}},"required":["role"]}}}}}},"put":{"operationId":"teams.roles.update","summary":"Replace team role","description":"Full-replace, idempotent update for role name, description, and permissions.","tags":["Permissions"],"parameters":[{"name":"key","in":"path","required":true,"schema":{"type":"string","description":"Team identifier (ID or slug)"}},{"name":"roleId","in":"path","required":true,"schema":{"type":"string","pattern":"^prl_[0-9a-z]{26}$","description":"Unique permission role identifier"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"name":{"type":"string","minLength":1,"description":"Role display name"},"description":{"type":"string","description":"Optional role description"},"permissions":{"type":"array","minItems":1,"items":{"type":"string","pattern":"^-?(?:\\*|(?:[a-z][a-z0-9-]*)(?:\\.[a-z][a-z0-9-]*)*(?:\\.\\*|\\.bypass|\\.[a-z]{3}_[0-9a-z]{26})?)$","description":"Permission node in minecraft-style format. Supports exact, scoped wildcard, resource target, bypass target, and deny prefix.","examples":["team.read","team.member.write","ticket.scan","ticket.scan.*","ticket.scan.evt_01h8c3jm9zs2v6h2k9p9r8f5a1","team.gateway.connect.bypass","team.*","*","-team.gateway.write","-ticket.scan.evt_01h8c3jm9zs2v6h2k9p9r8f5a1"]},"description":"Non-empty array of permission nodes. Supports wildcard and negation.","examples":[["team.read","team.member.write"],["event.read","event.write"],["*"],["-team.gateway.write"]]}},"required":["name","permissions"],"additionalProperties":false}}}},"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"object","properties":{"role":{"type":"object","properties":{"id":{"type":"string","pattern":"^prl_[0-9a-z]{26}$","description":"Permission role ID"},"teamId":{"type":"string","pattern":"^tem_[0-9a-z]{26}$","description":"Team that owns this role"},"name":{"type":"string","minLength":1,"description":"Role display name"},"description":{"type":"string","description":"Optional role description"},"permissions":{"type":"array","minItems":1,"items":{"type":"string","pattern":"^-?(?:\\*|(?:[a-z][a-z0-9-]*)(?:\\.[a-z][a-z0-9-]*)*(?:\\.\\*|\\.bypass|\\.[a-z]{3}_[0-9a-z]{26})?)$","description":"Permission node in minecraft-style format. Supports exact, scoped wildcard, resource target, bypass target, and deny prefix.","examples":["team.read","team.member.write","ticket.scan","ticket.scan.*","ticket.scan.evt_01h8c3jm9zs2v6h2k9p9r8f5a1","team.gateway.connect.bypass","team.*","*","-team.gateway.write","-ticket.scan.evt_01h8c3jm9zs2v6h2k9p9r8f5a1"]},"description":"Permission nodes granted by this role","examples":[["team.read","team.member.write"],["event.read","event.write"],["*"],["-team.gateway.write"]]},"createdAt":{"type":"string","format":"date-time","description":"Timestamp in ISO 8601 format when the role was created"},"updatedAt":{"type":"string","format":"date-time","description":"Timestamp in ISO 8601 format when the role was last updated"}},"required":["id","teamId","name","permissions","createdAt","updatedAt"],"description":"Team-scoped permission role"}},"required":["role"]}}}}}},"delete":{"operationId":"teams.roles.remove","summary":"Delete team role","description":"Deletes a team role.","tags":["Permissions"],"parameters":[{"name":"key","in":"path","required":true,"schema":{"type":"string","description":"Team identifier (ID or slug)"}},{"name":"roleId","in":"path","required":true,"schema":{"type":"string","pattern":"^prl_[0-9a-z]{26}$","description":"Unique permission role identifier"}}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"object","properties":{"role":{"type":"object","properties":{"id":{"type":"string","pattern":"^prl_[0-9a-z]{26}$","description":"Permission role ID"},"teamId":{"type":"string","pattern":"^tem_[0-9a-z]{26}$","description":"Team that owns this role"},"name":{"type":"string","minLength":1,"description":"Role display name"},"description":{"type":"string","description":"Optional role description"},"permissions":{"type":"array","minItems":1,"items":{"type":"string","pattern":"^-?(?:\\*|(?:[a-z][a-z0-9-]*)(?:\\.[a-z][a-z0-9-]*)*(?:\\.\\*|\\.bypass|\\.[a-z]{3}_[0-9a-z]{26})?)$","description":"Permission node in minecraft-style format. Supports exact, scoped wildcard, resource target, bypass target, and deny prefix.","examples":["team.read","team.member.write","ticket.scan","ticket.scan.*","ticket.scan.evt_01h8c3jm9zs2v6h2k9p9r8f5a1","team.gateway.connect.bypass","team.*","*","-team.gateway.write","-ticket.scan.evt_01h8c3jm9zs2v6h2k9p9r8f5a1"]},"description":"Permission nodes granted by this role","examples":[["team.read","team.member.write"],["event.read","event.write"],["*"],["-team.gateway.write"]]},"createdAt":{"type":"string","format":"date-time","description":"Timestamp in ISO 8601 format when the role was created"},"updatedAt":{"type":"string","format":"date-time","description":"Timestamp in ISO 8601 format when the role was last updated"}},"required":["id","teamId","name","permissions","createdAt","updatedAt"],"description":"Team-scoped permission role"}},"required":["role"]}}}}}}},"/teams/{key}/members/{memberId}/permissions":{"get":{"operationId":"teams.members.permissions.get","summary":"Get member direct permissions","description":"Returns direct permission nodes assigned to a member.","tags":["Permissions"],"parameters":[{"name":"key","in":"path","required":true,"schema":{"type":"string","description":"Team identifier (ID or slug)"}},{"name":"memberId","in":"path","required":true,"schema":{"type":"string","pattern":"^mbr_[0-9a-z]{26}$","description":"Unique team member identifier"}}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"object","properties":{"member":{"type":"object","properties":{"memberId":{"type":"string","pattern":"^mbr_[0-9a-z]{26}$","description":"Unique team member identifier"},"permissions":{"type":"array","items":{"type":"string","pattern":"^-?(?:\\*|(?:[a-z][a-z0-9-]*)(?:\\.[a-z][a-z0-9-]*)*(?:\\.\\*|\\.bypass|\\.[a-z]{3}_[0-9a-z]{26})?)$","description":"Permission node in minecraft-style format. Supports exact, scoped wildcard, resource target, bypass target, and deny prefix.","examples":["team.read","team.member.write","ticket.scan","ticket.scan.*","ticket.scan.evt_01h8c3jm9zs2v6h2k9p9r8f5a1","team.gateway.connect.bypass","team.*","*","-team.gateway.write","-ticket.scan.evt_01h8c3jm9zs2v6h2k9p9r8f5a1"]}},"updatedAt":{"type":"string","format":"date-time"}},"required":["memberId","permissions","updatedAt"]}},"required":["member"]}}}}}},"put":{"operationId":"teams.members.permissions.replace","summary":"Replace member direct permissions","description":"Full-replace, idempotent update for direct permission nodes assigned to a member.","tags":["Permissions"],"parameters":[{"name":"key","in":"path","required":true,"schema":{"type":"string","description":"Team identifier (ID or slug)"}},{"name":"memberId","in":"path","required":true,"schema":{"type":"string","pattern":"^mbr_[0-9a-z]{26}$","description":"Unique team member identifier"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"permissions":{"type":"array","items":{"type":"string","pattern":"^-?(?:\\*|(?:[a-z][a-z0-9-]*)(?:\\.[a-z][a-z0-9-]*)*(?:\\.\\*|\\.bypass|\\.[a-z]{3}_[0-9a-z]{26})?)$","description":"Permission node in minecraft-style format. Supports exact, scoped wildcard, resource target, bypass target, and deny prefix.","examples":["team.read","team.member.write","ticket.scan","ticket.scan.*","ticket.scan.evt_01h8c3jm9zs2v6h2k9p9r8f5a1","team.gateway.connect.bypass","team.*","*","-team.gateway.write","-ticket.scan.evt_01h8c3jm9zs2v6h2k9p9r8f5a1"]},"description":"Direct permission nodes for this member. Full-replace semantics; use an empty array to remove all direct grants."}},"required":["permissions"],"additionalProperties":false}}}},"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"object","properties":{"member":{"type":"object","properties":{"memberId":{"type":"string","pattern":"^mbr_[0-9a-z]{26}$","description":"Unique team member identifier"},"permissions":{"type":"array","items":{"type":"string","pattern":"^-?(?:\\*|(?:[a-z][a-z0-9-]*)(?:\\.[a-z][a-z0-9-]*)*(?:\\.\\*|\\.bypass|\\.[a-z]{3}_[0-9a-z]{26})?)$","description":"Permission node in minecraft-style format. Supports exact, scoped wildcard, resource target, bypass target, and deny prefix.","examples":["team.read","team.member.write","ticket.scan","ticket.scan.*","ticket.scan.evt_01h8c3jm9zs2v6h2k9p9r8f5a1","team.gateway.connect.bypass","team.*","*","-team.gateway.write","-ticket.scan.evt_01h8c3jm9zs2v6h2k9p9r8f5a1"]}},"updatedAt":{"type":"string","format":"date-time"}},"required":["memberId","permissions","updatedAt"]}},"required":["member"]}}}}}}},"/teams/{key}/members/{memberId}/roles":{"get":{"operationId":"teams.members.roles.get","summary":"Get member role assignments","description":"Returns role IDs assigned to a member.","tags":["Permissions"],"parameters":[{"name":"key","in":"path","required":true,"schema":{"type":"string","description":"Team identifier (ID or slug)"}},{"name":"memberId","in":"path","required":true,"schema":{"type":"string","pattern":"^mbr_[0-9a-z]{26}$","description":"Unique team member identifier"}}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"object","properties":{"member":{"type":"object","properties":{"memberId":{"type":"string","pattern":"^mbr_[0-9a-z]{26}$","description":"Unique team member identifier"},"roleIds":{"type":"array","items":{"type":"string","pattern":"^prl_[0-9a-z]{26}$","description":"Unique permission role identifier"},"description":"Role IDs assigned to this member"},"updatedAt":{"type":"string","format":"date-time"}},"required":["memberId","roleIds","updatedAt"]}},"required":["member"]}}}}}},"put":{"operationId":"teams.members.roles.replace","summary":"Replace member role assignments","description":"Full-replace, idempotent update for role assignments on a member.","tags":["Permissions"],"parameters":[{"name":"key","in":"path","required":true,"schema":{"type":"string","description":"Team identifier (ID or slug)"}},{"name":"memberId","in":"path","required":true,"schema":{"type":"string","pattern":"^mbr_[0-9a-z]{26}$","description":"Unique team member identifier"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"roleIds":{"type":"array","items":{"type":"string","pattern":"^prl_[0-9a-z]{26}$","description":"Unique permission role identifier"}}},"required":["roleIds"],"additionalProperties":false}}}},"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"object","properties":{"member":{"type":"object","properties":{"memberId":{"type":"string","pattern":"^mbr_[0-9a-z]{26}$","description":"Unique team member identifier"},"roleIds":{"type":"array","items":{"type":"string","pattern":"^prl_[0-9a-z]{26}$","description":"Unique permission role identifier"},"description":"Role IDs assigned to this member"},"updatedAt":{"type":"string","format":"date-time"}},"required":["memberId","roleIds","updatedAt"]}},"required":["member"]}}}}}}},"/teams/{key}/members/{memberId}/permission-scopes/{id}":{"get":{"operationId":"permissionScope.get","summary":"Get permission scope by ID","description":"Retrieve a permission scope using its unique ID","tags":["Permission Scopes"],"parameters":[{"name":"key","in":"path","required":true,"schema":{"type":"string"}},{"name":"memberId","in":"path","required":true,"schema":{"type":"string"}},{"name":"id","in":"path","required":true,"schema":{"type":"string","pattern":"^psc_[0-9a-z]{26}$","description":"Unique identifier for the permission scope"}}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"anyOf":[{"type":"object","properties":{"id":{"type":"string","readOnly":true,"description":"Unique identifier for the permission scope"},"createdAt":{"type":"string","format":"date-time","readOnly":true,"description":"Timestamp in ISO 8601 format when the scope was created"},"updatedAt":{"type":"string","format":"date-time","readOnly":true,"description":"Timestamp in ISO 8601 format when the scope was last updated"},"teamMemberId":{"type":"string","description":"Team member this scope applies to"},"teamId":{"type":"string","description":"Team the member belongs to"},"userId":{"type":"string","description":"ID of the user this permission scope applies to"},"permissions":{"type":"array","items":{"type":"string","pattern":"^-?(?:\\*|(?:[a-z][a-z0-9-]*)(?:\\.[a-z][a-z0-9-]*)*(?:\\.\\*|\\.bypass|\\.[a-z]{3}_[0-9a-z]{26})?)$","description":"Permission node in minecraft-style format. Supports exact, scoped wildcard, resource target, bypass target, and deny prefix.","examples":["team.read","team.member.write","ticket.scan","ticket.scan.*","ticket.scan.evt_01h8c3jm9zs2v6h2k9p9r8f5a1","team.gateway.connect.bypass","team.*","*","-team.gateway.write","-ticket.scan.evt_01h8c3jm9zs2v6h2k9p9r8f5a1"]},"description":"Scoped permissions. Can be empty array to remove all access. Replaces lower-tier permissions based on kind (VENUE overrides PROMOTER overrides BASE)."},"roleIds":{"type":"array","items":{"type":"string"},"description":"Optional role IDs applied at this scope. Role-derived permissions are merged with explicit scoped nodes."},"tenantId":{"type":"string","readOnly":true,"description":"Tenant identifier"},"kind":{"const":"PROMOTER","description":"Scope type: PROMOTER-specific permissions"},"promoterId":{"type":"string","description":"Promoter this scope applies to. Replaces base permissions for all events by this promoter."}},"required":["id","createdAt","updatedAt","teamMemberId","teamId","userId","permissions","tenantId","kind","promoterId"],"description":"PROMOTER-specific permission scope. Applies to all events by the specified promoter."},{"type":"object","properties":{"id":{"type":"string","readOnly":true,"description":"Unique identifier for the permission scope"},"createdAt":{"type":"string","format":"date-time","readOnly":true,"description":"Timestamp in ISO 8601 format when the scope was created"},"updatedAt":{"type":"string","format":"date-time","readOnly":true,"description":"Timestamp in ISO 8601 format when the scope was last updated"},"teamMemberId":{"type":"string","description":"Team member this scope applies to"},"teamId":{"type":"string","description":"Team the member belongs to"},"userId":{"type":"string","description":"ID of the user this permission scope applies to"},"permissions":{"type":"array","items":{"type":"string","pattern":"^-?(?:\\*|(?:[a-z][a-z0-9-]*)(?:\\.[a-z][a-z0-9-]*)*(?:\\.\\*|\\.bypass|\\.[a-z]{3}_[0-9a-z]{26})?)$","description":"Permission node in minecraft-style format. Supports exact, scoped wildcard, resource target, bypass target, and deny prefix.","examples":["team.read","team.member.write","ticket.scan","ticket.scan.*","ticket.scan.evt_01h8c3jm9zs2v6h2k9p9r8f5a1","team.gateway.connect.bypass","team.*","*","-team.gateway.write","-ticket.scan.evt_01h8c3jm9zs2v6h2k9p9r8f5a1"]},"description":"Scoped permissions. Can be empty array to remove all access. Replaces lower-tier permissions based on kind (VENUE overrides PROMOTER overrides BASE)."},"roleIds":{"type":"array","items":{"type":"string"},"description":"Optional role IDs applied at this scope. Role-derived permissions are merged with explicit scoped nodes."},"tenantId":{"type":"string","readOnly":true,"description":"Tenant identifier"},"kind":{"const":"VENUE","description":"Scope type: VENUE-specific permissions"},"venueId":{"type":"string","description":"Venue this scope applies to. Replaces base/promoter permissions for all events at this venue."}},"required":["id","createdAt","updatedAt","teamMemberId","teamId","userId","permissions","tenantId","kind","venueId"],"description":"VENUE-specific permission scope. Applies to all events at the specified venue."}],"description":"Permission scope for a team member. Can be PROMOTER-specific (applies to all events by that promoter) or VENUE-specific (applies to all events at that venue). Replaces lower-tier permissions using REPLACE semantics."}}}}}},"patch":{"operationId":"permissionScope.update","summary":"Update a permission scope","description":"Update an existing permission scope. Only the permissions array can be modified.","tags":["Permission Scopes"],"parameters":[{"name":"key","in":"path","required":true,"schema":{"type":"string"}},{"name":"memberId","in":"path","required":true,"schema":{"type":"string"}},{"name":"id","in":"path","required":true,"schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"permissions":{"type":"array","items":{"type":"string","pattern":"^-?(?:\\*|(?:[a-z][a-z0-9-]*)(?:\\.[a-z][a-z0-9-]*)*(?:\\.\\*|\\.bypass|\\.[a-z]{3}_[0-9a-z]{26})?)$","description":"Permission node in minecraft-style format. Supports exact, scoped wildcard, resource target, bypass target, and deny prefix.","examples":["team.read","team.member.write","ticket.scan","ticket.scan.*","ticket.scan.evt_01h8c3jm9zs2v6h2k9p9r8f5a1","team.gateway.connect.bypass","team.*","*","-team.gateway.write","-ticket.scan.evt_01h8c3jm9zs2v6h2k9p9r8f5a1"]},"description":"Scoped permissions. Can be empty array to remove all access. Replaces lower-tier permissions based on kind (VENUE overrides PROMOTER overrides BASE)."},"roleIds":{"type":"array","items":{"type":"string"},"description":"Optional role IDs to apply at this scope."}},"required":["permissions"],"additionalProperties":false}}}},"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"anyOf":[{"type":"object","properties":{"id":{"type":"string","readOnly":true,"description":"Unique identifier for the permission scope"},"createdAt":{"type":"string","format":"date-time","readOnly":true,"description":"Timestamp in ISO 8601 format when the scope was created"},"updatedAt":{"type":"string","format":"date-time","readOnly":true,"description":"Timestamp in ISO 8601 format when the scope was last updated"},"teamMemberId":{"type":"string","description":"Team member this scope applies to"},"teamId":{"type":"string","description":"Team the member belongs to"},"userId":{"type":"string","description":"ID of the user this permission scope applies to"},"permissions":{"type":"array","items":{"type":"string","pattern":"^-?(?:\\*|(?:[a-z][a-z0-9-]*)(?:\\.[a-z][a-z0-9-]*)*(?:\\.\\*|\\.bypass|\\.[a-z]{3}_[0-9a-z]{26})?)$","description":"Permission node in minecraft-style format. Supports exact, scoped wildcard, resource target, bypass target, and deny prefix.","examples":["team.read","team.member.write","ticket.scan","ticket.scan.*","ticket.scan.evt_01h8c3jm9zs2v6h2k9p9r8f5a1","team.gateway.connect.bypass","team.*","*","-team.gateway.write","-ticket.scan.evt_01h8c3jm9zs2v6h2k9p9r8f5a1"]},"description":"Scoped permissions. Can be empty array to remove all access. Replaces lower-tier permissions based on kind (VENUE overrides PROMOTER overrides BASE)."},"roleIds":{"type":"array","items":{"type":"string"},"description":"Optional role IDs applied at this scope. Role-derived permissions are merged with explicit scoped nodes."},"tenantId":{"type":"string","readOnly":true,"description":"Tenant identifier"},"kind":{"const":"PROMOTER","description":"Scope type: PROMOTER-specific permissions"},"promoterId":{"type":"string","description":"Promoter this scope applies to. Replaces base permissions for all events by this promoter."}},"required":["id","createdAt","updatedAt","teamMemberId","teamId","userId","permissions","tenantId","kind","promoterId"],"description":"PROMOTER-specific permission scope. Applies to all events by the specified promoter."},{"type":"object","properties":{"id":{"type":"string","readOnly":true,"description":"Unique identifier for the permission scope"},"createdAt":{"type":"string","format":"date-time","readOnly":true,"description":"Timestamp in ISO 8601 format when the scope was created"},"updatedAt":{"type":"string","format":"date-time","readOnly":true,"description":"Timestamp in ISO 8601 format when the scope was last updated"},"teamMemberId":{"type":"string","description":"Team member this scope applies to"},"teamId":{"type":"string","description":"Team the member belongs to"},"userId":{"type":"string","description":"ID of the user this permission scope applies to"},"permissions":{"type":"array","items":{"type":"string","pattern":"^-?(?:\\*|(?:[a-z][a-z0-9-]*)(?:\\.[a-z][a-z0-9-]*)*(?:\\.\\*|\\.bypass|\\.[a-z]{3}_[0-9a-z]{26})?)$","description":"Permission node in minecraft-style format. Supports exact, scoped wildcard, resource target, bypass target, and deny prefix.","examples":["team.read","team.member.write","ticket.scan","ticket.scan.*","ticket.scan.evt_01h8c3jm9zs2v6h2k9p9r8f5a1","team.gateway.connect.bypass","team.*","*","-team.gateway.write","-ticket.scan.evt_01h8c3jm9zs2v6h2k9p9r8f5a1"]},"description":"Scoped permissions. Can be empty array to remove all access. Replaces lower-tier permissions based on kind (VENUE overrides PROMOTER overrides BASE)."},"roleIds":{"type":"array","items":{"type":"string"},"description":"Optional role IDs applied at this scope. Role-derived permissions are merged with explicit scoped nodes."},"tenantId":{"type":"string","readOnly":true,"description":"Tenant identifier"},"kind":{"const":"VENUE","description":"Scope type: VENUE-specific permissions"},"venueId":{"type":"string","description":"Venue this scope applies to. Replaces base/promoter permissions for all events at this venue."}},"required":["id","createdAt","updatedAt","teamMemberId","teamId","userId","permissions","tenantId","kind","venueId"],"description":"VENUE-specific permission scope. Applies to all events at the specified venue."}],"description":"Permission scope for a team member. Can be PROMOTER-specific (applies to all events by that promoter) or VENUE-specific (applies to all events at that venue). Replaces lower-tier permissions using REPLACE semantics."}}}}}},"delete":{"operationId":"permissionScope.remove","summary":"Delete a permission scope","description":"Remove a permission scope. Team member will revert to lower-tier permissions for the affected resource.","tags":["Permission Scopes"],"parameters":[{"name":"key","in":"path","required":true,"schema":{"type":"string"}},{"name":"memberId","in":"path","required":true,"schema":{"type":"string"}},{"name":"id","in":"path","required":true,"schema":{"type":"string","pattern":"^psc_[0-9a-z]{26}$","description":"Unique identifier for the permission scope"}}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"anyOf":[{"type":"object","properties":{"id":{"type":"string","readOnly":true,"description":"Unique identifier for the permission scope"},"createdAt":{"type":"string","format":"date-time","readOnly":true,"description":"Timestamp in ISO 8601 format when the scope was created"},"updatedAt":{"type":"string","format":"date-time","readOnly":true,"description":"Timestamp in ISO 8601 format when the scope was last updated"},"teamMemberId":{"type":"string","description":"Team member this scope applies to"},"teamId":{"type":"string","description":"Team the member belongs to"},"userId":{"type":"string","description":"ID of the user this permission scope applies to"},"permissions":{"type":"array","items":{"type":"string","pattern":"^-?(?:\\*|(?:[a-z][a-z0-9-]*)(?:\\.[a-z][a-z0-9-]*)*(?:\\.\\*|\\.bypass|\\.[a-z]{3}_[0-9a-z]{26})?)$","description":"Permission node in minecraft-style format. Supports exact, scoped wildcard, resource target, bypass target, and deny prefix.","examples":["team.read","team.member.write","ticket.scan","ticket.scan.*","ticket.scan.evt_01h8c3jm9zs2v6h2k9p9r8f5a1","team.gateway.connect.bypass","team.*","*","-team.gateway.write","-ticket.scan.evt_01h8c3jm9zs2v6h2k9p9r8f5a1"]},"description":"Scoped permissions. Can be empty array to remove all access. Replaces lower-tier permissions based on kind (VENUE overrides PROMOTER overrides BASE)."},"roleIds":{"type":"array","items":{"type":"string"},"description":"Optional role IDs applied at this scope. Role-derived permissions are merged with explicit scoped nodes."},"tenantId":{"type":"string","readOnly":true,"description":"Tenant identifier"},"kind":{"const":"PROMOTER","description":"Scope type: PROMOTER-specific permissions"},"promoterId":{"type":"string","description":"Promoter this scope applies to. Replaces base permissions for all events by this promoter."}},"required":["id","createdAt","updatedAt","teamMemberId","teamId","userId","permissions","tenantId","kind","promoterId"],"description":"PROMOTER-specific permission scope. Applies to all events by the specified promoter."},{"type":"object","properties":{"id":{"type":"string","readOnly":true,"description":"Unique identifier for the permission scope"},"createdAt":{"type":"string","format":"date-time","readOnly":true,"description":"Timestamp in ISO 8601 format when the scope was created"},"updatedAt":{"type":"string","format":"date-time","readOnly":true,"description":"Timestamp in ISO 8601 format when the scope was last updated"},"teamMemberId":{"type":"string","description":"Team member this scope applies to"},"teamId":{"type":"string","description":"Team the member belongs to"},"userId":{"type":"string","description":"ID of the user this permission scope applies to"},"permissions":{"type":"array","items":{"type":"string","pattern":"^-?(?:\\*|(?:[a-z][a-z0-9-]*)(?:\\.[a-z][a-z0-9-]*)*(?:\\.\\*|\\.bypass|\\.[a-z]{3}_[0-9a-z]{26})?)$","description":"Permission node in minecraft-style format. Supports exact, scoped wildcard, resource target, bypass target, and deny prefix.","examples":["team.read","team.member.write","ticket.scan","ticket.scan.*","ticket.scan.evt_01h8c3jm9zs2v6h2k9p9r8f5a1","team.gateway.connect.bypass","team.*","*","-team.gateway.write","-ticket.scan.evt_01h8c3jm9zs2v6h2k9p9r8f5a1"]},"description":"Scoped permissions. Can be empty array to remove all access. Replaces lower-tier permissions based on kind (VENUE overrides PROMOTER overrides BASE)."},"roleIds":{"type":"array","items":{"type":"string"},"description":"Optional role IDs applied at this scope. Role-derived permissions are merged with explicit scoped nodes."},"tenantId":{"type":"string","readOnly":true,"description":"Tenant identifier"},"kind":{"const":"VENUE","description":"Scope type: VENUE-specific permissions"},"venueId":{"type":"string","description":"Venue this scope applies to. Replaces base/promoter permissions for all events at this venue."}},"required":["id","createdAt","updatedAt","teamMemberId","teamId","userId","permissions","tenantId","kind","venueId"],"description":"VENUE-specific permission scope. Applies to all events at the specified venue."}],"description":"Permission scope for a team member. Can be PROMOTER-specific (applies to all events by that promoter) or VENUE-specific (applies to all events at that venue). Replaces lower-tier permissions using REPLACE semantics."}}}}}}},"/teams/{key}/members/{memberId}/permission-scopes":{"get":{"operationId":"permissionScope.list","summary":"List permission scopes with cursor-based pagination","description":"Returns permission scopes for a specific team member with cursor pagination. Can filter by kind (PROMOTER or VENUE).","tags":["Permission Scopes"],"parameters":[{"name":"key","in":"path","required":true,"schema":{"type":"string"}},{"name":"memberId","in":"path","required":true,"schema":{"type":"string"}},{"name":"teamMemberId","in":"query","schema":{"type":"string","description":"Filter by team member ID"},"allowEmptyValue":true,"allowReserved":true},{"name":"userId","in":"query","schema":{"type":"string","description":"Filter by user ID"},"allowEmptyValue":true,"allowReserved":true},{"name":"kind","in":"query","schema":{"enum":["PROMOTER","VENUE"],"type":"string","description":"Filter by scope kind (PROMOTER or VENUE)"},"allowEmptyValue":true,"allowReserved":true},{"name":"promoterId","in":"query","schema":{"type":"string","description":"Filter by promoter ID (only for kind=PROMOTER scopes)"},"allowEmptyValue":true,"allowReserved":true},{"name":"venueId","in":"query","schema":{"type":"string","description":"Filter by venue ID (only for kind=VENUE scopes)"},"allowEmptyValue":true,"allowReserved":true},{"name":"limit","in":"query","schema":{"type":"integer","minimum":1,"maximum":100,"default":20,"description":"Maximum number of permission scopes to return per request (1-100, default: 20)","examples":[20]},"allowEmptyValue":true,"allowReserved":true},{"name":"cursor","in":"query","schema":{"type":"string","description":"Pagination cursor from previous response. Used to fetch next page of results"},"allowEmptyValue":true,"allowReserved":true}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"object","properties":{"items":{"type":"array","items":{"anyOf":[{"type":"object","properties":{"id":{"type":"string","readOnly":true,"description":"Unique identifier for the permission scope"},"createdAt":{"type":"string","format":"date-time","readOnly":true,"description":"Timestamp in ISO 8601 format when the scope was created"},"updatedAt":{"type":"string","format":"date-time","readOnly":true,"description":"Timestamp in ISO 8601 format when the scope was last updated"},"teamMemberId":{"type":"string","description":"Team member this scope applies to"},"teamId":{"type":"string","description":"Team the member belongs to"},"userId":{"type":"string","description":"ID of the user this permission scope applies to"},"permissions":{"type":"array","items":{"type":"string","pattern":"^-?(?:\\*|(?:[a-z][a-z0-9-]*)(?:\\.[a-z][a-z0-9-]*)*(?:\\.\\*|\\.bypass|\\.[a-z]{3}_[0-9a-z]{26})?)$","description":"Permission node in minecraft-style format. Supports exact, scoped wildcard, resource target, bypass target, and deny prefix.","examples":["team.read","team.member.write","ticket.scan","ticket.scan.*","ticket.scan.evt_01h8c3jm9zs2v6h2k9p9r8f5a1","team.gateway.connect.bypass","team.*","*","-team.gateway.write","-ticket.scan.evt_01h8c3jm9zs2v6h2k9p9r8f5a1"]},"description":"Scoped permissions. Can be empty array to remove all access. Replaces lower-tier permissions based on kind (VENUE overrides PROMOTER overrides BASE)."},"roleIds":{"type":"array","items":{"type":"string"},"description":"Optional role IDs applied at this scope. Role-derived permissions are merged with explicit scoped nodes."},"tenantId":{"type":"string","readOnly":true,"description":"Tenant identifier"},"kind":{"const":"PROMOTER","description":"Scope type: PROMOTER-specific permissions"},"promoterId":{"type":"string","description":"Promoter this scope applies to. Replaces base permissions for all events by this promoter."}},"required":["id","createdAt","updatedAt","teamMemberId","teamId","userId","permissions","tenantId","kind","promoterId"],"description":"PROMOTER-specific permission scope. Applies to all events by the specified promoter."},{"type":"object","properties":{"id":{"type":"string","readOnly":true,"description":"Unique identifier for the permission scope"},"createdAt":{"type":"string","format":"date-time","readOnly":true,"description":"Timestamp in ISO 8601 format when the scope was created"},"updatedAt":{"type":"string","format":"date-time","readOnly":true,"description":"Timestamp in ISO 8601 format when the scope was last updated"},"teamMemberId":{"type":"string","description":"Team member this scope applies to"},"teamId":{"type":"string","description":"Team the member belongs to"},"userId":{"type":"string","description":"ID of the user this permission scope applies to"},"permissions":{"type":"array","items":{"type":"string","pattern":"^-?(?:\\*|(?:[a-z][a-z0-9-]*)(?:\\.[a-z][a-z0-9-]*)*(?:\\.\\*|\\.bypass|\\.[a-z]{3}_[0-9a-z]{26})?)$","description":"Permission node in minecraft-style format. Supports exact, scoped wildcard, resource target, bypass target, and deny prefix.","examples":["team.read","team.member.write","ticket.scan","ticket.scan.*","ticket.scan.evt_01h8c3jm9zs2v6h2k9p9r8f5a1","team.gateway.connect.bypass","team.*","*","-team.gateway.write","-ticket.scan.evt_01h8c3jm9zs2v6h2k9p9r8f5a1"]},"description":"Scoped permissions. Can be empty array to remove all access. Replaces lower-tier permissions based on kind (VENUE overrides PROMOTER overrides BASE)."},"roleIds":{"type":"array","items":{"type":"string"},"description":"Optional role IDs applied at this scope. Role-derived permissions are merged with explicit scoped nodes."},"tenantId":{"type":"string","readOnly":true,"description":"Tenant identifier"},"kind":{"const":"VENUE","description":"Scope type: VENUE-specific permissions"},"venueId":{"type":"string","description":"Venue this scope applies to. Replaces base/promoter permissions for all events at this venue."}},"required":["id","createdAt","updatedAt","teamMemberId","teamId","userId","permissions","tenantId","kind","venueId"],"description":"VENUE-specific permission scope. Applies to all events at the specified venue."}],"description":"Permission scope for a team member. Can be PROMOTER-specific (applies to all events by that promoter) or VENUE-specific (applies to all events at that venue). Replaces lower-tier permissions using REPLACE semantics."},"description":"Array of items for the current result set"},"before":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Cursor for navigating backward in the result set. Omitted when there are no prior results.","examples":["eyJ2ZXJzaW9uIjoxLCJpbnRlbnQiOnsic291cmNlIjoiZGVtbyJ9LCJwb3MiOnsicHJpbWFyeUtleSI6InBybV8wMXM4NTNqIn19"]},"after":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Cursor for navigating forward in the result set. Omitted when there are no subsequent results.","examples":["eyJ2ZXJzaW9uIjoxLCJpbnRlbnQiOnsic291cmNlIjoiZGVtbyJ9LCJwb3MiOnsicHJpbWFyeUtleSI6InBybV8wMXM4NTNkIn19"]},"limit":{"type":"number","minimum":1,"description":"Maximum number of items to return in each result set","examples":[20]}},"required":["items","limit"],"description":"Paginated response containing permission scopes with cursor for next page"}}}}}},"post":{"operationId":"permissionScope.create","summary":"Create a new permission scope","description":"Create a permission scope for a team member. Can be PROMOTER-specific (applies to all events by that promoter) or VENUE-specific (applies to all events at that venue). Replaces lower-tier permissions.","tags":["Permission Scopes"],"parameters":[{"name":"key","in":"path","required":true,"schema":{"type":"string"}},{"name":"memberId","in":"path","required":true,"schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"permissions":{"type":"array","items":{"type":"string","pattern":"^-?(?:\\*|(?:[a-z][a-z0-9-]*)(?:\\.[a-z][a-z0-9-]*)*(?:\\.\\*|\\.bypass|\\.[a-z]{3}_[0-9a-z]{26})?)$","description":"Permission node in minecraft-style format. Supports exact, scoped wildcard, resource target, bypass target, and deny prefix.","examples":["team.read","team.member.write","ticket.scan","ticket.scan.*","ticket.scan.evt_01h8c3jm9zs2v6h2k9p9r8f5a1","team.gateway.connect.bypass","team.*","*","-team.gateway.write","-ticket.scan.evt_01h8c3jm9zs2v6h2k9p9r8f5a1"]},"description":"Scoped permissions. Can be empty array to remove all access. Replaces lower-tier permissions based on kind (VENUE overrides PROMOTER overrides BASE)."},"roleIds":{"type":"array","items":{"type":"string"},"description":"Optional role IDs to apply at this scope."},"kind":{"anyOf":[{"const":"PROMOTER","description":"Scope type: PROMOTER-specific permissions"},{"const":"VENUE","description":"Scope type: VENUE-specific permissions"}]},"promoterId":{"type":"string","description":"Promoter this scope applies to. Replaces base permissions for all events by this promoter."},"venueId":{"type":"string","description":"Venue this scope applies to. Replaces base/promoter permissions for all events at this venue."}},"required":["permissions","kind"]}}}},"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"anyOf":[{"type":"object","properties":{"id":{"type":"string","readOnly":true,"description":"Unique identifier for the permission scope"},"createdAt":{"type":"string","format":"date-time","readOnly":true,"description":"Timestamp in ISO 8601 format when the scope was created"},"updatedAt":{"type":"string","format":"date-time","readOnly":true,"description":"Timestamp in ISO 8601 format when the scope was last updated"},"teamMemberId":{"type":"string","description":"Team member this scope applies to"},"teamId":{"type":"string","description":"Team the member belongs to"},"userId":{"type":"string","description":"ID of the user this permission scope applies to"},"permissions":{"type":"array","items":{"type":"string","pattern":"^-?(?:\\*|(?:[a-z][a-z0-9-]*)(?:\\.[a-z][a-z0-9-]*)*(?:\\.\\*|\\.bypass|\\.[a-z]{3}_[0-9a-z]{26})?)$","description":"Permission node in minecraft-style format. Supports exact, scoped wildcard, resource target, bypass target, and deny prefix.","examples":["team.read","team.member.write","ticket.scan","ticket.scan.*","ticket.scan.evt_01h8c3jm9zs2v6h2k9p9r8f5a1","team.gateway.connect.bypass","team.*","*","-team.gateway.write","-ticket.scan.evt_01h8c3jm9zs2v6h2k9p9r8f5a1"]},"description":"Scoped permissions. Can be empty array to remove all access. Replaces lower-tier permissions based on kind (VENUE overrides PROMOTER overrides BASE)."},"roleIds":{"type":"array","items":{"type":"string"},"description":"Optional role IDs applied at this scope. Role-derived permissions are merged with explicit scoped nodes."},"tenantId":{"type":"string","readOnly":true,"description":"Tenant identifier"},"kind":{"const":"PROMOTER","description":"Scope type: PROMOTER-specific permissions"},"promoterId":{"type":"string","description":"Promoter this scope applies to. Replaces base permissions for all events by this promoter."}},"required":["id","createdAt","updatedAt","teamMemberId","teamId","userId","permissions","tenantId","kind","promoterId"],"description":"PROMOTER-specific permission scope. Applies to all events by the specified promoter."},{"type":"object","properties":{"id":{"type":"string","readOnly":true,"description":"Unique identifier for the permission scope"},"createdAt":{"type":"string","format":"date-time","readOnly":true,"description":"Timestamp in ISO 8601 format when the scope was created"},"updatedAt":{"type":"string","format":"date-time","readOnly":true,"description":"Timestamp in ISO 8601 format when the scope was last updated"},"teamMemberId":{"type":"string","description":"Team member this scope applies to"},"teamId":{"type":"string","description":"Team the member belongs to"},"userId":{"type":"string","description":"ID of the user this permission scope applies to"},"permissions":{"type":"array","items":{"type":"string","pattern":"^-?(?:\\*|(?:[a-z][a-z0-9-]*)(?:\\.[a-z][a-z0-9-]*)*(?:\\.\\*|\\.bypass|\\.[a-z]{3}_[0-9a-z]{26})?)$","description":"Permission node in minecraft-style format. Supports exact, scoped wildcard, resource target, bypass target, and deny prefix.","examples":["team.read","team.member.write","ticket.scan","ticket.scan.*","ticket.scan.evt_01h8c3jm9zs2v6h2k9p9r8f5a1","team.gateway.connect.bypass","team.*","*","-team.gateway.write","-ticket.scan.evt_01h8c3jm9zs2v6h2k9p9r8f5a1"]},"description":"Scoped permissions. Can be empty array to remove all access. Replaces lower-tier permissions based on kind (VENUE overrides PROMOTER overrides BASE)."},"roleIds":{"type":"array","items":{"type":"string"},"description":"Optional role IDs applied at this scope. Role-derived permissions are merged with explicit scoped nodes."},"tenantId":{"type":"string","readOnly":true,"description":"Tenant identifier"},"kind":{"const":"VENUE","description":"Scope type: VENUE-specific permissions"},"venueId":{"type":"string","description":"Venue this scope applies to. Replaces base/promoter permissions for all events at this venue."}},"required":["id","createdAt","updatedAt","teamMemberId","teamId","userId","permissions","tenantId","kind","venueId"],"description":"VENUE-specific permission scope. Applies to all events at the specified venue."}],"description":"Permission scope for a team member. Can be PROMOTER-specific (applies to all events by that promoter) or VENUE-specific (applies to all events at that venue). Replaces lower-tier permissions using REPLACE semantics."}}}}}}},"/promoters/{key}":{"get":{"operationId":"promoter.get","summary":"Get promoter by ID or slug","description":"Retrieve a promoter using either its unique ID or URL-friendly slug","tags":["Promoters"],"parameters":[{"name":"key","in":"path","required":true,"schema":{"type":"string","minLength":1,"description":"Promoter key - either a unique ID (pmt_xxx format) or URL-friendly slug","examples":["pmt_01jqpjksnsen9vprw95et60t2m","session-services"]}}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"object","properties":{"promoter":{"$ref":"#/components/schemas/Promoter"}},"required":["promoter"]}}}}}},"put":{"operationId":"promoter.update","summary":"Update a promoter","description":"Update a promoter using either its unique ID or URL-friendly slug","tags":["Promoters"],"parameters":[{"name":"key","in":"path","required":true,"schema":{"type":"string","minLength":1,"description":"Promoter key - either a unique ID (pmt_xxx format) or URL-friendly slug","examples":["pmt_01jqpjksnsen9vprw95et60t2m","session-services"]}}],"requestBody":{"required":false,"content":{"application/json":{"schema":{"type":"object","properties":{"name":{"type":"string","minLength":3,"maxLength":30,"description":"Display name of the promoter organization. Must be between 3 and 30 characters","examples":["Session Services"]},"slug":{"type":"string","minLength":3,"maxLength":30,"description":"URL-friendly slug for the promoter organization. Must be unique and between 3 and 30 characters","examples":["session-services"]},"teamId":{"type":"string","pattern":"^tem_[0-9a-z]{26}$","description":"ID of the team that owns this promoter. Establishes team-based organization and permissions.","examples":["tem_01jqpjksnsen9vprw95et60t2m"]},"description":{"type":"string","description":"Detailed description of the promoter organization and their events","examples":["This is only a test..."]},"approval":{"enum":["PENDING","APPROVED","REJECTED"],"type":"string","description":"Approval status of the promoter. PENDING: awaiting review, APPROVED: can create events, REJECTED: cannot operate","examples":["APPROVED"]},"image":{"anyOf":[{"type":"object","properties":{"src":{"type":"string","format":"uri","examples":["https://assets.session.services/my-image.jpg"]},"alt":{"type":"string","examples":["My Image"]},"width":{"type":"number","examples":[1080]},"height":{"type":"number","examples":[1080]}},"required":["src","alt","width","height"]},{"type":"null"}],"description":"Promoter image. Pass null to clear; omit to leave unchanged.","examples":[{"src":"https://assets.session.services/icon-bg.png","alt":"Session Services Logo","width":800,"height":800},null]},"geohash":{"type":"string","description":"Geohash encoding of the promoter's location for efficient spatial queries","examples":["r3gx1"]},"tracking":{"anyOf":[{"type":"object","properties":{"fbId":{"type":"string"},"gtmId":{"type":"string"},"tikTokId":{"type":"string"}}},{"type":"null"}],"description":"Analytics tracking config. Pass null to clear all tracking; omit to leave unchanged."},"metadata":{"type":"object","propertyNames":{"type":"string","minLength":1,"maxLength":40,"description":"Metadata key. Must be 1-40 characters"},"additionalProperties":{"type":"string","maxLength":500,"description":"Metadata value. Must not exceed 500 characters"},"description":"Flexible key-value metadata storage for custom configuration. Similar to Stripe's metadata API. Maximum 50 keys, key names up to 40 characters, values up to 500 characters."},"locationId":{"type":"string","pattern":"^loc_[0-9a-z]{26}$","description":"ID of an existing location to update to. Either locationId or googlePlaceId can be provided.","examples":["loc_01jqpjksnsen9vprw95et60t2m"]},"googlePlaceId":{"type":"string","description":"Google Place ID to update location from. Either locationId or googlePlaceId can be provided.","examples":["ChIJN1t_tDeuEmsRUsoyG83frY4"]}},"additionalProperties":false}}}},"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"object","properties":{"promoter":{"$ref":"#/components/schemas/Promoter"}},"required":["promoter"]}}}}}},"delete":{"operationId":"promoter.remove","summary":"Delete a promoter","description":"Delete a promoter using either its unique ID or URL-friendly slug","tags":["Promoters"],"parameters":[{"name":"key","in":"path","required":true,"schema":{"type":"string","minLength":1,"description":"Promoter key - either a unique ID (pmt_xxx format) or URL-friendly slug","examples":["pmt_01jqpjksnsen9vprw95et60t2m","session-services"]}}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"object","properties":{"promoter":{"$ref":"#/components/schemas/Promoter"}},"required":["promoter"]}}}}}}},"/promoters":{"get":{"operationId":"promoter.list","summary":"List promoters with cursor-based pagination","description":"Returns promoters with cursor pagination. Filter by teamId to see promoters for a specific team.","tags":["Promoters"],"parameters":[{"name":"teamId","in":"query","schema":{"type":"string","description":"Filter promoters to only those belonging to a specific team"},"allowEmptyValue":true,"allowReserved":true},{"name":"approval","in":"query","schema":{"enum":["PENDING","APPROVED","REJECTED"],"type":"string","description":"Filter promoters by approval status. PENDING: awaiting review, APPROVED: can create events, REJECTED: cannot operate","examples":["APPROVED"]},"allowEmptyValue":true,"allowReserved":true},{"name":"query","in":"query","schema":{"type":"string","description":"Optional search query. When provided, results are fetched from search with unified cursor pagination.","examples":["Session Services"]},"allowEmptyValue":true,"allowReserved":true},{"name":"latitude","in":"query","schema":{"type":"number","minimum":-90,"maximum":90,"description":"Latitude used with longitude and radius to filter promoters by proximity when searching.","examples":[-33.8944593]},"allowEmptyValue":true,"allowReserved":true},{"name":"longitude","in":"query","schema":{"type":"number","minimum":-180,"maximum":180,"description":"Longitude used with latitude and radius to filter promoters by proximity when searching.","examples":[151.2252255]},"allowEmptyValue":true,"allowReserved":true},{"name":"radius","in":"query","schema":{"type":"number","description":"Search radius in kilometers applied when latitude and longitude are provided.","examples":[50]},"allowEmptyValue":true,"allowReserved":true},{"name":"mine","in":"query","schema":{"type":"boolean","description":"When true, limits results to promoters from teams the current user belongs to. When combined with teamId, returns only that team's promoters (bypassing tenant-wide admin scope).","examples":[true]},"allowEmptyValue":true,"allowReserved":true},{"name":"sort","in":"query","schema":{"enum":["createdAt"],"type":"string","description":"Optional list sort field. Use `createdAt` to return newest or oldest promoters first.","examples":["createdAt"]},"allowEmptyValue":true,"allowReserved":true},{"name":"direction","in":"query","schema":{"enum":["asc","desc"],"type":"string","description":"Sort direction for promoter lists. Defaults to `desc` when omitted.","examples":["desc"]},"allowEmptyValue":true,"allowReserved":true},{"name":"limit","in":"query","schema":{"type":"number","minimum":1,"maximum":100,"default":20,"description":"Maximum number of promoters to return (1-100, defaults to 20)","examples":[20]},"allowEmptyValue":true,"allowReserved":true},{"name":"cursor","in":"query","schema":{"type":"string","description":"Opaque cursor for pagination. Use the cursor from the previous response to continue fetching results.","examples":["eyJpZCI6InByb18wMWpxcGprc25zZW45dnBydzk1ZXQ2MHQybSJ9"]},"allowEmptyValue":true,"allowReserved":true}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"object","properties":{"promoters":{"type":"array","items":{"$ref":"#/components/schemas/Promoter"},"description":"Array of promoters for the current result set"},"before":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Cursor for navigating backward in the result set. Omitted when there are no prior results.","examples":["eyJ2ZXJzaW9uIjoxLCJpbnRlbnQiOnsic291cmNlIjoiZGVtbyJ9LCJwb3MiOnsicHJpbWFyeUtleSI6InBybV8wMXM4NTNqIn19"]},"after":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Cursor for navigating forward in the result set. Omitted when there are no subsequent results.","examples":["eyJ2ZXJzaW9uIjoxLCJpbnRlbnQiOnsic291cmNlIjoiZGVtbyJ9LCJwb3MiOnsicHJpbWFyeUtleSI6InBybV8wMXM4NTNkIn19"]},"limit":{"type":"number","minimum":1,"description":"Maximum number of items to return in each result set","examples":[20]}},"required":["promoters","limit"]}}}}}},"post":{"operationId":"promoter.create","summary":"Create a new promoter","description":"Create a new promoter brand within a team","tags":["Promoters"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"name":{"type":"string","minLength":3,"maxLength":30,"description":"Display name of the promoter organization. Must be between 3 and 30 characters","examples":["Session Services"]},"slug":{"type":"string","minLength":3,"maxLength":30,"description":"URL-friendly slug for the promoter organization. If not provided, will be automatically generated from the name. Must be unique and between 3 and 30 characters","examples":["session-services"]},"teamId":{"type":"string","description":"ID of the team that will own this promoter. User must be a member of this team.","examples":["tem_01jqpjksnsen9vprw95et60t2m"]},"description":{"type":"string","description":"Detailed description of the promoter organization and their events","examples":["This is only a test..."]},"image":{"type":"object","properties":{"src":{"type":"string","format":"uri","examples":["https://assets.session.services/my-image.jpg"]},"alt":{"type":"string","examples":["My Image"]},"width":{"type":"number","examples":[1080]},"height":{"type":"number","examples":[1080]}},"required":["src","alt","width","height"],"description":"Optional promotional image for the promoter organization with dimensions and alt text"},"tracking":{"type":"object","properties":{"fbId":{"type":"string","description":"Facebook pixel ID for tracking conversions and analytics","examples":["485739562847563"]},"gtmId":{"type":"string","description":"Google Tag Manager container ID for web analytics","examples":["GTM-K8WPM5N"]},"tikTokId":{"type":"string","description":"TikTok pixel ID for advertising and conversion tracking","examples":["BQCKPH3RC77U8GPMLJ5G"]}},"description":"Optional tracking configuration for analytics and advertising platforms"},"metadata":{"type":"object","propertyNames":{"type":"string","minLength":1,"maxLength":40,"description":"Metadata key. Must be 1-40 characters"},"additionalProperties":{"type":"string","maxLength":500,"description":"Metadata value. Must not exceed 500 characters"},"description":"Flexible key-value metadata storage for custom configuration. Similar to Stripe's metadata API. Maximum 50 keys, key names up to 40 characters, values up to 500 characters."},"locationId":{"type":"string","pattern":"^loc_[0-9a-z]{26}$","description":"ID of an existing location. Either locationId or googlePlaceId must be provided.","examples":["loc_01jqpjksnsen9vprw95et60t2m"]},"googlePlaceId":{"type":"string","description":"Google Place ID to create a new location from. Either locationId or googlePlaceId must be provided.","examples":["ChIJN1t_tDeuEmsRUsoyG83frY4"]}},"required":["name","teamId","description"],"additionalProperties":false}}}},"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"object","properties":{"promoter":{"$ref":"#/components/schemas/Promoter"}},"required":["promoter"]}}}}}}},"/promoters/{promoterId}/performance/summary":{"get":{"operationId":"promoter.performance.summary","summary":"Get promoter performance summary","description":"Overview KPIs for a single promoter based on tracking data (excludes entity-based data like payouts)","tags":["Promoter Performance"],"parameters":[{"name":"promoterId","in":"path","required":true,"schema":{"type":"string","description":"Promoter identifier"}},{"name":"currency","in":"query","required":false,"schema":{"type":"string","description":"Currency code for revenue metrics"},"allowEmptyValue":true,"allowReserved":true},{"name":"startDate","in":"query","required":true,"schema":{"type":"string","format":"date","description":"Start date (YYYY-MM-DD)"},"allowEmptyValue":true,"allowReserved":true},{"name":"endDate","in":"query","required":true,"schema":{"type":"string","format":"date","description":"End date (YYYY-MM-DD)"},"allowEmptyValue":true,"allowReserved":true},{"name":"timeZone","in":"query","required":false,"schema":{"type":"string","minLength":1,"maxLength":128,"description":"IANA time zone for interpreting date ranges"},"allowEmptyValue":true,"allowReserved":true}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"object","properties":{"meta":{"type":"object","properties":{"promoterId":{"type":"string","description":"Promoter identifier"},"promoterName":{"type":"string","description":"Promoter name"},"teamId":{"type":"string","description":"Team identifier"},"teamName":{"type":"string","description":"Team name"},"currency":{"type":"string","description":"Primary currency code"},"currencies":{"type":"array","items":{"type":"string"},"description":"All currencies with transactions"},"dateRange":{"type":"object","properties":{"start":{"type":"string","description":"Period start date"},"end":{"type":"string","description":"Period end date"}},"required":["start","end"]},"comparisonRange":{"type":"object","properties":{"start":{"type":"string","description":"Comparison period start date"},"end":{"type":"string","description":"Comparison period end date"}},"required":["start","end"]}},"required":["promoterId","promoterName","teamId","teamName","currency","currencies","dateRange","comparisonRange"]},"metrics":{"type":"object","properties":{"revenue":{"type":"object","properties":{"value":{"type":"number","description":"Current period value"},"previous":{"type":"number","description":"Comparison period value"},"change":{"type":"number","description":"Percentage change from previous period"},"changeType":{"enum":["increase","decrease","unchanged"],"type":"string","description":"Direction of change"}},"required":["value","previous","change","changeType"],"description":"Total revenue in cents"},"ticketsSold":{"type":"object","properties":{"value":{"type":"number","description":"Current period value"},"previous":{"type":"number","description":"Comparison period value"},"change":{"type":"number","description":"Percentage change from previous period"},"changeType":{"enum":["increase","decrease","unchanged"],"type":"string","description":"Direction of change"}},"required":["value","previous","change","changeType"],"description":"Number of tickets sold"},"averageOrderValue":{"type":"object","properties":{"value":{"type":"number","description":"Current period value"},"previous":{"type":"number","description":"Comparison period value"},"change":{"type":"number","description":"Percentage change from previous period"},"changeType":{"enum":["increase","decrease","unchanged"],"type":"string","description":"Direction of change"}},"required":["value","previous","change","changeType"],"description":"Average order value in cents"},"conversionRate":{"type":"object","properties":{"value":{"type":"number","description":"Current period value"},"previous":{"type":"number","description":"Comparison period value"},"change":{"type":"number","description":"Percentage change from previous period"},"changeType":{"enum":["increase","decrease","unchanged"],"type":"string","description":"Direction of change"}},"required":["value","previous","change","changeType"],"description":"Overall conversion rate (%)"},"activeEvents":{"type":"object","properties":{"value":{"type":"number","description":"Current period value"},"previous":{"type":"number","description":"Comparison period value"},"change":{"type":"number","description":"Percentage change from previous period"},"changeType":{"enum":["increase","decrease","unchanged"],"type":"string","description":"Direction of change"}},"required":["value","previous","change","changeType"],"description":"Number of active events in period"},"uniqueCustomers":{"type":"object","properties":{"value":{"type":"number","description":"Current period value"},"previous":{"type":"number","description":"Comparison period value"},"change":{"type":"number","description":"Percentage change from previous period"},"changeType":{"enum":["increase","decrease","unchanged"],"type":"string","description":"Direction of change"}},"required":["value","previous","change","changeType"],"description":"Unique customers (estimated)"},"orderCount":{"type":"object","properties":{"value":{"type":"number","description":"Current period value"},"previous":{"type":"number","description":"Comparison period value"},"change":{"type":"number","description":"Percentage change from previous period"},"changeType":{"enum":["increase","decrease","unchanged"],"type":"string","description":"Direction of change"}},"required":["value","previous","change","changeType"],"description":"Number of orders placed"},"pageViews":{"type":"object","properties":{"value":{"type":"number","description":"Current period value"},"previous":{"type":"number","description":"Comparison period value"},"change":{"type":"number","description":"Percentage change from previous period"},"changeType":{"enum":["increase","decrease","unchanged"],"type":"string","description":"Direction of change"}},"required":["value","previous","change","changeType"],"description":"Total page views from tracking"}},"required":["revenue","ticketsSold","averageOrderValue","conversionRate","activeEvents","uniqueCustomers","orderCount","pageViews"]}},"required":["meta","metrics"]}}}}}}},"/promoters/{promoterId}/performance/revenue":{"get":{"operationId":"promoter.performance.revenue","summary":"Get promoter revenue over time","description":"Time-series data for revenue and tickets sold for a single promoter","tags":["Promoter Performance"],"parameters":[{"name":"promoterId","in":"path","required":true,"schema":{"type":"string","description":"Promoter identifier"}},{"name":"granularity","in":"query","required":false,"schema":{"enum":["HOUR","DAY","WEEK","MONTH"],"type":"string","default":"DAY","description":"Time granularity"},"allowEmptyValue":true,"allowReserved":true},{"name":"currency","in":"query","required":false,"schema":{"type":"string","description":"Currency filter"},"allowEmptyValue":true,"allowReserved":true},{"name":"startDate","in":"query","required":true,"schema":{"type":"string","format":"date","description":"Start date (YYYY-MM-DD)"},"allowEmptyValue":true,"allowReserved":true},{"name":"endDate","in":"query","required":true,"schema":{"type":"string","format":"date","description":"End date (YYYY-MM-DD)"},"allowEmptyValue":true,"allowReserved":true},{"name":"timeZone","in":"query","required":false,"schema":{"type":"string","minLength":1,"maxLength":128,"description":"IANA time zone for interpreting date ranges"},"allowEmptyValue":true,"allowReserved":true}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"object","properties":{"meta":{"type":"object","properties":{"promoterId":{"type":"string"},"dateRange":{"type":"object","properties":{"start":{"type":"string","description":"Period start date"},"end":{"type":"string","description":"Period end date"}},"required":["start","end"]},"granularity":{"enum":["HOUR","DAY","WEEK","MONTH"],"type":"string"}},"required":["promoterId","dateRange","granularity"]},"currencies":{"type":"array","items":{"type":"object","properties":{"currency":{"type":"string","description":"Currency code (e.g., USD, EUR)"},"series":{"type":"array","items":{"type":"object","properties":{"date":{"type":"string","description":"Date (YYYY-MM-DD)"},"revenue":{"type":"number","description":"Revenue in cents"},"tickets":{"type":"number","description":"Tickets sold"}},"required":["date","revenue","tickets"]}},"totals":{"type":"object","properties":{"revenue":{"type":"number","description":"Total revenue for period in cents"},"tickets":{"type":"number","description":"Total tickets for period"}},"required":["revenue","tickets"]}},"required":["currency","series","totals"]},"description":"Time-series data grouped by currency"}},"required":["meta","currencies"]}}}}}}},"/promoters/{promoterId}/performance/events":{"get":{"operationId":"promoter.performance.events","summary":"Get promoter top events by tickets","description":"Top events by ticket count for a single promoter","tags":["Promoter Performance"],"parameters":[{"name":"promoterId","in":"path","required":true,"schema":{"type":"string","description":"Promoter identifier"}},{"name":"limit","in":"query","required":false,"schema":{"type":"number","default":5,"description":"Maximum number of events to return"},"allowEmptyValue":true,"allowReserved":true},{"name":"startDate","in":"query","required":true,"schema":{"type":"string","format":"date","description":"Start date (YYYY-MM-DD)"},"allowEmptyValue":true,"allowReserved":true},{"name":"endDate","in":"query","required":true,"schema":{"type":"string","format":"date","description":"End date (YYYY-MM-DD)"},"allowEmptyValue":true,"allowReserved":true},{"name":"timeZone","in":"query","required":false,"schema":{"type":"string","minLength":1,"maxLength":128,"description":"IANA time zone for interpreting date ranges"},"allowEmptyValue":true,"allowReserved":true}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"object","properties":{"events":{"type":"array","items":{"type":"object","properties":{"eventId":{"type":"string","description":"Event identifier"},"eventName":{"type":"string","description":"Event name"},"ticketCount":{"type":"number","description":"Number of tickets sold"},"sharePercent":{"type":"number","description":"Percentage of total tickets"}},"required":["eventId","eventName","ticketCount","sharePercent"]}},"totalTickets":{"type":"number","description":"Total tickets across all events"}},"required":["events","totalTickets"]}}}}}}},"/teams/{key}":{"get":{"operationId":"team.get","summary":"Get team by ID or slug","description":"Retrieve a team with membership details. User must be a member of the team.","tags":["Teams"],"parameters":[{"name":"key","in":"path","required":true,"schema":{"type":"string","minLength":1,"description":"Team key - either a unique ID (tem_xxx format) or URL-friendly slug","examples":["tem_01jqpjksnsen9vprw95et60t2m","session-services"]}}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"object","properties":{"team":{"type":"object","properties":{"id":{"type":"string","pattern":"^tem_[0-9a-z]{26}$","description":"Unique identifier for the team organization","readOnly":true},"createdAt":{"type":"string","format":"date-time","readOnly":true,"description":"Timestamp in ISO 8601 format when the team was created"},"updatedAt":{"type":"string","format":"date-time","readOnly":true,"description":"Timestamp in ISO 8601 format when the team was last updated"},"name":{"type":"string","minLength":3,"maxLength":30,"description":"Display name of the team organization. Must be between 3 and 30 characters"},"slug":{"type":"string","minLength":3,"maxLength":30,"description":"URL-friendly slug for the team organization. Must be unique within tenant and between 3 and 30 characters"},"supportEmail":{"type":"string","format":"email","description":"Support email address for customer inquiries. Used as reply-to address in order confirmation emails"},"publicBaseUrl":{"type":"string","format":"uri","description":"Optional public website base URL for team-owned event and order links. When present, it overrides the tenant public base URL.","examples":["https://sash.net.au"]},"image":{"type":"object","properties":{"src":{"type":"string","format":"uri","examples":["https://assets.session.services/my-image.jpg"]},"alt":{"type":"string","examples":["My Image"]},"width":{"type":"number","examples":[1080]},"height":{"type":"number","examples":[1080]}},"required":["src","alt","width","height"],"description":"Team image with dimensions and alt text for branding across the platform"},"metadata":{"type":"object","propertyNames":{"type":"string","minLength":1,"maxLength":40,"description":"Metadata key. Must be 1-40 characters"},"additionalProperties":{"type":"string","maxLength":500,"description":"Metadata value. Must not exceed 500 characters"},"description":"Flexible key-value metadata storage for custom configuration. Similar to Stripe's metadata API. Maximum 50 keys, key names up to 40 characters, values up to 500 characters."},"approval":{"enum":["PENDING","APPROVED","REJECTED"],"type":"string","description":"Approval status of the team. PENDING: awaiting review, APPROVED: can create promoters/venues/events, REJECTED: cannot operate"},"deletedAt":{"type":"string","format":"date-time","readOnly":true,"description":"Timestamp in ISO 8601 format when the team was soft deleted. Only present for deleted teams."},"tenantId":{"type":"string","readOnly":true,"description":"Tenant ID for multi-tenant isolation"},"isAdmin":{"type":"boolean","description":"Whether this team is the tenant admin team"},"gateway":{"type":"object","properties":{"provider":{"enum":["STRIPE","AIRWALLEX"],"type":"string","description":"Payment gateway provider type"},"connectedAt":{"type":"string","format":"date-time","description":"Timestamp when the payment gateway was connected to this team"},"connectedBy":{"type":"string","description":"User ID of the team member who connected the payment gateway"},"accountId":{"type":"string","description":"Connected account ID. For Stripe: acct_xxxxx. For Airwallex: business account open ID."}},"required":["provider","connectedAt","connectedBy","accountId"],"description":"Connected payment gateway for direct payouts. When connected, funds from ticket sales go directly to the team's account with platform fees deducted."},"member":{"type":"object","properties":{"id":{"type":"string","pattern":"^mbr_[0-9a-z]{26}$","description":"Current user's team member identifier for this team"},"permissions":{"type":"array","items":{"type":"string","pattern":"^-?(?:\\*|(?:[a-z][a-z0-9-]*)(?:\\.[a-z][a-z0-9-]*)*(?:\\.\\*|\\.bypass|\\.[a-z]{3}_[0-9a-z]{26})?)$","description":"Permission node in minecraft-style format. Supports exact, scoped wildcard, resource target, bypass target, and deny prefix.","examples":["team.read","team.member.write","ticket.scan","ticket.scan.*","ticket.scan.evt_01h8c3jm9zs2v6h2k9p9r8f5a1","team.gateway.connect.bypass","team.*","*","-team.gateway.write","-ticket.scan.evt_01h8c3jm9zs2v6h2k9p9r8f5a1"]},"description":"Permissions the current user has for this team. Controls access to team resources.","examples":[[],["team.read","team.write"],["team.member.read","team.member.write"],["ticket.scan"],["*"]]},"isOwner":{"type":"boolean","description":"Whether the current user is the owner of this team. Owners have full control."}},"required":["id","permissions","isOwner"],"description":"Current user's membership details for this team. Present when user is a member."}},"required":["id","createdAt","updatedAt","name","slug","approval","tenantId"]}},"required":["team"]}}}}}},"patch":{"operationId":"team.update","summary":"Update a team","description":"Update an existing team by ID or slug","tags":["Teams"],"parameters":[{"name":"key","in":"path","required":true,"schema":{"type":"string","minLength":1,"description":"Team key - either a unique ID (tem_xxx format) or URL-friendly slug","examples":["tem_01jqpjksnsen9vprw95et60t2m","session-services"]}}],"requestBody":{"required":false,"content":{"application/json":{"schema":{"type":"object","properties":{"name":{"type":"string","minLength":3,"maxLength":30,"description":"Display name of the team organization. Must be between 3 and 30 characters"},"slug":{"type":"string","minLength":3,"maxLength":30,"description":"URL-friendly slug for the team organization. Must be unique within tenant and between 3 and 30 characters"},"supportEmail":{"anyOf":[{"type":"string","format":"email"},{"type":"null"}],"description":"Support email for customer inquiries. Pass null to clear, omit to leave unchanged."},"publicBaseUrl":{"anyOf":[{"type":"string","format":"uri"},{"type":"null"}],"description":"Public website base URL for team-owned event and order links. Pass null to clear, omit to leave unchanged."},"image":{"anyOf":[{"type":"object","properties":{"src":{"type":"string","format":"uri","examples":["https://assets.session.services/my-image.jpg"]},"alt":{"type":"string","examples":["My Image"]},"width":{"type":"number","examples":[1080]},"height":{"type":"number","examples":[1080]}},"required":["src","alt","width","height"]},{"type":"null"}],"description":"Team image. Pass null to clear, omit to leave unchanged."},"metadata":{"type":"object","propertyNames":{"type":"string","minLength":1,"maxLength":40,"description":"Metadata key. Must be 1-40 characters"},"additionalProperties":{"type":"string","maxLength":500,"description":"Metadata value. Must not exceed 500 characters"},"description":"Flexible key-value metadata storage for custom configuration. Similar to Stripe's metadata API. Maximum 50 keys, key names up to 40 characters, values up to 500 characters."},"approval":{"enum":["PENDING","APPROVED","REJECTED"],"type":"string","description":"Approval status of the team. PENDING: awaiting review, APPROVED: can create promoters/venues/events, REJECTED: cannot operate"},"deletedAt":{"type":"string","format":"date-time","readOnly":true,"description":"Timestamp in ISO 8601 format when the team was soft deleted. Only present for deleted teams."},"isAdmin":{"type":"boolean","description":"Whether this team is the admin team for the tenant"},"gateway":{"type":"object","properties":{"provider":{"enum":["STRIPE","AIRWALLEX"],"type":"string","description":"Payment gateway provider type"},"connectedAt":{"type":"string","format":"date-time","description":"Timestamp when the payment gateway was connected to this team"},"connectedBy":{"type":"string","description":"User ID of the team member who connected the payment gateway"},"accountId":{"type":"string","description":"Connected account ID. For Stripe: acct_xxxxx. For Airwallex: business account open ID."}},"required":["provider","connectedAt","connectedBy","accountId"],"description":"Connected payment gateway for direct payouts. When connected, funds from ticket sales go directly to the team's account with platform fees deducted."}},"additionalProperties":false}}}},"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"object","properties":{"team":{"type":"object","properties":{"id":{"type":"string","pattern":"^tem_[0-9a-z]{26}$","description":"Unique identifier for the team organization","readOnly":true},"createdAt":{"type":"string","format":"date-time","readOnly":true,"description":"Timestamp in ISO 8601 format when the team was created"},"updatedAt":{"type":"string","format":"date-time","readOnly":true,"description":"Timestamp in ISO 8601 format when the team was last updated"},"name":{"type":"string","minLength":3,"maxLength":30,"description":"Display name of the team organization. Must be between 3 and 30 characters"},"slug":{"type":"string","minLength":3,"maxLength":30,"description":"URL-friendly slug for the team organization. Must be unique within tenant and between 3 and 30 characters"},"supportEmail":{"type":"string","format":"email","description":"Support email address for customer inquiries. Used as reply-to address in order confirmation emails"},"publicBaseUrl":{"type":"string","format":"uri","description":"Optional public website base URL for team-owned event and order links. When present, it overrides the tenant public base URL.","examples":["https://sash.net.au"]},"image":{"type":"object","properties":{"src":{"type":"string","format":"uri","examples":["https://assets.session.services/my-image.jpg"]},"alt":{"type":"string","examples":["My Image"]},"width":{"type":"number","examples":[1080]},"height":{"type":"number","examples":[1080]}},"required":["src","alt","width","height"],"description":"Team image with dimensions and alt text for branding across the platform"},"metadata":{"type":"object","propertyNames":{"type":"string","minLength":1,"maxLength":40,"description":"Metadata key. Must be 1-40 characters"},"additionalProperties":{"type":"string","maxLength":500,"description":"Metadata value. Must not exceed 500 characters"},"description":"Flexible key-value metadata storage for custom configuration. Similar to Stripe's metadata API. Maximum 50 keys, key names up to 40 characters, values up to 500 characters."},"approval":{"enum":["PENDING","APPROVED","REJECTED"],"type":"string","description":"Approval status of the team. PENDING: awaiting review, APPROVED: can create promoters/venues/events, REJECTED: cannot operate"},"deletedAt":{"type":"string","format":"date-time","readOnly":true,"description":"Timestamp in ISO 8601 format when the team was soft deleted. Only present for deleted teams."},"tenantId":{"type":"string","readOnly":true,"description":"Tenant ID for multi-tenant isolation"},"isAdmin":{"type":"boolean","description":"Whether this team is the tenant admin team"},"gateway":{"type":"object","properties":{"provider":{"enum":["STRIPE","AIRWALLEX"],"type":"string","description":"Payment gateway provider type"},"connectedAt":{"type":"string","format":"date-time","description":"Timestamp when the payment gateway was connected to this team"},"connectedBy":{"type":"string","description":"User ID of the team member who connected the payment gateway"},"accountId":{"type":"string","description":"Connected account ID. For Stripe: acct_xxxxx. For Airwallex: business account open ID."}},"required":["provider","connectedAt","connectedBy","accountId"],"description":"Connected payment gateway for direct payouts. When connected, funds from ticket sales go directly to the team's account with platform fees deducted."},"member":{"type":"object","properties":{"id":{"type":"string","pattern":"^mbr_[0-9a-z]{26}$","description":"Current user's team member identifier for this team"},"permissions":{"type":"array","items":{"type":"string","pattern":"^-?(?:\\*|(?:[a-z][a-z0-9-]*)(?:\\.[a-z][a-z0-9-]*)*(?:\\.\\*|\\.bypass|\\.[a-z]{3}_[0-9a-z]{26})?)$","description":"Permission node in minecraft-style format. Supports exact, scoped wildcard, resource target, bypass target, and deny prefix.","examples":["team.read","team.member.write","ticket.scan","ticket.scan.*","ticket.scan.evt_01h8c3jm9zs2v6h2k9p9r8f5a1","team.gateway.connect.bypass","team.*","*","-team.gateway.write","-ticket.scan.evt_01h8c3jm9zs2v6h2k9p9r8f5a1"]},"description":"Permissions the current user has for this team. Controls access to team resources.","examples":[[],["team.read","team.write"],["team.member.read","team.member.write"],["ticket.scan"],["*"]]},"isOwner":{"type":"boolean","description":"Whether the current user is the owner of this team. Owners have full control."}},"required":["id","permissions","isOwner"],"description":"Current user's membership details for this team. Present when user is a member."}},"required":["id","createdAt","updatedAt","name","slug","approval","tenantId"]}},"required":["team"]}}}}}},"delete":{"operationId":"team.remove","summary":"Delete a team","description":"Soft delete a team by ID or slug","tags":["Teams"],"parameters":[{"name":"key","in":"path","required":true,"schema":{"type":"string","minLength":1,"description":"Team key - either a unique ID (tem_xxx format) or URL-friendly slug","examples":["tem_01jqpjksnsen9vprw95et60t2m","session-services"]}}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"object","properties":{"team":{"type":"object","properties":{"id":{"type":"string","pattern":"^tem_[0-9a-z]{26}$","description":"Unique identifier for the team organization","readOnly":true},"createdAt":{"type":"string","format":"date-time","readOnly":true,"description":"Timestamp in ISO 8601 format when the team was created"},"updatedAt":{"type":"string","format":"date-time","readOnly":true,"description":"Timestamp in ISO 8601 format when the team was last updated"},"name":{"type":"string","minLength":3,"maxLength":30,"description":"Display name of the team organization. Must be between 3 and 30 characters"},"slug":{"type":"string","minLength":3,"maxLength":30,"description":"URL-friendly slug for the team organization. Must be unique within tenant and between 3 and 30 characters"},"supportEmail":{"type":"string","format":"email","description":"Support email address for customer inquiries. Used as reply-to address in order confirmation emails"},"publicBaseUrl":{"type":"string","format":"uri","description":"Optional public website base URL for team-owned event and order links. When present, it overrides the tenant public base URL.","examples":["https://sash.net.au"]},"image":{"type":"object","properties":{"src":{"type":"string","format":"uri","examples":["https://assets.session.services/my-image.jpg"]},"alt":{"type":"string","examples":["My Image"]},"width":{"type":"number","examples":[1080]},"height":{"type":"number","examples":[1080]}},"required":["src","alt","width","height"],"description":"Team image with dimensions and alt text for branding across the platform"},"metadata":{"type":"object","propertyNames":{"type":"string","minLength":1,"maxLength":40,"description":"Metadata key. Must be 1-40 characters"},"additionalProperties":{"type":"string","maxLength":500,"description":"Metadata value. Must not exceed 500 characters"},"description":"Flexible key-value metadata storage for custom configuration. Similar to Stripe's metadata API. Maximum 50 keys, key names up to 40 characters, values up to 500 characters."},"approval":{"enum":["PENDING","APPROVED","REJECTED"],"type":"string","description":"Approval status of the team. PENDING: awaiting review, APPROVED: can create promoters/venues/events, REJECTED: cannot operate"},"deletedAt":{"type":"string","format":"date-time","readOnly":true,"description":"Timestamp in ISO 8601 format when the team was soft deleted. Only present for deleted teams."},"tenantId":{"type":"string","readOnly":true,"description":"Tenant ID for multi-tenant isolation"},"isAdmin":{"type":"boolean","description":"Whether this team is the tenant admin team"},"gateway":{"type":"object","properties":{"provider":{"enum":["STRIPE","AIRWALLEX"],"type":"string","description":"Payment gateway provider type"},"connectedAt":{"type":"string","format":"date-time","description":"Timestamp when the payment gateway was connected to this team"},"connectedBy":{"type":"string","description":"User ID of the team member who connected the payment gateway"},"accountId":{"type":"string","description":"Connected account ID. For Stripe: acct_xxxxx. For Airwallex: business account open ID."}},"required":["provider","connectedAt","connectedBy","accountId"],"description":"Connected payment gateway for direct payouts. When connected, funds from ticket sales go directly to the team's account with platform fees deducted."},"member":{"type":"object","properties":{"id":{"type":"string","pattern":"^mbr_[0-9a-z]{26}$","description":"Current user's team member identifier for this team"},"permissions":{"type":"array","items":{"type":"string","pattern":"^-?(?:\\*|(?:[a-z][a-z0-9-]*)(?:\\.[a-z][a-z0-9-]*)*(?:\\.\\*|\\.bypass|\\.[a-z]{3}_[0-9a-z]{26})?)$","description":"Permission node in minecraft-style format. Supports exact, scoped wildcard, resource target, bypass target, and deny prefix.","examples":["team.read","team.member.write","ticket.scan","ticket.scan.*","ticket.scan.evt_01h8c3jm9zs2v6h2k9p9r8f5a1","team.gateway.connect.bypass","team.*","*","-team.gateway.write","-ticket.scan.evt_01h8c3jm9zs2v6h2k9p9r8f5a1"]},"description":"Permissions the current user has for this team. Controls access to team resources.","examples":[[],["team.read","team.write"],["team.member.read","team.member.write"],["ticket.scan"],["*"]]},"isOwner":{"type":"boolean","description":"Whether the current user is the owner of this team. Owners have full control."}},"required":["id","permissions","isOwner"],"description":"Current user's membership details for this team. Present when user is a member."}},"required":["id","createdAt","updatedAt","name","slug","approval","tenantId"]}},"required":["team"]}}}}}}},"/teams":{"get":{"operationId":"team.list","summary":"List teams with cursor-based pagination","description":"Returns teams the current user has access to with cursor pagination","tags":["Teams"],"parameters":[{"name":"userId","in":"query","schema":{"type":"string","pattern":"^usr_[0-9a-z]{26}$","description":"Filter teams by user membership. If omitted, returns all teams (tenant admin only). If provided, returns teams where the specified user is a member"},"allowEmptyValue":true,"allowReserved":true},{"name":"approval","in":"query","schema":{"enum":["PENDING","APPROVED","REJECTED"],"type":"string","description":"Filter teams by approval status. PENDING: awaiting review, APPROVED: can operate, REJECTED: cannot operate"},"allowEmptyValue":true,"allowReserved":true},{"name":"query","in":"query","schema":{"type":"string","description":"Optional search query for filtering teams by name or slug"},"allowEmptyValue":true,"allowReserved":true},{"name":"sort","in":"query","schema":{"enum":["createdAt"],"type":"string","description":"Optional list sort field. Use `createdAt` to return newest or oldest teams first.","examples":["createdAt"]},"allowEmptyValue":true,"allowReserved":true},{"name":"direction","in":"query","schema":{"enum":["asc","desc"],"type":"string","description":"Sort direction for team lists. Defaults to `desc` when `sort` is provided.","examples":["desc"]},"allowEmptyValue":true,"allowReserved":true},{"name":"limit","in":"query","schema":{"type":"integer","minimum":1,"maximum":100,"default":20,"description":"Maximum number of teams to return per request (1-100, default: 20)","examples":[20]},"allowEmptyValue":true,"allowReserved":true},{"name":"cursor","in":"query","schema":{"type":"string","description":"Pagination cursor from previous response. Used to fetch next page of results"},"allowEmptyValue":true,"allowReserved":true}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"object","properties":{"teams":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string","pattern":"^tem_[0-9a-z]{26}$","description":"Unique identifier for the team organization","readOnly":true},"createdAt":{"type":"string","format":"date-time","readOnly":true,"description":"Timestamp in ISO 8601 format when the team was created"},"updatedAt":{"type":"string","format":"date-time","readOnly":true,"description":"Timestamp in ISO 8601 format when the team was last updated"},"name":{"type":"string","minLength":3,"maxLength":30,"description":"Display name of the team organization. Must be between 3 and 30 characters"},"slug":{"type":"string","minLength":3,"maxLength":30,"description":"URL-friendly slug for the team organization. Must be unique within tenant and between 3 and 30 characters"},"supportEmail":{"type":"string","format":"email","description":"Support email address for customer inquiries. Used as reply-to address in order confirmation emails"},"publicBaseUrl":{"type":"string","format":"uri","description":"Optional public website base URL for team-owned event and order links. When present, it overrides the tenant public base URL.","examples":["https://sash.net.au"]},"image":{"type":"object","properties":{"src":{"type":"string","format":"uri","examples":["https://assets.session.services/my-image.jpg"]},"alt":{"type":"string","examples":["My Image"]},"width":{"type":"number","examples":[1080]},"height":{"type":"number","examples":[1080]}},"required":["src","alt","width","height"],"description":"Team image with dimensions and alt text for branding across the platform"},"metadata":{"type":"object","propertyNames":{"type":"string","minLength":1,"maxLength":40,"description":"Metadata key. Must be 1-40 characters"},"additionalProperties":{"type":"string","maxLength":500,"description":"Metadata value. Must not exceed 500 characters"},"description":"Flexible key-value metadata storage for custom configuration. Similar to Stripe's metadata API. Maximum 50 keys, key names up to 40 characters, values up to 500 characters."},"approval":{"enum":["PENDING","APPROVED","REJECTED"],"type":"string","description":"Approval status of the team. PENDING: awaiting review, APPROVED: can create promoters/venues/events, REJECTED: cannot operate"},"deletedAt":{"type":"string","format":"date-time","readOnly":true,"description":"Timestamp in ISO 8601 format when the team was soft deleted. Only present for deleted teams."},"tenantId":{"type":"string","readOnly":true,"description":"Tenant ID for multi-tenant isolation"},"isAdmin":{"type":"boolean","description":"Whether this team is the admin team for the tenant"},"gateway":{"type":"object","properties":{"provider":{"enum":["STRIPE","AIRWALLEX"],"type":"string","description":"Payment gateway provider type"},"connectedAt":{"type":"string","format":"date-time","description":"Timestamp when the payment gateway was connected to this team"},"connectedBy":{"type":"string","description":"User ID of the team member who connected the payment gateway"},"accountId":{"type":"string","description":"Connected account ID. For Stripe: acct_xxxxx. For Airwallex: business account open ID."}},"required":["provider","connectedAt","connectedBy","accountId"],"description":"Connected payment gateway for direct payouts. When connected, funds from ticket sales go directly to the team's account with platform fees deducted."},"member":{"type":"object","properties":{"id":{"type":"string","pattern":"^mbr_[0-9a-z]{26}$","description":"Current user's team member identifier for this team"},"permissions":{"type":"array","items":{"type":"string","pattern":"^-?(?:\\*|(?:[a-z][a-z0-9-]*)(?:\\.[a-z][a-z0-9-]*)*(?:\\.\\*|\\.bypass|\\.[a-z]{3}_[0-9a-z]{26})?)$","description":"Permission node in minecraft-style format. Supports exact, scoped wildcard, resource target, bypass target, and deny prefix.","examples":["team.read","team.member.write","ticket.scan","ticket.scan.*","ticket.scan.evt_01h8c3jm9zs2v6h2k9p9r8f5a1","team.gateway.connect.bypass","team.*","*","-team.gateway.write","-ticket.scan.evt_01h8c3jm9zs2v6h2k9p9r8f5a1"]},"description":"Permissions the current user has for this team. Controls access to team resources.","examples":[[],["team.read","team.write"],["team.member.read","team.member.write"],["ticket.scan"],["*"]]},"isOwner":{"type":"boolean","description":"Whether the current user is the owner of this team. Owners have full control."}},"required":["id","permissions","isOwner"],"description":"Current user's membership details for this team. Present when user is a member."}},"required":["id","createdAt","updatedAt","name","slug","approval","tenantId"],"description":"Team organization with the current user's membership details"},"description":"Array of teams for the current result set"},"before":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Cursor for navigating backward in the result set. Omitted when there are no prior results.","examples":["eyJ2ZXJzaW9uIjoxLCJpbnRlbnQiOnsic291cmNlIjoiZGVtbyJ9LCJwb3MiOnsicHJpbWFyeUtleSI6InBybV8wMXM4NTNqIn19"]},"after":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Cursor for navigating forward in the result set. Omitted when there are no subsequent results.","examples":["eyJ2ZXJzaW9uIjoxLCJpbnRlbnQiOnsic291cmNlIjoiZGVtbyJ9LCJwb3MiOnsicHJpbWFyeUtleSI6InBybV8wMXM4NTNkIn19"]},"limit":{"type":"number","minimum":1,"description":"Maximum number of items to return in each result set","examples":[20]}},"required":["teams","limit"]}}}}}},"post":{"operationId":"team.create","summary":"Create a new team","description":"Create a new team organization","tags":["Teams"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"name":{"type":"string","minLength":3,"maxLength":30,"description":"Display name of the team organization. Must be between 3 and 30 characters"},"slug":{"type":"string","minLength":3,"maxLength":30,"description":"URL-friendly slug for the team organization. If not provided, will be automatically generated from the name. Must be unique within tenant and between 3 and 30 characters"},"supportEmail":{"type":"string","format":"email","description":"Support email address for customer inquiries. Used as reply-to address in order confirmation emails"},"publicBaseUrl":{"type":"string","format":"uri","description":"Optional public website base URL for team-owned event and order links. When present, it overrides the tenant public base URL.","examples":["https://sash.net.au"]},"image":{"type":"object","properties":{"src":{"type":"string","format":"uri","examples":["https://assets.session.services/my-image.jpg"]},"alt":{"type":"string","examples":["My Image"]},"width":{"type":"number","examples":[1080]},"height":{"type":"number","examples":[1080]}},"required":["src","alt","width","height"],"description":"Team image with dimensions and alt text for branding across the platform"},"metadata":{"type":"object","propertyNames":{"type":"string","minLength":1,"maxLength":40,"description":"Metadata key. Must be 1-40 characters"},"additionalProperties":{"type":"string","maxLength":500,"description":"Metadata value. Must not exceed 500 characters"},"description":"Flexible key-value metadata storage for custom configuration. Similar to Stripe's metadata API. Maximum 50 keys, key names up to 40 characters, values up to 500 characters."},"approval":{"enum":["PENDING","APPROVED","REJECTED"],"type":"string","description":"Approval status of the team. Defaults to PENDING if not specified."},"isAdmin":{"type":"boolean","description":"Whether this team is the admin team for the tenant"},"gateway":{"type":"object","properties":{"provider":{"enum":["STRIPE","AIRWALLEX"],"type":"string","description":"Payment gateway provider type"},"connectedAt":{"type":"string","format":"date-time","description":"Timestamp when the payment gateway was connected to this team"},"connectedBy":{"type":"string","description":"User ID of the team member who connected the payment gateway"},"accountId":{"type":"string","description":"Connected account ID. For Stripe: acct_xxxxx. For Airwallex: business account open ID."}},"required":["provider","connectedAt","connectedBy","accountId"],"description":"Connected payment gateway for direct payouts. When connected, funds from ticket sales go directly to the team's account with platform fees deducted."}},"required":["name"],"additionalProperties":false}}}},"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"object","properties":{"team":{"type":"object","properties":{"id":{"type":"string","pattern":"^tem_[0-9a-z]{26}$","description":"Unique identifier for the team organization","readOnly":true},"createdAt":{"type":"string","format":"date-time","readOnly":true,"description":"Timestamp in ISO 8601 format when the team was created"},"updatedAt":{"type":"string","format":"date-time","readOnly":true,"description":"Timestamp in ISO 8601 format when the team was last updated"},"name":{"type":"string","minLength":3,"maxLength":30,"description":"Display name of the team organization. Must be between 3 and 30 characters"},"slug":{"type":"string","minLength":3,"maxLength":30,"description":"URL-friendly slug for the team organization. Must be unique within tenant and between 3 and 30 characters"},"supportEmail":{"type":"string","format":"email","description":"Support email address for customer inquiries. Used as reply-to address in order confirmation emails"},"publicBaseUrl":{"type":"string","format":"uri","description":"Optional public website base URL for team-owned event and order links. When present, it overrides the tenant public base URL.","examples":["https://sash.net.au"]},"image":{"type":"object","properties":{"src":{"type":"string","format":"uri","examples":["https://assets.session.services/my-image.jpg"]},"alt":{"type":"string","examples":["My Image"]},"width":{"type":"number","examples":[1080]},"height":{"type":"number","examples":[1080]}},"required":["src","alt","width","height"],"description":"Team image with dimensions and alt text for branding across the platform"},"metadata":{"type":"object","propertyNames":{"type":"string","minLength":1,"maxLength":40,"description":"Metadata key. Must be 1-40 characters"},"additionalProperties":{"type":"string","maxLength":500,"description":"Metadata value. Must not exceed 500 characters"},"description":"Flexible key-value metadata storage for custom configuration. Similar to Stripe's metadata API. Maximum 50 keys, key names up to 40 characters, values up to 500 characters."},"approval":{"enum":["PENDING","APPROVED","REJECTED"],"type":"string","description":"Approval status of the team. PENDING: awaiting review, APPROVED: can create promoters/venues/events, REJECTED: cannot operate"},"deletedAt":{"type":"string","format":"date-time","readOnly":true,"description":"Timestamp in ISO 8601 format when the team was soft deleted. Only present for deleted teams."},"tenantId":{"type":"string","readOnly":true,"description":"Tenant ID for multi-tenant isolation"},"isAdmin":{"type":"boolean","description":"Whether this team is the tenant admin team"},"gateway":{"type":"object","properties":{"provider":{"enum":["STRIPE","AIRWALLEX"],"type":"string","description":"Payment gateway provider type"},"connectedAt":{"type":"string","format":"date-time","description":"Timestamp when the payment gateway was connected to this team"},"connectedBy":{"type":"string","description":"User ID of the team member who connected the payment gateway"},"accountId":{"type":"string","description":"Connected account ID. For Stripe: acct_xxxxx. For Airwallex: business account open ID."}},"required":["provider","connectedAt","connectedBy","accountId"],"description":"Connected payment gateway for direct payouts. When connected, funds from ticket sales go directly to the team's account with platform fees deducted."},"member":{"type":"object","properties":{"id":{"type":"string","pattern":"^mbr_[0-9a-z]{26}$","description":"Current user's team member identifier for this team"},"permissions":{"type":"array","items":{"type":"string","pattern":"^-?(?:\\*|(?:[a-z][a-z0-9-]*)(?:\\.[a-z][a-z0-9-]*)*(?:\\.\\*|\\.bypass|\\.[a-z]{3}_[0-9a-z]{26})?)$","description":"Permission node in minecraft-style format. Supports exact, scoped wildcard, resource target, bypass target, and deny prefix.","examples":["team.read","team.member.write","ticket.scan","ticket.scan.*","ticket.scan.evt_01h8c3jm9zs2v6h2k9p9r8f5a1","team.gateway.connect.bypass","team.*","*","-team.gateway.write","-ticket.scan.evt_01h8c3jm9zs2v6h2k9p9r8f5a1"]},"description":"Permissions the current user has for this team. Controls access to team resources.","examples":[[],["team.read","team.write"],["team.member.read","team.member.write"],["ticket.scan"],["*"]]},"isOwner":{"type":"boolean","description":"Whether the current user is the owner of this team. Owners have full control."}},"required":["id","permissions","isOwner"],"description":"Current user's membership details for this team. Present when user is a member."}},"required":["id","createdAt","updatedAt","name","slug","approval","tenantId"]}},"required":["team"]}}}}}}},"/teams/{teamId}/performance/summary":{"get":{"operationId":"team.performance.summary","summary":"Get team performance summary","description":"Overview KPIs aggregated across all promoters in the team, based on tracking data (excludes entity-based data like payouts)","tags":["Team Performance"],"parameters":[{"name":"teamId","in":"path","required":true,"schema":{"type":"string","description":"Team identifier"}},{"name":"currency","in":"query","required":false,"schema":{"type":"string","description":"Currency code for revenue metrics"},"allowEmptyValue":true,"allowReserved":true},{"name":"startDate","in":"query","required":true,"schema":{"type":"string","format":"date","description":"Start date (YYYY-MM-DD)"},"allowEmptyValue":true,"allowReserved":true},{"name":"endDate","in":"query","required":true,"schema":{"type":"string","format":"date","description":"End date (YYYY-MM-DD)"},"allowEmptyValue":true,"allowReserved":true},{"name":"timeZone","in":"query","required":false,"schema":{"type":"string","minLength":1,"maxLength":128,"description":"IANA time zone for interpreting date ranges"},"allowEmptyValue":true,"allowReserved":true}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"object","properties":{"meta":{"type":"object","properties":{"teamId":{"type":"string","description":"Team identifier"},"teamName":{"type":"string","description":"Team name"},"currency":{"type":"string","description":"Primary currency code"},"currencies":{"type":"array","items":{"type":"string"},"description":"All currencies with transactions"},"dateRange":{"type":"object","properties":{"start":{"type":"string","description":"Period start date"},"end":{"type":"string","description":"Period end date"}},"required":["start","end"]},"comparisonRange":{"type":"object","properties":{"start":{"type":"string","description":"Comparison period start date"},"end":{"type":"string","description":"Comparison period end date"}},"required":["start","end"]}},"required":["teamId","teamName","currency","currencies","dateRange","comparisonRange"]},"metrics":{"type":"object","properties":{"revenue":{"type":"object","properties":{"value":{"type":"number","description":"Current period value"},"previous":{"type":"number","description":"Comparison period value"},"change":{"type":"number","description":"Percentage change from previous period"},"changeType":{"enum":["increase","decrease","unchanged"],"type":"string","description":"Direction of change"}},"required":["value","previous","change","changeType"],"description":"Total revenue in cents"},"ticketsSold":{"type":"object","properties":{"value":{"type":"number","description":"Current period value"},"previous":{"type":"number","description":"Comparison period value"},"change":{"type":"number","description":"Percentage change from previous period"},"changeType":{"enum":["increase","decrease","unchanged"],"type":"string","description":"Direction of change"}},"required":["value","previous","change","changeType"],"description":"Number of tickets sold"},"averageOrderValue":{"type":"object","properties":{"value":{"type":"number","description":"Current period value"},"previous":{"type":"number","description":"Comparison period value"},"change":{"type":"number","description":"Percentage change from previous period"},"changeType":{"enum":["increase","decrease","unchanged"],"type":"string","description":"Direction of change"}},"required":["value","previous","change","changeType"],"description":"Average order value in cents"},"conversionRate":{"type":"object","properties":{"value":{"type":"number","description":"Current period value"},"previous":{"type":"number","description":"Comparison period value"},"change":{"type":"number","description":"Percentage change from previous period"},"changeType":{"enum":["increase","decrease","unchanged"],"type":"string","description":"Direction of change"}},"required":["value","previous","change","changeType"],"description":"Overall conversion rate (%)"},"activeEvents":{"type":"object","properties":{"value":{"type":"number","description":"Current period value"},"previous":{"type":"number","description":"Comparison period value"},"change":{"type":"number","description":"Percentage change from previous period"},"changeType":{"enum":["increase","decrease","unchanged"],"type":"string","description":"Direction of change"}},"required":["value","previous","change","changeType"],"description":"Number of active events in period"},"uniqueCustomers":{"type":"object","properties":{"value":{"type":"number","description":"Current period value"},"previous":{"type":"number","description":"Comparison period value"},"change":{"type":"number","description":"Percentage change from previous period"},"changeType":{"enum":["increase","decrease","unchanged"],"type":"string","description":"Direction of change"}},"required":["value","previous","change","changeType"],"description":"Unique customers (estimated)"},"orderCount":{"type":"object","properties":{"value":{"type":"number","description":"Current period value"},"previous":{"type":"number","description":"Comparison period value"},"change":{"type":"number","description":"Percentage change from previous period"},"changeType":{"enum":["increase","decrease","unchanged"],"type":"string","description":"Direction of change"}},"required":["value","previous","change","changeType"],"description":"Number of orders placed"},"pageViews":{"type":"object","properties":{"value":{"type":"number","description":"Current period value"},"previous":{"type":"number","description":"Comparison period value"},"change":{"type":"number","description":"Percentage change from previous period"},"changeType":{"enum":["increase","decrease","unchanged"],"type":"string","description":"Direction of change"}},"required":["value","previous","change","changeType"],"description":"Total page views from tracking"}},"required":["revenue","ticketsSold","averageOrderValue","conversionRate","activeEvents","uniqueCustomers","orderCount","pageViews"]}},"required":["meta","metrics"]}}}}}}},"/teams/{teamId}/performance/revenue":{"get":{"operationId":"team.performance.revenue","summary":"Get team revenue over time","description":"Time-series data for revenue and tickets sold aggregated across all promoters in the team","tags":["Team Performance"],"parameters":[{"name":"teamId","in":"path","required":true,"schema":{"type":"string","description":"Team identifier"}},{"name":"granularity","in":"query","required":false,"schema":{"enum":["HOUR","DAY","WEEK","MONTH"],"type":"string","default":"DAY","description":"Time granularity"},"allowEmptyValue":true,"allowReserved":true},{"name":"currency","in":"query","required":false,"schema":{"type":"string","description":"Currency filter"},"allowEmptyValue":true,"allowReserved":true},{"name":"startDate","in":"query","required":true,"schema":{"type":"string","format":"date","description":"Start date (YYYY-MM-DD)"},"allowEmptyValue":true,"allowReserved":true},{"name":"endDate","in":"query","required":true,"schema":{"type":"string","format":"date","description":"End date (YYYY-MM-DD)"},"allowEmptyValue":true,"allowReserved":true},{"name":"timeZone","in":"query","required":false,"schema":{"type":"string","minLength":1,"maxLength":128,"description":"IANA time zone for interpreting date ranges"},"allowEmptyValue":true,"allowReserved":true}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"object","properties":{"meta":{"type":"object","properties":{"teamId":{"type":"string"},"dateRange":{"type":"object","properties":{"start":{"type":"string","description":"Period start date"},"end":{"type":"string","description":"Period end date"}},"required":["start","end"]},"granularity":{"enum":["HOUR","DAY","WEEK","MONTH"],"type":"string"}},"required":["teamId","dateRange","granularity"]},"currencies":{"type":"array","items":{"type":"object","properties":{"currency":{"type":"string","description":"Currency code (e.g., USD, EUR)"},"series":{"type":"array","items":{"type":"object","properties":{"date":{"type":"string","description":"Date (YYYY-MM-DD)"},"revenue":{"type":"number","description":"Revenue in cents"},"tickets":{"type":"number","description":"Tickets sold"},"orders":{"type":"number","description":"Orders placed"}},"required":["date","revenue","tickets","orders"]}},"totals":{"type":"object","properties":{"revenue":{"type":"number","description":"Total revenue for period in cents"},"tickets":{"type":"number","description":"Total tickets for period"},"orders":{"type":"number","description":"Total orders for period"}},"required":["revenue","tickets","orders"]}},"required":["currency","series","totals"]},"description":"Time-series data grouped by currency"}},"required":["meta","currencies"]}}}}}}},"/teams/{teamId}/performance/funnel":{"get":{"operationId":"team.performance.funnel","summary":"Get team conversion funnel","description":"Conversion funnel showing drop-off rates from product view to purchase, aggregated across all events in the team","tags":["Team Performance"],"parameters":[{"name":"teamId","in":"path","required":true,"schema":{"type":"string","description":"Team identifier"}},{"name":"startDate","in":"query","required":true,"schema":{"type":"string","format":"date","description":"Start date (YYYY-MM-DD)"},"allowEmptyValue":true,"allowReserved":true},{"name":"endDate","in":"query","required":true,"schema":{"type":"string","format":"date","description":"End date (YYYY-MM-DD)"},"allowEmptyValue":true,"allowReserved":true},{"name":"timeZone","in":"query","required":false,"schema":{"type":"string","minLength":1,"maxLength":128,"description":"IANA time zone for interpreting date ranges"},"allowEmptyValue":true,"allowReserved":true}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"object","properties":{"stages":{"type":"array","items":{"type":"object","properties":{"stageId":{"type":"string","description":"Funnel stage identifier"},"stageLabel":{"type":"string","description":"Human-readable stage name"},"count":{"type":"number","description":"Number of events at this stage"},"conversionRate":{"type":"number","description":"Conversion rate from first stage (%)"},"dropoffPercent":{"type":"number","description":"Dropoff rate from previous stage (%)"}},"required":["stageId","stageLabel","count","conversionRate","dropoffPercent"]}}},"required":["stages"]}}}}}}},"/teams/{teamId}/performance/traffic":{"get":{"operationId":"team.performance.traffic","summary":"Get team traffic sources","description":"Traffic source breakdown by campaign, medium, or source, aggregated across all events in the team","tags":["Team Performance"],"parameters":[{"name":"teamId","in":"path","required":true,"schema":{"type":"string","description":"Team identifier"}},{"name":"type","in":"query","required":true,"schema":{"enum":["campaign","medium","source"],"type":"string","description":"Dimension type to analyze"},"allowEmptyValue":true,"allowReserved":true},{"name":"limit","in":"query","required":false,"schema":{"type":"number","default":20,"description":"Maximum number of results to return"},"allowEmptyValue":true,"allowReserved":true},{"name":"startDate","in":"query","required":true,"schema":{"type":"string","format":"date","description":"Start date (YYYY-MM-DD)"},"allowEmptyValue":true,"allowReserved":true},{"name":"endDate","in":"query","required":true,"schema":{"type":"string","format":"date","description":"End date (YYYY-MM-DD)"},"allowEmptyValue":true,"allowReserved":true},{"name":"timeZone","in":"query","required":false,"schema":{"type":"string","minLength":1,"maxLength":128,"description":"IANA time zone for interpreting date ranges"},"allowEmptyValue":true,"allowReserved":true}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"object","properties":{"dimensionType":{"enum":["campaign","medium","source"],"type":"string","description":"The dimension type analyzed"},"data":{"type":"array","items":{"type":"object","properties":{"dimensionValue":{"type":"string","description":"The dimension value (e.g., campaign name)"},"dimensionLabel":{"type":"string","description":"Human-readable label"},"views":{"type":"number","description":"Total page views"},"conversions":{"type":"number","description":"Total conversions (orders)"},"conversionRate":{"type":"number","description":"Conversion rate (%)"},"sharePercent":{"type":"number","description":"Share of total conversions (%)"}},"required":["dimensionValue","dimensionLabel","views","conversions","conversionRate","sharePercent"]}},"totalConversions":{"type":"number","description":"Total conversions across all dimensions"}},"required":["dimensionType","data","totalConversions"]}}}}}}},"/teams/{teamId}/performance/insights":{"get":{"operationId":"team.performance.insights","summary":"Get team performance insights","description":"Order-backed revenue, tickets, refund, and dispute totals for an exact time window","tags":["Team Performance"],"parameters":[{"name":"teamId","in":"path","required":true,"schema":{"type":"string","description":"Team identifier"}},{"name":"startAt","in":"query","required":true,"schema":{"type":"string","format":"date-time","description":"Inclusive period start timestamp"},"allowEmptyValue":true,"allowReserved":true},{"name":"endAt","in":"query","required":true,"schema":{"type":"string","format":"date-time","description":"Exclusive period end timestamp"},"allowEmptyValue":true,"allowReserved":true}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"object","properties":{"currencies":{"type":"array","items":{"type":"object","properties":{"currency":{"type":"string","description":"Currency code"},"disputedOrders":{"type":"number","description":"Orders currently marked as disputed"},"orderCount":{"type":"number","description":"Successful orders"},"refunded":{"type":"number","description":"Refunded amount in cents"},"refundCount":{"type":"number","description":"Orders with refunded value"},"refundRate":{"type":"number","description":"Refunded order rate as a percentage"},"revenue":{"type":"number","description":"Total order value in cents"},"ticketsSold":{"type":"number","description":"Tickets sold"}},"required":["currency","disputedOrders","orderCount","refunded","refundCount","refundRate","revenue","ticketsSold"]}},"comparison":{"type":"object","properties":{"totals":{"type":"object","properties":{"disputedOrders":{"type":"number","description":"Orders currently marked as disputed"},"orderCount":{"type":"number","description":"Successful orders"},"refunded":{"type":"number","description":"Refunded amount in cents"},"refundCount":{"type":"number","description":"Orders with refunded value"},"refundRate":{"type":"number","description":"Refunded order rate as a percentage"},"revenue":{"type":"number","description":"Total order value in cents"},"ticketsSold":{"type":"number","description":"Tickets sold"}},"required":["disputedOrders","orderCount","refunded","refundCount","refundRate","revenue","ticketsSold"]}},"required":["totals"]},"meta":{"type":"object","properties":{"endAt":{"type":"string","description":"Exclusive period end timestamp"},"startAt":{"type":"string","description":"Inclusive period start timestamp"},"teamId":{"type":"string","description":"Team identifier"}},"required":["endAt","startAt","teamId"]},"totals":{"type":"object","properties":{"disputedOrders":{"type":"number","description":"Orders currently marked as disputed"},"orderCount":{"type":"number","description":"Successful orders"},"refunded":{"type":"number","description":"Refunded amount in cents"},"refundCount":{"type":"number","description":"Orders with refunded value"},"refundRate":{"type":"number","description":"Refunded order rate as a percentage"},"revenue":{"type":"number","description":"Total order value in cents"},"ticketsSold":{"type":"number","description":"Tickets sold"}},"required":["disputedOrders","orderCount","refunded","refundCount","refundRate","revenue","ticketsSold"]}},"required":["currencies","comparison","meta","totals"]}}}}}}},"/teams/{teamId}/performance/payouts":{"get":{"operationId":"team.performance.payouts","summary":"Get team payout performance","description":"Upcoming and recently paid payout totals aggregated across the team","tags":["Team Performance"],"parameters":[{"name":"teamId","in":"path","required":true,"schema":{"type":"string","description":"Team identifier"}},{"name":"startDate","in":"query","schema":{"anyOf":[{"type":"string","format":"date","description":"Start date (YYYY-MM-DD)"},{"not":{}}]},"style":"deepObject","explode":true,"allowEmptyValue":true,"allowReserved":true},{"name":"endDate","in":"query","schema":{"anyOf":[{"type":"string","format":"date","description":"End date (YYYY-MM-DD)"},{"not":{}}]},"style":"deepObject","explode":true,"allowEmptyValue":true,"allowReserved":true}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"object","properties":{"upcoming":{"type":"object","properties":{"count":{"type":"number","description":"Upcoming payouts matching the request"},"pendingApproval":{"type":"number","description":"Upcoming payouts still awaiting approval"},"totals":{"type":"array","items":{"type":"object","properties":{"amount":{"type":"number","description":"Payout net amount in cents"},"count":{"type":"number","description":"Number of payouts in this currency"},"currency":{"type":"string","description":"Currency code"}},"required":["amount","count","currency"]},"description":"Upcoming payout totals by currency"},"next":{"type":"object","properties":{"amount":{"type":"number","description":"Payout net amount in cents"},"currency":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Currency code"},"dueAt":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Payout due timestamp"},"payoutId":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Payout identifier"}},"required":["amount","currency","dueAt","payoutId"]}},"required":["count","pendingApproval","totals","next"]},"lastPaid":{"type":"object","properties":{"amount":{"type":"number","description":"Payout net amount in cents"},"currency":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Currency code"},"paidAt":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Payout paid timestamp"},"payoutId":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Payout identifier"}},"required":["amount","currency","paidAt","payoutId"]}},"required":["upcoming","lastPaid"]}}}}}}},"/teams/{teamId}/performance/events":{"get":{"operationId":"team.performance.events","summary":"Get team top events by tickets","description":"Top events by ticket count, aggregated across all events in the team","tags":["Team Performance"],"parameters":[{"name":"teamId","in":"path","required":true,"schema":{"type":"string","description":"Team identifier"}},{"name":"limit","in":"query","required":false,"schema":{"type":"number","default":5,"description":"Maximum number of events to return"},"allowEmptyValue":true,"allowReserved":true},{"name":"startDate","in":"query","required":true,"schema":{"type":"string","format":"date","description":"Start date (YYYY-MM-DD)"},"allowEmptyValue":true,"allowReserved":true},{"name":"endDate","in":"query","required":true,"schema":{"type":"string","format":"date","description":"End date (YYYY-MM-DD)"},"allowEmptyValue":true,"allowReserved":true},{"name":"timeZone","in":"query","required":false,"schema":{"type":"string","minLength":1,"maxLength":128,"description":"IANA time zone for interpreting date ranges"},"allowEmptyValue":true,"allowReserved":true}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"object","properties":{"events":{"type":"array","items":{"type":"object","properties":{"eventId":{"type":"string","description":"Event identifier"},"eventName":{"type":"string","description":"Event name"},"ticketCount":{"type":"number","description":"Number of tickets sold"},"sharePercent":{"type":"number","description":"Percentage of total tickets"}},"required":["eventId","eventName","ticketCount","sharePercent"]}},"totalTickets":{"type":"number","description":"Total tickets across all events"}},"required":["events","totalTickets"]}}}}}}},"/teams/{teamId}/performance/admissions":{"get":{"operationId":"team.performance.admissions","summary":"Get team top admissions by tickets","description":"Top admission types by ticket count, aggregated across all events in the team","tags":["Team Performance"],"parameters":[{"name":"teamId","in":"path","required":true,"schema":{"type":"string","description":"Team identifier"}},{"name":"limit","in":"query","required":false,"schema":{"type":"number","default":10,"description":"Maximum number of admissions to return"},"allowEmptyValue":true,"allowReserved":true},{"name":"startDate","in":"query","required":true,"schema":{"type":"string","format":"date","description":"Start date (YYYY-MM-DD)"},"allowEmptyValue":true,"allowReserved":true},{"name":"endDate","in":"query","required":true,"schema":{"type":"string","format":"date","description":"End date (YYYY-MM-DD)"},"allowEmptyValue":true,"allowReserved":true},{"name":"timeZone","in":"query","required":false,"schema":{"type":"string","minLength":1,"maxLength":128,"description":"IANA time zone for interpreting date ranges"},"allowEmptyValue":true,"allowReserved":true}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"object","properties":{"admissions":{"type":"array","items":{"type":"object","properties":{"admissionId":{"type":"string","description":"Admission identifier"},"admissionName":{"type":"string","description":"Admission name"},"ticketCount":{"type":"number","description":"Number of tickets sold"},"sharePercent":{"type":"number","description":"Percentage of total tickets"}},"required":["admissionId","admissionName","ticketCount","sharePercent"]}},"totalTickets":{"type":"number","description":"Total tickets across all admissions"}},"required":["admissions","totalTickets"]}}}}}}},"/teams/{teamId}/performance/orders":{"get":{"operationId":"team.performance.orders","summary":"Get team orders distribution","description":"Order counts grouped by time breakdown (hour, day of week, day, week, month)","tags":["Team Performance"],"parameters":[{"name":"teamId","in":"path","required":true,"schema":{"type":"string","description":"Team identifier"}},{"name":"groupBy","in":"query","required":false,"schema":{"enum":["HOUR","DAY_OF_WEEK","DAY","WEEK","MONTH"],"type":"string","default":"HOUR","description":"Time breakdown for aggregation"},"allowEmptyValue":true,"allowReserved":true},{"name":"timeZone","in":"query","required":false,"schema":{"type":"string","minLength":1,"maxLength":128,"description":"IANA time zone for interpreting date ranges"},"allowEmptyValue":true,"allowReserved":true},{"name":"startDate","in":"query","required":true,"schema":{"type":"string","format":"date","description":"Start date (YYYY-MM-DD)"},"allowEmptyValue":true,"allowReserved":true},{"name":"endDate","in":"query","required":true,"schema":{"type":"string","format":"date","description":"End date (YYYY-MM-DD)"},"allowEmptyValue":true,"allowReserved":true}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"object","properties":{"groupBy":{"enum":["HOUR","DAY_OF_WEEK","DAY","WEEK","MONTH"],"type":"string","description":"The grouping used for aggregation"},"buckets":{"type":"array","items":{"type":"object","properties":{"key":{"anyOf":[{"type":"number"},{"type":"string"}],"description":"Bucket key (hour 0-23, day 0-6, or date string)"},"label":{"type":"string","description":"Human-readable label"},"orderCount":{"type":"number","description":"Number of orders"},"sharePercent":{"type":"number","description":"Percentage of total orders"}},"required":["key","label","orderCount","sharePercent"]}},"totalOrders":{"type":"number","description":"Total orders across all buckets"}},"required":["groupBy","buckets","totalOrders"]}}}}}}},"/teams/{teamId}/performance/tracking":{"get":{"operationId":"team.performance.tracking","summary":"Get team tracking time series","description":"Time-series tracking data (page views, add to cart, checkout, orders) aggregated at team or tenant level","tags":["Team Performance"],"parameters":[{"name":"teamId","in":"path","required":true,"schema":{"type":"string","description":"Team identifier"}},{"name":"granularity","in":"query","required":false,"schema":{"enum":["DAY","WEEK","MONTH"],"type":"string","default":"DAY","description":"Time granularity for aggregation"},"allowEmptyValue":true,"allowReserved":true},{"name":"startDate","in":"query","required":true,"schema":{"type":"string","format":"date","description":"Start date (YYYY-MM-DD)"},"allowEmptyValue":true,"allowReserved":true},{"name":"endDate","in":"query","required":true,"schema":{"type":"string","format":"date","description":"End date (YYYY-MM-DD)"},"allowEmptyValue":true,"allowReserved":true},{"name":"timeZone","in":"query","required":false,"schema":{"type":"string","minLength":1,"maxLength":128,"description":"IANA time zone for interpreting date ranges"},"allowEmptyValue":true,"allowReserved":true}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"object","properties":{"granularity":{"enum":["DAY","WEEK","MONTH"],"type":"string","description":"The granularity used"},"series":{"type":"array","items":{"type":"object","properties":{"date":{"type":"string","description":"Date key (YYYY-MM-DD, YYYY-Www, or YYYY-MM)"},"label":{"type":"string","description":"Human-readable label"},"productViewed":{"type":"number","description":"Page views"},"productAdded":{"type":"number","description":"Add to cart events"},"checkoutStarted":{"type":"number","description":"Checkout started events"},"orderCompleted":{"type":"number","description":"Completed orders"}},"required":["date","label","productViewed","productAdded","checkoutStarted","orderCompleted"]}},"totals":{"type":"object","properties":{"productViewed":{"type":"number","description":"Total page views"},"productAdded":{"type":"number","description":"Total add to cart"},"checkoutStarted":{"type":"number","description":"Total checkouts started"},"orderCompleted":{"type":"number","description":"Total orders completed"},"uniqueVisitors":{"type":"number","description":"Unique visitors (estimated via HyperLogLog, ~0.8% error)"}},"required":["productViewed","productAdded","checkoutStarted","orderCompleted","uniqueVisitors"]}},"required":["granularity","series","totals"]}}}}}}},"/teams/{key}/invites":{"get":{"operationId":"teamInvite.list","summary":"List pending team invitations with cursor-based pagination","description":"Returns pending team invitations for a specific team. Team key can be ID or slug. These are email-based invitations that have not yet been accepted.","tags":["Team Invites"],"parameters":[{"name":"key","in":"path","required":true,"schema":{"type":"string","description":"Team identifier (ID or slug)"}},{"name":"query","in":"query","schema":{"type":"string","description":"Search query to filter invitations by email. Case-insensitive partial match"},"allowEmptyValue":true,"allowReserved":true},{"name":"limit","in":"query","schema":{"type":"integer","minimum":1,"maximum":100,"default":20,"description":"Maximum number of invitations to return per page"},"allowEmptyValue":true,"allowReserved":true},{"name":"cursor","in":"query","schema":{"type":"string","description":"Pagination cursor for fetching the next page"},"allowEmptyValue":true,"allowReserved":true}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"object","properties":{"invites":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string","pattern":"^inv_[0-9a-z]{26}$","description":"Unique identifier for the team invitation","readOnly":true},"createdAt":{"type":"string","format":"date-time","readOnly":true,"description":"Timestamp in ISO 8601 format when the invitation was created"},"updatedAt":{"type":"string","format":"date-time","readOnly":true,"description":"Timestamp in ISO 8601 format when the invitation was last updated"},"teamId":{"type":"string","pattern":"^tem_[0-9a-z]{26}$","description":"Team this invitation is for"},"email":{"type":"string","format":"email","description":"Email address of the invited user. Used for sending invitation."},"permissions":{"type":"array","items":{"type":"string","pattern":"^-?(?:\\*|(?:[a-z][a-z0-9-]*)(?:\\.[a-z][a-z0-9-]*)*(?:\\.\\*|\\.bypass|\\.[a-z]{3}_[0-9a-z]{26})?)$","description":"Permission node in minecraft-style format. Supports exact, scoped wildcard, resource target, bypass target, and deny prefix.","examples":["team.read","team.member.write","ticket.scan","ticket.scan.*","ticket.scan.evt_01h8c3jm9zs2v6h2k9p9r8f5a1","team.gateway.connect.bypass","team.*","*","-team.gateway.write","-ticket.scan.evt_01h8c3jm9zs2v6h2k9p9r8f5a1"]},"description":"Permissions the user will receive upon accepting the invitation. Can be overridden per promoter or venue.","examples":[[],["event.read","event.write","order.read"],["team.member.read","team.member.write"],["ticket.scan"],["*"]]},"roleIds":{"type":"array","items":{"type":"string"},"description":"Role IDs assigned on invite acceptance. Effective permissions are role + explicit nodes."},"access":{"type":"object","properties":{"promoterIds":{"anyOf":[{"type":"array","items":{"type":"string","pattern":"^pmt_[0-9a-z]{26}$","description":"Unique promoter identifier"}},{"type":"null"}],"description":"Null means team-wide promoter access. An array means access is restricted to those promoters."}},"required":["promoterIds"],"description":"Promoter access to apply when the invitation is accepted."},"token":{"type":"string","readOnly":true,"description":"Secure token for invite acceptance. Required to accept the invitation."},"expiresAt":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991,"exclusiveMinimum":0,"description":"Unix timestamp (seconds) for DynamoDB TTL. Invitation will be automatically deleted after 7 days."},"invitedBy":{"type":"string","pattern":"^usr_[0-9a-z]{26}$","description":"User ID who sent the invitation"},"tenantId":{"type":"string","readOnly":true,"description":"Tenant ID for multi-tenant isolation"}},"required":["id","createdAt","updatedAt","teamId","email","permissions","token","expiresAt","invitedBy","tenantId"],"description":"Pending team invitation. Automatically deleted after 7 days via DynamoDB TTL. When accepted, creates a TeamMember record and deletes the invitation."},"description":"Array of invites for the current result set"},"before":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Cursor for navigating backward in the result set. Omitted when there are no prior results.","examples":["eyJ2ZXJzaW9uIjoxLCJpbnRlbnQiOnsic291cmNlIjoiZGVtbyJ9LCJwb3MiOnsicHJpbWFyeUtleSI6InBybV8wMXM4NTNqIn19"]},"after":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Cursor for navigating forward in the result set. Omitted when there are no subsequent results.","examples":["eyJ2ZXJzaW9uIjoxLCJpbnRlbnQiOnsic291cmNlIjoiZGVtbyJ9LCJwb3MiOnsicHJpbWFyeUtleSI6InBybV8wMXM4NTNkIn19"]},"limit":{"type":"number","minimum":1,"description":"Maximum number of items to return in each result set","examples":[20]}},"required":["invites","limit"]}}}}}},"post":{"operationId":"teamInvite.create","summary":"Create a team invitation","description":"Invite a user to join a team by email. Team key can be ID or slug. Creates a pending invitation with a secure token that expires in 7 days. The invited user will receive an email with an acceptance link.","tags":["Team Invites"],"parameters":[{"name":"key","in":"path","required":true,"schema":{"type":"string","description":"Team identifier (ID or slug)"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"email":{"type":"string","format":"email","description":"Email address of the user to invite"},"roleIds":{"type":"array","minItems":1,"items":{"type":"string"},"description":"Role IDs to grant to the invited user."},"access":{"type":"object","properties":{"promoterIds":{"anyOf":[{"type":"array","minItems":1,"items":{"type":"string","pattern":"^pmt_[0-9a-z]{26}$","description":"Unique promoter identifier"}},{"type":"null"}],"description":"Null grants team-wide promoter access. A non-empty array restricts access to those promoters."}},"required":["promoterIds"],"description":"Optional promoter access assignment. Omit to preserve existing team-wide behavior."}},"required":["email","roleIds"],"additionalProperties":false}}}},"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"object","properties":{"invite":{"type":"object","properties":{"id":{"type":"string","pattern":"^inv_[0-9a-z]{26}$","description":"Unique identifier for the team invitation","readOnly":true},"createdAt":{"type":"string","format":"date-time","readOnly":true,"description":"Timestamp in ISO 8601 format when the invitation was created"},"updatedAt":{"type":"string","format":"date-time","readOnly":true,"description":"Timestamp in ISO 8601 format when the invitation was last updated"},"teamId":{"type":"string","pattern":"^tem_[0-9a-z]{26}$","description":"Team this invitation is for"},"email":{"type":"string","format":"email","description":"Email address of the invited user. Used for sending invitation."},"permissions":{"type":"array","items":{"type":"string","pattern":"^-?(?:\\*|(?:[a-z][a-z0-9-]*)(?:\\.[a-z][a-z0-9-]*)*(?:\\.\\*|\\.bypass|\\.[a-z]{3}_[0-9a-z]{26})?)$","description":"Permission node in minecraft-style format. Supports exact, scoped wildcard, resource target, bypass target, and deny prefix.","examples":["team.read","team.member.write","ticket.scan","ticket.scan.*","ticket.scan.evt_01h8c3jm9zs2v6h2k9p9r8f5a1","team.gateway.connect.bypass","team.*","*","-team.gateway.write","-ticket.scan.evt_01h8c3jm9zs2v6h2k9p9r8f5a1"]},"description":"Permissions the user will receive upon accepting the invitation. Can be overridden per promoter or venue.","examples":[[],["event.read","event.write","order.read"],["team.member.read","team.member.write"],["ticket.scan"],["*"]]},"roleIds":{"type":"array","items":{"type":"string"},"description":"Role IDs assigned on invite acceptance. Effective permissions are role + explicit nodes."},"access":{"type":"object","properties":{"promoterIds":{"anyOf":[{"type":"array","items":{"type":"string","pattern":"^pmt_[0-9a-z]{26}$","description":"Unique promoter identifier"}},{"type":"null"}],"description":"Null means team-wide promoter access. An array means access is restricted to those promoters."}},"required":["promoterIds"],"description":"Promoter access to apply when the invitation is accepted."},"token":{"type":"string","readOnly":true,"description":"Secure token for invite acceptance. Required to accept the invitation."},"expiresAt":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991,"exclusiveMinimum":0,"description":"Unix timestamp (seconds) for DynamoDB TTL. Invitation will be automatically deleted after 7 days."},"invitedBy":{"type":"string","pattern":"^usr_[0-9a-z]{26}$","description":"User ID who sent the invitation"},"tenantId":{"type":"string","readOnly":true,"description":"Tenant ID for multi-tenant isolation"}},"required":["id","createdAt","updatedAt","teamId","email","permissions","token","expiresAt","invitedBy","tenantId"],"description":"Pending team invitation. Automatically deleted after 7 days via DynamoDB TTL. When accepted, creates a TeamMember record and deletes the invitation."}},"required":["invite"]}}}}}}},"/teams/{key}/invites/{inviteId}":{"get":{"operationId":"teamInvite.get","summary":"Get pending invitation by ID","description":"Retrieve a pending team invitation by its ID. Team key can be ID or slug.","tags":["Team Invites"],"parameters":[{"name":"key","in":"path","required":true,"schema":{"type":"string","description":"Team identifier (ID or slug)"}},{"name":"inviteId","in":"path","required":true,"schema":{"type":"string","pattern":"^inv_[0-9a-z]{26}$","description":"Team invite ID to retrieve"}}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"object","properties":{"invite":{"type":"object","properties":{"id":{"type":"string","pattern":"^inv_[0-9a-z]{26}$","description":"Unique identifier for the team invitation","readOnly":true},"createdAt":{"type":"string","format":"date-time","readOnly":true,"description":"Timestamp in ISO 8601 format when the invitation was created"},"updatedAt":{"type":"string","format":"date-time","readOnly":true,"description":"Timestamp in ISO 8601 format when the invitation was last updated"},"teamId":{"type":"string","pattern":"^tem_[0-9a-z]{26}$","description":"Team this invitation is for"},"email":{"type":"string","format":"email","description":"Email address of the invited user. Used for sending invitation."},"permissions":{"type":"array","items":{"type":"string","pattern":"^-?(?:\\*|(?:[a-z][a-z0-9-]*)(?:\\.[a-z][a-z0-9-]*)*(?:\\.\\*|\\.bypass|\\.[a-z]{3}_[0-9a-z]{26})?)$","description":"Permission node in minecraft-style format. Supports exact, scoped wildcard, resource target, bypass target, and deny prefix.","examples":["team.read","team.member.write","ticket.scan","ticket.scan.*","ticket.scan.evt_01h8c3jm9zs2v6h2k9p9r8f5a1","team.gateway.connect.bypass","team.*","*","-team.gateway.write","-ticket.scan.evt_01h8c3jm9zs2v6h2k9p9r8f5a1"]},"description":"Permissions the user will receive upon accepting the invitation. Can be overridden per promoter or venue.","examples":[[],["event.read","event.write","order.read"],["team.member.read","team.member.write"],["ticket.scan"],["*"]]},"roleIds":{"type":"array","items":{"type":"string"},"description":"Role IDs assigned on invite acceptance. Effective permissions are role + explicit nodes."},"access":{"type":"object","properties":{"promoterIds":{"anyOf":[{"type":"array","items":{"type":"string","pattern":"^pmt_[0-9a-z]{26}$","description":"Unique promoter identifier"}},{"type":"null"}],"description":"Null means team-wide promoter access. An array means access is restricted to those promoters."}},"required":["promoterIds"],"description":"Promoter access to apply when the invitation is accepted."},"token":{"type":"string","readOnly":true,"description":"Secure token for invite acceptance. Required to accept the invitation."},"expiresAt":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991,"exclusiveMinimum":0,"description":"Unix timestamp (seconds) for DynamoDB TTL. Invitation will be automatically deleted after 7 days."},"invitedBy":{"type":"string","pattern":"^usr_[0-9a-z]{26}$","description":"User ID who sent the invitation"},"tenantId":{"type":"string","readOnly":true,"description":"Tenant ID for multi-tenant isolation"}},"required":["id","createdAt","updatedAt","teamId","email","permissions","token","expiresAt","invitedBy","tenantId"],"description":"Pending team invitation. Automatically deleted after 7 days via DynamoDB TTL. When accepted, creates a TeamMember record and deletes the invitation."}},"required":["invite"]}}}}}},"patch":{"operationId":"teamInvite.accept","summary":"Accept a team invitation","description":"Accept a pending team invitation using the secure token. Team key can be ID or slug. This deletes the invitation and creates an active TeamMember record. Returns the newly created team member.","tags":["Team Invites"],"parameters":[{"name":"key","in":"path","required":true,"schema":{"type":"string","description":"Team identifier (ID or slug)"}},{"name":"inviteId","in":"path","required":true,"schema":{"type":"string","description":"Team invite ID to accept"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"token":{"type":"string","description":"Secure token used to accept the team invite. This token must match the one sent in the invitation email."}},"required":["token"],"additionalProperties":false}}}},"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"object","properties":{"member":{"type":"object","properties":{"id":{"type":"string","pattern":"^mbr_[0-9a-z]{26}$","description":"Unique identifier for the team member","readOnly":true},"createdAt":{"type":"string","format":"date-time","readOnly":true,"description":"Timestamp in ISO 8601 format when the member was created"},"updatedAt":{"type":"string","format":"date-time","readOnly":true,"description":"Timestamp in ISO 8601 format when the member was last updated"},"teamId":{"type":"string","pattern":"^tem_[0-9a-z]{26}$","description":"Team this member belongs to"},"userId":{"type":"string","pattern":"^usr_[0-9a-z]{26}$","description":"User ID of the team member"},"user":{"type":"object","properties":{"id":{"type":"string","pattern":"^usr_[0-9a-z]{26}$","description":"Unique identifier of the user"},"email":{"type":"string","format":"email","description":"Email address of the user"},"firstName":{"type":"string","description":"First name of the user"},"lastName":{"type":"string","description":"Last name of the user"},"imageUrl":{"type":"string","description":"Profile image URL of the user"}},"required":["id","email","firstName","lastName"],"description":"Denormalized user details for quick access without additional queries."},"permissions":{"type":"array","items":{"type":"string","pattern":"^-?(?:\\*|(?:[a-z][a-z0-9-]*)(?:\\.[a-z][a-z0-9-]*)*(?:\\.\\*|\\.bypass|\\.[a-z]{3}_[0-9a-z]{26})?)$","description":"Permission node in minecraft-style format. Supports exact, scoped wildcard, resource target, bypass target, and deny prefix.","examples":["team.read","team.member.write","ticket.scan","ticket.scan.*","ticket.scan.evt_01h8c3jm9zs2v6h2k9p9r8f5a1","team.gateway.connect.bypass","team.*","*","-team.gateway.write","-ticket.scan.evt_01h8c3jm9zs2v6h2k9p9r8f5a1"]},"description":"Base permissions across the team. Can be overridden per promoter or venue. Undefined means no base permissions (permissions come from PermissionScope only).","examples":[["event.read","event.write","order.read"],["team.member.read","team.member.write"],["ticket.scan"],["*"]]},"roleIds":{"type":"array","items":{"type":"string"},"description":"Role IDs assigned to this team member. Effective permissions are derived from role nodes plus explicit permission nodes."},"isOwner":{"type":"boolean","description":"Whether this member is the owner of the team. Only one owner per team is allowed. Owner has full control and cannot be deleted."},"access":{"type":"object","properties":{"promoterIds":{"anyOf":[{"type":"array","items":{"type":"string","pattern":"^pmt_[0-9a-z]{26}$","description":"Unique promoter identifier"}},{"type":"null"}],"description":"Null means team-wide promoter access. An array means access is restricted to those promoters."}},"required":["promoterIds"],"description":"Promoter access summary. Omitted only for legacy/no-access records."},"tenantId":{"type":"string","readOnly":true,"description":"Tenant ID for multi-tenant isolation"}},"required":["id","createdAt","updatedAt","teamId","userId","user","isOwner","tenantId"],"description":"Active team member with base permissions. Permissions can be overridden per promoter or venue. Created when a user accepts an invitation or is directly added to a team."}},"required":["member"]}}}}}},"delete":{"operationId":"teamInvite.cancel","summary":"Cancel a pending invitation","description":"Cancel a pending team invitation before it is accepted. Team key can be ID or slug. Deletes the invitation record.","tags":["Team Invites"],"parameters":[{"name":"key","in":"path","required":true,"schema":{"type":"string","description":"Team identifier (ID or slug)"}},{"name":"inviteId","in":"path","required":true,"schema":{"type":"string","description":"Team invite ID to cancel"}}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"object","properties":{"invite":{"type":"object","properties":{"id":{"type":"string","pattern":"^inv_[0-9a-z]{26}$","description":"Unique identifier for the team invitation","readOnly":true},"createdAt":{"type":"string","format":"date-time","readOnly":true,"description":"Timestamp in ISO 8601 format when the invitation was created"},"updatedAt":{"type":"string","format":"date-time","readOnly":true,"description":"Timestamp in ISO 8601 format when the invitation was last updated"},"teamId":{"type":"string","pattern":"^tem_[0-9a-z]{26}$","description":"Team this invitation is for"},"email":{"type":"string","format":"email","description":"Email address of the invited user. Used for sending invitation."},"permissions":{"type":"array","items":{"type":"string","pattern":"^-?(?:\\*|(?:[a-z][a-z0-9-]*)(?:\\.[a-z][a-z0-9-]*)*(?:\\.\\*|\\.bypass|\\.[a-z]{3}_[0-9a-z]{26})?)$","description":"Permission node in minecraft-style format. Supports exact, scoped wildcard, resource target, bypass target, and deny prefix.","examples":["team.read","team.member.write","ticket.scan","ticket.scan.*","ticket.scan.evt_01h8c3jm9zs2v6h2k9p9r8f5a1","team.gateway.connect.bypass","team.*","*","-team.gateway.write","-ticket.scan.evt_01h8c3jm9zs2v6h2k9p9r8f5a1"]},"description":"Permissions the user will receive upon accepting the invitation. Can be overridden per promoter or venue.","examples":[[],["event.read","event.write","order.read"],["team.member.read","team.member.write"],["ticket.scan"],["*"]]},"roleIds":{"type":"array","items":{"type":"string"},"description":"Role IDs assigned on invite acceptance. Effective permissions are role + explicit nodes."},"access":{"type":"object","properties":{"promoterIds":{"anyOf":[{"type":"array","items":{"type":"string","pattern":"^pmt_[0-9a-z]{26}$","description":"Unique promoter identifier"}},{"type":"null"}],"description":"Null means team-wide promoter access. An array means access is restricted to those promoters."}},"required":["promoterIds"],"description":"Promoter access to apply when the invitation is accepted."},"token":{"type":"string","readOnly":true,"description":"Secure token for invite acceptance. Required to accept the invitation."},"expiresAt":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991,"exclusiveMinimum":0,"description":"Unix timestamp (seconds) for DynamoDB TTL. Invitation will be automatically deleted after 7 days."},"invitedBy":{"type":"string","pattern":"^usr_[0-9a-z]{26}$","description":"User ID who sent the invitation"},"tenantId":{"type":"string","readOnly":true,"description":"Tenant ID for multi-tenant isolation"}},"required":["id","createdAt","updatedAt","teamId","email","permissions","token","expiresAt","invitedBy","tenantId"],"description":"Pending team invitation. Automatically deleted after 7 days via DynamoDB TTL. When accepted, creates a TeamMember record and deletes the invitation."}},"required":["invite"]}}}}}}},"/teams/{key}/invites/{inviteId}/resend":{"post":{"operationId":"teamInvite.resend","summary":"Resend invitation email","description":"Resend the invitation email with a new token and extended expiry. Team key can be ID or slug. Useful when the original invitation has expired or was not received.","tags":["Team Invites"],"parameters":[{"name":"key","in":"path","required":true,"schema":{"type":"string","description":"Team identifier (ID or slug)"}},{"name":"inviteId","in":"path","required":true,"schema":{"type":"string","pattern":"^inv_[0-9a-z]{26}$","description":"Team invite ID to retrieve"}}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"object","properties":{"invite":{"type":"object","properties":{"id":{"type":"string","pattern":"^inv_[0-9a-z]{26}$","description":"Unique identifier for the team invitation","readOnly":true},"createdAt":{"type":"string","format":"date-time","readOnly":true,"description":"Timestamp in ISO 8601 format when the invitation was created"},"updatedAt":{"type":"string","format":"date-time","readOnly":true,"description":"Timestamp in ISO 8601 format when the invitation was last updated"},"teamId":{"type":"string","pattern":"^tem_[0-9a-z]{26}$","description":"Team this invitation is for"},"email":{"type":"string","format":"email","description":"Email address of the invited user. Used for sending invitation."},"permissions":{"type":"array","items":{"type":"string","pattern":"^-?(?:\\*|(?:[a-z][a-z0-9-]*)(?:\\.[a-z][a-z0-9-]*)*(?:\\.\\*|\\.bypass|\\.[a-z]{3}_[0-9a-z]{26})?)$","description":"Permission node in minecraft-style format. Supports exact, scoped wildcard, resource target, bypass target, and deny prefix.","examples":["team.read","team.member.write","ticket.scan","ticket.scan.*","ticket.scan.evt_01h8c3jm9zs2v6h2k9p9r8f5a1","team.gateway.connect.bypass","team.*","*","-team.gateway.write","-ticket.scan.evt_01h8c3jm9zs2v6h2k9p9r8f5a1"]},"description":"Permissions the user will receive upon accepting the invitation. Can be overridden per promoter or venue.","examples":[[],["event.read","event.write","order.read"],["team.member.read","team.member.write"],["ticket.scan"],["*"]]},"roleIds":{"type":"array","items":{"type":"string"},"description":"Role IDs assigned on invite acceptance. Effective permissions are role + explicit nodes."},"access":{"type":"object","properties":{"promoterIds":{"anyOf":[{"type":"array","items":{"type":"string","pattern":"^pmt_[0-9a-z]{26}$","description":"Unique promoter identifier"}},{"type":"null"}],"description":"Null means team-wide promoter access. An array means access is restricted to those promoters."}},"required":["promoterIds"],"description":"Promoter access to apply when the invitation is accepted."},"token":{"type":"string","readOnly":true,"description":"Secure token for invite acceptance. Required to accept the invitation."},"expiresAt":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991,"exclusiveMinimum":0,"description":"Unix timestamp (seconds) for DynamoDB TTL. Invitation will be automatically deleted after 7 days."},"invitedBy":{"type":"string","pattern":"^usr_[0-9a-z]{26}$","description":"User ID who sent the invitation"},"tenantId":{"type":"string","readOnly":true,"description":"Tenant ID for multi-tenant isolation"}},"required":["id","createdAt","updatedAt","teamId","email","permissions","token","expiresAt","invitedBy","tenantId"],"description":"Pending team invitation. Automatically deleted after 7 days via DynamoDB TTL. When accepted, creates a TeamMember record and deletes the invitation."}},"required":["invite"]}}}}}}},"/teams/{key}/payment/connect":{"post":{"operationId":"teamPayment.connect","summary":"Initiate payment processor connection","description":"Start the OAuth flow to connect a team's payment processor account. Returns an authorization URL to redirect the user to the payment provider's OAuth page. The OAuth callback is handled directly by the payment gateway.","tags":["Team Payments"],"parameters":[{"name":"key","in":"path","required":true,"schema":{"type":"string","description":"Team identifier (ID or slug)"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"provider":{"enum":["STRIPE","AIRWALLEX"],"type":"string","description":"Payment processor to connect","examples":["STRIPE","AIRWALLEX"]}},"required":["provider"],"additionalProperties":false}}}},"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"object","properties":{"authorizationUrl":{"type":"string","format":"uri","description":"URL to redirect the user to for OAuth authorization. Open in a new window or redirect the current page.","examples":["https://connect.stripe.com/oauth/authorize?response_type=code&client_id=ca_xxx&scope=read_write&redirect_uri=..."]}},"required":["authorizationUrl"]}}}}}}},"/teams/{key}/payment/disconnect":{"post":{"operationId":"teamPayment.disconnect","summary":"Disconnect payment processor","description":"Remove the payment processor connection from a team. Future ticket sales will use the platform account. Only the team owner can disconnect the payment processor.","tags":["Team Payments"],"parameters":[{"name":"key","in":"path","required":true,"schema":{"type":"string","description":"Team identifier (ID or slug)"}}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"object","properties":{"id":{"type":"string","pattern":"^tem_[0-9a-z]{26}$","description":"Unique identifier for the team organization","readOnly":true},"createdAt":{"type":"string","format":"date-time","readOnly":true,"description":"Timestamp in ISO 8601 format when the team was created"},"updatedAt":{"type":"string","format":"date-time","readOnly":true,"description":"Timestamp in ISO 8601 format when the team was last updated"},"name":{"type":"string","minLength":3,"maxLength":30,"description":"Display name of the team organization. Must be between 3 and 30 characters"},"slug":{"type":"string","minLength":3,"maxLength":30,"description":"URL-friendly slug for the team organization. Must be unique within tenant and between 3 and 30 characters"},"supportEmail":{"type":"string","format":"email","description":"Support email address for customer inquiries. Used as reply-to address in order confirmation emails"},"publicBaseUrl":{"type":"string","format":"uri","description":"Optional public website base URL for team-owned event and order links. When present, it overrides the tenant public base URL.","examples":["https://sash.net.au"]},"image":{"type":"object","properties":{"src":{"type":"string","format":"uri","examples":["https://assets.session.services/my-image.jpg"]},"alt":{"type":"string","examples":["My Image"]},"width":{"type":"number","examples":[1080]},"height":{"type":"number","examples":[1080]}},"required":["src","alt","width","height"],"description":"Team image with dimensions and alt text for branding across the platform"},"metadata":{"type":"object","propertyNames":{"type":"string","minLength":1,"maxLength":40,"description":"Metadata key. Must be 1-40 characters"},"additionalProperties":{"type":"string","maxLength":500,"description":"Metadata value. Must not exceed 500 characters"},"description":"Flexible key-value metadata storage for custom configuration. Similar to Stripe's metadata API. Maximum 50 keys, key names up to 40 characters, values up to 500 characters."},"approval":{"enum":["PENDING","APPROVED","REJECTED"],"type":"string","description":"Approval status of the team. PENDING: awaiting review, APPROVED: can create promoters/venues/events, REJECTED: cannot operate"},"deletedAt":{"type":"string","format":"date-time","readOnly":true,"description":"Timestamp in ISO 8601 format when the team was soft deleted. Only present for deleted teams."},"tenantId":{"type":"string","readOnly":true,"description":"Tenant ID for multi-tenant isolation"},"isAdmin":{"type":"boolean","description":"Whether this team is the admin team for the tenant"},"gateway":{"type":"object","properties":{"provider":{"enum":["STRIPE","AIRWALLEX"],"type":"string","description":"Payment gateway provider type"},"connectedAt":{"type":"string","format":"date-time","description":"Timestamp when the payment gateway was connected to this team"},"connectedBy":{"type":"string","description":"User ID of the team member who connected the payment gateway"},"accountId":{"type":"string","description":"Connected account ID. For Stripe: acct_xxxxx. For Airwallex: business account open ID."}},"required":["provider","connectedAt","connectedBy","accountId"],"description":"Connected payment gateway for direct payouts. When connected, funds from ticket sales go directly to the team's account with platform fees deducted."}},"required":["id","createdAt","updatedAt","name","slug","approval","tenantId"],"description":"Team organization that owns promoters and venues. Multiple brands can exist under one team."}}}}}}},"/teams/{key}/members/{userId}":{"get":{"operationId":"teamMember.get","summary":"Get team member by user ID","description":"Retrieve a team member using the team key (ID or slug) and user ID","tags":["Team Members"],"parameters":[{"name":"key","in":"path","required":true,"schema":{"type":"string","description":"Team identifier (ID or slug)"}},{"name":"userId","in":"path","required":true,"schema":{"type":"string","description":"User ID of the team member to retrieve"}}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"object","properties":{"member":{"type":"object","properties":{"id":{"type":"string","pattern":"^mbr_[0-9a-z]{26}$","description":"Unique identifier for the team member","readOnly":true},"createdAt":{"type":"string","format":"date-time","readOnly":true,"description":"Timestamp in ISO 8601 format when the member was created"},"updatedAt":{"type":"string","format":"date-time","readOnly":true,"description":"Timestamp in ISO 8601 format when the member was last updated"},"teamId":{"type":"string","pattern":"^tem_[0-9a-z]{26}$","description":"Team this member belongs to"},"userId":{"type":"string","pattern":"^usr_[0-9a-z]{26}$","description":"User ID of the team member"},"user":{"type":"object","properties":{"id":{"type":"string","pattern":"^usr_[0-9a-z]{26}$","description":"Unique identifier of the user"},"email":{"type":"string","format":"email","description":"Email address of the user"},"firstName":{"type":"string","description":"First name of the user"},"lastName":{"type":"string","description":"Last name of the user"},"imageUrl":{"type":"string","description":"Profile image URL of the user"}},"required":["id","email","firstName","lastName"],"description":"Denormalized user details for quick access without additional queries."},"permissions":{"type":"array","items":{"type":"string","pattern":"^-?(?:\\*|(?:[a-z][a-z0-9-]*)(?:\\.[a-z][a-z0-9-]*)*(?:\\.\\*|\\.bypass|\\.[a-z]{3}_[0-9a-z]{26})?)$","description":"Permission node in minecraft-style format. Supports exact, scoped wildcard, resource target, bypass target, and deny prefix.","examples":["team.read","team.member.write","ticket.scan","ticket.scan.*","ticket.scan.evt_01h8c3jm9zs2v6h2k9p9r8f5a1","team.gateway.connect.bypass","team.*","*","-team.gateway.write","-ticket.scan.evt_01h8c3jm9zs2v6h2k9p9r8f5a1"]},"description":"Base permissions across the team. Can be overridden per promoter or venue. Undefined means no base permissions (permissions come from PermissionScope only).","examples":[["event.read","event.write","order.read"],["team.member.read","team.member.write"],["ticket.scan"],["*"]]},"roleIds":{"type":"array","items":{"type":"string"},"description":"Role IDs assigned to this team member. Effective permissions are derived from role nodes plus explicit permission nodes."},"isOwner":{"type":"boolean","description":"Whether this member is the owner of the team. Only one owner per team is allowed. Owner has full control and cannot be deleted."},"access":{"type":"object","properties":{"promoterIds":{"anyOf":[{"type":"array","items":{"type":"string","pattern":"^pmt_[0-9a-z]{26}$","description":"Unique promoter identifier"}},{"type":"null"}],"description":"Null means team-wide promoter access. An array means access is restricted to those promoters."}},"required":["promoterIds"],"description":"Promoter access summary. Omitted only for legacy/no-access records."},"tenantId":{"type":"string","readOnly":true,"description":"Tenant ID for multi-tenant isolation"}},"required":["id","createdAt","updatedAt","teamId","userId","user","isOwner","tenantId"],"description":"Active team member with base permissions. Permissions can be overridden per promoter or venue. Created when a user accepts an invitation or is directly added to a team."}},"required":["member"]}}}}}},"patch":{"operationId":"teamMember.update","summary":"Update a team member's roles","description":"Update an existing active team member. Team key can be ID or slug. Replaces role assignments. Cannot modify isOwner (use transfer endpoint instead).","tags":["Team Members"],"parameters":[{"name":"key","in":"path","required":true,"schema":{"type":"string"}},{"name":"userId","in":"path","required":true,"schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"id":{"type":"string","description":"Team member ID to update"},"roleIds":{"type":"array","minItems":1,"items":{"type":"string"},"description":"Replace role assignments for this team member with the provided role IDs."},"isOwner":{"type":"boolean","description":"Whether this team member is an owner of the team"},"access":{"type":"object","properties":{"promoterIds":{"anyOf":[{"type":"array","minItems":1,"items":{"type":"string","pattern":"^pmt_[0-9a-z]{26}$","description":"Unique promoter identifier"}},{"type":"null"}],"description":"Null grants team-wide promoter access. A non-empty array restricts access to those promoters."}},"required":["promoterIds"],"description":"Optional promoter access assignment. Omit to update only role assignments."}},"required":["id","roleIds"],"additionalProperties":false}}}},"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"object","properties":{"member":{"type":"object","properties":{"id":{"type":"string","pattern":"^mbr_[0-9a-z]{26}$","description":"Unique identifier for the team member","readOnly":true},"createdAt":{"type":"string","format":"date-time","readOnly":true,"description":"Timestamp in ISO 8601 format when the member was created"},"updatedAt":{"type":"string","format":"date-time","readOnly":true,"description":"Timestamp in ISO 8601 format when the member was last updated"},"teamId":{"type":"string","pattern":"^tem_[0-9a-z]{26}$","description":"Team this member belongs to"},"userId":{"type":"string","pattern":"^usr_[0-9a-z]{26}$","description":"User ID of the team member"},"user":{"type":"object","properties":{"id":{"type":"string","pattern":"^usr_[0-9a-z]{26}$","description":"Unique identifier of the user"},"email":{"type":"string","format":"email","description":"Email address of the user"},"firstName":{"type":"string","description":"First name of the user"},"lastName":{"type":"string","description":"Last name of the user"},"imageUrl":{"type":"string","description":"Profile image URL of the user"}},"required":["id","email","firstName","lastName"],"description":"Denormalized user details for quick access without additional queries."},"permissions":{"type":"array","items":{"type":"string","pattern":"^-?(?:\\*|(?:[a-z][a-z0-9-]*)(?:\\.[a-z][a-z0-9-]*)*(?:\\.\\*|\\.bypass|\\.[a-z]{3}_[0-9a-z]{26})?)$","description":"Permission node in minecraft-style format. Supports exact, scoped wildcard, resource target, bypass target, and deny prefix.","examples":["team.read","team.member.write","ticket.scan","ticket.scan.*","ticket.scan.evt_01h8c3jm9zs2v6h2k9p9r8f5a1","team.gateway.connect.bypass","team.*","*","-team.gateway.write","-ticket.scan.evt_01h8c3jm9zs2v6h2k9p9r8f5a1"]},"description":"Base permissions across the team. Can be overridden per promoter or venue. Undefined means no base permissions (permissions come from PermissionScope only).","examples":[["event.read","event.write","order.read"],["team.member.read","team.member.write"],["ticket.scan"],["*"]]},"roleIds":{"type":"array","items":{"type":"string"},"description":"Role IDs assigned to this team member. Effective permissions are derived from role nodes plus explicit permission nodes."},"isOwner":{"type":"boolean","description":"Whether this member is the owner of the team. Only one owner per team is allowed. Owner has full control and cannot be deleted."},"access":{"type":"object","properties":{"promoterIds":{"anyOf":[{"type":"array","items":{"type":"string","pattern":"^pmt_[0-9a-z]{26}$","description":"Unique promoter identifier"}},{"type":"null"}],"description":"Null means team-wide promoter access. An array means access is restricted to those promoters."}},"required":["promoterIds"],"description":"Promoter access summary. Omitted only for legacy/no-access records."},"tenantId":{"type":"string","readOnly":true,"description":"Tenant ID for multi-tenant isolation"}},"required":["id","createdAt","updatedAt","teamId","userId","user","isOwner","tenantId"],"description":"Active team member with base permissions. Permissions can be overridden per promoter or venue. Created when a user accepts an invitation or is directly added to a team."}},"required":["member"]}}}}}},"delete":{"operationId":"teamMember.remove","summary":"Remove a team member","description":"Remove an active member from a team. Team key can be ID or slug. Cannot remove the team owner (transfer ownership first). To cancel pending invitations, use the team invites endpoint.","tags":["Team Members"],"parameters":[{"name":"key","in":"path","required":true,"schema":{"type":"string","description":"Team identifier (ID or slug)"}},{"name":"userId","in":"path","required":true,"schema":{"type":"string","description":"User ID of the team member to retrieve"}}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"object","properties":{"member":{"type":"object","properties":{"id":{"type":"string","pattern":"^mbr_[0-9a-z]{26}$","description":"Unique identifier for the team member","readOnly":true},"createdAt":{"type":"string","format":"date-time","readOnly":true,"description":"Timestamp in ISO 8601 format when the member was created"},"updatedAt":{"type":"string","format":"date-time","readOnly":true,"description":"Timestamp in ISO 8601 format when the member was last updated"},"teamId":{"type":"string","pattern":"^tem_[0-9a-z]{26}$","description":"Team this member belongs to"},"userId":{"type":"string","pattern":"^usr_[0-9a-z]{26}$","description":"User ID of the team member"},"user":{"type":"object","properties":{"id":{"type":"string","pattern":"^usr_[0-9a-z]{26}$","description":"Unique identifier of the user"},"email":{"type":"string","format":"email","description":"Email address of the user"},"firstName":{"type":"string","description":"First name of the user"},"lastName":{"type":"string","description":"Last name of the user"},"imageUrl":{"type":"string","description":"Profile image URL of the user"}},"required":["id","email","firstName","lastName"],"description":"Denormalized user details for quick access without additional queries."},"permissions":{"type":"array","items":{"type":"string","pattern":"^-?(?:\\*|(?:[a-z][a-z0-9-]*)(?:\\.[a-z][a-z0-9-]*)*(?:\\.\\*|\\.bypass|\\.[a-z]{3}_[0-9a-z]{26})?)$","description":"Permission node in minecraft-style format. Supports exact, scoped wildcard, resource target, bypass target, and deny prefix.","examples":["team.read","team.member.write","ticket.scan","ticket.scan.*","ticket.scan.evt_01h8c3jm9zs2v6h2k9p9r8f5a1","team.gateway.connect.bypass","team.*","*","-team.gateway.write","-ticket.scan.evt_01h8c3jm9zs2v6h2k9p9r8f5a1"]},"description":"Base permissions across the team. Can be overridden per promoter or venue. Undefined means no base permissions (permissions come from PermissionScope only).","examples":[["event.read","event.write","order.read"],["team.member.read","team.member.write"],["ticket.scan"],["*"]]},"roleIds":{"type":"array","items":{"type":"string"},"description":"Role IDs assigned to this team member. Effective permissions are derived from role nodes plus explicit permission nodes."},"isOwner":{"type":"boolean","description":"Whether this member is the owner of the team. Only one owner per team is allowed. Owner has full control and cannot be deleted."},"access":{"type":"object","properties":{"promoterIds":{"anyOf":[{"type":"array","items":{"type":"string","pattern":"^pmt_[0-9a-z]{26}$","description":"Unique promoter identifier"}},{"type":"null"}],"description":"Null means team-wide promoter access. An array means access is restricted to those promoters."}},"required":["promoterIds"],"description":"Promoter access summary. Omitted only for legacy/no-access records."},"tenantId":{"type":"string","readOnly":true,"description":"Tenant ID for multi-tenant isolation"}},"required":["id","createdAt","updatedAt","teamId","userId","user","isOwner","tenantId"],"description":"Active team member with base permissions. Permissions can be overridden per promoter or venue. Created when a user accepts an invitation or is directly added to a team."}},"required":["member"]}}}}}}},"/teams/{key}/members":{"get":{"operationId":"teamMember.list","summary":"List team members with cursor-based pagination","description":"Returns active team members for a specific team with cursor pagination. Team key can be ID or slug. For pending invitations, use the team invites endpoint instead.","tags":["Team Members"],"parameters":[{"name":"key","in":"path","required":true,"schema":{"type":"string","description":"Team identifier (ID or slug)"}},{"name":"query","in":"query","schema":{"type":"string","description":"Search query to filter members by name or email. Case-insensitive partial match"},"allowEmptyValue":true,"allowReserved":true},{"name":"limit","in":"query","schema":{"type":"integer","minimum":1,"maximum":100,"default":20,"description":"Maximum number of team members to return per request (1-100, default: 20)","examples":[20]},"allowEmptyValue":true,"allowReserved":true},{"name":"cursor","in":"query","schema":{"type":"string","description":"Pagination cursor from previous response. Used to fetch next page of results"},"allowEmptyValue":true,"allowReserved":true}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"object","properties":{"members":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string","pattern":"^mbr_[0-9a-z]{26}$","description":"Unique identifier for the team member","readOnly":true},"createdAt":{"type":"string","format":"date-time","readOnly":true,"description":"Timestamp in ISO 8601 format when the member was created"},"updatedAt":{"type":"string","format":"date-time","readOnly":true,"description":"Timestamp in ISO 8601 format when the member was last updated"},"teamId":{"type":"string","pattern":"^tem_[0-9a-z]{26}$","description":"Team this member belongs to"},"userId":{"type":"string","pattern":"^usr_[0-9a-z]{26}$","description":"User ID of the team member"},"user":{"type":"object","properties":{"id":{"type":"string","pattern":"^usr_[0-9a-z]{26}$","description":"Unique identifier of the user"},"email":{"type":"string","format":"email","description":"Email address of the user"},"firstName":{"type":"string","description":"First name of the user"},"lastName":{"type":"string","description":"Last name of the user"},"imageUrl":{"type":"string","description":"Profile image URL of the user"}},"required":["id","email","firstName","lastName"],"description":"Denormalized user details for quick access without additional queries."},"permissions":{"type":"array","items":{"type":"string","pattern":"^-?(?:\\*|(?:[a-z][a-z0-9-]*)(?:\\.[a-z][a-z0-9-]*)*(?:\\.\\*|\\.bypass|\\.[a-z]{3}_[0-9a-z]{26})?)$","description":"Permission node in minecraft-style format. Supports exact, scoped wildcard, resource target, bypass target, and deny prefix.","examples":["team.read","team.member.write","ticket.scan","ticket.scan.*","ticket.scan.evt_01h8c3jm9zs2v6h2k9p9r8f5a1","team.gateway.connect.bypass","team.*","*","-team.gateway.write","-ticket.scan.evt_01h8c3jm9zs2v6h2k9p9r8f5a1"]},"description":"Base permissions across the team. Can be overridden per promoter or venue. Undefined means no base permissions (permissions come from PermissionScope only).","examples":[["event.read","event.write","order.read"],["team.member.read","team.member.write"],["ticket.scan"],["*"]]},"roleIds":{"type":"array","items":{"type":"string"},"description":"Role IDs assigned to this team member. Effective permissions are derived from role nodes plus explicit permission nodes."},"isOwner":{"type":"boolean","description":"Whether this member is the owner of the team. Only one owner per team is allowed. Owner has full control and cannot be deleted."},"access":{"type":"object","properties":{"promoterIds":{"anyOf":[{"type":"array","items":{"type":"string","pattern":"^pmt_[0-9a-z]{26}$","description":"Unique promoter identifier"}},{"type":"null"}],"description":"Null means team-wide promoter access. An array means access is restricted to those promoters."}},"required":["promoterIds"],"description":"Promoter access summary. Omitted only for legacy/no-access records."},"tenantId":{"type":"string","readOnly":true,"description":"Tenant ID for multi-tenant isolation"}},"required":["id","createdAt","updatedAt","teamId","userId","user","isOwner","tenantId"],"description":"Active team member with base permissions. Permissions can be overridden per promoter or venue. Created when a user accepts an invitation or is directly added to a team."},"description":"Array of members for the current result set"},"before":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Cursor for navigating backward in the result set. Omitted when there are no prior results.","examples":["eyJ2ZXJzaW9uIjoxLCJpbnRlbnQiOnsic291cmNlIjoiZGVtbyJ9LCJwb3MiOnsicHJpbWFyeUtleSI6InBybV8wMXM4NTNqIn19"]},"after":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Cursor for navigating forward in the result set. Omitted when there are no subsequent results.","examples":["eyJ2ZXJzaW9uIjoxLCJpbnRlbnQiOnsic291cmNlIjoiZGVtbyJ9LCJwb3MiOnsicHJpbWFyeUtleSI6InBybV8wMXM4NTNkIn19"]},"limit":{"type":"number","minimum":1,"description":"Maximum number of items to return in each result set","examples":[20]}},"required":["members","limit"]}}}}}},"post":{"operationId":"teamMember.create","summary":"Add an existing user to a team","description":"Directly add an existing user to a team. Team key can be ID or slug. Requires at least one role ID. To invite a new user by email, use the team invites endpoint instead.","tags":["Team Members"],"parameters":[{"name":"key","in":"path","required":true,"schema":{"type":"string","description":"Team identifier (ID or slug)"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"userId":{"type":"string","pattern":"^usr_[0-9a-z]{26}$","description":"User ID of the team member"},"roleIds":{"type":"array","minItems":1,"items":{"type":"string"},"description":"Role IDs assigned to this team member."},"isOwner":{"type":"boolean","description":"Whether this member is the owner of the team. Only one owner per team is allowed. Owner has full control and cannot be deleted."},"access":{"type":"object","properties":{"promoterIds":{"anyOf":[{"type":"array","minItems":1,"items":{"type":"string","pattern":"^pmt_[0-9a-z]{26}$","description":"Unique promoter identifier"}},{"type":"null"}],"description":"Null grants team-wide promoter access. A non-empty array restricts access to those promoters."}},"required":["promoterIds"],"description":"Optional promoter access assignment. Omit to preserve existing team-wide behavior."}},"required":["userId","roleIds","isOwner"],"additionalProperties":false}}}},"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"object","properties":{"member":{"type":"object","properties":{"id":{"type":"string","pattern":"^mbr_[0-9a-z]{26}$","description":"Unique identifier for the team member","readOnly":true},"createdAt":{"type":"string","format":"date-time","readOnly":true,"description":"Timestamp in ISO 8601 format when the member was created"},"updatedAt":{"type":"string","format":"date-time","readOnly":true,"description":"Timestamp in ISO 8601 format when the member was last updated"},"teamId":{"type":"string","pattern":"^tem_[0-9a-z]{26}$","description":"Team this member belongs to"},"userId":{"type":"string","pattern":"^usr_[0-9a-z]{26}$","description":"User ID of the team member"},"user":{"type":"object","properties":{"id":{"type":"string","pattern":"^usr_[0-9a-z]{26}$","description":"Unique identifier of the user"},"email":{"type":"string","format":"email","description":"Email address of the user"},"firstName":{"type":"string","description":"First name of the user"},"lastName":{"type":"string","description":"Last name of the user"},"imageUrl":{"type":"string","description":"Profile image URL of the user"}},"required":["id","email","firstName","lastName"],"description":"Denormalized user details for quick access without additional queries."},"permissions":{"type":"array","items":{"type":"string","pattern":"^-?(?:\\*|(?:[a-z][a-z0-9-]*)(?:\\.[a-z][a-z0-9-]*)*(?:\\.\\*|\\.bypass|\\.[a-z]{3}_[0-9a-z]{26})?)$","description":"Permission node in minecraft-style format. Supports exact, scoped wildcard, resource target, bypass target, and deny prefix.","examples":["team.read","team.member.write","ticket.scan","ticket.scan.*","ticket.scan.evt_01h8c3jm9zs2v6h2k9p9r8f5a1","team.gateway.connect.bypass","team.*","*","-team.gateway.write","-ticket.scan.evt_01h8c3jm9zs2v6h2k9p9r8f5a1"]},"description":"Base permissions across the team. Can be overridden per promoter or venue. Undefined means no base permissions (permissions come from PermissionScope only).","examples":[["event.read","event.write","order.read"],["team.member.read","team.member.write"],["ticket.scan"],["*"]]},"roleIds":{"type":"array","items":{"type":"string"},"description":"Role IDs assigned to this team member. Effective permissions are derived from role nodes plus explicit permission nodes."},"isOwner":{"type":"boolean","description":"Whether this member is the owner of the team. Only one owner per team is allowed. Owner has full control and cannot be deleted."},"access":{"type":"object","properties":{"promoterIds":{"anyOf":[{"type":"array","items":{"type":"string","pattern":"^pmt_[0-9a-z]{26}$","description":"Unique promoter identifier"}},{"type":"null"}],"description":"Null means team-wide promoter access. An array means access is restricted to those promoters."}},"required":["promoterIds"],"description":"Promoter access summary. Omitted only for legacy/no-access records."},"tenantId":{"type":"string","readOnly":true,"description":"Tenant ID for multi-tenant isolation"}},"required":["id","createdAt","updatedAt","teamId","userId","user","isOwner","tenantId"],"description":"Active team member with base permissions. Permissions can be overridden per promoter or venue. Created when a user accepts an invitation or is directly added to a team."}},"required":["member"]}}}}}}},"/teams/{key}/transfer":{"post":{"operationId":"teamMember.transfer","summary":"Transfer team ownership","description":"Transfer team ownership from the current owner to another active member. Team key can be ID or slug. Only the current owner can perform this action. Previous owner retains owner-equivalent access (typically via `*`) but loses isOwner status.","tags":["Team Members"],"parameters":[{"name":"key","in":"path","required":true,"schema":{"type":"string","description":"Team identifier (ID or slug)"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"newOwnerId":{"type":"string","description":"Team member ID of the new owner. This member must already exist with ACTIVE status."}},"required":["newOwnerId"],"additionalProperties":false}}}},"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"object","properties":{"previousOwner":{"type":"object","properties":{"id":{"type":"string","pattern":"^mbr_[0-9a-z]{26}$","description":"Unique identifier for the team member","readOnly":true},"createdAt":{"type":"string","format":"date-time","readOnly":true,"description":"Timestamp in ISO 8601 format when the member was created"},"updatedAt":{"type":"string","format":"date-time","readOnly":true,"description":"Timestamp in ISO 8601 format when the member was last updated"},"teamId":{"type":"string","pattern":"^tem_[0-9a-z]{26}$","description":"Team this member belongs to"},"userId":{"type":"string","pattern":"^usr_[0-9a-z]{26}$","description":"User ID of the team member"},"user":{"type":"object","properties":{"id":{"type":"string","pattern":"^usr_[0-9a-z]{26}$","description":"Unique identifier of the user"},"email":{"type":"string","format":"email","description":"Email address of the user"},"firstName":{"type":"string","description":"First name of the user"},"lastName":{"type":"string","description":"Last name of the user"},"imageUrl":{"type":"string","description":"Profile image URL of the user"}},"required":["id","email","firstName","lastName"],"description":"Denormalized user details for quick access without additional queries."},"permissions":{"type":"array","items":{"type":"string","pattern":"^-?(?:\\*|(?:[a-z][a-z0-9-]*)(?:\\.[a-z][a-z0-9-]*)*(?:\\.\\*|\\.bypass|\\.[a-z]{3}_[0-9a-z]{26})?)$","description":"Permission node in minecraft-style format. Supports exact, scoped wildcard, resource target, bypass target, and deny prefix.","examples":["team.read","team.member.write","ticket.scan","ticket.scan.*","ticket.scan.evt_01h8c3jm9zs2v6h2k9p9r8f5a1","team.gateway.connect.bypass","team.*","*","-team.gateway.write","-ticket.scan.evt_01h8c3jm9zs2v6h2k9p9r8f5a1"]},"description":"Base permissions across the team. Can be overridden per promoter or venue. Undefined means no base permissions (permissions come from PermissionScope only).","examples":[["event.read","event.write","order.read"],["team.member.read","team.member.write"],["ticket.scan"],["*"]]},"roleIds":{"type":"array","items":{"type":"string"},"description":"Role IDs assigned to this team member. Effective permissions are derived from role nodes plus explicit permission nodes."},"isOwner":{"type":"boolean","description":"Whether this member is the owner of the team. Only one owner per team is allowed. Owner has full control and cannot be deleted."},"access":{"type":"object","properties":{"promoterIds":{"anyOf":[{"type":"array","items":{"type":"string","pattern":"^pmt_[0-9a-z]{26}$","description":"Unique promoter identifier"}},{"type":"null"}],"description":"Null means team-wide promoter access. An array means access is restricted to those promoters."}},"required":["promoterIds"],"description":"Promoter access summary. Omitted only for legacy/no-access records."},"tenantId":{"type":"string","readOnly":true,"description":"Tenant ID for multi-tenant isolation"}},"required":["id","createdAt","updatedAt","teamId","userId","user","isOwner","tenantId"],"description":"The previous owner (now a regular member with owner-equivalent access, typically via `*`)"},"newOwner":{"type":"object","properties":{"id":{"type":"string","pattern":"^mbr_[0-9a-z]{26}$","description":"Unique identifier for the team member","readOnly":true},"createdAt":{"type":"string","format":"date-time","readOnly":true,"description":"Timestamp in ISO 8601 format when the member was created"},"updatedAt":{"type":"string","format":"date-time","readOnly":true,"description":"Timestamp in ISO 8601 format when the member was last updated"},"teamId":{"type":"string","pattern":"^tem_[0-9a-z]{26}$","description":"Team this member belongs to"},"userId":{"type":"string","pattern":"^usr_[0-9a-z]{26}$","description":"User ID of the team member"},"user":{"type":"object","properties":{"id":{"type":"string","pattern":"^usr_[0-9a-z]{26}$","description":"Unique identifier of the user"},"email":{"type":"string","format":"email","description":"Email address of the user"},"firstName":{"type":"string","description":"First name of the user"},"lastName":{"type":"string","description":"Last name of the user"},"imageUrl":{"type":"string","description":"Profile image URL of the user"}},"required":["id","email","firstName","lastName"],"description":"Denormalized user details for quick access without additional queries."},"permissions":{"type":"array","items":{"type":"string","pattern":"^-?(?:\\*|(?:[a-z][a-z0-9-]*)(?:\\.[a-z][a-z0-9-]*)*(?:\\.\\*|\\.bypass|\\.[a-z]{3}_[0-9a-z]{26})?)$","description":"Permission node in minecraft-style format. Supports exact, scoped wildcard, resource target, bypass target, and deny prefix.","examples":["team.read","team.member.write","ticket.scan","ticket.scan.*","ticket.scan.evt_01h8c3jm9zs2v6h2k9p9r8f5a1","team.gateway.connect.bypass","team.*","*","-team.gateway.write","-ticket.scan.evt_01h8c3jm9zs2v6h2k9p9r8f5a1"]},"description":"Base permissions across the team. Can be overridden per promoter or venue. Undefined means no base permissions (permissions come from PermissionScope only).","examples":[["event.read","event.write","order.read"],["team.member.read","team.member.write"],["ticket.scan"],["*"]]},"roleIds":{"type":"array","items":{"type":"string"},"description":"Role IDs assigned to this team member. Effective permissions are derived from role nodes plus explicit permission nodes."},"isOwner":{"type":"boolean","description":"Whether this member is the owner of the team. Only one owner per team is allowed. Owner has full control and cannot be deleted."},"access":{"type":"object","properties":{"promoterIds":{"anyOf":[{"type":"array","items":{"type":"string","pattern":"^pmt_[0-9a-z]{26}$","description":"Unique promoter identifier"}},{"type":"null"}],"description":"Null means team-wide promoter access. An array means access is restricted to those promoters."}},"required":["promoterIds"],"description":"Promoter access summary. Omitted only for legacy/no-access records."},"tenantId":{"type":"string","readOnly":true,"description":"Tenant ID for multi-tenant isolation"}},"required":["id","createdAt","updatedAt","teamId","userId","user","isOwner","tenantId"],"description":"The new owner (now has isOwner: true)"}},"required":["previousOwner","newOwner"],"description":"Response payload for team ownership transfer operation"}}}}}}},"/tenant/approvals":{"get":{"operationId":"tenant.approvals","summary":"Get tenant approval badges","description":"Returns lightweight booleans for pending approvals. Requires tenant admin access.","tags":["Tenant"],"parameters":[{"name":"teamId","in":"query","schema":{"type":"string"},"allowEmptyValue":true,"allowReserved":true}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"object","properties":{"counts":{"type":"object","properties":{"teams":{"type":"boolean"},"promoters":{"type":"boolean"},"venues":{"type":"boolean"},"events":{"type":"boolean"},"payouts":{"type":"boolean"}},"required":["teams","promoters","venues","events","payouts"]}},"required":["counts"]}}}}}}},"/tenant/config":{"get":{"operationId":"tenant.config","summary":"Get tenant configuration","description":"Returns tenant configuration including features and regions. Requires x-tenant-id header.","tags":["Tenant"],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Tenant"}}}}}}},"/tenant/regions":{"get":{"operationId":"tenant.regions","summary":"Get tenant regions","description":"Returns available regions for the tenant. Requires x-tenant-id header.","tags":["Tenant"],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Region"}}}}}}},"/users/me":{"get":{"operationId":"user.me","summary":"Get the current user and their team memberships","tags":["Users"],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"object","properties":{"user":{"anyOf":[{"type":"object","properties":{"id":{"type":"string","readOnly":true,"description":"Unique identifier for the user","examples":["usr_01jps5cgsd4tzjghtnt45qnhn0"]},"createdAt":{"type":"string","format":"date-time","readOnly":true,"description":"ISO 8601 timestamp when the user account was created","examples":["2026-06-07T11:39:32.854Z"]},"updatedAt":{"type":"string","format":"date-time","readOnly":true,"description":"ISO 8601 timestamp when the user account was last updated","examples":["2026-06-07T11:39:32.856Z"]},"email":{"type":"string","format":"email","description":"User's email address, used for authentication and communication","examples":["test@session.services"]},"firstName":{"type":"string","minLength":1,"description":"User's first name","examples":["Jay"]},"lastName":{"type":"string","minLength":1,"description":"User's last name","examples":["McMullen"]},"imageUrl":{"type":"string","format":"uri","description":"Optional URL to the user's profile image or avatar","examples":["https://assets.session.services/examples/avatar.jpg"]},"metadata":{"type":"object","propertyNames":{"type":"string"},"additionalProperties":{"anyOf":[{"anyOf":[{"type":"string"},{"type":"number"},{"type":"boolean"},{"type":"null"}]},{"type":"array","items":{"anyOf":[{"anyOf":[{"type":"string"},{"type":"number"},{"type":"boolean"},{"type":"null"}]},{"type":"array","items":{"anyOf":[{},{"type":"null"}]}},{"type":"object","propertyNames":{"type":"string"},"additionalProperties":{}}]}},{"type":"object","propertyNames":{"type":"string"},"additionalProperties":{"anyOf":[{"anyOf":[{"type":"string"},{"type":"number"},{"type":"boolean"},{"type":"null"}]},{"type":"array","items":{"anyOf":[{},{"type":"null"}]}},{"type":"object","propertyNames":{"type":"string"},"additionalProperties":{}}]}}]},"description":"Arbitrary key-value metadata for storing user preferences and settings","examples":[{"widgets:team_abc123":{"visibleWidgets":["revenue"]}}]}},"required":["id","createdAt","updatedAt","email","firstName","lastName"],"description":"User entity containing profile and audit information scoped to a specific tenant","examples":[{"id":"usr_01jps5cgsd4tzjghtnt45qnhn0","createdAt":"2026-06-07T11:39:32.854Z","updatedAt":"2026-06-07T11:39:32.856Z","email":"test@session.services","firstName":"Jay","lastName":"McMullen","imageUrl":"https://assets.session.services/examples/avatar.jpg","tenantId":"tnt_01jqpj2t2kfvmstt6f6tzkbaf2"}]},{"type":"null"}],"description":"Current authenticated user profile, null if not authenticated"},"isAdmin":{"type":"boolean","description":"Whether the current user has admin privileges for the tenant"},"members":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string","pattern":"^mbr_[0-9a-z]{26}$","description":"Unique identifier for the team member","readOnly":true},"createdAt":{"type":"string","format":"date-time","readOnly":true,"description":"Timestamp in ISO 8601 format when the member was created"},"updatedAt":{"type":"string","format":"date-time","readOnly":true,"description":"Timestamp in ISO 8601 format when the member was last updated"},"teamId":{"type":"string","pattern":"^tem_[0-9a-z]{26}$","description":"Team this member belongs to"},"userId":{"type":"string","pattern":"^usr_[0-9a-z]{26}$","description":"User ID of the team member"},"user":{"type":"object","properties":{"id":{"type":"string","pattern":"^usr_[0-9a-z]{26}$","description":"Unique identifier of the user"},"email":{"type":"string","format":"email","description":"Email address of the user"},"firstName":{"type":"string","description":"First name of the user"},"lastName":{"type":"string","description":"Last name of the user"},"imageUrl":{"type":"string","description":"Profile image URL of the user"}},"required":["id","email","firstName","lastName"],"description":"Denormalized user details for quick access without additional queries."},"permissions":{"type":"array","items":{"type":"string","pattern":"^-?(?:\\*|(?:[a-z][a-z0-9-]*)(?:\\.[a-z][a-z0-9-]*)*(?:\\.\\*|\\.bypass|\\.[a-z]{3}_[0-9a-z]{26})?)$","description":"Permission node in minecraft-style format. Supports exact, scoped wildcard, resource target, bypass target, and deny prefix.","examples":["team.read","team.member.write","ticket.scan","ticket.scan.*","ticket.scan.evt_01h8c3jm9zs2v6h2k9p9r8f5a1","team.gateway.connect.bypass","team.*","*","-team.gateway.write","-ticket.scan.evt_01h8c3jm9zs2v6h2k9p9r8f5a1"]},"description":"Base permissions across the team. Can be overridden per promoter or venue. Undefined means no base permissions (permissions come from PermissionScope only).","examples":[["event.read","event.write","order.read"],["team.member.read","team.member.write"],["ticket.scan"],["*"]]},"roleIds":{"type":"array","items":{"type":"string"},"description":"Role IDs assigned to this team member. Effective permissions are derived from role nodes plus explicit permission nodes."},"isOwner":{"type":"boolean","description":"Whether this member is the owner of the team. Only one owner per team is allowed. Owner has full control and cannot be deleted."},"access":{"type":"object","properties":{"promoterIds":{"anyOf":[{"type":"array","items":{"type":"string","pattern":"^pmt_[0-9a-z]{26}$","description":"Unique promoter identifier"}},{"type":"null"}],"description":"Null means team-wide promoter access. An array means access is restricted to those promoters."}},"required":["promoterIds"],"description":"Promoter access summary. Omitted only for legacy/no-access records."},"tenantId":{"type":"string","readOnly":true,"description":"Tenant ID for multi-tenant isolation"}},"required":["id","createdAt","updatedAt","teamId","userId","user","isOwner","tenantId"],"description":"Team membership for the current user with denormalized user details and role-expanded team permissions."},"description":"All team memberships for the current user within this tenant."}},"required":["user","isAdmin","members"],"description":"Response payload for GET /users/me providing the current user, tenant admin status, and team memberships.","examples":[{"user":{"id":"usr_01k5hbpkfje048zccqmqfhjpep","createdAt":"2025-09-19T16:07:46.418Z","updatedAt":"2025-09-19T16:07:46.418Z","email":"j@1f.io","firstName":"Jay","lastName":"McMullen","imageUrl":"https://assets.session.services/examples/avatar.jpg"},"isAdmin":true,"members":[{"id":"mbr_01jps5cgsec5ge0b1bxa6gzkkk","createdAt":"2025-09-25T03:25:46.080Z","updatedAt":"2025-09-25T03:25:46.080Z","teamId":"tem_01jqpjksnsen9vprw95et60t2m","userId":"usr_01k5hbpkfje048zccqmqfhjpep","user":{"id":"usr_01k5hbpkfje048zccqmqfhjpep","email":"j@1f.io","firstName":"Jay","lastName":"McMullen","imageUrl":"https://assets.session.services/examples/avatar.jpg"},"permissions":["*"],"isOwner":true,"tenantId":"tnt_01abc123"}]}]}}}}}},"delete":{"operationId":"user.remove","summary":"Delete the current user's account","tags":["Users"],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"object","properties":{"deleted":{"const":true,"description":"Whether the current user account was deleted."}},"required":["deleted"],"description":"Response payload for DELETE /users/me after deleting the current account."}}}}}},"patch":{"operationId":"user.update","summary":"Update the current user's profile","tags":["Users"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"firstName":{"type":"string","minLength":1},"lastName":{"type":"string","minLength":1},"imageUrl":{"anyOf":[{"type":"string","format":"uri"},{"type":"null"}]},"metadata":{"type":"object","propertyNames":{"type":"string"},"additionalProperties":{"anyOf":[{"anyOf":[{"type":"string"},{"type":"number"},{"type":"boolean"},{"type":"null"}]},{"type":"array","items":{"anyOf":[{"anyOf":[{"type":"string"},{"type":"number"},{"type":"boolean"},{"type":"null"}]},{"type":"array","items":{}},{"type":"object","propertyNames":{"type":"string"},"additionalProperties":{}}]}},{"type":"object","propertyNames":{"type":"string"},"additionalProperties":{"anyOf":[{"anyOf":[{"type":"string"},{"type":"number"},{"type":"boolean"},{"type":"null"}]},{"type":"array","items":{}},{"type":"object","propertyNames":{"type":"string"},"additionalProperties":{}}]}}]}},"refreshToken":{"type":"string","description":"Current refresh token. When provided, new tokens with updated user data will be returned."}},"description":"Input for updating the current user's profile"}}}},"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"object","properties":{"user":{"type":"object","properties":{"id":{"type":"string","readOnly":true,"description":"Unique identifier for the user","examples":["usr_01jps5cgsd4tzjghtnt45qnhn0"]},"createdAt":{"type":"string","format":"date-time","readOnly":true,"description":"ISO 8601 timestamp when the user account was created","examples":["2026-06-07T11:39:32.854Z"]},"updatedAt":{"type":"string","format":"date-time","readOnly":true,"description":"ISO 8601 timestamp when the user account was last updated","examples":["2026-06-07T11:39:32.856Z"]},"email":{"type":"string","format":"email","description":"User's email address, used for authentication and communication","examples":["test@session.services"]},"firstName":{"type":"string","minLength":1,"description":"User's first name","examples":["Jay"]},"lastName":{"type":"string","minLength":1,"description":"User's last name","examples":["McMullen"]},"imageUrl":{"type":"string","format":"uri","description":"Optional URL to the user's profile image or avatar","examples":["https://assets.session.services/examples/avatar.jpg"]},"metadata":{"type":"object","propertyNames":{"type":"string"},"additionalProperties":{"anyOf":[{"anyOf":[{"type":"string"},{"type":"number"},{"type":"boolean"},{"type":"null"}]},{"type":"array","items":{"anyOf":[{"anyOf":[{"type":"string"},{"type":"number"},{"type":"boolean"},{"type":"null"}]},{"type":"array","items":{"anyOf":[{},{"type":"null"}]}},{"type":"object","propertyNames":{"type":"string"},"additionalProperties":{}}]}},{"type":"object","propertyNames":{"type":"string"},"additionalProperties":{"anyOf":[{"anyOf":[{"type":"string"},{"type":"number"},{"type":"boolean"},{"type":"null"}]},{"type":"array","items":{"anyOf":[{},{"type":"null"}]}},{"type":"object","propertyNames":{"type":"string"},"additionalProperties":{}}]}}]},"description":"Arbitrary key-value metadata for storing user preferences and settings","examples":[{"widgets:team_abc123":{"visibleWidgets":["revenue"]}}]}},"required":["id","createdAt","updatedAt","email","firstName","lastName"],"description":"The updated user profile","examples":[{"id":"usr_01jps5cgsd4tzjghtnt45qnhn0","createdAt":"2026-06-07T11:39:32.854Z","updatedAt":"2026-06-07T11:39:32.856Z","email":"test@session.services","firstName":"Jay","lastName":"McMullen","imageUrl":"https://assets.session.services/examples/avatar.jpg","tenantId":"tnt_01jqpj2t2kfvmstt6f6tzkbaf2"}]},"tokens":{"type":"object","properties":{"access":{"type":"string","description":"JWT access token with updated user data"},"refresh":{"type":"string","description":"Refresh token for obtaining new access tokens"}},"required":["access","refresh"],"description":"New JWT tokens with updated user data. Present when refresh token was provided in request."}},"required":["user"],"description":"Response payload for PATCH /users/me containing the updated user profile."}}}}}}},"/venues/{key}":{"get":{"operationId":"venue.get","summary":"Get venue by ID or slug","description":"Retrieve a venue using its unique ID or slug","tags":["Venues"],"parameters":[{"name":"key","in":"path","required":true,"schema":{"type":"string","description":"Venue key - either a unique ID (ven_xxx format) or URL-friendly slug","examples":["ven_01jqpjksnsen9vprw95et60t2m","sydney-opera-house"]}}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"object","properties":{"venue":{"$ref":"#/components/schemas/Venue"}},"required":["venue"]}}}}}},"patch":{"operationId":"venue.update","summary":"Update a venue","description":"Update an existing venue. Cannot change venue ownership (teamId)","tags":["Venues"],"parameters":[{"name":"key","in":"path","required":true,"schema":{"type":"string","description":"Venue key - either a unique ID (ven_xxx format) or URL-friendly slug","examples":["ven_01jqpjksnsen9vprw95et60t2m","sydney-opera-house"]}}],"requestBody":{"required":false,"content":{"application/json":{"schema":{"type":"object","properties":{"locationId":{"type":"string","pattern":"^loc_[0-9a-z]{26}$","description":"Location identifier for this venue","examples":["loc_01h2xk3j9k8m2n5p7q9r1s3t4v"]},"googlePlaceId":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Google Place ID. Pass null to unlink from Google Places, omit to leave unchanged."},"approval":{"enum":["PENDING","APPROVED","REJECTED"],"type":"string","description":"Approval status of the venue","examples":["APPROVED"]},"name":{"type":"string","minLength":3,"maxLength":100,"description":"Display name of the venue. Must be between 3 and 100 characters"},"slug":{"type":"string","minLength":3,"description":"URL-friendly slug for the venue. Must be unique within tenant"},"description":{"anyOf":[{"type":"string","maxLength":500},{"type":"null"}],"description":"Short description of the venue. Pass null to clear, omit to leave unchanged."},"image":{"anyOf":[{"type":"object","properties":{"src":{"type":"string","format":"uri","examples":["https://assets.session.services/my-image.jpg"]},"alt":{"type":"string","examples":["My Image"]},"width":{"type":"number","examples":[1080]},"height":{"type":"number","examples":[1080]}},"required":["src","alt","width","height"]},{"type":"null"}],"description":"Venue image. Pass null to clear, omit to leave unchanged."},"contact":{"anyOf":[{"type":"object","properties":{"email":{"type":"string","format":"email"},"phone":{"type":"string"},"website":{"type":"string","format":"uri"},"instagram":{"type":"string"},"facebook":{"type":"string"},"twitter":{"type":"string"},"tiktok":{"type":"string"},"youtube":{"type":"string"}}},{"type":"null"}],"description":"Contact information. Pass null to clear all contact fields, omit to leave unchanged."},"location":{"type":"object","properties":{"id":{"type":"string","pattern":"^loc_[0-9a-z]{26}$","description":"Location identifier","examples":["loc_01hk153x00eh99pagyydz03sbz"],"readOnly":true},"googlePlaceId":{"type":"string","description":"Google Place ID for this location","examples":["ChIJP3Sa8ziYEmsRUKgyFmh9AQM"]},"createdAt":{"type":"string","format":"date-time","description":"Timestamp in ISO 8601 format when the location was created","examples":["2026-06-07T11:39:32.857Z"]},"updatedAt":{"type":"string","format":"date-time","description":"Timestamp in ISO 8601 format when the location was last updated","examples":["2026-06-07T11:39:32.857Z"]},"name":{"type":"string","description":"Location name","examples":["Watson's EQ"]},"address":{"type":"string","description":"Formatted address","examples":["The, Entertainment Quarter, 1 Bent St, Moore Park NSW 2021, Australia"]},"city":{"type":"string","description":"City name","examples":["Moore Park"]},"state":{"type":"string","description":"State or region","examples":["New South Wales"]},"postcode":{"type":"string","description":"Postal code","examples":["2021"]},"country":{"type":"string","description":"Country name","examples":["Australia"]},"latitude":{"type":"number","minimum":-90,"maximum":90,"description":"Latitude coordinate","examples":[-33.8944593]},"longitude":{"type":"number","minimum":-180,"maximum":180,"description":"Longitude coordinate","examples":[151.2252255]},"timeZone":{"type":"string","minLength":1,"pattern":"^[A-Za-z0-9_+-]+(\\/[A-Za-z0-9_+-]+)*$","description":"IANA timezone identifier (e.g., 'America/New_York', 'Europe/London', 'Australia/Sydney', 'UTC'). Must be validated against the IANA timezone database where used.","examples":["Australia/Sydney"]},"types":{"type":"array","items":{"type":"string"},"description":"Google Place types indicating the category and nature of this location","examples":[["establishment","point_of_interest","stadium"]]},"description":{"type":"string","description":"AI-generated description of the place, when available","examples":["Historic outdoor amphitheater known for summer concerts"]},"image":{"type":"object","properties":{"src":{"type":"string","format":"uri","examples":["https://assets.session.services/my-image.jpg"]},"alt":{"type":"string","examples":["My Image"]},"width":{"type":"number","examples":[1080]},"height":{"type":"number","examples":[1080]}},"required":["src","alt","width","height"],"description":"Primary location photo"}},"required":["id","createdAt","updatedAt","name","address","country","latitude","longitude","timeZone"],"description":"Physical location details including address, coordinates, and timezone"},"capacity":{"anyOf":[{"type":"integer","minimum":1,"maximum":9007199254740991},{"type":"null"}],"description":"Maximum capacity. Pass null to clear, omit to leave unchanged."},"metadata":{"type":"object","propertyNames":{"type":"string","minLength":1,"maxLength":40,"description":"Metadata key. Must be 1-40 characters"},"additionalProperties":{"type":"string","maxLength":500,"description":"Metadata value. Must not exceed 500 characters"},"description":"Flexible key-value metadata storage for custom configuration. Similar to Stripe's metadata API. Maximum 50 keys, key names up to 40 characters, values up to 500 characters."}},"additionalProperties":false}}}},"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"object","properties":{"venue":{"$ref":"#/components/schemas/Venue"}},"required":["venue"]}}}}}},"delete":{"operationId":"venue.remove","summary":"Delete a venue","description":"Soft delete a venue","tags":["Venues"],"parameters":[{"name":"key","in":"path","required":true,"schema":{"type":"string","minLength":1,"description":"Venue key - either a unique ID (ven_xxx format) or URL-friendly slug","examples":["ven_01jqpjksnsen9vprw95et60t2m","sydney-opera-house"]}}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"object","properties":{"venue":{"$ref":"#/components/schemas/Venue"}},"required":["venue"]}}}}}}},"/venues":{"get":{"operationId":"venue.list","summary":"List venues with cursor-based pagination","description":"Returns venues with cursor pagination. Supports filtering by team, location-based search, and text query","tags":["Venues"],"parameters":[{"name":"teamId","in":"query","schema":{"type":"string","description":"Filter venues by owner team ID"},"allowEmptyValue":true,"allowReserved":true},{"name":"approval","in":"query","schema":{"enum":["PENDING","APPROVED","REJECTED"],"type":"string","description":"Filter venues by approval status. PENDING: awaiting review, APPROVED: can be used for events, REJECTED: cannot be used"},"allowEmptyValue":true,"allowReserved":true},{"name":"query","in":"query","schema":{"type":"string","description":"Optional search query for filtering venues by name or slug"},"allowEmptyValue":true,"allowReserved":true},{"name":"latitude","in":"query","schema":{"type":"number","minimum":-90,"maximum":90,"description":"Latitude for location-based search. Must be used with longitude"},"allowEmptyValue":true,"allowReserved":true},{"name":"longitude","in":"query","schema":{"type":"number","minimum":-180,"maximum":180,"description":"Longitude for location-based search. Must be used with latitude"},"allowEmptyValue":true,"allowReserved":true},{"name":"radius","in":"query","schema":{"type":"number","minimum":1,"maximum":20000,"description":"Search radius in kilometers (1-20000). Requires latitude and longitude"},"allowEmptyValue":true,"allowReserved":true},{"name":"sort","in":"query","schema":{"enum":["createdAt"],"type":"string","description":"Optional list sort field. Use `createdAt` to return newest or oldest venues first.","examples":["createdAt"]},"allowEmptyValue":true,"allowReserved":true},{"name":"direction","in":"query","schema":{"enum":["asc","desc"],"type":"string","description":"Sort direction for venue lists. Defaults to `desc` when `sort` is provided.","examples":["desc"]},"allowEmptyValue":true,"allowReserved":true},{"name":"limit","in":"query","schema":{"type":"integer","minimum":1,"maximum":100,"default":20,"description":"Maximum number of venues to return per request (1-100, default: 20)","examples":[20]},"allowEmptyValue":true,"allowReserved":true},{"name":"cursor","in":"query","schema":{"type":"string","description":"Pagination cursor from previous response. Used to fetch next page of results"},"allowEmptyValue":true,"allowReserved":true}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"object","properties":{"venues":{"type":"array","items":{"$ref":"#/components/schemas/Venue"},"description":"Array of venues for the current result set"},"before":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Cursor for navigating backward in the result set. Omitted when there are no prior results.","examples":["eyJ2ZXJzaW9uIjoxLCJpbnRlbnQiOnsic291cmNlIjoiZGVtbyJ9LCJwb3MiOnsicHJpbWFyeUtleSI6InBybV8wMXM4NTNqIn19"]},"after":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Cursor for navigating forward in the result set. Omitted when there are no subsequent results.","examples":["eyJ2ZXJzaW9uIjoxLCJpbnRlbnQiOnsic291cmNlIjoiZGVtbyJ9LCJwb3MiOnsicHJpbWFyeUtleSI6InBybV8wMXM4NTNkIn19"]},"limit":{"type":"number","minimum":1,"description":"Maximum number of items to return in each result set","examples":[20]}},"required":["venues","limit"],"description":"Paginated response containing venues with cursor for next page"}}}}}},"post":{"operationId":"venue.create","summary":"Create a new venue","description":"Create a new venue. Venue will be owned by the specified team but can be used by all teams for their events","tags":["Venues"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"teamId":{"type":"string","description":"Team that manages this venue"},"locationId":{"type":"string","pattern":"^loc_[0-9a-z]{26}$","description":"Location identifier for this venue","examples":["loc_01h2xk3j9k8m2n5p7q9r1s3t4v"]},"name":{"type":"string","minLength":3,"maxLength":100,"description":"Display name of the venue. Must be between 3 and 100 characters"},"slug":{"type":"string","minLength":3,"description":"URL-friendly slug for the venue. If not provided, will be automatically generated from the name. Must be unique within tenant"},"description":{"type":"string","maxLength":500,"description":"Short description of the venue for listings and discovery"},"image":{"type":"object","properties":{"src":{"type":"string","format":"uri","examples":["https://assets.session.services/my-image.jpg"]},"alt":{"type":"string","examples":["My Image"]},"width":{"type":"number","examples":[1080]},"height":{"type":"number","examples":[1080]}},"required":["src","alt","width","height"],"description":"Venue image"},"contact":{"type":"object","properties":{"email":{"type":"string","format":"email","description":"Public contact email for venue inquiries"},"phone":{"type":"string","description":"Public contact phone number"},"website":{"type":"string","format":"uri","description":"Venue website URL"},"instagram":{"type":"string","description":"Instagram profile URL"},"facebook":{"type":"string","description":"Facebook page URL"},"twitter":{"type":"string","description":"Twitter/X profile URL"},"tiktok":{"type":"string","description":"TikTok profile URL"},"youtube":{"type":"string","description":"YouTube channel URL"}},"description":"Public contact information and social media links"},"capacity":{"type":"integer","minimum":1,"maximum":9007199254740991,"description":"Maximum capacity of the venue (number of attendees)"},"metadata":{"type":"object","propertyNames":{"type":"string","minLength":1,"maxLength":40,"description":"Metadata key. Must be 1-40 characters"},"additionalProperties":{"type":"string","maxLength":500,"description":"Metadata value. Must not exceed 500 characters"},"description":"Flexible key-value metadata storage for custom configuration. Similar to Stripe's metadata API. Maximum 50 keys, key names up to 40 characters, values up to 500 characters."}},"required":["teamId","locationId","name"],"additionalProperties":false}}}},"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"object","properties":{"venue":{"$ref":"#/components/schemas/Venue"}},"required":["venue"]}}}}}}},"/venues/{key}/locations":{"post":{"operationId":"venue.linkLocation","summary":"Link location to venue","description":"Link a location to this venue. Allows the venue to be discovered when users search for this location. A venue can have multiple linked locations (e.g., different addresses, branded names). Requires venue access on the owning team (for example, `venue.write`).","tags":["Venues"],"parameters":[{"name":"key","in":"path","required":true,"schema":{"type":"string","description":"Venue key - either a unique ID (ven_xxx format) or URL-friendly slug","examples":["ven_01jqpjksnsen9vprw95et60t2m","sydney-opera-house"]}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"locationKey":{"type":"string","description":"Location ID (loc_xxx) or Google Place ID to link to this venue","examples":["loc_01jps5cgsm7qxvh6watsons0eq","ChIJP3Sa8ziYEmsRUKgyFmh9AQM"]}},"required":["locationKey"],"additionalProperties":false}}}},"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"object","properties":{"venue":{"$ref":"#/components/schemas/Venue"}},"required":["venue"]}}}}}}},"/venues/{key}/locations/{locationKey}":{"delete":{"operationId":"venue.unlinkLocation","summary":"Unlink location from venue","description":"Remove a location link from this venue. The location will no longer show this venue's branding. Requires venue access on the owning team (for example, `venue.write`).","tags":["Venues"],"parameters":[{"name":"key","in":"path","required":true,"schema":{"type":"string","description":"Venue key - either a unique ID (ven_xxx format) or URL-friendly slug","examples":["ven_01jqpjksnsen9vprw95et60t2m","sydney-opera-house"]}},{"name":"locationKey","in":"path","required":true,"schema":{"type":"string","description":"Location ID (loc_xxx) or Google Place ID to unlink from this venue","examples":["loc_01jps5cgsm7qxvh6watsons0eq","ChIJP3Sa8ziYEmsRUKgyFmh9AQM"]}}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"object","properties":{"venue":{"$ref":"#/components/schemas/Venue"}},"required":["venue"]}}}}}}},"/qr":{"get":{"tags":["QR Codes"],"summary":"Generate QR code image","description":"Generate a customizable QR code as a PNG image with support for custom colors, sizes, error correction levels, and optional logo overlays.","operationId":"generateQrCode","parameters":[{"name":"value","in":"query","required":true,"description":"The value to encode in the QR code","schema":{"type":"string","example":"https://session.services"}},{"name":"format","in":"query","required":false,"description":"Output image format","schema":{"type":"string","enum":["png","svg"],"default":"png","example":"png"}},{"name":"size","in":"query","required":false,"description":"Size of the output image in pixels","schema":{"type":"integer","minimum":0,"maximum":100000,"default":600,"example":600}},{"name":"ecLevel","in":"query","required":false,"description":"Error correction level (L=7%, M=15%, Q=25%, H=30%)","schema":{"type":"string","enum":["L","M","Q","H"],"default":"M","example":"M"}},{"name":"quietZone","in":"query","required":false,"description":"Quiet zone (margin) around QR code","schema":{"type":"integer","minimum":0,"maximum":100000,"default":1,"example":1}},{"name":"bgColor","in":"query","required":false,"description":"Background color (hex format)","schema":{"type":"string","pattern":"^#","minLength":4,"maxLength":9,"default":"#fff","example":"#ffffff"}},{"name":"fgColor","in":"query","required":false,"description":"Foreground color (hex format)","schema":{"type":"string","pattern":"^#","minLength":4,"maxLength":9,"default":"#111","example":"#000000"}},{"name":"logoImage","in":"query","required":false,"description":"URL of logo image to overlay on the QR code","schema":{"type":"string","format":"uri","example":"https://assets.session.services/logo.png"}},{"name":"logoWidth","in":"query","required":false,"description":"Logo width in pixels","schema":{"type":"integer","minimum":0,"maximum":100000,"default":300,"example":300}},{"name":"logoHeight","in":"query","required":false,"description":"Logo height in pixels","schema":{"type":"integer","minimum":0,"maximum":100000,"default":300,"example":300}},{"name":"logoOpacity","in":"query","required":false,"description":"Logo opacity (0-100)","schema":{"type":"integer","minimum":0,"maximum":100,"default":100,"example":100}},{"name":"logoRemoveBg","in":"query","required":false,"description":"Add background behind logo to improve visibility","schema":{"type":"boolean","default":false,"example":false}}],"responses":{"200":{"description":"Successfully generated QR code image","content":{"image/png":{"schema":{"type":"string","format":"binary"}},"image/svg+xml":{"schema":{"type":"string"}}},"headers":{"Cache-Control":{"description":"Cache control header for efficient caching","schema":{"type":"string","example":"public, max-age=31536000, immutable"}}}},"400":{"description":"Invalid parameters","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","example":"Invalid parameters"},"details":{"type":"string"}}}}}},"500":{"description":"Failed to generate QR code","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","example":"Failed to generate QR code"},"message":{"type":"string","description":"Detailed error message"}}}}}}}}}}}