{"openapi":"3.0.3","info":{"title":"Gigwell Public API","version":"2.17.4.14"},"servers":[{"url":"https://api.gigwell.com/api"}],"tags":[{"name":"Organization"},{"name":"Reports"},{"name":"Bookings"},{"name":"Deleted Items"}],"paths":{"/agency/{agencyIds}/roster/members":{"post":{"operationId":"listRosterMembers","summary":"List Roster Members","description":"Returns the roster of the agency identified by the `agencyIds` path parameter, with per-artist profile attributes (genres, locations, capacity, links, bios). Each artist is keyed by `entityId` — the same identifier [List Organization Members](./list-members) and [Run Report](./run-custom-filtered-export) use to scope a query to that artist.\n\nThe response has five sections, each controlled by a boolean in the request body (all default true): `roster` (agency config and per-entry agent/assistant/logistician/marketing assignments), `artists` (flat per-artist entries), `profile` (profile attributes), `artistMembers`, and `agents`. Narrow the profile payload with the `profileFields` allowlist; an empty or omitted list returns the full profile set. Profiles are returned, not filtered — request the fields you need, filter client-side, then pass the matching `entityId` values to [Run Report](./run-custom-filtered-export).\n\nEvery artist carries two status flags: `activeOnRoster` (false = deactivated on the roster, retained only for historical reporting) and `restricted` (mailbox access is limited, which can narrow calendar and availability visibility). Null fields are omitted from the response.","tags":["Organization"],"parameters":[{"name":"agencyIds","in":"path","required":true,"schema":{"type":"string"},"description":"The agency's entity ID. Provide exactly one."}],"requestBody":{"required":false,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/RosterMembersRequest"}}}},"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ListRosterMembersResponse"}}}}},"security":[{"patBearer":[]}]}},"/agency/{entityId}/subscription/members":{"get":{"operationId":"listMembers","summary":"List Organization Members","description":"Returns the members of the agency or talent-buyer organization identified by `entityId`, including each member's roles and status.\n\nEach organization you belong to is identified by its own `entityId`. Call this endpoint with a specific `entityId` to list that organization's members, and repeat with a different `entityId` to inspect another of your memberships.\n\nThe `entityId` values returned here are the same identifiers you pass to [Run Report](./run-custom-filtered-export) to scope a report to a particular organization.","tags":["Organization"],"parameters":[{"name":"entityId","in":"path","required":true,"schema":{"type":"string"},"description":"The organization's entity ID."}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ListMembersResponse"}}}}},"security":[{"patBearer":[]}]}},"/booking/{entityId}":{"post":{"operationId":"createDeal","summary":"Create Deal","description":"Creates a booking — one or more events under the organization identified by `entityId` — with the full deal structure: multiple artists with per-artist splits, ticket scales and tiers, custom payment schedules, expenses, and day-of-show schedules.\n\n**Minimum request.** The minimum request is one event (`events` with a `startDateTime`, a `currencyType`, and at least one artist in `artists`), a buyer (`contacts.buyer.person` with an `email` and at least one of `firstName`/`lastName`), and at least one agent — given explicitly under `assignments.agents`, or resolvable from the artists' roster assignments. Artists are matched by roster entity id (or exact roster name) and must be active on the agency's roster. Discover ids with [List Organization Members](./list-members) and [List Roster Members](./list-roster-members).\n\n**Units and formats.** Event dates are local wall-clock values in `YYYY-MM-DD` or `YYYY-MM-DDThh:mm:ss` form — never with a UTC offset or `Z` suffix. When a date carries a time, `timeZone` is required and must be an IANA time zone id (for example `America/Los_Angeles`). `guarantee` and `amount` fields are in whole currency units of the event's `currencyType` (7500 = 7,500.00 USD). Percent fields are percent numbers (50 = 50%) except where a field's own description says it is a string.\n\n**Defaults for omitted fields.** Event status defaults to `tentative` (unless the agency is set to confirm bookings at creation), `dealType` to `FLAT_GUARANTEE`, and `guarantee` to 0. Agents default from each roster artist's assignments. When `payments` is omitted, the agency's default payment-plan preset is applied.\n\n**Limits.** A booking can include at most 30 events (`DEAL_TOO_MANY_EVENTS` beyond that).\n\n**Permissions.** The account that minted the token needs the `api` role on `entityId`.\n\n**Retries.** Creation is not idempotent — a timeout does not itself prove failure (the booking may exist); check with [Run Report](./run-custom-filtered-export) (a Booking report on the event date) before retrying.\n\n**What creation does.**\n- Runs the booking workflow and syncs the event to connected calendars per the agency's settings.\n- Creates contact and organization records for any new people and organizations you name.\n- When you omit a member group, the artists' roster-assigned members are added for it (respecting the roster's auto-add flags).\n- Distributes the booking to the assigned members' inboxes.\n\n**Errors.** Validation failures return HTTP 406 with a `DEAL_*` result code — see the worked example under Responses. A request without a buyer person currently fails with HTTP 500, `Please select a Buyer.` — treat it as a request error, not a server outage. Exceeding the rate limit returns HTTP 503 `RATE_LIMIT_EXCEEDED`.","tags":["Bookings"],"parameters":[{"name":"entityId","in":"path","required":true,"schema":{"type":"string"},"description":"The agency's entity ID to create the booking under."}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Deal"}}}},"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreateDealResponse"}}}}},"security":[{"patBearer":[]}]}},"/deletedItems/{entityId}/list":{"post":{"operationId":"listDeletedItems","summary":"List Deleted Items","description":"Returns the items deleted from the organization identified by `entityId` — bookings, events, bookingless events, invoices, settlement messages and tasks — with what each item was and when it was deleted, newest deletion first.\n\n`entityId` is the same identifier [List Organization Members](./list-members) returns for each of your memberships, and each read is scoped to the agency in the path: entries recorded for one agency are never returned for another. The stream reflects items currently deleted, not a deletion audit trail — restoring an item removes its entry, and a later deletion of the same item records a fresh one. The caller must hold the owner role on that organization; other members are refused with HTTP 403.\n\nThe request body is optional; when omitted the newest page of all types is returned. `types` narrows the stream to the listed types (case-insensitive, an unknown literal is refused with HTTP 400) and `limit` sets the page size between 1 and 200, defaulting to 50.\n\nTo get the next page, send the previous response's `nextCursor` back unchanged as `cursor`, and repeat until `nextCursor` comes back null. The cursor holds your place in the newest-first list, not a copy of it: an item restored before you reach it will not appear, and items deleted while you page, including ones deleted again, go to the top, where you will see them the next time you start from the newest page. A page can hold fewer than `limit` entries, or none, and still carry a `nextCursor`. This happens most often when `types` matches only a few items, because each call stops after looking through a limited number of deleted items. A short or empty page is not the end of the list; only a null `nextCursor` is.\n\nEach entry carries the item `type`, its `itemId`, the owning `bookingId` where one exists (null for a bookingless event, and for a task with no linked booking), a human-readable `reference` built at delete time, and `deletedAt`. Treat `reference` as display text, not a parseable format. A deleted booking no longer appears in [Run Report](./run-custom-filtered-export) output, so this list is how you learn that a booking you reported on earlier was deleted.","tags":["Deleted Items"],"parameters":[{"name":"entityId","in":"path","required":true,"schema":{"type":"string"},"description":"The agency's entity ID whose deleted items are listed."}],"requestBody":{"required":false,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ListDeletedItemsRequest"}}}},"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ListDeletedItemsResponse"}}}}},"security":[{"patBearer":[]}]}},"/report/{entityId}/custom/{reportType}":{"post":{"operationId":"runCustomFilteredExport","summary":"Run Report","description":"Runs a custom filtered report against the organization identified by `entityId` for the given `reportType`, returning matching detail rows, aggregated totals, or both.\n\nTwo companion endpoints supply the values you need: [List Organization Members](./list-members) returns the `entityId` values you are allowed to query, and [List Report Columns](./get-report-columns) returns the valid `reportType` values and the exact column names for each. The request body is a [CustomFilterRequest](./schemas/customfilterrequest), whose fields are grouped into named filter buckets — combine as many as you need in a single request.\n\nKey options and gotchas:\n\n- `include` selects the shape of the response — `data` for detail rows, `totals` for aggregates, or `data,totals` for both.\n- `exportAs` selects the output format, such as `STREAM_JSONL` or `STREAM_CSV`.\n- `confirmed` is an event status, not a booking status — use `eventStatuses` for it and `bookingStatuses` for pipeline statuses such as `Offer` or `Terms`.\n- Column names differ by `reportType` (for example Booking reports use `Artists` while Event and Settlement reports use `Artist`), so always confirm them with [List Report Columns](./get-report-columns). Include `Currency` whenever you request financial columns.\n- Filter enum values such as deal types must match the schema exactly and are typically uppercase, for example `FLAT_GUARANTEE`.","tags":["Reports"],"parameters":[{"name":"entityId","in":"path","required":true,"schema":{"type":"string"},"description":"The organization's entity ID."},{"name":"reportType","in":"path","required":true,"schema":{"type":"string","enum":["Booking","Event","Invoice","InvoiceDistributionItem","InvoiceItem","Settlement","Expenses","Task","PaymentEvent"]},"description":"The report type."}],"requestBody":{"required":false,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CustomFilterRequest"}}}},"responses":{"200":{"description":"Response shape depends on exportAs (STREAM_CSV_JSON envelope, STREAM_CSV raw, STREAM_JSONL NDJSON). Schema TBD."}},"security":[{"patBearer":[]}]}},"/report/{entityId}/{reportType}/columns":{"get":{"operationId":"getReportColumns","summary":"List Report Columns","description":"Returns the report columns available for a given `reportType` on the organization identified by `entityId`, including each column's display name and role.\n\nColumn names differ by `reportType` — for example, Booking reports expose `Artists` (plural) while Event and Settlement reports expose `Artist` (singular). On a talent-buyer organization some titles are renamed (for example the column the catalog calls `Agency` is advertised as `Buyer`), so always request columns by the exact titles this endpoint returns.\n\nThe names returned here are the values you supply in the `columns` and `totals` fields of a [Run Report](./run-custom-filtered-export) request.","tags":["Reports"],"parameters":[{"name":"entityId","in":"path","required":true,"schema":{"type":"string"},"description":"The organization's entity ID."},{"name":"reportType","in":"path","required":true,"schema":{"type":"string","enum":["Booking","Event","Invoice","InvoiceDistributionItem","InvoiceItem","Settlement","Expenses","Task","PaymentEvent"]},"description":"The report type."}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/GetReportColumnsResponse"}}}}},"security":[{"patBearer":[]}]}}},"components":{"schemas":{"RESTResponse":{"type":"object","properties":{"status":{"type":"string","enum":["OK","FAIL","ERROR"]},"code":{"type":"string","nullable":true,"description":"ResultCode enum name (e.g. SUCCESS, NOT_FOUND, RATE_LIMIT_EXCEEDED)"},"message":{"type":"string","nullable":true,"description":"Result message: OK on success; the error text when status is FAIL or ERROR."},"messages":{"type":"array","nullable":true,"items":{"type":"string"},"description":"In rare, specific cases, additional error messages."},"data":{"description":"Operation result payload. Its shape is specific to each endpoint and is shown in that endpoint's response schema."},"requestId":{"type":"string","nullable":true,"description":"A request correlation id generated by the server."}}},"RosterMembersRequest":{"type":"object","properties":{"roster":{"type":"boolean","description":"Include roster config block (entries[] with per-entry agents/assistants/logisticians/marketing assignments, tags, booknow)"},"artists":{"type":"boolean","description":"Include artists[] flat entries (identity/contact fields plus activeOnRoster/restricted)"},"profile":{"type":"boolean","description":"Include profiles[] (reduced field set; embedSettings excluded). An artist whose Profile failed to load is omitted from profiles[] but remains in artists[]."},"artistMembers":{"type":"boolean","description":"Include artistMemberAccounts + invitedArtistMemberAccountRoles"},"agents":{"type":"boolean","description":"Include agents[] (agency agent contacts) AND per-entry agents/assistants/logisticians/marketing assignments inside roster.entries[]. When false, top-level agents is omitted and per-entry assignments become empty lists."},"profileFields":{"type":"array","items":{"type":"string"},"description":"Allowlist of profile fields to include; empty or omitted returns the full profile set. Unknown names return 400.","nullable":true}}},"ListRosterMembersResponse":{"type":"object","properties":{"status":{"type":"string","enum":["OK","FAIL","ERROR"]},"code":{"type":"string","nullable":true,"description":"ResultCode enum name (e.g. SUCCESS, NOT_FOUND, RATE_LIMIT_EXCEEDED)"},"message":{"type":"string","nullable":true,"description":"Result message: OK on success; the error text when status is FAIL or ERROR."},"messages":{"type":"array","nullable":true,"items":{"type":"string"},"description":"In rare, specific cases, additional error messages."},"data":{"type":"object","properties":{"identityId":{"type":"string"},"title":{"type":"string"},"webtitle":{"type":"string"},"avatarImageUrl":{"type":"string"},"profileImageUrl":{"type":"string"},"bannerImageUrl":{"type":"string"},"roster":{"type":"object","properties":{"id":{"type":"string"},"entries":{"type":"array","items":{"type":"object","properties":{"sortOrder":{"type":"integer"},"entityId":{"type":"string"},"agents":{"type":"array","items":{"$ref":"#/components/schemas/RosterAssignment"}},"assistants":{"type":"array","items":{"$ref":"#/components/schemas/RosterAssignment"}},"logisticians":{"type":"array","items":{"$ref":"#/components/schemas/RosterAssignment"}},"marketing":{"type":"array","items":{"$ref":"#/components/schemas/RosterAssignment"}},"tags":{"type":"array","items":{"type":"string"}},"activeOnRoster":{"type":"boolean"},"marketplace":{"type":"boolean"},"booknow":{"type":"boolean"},"restricted":{"type":"boolean"},"riderId":{"type":"string"},"createdDate":{"type":"string"},"updatedDate":{"type":"string"}}}},"entryCount":{"type":"integer"},"autoAlphaSort":{"type":"boolean"},"agentsCanUseShowBooking":{"type":"boolean"},"agentsCanEditRestrictedBooking":{"type":"boolean"},"agentsHaveFullAccess":{"type":"boolean"},"newArtistsBooknow":{"type":"boolean"},"restrictedMailboxAccess":{"type":"boolean"},"showInactiveArtists":{"type":"boolean"},"entityIdsSharingArtists":{"type":"array","items":{"type":"string"}},"createdDate":{"type":"string"},"updatedDate":{"type":"string"}}},"artists":{"type":"array","items":{"type":"object","properties":{"entityId":{"type":"string"},"title":{"type":"string"},"webtitle":{"type":"string"},"email":{"type":"string"},"legalTitle":{"type":"string"},"phoneNumber":{"type":"string"},"avatarImageUrl":{"type":"string"},"profileImageUrl":{"type":"string"},"booknow":{"type":"boolean"},"tags":{"type":"array","items":{"type":"string"}},"activeOnRoster":{"type":"boolean"},"restricted":{"type":"boolean"}}}},"profiles":{"type":"array","items":{"type":"object","properties":{"entityId":{"type":"string"},"title":{"type":"string"},"webtitle":{"type":"string"},"biography":{"type":"string"},"genres":{"type":"array","items":{"type":"string"}},"labels":{"type":"array","items":{"type":"string"}},"hashtag":{"type":"string"},"socialNetworks":{"type":"array","items":{"type":"object","properties":{"name":{"type":"string","enum":["amazonMusic","appleMusic","bandcamp","bandsintown","beatport","bilibili","deezer","discogs","douyin","facebook","instagram","kuaishou","mixcloud","pandora","patreon","residentAdvisor","reverbNation","shazam","songkick","soundcloud","spotify","tidal","thedjlist","tiktok","toutiao","traxsource","twitch","twitter","website","weibo","wikipedia","youtube"]},"username":{"type":"string"},"userid":{"type":"string"},"url":{"type":"string"},"count":{"type":"integer"},"displayed":{"type":"boolean"},"order":{"type":"integer"}}}},"profileImages":{"type":"array","items":{"type":"string"}},"avatarImageUrl":{"type":"string"},"profileImageUrl":{"type":"string"},"profileHeaderImageUrl":{"type":"string"},"bannerImageUrl":{"type":"string"},"discographyUrl":{"type":"string"},"presskitlink":{"type":"string"},"techriderlink":{"type":"string"},"presskitimage":{"type":"string"},"quotes":{"type":"array","items":{"type":"string"}},"affiliations":{"type":"string"},"nationality":{"type":"string"},"city":{"type":"string"},"country":{"type":"string"},"countryName":{"type":"string"},"hometown":{"type":"string"},"customFields":{"type":"array","items":{"type":"object","properties":{"values":{"type":"array","items":{"type":"string"}},"entityId":{"type":"string"},"presetType":{"type":"string","enum":["accountFilter","advanceSheetTemplate","advancing","agencyAnalyticsFilterentity","agencyAnalyticsFilteraccount","allArtistsCalendar","airline","artistExpenses","artistExpenseType","bedSize","bookNowSettings","bookingPresets","bookingReportsFilter","billedAs","billingType","blockedReason","buyerExpenses","buyerExpenseType","bookingFields","calendars","calendarStreamFilterentity","calendarStreamFilteraccount","cannedMessages","contractTermsType","contractTermsPhrases","customInvoiceIdSequences","customLogisticsConfig","customLogisticsPresets","currencies","csvReportPreset","disposition","distanceUnit","documentPacket","dynamicPdfReportPreset","enabledFeatures","entityAssetsTag","entityLegalAssetsTag","entityFilter","entityNotificationSettings","eSignSettings","events","eventSchedule","eventScheduleActor","eventScheduleLocation","eventScheduleType","eventType","eventCalendarFilterentity","eventDetailPresets","eventReportsFilter","expensesReportsFilter","gigstreamSettings","groundSpecialRequests","hotelSpecialRequests","htmlDocsSettings","inboundEmailMessageFilter","incomeTaxRateSettings","internalStatus","invoiceDistributionItemReportsFilter","invoiceReportsFilter","invoiceItemReportsFilter","invoices","invoiceItemLabels","itinerary","itineraryRequestSettings","itinerarySettings","jsonReportPreset","logisticsPhrases","logisticsType","merchSeller","minimumAge","mailboxFilterentity","mailboxFilteraccount","offer","outboundEmailMessageFilter","paymentPlan","paymentConfig","profileCustom1","profileCustom2","profileCustom3","profileCustom4","profileCustom5","profileFields","profileGenre","profileLabel","profileEmbedSettings","performanceType","radiusClausePreset","rating","reportColumnsPreset","resourceFilter","roomType","rosterTag","rosterEmbedSettings","settlementReportsFilter","settlementMessageReportsFilter","seating","signUpFilter","smoking","summaryViewConfig","summaryViewPermissions","taskPresets","taskFilter","taskReportsFilter","taxRates","teamPresets","ticketFees","ticketFeeType","ticketScale","ticketType","timeUnit","travelSpecialRequests","travelType","vehicleType","venueAssetsTag","venueCalendars","venueLegalAssetsTag","venueRosterTag","exportFilter"]}}}},"activeOnRoster":{"type":"boolean"},"restricted":{"type":"boolean"},"soundcloudmedia":{"type":"array","items":{"$ref":"#/components/schemas/ExternalMedia"}},"mixcloudmedia":{"type":"array","items":{"$ref":"#/components/schemas/ExternalMedia"}},"youtubemedia":{"type":"array","items":{"$ref":"#/components/schemas/ExternalMedia"}},"reach":{"type":"integer"},"customReach":{"type":"integer"},"capacity":{"type":"integer"},"thedjlistrank":{"type":"integer"},"owner":{"type":"string"},"displayTitle":{"type":"string"},"multimedia":{"type":"array","items":{"$ref":"#/components/schemas/ExternalMedia"}},"updatedDate":{"type":"string"},"createdDate":{"type":"string"}}}},"artistMemberAccounts":{"type":"object","additionalProperties":{"type":"array","items":{"type":"object","properties":{"identityId":{"type":"string","description":"The member account's identity ID within the artist entity."},"roles":{"type":"array","items":{"type":"string","enum":["artist","owner","manager","affiliate","associate","invited"]},"description":"The member's roles within the artist entity: artist, owner, manager, affiliate, associate, or invited (pending invite)."},"active":{"type":"boolean","description":"Whether the membership is active."},"title":{"type":"string","description":"Display title of the member within this artist entity.","nullable":true}}}}},"invitedArtistMemberAccountRoles":{"type":"object","additionalProperties":{"type":"object","additionalProperties":{"type":"array","items":{"type":"string"}}}},"agents":{"type":"array","items":{"$ref":"#/components/schemas/Account"}}}},"requestId":{"type":"string","nullable":true,"description":"A request correlation id generated by the server."}}},"ListMembersResponse":{"type":"object","properties":{"status":{"type":"string","enum":["OK","FAIL","ERROR"]},"code":{"type":"string","nullable":true,"description":"ResultCode enum name (e.g. SUCCESS, NOT_FOUND, RATE_LIMIT_EXCEEDED)"},"message":{"type":"string","nullable":true,"description":"Result message: OK on success; the error text when status is FAIL or ERROR."},"messages":{"type":"array","nullable":true,"items":{"type":"string"},"description":"In rare, specific cases, additional error messages."},"data":{"type":"object","properties":{"members":{"type":"array","items":{"type":"object","properties":{"account":{"allOf":[{"$ref":"#/components/schemas/Account"}],"description":"The member's public account profile: identity, name, email, images, and primary phone."},"membershipEntry":{"type":"object","properties":{"identityId":{"type":"string"},"roles":{"type":"array","items":{"type":"string","enum":["agent","owner","assistant","reporting","logistician"]},"description":"The member's roles within this organization."},"active":{"type":"boolean"},"title":{"type":"string"}},"description":"The member's membership record within the queried organization — roles, active state, and membership title; scoped to this organization only, not the account's memberships elsewhere."}}},"description":"The organization's members, one entry per member."}}},"requestId":{"type":"string","nullable":true,"description":"A request correlation id generated by the server."}}},"Deal":{"type":"object","properties":{"events":{"type":"array","items":{"type":"object","properties":{"artistNotes":{"type":"string","description":"Notes for the artist, shown on the booking.","nullable":true},"address":{"type":"string","description":"Street address of the event.","nullable":true},"additionalBonuses":{"type":"array","items":{"type":"object","properties":{"bonusAmount":{"type":"number","description":"Bonus amount in whole currency units, for FLAT_AMOUNT bonuses."},"bonusType":{"type":"string","enum":["FLAT_AMOUNT","TICKET_TIER_COUNT","TICKET_TIER_AMOUNT"],"description":"How the bonus is calculated: a flat amount, per ticket-tier count, or per ticket-tier amount."},"tierOperator":{"type":"string","enum":["AND","OR"],"description":"How multiple tiers combine: AND or OR."},"tiers":{"type":"array","items":{"type":"object","properties":{"count":{"type":"integer","description":"Tier ticket count, for TICKET_TIER_COUNT bonuses."},"amount":{"type":"number","description":"Tier amount in whole currency units, for TICKET_TIER_AMOUNT bonuses."},"bonusAmount":{"type":"number","description":"Bonus amount for this tier, in whole currency units."}}},"description":"Ticket tiers the bonus is calculated from."}}},"description":"Additional bonuses paid on top of the guarantee, flat or calculated from ticket tiers."},"announcementDateTime":{"type":"string","description":"Embargo announcement date and time (YYYY-MM-DDThh:mm:ss). Requires announcementTrigger EMBARGO; when set without an explicit trigger, EMBARGO is inferred.","nullable":true},"announcementTrigger":{"type":"string","enum":["NONE","CONFIRMED","EMBARGO"],"description":"When the event may be announced: CONFIRMED when the event is confirmed, EMBARGO at the announcement date, NONE never.","nullable":true},"artists":{"type":"array","items":{"$ref":"#/components/schemas/Artist"},"description":"The artists performing at this event. Each artist must be on the agency's roster, matched by roster entity id (or exact roster name)."},"billing":{"type":"object","properties":{"percent":{"type":"string","description":"Billing percent, as a string percent number."},"type":{"type":"string","description":"Billing type: exact-matched by id or display label against the agency's billing-type presets; an unmatched value is kept as-is."}},"description":"How the artist is billed: a billing type from the agency's billing-type presets and a percent.","nullable":true},"blockedReason":{"type":"string","description":"Reason the event is blocked. Setting it also marks the event blocked.","nullable":true},"bonusPercent":{"type":"number","description":"Percent of box office (gross or net, per bonusType) paid as a bonus, as a percent number (10 = 10%)."},"bonusType":{"type":"string","enum":["GBOR","NBOR"],"description":"Box office basis for the bonus: GBOR (gross) or NBOR (net). Default GBOR."},"bookingFeeOnTop":{"type":"boolean","description":"Whether the agency booking fee is added on top of the deal total."},"buyerCommission":{"type":"object","properties":{"buyerCommissionCalculationTypes":{"type":"array","items":{"type":"string","enum":["FLAT_AMOUNT","PERCENT_GUARANTEE","PERCENT_FIXED_EXPENSES","PERCENT_VARIABLE_EXPENSES"]},"description":"Which parts of the deal the commission applies to: a flat amount, a percent of the guarantee, a percent of fixed expenses, or a percent of variable expenses."},"amount":{"type":"number","description":"Flat commission amount in whole currency units (500 = 500.00 USD), for FLAT_AMOUNT."},"percent":{"type":"string","description":"Percent of the guarantee or expenses, as a string percent number (\"10\" = 10%), for the PERCENT_* calculation types.","nullable":true},"maxTotal":{"type":"number","description":"Cap on the commission, in whole currency units (500 = 500.00 USD); ignored for FLAT_AMOUNT."}},"description":"Commission the buyer pays: a flat amount, a percent of the guarantee, or a percent of fixed and variable expenses.","nullable":true},"buyerExpenses":{"type":"array","items":{"type":"object","properties":{"calcType":{"type":"string","enum":["FLAT_AMOUNT","AMOUNT_PER_TICKET","AMOUNT_PER_PERSON","PERCENT_NBOR","PERCENT_GBOR"],"description":"How the expense is calculated: a flat amount, an amount per paid ticket or per attendee, or a percent of gross (PERCENT_GBOR) or net (PERCENT_NBOR) box office."},"type":{"type":"string","description":"Expense type label.","nullable":true},"description":{"type":"string","description":"What the expense is for.","nullable":true},"amount":{"type":"number","description":"Flat, per-ticket, or per-attendee amount in whole currency units, depending on calcType."},"percent":{"type":"number","description":"Percent of box office when calcType is PERCENT_GBOR or PERCENT_NBOR."},"after":{"type":"number","description":"Box office threshold, in whole currency units, above which a percent expense starts to apply.","nullable":true},"maxTotal":{"type":"number","description":"Cap on the expense, in whole currency units.","nullable":true},"includeInSplitPoint":{"type":"boolean","description":"Whether the expense is included when computing the artist split point.","nullable":true},"currencyType":{"type":"string","description":"ISO 4217 currency code; defaults to the event's currencyType.","nullable":true}}},"description":"Buyer-borne expenses: flat amounts, amounts per ticket or per attendee, or percentages of box office."},"capacity":{"type":"integer","description":"Venue capacity (head count).","nullable":true},"city":{"type":"string","description":"City of the event.","nullable":true},"country":{"type":"string","description":"Country of the event.","nullable":true},"currencyType":{"type":"string","description":"ISO 4217 currency code for the event's money values (for example USD); must be a currency the agency has enabled. Required."},"dealType":{"type":"string","enum":["FLAT_GUARANTEE","STRAIGHT_PERCENTAGE","PLUS","VS"],"description":"Deal structure: FLAT_GUARANTEE (default), STRAIGHT_PERCENTAGE, PLUS (guarantee plus a box office bonus), or VS (versus)."},"description":{"type":"string","description":"Description of the event.","nullable":true},"duration":{"type":"integer","description":"Performance length in minutes.","nullable":true},"endDateTime":{"type":"string","description":"End date (YYYY-MM-DD) or end date-time (YYYY-MM-DDThh:mm:ss), local wall-clock — no UTC offset or Z suffix.","nullable":true},"guarantee":{"type":"number","description":"Guarantee in whole currency units of currencyType (7500 = 7,500.00 USD). Default 0."},"hardMerch":{"type":"integer","description":"Artist's share of hard-merchandise sales, as a percent number (25 = 25%).","nullable":true},"merchSeller":{"type":"string","description":"Merch seller: exact-matched by id or display label against the agency's merch-seller presets; an unmatched value is kept as-is.","nullable":true},"minimumAge":{"type":"string","description":"Minimum age requirement (for example 18+, 21+).","nullable":true},"performanceType":{"type":"string","description":"Performance type: exact-matched by id or display label against the agency's performance-type presets; an unmatched value is kept as-is.","nullable":true},"radiusClause":{"type":"object","properties":{"radius":{"type":"number","description":"Radius, in distanceUnit."},"distanceUnit":{"type":"string","description":"Unit for radius. Default miles."},"beforeTimeValue":{"type":"integer","description":"How long before the event the radius clause starts."},"beforeTimeUnit":{"type":"string","description":"Unit for beforeTimeValue, for example days."},"afterTimeValue":{"type":"integer","description":"How long after the event the radius clause runs."},"afterTimeUnit":{"type":"string","description":"Unit for afterTimeValue, for example days."},"enabled":{"type":"boolean","description":"Whether the radius clause is active. Default true."}},"description":"Radius clause restricting nearby events before or after this one.","nullable":true},"rsvpUrl":{"type":"string","description":"RSVP page URL.","nullable":true},"salesTaxInclusive":{"type":"boolean","description":"Whether sales tax is included in the deal total."},"schedule":{"type":"array","items":{"type":"object","properties":{"type":{"type":"string","description":"Schedule entry type: well-known values (loadIn, soundCheck, doorOpen, eventStart, performance, doorClose, loadOut, curfew) or an agency preset, matched by id or display name; an unmatched value is kept as-is.","nullable":true},"dateTime":{"type":"string","description":"Start date-time (YYYY-MM-DDThh:mm:ss), local wall-clock. Required when dateType is DATE.","nullable":true},"endDateTime":{"type":"string","description":"End date-time (YYYY-MM-DDThh:mm:ss), local wall-clock.","nullable":true},"appliesTo":{"type":"object","properties":{"artists":{"type":"array","items":{"$ref":"#/components/schemas/Artist"},"description":"Artists this entry applies to, by roster entity id or display name."},"artistMembers":{"type":"array","items":{"$ref":"#/components/schemas/ArtistMember"},"description":"Artist members this entry applies to, by account id or email."},"other":{"type":"array","items":{"type":"string"},"description":"Preset values this entry applies to: exact-matched by id or display label against the agency's event-schedule-actor presets; an unmatched value is kept as-is."}},"description":"Who this entry applies to: artists, artist members, or other preset values."},"location":{"type":"string","description":"Location of the entry: exact-matched by id or display label against the agency's event-schedule-location presets; an unmatched value is kept as-is.","nullable":true},"dateType":{"type":"string","enum":["TBD","TBA","TBC","MAD","DATE"],"description":"Date certainty: DATE for a concrete timed entry, MAD for a mutually agreeable date, or a placeholder (TBD, TBA, TBC). Default DATE."}}},"description":"Day-of-show schedule entries, each with a date-time and the artists or members it applies to. Artists and members named in appliesTo must already be set in the event's artists; artists match by id or roster display name, members by account id or email.","nullable":true},"sharedNotes":{"type":"string","description":"Notes shared with the artist.","nullable":true},"softMerch":{"type":"integer","description":"Artist's share of soft-merchandise sales, as a percent number (25 = 25%).","nullable":true},"startDateTime":{"type":"string","description":"Event date (YYYY-MM-DD) or date-time (YYYY-MM-DDThh:mm:ss), local wall-clock — never with a UTC offset or Z suffix. Required unless mutuallyAgreeableDate is true. When a time is present, timeZone is required.","nullable":true},"state":{"type":"string","description":"State or province of the event.","nullable":true},"status":{"type":"string","enum":["tentative","confirmed","blocked","canceled"],"description":"Initial event status. Default tentative; an agency set to confirm bookings at creation may confirm it.","nullable":true},"summary":{"type":"string","description":"Short summary of the event.","nullable":true},"support":{"type":"array","items":{"type":"string"},"description":"Supporting acts, by name or id.","nullable":true},"ticketOnSaleDateTime":{"type":"string","description":"Ticket on-sale date-time (YYYY-MM-DDThh:mm:ss).","nullable":true},"ticketPresaleDateTime":{"type":"string","description":"Ticket presale date-time (YYYY-MM-DDThh:mm:ss).","nullable":true},"tickets":{"type":"object","properties":{"tiers":{"type":"array","items":{"type":"object","properties":{"actuals":{"type":"integer","description":"Actual tickets sold."},"comps":{"type":"integer","description":"Complimentary tickets."},"name":{"type":"string","description":"Tier name. Required.","nullable":true},"planned":{"type":"integer","description":"Planned ticket count."},"plannedComps":{"type":"integer","description":"Planned complimentary tickets."},"price":{"type":"number","description":"Tier price in whole currency units."},"excludeFromBreakEven":{"type":"boolean","description":"Whether the tier is excluded from break-even calculations."}}},"description":"Ticket tiers with names, prices, and counts."},"final":{"type":"boolean","description":"Whether these are final (actual) ticket counts rather than a scale."},"cumulativeFees":{"type":"array","items":{"$ref":"#/components/schemas/TicketFee"},"description":"Ticket fees calculated on cumulative ticket counts across tiers."},"includedFees":{"type":"array","items":{"$ref":"#/components/schemas/TicketFee"},"description":"Ticket fees included in the deal total."},"independentFees":{"type":"array","items":{"$ref":"#/components/schemas/TicketFee"},"description":"Ticket fees calculated per tier independently."}},"description":"Ticket scale: named tiers with prices and counts, plus ticket fee rules."},"ticketUrl":{"type":"string","description":"Public ticketing page URL.","nullable":true},"timeZone":{"type":"string","description":"IANA time zone id (for example America/Los_Angeles) for the event's date-times. Required when any date carries a time.","nullable":true},"type":{"type":"string","description":"Event type: exact-matched by id or display label against the agency's event-type presets; an unmatched value is kept as-is.","nullable":true},"venue":{"type":"object","properties":{"org":{"allOf":[{"$ref":"#/components/schemas/Organization"}],"description":"The venue's organization: name plus optional contact details. A new venue record is created when no match exists.","nullable":true}},"description":"The venue: an organization; a new venue record is created when no match exists.","nullable":true},"zip":{"type":"string","description":"Postal code of the event.","nullable":true},"foreignId":{"type":"string","description":"Your own identifier for the event, stored as-is.","nullable":true},"eventDateNote":{"type":"string","description":"A note about the event date, for example when the date is approximate.","nullable":true},"mutuallyAgreeableDate":{"type":"boolean","description":"Set true to book an undated, mutually agreeable date; startDateTime must then be omitted."}},"required":["artists","currencyType"]},"description":"The events to book. At least one event is required, and every event's artists must be active on the agency's roster."},"assignments":{"type":"object","properties":{"agents":{"type":"array","items":{"type":"object","properties":{"name":{"type":"string","description":"Member display name.","nullable":true},"firstName":{"type":"string","description":"Member's first name.","nullable":true},"lastName":{"type":"string","description":"Member's last name.","nullable":true},"defaultCommissionPercent":{"type":"number","description":"Default agency commission percent for this agent, as a percent number.","nullable":true},"defaultCommissionAmount":{"type":"number","description":"Default agency commission amount for this agent, in whole currency units.","nullable":true},"isSellingAgent":{"type":"boolean","description":"Whether this agent is the selling agent."},"salesTax":{"type":"number","description":"Sales tax percent applied to this agent's fee.","nullable":true},"id":{"type":"string","description":"Member's account id. Required when email is omitted.","nullable":true},"email":{"type":"string","description":"Member's email; used to match an existing account when id is omitted.","nullable":true}}},"description":"Agents on the booking, by account id or email. Omit to use each roster artist's default assignments; creation fails when no agent can be resolved."},"assistants":{"type":"array","items":{"type":"object","properties":{"name":{"type":"string","description":"Member display name.","nullable":true},"firstName":{"type":"string","description":"Member's first name.","nullable":true},"lastName":{"type":"string","description":"Member's last name.","nullable":true},"id":{"type":"string","description":"Member's account id. Required when email is omitted.","nullable":true},"email":{"type":"string","description":"Member's email; used to match an existing account when id is omitted.","nullable":true}}},"description":"Assistants on the booking, by account id or email."},"logisticians":{"type":"array","items":{"$ref":"#/components/schemas/AgencyMember"},"description":"Logisticians on the booking, by account id or email."},"marketing":{"type":"array","items":{"$ref":"#/components/schemas/AgencyMember"},"description":"Marketing contacts on the booking, by account id or email."}},"description":"Agency members assigned to the booking: agents, assistants, logisticians, and marketing contacts. Agents may be given explicitly or omitted to use each roster artist's default assignments."},"contacts":{"type":"object","properties":{"buyer":{"allOf":[{"$ref":"#/components/schemas/Contact"}],"description":"The buyer: a person (an email is required, plus one of firstName/lastName) and an organization (optional; when given, its name matches an existing organization or creates one).","nullable":true},"signer":{"allOf":[{"$ref":"#/components/schemas/Contact"}],"description":"The signing contact.","nullable":true},"counterSigner":{"allOf":[{"$ref":"#/components/schemas/Contact"}],"description":"The counter-signing contact.","nullable":true},"advancing":{"allOf":[{"$ref":"#/components/schemas/Contact"}],"description":"The advancing contact.","nullable":true},"facilities":{"allOf":[{"$ref":"#/components/schemas/Contact"}],"description":"The facilities contact.","nullable":true},"liaison":{"allOf":[{"$ref":"#/components/schemas/Contact"}],"description":"The liaison contact.","nullable":true},"logisticsContact":{"allOf":[{"$ref":"#/components/schemas/Contact"}],"description":"The logistics contact.","nullable":true},"marketingContact":{"allOf":[{"$ref":"#/components/schemas/Contact"}],"description":"The marketing contact.","nullable":true},"payer":{"allOf":[{"$ref":"#/components/schemas/Contact"}],"description":"The payer.","nullable":true},"producer":{"allOf":[{"$ref":"#/components/schemas/Contact"}],"description":"The producer.","nullable":true},"promoter":{"allOf":[{"$ref":"#/components/schemas/Contact"}],"description":"The promoter.","nullable":true},"runnerContacts":{"type":"array","items":{"$ref":"#/components/schemas/Contact"},"description":"Day-of-show runners for the artist."},"ticketCountContact":{"allOf":[{"$ref":"#/components/schemas/Contact"}],"description":"The ticket-count contact.","nullable":true}},"description":"The people and organizations on the booking, keyed by role: buyer, signer, promoter, and others. The buyer is required."},"payments":{"type":"array","items":{"type":"object","properties":{"percent":{"type":"number","description":"Percent of the deal total due at this step, as a percent number (50 = 50%). Used to derive a payment item when items is omitted.","nullable":true},"amount":{"type":"number","description":"Payment amount in whole currency units. Used to derive a payment item when items is omitted.","nullable":true},"status":{"type":"string","enum":["CREATED","BILLED","PAYMENT_PENDING","PAID","REFUNDED"],"description":"Status of the created payment. Default CREATED."},"title":{"type":"string","description":"Payment title. Defaults to the payment's position, e.g. \"Payment 0\" for the first payment.","nullable":true},"remainder":{"type":"boolean","description":"Marks the payment that captures whatever remains after the other payments. Exactly one remainder payment is required."},"deposit":{"type":"boolean","description":"Whether this payment is a deposit."},"dueDate":{"type":"string","description":"Due date (YYYY-MM-DD, no time component). Required unless dueOnSite is true or relativeDueDate is given.","nullable":true},"relativeDueDate":{"type":"object","properties":{"value":{"type":"integer","description":"Number of units (see unit) relative to the trigger event. Default 3."},"unit":{"type":"string","enum":["DAYS"],"description":"Time unit for value. Only DAYS is accepted for payment due dates."},"beforeOrAfter":{"type":"string","enum":["BEFORE","AFTER","WHEN","ON"],"description":"Whether the due date falls before or after the trigger event."},"triggerEvent":{"type":"string","enum":["CONTRACT_ISSUED","CONTRACT_SIGNED","EVENT_DATE","FIRST_EVENT_DATE","LAST_EVENT_DATE"],"description":"Event the due date is relative to. Accepted for payment due dates: CONTRACT_ISSUED, CONTRACT_SIGNED, EVENT_DATE, FIRST_EVENT_DATE, LAST_EVENT_DATE."},"dateTime":{"type":"string","description":"Fixed due date (YYYY-MM-DD, no time component). Required when userManaged is true.","nullable":true},"timeZone":{"type":"string","description":"IANA time zone id for dateTime.","nullable":true},"userManaged":{"type":"boolean","description":"Set true to manage the due date manually; requires dateTime."}},"description":"Due date relative to a trigger event, as an alternative to dueDate; the two cannot be combined.","nullable":true},"dueOnSite":{"type":"boolean","description":"Set true to make the payment due on site, which removes the dueDate requirement; the due date defaults to the event date."},"manualPaymentMethod":{"type":"string","description":"Payment method label for payments collected outside the platform.","nullable":true},"refundPaymentMethod":{"type":"string","description":"Payment method label for refunds.","nullable":true},"referenceCode":{"type":"string","description":"Bank or ACH memo recorded with the payment; surfaces on the invoice as its payment reference number.","nullable":true},"offerItemType":{"type":"string","enum":["PERFORMANCE_FEE_GUARANTEE","ARTIST_PERFORMANCE_FEE","ARTIST_MEMBER_FEE","PERFORMANCE_FEE_BONUS","BOOKING_FEE_GUARANTEE","BOOKING_FEE","ARTIST_MEMBER_BOOKING_FEE","AGENCY_FEE","AGENT_FEE","BOOKING_FEE_BONUS","EXPENSE"],"description":"What this payment covers, for example PERFORMANCE_FEE_GUARANTEE (default). Used to derive a payment item when items is omitted."},"items":{"type":"array","items":{"type":"object","properties":{"percent":{"type":"number","description":"Percent of the deal total for this item, as a percent number.","nullable":true},"amount":{"type":"number","description":"Item amount in whole currency units.","nullable":true},"remainder":{"type":"boolean","description":"Set true to make this item capture the remainder."},"offerItemType":{"type":"string","enum":["PERFORMANCE_FEE_GUARANTEE","ARTIST_PERFORMANCE_FEE","ARTIST_MEMBER_FEE","PERFORMANCE_FEE_BONUS","BOOKING_FEE_GUARANTEE","BOOKING_FEE","ARTIST_MEMBER_BOOKING_FEE","AGENCY_FEE","AGENT_FEE","BOOKING_FEE_BONUS","EXPENSE"],"description":"What this item covers, for example PERFORMANCE_FEE_GUARANTEE. Required.","nullable":true}}},"description":"Line items for this payment; each item needs offerItemType and either percent, amount, or remainder. Leave items empty for the remainder payment. When omitted, a single item is derived from the payment's percent, amount, and offerItemType.","nullable":true}}},"description":"A custom payment schedule. When omitted, the agency's default payment-plan preset is applied. Exactly one payment must have remainder set to true.","nullable":true},"phrases":{"type":"object","additionalProperties":{"type":"array","items":{"type":"string"}},"description":"Contract phrase values keyed by phrase id, each a list of lines.","nullable":true},"internalNotes":{"type":"string","description":"Internal notes attached to the booking; visible to agency members, not to the buyer.","nullable":true}},"required":["events"]},"CreateDealResponse":{"type":"object","properties":{"status":{"type":"string","enum":["OK","FAIL","ERROR"]},"code":{"type":"string","nullable":true,"description":"ResultCode enum name (e.g. SUCCESS, NOT_FOUND, RATE_LIMIT_EXCEEDED)"},"message":{"type":"string","nullable":true,"description":"Result message: OK on success; the error text when status is FAIL or ERROR."},"messages":{"type":"array","nullable":true,"items":{"type":"string"},"description":"In rare, specific cases, additional error messages."},"data":{"type":"object","properties":{"bookingId":{"type":"string","description":"The created booking's identifier."}}},"requestId":{"type":"string","nullable":true,"description":"A request correlation id generated by the server."}}},"ListDeletedItemsRequest":{"type":"object","properties":{"types":{"type":"array","items":{"type":"string","enum":["booking","event","bookingless_event","invoice","settlement_message","task"]},"description":"Optional list of deleted-item types to return, case-insensitive. Omit it or send [] for all types. An unknown value or a null element is refused with HTTP 400.","nullable":true},"limit":{"type":"integer","description":"Optional page size from 1 to 200, default 50. A value outside that range is refused with HTTP 400.","nullable":true},"cursor":{"type":"string","description":"Opaque continuation token: pass the previous page's nextCursor. A malformed token is refused with HTTP 400; a blank token reads as absent and returns the newest page.","nullable":true}}},"ListDeletedItemsResponse":{"type":"object","properties":{"status":{"type":"string","enum":["OK","FAIL","ERROR"]},"code":{"type":"string","nullable":true,"description":"ResultCode enum name (e.g. SUCCESS, NOT_FOUND, RATE_LIMIT_EXCEEDED)"},"message":{"type":"string","nullable":true,"description":"Result message: OK on success; the error text when status is FAIL or ERROR."},"messages":{"type":"array","nullable":true,"items":{"type":"string"},"description":"In rare, specific cases, additional error messages."},"data":{"type":"object","properties":{"entries":{"type":"array","items":{"type":"object","properties":{"type":{"type":"string","enum":["booking","event","bookingless_event","invoice","settlement_message","task"],"description":"What the deleted item was: booking, event, bookingless_event, invoice, settlement_message or task."},"itemId":{"type":"string","description":"The deleted item's identifier within its `type`."},"bookingId":{"type":"string","description":"The owning booking id where one exists, null for a bookingless event and for a task with no linked booking.","nullable":true},"reference":{"type":"string","description":"Human-readable label built at delete time, ending in the item id. Display text, not a parseable format."},"deletedAt":{"type":"string","description":"When the item was deleted, an ISO-8601 UTC instant; newest first."}}},"description":"The deleted items in this page, newest deletion first."},"nextCursor":{"type":"string","description":"Continuation token for the next page; null only at the end of the stream. A page shorter than `limit`, even an empty one, can still carry a token; keep paging until this is null.","nullable":true}}},"requestId":{"type":"string","nullable":true,"description":"A request correlation id generated by the server."}}},"CustomFilterRequest":{"type":"object","properties":{"dateRange":{"type":"object","properties":{"field":{"type":"string","description":"Column to filter on. Omitted picks the report-type default. Discover names with List Report Columns.","nullable":true},"start":{"type":"string","description":"Start date — YYYY-MM-DD or ES date math (now-1y, now-7d).","nullable":true},"end":{"type":"string","description":"End date — YYYY-MM-DD or ES date math (now, now-1d).","nullable":true}},"description":"Date range filter: field, start, end. Dates are YYYY-MM-DD or ES date math (now-1y, now-7d).","nullable":true},"bookingStatuses":{"type":"array","items":{"type":"string","enum":["Open","Closed","Tasks","Request","Offer","Terms","Contracts","Deposit","Advancing","Payments","Finals","Settlement","Scheduled","Complete"]},"description":"Booking pipeline statuses (Offer, Terms, Contracts, ...). confirmed is an event status — use eventStatuses for it.","nullable":true},"eventStatuses":{"type":"array","items":{"type":"string","enum":["none","tentative","confirmed","blocked","canceled"]},"description":"Event statuses (confirmed, tentative, canceled, ...). confirmed belongs here, not in bookingStatuses.","nullable":true},"paymentStatuses":{"type":"array","items":{"type":"string","enum":["NotRequired","Unpaid","Intended","Initiated","Pending","PendingApproval","Canceled","Incomplete","Paid","Refunded","Failed"]},"description":"Payment statuses (Paid, Pending, Failed, ...). PaymentEvent reports only; rejected with 400 on other report types.","nullable":true},"identities":{"type":"object","properties":{"artists":{"type":"array","items":{"type":"string"},"description":"Artist entity IDs.","nullable":true},"venues":{"type":"array","items":{"type":"string"},"description":"Venue entity IDs.","nullable":true},"buyers":{"type":"array","items":{"type":"string"},"description":"Buyer entity IDs.","nullable":true},"agents":{"type":"array","items":{"type":"string"},"description":"Agent entity IDs.","nullable":true}},"description":"Filter by entity: artists, venues, buyers, agents — arrays of entity IDs, not display names.","nullable":true},"location":{"type":"object","properties":{"countries":{"type":"array","items":{"type":"string"},"description":"Country codes (e.g. US, GB).","nullable":true},"cities":{"type":"array","items":{"type":"string"},"description":"City names.","nullable":true},"states":{"type":"array","items":{"type":"string"},"description":"State codes (e.g. CA, NY).","nullable":true}},"description":"Location filter: countries, cities, states.","nullable":true},"financial":{"type":"object","properties":{"minBillableBase":{"type":"integer","description":"Minimum billable base amount.","nullable":true},"maxBillableBase":{"type":"integer","description":"Maximum billable base amount.","nullable":true},"minBillableTotal":{"type":"integer","description":"Minimum billable total amount (full deal value).","nullable":true},"maxBillableTotal":{"type":"integer","description":"Maximum billable total amount.","nullable":true},"minGuarantee":{"type":"integer","description":"Minimum guarantee amount.","nullable":true},"maxGuarantee":{"type":"integer","description":"Maximum guarantee amount.","nullable":true},"minAmountNotPaid":{"type":"integer","description":"Minimum amount not paid (outstanding balance).","nullable":true},"maxAmountNotPaid":{"type":"integer","description":"Maximum amount not paid.","nullable":true},"currency":{"type":"string","description":"Currency code (e.g. GBP, USD). Single value, not an array.","nullable":true},"dealTypes":{"type":"array","items":{"type":"string","enum":["FLAT_GUARANTEE","STRAIGHT_PERCENTAGE","PLUS","VS"]},"description":"Deal type filter.","nullable":true}},"description":"Financial filter: amount ranges, currency (single code), dealTypes.","nullable":true},"eventAttributes":{"type":"object","properties":{"eventTypes":{"type":"array","items":{"type":"string"},"description":"Event type filter. Values are agency-customizable presets.","nullable":true},"performanceTypes":{"type":"array","items":{"type":"string"},"description":"Performance type filter. Values are agency-customizable presets.","nullable":true},"billingTypes":{"type":"array","items":{"type":"string"},"description":"Billing type filter. Values are agency-customizable presets.","nullable":true}},"description":"Event attribute filter: performanceTypes, billingTypes.","nullable":true},"exportAs":{"type":"string","enum":["STREAM_CSV","STREAM_JSONL"],"description":"Output format. Streaming formats only.","nullable":true},"totals":{"type":"object","properties":{"dimensions":{"type":"array","items":{"type":"object","properties":{"name":{"type":"string","description":"Column display name to group by (e.g. Currency, Event Date)."},"format":{"type":"string","enum":["YEAR","QUARTER","MONTH","WEEK","DAY","HOUR"],"description":"Date bucket for date columns. Required for date columns; ignored for non-date columns.","nullable":true}}},"description":"Group-by dimensions for aggregation; up to five.","nullable":true}},"description":"Group by dimensions for aggregation. All numeric columns aggregate automatically.","nullable":true},"multiValueDelimiter":{"type":"string","description":"Delimiter used to join multi-value cells in CSV/streaming (STREAM_CSV) output. Default |||.","nullable":true},"columns":{"type":"array","items":{"type":"string"},"description":"Column names to include in the output. Discover names with List Report Columns.","nullable":true},"columnOptions":{"type":"array","items":{"type":"object","properties":{"name":{"type":"string","description":"Column name this option applies to."},"format":{"type":"string","description":"Date style code, or isoDate (yyyy-MM-dd) or isoDateTime (timestamp with offset; refused on date-only columns). Parse only the ISO formats; the other styles vary by locale. Blank keeps the column's shipped style.","nullable":true}}},"description":"Per-column render options: column name plus an optional date style code, or isoDate / isoDateTime. Parse only the ISO formats; the other styles vary by locale. A placeholder date such as TBA renders as its label under any format. Blank keeps the column's shipped style.","nullable":true},"include":{"type":"string","description":"Response shape: data (detail rows), totals (aggregates), or data,totals (both). Default totals."},"sorting":{"type":"object","properties":{"by":{"type":"string","description":"Column name to sort by. Omitted picks the report-type default.","nullable":true},"direction":{"type":"string","description":"Sort direction: ASC or DESC."},"columns":{"type":"array","items":{"type":"object","properties":{"name":{"type":"string","description":"Column name to sort by. Omitted picks the report-type default.","nullable":true},"direction":{"type":"string","description":"Sort direction: ASC or DESC."}}},"description":"Multi-column sort; overrides by/direction when present.","nullable":true}},"description":"Sort configuration: single or multi-column.","nullable":true},"paging":{"type":"object","properties":{"begin":{"type":"integer","description":"Offset for pagination (0-based)."},"limit":{"type":"integer","description":"Maximum number of results to return."},"cursor":{"type":"string","description":"Opaque resume cursor from the previous paged page's `X-Next-Cursor` response header. When present it supersedes begin; replay the same filter and sorting. Discard it unless the page body was read to completion. A cursor expires after a short time; when one is rejected, restart paging from the first page.","nullable":true}},"description":"Pagination: begin (0-based offset) and limit (max results).","nullable":true},"query":{"type":"string","description":"Freeform search over artist, venue, and event names. On PaymentEvent reports, matches payment reference codes, transaction ids, and methods instead.","nullable":true}}},"GetReportColumnsResponse":{"type":"object","properties":{"status":{"type":"string","enum":["OK","FAIL","ERROR"]},"code":{"type":"string","nullable":true,"description":"ResultCode enum name (e.g. SUCCESS, NOT_FOUND, RATE_LIMIT_EXCEEDED)"},"message":{"type":"string","nullable":true,"description":"Result message: OK on success; the error text when status is FAIL or ERROR."},"messages":{"type":"array","nullable":true,"items":{"type":"string"},"description":"In rare, specific cases, additional error messages."},"data":{"type":"object","properties":{"identityId":{"type":"string","description":"Identifier of the organization (entityId) whose report columns these are, echoed from the request path."},"columns":{"type":"array","items":{"type":"object","properties":{"name":{"type":"string","description":"Display name of the column; pass this exact value to reference the column when running a report (as an output column, totals dimension, or sort key)."},"type":{"type":"string","description":"The column's semantic field type; a finer-grained classification than primitive."},"role":{"type":"string","enum":["dimension","measure"],"description":"Classifies the column as a groupable attribute or an aggregatable value, determining whether it can be used as a totals dimension or a summed measure."},"primitive":{"type":"string","enum":["string","number","date","bool"],"description":"The underlying primitive data type of the column's values, for client-side parsing and formatting."},"sortable":{"type":"boolean","description":"Whether the column can be a sort key on a paged request (one that sends paging). Unpaged requests, and PaymentEvent and Task reports, are not limited by this flag."}}},"description":"The columns available for the requested reportType, each described by name, type, role, and primitive."}}},"requestId":{"type":"string","nullable":true,"description":"A request correlation id generated by the server."}}},"RosterAssignment":{"type":"object","properties":{"accountId":{"type":"string"},"autoAdd":{"type":"boolean"}}},"ExternalMedia":{"type":"object","properties":{"fullWidth":{"type":"boolean"},"name":{"type":"string"},"stream_url":{"type":"string"},"url":{"type":"string"},"validation":{"$ref":"#/components/schemas/MediaValidation"}}},"MediaValidation":{"type":"object","properties":{"error":{"type":"string","enum":["INVALID_URL","UNAUTHORIZED","NOT_FOUND","UNSUPPORTED_TYPE"]},"status":{"type":"string","enum":["VALID","WARNING","INVALID"]},"dateTime":{"type":"string"},"providerName":{"type":"string"},"type":{"type":"string","enum":["photo","video","rich","link","error"]}}},"Account":{"type":"object","properties":{"id":{"type":"string","description":"Unique identifier of the member's Gigwell account."},"firstName":{"type":"string","description":"Member's first name."},"lastName":{"type":"string","description":"Member's last name."},"email":{"type":"string","description":"Member's email address, used as the account login and primary contact."},"displayTitle":{"type":"string","description":"Read-only display name for the member, composed from first and last name."},"avatarImageUrl":{"type":"string","description":"URL of the member's small avatar image; absent when no avatar is set."},"profileImageUrl":{"type":"string","description":"URL of the member's full-size profile image; absent when none is set."},"primaryPhone":{"allOf":[{"$ref":"#/components/schemas/PhoneNumber"}],"description":"The member's primary phone number as an object (number, type, and primary flag); absent when no phone is on file."},"active":{"type":"boolean","description":"Whether the member's Gigwell account is active."}}},"PhoneNumber":{"type":"object","properties":{"primary":{"type":"boolean","description":"Whether this is the primary phone number."},"type":{"type":"string","description":"Number type. Default main."},"number":{"type":"string","description":"The phone number."}}},"Artist":{"type":"object","properties":{"name":{"type":"string","description":"Artist name; matched against the roster when id is omitted.","nullable":true},"members":{"type":"array","items":{"$ref":"#/components/schemas/ArtistMember"},"description":"Artist members with their own splits. When omitted, the roster's default members are added.","nullable":true},"splitByMembers":{"type":"boolean","description":"Whether the artist fee splits across members."},"fixedAmount":{"type":"number","description":"Fixed performance fee in whole currency units, replacing the percent split.","nullable":true},"percent":{"type":"number","description":"This artist's share of the deal as a percent number (85 = 85%). When multiple artists carry percents, they must total 100.","nullable":true},"amount":{"type":"number","description":"Artist fee in whole currency units.","nullable":true},"salesTax":{"type":"number","description":"Sales tax percent applied to the artist fee.","nullable":true},"salesTaxId":{"type":"string","description":"Sales tax rate id when using a stored rate.","nullable":true},"incomeTax":{"type":"array","items":{"$ref":"#/components/schemas/IncomeTax"},"description":"Income tax withholding for this artist.","nullable":true},"commissionPercent":{"type":"number","description":"Agency commission percent on this artist's fee.","nullable":true},"commissionSalesTax":{"type":"number","description":"Sales tax percent on the agency commission.","nullable":true},"id":{"type":"string","description":"Roster artist entity id. Required when name is omitted.","nullable":true}}},"ArtistMember":{"type":"object","properties":{"name":{"type":"string","description":"Member name.","nullable":true},"percent":{"type":"number","description":"Member's percent of the artist fee; when splitting, member percents must total 100.","nullable":true},"salesTax":{"type":"number","description":"Sales tax percent applied to the member's share.","nullable":true},"salesTaxId":{"type":"string","description":"Sales tax rate id when using a stored rate.","nullable":true},"incomeTax":{"type":"array","items":{"$ref":"#/components/schemas/IncomeTax"},"description":"Income tax withholding for this member.","nullable":true},"id":{"type":"string","description":"Member's account id. Required when email is omitted.","nullable":true},"email":{"type":"string","description":"Member's email; used to match an existing account when id is omitted.","nullable":true}}},"IncomeTax":{"type":"object","properties":{"taxRate":{"type":"number","description":"Tax rate percent."},"surCharge":{"type":"number","description":"Surcharge percent added on top of the tax rate.","nullable":true},"deduction":{"type":"number","description":"Deduction percent.","nullable":true},"postTax":{"type":"boolean","description":"Whether the artist's income tax is applied after sales tax.","nullable":true},"taxAgent":{"type":"string","enum":["buyer","artist"],"description":"Who withholds the tax: the buyer (default) or the artist."},"withholdBookingFeeWithArtistFee":{"type":"boolean","description":"Whether the booking fee is withheld together with the artist fee."}}},"TicketFee":{"type":"object","properties":{"type":{"type":"string","description":"Fee type: exact-matched by id or display label against the agency's ticket-fee presets; an unmatched value is kept as-is. Required.","nullable":true},"description":{"type":"string","description":"What the fee is for.","nullable":true},"amount":{"type":"number","description":"Set exactly one of amount or percent. The amount is in whole currency units.","nullable":true},"estimatedAmount":{"type":"number","description":"Estimated fee amount in whole currency units; defaults to amount.","nullable":true},"percent":{"type":"number","description":"Set exactly one of amount or percent. The percent is a number (2.5 = 2.5%).","nullable":true},"mathType":{"type":"string","enum":["MULTIPLIER","DIVISOR"],"description":"How the fee applies to the ticket count: MULTIPLIER or DIVISOR; defaults to the matching ticket-fee preset's math type, otherwise DIVISOR.","nullable":true},"maxTotal":{"type":"number","description":"Cap on the fee, in whole currency units.","nullable":true}}},"Organization":{"type":"object","properties":{"name":{"type":"string","description":"Organization name; used to match or create the organization record. Required when an organization is given.","nullable":true},"email":{"type":"string","description":"Organization email address.","nullable":true},"address":{"type":"array","items":{"$ref":"#/components/schemas/Address"},"description":"Postal addresses.","nullable":true},"phoneNumber":{"type":"array","items":{"type":"string"},"description":"Phone numbers.","nullable":true},"website":{"type":"array","items":{"$ref":"#/components/schemas/Website"},"description":"Websites.","nullable":true}}},"Address":{"type":"object","properties":{"address":{"type":"string","description":"Street address.","nullable":true},"city":{"type":"string","description":"City.","nullable":true},"state":{"type":"string","description":"State or province.","nullable":true},"subregion":{"type":"string","description":"Subregion.","nullable":true},"zipCode":{"type":"string","description":"Postal code.","nullable":true},"country":{"type":"string","description":"Country.","nullable":true},"timezone":{"type":"string","description":"IANA time zone id.","nullable":true},"primary":{"type":"boolean","description":"Whether this is the primary address."}}},"Website":{"type":"object","properties":{"primary":{"type":"boolean","description":"Whether this is the primary website."},"label":{"type":"string","description":"Display label."},"href":{"type":"string","description":"The URL."}}},"AgencyMember":{"type":"object","properties":{"name":{"type":"string","description":"Member display name.","nullable":true},"firstName":{"type":"string","description":"Member's first name.","nullable":true},"lastName":{"type":"string","description":"Member's last name.","nullable":true},"id":{"type":"string","description":"Member's account id. Required when email is omitted.","nullable":true},"email":{"type":"string","description":"Member's email; used to match an existing account when id is omitted.","nullable":true}}},"Contact":{"type":"object","properties":{"person":{"allOf":[{"$ref":"#/components/schemas/Person"}],"description":"The contact's person details: an email and at least one of firstName/lastName, plus address, phone, and website.","nullable":true},"org":{"allOf":[{"$ref":"#/components/schemas/Organization"}],"description":"The contact's organization. A new organization record is created when no match exists.","nullable":true}}},"Person":{"type":"object","properties":{"firstName":{"type":"string","description":"First name. Required when lastName is omitted.","nullable":true},"lastName":{"type":"string","description":"Last name. Required when firstName is omitted.","nullable":true},"email":{"type":"string","description":"Email address. Required for every person you send; it matches an existing contact or creates a new one.","nullable":true},"address":{"type":"array","items":{"$ref":"#/components/schemas/Address"},"description":"Postal addresses.","nullable":true},"phoneNumber":{"type":"array","items":{"$ref":"#/components/schemas/PhoneNumber"},"description":"Phone numbers.","nullable":true},"website":{"type":"array","items":{"$ref":"#/components/schemas/Website"},"description":"Websites.","nullable":true},"signerFirstName":{"type":"string","description":"First name recorded for a signer or counter-signer entry when it differs from the contact's own name.","nullable":true},"signerLastName":{"type":"string","description":"Last name recorded for a signer or counter-signer entry when it differs from the contact's own name.","nullable":true}}}},"securitySchemes":{"patBearer":{"type":"http","scheme":"bearer","bearerFormat":"Gigwell PAT","description":"Long-lived Personal Access Token minted from the account Security tab in the UI."}}}}