{"openapi":"3.1.0","info":{"title":"event67 Partner API","version":"2026-09-10","description":"A read-mostly REST API over one organization’s events, guest list and engagement data, authenticated with an org-scoped API key.\n\nGuides, quick start and the versioning policy: https://event67.com/developers/\nChangelog: https://event67.com/developers/changelog/\n\nEvery response is `{ data }`; paged collections add `{ meta: { nextCursor } }`; every failure is `{ error: { code, message, details?, requestId } }`. Timestamps are ISO-8601 in UTC. Responses are `Cache-Control: private, no-store` and carry an `x-request-id` header.\n\nAdditive changes — a new endpoint, a new optional parameter, a new response field — ship under `/partner/v1` without notice, so ignore fields you do not recognise. Breaking changes ship as `/partner/v2`."},"servers":[{"url":"https://api.event67.com"}],"tags":[{"name":"Account","description":"Who this key is."},{"name":"Events","description":"Events and the information published about them."},{"name":"Schedule","description":"Sessions, tracks, rooms and speakers."},{"name":"Attendees","description":"The guest list, and the two writes in this API."},{"name":"Engagement","description":"Arrivals, session scans, form answers and feedback."},{"name":"Reference","description":"The spec and its rendered form. No key required."}],"components":{"securitySchemes":{"apiKey":{"type":"http","scheme":"bearer","bearerFormat":"e67_live_…","description":"An organization API key, minted in the event67 console and shown once. Send it as `Authorization: Bearer e67_live_…`. `X-API-Key: e67_live_…` is accepted as a secondary for tooling that cannot set an Authorization header; `Authorization` wins when both are present."}},"schemas":{"Attendee":{"type":"object","properties":{"id":{"type":"string","format":"uuid","description":"The attendee.","example":"f13c6b28-9a05-4d71-b6e4-20c8f5a9d374"},"eventId":{"type":"string","format":"uuid","description":"The event they are on.","example":"8d2f0a16-4e93-4b28-b0c7-1f5e9a3d6c40"},"displayName":{"type":"string","description":"Their name as one string. event67 stores a single name field rather than a first and last, so this is the whole of it.","example":"Dana Okonkwo"},"email":{"type":"string","description":"The address they were invited at. Unique within an event, and immutable.","example":"dana@example.com"},"company":{"type":["string","null"],"description":"Where they work, or null.","example":"Meridian Logistics"},"jobTitle":{"type":["string","null"],"description":"Their role, or null.","example":"Head of Operations"},"status":{"type":"string","enum":["invited","active","revoked"],"description":"`invited` — on the list, not yet signed in. `active` — signed in and claimed. `revoked` — removed by the organiser.","example":"active"},"visibleInList":{"type":"boolean","description":"Whether they agreed to appear in the in-app attendee directory. Respect it if you republish the guest list anywhere.","example":true},"badgeCode":{"type":"string","description":"The short code printed on their badge card, so staff can type it when a QR scanner fails.\n\nSix characters from the 31-character alphabet `23456789ABCDEFGHJKMNPQRSTUVWXYZ`, which\nomits every confusable pair (`0`/`O`, `1`/`I`/`L`). The first five are random and the\nsixth is a check character: `alphabet[(Σ (i + 1) × value_i) mod 31]` over the five data\ncharacters, with `i` zero-based and `value` the index in the alphabet. That catches every\nsingle mistyped character and every transposition of two adjacent ones, so you can\nvalidate a code before you send it.\n\nReturned in the STORED form: uppercase, six characters, no separator. event67 shows it to\npeople grouped as `A7K-3QS`; if you display it, group it the same way. Unique within an\nevent, not across the platform.","example":"A7K3QS"},"invitedAt":{"type":"string","description":"When an invitation email was last sent, or null if none ever was.","example":"2026-09-02T08:00:00.000Z","format":"date-time"},"checkedInAt":{"type":"string","description":"When they arrived at the venue, or null.","example":"2026-10-29T14:52:31.006Z","format":"date-time"},"createdAt":{"type":"string","description":"When the record was created.","example":"2026-09-01T16:22:47.910Z","format":"date-time"},"updatedAt":{"type":"string","description":"When it last changed.","example":"2026-10-29T14:52:31.006Z","format":"date-time"}},"required":["id","eventId","displayName","email","company","jobTitle","status","visibleInList","badgeCode","invitedAt","checkedInAt","createdAt","updatedAt"],"description":"One attendee. The QR token behind their badge, their invite code, the internal user id, the sign-in identity and every per-message email engagement timestamp are deliberately absent, at every scope. `badgeCode` is present and is not an exception to that: it is printed on the lanyard for anyone to read, and holding one admits nobody — every endpoint that accepts a badge code already requires an event moderator or an organization admin."},"CheckIn":{"type":"object","properties":{"attendeeId":{"type":"string","format":"uuid","description":"Who arrived.","example":"f13c6b28-9a05-4d71-b6e4-20c8f5a9d374"},"checkedInAt":{"type":"string","description":"When they arrived at the venue.","example":"2026-10-29T14:52:31.006Z","format":"date-time"}},"required":["attendeeId","checkedInAt"],"description":"One arrival at the venue. Distinct from a session scan: this is the front desk, `/session-attendance` is the doors."},"Error":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","description":"A stable machine-readable code. Branch on this, never on `message`.","example":"NOT_FOUND"},"message":{"type":"string","description":"A sentence written for a person. This text changes without notice.","example":"No such event."},"details":{"description":"Present when there is something specific to say. Most errors carry `reason`; `INVALID_INPUT` carries `fields` keyed by dotted path; a duplicate attendee carries `attendeeId`."},"requestId":{"type":"string","description":"The same value as the `x-request-id` response header. Quote it when asking about one call.","example":"9b0e4f21-8c76-4a3d-bb52-0e17c4d9a638"}},"required":["code","message","requestId"]}},"required":["error"],"description":"Every failure in the Partner API has this shape."},"Event":{"type":"object","properties":{"id":{"type":"string","format":"uuid","description":"The event.","example":"8d2f0a16-4e93-4b28-b0c7-1f5e9a3d6c40"},"slug":{"type":"string","description":"The URL-safe name, unique within the organization.","example":"northwind-summit-2026"},"name":{"type":"string","description":"Its title.","example":"Northwind Summit 2026"},"description":{"type":"string","description":"Free text. Empty rather than null when unset.","example":"Two days on supply chains, in New York."},"status":{"type":"string","enum":["draft","published","archived"],"description":"Draft events are visible to you because the key is an organization credential; they are not visible to attendees.","example":"published"},"startAt":{"type":"string","description":"When it starts.","example":"2026-10-29T15:00:00.000Z","format":"date-time"},"endAt":{"type":"string","description":"When it ends.","example":"2026-10-30T23:00:00.000Z","format":"date-time"},"timezone":{"type":"string","description":"The IANA zone the event is run in. Every timestamp above is UTC, so this is what you need to render a local start time.","example":"America/New_York"},"location":{"type":"string","description":"Free text. Empty rather than null when unset.","example":"Javits Center, New York"},"createdAt":{"type":"string","description":"When the event record was created.","example":"2026-06-02T09:14:22.117Z","format":"date-time"},"updatedAt":{"type":"string","description":"When it last changed.","example":"2026-09-01T11:40:03.882Z","format":"date-time"}},"required":["id","slug","name","description","status","startAt","endAt","timezone","location","createdAt","updatedAt"],"description":"One event."},"Feedback":{"type":"object","properties":{"id":{"type":"string","format":"uuid","description":"The feedback record.","example":"aa41f5d3-2c68-4b09-9e37-5d1a08c6b429"},"attendeeId":{"type":["string","null"],"format":"uuid","description":"Who left it, or null when the person is not on this event as an attendee — an organiser rating their own event, for instance.","example":"f13c6b28-9a05-4d71-b6e4-20c8f5a9d374"},"sessionId":{"type":["string","null"],"format":"uuid","description":"The session it is about, or null when it is about the event as a whole.","example":"c51b7e04-2d98-4a1f-8b3c-6e0a95d27f11"},"kind":{"type":"string","enum":["feedback","suggestion","rating","review"],"description":"`rating` is a bare score, `review` a score with a note, `feedback` and `suggestion` are notes with no score.","example":"review"},"rating":{"type":["integer","null"],"description":"1 to 5, or null when there is no score.","example":5},"comment":{"type":["string","null"],"description":"The written note, or null.","example":"Worth the flight."},"createdAt":{"type":"string","description":"When it was left.","example":"2026-10-29T17:20:44.001Z","format":"date-time"}},"required":["id","attendeeId","sessionId","kind","rating","comment","createdAt"],"description":"One piece of feedback."},"Form":{"type":"object","properties":{"id":{"type":"string","format":"uuid","description":"The form.","example":"5b8c1d90-7e24-4f38-b6a1-0c93e7d54210"},"eventId":{"type":"string","format":"uuid","description":"The event it belongs to.","example":"8d2f0a16-4e93-4b28-b0c7-1f5e9a3d6c40"},"name":{"type":"string","description":"Its name.","example":"Dietary requirements"},"description":{"type":"string","description":"Free text, empty when unset.","example":""},"status":{"type":"string","enum":["draft","open","closed"],"description":"`draft` is not yet sent, `open` accepts answers, `closed` no longer does.","example":"open"},"fields":{"type":"array","items":{"type":"object","properties":{"key":{"type":"string","description":"The stable key an answer is stored under. Never renamed.","example":"diet"},"label":{"type":"string","description":"What the attendee reads.","example":"Any dietary requirements?"},"type":{"type":"string","description":"Which control this is, and therefore what shape its answer takes. Today one of: short_text, long_text, email, phone, number, date, single_select, multi_select, checkbox, rating. New types are added without notice.","example":"short_text"},"required":{"type":"boolean","description":"Whether the form refuses to submit without it.","example":false}},"required":["key","label","type","required"],"description":"One field on a form."},"description":"The field definitions, in the order they are asked."}},"required":["id","eventId","name","description","status","fields"],"description":"One form and its field definitions."},"FormSubmission":{"type":"object","properties":{"id":{"type":"string","format":"uuid","description":"The submission.","example":"e07a2c46-9b31-4d75-8206-1af5c9e0b7d3"},"formId":{"type":"string","format":"uuid","description":"Which form was answered.","example":"5b8c1d90-7e24-4f38-b6a1-0c93e7d54210"},"attendeeId":{"type":"string","format":"uuid","description":"Who answered it.","example":"f13c6b28-9a05-4d71-b6e4-20c8f5a9d374"},"submittedAt":{"type":"string","description":"When it was first submitted.","example":"2026-10-20T10:03:55.712Z","format":"date-time"},"updatedAt":{"type":"string","description":"When it was last corrected.","example":"2026-10-20T10:03:55.712Z","format":"date-time"},"answers":{"type":"object","additionalProperties":{},"description":"The answers, keyed by field `key`. Value types follow the field `type`: a `multi_select` is an array, a `checkbox` a boolean, a `rating` a number.","example":{"diet":"No nuts"}}},"required":["id","formId","attendeeId","submittedAt","updatedAt","answers"],"description":"One attendee's answers to one form."},"InfoSection":{"type":"object","properties":{"id":{"type":"string","format":"uuid","description":"The section.","example":"3c7f18b6-0d49-4e52-a7c1-92b8f0e35a47"},"title":{"type":"string","description":"Its heading.","example":"Getting there"},"summary":{"type":["string","null"],"description":"A one-line teaser, or null.","example":"Subway, taxi and parking."},"body":{"type":"string","description":"The prose, empty when unset.","example":"The 7 train stops at 34th St — Hudson Yards."},"icon":{"type":"string","description":"Which icon the apps draw beside it.","example":"transport"},"details":{"type":"array","items":{"type":"object","properties":{"label":{"type":"string","description":"The row label.","example":"Nearest station"},"value":{"type":"string","description":"The row value.","example":"34th St — Hudson Yards"}},"required":["label","value"],"description":"One key-detail row inside an info section."},"description":"Key-detail rows, rendered as a small table. An ARRAY of label/value pairs, not a string."},"sortOrder":{"type":"integer","description":"Where it sits in the organiser-defined order.","example":2}},"required":["id","title","summary","body","icon","details","sortOrder"],"description":"One published information section. Drafts and sections an organiser has hidden from attendees are never returned."},"Me":{"type":"object","properties":{"org":{"type":"object","properties":{"id":{"type":"string","format":"uuid","description":"The organization this key belongs to.","example":"2f8b40d1-6c39-4a72-9e18-53c0a7b4e961"},"name":{"type":"string","description":"Its display name.","example":"Northwind Events"}},"required":["id","name"],"description":"The organization behind an API key."},"key":{"type":"object","properties":{"id":{"type":"string","format":"uuid","description":"The key record. Not the key itself.","example":"61e7c3a8-5d02-4b19-8f74-0c9a2e6b1d53"},"name":{"type":"string","description":"The name it was minted with.","example":"Northwind CRM"},"prefix":{"type":"string","description":"The first characters of the key, as shown in the console. Enough to recognise which credential is in use, not enough to authenticate.","example":"e67_live_7Kq2Bx9F"},"scopes":{"type":"array","items":{"type":"string","enum":["events:read","attendees:read","attendees:write","engagement:read"]},"description":"What this key may reach.","example":["events:read","attendees:read"]},"expiresAt":{"type":"string","description":"When the key stops working, or null if it never does.","example":"2027-01-01T00:00:00.000Z","format":"date-time"}},"required":["id","name","prefix","scopes","expiresAt"],"description":"The key behind this request. The secret itself exists only in the response that created it and is never returned again."}},"required":["org","key"],"description":"Who this request is, and what it may do."},"PageMeta":{"type":"object","properties":{"nextCursor":{"type":["string","null"],"description":"Pass this back as `cursor` for the next page. `null` means this was the last page.","example":"eyJhdCI6IjIwMjYtMTAtMjlUMTU6MDA6MDAuMDAwWiIsImlkIjoiOGQyZjBhMTYtNGM3Yi00ZjllLTlhMWQtM2I2ZTVjMmYwMDcxIn0"}},"required":["nextCursor"],"description":"Pagination state for a cursor-paged collection."},"Room":{"type":"object","properties":{"id":{"type":"string","format":"uuid","description":"The room.","example":"7e3d95a1-c8b0-4f26-a94d-1b60e2c7f508"},"name":{"type":"string","description":"Its name.","example":"Hall 2B"},"sortOrder":{"type":"integer","description":"Where it sits in the organiser-defined order.","example":0}},"required":["id","name","sortOrder"],"description":"One room."},"Session":{"type":"object","properties":{"id":{"type":"string","format":"uuid","description":"The session.","example":"c51b7e04-2d98-4a1f-8b3c-6e0a95d27f11"},"eventId":{"type":"string","format":"uuid","description":"The event it belongs to.","example":"8d2f0a16-4e93-4b28-b0c7-1f5e9a3d6c40"},"title":{"type":"string","description":"Its title.","example":"Rebuilding a supplier network in ninety days"},"description":{"type":"string","description":"Free text, empty when unset.","example":"A post-mortem."},"type":{"type":"string","description":"What kind of item this is on the programme. Today one of: keynote, talk, panel, fireside, lightning, workshop, masterclass, training, demo, roundtable, breakout, qa, ceremony, announcement, exhibition, networking, reception, party, meal, break, other. New kinds are added without notice, so treat an unrecognised value as `other`.","example":"talk"},"startAt":{"type":"string","description":"When it starts.","example":"2026-10-29T16:30:00.000Z","format":"date-time"},"endAt":{"type":"string","description":"When it ends.","example":"2026-10-29T17:15:00.000Z","format":"date-time"},"trackId":{"type":["string","null"],"format":"uuid","description":"The track it sits on, or null.","example":"a2f61c8d-70b4-4e29-9d13-5c8e0b4a7d62"},"room":{"type":["string","null"],"description":"Where it happens, as free text. This is NOT an id into `/rooms`: a session records the room it was given by name, and the two lists are maintained separately.","example":"Hall 2B"},"capacity":{"type":["integer","null"],"description":"Seats, or null when uncapped.","example":180},"speakerIds":{"type":"array","items":{"type":"string","format":"uuid"},"description":"The speakers on this session, in billing order.","example":["d40a1f73-6c25-4b98-8e07-3a91d5c6b204"]}},"required":["id","eventId","title","description","type","startAt","endAt","trackId","room","capacity","speakerIds"],"description":"One item on the programme."},"SessionAttendance":{"type":"object","properties":{"id":{"type":"string","format":"uuid","description":"The scan record.","example":"2a9d5f80-3b17-4c6e-9012-7fa4c8b3e5d6"},"sessionId":{"type":"string","format":"uuid","description":"Which session.","example":"c51b7e04-2d98-4a1f-8b3c-6e0a95d27f11"},"attendeeId":{"type":"string","format":"uuid","description":"Who was scanned.","example":"f13c6b28-9a05-4d71-b6e4-20c8f5a9d374"},"scannedAt":{"type":"string","description":"When they were scanned in.","example":"2026-10-29T16:33:12.480Z","format":"date-time"}},"required":["id","sessionId","attendeeId","scannedAt"],"description":"One attendee scanned into one session."},"Speaker":{"type":"object","properties":{"id":{"type":"string","format":"uuid","description":"The speaker.","example":"d40a1f73-6c25-4b98-8e07-3a91d5c6b204"},"name":{"type":"string","description":"Their name.","example":"Priya Raman"},"title":{"type":["string","null"],"description":"Their job title, or null.","example":"VP Supply Chain"},"company":{"type":["string","null"],"description":"Where they work, or null.","example":"Meridian Logistics"},"bio":{"type":["string","null"],"description":"Free text, or null.","example":"Twenty years in freight."},"photoUrl":{"type":["string","null"],"description":"An absolute URL to their photograph, when the organiser supplied one as a link. Null when the photo was uploaded instead — read `photoPath` in that case.","example":"https://example.com/priya.jpg"},"photoPath":{"type":["string","null"],"description":"The object path of an uploaded photograph, or null. Resolving it to a URL needs the event67 apps; a partner rendering a photo should prefer `photoUrl`.","example":"speakers/d40a1f73.jpg"}},"required":["id","name","title","company","bio","photoUrl","photoPath"],"description":"One speaker."},"Sponsor":{"type":"object","properties":{"id":{"type":"string","format":"uuid","description":"The sponsor.","example":"b93e0c17-4a58-4d03-9f21-8c7b0e5a2f14"},"name":{"type":"string","description":"Their name.","example":"Harbourline"},"tier":{"type":"string","description":"The organiser-defined tier, e.g. gold. Free text, not an enum.","example":"gold"},"websiteUrl":{"type":["string","null"],"description":"Their site, or null.","example":"https://example.com"},"description":{"type":"string","description":"Free text, empty when unset.","example":"Port logistics."},"sortOrder":{"type":"integer","description":"Where they sit in the organiser-defined order.","example":0},"featuredOnCards":{"type":"boolean","description":"True for the one sponsor per event whose logo prints on every attendee's QR card. At most one sponsor of an event has this, and it may be none.","example":true}},"required":["id","name","tier","websiteUrl","description","sortOrder","featuredOnCards"],"description":"One sponsor."},"Track":{"type":"object","properties":{"id":{"type":"string","format":"uuid","description":"The track.","example":"a2f61c8d-70b4-4e29-9d13-5c8e0b4a7d62"},"name":{"type":"string","description":"Its name.","example":"Operations"},"color":{"type":["string","null"],"description":"The hex colour the apps tint it with, or null.","example":"#1E2A36"},"sortOrder":{"type":"integer","description":"Where it sits in the organiser-defined order.","example":0}},"required":["id","name","color","sortOrder"],"description":"One track."}},"parameters":{}},"paths":{"/partner/v1/docs":{"get":{"operationId":"getReference","tags":["Reference"],"summary":"The browsable reference","description":"This document rendered with Redoc, served unauthenticated.","security":[],"responses":{"200":{"description":"An HTML page."}}}},"/partner/v1/events":{"get":{"operationId":"listEvents","tags":["Events"],"summary":"List events","description":"Every event on the organization, newest first, including drafts — a key is an organization credential, so there is nothing here to hide from it. This is the only collection ordered newest first; every other one is oldest first so an incremental sync can keep a high-water mark.","security":[{"apiKey":[]}],"parameters":[{"schema":{"type":"integer","minimum":1,"maximum":200,"default":50,"description":"How many records to return. 1 to 200.","example":50},"required":false,"name":"limit","in":"query"},{"schema":{"type":"string","minLength":1,"maxLength":512,"description":"The opaque `meta.nextCursor` from the previous page. Omit it for the first page. Cursors are keyset based, and their contents will change without notice, so copy one rather than constructing it.","example":"eyJhdCI6IjIwMjYtMTAtMjlUMTU6MDA6MDAuMDAwWiIsImlkIjoiOGQyZjBhMTYtNGM3Yi00ZjllLTlhMWQtM2I2ZTVjMmYwMDcxIn0"},"required":false,"name":"cursor","in":"query"},{"schema":{"type":"string","enum":["draft","published","archived"],"description":"Return only events in this status. Omit for all of them.","example":"published"},"required":false,"name":"status","in":"query"}],"responses":{"200":{"description":"A page of events.","content":{"application/json":{"schema":{"type":"object","properties":{"data":{"type":"array","items":{"$ref":"#/components/schemas/Event"}},"meta":{"$ref":"#/components/schemas/PageMeta"}},"required":["data","meta"]}}}},"400":{"description":"The request did not validate. `details.reason` is one of `invalid_body`, `invalid_cursor`. For `invalid_body` the code is `INVALID_INPUT` and `details.fields` is an object keyed by each failing value's dotted path; for a cursor we did not issue the code is `INVALID_CURSOR`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"No usable API key. `details.reason` is one of `missing_key`, `invalid_key`, `revoked_key`, `expired_key`, and the response carries `WWW-Authenticate: Bearer realm=\"event67 partner API\"`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"402":{"description":"The organization is not entitled to integrations. `details.reason` is one of `payment_required`, `billing_suspended`, `billing_closed`. Not retryable — somebody has to act in the console.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"`details.reason` is one of `insufficient_scope`, `org_suspended`. For `insufficient_scope`, `details.requiredScope` names the scope this key is missing.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"No such record, or it belongs to another organization. The two are deliberately indistinguishable.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Too many requests on this key. Wait for `Retry-After` seconds; `X-RateLimit-Limit`, `X-RateLimit-Remaining` and `X-RateLimit-Reset` describe the window.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"503":{"description":"Integrations are switched off platform-wide. Temporary and affects everybody; back off rather than paging somebody.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/partner/v1/events/{eventId}":{"get":{"operationId":"getEvent","tags":["Events"],"summary":"Get one event","security":[{"apiKey":[]}],"parameters":[{"schema":{"type":"string","format":"uuid","description":"The event. An id belonging to another organization answers 404, not 403.","example":"8d2f0a16-4e93-4b28-b0c7-1f5e9a3d6c40"},"required":true,"name":"eventId","in":"path"}],"responses":{"200":{"description":"The event.","content":{"application/json":{"schema":{"type":"object","properties":{"data":{"$ref":"#/components/schemas/Event"}},"required":["data"]}}}},"400":{"description":"The request did not validate. `details.reason` is one of `invalid_body`, `invalid_cursor`. For `invalid_body` the code is `INVALID_INPUT` and `details.fields` is an object keyed by each failing value's dotted path; for a cursor we did not issue the code is `INVALID_CURSOR`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"No usable API key. `details.reason` is one of `missing_key`, `invalid_key`, `revoked_key`, `expired_key`, and the response carries `WWW-Authenticate: Bearer realm=\"event67 partner API\"`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"402":{"description":"The organization is not entitled to integrations. `details.reason` is one of `payment_required`, `billing_suspended`, `billing_closed`. Not retryable — somebody has to act in the console.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"`details.reason` is one of `insufficient_scope`, `org_suspended`. For `insufficient_scope`, `details.requiredScope` names the scope this key is missing.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"No such record, or it belongs to another organization. The two are deliberately indistinguishable.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Too many requests on this key. Wait for `Retry-After` seconds; `X-RateLimit-Limit`, `X-RateLimit-Remaining` and `X-RateLimit-Reset` describe the window.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"503":{"description":"Integrations are switched off platform-wide. Temporary and affects everybody; back off rather than paging somebody.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/partner/v1/events/{eventId}/attendees":{"get":{"operationId":"listAttendees","tags":["Attendees"],"summary":"List attendees","description":"The guest list, oldest first, so a sync can resume from its last cursor. Page with `limit=200` before asking for a rate-limit raise.","security":[{"apiKey":[]}],"parameters":[{"schema":{"type":"string","format":"uuid","description":"The event. An id belonging to another organization answers 404, not 403.","example":"8d2f0a16-4e93-4b28-b0c7-1f5e9a3d6c40"},"required":true,"name":"eventId","in":"path"},{"schema":{"type":"integer","minimum":1,"maximum":200,"default":50,"description":"How many records to return. 1 to 200.","example":50},"required":false,"name":"limit","in":"query"},{"schema":{"type":"string","minLength":1,"maxLength":512,"description":"The opaque `meta.nextCursor` from the previous page. Omit it for the first page. Cursors are keyset based, and their contents will change without notice, so copy one rather than constructing it.","example":"eyJhdCI6IjIwMjYtMTAtMjlUMTU6MDA6MDAuMDAwWiIsImlkIjoiOGQyZjBhMTYtNGM3Yi00ZjllLTlhMWQtM2I2ZTVjMmYwMDcxIn0"},"required":false,"name":"cursor","in":"query"},{"schema":{"type":"string","enum":["invited","active","revoked"],"description":"Return only attendees in this status. Omit for all of them.","example":"active"},"required":false,"name":"status","in":"query"}],"responses":{"200":{"description":"A page of attendees.","content":{"application/json":{"schema":{"type":"object","properties":{"data":{"type":"array","items":{"$ref":"#/components/schemas/Attendee"}},"meta":{"$ref":"#/components/schemas/PageMeta"}},"required":["data","meta"]}}}},"400":{"description":"The request did not validate. `details.reason` is one of `invalid_body`, `invalid_cursor`. For `invalid_body` the code is `INVALID_INPUT` and `details.fields` is an object keyed by each failing value's dotted path; for a cursor we did not issue the code is `INVALID_CURSOR`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"No usable API key. `details.reason` is one of `missing_key`, `invalid_key`, `revoked_key`, `expired_key`, and the response carries `WWW-Authenticate: Bearer realm=\"event67 partner API\"`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"402":{"description":"The organization is not entitled to integrations. `details.reason` is one of `payment_required`, `billing_suspended`, `billing_closed`. Not retryable — somebody has to act in the console.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"`details.reason` is one of `insufficient_scope`, `org_suspended`. For `insufficient_scope`, `details.requiredScope` names the scope this key is missing.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"No such record, or it belongs to another organization. The two are deliberately indistinguishable.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Too many requests on this key. Wait for `Retry-After` seconds; `X-RateLimit-Limit`, `X-RateLimit-Remaining` and `X-RateLimit-Reset` describe the window.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"503":{"description":"Integrations are switched off platform-wide. Temporary and affects everybody; back off rather than paging somebody.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}},"post":{"operationId":"createAttendee","tags":["Attendees"],"summary":"Add an attendee","description":"Adds one attendee to the event. **No email is sent** — inviting is an explicit act an organiser performs in the console. A duplicate email answers 409 with the existing attendee id, so your next call is a PATCH rather than a support ticket.","security":[{"apiKey":[]}],"parameters":[{"schema":{"type":"string","format":"uuid","description":"The event. An id belonging to another organization answers 404, not 403.","example":"8d2f0a16-4e93-4b28-b0c7-1f5e9a3d6c40"},"required":true,"name":"eventId","in":"path"}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"email":{"type":"string","maxLength":320,"format":"email","description":"Their address. Unique within the event, compared case-insensitively. A duplicate answers 409 with the existing attendee id.","example":"dana@example.com"},"displayName":{"type":"string","minLength":1,"maxLength":200,"description":"Their name as one string. event67 stores a single name field; if your system holds a first and a last, join them. Defaults to the local part of the address.","example":"Dana Okonkwo"},"company":{"type":["string","null"],"maxLength":200,"description":"Where they work.","example":"Meridian Logistics"},"jobTitle":{"type":["string","null"],"maxLength":200,"description":"Their role.","example":"Head of Operations"}},"required":["email"],"description":"A new attendee. No email is sent."}}}},"responses":{"201":{"description":"The attendee that was created.","content":{"application/json":{"schema":{"type":"object","properties":{"data":{"$ref":"#/components/schemas/Attendee"}},"required":["data"]}}}},"400":{"description":"The request did not validate. `details.reason` is one of `invalid_body`, `invalid_cursor`. For `invalid_body` the code is `INVALID_INPUT` and `details.fields` is an object keyed by each failing value's dotted path; for a cursor we did not issue the code is `INVALID_CURSOR`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"No usable API key. `details.reason` is one of `missing_key`, `invalid_key`, `revoked_key`, `expired_key`, and the response carries `WWW-Authenticate: Bearer realm=\"event67 partner API\"`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"402":{"description":"The organization is not entitled to integrations. `details.reason` is one of `payment_required`, `billing_suspended`, `billing_closed`. Not retryable — somebody has to act in the console.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"`details.reason` is one of `insufficient_scope`, `org_suspended`. For `insufficient_scope`, `details.requiredScope` names the scope this key is missing.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"No such record, or it belongs to another organization. The two are deliberately indistinguishable.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"409":{"description":"An attendee with that email is already on this event. `details.reason` is `attendee_exists` and `details.attendeeId` is the existing record.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Too many requests on this key. Wait for `Retry-After` seconds; `X-RateLimit-Limit`, `X-RateLimit-Remaining` and `X-RateLimit-Reset` describe the window.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"503":{"description":"Integrations are switched off platform-wide. Temporary and affects everybody; back off rather than paging somebody.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/partner/v1/events/{eventId}/attendees/{attendeeId}":{"get":{"operationId":"getAttendee","tags":["Attendees"],"summary":"Get one attendee","security":[{"apiKey":[]}],"parameters":[{"schema":{"type":"string","format":"uuid","description":"The event. An id belonging to another organization answers 404, not 403.","example":"8d2f0a16-4e93-4b28-b0c7-1f5e9a3d6c40"},"required":true,"name":"eventId","in":"path"},{"schema":{"type":"string","format":"uuid","description":"The attendee, which must be on the event in the path.","example":"f13c6b28-9a05-4d71-b6e4-20c8f5a9d374"},"required":true,"name":"attendeeId","in":"path"}],"responses":{"200":{"description":"The attendee.","content":{"application/json":{"schema":{"type":"object","properties":{"data":{"$ref":"#/components/schemas/Attendee"}},"required":["data"]}}}},"400":{"description":"The request did not validate. `details.reason` is one of `invalid_body`, `invalid_cursor`. For `invalid_body` the code is `INVALID_INPUT` and `details.fields` is an object keyed by each failing value's dotted path; for a cursor we did not issue the code is `INVALID_CURSOR`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"No usable API key. `details.reason` is one of `missing_key`, `invalid_key`, `revoked_key`, `expired_key`, and the response carries `WWW-Authenticate: Bearer realm=\"event67 partner API\"`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"402":{"description":"The organization is not entitled to integrations. `details.reason` is one of `payment_required`, `billing_suspended`, `billing_closed`. Not retryable — somebody has to act in the console.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"`details.reason` is one of `insufficient_scope`, `org_suspended`. For `insufficient_scope`, `details.requiredScope` names the scope this key is missing.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"No such record, or it belongs to another organization. The two are deliberately indistinguishable.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Too many requests on this key. Wait for `Retry-After` seconds; `X-RateLimit-Limit`, `X-RateLimit-Remaining` and `X-RateLimit-Reset` describe the window.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"503":{"description":"Integrations are switched off platform-wide. Temporary and affects everybody; back off rather than paging somebody.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}},"patch":{"operationId":"updateAttendee","tags":["Attendees"],"summary":"Update an attendee","description":"Changes the name, company or job title. Email is immutable in v1: it is the identity you matched on, and moving it would orphan the badge, the check-in and every form answer already filed under this id.","security":[{"apiKey":[]}],"parameters":[{"schema":{"type":"string","format":"uuid","description":"The event. An id belonging to another organization answers 404, not 403.","example":"8d2f0a16-4e93-4b28-b0c7-1f5e9a3d6c40"},"required":true,"name":"eventId","in":"path"},{"schema":{"type":"string","format":"uuid","description":"The attendee, which must be on the event in the path.","example":"f13c6b28-9a05-4d71-b6e4-20c8f5a9d374"},"required":true,"name":"attendeeId","in":"path"}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"displayName":{"type":"string","minLength":1,"maxLength":200,"description":"Their name as one string.","example":"Dana Okonkwo"},"company":{"type":["string","null"],"maxLength":200,"description":"Where they work. `null` clears it.","example":"Meridian Logistics"},"jobTitle":{"type":["string","null"],"maxLength":200,"description":"Their role. `null` clears it.","example":"Head of Operations"}},"description":"The fields a partner may change. Email is immutable in v1 and is not accepted here."}}}},"responses":{"200":{"description":"The attendee, after the change.","content":{"application/json":{"schema":{"type":"object","properties":{"data":{"$ref":"#/components/schemas/Attendee"}},"required":["data"]}}}},"400":{"description":"The request did not validate. `details.reason` is one of `invalid_body`, `invalid_cursor`. For `invalid_body` the code is `INVALID_INPUT` and `details.fields` is an object keyed by each failing value's dotted path; for a cursor we did not issue the code is `INVALID_CURSOR`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"No usable API key. `details.reason` is one of `missing_key`, `invalid_key`, `revoked_key`, `expired_key`, and the response carries `WWW-Authenticate: Bearer realm=\"event67 partner API\"`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"402":{"description":"The organization is not entitled to integrations. `details.reason` is one of `payment_required`, `billing_suspended`, `billing_closed`. Not retryable — somebody has to act in the console.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"`details.reason` is one of `insufficient_scope`, `org_suspended`. For `insufficient_scope`, `details.requiredScope` names the scope this key is missing.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"No such record, or it belongs to another organization. The two are deliberately indistinguishable.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Too many requests on this key. Wait for `Retry-After` seconds; `X-RateLimit-Limit`, `X-RateLimit-Remaining` and `X-RateLimit-Reset` describe the window.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"503":{"description":"Integrations are switched off platform-wide. Temporary and affects everybody; back off rather than paging somebody.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/partner/v1/events/{eventId}/check-ins":{"get":{"operationId":"listCheckIns","tags":["Engagement"],"summary":"List venue arrivals","description":"Who arrived at the venue and when, in arrival order. One row per attendee at most. Session scans are a different endpoint.","security":[{"apiKey":[]}],"parameters":[{"schema":{"type":"string","format":"uuid","description":"The event. An id belonging to another organization answers 404, not 403.","example":"8d2f0a16-4e93-4b28-b0c7-1f5e9a3d6c40"},"required":true,"name":"eventId","in":"path"},{"schema":{"type":"integer","minimum":1,"maximum":200,"default":50,"description":"How many records to return. 1 to 200.","example":50},"required":false,"name":"limit","in":"query"},{"schema":{"type":"string","minLength":1,"maxLength":512,"description":"The opaque `meta.nextCursor` from the previous page. Omit it for the first page. Cursors are keyset based, and their contents will change without notice, so copy one rather than constructing it.","example":"eyJhdCI6IjIwMjYtMTAtMjlUMTU6MDA6MDAuMDAwWiIsImlkIjoiOGQyZjBhMTYtNGM3Yi00ZjllLTlhMWQtM2I2ZTVjMmYwMDcxIn0"},"required":false,"name":"cursor","in":"query"}],"responses":{"200":{"description":"A page of arrivals.","content":{"application/json":{"schema":{"type":"object","properties":{"data":{"type":"array","items":{"$ref":"#/components/schemas/CheckIn"}},"meta":{"$ref":"#/components/schemas/PageMeta"}},"required":["data","meta"]}}}},"400":{"description":"The request did not validate. `details.reason` is one of `invalid_body`, `invalid_cursor`. For `invalid_body` the code is `INVALID_INPUT` and `details.fields` is an object keyed by each failing value's dotted path; for a cursor we did not issue the code is `INVALID_CURSOR`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"No usable API key. `details.reason` is one of `missing_key`, `invalid_key`, `revoked_key`, `expired_key`, and the response carries `WWW-Authenticate: Bearer realm=\"event67 partner API\"`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"402":{"description":"The organization is not entitled to integrations. `details.reason` is one of `payment_required`, `billing_suspended`, `billing_closed`. Not retryable — somebody has to act in the console.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"`details.reason` is one of `insufficient_scope`, `org_suspended`. For `insufficient_scope`, `details.requiredScope` names the scope this key is missing.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"No such record, or it belongs to another organization. The two are deliberately indistinguishable.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Too many requests on this key. Wait for `Retry-After` seconds; `X-RateLimit-Limit`, `X-RateLimit-Remaining` and `X-RateLimit-Reset` describe the window.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"503":{"description":"Integrations are switched off platform-wide. Temporary and affects everybody; back off rather than paging somebody.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/partner/v1/events/{eventId}/feedback":{"get":{"operationId":"listFeedback","tags":["Engagement"],"summary":"List feedback","description":"Ratings and written notes, oldest first. `sessionId` is set when the feedback is about a session and null when it is about the event as a whole.","security":[{"apiKey":[]}],"parameters":[{"schema":{"type":"string","format":"uuid","description":"The event. An id belonging to another organization answers 404, not 403.","example":"8d2f0a16-4e93-4b28-b0c7-1f5e9a3d6c40"},"required":true,"name":"eventId","in":"path"},{"schema":{"type":"integer","minimum":1,"maximum":200,"default":50,"description":"How many records to return. 1 to 200.","example":50},"required":false,"name":"limit","in":"query"},{"schema":{"type":"string","minLength":1,"maxLength":512,"description":"The opaque `meta.nextCursor` from the previous page. Omit it for the first page. Cursors are keyset based, and their contents will change without notice, so copy one rather than constructing it.","example":"eyJhdCI6IjIwMjYtMTAtMjlUMTU6MDA6MDAuMDAwWiIsImlkIjoiOGQyZjBhMTYtNGM3Yi00ZjllLTlhMWQtM2I2ZTVjMmYwMDcxIn0"},"required":false,"name":"cursor","in":"query"}],"responses":{"200":{"description":"A page of feedback.","content":{"application/json":{"schema":{"type":"object","properties":{"data":{"type":"array","items":{"$ref":"#/components/schemas/Feedback"}},"meta":{"$ref":"#/components/schemas/PageMeta"}},"required":["data","meta"]}}}},"400":{"description":"The request did not validate. `details.reason` is one of `invalid_body`, `invalid_cursor`. For `invalid_body` the code is `INVALID_INPUT` and `details.fields` is an object keyed by each failing value's dotted path; for a cursor we did not issue the code is `INVALID_CURSOR`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"No usable API key. `details.reason` is one of `missing_key`, `invalid_key`, `revoked_key`, `expired_key`, and the response carries `WWW-Authenticate: Bearer realm=\"event67 partner API\"`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"402":{"description":"The organization is not entitled to integrations. `details.reason` is one of `payment_required`, `billing_suspended`, `billing_closed`. Not retryable — somebody has to act in the console.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"`details.reason` is one of `insufficient_scope`, `org_suspended`. For `insufficient_scope`, `details.requiredScope` names the scope this key is missing.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"No such record, or it belongs to another organization. The two are deliberately indistinguishable.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Too many requests on this key. Wait for `Retry-After` seconds; `X-RateLimit-Limit`, `X-RateLimit-Remaining` and `X-RateLimit-Reset` describe the window.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"503":{"description":"Integrations are switched off platform-wide. Temporary and affects everybody; back off rather than paging somebody.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/partner/v1/events/{eventId}/forms":{"get":{"operationId":"listForms","tags":["Engagement"],"summary":"List forms","description":"Forms and their field definitions. Read the field `key` values here before reading submissions: an answer is keyed by them. Not paginated.","security":[{"apiKey":[]}],"parameters":[{"schema":{"type":"string","format":"uuid","description":"The event. An id belonging to another organization answers 404, not 403.","example":"8d2f0a16-4e93-4b28-b0c7-1f5e9a3d6c40"},"required":true,"name":"eventId","in":"path"}],"responses":{"200":{"description":"Every form on the event.","content":{"application/json":{"schema":{"type":"object","properties":{"data":{"type":"array","items":{"$ref":"#/components/schemas/Form"}}},"required":["data"]}}}},"400":{"description":"The request did not validate. `details.reason` is one of `invalid_body`, `invalid_cursor`. For `invalid_body` the code is `INVALID_INPUT` and `details.fields` is an object keyed by each failing value's dotted path; for a cursor we did not issue the code is `INVALID_CURSOR`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"No usable API key. `details.reason` is one of `missing_key`, `invalid_key`, `revoked_key`, `expired_key`, and the response carries `WWW-Authenticate: Bearer realm=\"event67 partner API\"`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"402":{"description":"The organization is not entitled to integrations. `details.reason` is one of `payment_required`, `billing_suspended`, `billing_closed`. Not retryable — somebody has to act in the console.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"`details.reason` is one of `insufficient_scope`, `org_suspended`. For `insufficient_scope`, `details.requiredScope` names the scope this key is missing.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"No such record, or it belongs to another organization. The two are deliberately indistinguishable.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Too many requests on this key. Wait for `Retry-After` seconds; `X-RateLimit-Limit`, `X-RateLimit-Remaining` and `X-RateLimit-Reset` describe the window.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"503":{"description":"Integrations are switched off platform-wide. Temporary and affects everybody; back off rather than paging somebody.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/partner/v1/events/{eventId}/forms/{formId}/submissions":{"get":{"operationId":"listFormSubmissions","tags":["Engagement"],"summary":"List form submissions","description":"One row per attendee who answered, oldest first. A correction overwrites the row and moves `updatedAt`, so poll on that rather than assuming a submission never changes.","security":[{"apiKey":[]}],"parameters":[{"schema":{"type":"string","format":"uuid","description":"The event. An id belonging to another organization answers 404, not 403.","example":"8d2f0a16-4e93-4b28-b0c7-1f5e9a3d6c40"},"required":true,"name":"eventId","in":"path"},{"schema":{"type":"string","format":"uuid","description":"The form, which must belong to the event in the path.","example":"5b8c1d90-7e24-4f38-b6a1-0c93e7d54210"},"required":true,"name":"formId","in":"path"},{"schema":{"type":"integer","minimum":1,"maximum":200,"default":50,"description":"How many records to return. 1 to 200.","example":50},"required":false,"name":"limit","in":"query"},{"schema":{"type":"string","minLength":1,"maxLength":512,"description":"The opaque `meta.nextCursor` from the previous page. Omit it for the first page. Cursors are keyset based, and their contents will change without notice, so copy one rather than constructing it.","example":"eyJhdCI6IjIwMjYtMTAtMjlUMTU6MDA6MDAuMDAwWiIsImlkIjoiOGQyZjBhMTYtNGM3Yi00ZjllLTlhMWQtM2I2ZTVjMmYwMDcxIn0"},"required":false,"name":"cursor","in":"query"}],"responses":{"200":{"description":"A page of submissions.","content":{"application/json":{"schema":{"type":"object","properties":{"data":{"type":"array","items":{"$ref":"#/components/schemas/FormSubmission"}},"meta":{"$ref":"#/components/schemas/PageMeta"}},"required":["data","meta"]}}}},"400":{"description":"The request did not validate. `details.reason` is one of `invalid_body`, `invalid_cursor`. For `invalid_body` the code is `INVALID_INPUT` and `details.fields` is an object keyed by each failing value's dotted path; for a cursor we did not issue the code is `INVALID_CURSOR`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"No usable API key. `details.reason` is one of `missing_key`, `invalid_key`, `revoked_key`, `expired_key`, and the response carries `WWW-Authenticate: Bearer realm=\"event67 partner API\"`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"402":{"description":"The organization is not entitled to integrations. `details.reason` is one of `payment_required`, `billing_suspended`, `billing_closed`. Not retryable — somebody has to act in the console.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"`details.reason` is one of `insufficient_scope`, `org_suspended`. For `insufficient_scope`, `details.requiredScope` names the scope this key is missing.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"No such record, or it belongs to another organization. The two are deliberately indistinguishable.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Too many requests on this key. Wait for `Retry-After` seconds; `X-RateLimit-Limit`, `X-RateLimit-Remaining` and `X-RateLimit-Reset` describe the window.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"503":{"description":"Integrations are switched off platform-wide. Temporary and affects everybody; back off rather than paging somebody.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/partner/v1/events/{eventId}/info-sections":{"get":{"operationId":"listInfoSections","tags":["Events"],"summary":"List published information sections","description":"Practical information the organiser publishes to attendees — travel, wifi, dress code. Published sections only; a draft is unfinished work. Not paginated.","security":[{"apiKey":[]}],"parameters":[{"schema":{"type":"string","format":"uuid","description":"The event. An id belonging to another organization answers 404, not 403.","example":"8d2f0a16-4e93-4b28-b0c7-1f5e9a3d6c40"},"required":true,"name":"eventId","in":"path"}],"responses":{"200":{"description":"Every published section, in the organiser-defined order.","content":{"application/json":{"schema":{"type":"object","properties":{"data":{"type":"array","items":{"$ref":"#/components/schemas/InfoSection"}}},"required":["data"]}}}},"400":{"description":"The request did not validate. `details.reason` is one of `invalid_body`, `invalid_cursor`. For `invalid_body` the code is `INVALID_INPUT` and `details.fields` is an object keyed by each failing value's dotted path; for a cursor we did not issue the code is `INVALID_CURSOR`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"No usable API key. `details.reason` is one of `missing_key`, `invalid_key`, `revoked_key`, `expired_key`, and the response carries `WWW-Authenticate: Bearer realm=\"event67 partner API\"`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"402":{"description":"The organization is not entitled to integrations. `details.reason` is one of `payment_required`, `billing_suspended`, `billing_closed`. Not retryable — somebody has to act in the console.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"`details.reason` is one of `insufficient_scope`, `org_suspended`. For `insufficient_scope`, `details.requiredScope` names the scope this key is missing.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"No such record, or it belongs to another organization. The two are deliberately indistinguishable.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Too many requests on this key. Wait for `Retry-After` seconds; `X-RateLimit-Limit`, `X-RateLimit-Remaining` and `X-RateLimit-Reset` describe the window.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"503":{"description":"Integrations are switched off platform-wide. Temporary and affects everybody; back off rather than paging somebody.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/partner/v1/events/{eventId}/rooms":{"get":{"operationId":"listRooms","tags":["Schedule"],"summary":"List rooms","description":"The rooms an organiser has defined. Note that a session records its room as free text rather than by id, so a room here may have no session pointing at it and vice versa. Not paginated.","security":[{"apiKey":[]}],"parameters":[{"schema":{"type":"string","format":"uuid","description":"The event. An id belonging to another organization answers 404, not 403.","example":"8d2f0a16-4e93-4b28-b0c7-1f5e9a3d6c40"},"required":true,"name":"eventId","in":"path"}],"responses":{"200":{"description":"Every room.","content":{"application/json":{"schema":{"type":"object","properties":{"data":{"type":"array","items":{"$ref":"#/components/schemas/Room"}}},"required":["data"]}}}},"400":{"description":"The request did not validate. `details.reason` is one of `invalid_body`, `invalid_cursor`. For `invalid_body` the code is `INVALID_INPUT` and `details.fields` is an object keyed by each failing value's dotted path; for a cursor we did not issue the code is `INVALID_CURSOR`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"No usable API key. `details.reason` is one of `missing_key`, `invalid_key`, `revoked_key`, `expired_key`, and the response carries `WWW-Authenticate: Bearer realm=\"event67 partner API\"`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"402":{"description":"The organization is not entitled to integrations. `details.reason` is one of `payment_required`, `billing_suspended`, `billing_closed`. Not retryable — somebody has to act in the console.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"`details.reason` is one of `insufficient_scope`, `org_suspended`. For `insufficient_scope`, `details.requiredScope` names the scope this key is missing.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"No such record, or it belongs to another organization. The two are deliberately indistinguishable.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Too many requests on this key. Wait for `Retry-After` seconds; `X-RateLimit-Limit`, `X-RateLimit-Remaining` and `X-RateLimit-Reset` describe the window.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"503":{"description":"Integrations are switched off platform-wide. Temporary and affects everybody; back off rather than paging somebody.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/partner/v1/events/{eventId}/session-attendance":{"get":{"operationId":"listSessionAttendance","tags":["Engagement"],"summary":"List session scans","description":"Attendees scanned in at a session door, in scan order. Filter with `sessionId`. A session id that belongs to another event simply matches nothing.","security":[{"apiKey":[]}],"parameters":[{"schema":{"type":"string","format":"uuid","description":"The event. An id belonging to another organization answers 404, not 403.","example":"8d2f0a16-4e93-4b28-b0c7-1f5e9a3d6c40"},"required":true,"name":"eventId","in":"path"},{"schema":{"type":"integer","minimum":1,"maximum":200,"default":50,"description":"How many records to return. 1 to 200.","example":50},"required":false,"name":"limit","in":"query"},{"schema":{"type":"string","minLength":1,"maxLength":512,"description":"The opaque `meta.nextCursor` from the previous page. Omit it for the first page. Cursors are keyset based, and their contents will change without notice, so copy one rather than constructing it.","example":"eyJhdCI6IjIwMjYtMTAtMjlUMTU6MDA6MDAuMDAwWiIsImlkIjoiOGQyZjBhMTYtNGM3Yi00ZjllLTlhMWQtM2I2ZTVjMmYwMDcxIn0"},"required":false,"name":"cursor","in":"query"},{"schema":{"type":"string","format":"uuid","description":"Return only scans for this session. Omit for every scan on the event, oldest page first.","example":"c51b7e04-2d98-4a1f-8b3c-6e0a95d27f11"},"required":false,"name":"sessionId","in":"query"}],"responses":{"200":{"description":"A page of scans.","content":{"application/json":{"schema":{"type":"object","properties":{"data":{"type":"array","items":{"$ref":"#/components/schemas/SessionAttendance"}},"meta":{"$ref":"#/components/schemas/PageMeta"}},"required":["data","meta"]}}}},"400":{"description":"The request did not validate. `details.reason` is one of `invalid_body`, `invalid_cursor`. For `invalid_body` the code is `INVALID_INPUT` and `details.fields` is an object keyed by each failing value's dotted path; for a cursor we did not issue the code is `INVALID_CURSOR`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"No usable API key. `details.reason` is one of `missing_key`, `invalid_key`, `revoked_key`, `expired_key`, and the response carries `WWW-Authenticate: Bearer realm=\"event67 partner API\"`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"402":{"description":"The organization is not entitled to integrations. `details.reason` is one of `payment_required`, `billing_suspended`, `billing_closed`. Not retryable — somebody has to act in the console.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"`details.reason` is one of `insufficient_scope`, `org_suspended`. For `insufficient_scope`, `details.requiredScope` names the scope this key is missing.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"No such record, or it belongs to another organization. The two are deliberately indistinguishable.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Too many requests on this key. Wait for `Retry-After` seconds; `X-RateLimit-Limit`, `X-RateLimit-Remaining` and `X-RateLimit-Reset` describe the window.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"503":{"description":"Integrations are switched off platform-wide. Temporary and affects everybody; back off rather than paging somebody.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/partner/v1/events/{eventId}/sessions":{"get":{"operationId":"listSessions","tags":["Schedule"],"summary":"List sessions","description":"The programme, in start-time order. `room` is the free-text room name a session was given, not an id into `/rooms`.","security":[{"apiKey":[]}],"parameters":[{"schema":{"type":"string","format":"uuid","description":"The event. An id belonging to another organization answers 404, not 403.","example":"8d2f0a16-4e93-4b28-b0c7-1f5e9a3d6c40"},"required":true,"name":"eventId","in":"path"},{"schema":{"type":"integer","minimum":1,"maximum":200,"default":50,"description":"How many records to return. 1 to 200.","example":50},"required":false,"name":"limit","in":"query"},{"schema":{"type":"string","minLength":1,"maxLength":512,"description":"The opaque `meta.nextCursor` from the previous page. Omit it for the first page. Cursors are keyset based, and their contents will change without notice, so copy one rather than constructing it.","example":"eyJhdCI6IjIwMjYtMTAtMjlUMTU6MDA6MDAuMDAwWiIsImlkIjoiOGQyZjBhMTYtNGM3Yi00ZjllLTlhMWQtM2I2ZTVjMmYwMDcxIn0"},"required":false,"name":"cursor","in":"query"}],"responses":{"200":{"description":"A page of sessions.","content":{"application/json":{"schema":{"type":"object","properties":{"data":{"type":"array","items":{"$ref":"#/components/schemas/Session"}},"meta":{"$ref":"#/components/schemas/PageMeta"}},"required":["data","meta"]}}}},"400":{"description":"The request did not validate. `details.reason` is one of `invalid_body`, `invalid_cursor`. For `invalid_body` the code is `INVALID_INPUT` and `details.fields` is an object keyed by each failing value's dotted path; for a cursor we did not issue the code is `INVALID_CURSOR`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"No usable API key. `details.reason` is one of `missing_key`, `invalid_key`, `revoked_key`, `expired_key`, and the response carries `WWW-Authenticate: Bearer realm=\"event67 partner API\"`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"402":{"description":"The organization is not entitled to integrations. `details.reason` is one of `payment_required`, `billing_suspended`, `billing_closed`. Not retryable — somebody has to act in the console.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"`details.reason` is one of `insufficient_scope`, `org_suspended`. For `insufficient_scope`, `details.requiredScope` names the scope this key is missing.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"No such record, or it belongs to another organization. The two are deliberately indistinguishable.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Too many requests on this key. Wait for `Retry-After` seconds; `X-RateLimit-Limit`, `X-RateLimit-Remaining` and `X-RateLimit-Reset` describe the window.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"503":{"description":"Integrations are switched off platform-wide. Temporary and affects everybody; back off rather than paging somebody.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/partner/v1/events/{eventId}/speakers":{"get":{"operationId":"listSpeakers","tags":["Schedule"],"summary":"List speakers","description":"In name order.","security":[{"apiKey":[]}],"parameters":[{"schema":{"type":"string","format":"uuid","description":"The event. An id belonging to another organization answers 404, not 403.","example":"8d2f0a16-4e93-4b28-b0c7-1f5e9a3d6c40"},"required":true,"name":"eventId","in":"path"},{"schema":{"type":"integer","minimum":1,"maximum":200,"default":50,"description":"How many records to return. 1 to 200.","example":50},"required":false,"name":"limit","in":"query"},{"schema":{"type":"string","minLength":1,"maxLength":512,"description":"The opaque `meta.nextCursor` from the previous page. Omit it for the first page. Cursors are keyset based, and their contents will change without notice, so copy one rather than constructing it.","example":"eyJhdCI6IjIwMjYtMTAtMjlUMTU6MDA6MDAuMDAwWiIsImlkIjoiOGQyZjBhMTYtNGM3Yi00ZjllLTlhMWQtM2I2ZTVjMmYwMDcxIn0"},"required":false,"name":"cursor","in":"query"}],"responses":{"200":{"description":"A page of speakers.","content":{"application/json":{"schema":{"type":"object","properties":{"data":{"type":"array","items":{"$ref":"#/components/schemas/Speaker"}},"meta":{"$ref":"#/components/schemas/PageMeta"}},"required":["data","meta"]}}}},"400":{"description":"The request did not validate. `details.reason` is one of `invalid_body`, `invalid_cursor`. For `invalid_body` the code is `INVALID_INPUT` and `details.fields` is an object keyed by each failing value's dotted path; for a cursor we did not issue the code is `INVALID_CURSOR`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"No usable API key. `details.reason` is one of `missing_key`, `invalid_key`, `revoked_key`, `expired_key`, and the response carries `WWW-Authenticate: Bearer realm=\"event67 partner API\"`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"402":{"description":"The organization is not entitled to integrations. `details.reason` is one of `payment_required`, `billing_suspended`, `billing_closed`. Not retryable — somebody has to act in the console.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"`details.reason` is one of `insufficient_scope`, `org_suspended`. For `insufficient_scope`, `details.requiredScope` names the scope this key is missing.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"No such record, or it belongs to another organization. The two are deliberately indistinguishable.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Too many requests on this key. Wait for `Retry-After` seconds; `X-RateLimit-Limit`, `X-RateLimit-Remaining` and `X-RateLimit-Reset` describe the window.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"503":{"description":"Integrations are switched off platform-wide. Temporary and affects everybody; back off rather than paging somebody.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/partner/v1/events/{eventId}/sponsors":{"get":{"operationId":"listSponsors","tags":["Events"],"summary":"List sponsors","description":"In the organiser-defined order. Not paginated.","security":[{"apiKey":[]}],"parameters":[{"schema":{"type":"string","format":"uuid","description":"The event. An id belonging to another organization answers 404, not 403.","example":"8d2f0a16-4e93-4b28-b0c7-1f5e9a3d6c40"},"required":true,"name":"eventId","in":"path"}],"responses":{"200":{"description":"Every sponsor.","content":{"application/json":{"schema":{"type":"object","properties":{"data":{"type":"array","items":{"$ref":"#/components/schemas/Sponsor"}}},"required":["data"]}}}},"400":{"description":"The request did not validate. `details.reason` is one of `invalid_body`, `invalid_cursor`. For `invalid_body` the code is `INVALID_INPUT` and `details.fields` is an object keyed by each failing value's dotted path; for a cursor we did not issue the code is `INVALID_CURSOR`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"No usable API key. `details.reason` is one of `missing_key`, `invalid_key`, `revoked_key`, `expired_key`, and the response carries `WWW-Authenticate: Bearer realm=\"event67 partner API\"`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"402":{"description":"The organization is not entitled to integrations. `details.reason` is one of `payment_required`, `billing_suspended`, `billing_closed`. Not retryable — somebody has to act in the console.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"`details.reason` is one of `insufficient_scope`, `org_suspended`. For `insufficient_scope`, `details.requiredScope` names the scope this key is missing.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"No such record, or it belongs to another organization. The two are deliberately indistinguishable.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Too many requests on this key. Wait for `Retry-After` seconds; `X-RateLimit-Limit`, `X-RateLimit-Remaining` and `X-RateLimit-Reset` describe the window.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"503":{"description":"Integrations are switched off platform-wide. Temporary and affects everybody; back off rather than paging somebody.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/partner/v1/events/{eventId}/tracks":{"get":{"operationId":"listTracks","tags":["Schedule"],"summary":"List tracks","description":"Not paginated.","security":[{"apiKey":[]}],"parameters":[{"schema":{"type":"string","format":"uuid","description":"The event. An id belonging to another organization answers 404, not 403.","example":"8d2f0a16-4e93-4b28-b0c7-1f5e9a3d6c40"},"required":true,"name":"eventId","in":"path"}],"responses":{"200":{"description":"Every track.","content":{"application/json":{"schema":{"type":"object","properties":{"data":{"type":"array","items":{"$ref":"#/components/schemas/Track"}}},"required":["data"]}}}},"400":{"description":"The request did not validate. `details.reason` is one of `invalid_body`, `invalid_cursor`. For `invalid_body` the code is `INVALID_INPUT` and `details.fields` is an object keyed by each failing value's dotted path; for a cursor we did not issue the code is `INVALID_CURSOR`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"No usable API key. `details.reason` is one of `missing_key`, `invalid_key`, `revoked_key`, `expired_key`, and the response carries `WWW-Authenticate: Bearer realm=\"event67 partner API\"`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"402":{"description":"The organization is not entitled to integrations. `details.reason` is one of `payment_required`, `billing_suspended`, `billing_closed`. Not retryable — somebody has to act in the console.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"`details.reason` is one of `insufficient_scope`, `org_suspended`. For `insufficient_scope`, `details.requiredScope` names the scope this key is missing.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"No such record, or it belongs to another organization. The two are deliberately indistinguishable.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Too many requests on this key. Wait for `Retry-After` seconds; `X-RateLimit-Limit`, `X-RateLimit-Remaining` and `X-RateLimit-Reset` describe the window.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"503":{"description":"Integrations are switched off platform-wide. Temporary and affects everybody; back off rather than paging somebody.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/partner/v1/me":{"get":{"operationId":"getMe","tags":["Account"],"summary":"The organization and key behind this request","description":"The first call to make with a new key. It confirms the key works, which organization it belongs to and which scopes it carries — the three questions every failed integration starts with. Reachable by a key with any scopes, including none.","security":[{"apiKey":[]}],"responses":{"200":{"description":"The organization and the key.","content":{"application/json":{"schema":{"type":"object","properties":{"data":{"$ref":"#/components/schemas/Me"}},"required":["data"]}}}},"400":{"description":"The request did not validate. `details.reason` is one of `invalid_body`, `invalid_cursor`. For `invalid_body` the code is `INVALID_INPUT` and `details.fields` is an object keyed by each failing value's dotted path; for a cursor we did not issue the code is `INVALID_CURSOR`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"No usable API key. `details.reason` is one of `missing_key`, `invalid_key`, `revoked_key`, `expired_key`, and the response carries `WWW-Authenticate: Bearer realm=\"event67 partner API\"`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"402":{"description":"The organization is not entitled to integrations. `details.reason` is one of `payment_required`, `billing_suspended`, `billing_closed`. Not retryable — somebody has to act in the console.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"`details.reason` is one of `insufficient_scope`, `org_suspended`. For `insufficient_scope`, `details.requiredScope` names the scope this key is missing.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"No such record, or it belongs to another organization. The two are deliberately indistinguishable.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Too many requests on this key. Wait for `Retry-After` seconds; `X-RateLimit-Limit`, `X-RateLimit-Remaining` and `X-RateLimit-Reset` describe the window.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"503":{"description":"Integrations are switched off platform-wide. Temporary and affects everybody; back off rather than paging somebody.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/partner/v1/openapi.json":{"get":{"operationId":"getOpenApiDocument","tags":["Reference"],"summary":"This document","description":"The OpenAPI 3.1 document, served unauthenticated.","security":[],"responses":{"200":{"description":"The OpenAPI document."}}}}},"webhooks":{}}