Greenroom API v1
Build on the booking desk.
Connect profiles, availability, show advancing, promoter events, invoices, booking calls, introductions, public scene discovery, and Greenroom match intelligence.
Authentication
One credential, one account.
curl "https://greenroom.dance/api/v1/calendar?kind=gig&limit=20" \
-H "Authorization: Bearer $GREENROOM_API_KEY"Pagination
Follow the cursor.
nextCursor back as cursor. Treat cursors as opaque values.{"meta":{"count":20,"hasMore":true,"nextCursor":"eyJvZmZzZXQiOjIwfQ"}}Errors
Stable codes, readable context.
error object with a machine code and message. Use HTTP status for the broad class and the code for integration logic. A 429 response includes Retry-After.{"error":{"code":"invalid_request","message":"endsOn must be on or after startsOn."}}Incremental sync
Move only what changed.
updated_after. Introductions accept created_after. Dates use YYYY-MM-DD and timestamps use ISO 8601.Connected apps
Consent and change delivery.
DJ accounts can register OAuth clients and signed webhook endpoints in the developer portal. Client secrets and webhook secrets are shown once.
OAuth Authorization Code
Send the DJ to the authorization URL with the exact registered HTTPS redirect URI and an opaque state value. Exchange the one-time code within ten minutes. The returned Bearer token carries the calendar scope and works on /me and calendar operations.
https://greenroom.dance/oauth/authorize?response_type=code&client_id=CLIENT_ID&redirect_uri=https%3A%2F%2Fapp.example%2Fgreenroom%2Fcallback&state=OPAQUE_STATEcurl https://greenroom.dance/api/oauth/token \
-u "CLIENT_ID:CLIENT_SECRET" \
-d grant_type=authorization_code \
-d code=ONE_TIME_CODE \
-d redirect_uri=https://app.example/greenroom/callbackSigned webhooks
Subscribe a reachable public HTTPS endpoint to calendar.created, calendar.updated, and calendar.deleted. Greenroom signs the exact JSON body with HMAC-SHA256.
Greenroom-Signature: sha256=HEX_HMAC
User-Agent: Greenroom-Webhooks/1.0Compute HMAC-SHA256 with the webhook secret, compare the hexadecimal digest in constant time, and reject mismatches before processing the event. The payload includes id, event, createdAt, and data.
MCP server
Install the agent surface.
Tell Claude Code, “Install the Greenroom MCP.” Give it the installer record at /api/mcp/install, or run the command directly after setting GREENROOM_API_KEY.
claude mcp add --transport http --scope user \
greenroom https://greenroom.dance/api/mcp \
--header 'Authorization: Bearer ${GREENROOM_API_KEY}'Transport: stateless Streamable HTTP. Endpoint: https://greenroom.dance/api/mcp. Contract resource: greenroom://api/openapi.
Profile
get_accountIdentify the account attached to the key.
get_profileRead the owned DJ or promoter profile.
update_dj_profileMerge public, booking, and travel fields.
update_promoter_profileMerge claimed promoter profile fields.
Show operations
list_calendarSearch DJ calendar entries.
create_calendar_entryCreate a city, blocked date, or gig.
update_show_deskReplace deal, advancing, travel, and tasks.
inspect_show_readinessAudit advancing gaps and unfinished tasks.
Promoter and finance
list_promoter_eventsSearch events owned by the promoter.
create_promoter_eventCreate a draft or published event.
list_invoicesSearch account-owned invoices.
create_invoice_draftCreate an unsent invoice draft.
Network intelligence
list_booking_opportunitiesFind visible booking calls.
publish_booking_opportunityPublish a follower or network call.
list_introductionsCheck introduction movement.
respond_to_introductionView, reply, accept, or decline.
search_venuesSearch the sourced public venue directory.
search_djsSearch public DJ profiles.
search_networkSearch privacy-safe counterpart profiles.
recommend_promotersRank promoter fit with explanations.
REST reference
Every operation in v1.
This reference is rendered from the same OpenAPI contract returned by the API. Request ownership, role checks, and contact privacy are enforced server-side.
Identity
Bearer credential identity and API-key-owned profile.
get/api/v1/meGet the Bearer credential ownerBearer / OAuth
get/api/v1/profileGet the DJ or promoter profile owned by the API keyAny key
patch/api/v1/profileMerge editable fields into the account profileAny key
Operations
Calendar, show desk, and promoter event workflows.
get/api/v1/calendarList travel, gig, and blocked calendar entriesDJ key / OAuth
Parameters
limitqueryinteger. Default: 25cursorqueryOpaque cursor returned by the previous page.kindqueryComma-separated city, gig, or blocked values.fromqueryInclude entries ending on or after this YYYY-MM-DD date.toqueryInclude entries starting on or before this YYYY-MM-DD date.updated_afterqueryInclude entries changed after this ISO 8601 timestamp.qquerySearch title, city, venue, and notes.post/api/v1/calendarCreate a calendar entry or confirmed show deskDJ key / OAuth
patch/api/v1/calendarReplace a show desk using the legacy collection routeDJ key / OAuth
Deprecated compatibility route. New integrations should use the resource detail path.
delete/api/v1/calendarDelete a calendar entry using the legacy collection routeDJ key / OAuth
Deprecated compatibility route. New integrations should use the resource detail path.
Parameters
idqueryCalendar entry ID.get/api/v1/calendar/{id}Get one calendar entry and its show deskDJ key / OAuth
Parameters
idpath · requiredOpaque Greenroom resource ID.patch/api/v1/calendar/{id}Update calendar, deal, contract, advancing, travel, tasks, or settlementDJ key / OAuth
Parameters
idpath · requiredOpaque Greenroom resource ID.delete/api/v1/calendar/{id}Delete a calendar entryDJ key / OAuth
Parameters
idpath · requiredOpaque Greenroom resource ID.get/api/v1/eventsList events owned by a promoter accountPromoter key
Parameters
limitqueryinteger. Default: 25cursorqueryOpaque cursor returned by the previous page.statusqueryComma-separated draft or published values.fromqueryInclude events on or after this YYYY-MM-DD date.toqueryInclude events on or before this YYYY-MM-DD date.qquerySearch title, city, and venue.post/api/v1/eventsCreate a promoter eventPromoter key
get/api/v1/events/{id}Get one promoter eventPromoter key
Parameters
idpath · requiredOpaque Greenroom resource ID.patch/api/v1/events/{id}Update a promoter eventPromoter key
Parameters
idpath · requiredOpaque Greenroom resource ID.delete/api/v1/events/{id}Delete a promoter eventPromoter key
Parameters
idpath · requiredOpaque Greenroom resource ID.Finance
Account-owned invoice workflows.
get/api/v1/invoicesList account invoicesAny key
Parameters
limitqueryinteger. Default: 25cursorqueryOpaque cursor returned by the previous page.statusqueryComma-separated draft, sent, paid, overdue, or void values.due_fromqueryInclude invoices due on or after this YYYY-MM-DD date.due_toqueryInclude invoices due on or before this YYYY-MM-DD date.updated_afterqueryInclude invoices changed after this ISO 8601 timestamp.qquerySearch number, recipient, event, venue, and city.post/api/v1/invoicesCreate and optionally send an invoiceAny key
get/api/v1/invoices/{id}Get one invoiceAny key
Parameters
idpath · requiredOpaque Greenroom resource ID.patch/api/v1/invoices/{id}Send or void an invoiceAny key
Parameters
idpath · requiredOpaque Greenroom resource ID.Network
Booking opportunities, introductions, and visible counterparts.
get/api/v1/opportunitiesList visible booking opportunitiesAny key
Parameters
limitqueryinteger. Default: 25cursorqueryOpaque cursor returned by the previous page.statusqueryComma-separated open or closed values.cityqueryMatch an exact city.fromqueryInclude opportunities on or after this YYYY-MM-DD date.toqueryInclude opportunities on or before this YYYY-MM-DD date.qquerySearch title, description, city, and venue.post/api/v1/opportunitiesPublish a booking opportunityPromoter key
get/api/v1/opportunities/{id}Get a visible booking opportunityAny key
Parameters
idpath · requiredOpaque Greenroom resource ID.patch/api/v1/opportunities/{id}Open or close an owned booking opportunityPromoter key
Parameters
idpath · requiredOpaque Greenroom resource ID.get/api/v1/introsList account introduction movementAny key
Parameters
limitqueryinteger. Default: 25cursorqueryOpaque cursor returned by the previous page.statusqueryComma-separated sent, viewed, replied, accepted, or declined values.created_afterqueryInclude introductions created after this ISO 8601 timestamp.get/api/v1/intros/{id}Get one introductionAny key
Parameters
idpath · requiredOpaque Greenroom resource ID.patch/api/v1/intros/{id}Record a promoter response to an introductionPromoter key
Parameters
idpath · requiredOpaque Greenroom resource ID.get/api/v1/locationsList supported booking marketsAny key
Parameters
limitqueryinteger. Default: 25cursorqueryOpaque cursor returned by the previous page.country_codequeryMatch a two-letter country code.regionqueryMatch a Greenroom region.qquerySearch location name, slug, and aliases.get/api/v1/networkFind visible accounts on the other side of the boothAny key
Parameters
limitqueryinteger. Default: 25cursorqueryOpaque cursor returned by the previous page.cityqueryMatch an exact city.genrequeryMatch an exact genre.qquerySearch public profile fields.Directory
Public DJ and venue discovery.
get/api/v1/public-directorySearch the public DJ or venue directoryPublic
Parameters
kindquerystring. Choices: venues, djs. Default: venuesqquerySearch names and public profile facts.cityqueryMatch a city.genrequeryMatch a genre.pagequeryinteger. Default: 1page_sizequeryinteger. Default: 30Intelligence
Greenroom-native promoter matching and reasoning.
get/api/v1/recommendationsRank promoters against the API key owner's DJ profileDJ key
Parameters
limitqueryinteger. Default: 25cursorqueryOpaque cursor returned by the previous page.cityqueryScore promoters in one exact city.minimum_scorequerynumber. Default: 0