{"openapi":"3.1.0","info":{"title":"Ironed Out Partner API","version":"1.0.0","description":"Create golf outings from a booking, share one invite link, and follow who claims each spot. Guide: https://ironed-out-alpha.vercel.app/developers"},"servers":[{"url":"https://ironed-out-alpha.vercel.app/api/v1"}],"tags":[{"name":"Auth"},{"name":"Courses"},{"name":"Outings"},{"name":"Tee times"},{"name":"Spots"},{"name":"Invite links"},{"name":"Webhooks"},{"name":"Widget"}],"paths":{"/oauth/token":{"post":{"tags":["Auth"],"summary":"Get an access token (OAuth 2.0 client credentials)","description":"Send client_id and client_secret as HTTP Basic auth or in the form body. Tokens last 15 minutes.","security":[],"requestBody":{"required":true,"content":{"application/x-www-form-urlencoded":{"schema":{"type":"object","required":["grant_type"],"properties":{"grant_type":{"const":"client_credentials"},"client_id":{"type":"string"},"client_secret":{"type":"string"},"scope":{"type":"string","description":"Space-separated subset of the client’s scopes."}}}}}},"responses":{"200":{"description":"Access token","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Token"}}}},"400":{"description":"invalid_request, invalid_scope or unsupported_grant_type (RFC 6749 §5.2)"},"401":{"description":"invalid_client"},"429":{"$ref":"#/components/responses/Problem429"}}}},"/courses":{"get":{"tags":["Courses"],"summary":"Search courses","security":[{"oauth":[]}],"parameters":[{"name":"query","in":"query","required":false,"schema":{"type":"string"},"description":"Name or town."},{"name":"scope","in":"query","required":false,"schema":{"enum":["near","all"],"default":"near"},"description":"near = within radius."},{"name":"near","in":"query","required":false,"schema":{"type":"string","example":"39.29,-76.61"},"description":"lat,lng (default Baltimore)."},{"name":"radius_min","in":"query","required":false,"schema":{"type":"integer","default":120},"description":"Approximate drive minutes."},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","default":30,"maximum":50},"description":"Max results."},{"$ref":"#/components/parameters/RequestId"}],"responses":{"200":{"description":"Matching courses, closest first.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CourseList"}}}},"401":{"$ref":"#/components/responses/Problem401"},"422":{"$ref":"#/components/responses/Problem422"},"429":{"$ref":"#/components/responses/Problem429"}}}},"/outings":{"get":{"tags":["Outings"],"summary":"List outings","description":"Requires the `outings:read` scope.","security":[{"oauth":["outings:read"]}],"parameters":[{"name":"cursor","in":"query","required":false,"schema":{"type":"string"},"description":"From next_cursor."},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","default":25,"maximum":100},"description":"Page size."},{"name":"external_ref","in":"query","required":false,"schema":{"type":"string"},"description":"Your reservation id."},{"name":"from","in":"query","required":false,"schema":{"type":"string","format":"date"},"description":"Play date on or after."},{"name":"to","in":"query","required":false,"schema":{"type":"string","format":"date"},"description":"Play date on or before."},{"$ref":"#/components/parameters/RequestId"}],"responses":{"200":{"description":"Newest first.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/OutingList"}}}},"401":{"$ref":"#/components/responses/Problem401"},"403":{"$ref":"#/components/responses/Problem403"},"422":{"$ref":"#/components/responses/Problem422"},"429":{"$ref":"#/components/responses/Problem429"}}},"post":{"tags":["Outings"],"summary":"Create an outing with tee times","description":"Requires the `outings:write` scope.","security":[{"oauth":["outings:write"]}],"parameters":[{"$ref":"#/components/parameters/IdempotencyKey"},{"$ref":"#/components/parameters/RequestId"}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"course_id":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$","description":"From GET /courses."},"play_date":{"type":"string","format":"date","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$","description":"Local date at the course."},"tee_times":{"type":"object","properties":{"first":{"type":"string","pattern":"^([01]\\d|2[0-3]):[0-5]\\d$","description":"Local time at the course, 24-hour HH:MM."},"count":{"default":1,"type":"integer","minimum":1,"maximum":6},"players_each":{"default":4,"type":"integer","minimum":2,"maximum":5},"interval_minutes":{"default":10,"description":"Minutes between consecutive tee times: 8, 9, 10 or 12.","type":"integer","minimum":-9007199254740991,"maximum":9007199254740991}},"required":["first"],"additionalProperties":false},"price_cents":{"default":null,"description":"Display only.","anyOf":[{"type":"integer","minimum":0,"maximum":999999},{"type":"null"}]},"note":{"default":"","type":"string","maxLength":500},"external_ref":{"default":null,"description":"Your reservation id. Echoed back in responses and webhooks; filter with ?external_ref=.","anyOf":[{"type":"string","minLength":1,"maxLength":200},{"type":"null"}]},"organizer":{"type":"object","properties":{"name":{"type":"string","minLength":1,"maxLength":60,"description":"Shown on the tee sheet."},"phone":{"description":"Mobile number (US 10-digit or E.164). Used to match the same golfer across outings. Partner-supplied numbers are not verified, so no texts go to them until the golfer confirms it.","type":"string","maxLength":20}},"required":["name"],"additionalProperties":false,"description":"Takes the first spot of the first tee time."},"players":{"default":[],"description":"Golfers already in the group; seated in order after the organizer.","maxItems":30,"type":"array","items":{"type":"object","properties":{"name":{"type":"string","minLength":1,"maxLength":60,"description":"Shown on the tee sheet."},"phone":{"description":"Mobile number (US 10-digit or E.164). Used to match the same golfer across outings. Partner-supplied numbers are not verified, so no texts go to them until the golfer confirms it.","type":"string","maxLength":20}},"required":["name"],"additionalProperties":false}}},"required":["course_id","play_date","tee_times","organizer"],"additionalProperties":false}}}},"responses":{"201":{"description":"Created, with an invite link.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Outing"}}}},"400":{"$ref":"#/components/responses/Problem400"},"401":{"$ref":"#/components/responses/Problem401"},"403":{"$ref":"#/components/responses/Problem403"},"409":{"$ref":"#/components/responses/Problem409"},"422":{"$ref":"#/components/responses/Problem422"},"429":{"$ref":"#/components/responses/Problem429"}}}},"/outings/{id}":{"get":{"tags":["Outings"],"summary":"Get an outing and its tee sheet","description":"Requires the `outings:read` scope.","security":[{"oauth":["outings:read"]}],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string","format":"uuid"}},{"$ref":"#/components/parameters/RequestId"}],"responses":{"200":{"description":"The outing.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Outing"}}}},"401":{"$ref":"#/components/responses/Problem401"},"403":{"$ref":"#/components/responses/Problem403"},"404":{"$ref":"#/components/responses/Problem404"},"429":{"$ref":"#/components/responses/Problem429"}}},"patch":{"tags":["Outings"],"summary":"Update note or price, lock or unlock","description":"Requires the `outings:write` scope.","security":[{"oauth":["outings:write"]}],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string","format":"uuid"}},{"$ref":"#/components/parameters/RequestId"}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"note":{"type":"string","maxLength":500},"price_cents":{"anyOf":[{"type":"integer","minimum":0,"maximum":999999},{"type":"null"}]},"locked":{"description":"Locked outings take no claims, drop-outs or changes to the tee sheet.","type":"boolean"}},"additionalProperties":false}}}},"responses":{"200":{"description":"The updated outing.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Outing"}}}},"401":{"$ref":"#/components/responses/Problem401"},"403":{"$ref":"#/components/responses/Problem403"},"404":{"$ref":"#/components/responses/Problem404"},"409":{"$ref":"#/components/responses/Problem409"},"422":{"$ref":"#/components/responses/Problem422"},"429":{"$ref":"#/components/responses/Problem429"}}}},"/outings/{id}/tee-times":{"post":{"tags":["Tee times"],"summary":"Add a tee time after the last one","description":"Requires the `outings:write` scope.","security":[{"oauth":["outings:write"]}],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string","format":"uuid"}},{"$ref":"#/components/parameters/IdempotencyKey"},{"$ref":"#/components/parameters/RequestId"}],"responses":{"201":{"description":"The outing with the new tee time.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Outing"}}}},"400":{"$ref":"#/components/responses/Problem400"},"401":{"$ref":"#/components/responses/Problem401"},"403":{"$ref":"#/components/responses/Problem403"},"404":{"$ref":"#/components/responses/Problem404"},"409":{"$ref":"#/components/responses/Problem409"},"429":{"$ref":"#/components/responses/Problem429"}}}},"/tee-times/{id}":{"patch":{"tags":["Tee times"],"summary":"Change the number of spots (2–5)","description":"Requires the `outings:write` scope.","security":[{"oauth":["outings:write"]}],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string","format":"uuid"}},{"$ref":"#/components/parameters/RequestId"}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"capacity":{"type":"integer","minimum":2,"maximum":5}},"required":["capacity"],"additionalProperties":false}}}},"responses":{"200":{"description":"The updated outing.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Outing"}}}},"401":{"$ref":"#/components/responses/Problem401"},"403":{"$ref":"#/components/responses/Problem403"},"404":{"$ref":"#/components/responses/Problem404"},"409":{"$ref":"#/components/responses/Problem409"},"422":{"$ref":"#/components/responses/Problem422"},"429":{"$ref":"#/components/responses/Problem429"}}},"delete":{"tags":["Tee times"],"summary":"Delete an empty tee time","description":"Requires the `outings:write` scope.","security":[{"oauth":["outings:write"]}],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string","format":"uuid"}},{"$ref":"#/components/parameters/RequestId"}],"responses":{"200":{"description":"The outing without that tee time.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Outing"}}}},"401":{"$ref":"#/components/responses/Problem401"},"403":{"$ref":"#/components/responses/Problem403"},"404":{"$ref":"#/components/responses/Problem404"},"409":{"$ref":"#/components/responses/Problem409"},"429":{"$ref":"#/components/responses/Problem429"}}}},"/slots/{id}/claim":{"post":{"tags":["Spots"],"summary":"Seat a golfer (and guests) in a spot","description":"Requires the `outings:write` scope.","security":[{"oauth":["outings:write"]}],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string","format":"uuid"}},{"$ref":"#/components/parameters/IdempotencyKey"},{"$ref":"#/components/parameters/RequestId"}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"player":{"type":"object","properties":{"name":{"type":"string","minLength":1,"maxLength":60,"description":"Shown on the tee sheet."},"phone":{"description":"Mobile number (US 10-digit or E.164). Used to match the same golfer across outings. Partner-supplied numbers are not verified, so no texts go to them until the golfer confirms it.","type":"string","maxLength":20}},"required":["name"],"additionalProperties":false},"guests":{"default":0,"description":"Seated in the same tee time first.","type":"integer","minimum":0,"maximum":4}},"required":["player"],"additionalProperties":false}}}},"responses":{"201":{"description":"Seated.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ClaimResult"}}}},"400":{"$ref":"#/components/responses/Problem400"},"401":{"$ref":"#/components/responses/Problem401"},"403":{"$ref":"#/components/responses/Problem403"},"404":{"$ref":"#/components/responses/Problem404"},"409":{"$ref":"#/components/responses/Problem409"},"422":{"$ref":"#/components/responses/Problem422"},"429":{"$ref":"#/components/responses/Problem429"}}}},"/slots/{id}/release":{"post":{"tags":["Spots"],"summary":"Free a spot (a golfer and their guests, or one guest)","description":"Requires the `outings:write` scope.","security":[{"oauth":["outings:write"]}],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string","format":"uuid"}},{"$ref":"#/components/parameters/IdempotencyKey"},{"$ref":"#/components/parameters/RequestId"}],"responses":{"200":{"description":"The updated outing.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Outing"}}}},"400":{"$ref":"#/components/responses/Problem400"},"401":{"$ref":"#/components/responses/Problem401"},"403":{"$ref":"#/components/responses/Problem403"},"404":{"$ref":"#/components/responses/Problem404"},"409":{"$ref":"#/components/responses/Problem409"},"429":{"$ref":"#/components/responses/Problem429"}}}},"/outings/{id}/invite-links":{"post":{"tags":["Invite links"],"summary":"Create another invite link (optionally expiring)","description":"Requires the `outings:write` scope.","security":[{"oauth":["outings:write"]}],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string","format":"uuid"}},{"$ref":"#/components/parameters/IdempotencyKey"},{"$ref":"#/components/parameters/RequestId"}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"expires_at":{"default":null,"anyOf":[{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"},{"type":"null"}]}},"additionalProperties":false}}}},"responses":{"201":{"description":"The new link.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/InviteLink"}}}},"400":{"$ref":"#/components/responses/Problem400"},"401":{"$ref":"#/components/responses/Problem401"},"403":{"$ref":"#/components/responses/Problem403"},"404":{"$ref":"#/components/responses/Problem404"},"422":{"$ref":"#/components/responses/Problem422"},"429":{"$ref":"#/components/responses/Problem429"}}}},"/invite-links/{id}":{"delete":{"tags":["Invite links"],"summary":"Revoke an invite link","description":"Requires the `outings:write` scope.","security":[{"oauth":["outings:write"]}],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string","format":"uuid"}},{"$ref":"#/components/parameters/RequestId"}],"responses":{"204":{"description":"Revoked."},"401":{"$ref":"#/components/responses/Problem401"},"403":{"$ref":"#/components/responses/Problem403"},"404":{"$ref":"#/components/responses/Problem404"},"429":{"$ref":"#/components/responses/Problem429"}}}},"/widget-tokens":{"post":{"tags":["Widget"],"summary":"Make an \"Invite your group\" button for a booking","description":"Requires the `outings:write` scope.","security":[{"oauth":["outings:write"]}],"parameters":[{"$ref":"#/components/parameters/IdempotencyKey"},{"$ref":"#/components/parameters/RequestId"}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"course_id":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$","description":"From GET /courses."},"play_date":{"type":"string","format":"date","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$","description":"Local date at the course."},"tee_times":{"type":"object","properties":{"first":{"type":"string","pattern":"^([01]\\d|2[0-3]):[0-5]\\d$","description":"Local time at the course, 24-hour HH:MM."},"count":{"default":1,"type":"integer","minimum":1,"maximum":6},"players_each":{"default":4,"type":"integer","minimum":2,"maximum":5},"interval_minutes":{"default":10,"description":"Minutes between consecutive tee times: 8, 9, 10 or 12.","type":"integer","minimum":-9007199254740991,"maximum":9007199254740991}},"required":["first"],"additionalProperties":false},"price_cents":{"default":null,"description":"Display only.","anyOf":[{"type":"integer","minimum":0,"maximum":999999},{"type":"null"}]},"note":{"default":"","type":"string","maxLength":500},"external_ref":{"default":null,"description":"Your reservation id. Echoed back in responses and webhooks; filter with ?external_ref=.","anyOf":[{"type":"string","minLength":1,"maxLength":200},{"type":"null"}]},"organizer":{"type":"object","properties":{"name":{"type":"string","minLength":1,"maxLength":60,"description":"Shown on the tee sheet."},"phone":{"description":"Mobile number (US 10-digit or E.164). Used to match the same golfer across outings. Partner-supplied numbers are not verified, so no texts go to them until the golfer confirms it.","type":"string","maxLength":20}},"required":["name"],"additionalProperties":false,"description":"Takes the first spot of the first tee time."},"players":{"default":[],"description":"Golfers already in the group; seated in order after the organizer.","maxItems":30,"type":"array","items":{"type":"object","properties":{"name":{"type":"string","minLength":1,"maxLength":60,"description":"Shown on the tee sheet."},"phone":{"description":"Mobile number (US 10-digit or E.164). Used to match the same golfer across outings. Partner-supplied numbers are not verified, so no texts go to them until the golfer confirms it.","type":"string","maxLength":20}},"required":["name"],"additionalProperties":false}},"expires_in":{"default":86400,"description":"Seconds until the button stops working (default and maximum: 24 hours).","type":"integer","minimum":60,"maximum":86400}},"required":["course_id","play_date","tee_times","organizer"],"additionalProperties":false}}}},"responses":{"201":{"description":"A URL for the embed button. Nothing is created until the golfer taps it and confirms; then the outing is created once, as if you had called POST /outings.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/WidgetToken"}}}},"400":{"$ref":"#/components/responses/Problem400"},"401":{"$ref":"#/components/responses/Problem401"},"403":{"$ref":"#/components/responses/Problem403"},"422":{"$ref":"#/components/responses/Problem422"},"429":{"$ref":"#/components/responses/Problem429"}}}},"/webhooks":{"get":{"tags":["Webhooks"],"summary":"List webhook endpoints","description":"Requires the `webhooks:manage` scope.","security":[{"oauth":["webhooks:manage"]}],"parameters":[{"$ref":"#/components/parameters/RequestId"}],"responses":{"200":{"description":"Endpoints.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/WebhookList"}}}},"401":{"$ref":"#/components/responses/Problem401"},"403":{"$ref":"#/components/responses/Problem403"},"429":{"$ref":"#/components/responses/Problem429"}}},"post":{"tags":["Webhooks"],"summary":"Add a webhook endpoint","description":"Requires the `webhooks:manage` scope.","security":[{"oauth":["webhooks:manage"]}],"parameters":[{"$ref":"#/components/parameters/IdempotencyKey"},{"$ref":"#/components/parameters/RequestId"}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"url":{"type":"string","maxLength":2000,"format":"uri"},"events":{"minItems":1,"maxItems":10,"type":"array","items":{"type":"string","enum":["outing.created","outing.updated","outing.locked","outing.unlocked","outing.full","slot.claimed","slot.released","tee_time.added","tee_time.removed","tee_time.capacity_changed"]}},"description":{"default":"","type":"string","maxLength":200}},"required":["url","events"]}}}},"responses":{"201":{"description":"Created. Includes the signing secret once.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/WebhookCreated"}}}},"400":{"$ref":"#/components/responses/Problem400"},"401":{"$ref":"#/components/responses/Problem401"},"403":{"$ref":"#/components/responses/Problem403"},"409":{"$ref":"#/components/responses/Problem409"},"422":{"$ref":"#/components/responses/Problem422"},"429":{"$ref":"#/components/responses/Problem429"}}}},"/webhooks/{id}":{"get":{"tags":["Webhooks"],"summary":"Get a webhook endpoint","description":"Requires the `webhooks:manage` scope.","security":[{"oauth":["webhooks:manage"]}],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string","format":"uuid"}},{"$ref":"#/components/parameters/RequestId"}],"responses":{"200":{"description":"The endpoint.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Webhook"}}}},"401":{"$ref":"#/components/responses/Problem401"},"403":{"$ref":"#/components/responses/Problem403"},"404":{"$ref":"#/components/responses/Problem404"},"429":{"$ref":"#/components/responses/Problem429"}}},"patch":{"tags":["Webhooks"],"summary":"Change URL, events, description, or pause it","description":"Requires the `webhooks:manage` scope.","security":[{"oauth":["webhooks:manage"]}],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string","format":"uuid"}},{"$ref":"#/components/parameters/RequestId"}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"url":{"type":"string","maxLength":2000,"format":"uri"},"events":{"minItems":1,"maxItems":10,"type":"array","items":{"type":"string","enum":["outing.created","outing.updated","outing.locked","outing.unlocked","outing.full","slot.claimed","slot.released","tee_time.added","tee_time.removed","tee_time.capacity_changed"]}},"description":{"type":"string","maxLength":200},"enabled":{"type":"boolean"}},"additionalProperties":false}}}},"responses":{"200":{"description":"The updated endpoint.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Webhook"}}}},"401":{"$ref":"#/components/responses/Problem401"},"403":{"$ref":"#/components/responses/Problem403"},"404":{"$ref":"#/components/responses/Problem404"},"422":{"$ref":"#/components/responses/Problem422"},"429":{"$ref":"#/components/responses/Problem429"}}},"delete":{"tags":["Webhooks"],"summary":"Delete a webhook endpoint","description":"Requires the `webhooks:manage` scope.","security":[{"oauth":["webhooks:manage"]}],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string","format":"uuid"}},{"$ref":"#/components/parameters/RequestId"}],"responses":{"204":{"description":"Deleted."},"401":{"$ref":"#/components/responses/Problem401"},"403":{"$ref":"#/components/responses/Problem403"},"404":{"$ref":"#/components/responses/Problem404"},"429":{"$ref":"#/components/responses/Problem429"}}}},"/webhooks/{id}/deliveries":{"get":{"tags":["Webhooks"],"summary":"Recent deliveries to an endpoint","description":"Requires the `webhooks:manage` scope.","security":[{"oauth":["webhooks:manage"]}],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string","format":"uuid"}},{"$ref":"#/components/parameters/RequestId"}],"responses":{"200":{"description":"Newest first.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeliveryList"}}}},"401":{"$ref":"#/components/responses/Problem401"},"403":{"$ref":"#/components/responses/Problem403"},"404":{"$ref":"#/components/responses/Problem404"},"429":{"$ref":"#/components/responses/Problem429"}}}}},"components":{"securitySchemes":{"oauth":{"type":"oauth2","flows":{"clientCredentials":{"tokenUrl":"https://ironed-out-alpha.vercel.app/api/v1/oauth/token","scopes":{"outings:read":"Read outings and tee sheets","outings:write":"Create and change outings, seat and release golfers","players:read":"See golfer names on tee sheets","webhooks:manage":"Manage webhook endpoints"}}}}},"parameters":{"IdempotencyKey":{"name":"Idempotency-Key","in":"header","required":true,"description":"Unique per logical request (e.g. a UUID). Retrying with the same key replays the first response for 24 hours.","schema":{"type":"string","maxLength":255}},"RequestId":{"name":"X-Request-Id","in":"header","required":false,"description":"Echoed back; generated when absent. Quote it when asking for help.","schema":{"type":"string","maxLength":100}}},"responses":{"Problem400":{"description":"Bad request (e.g. missing Idempotency-Key, invalid JSON)","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"Problem401":{"description":"Missing or invalid access token","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"Problem403":{"description":"Token lacks the required scope","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"Problem404":{"description":"Not found (or not in your tenant)","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"Problem409":{"description":"Conflict (spot taken, outing locked, key in flight)","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"Problem422":{"description":"Validation failed","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"Problem429":{"description":"Rate limited; see Retry-After","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}}},"schemas":{"Token":{"type":"object","properties":{"access_token":{"type":"string"},"token_type":{"type":"string","const":"Bearer"},"expires_in":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"scope":{"type":"string"}},"required":["access_token","token_type","expires_in","scope"],"additionalProperties":false},"Outing":{"type":"object","properties":{"id":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"},"external_ref":{"type":["string","null"]},"course":{"type":"object","properties":{"id":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"},"name":{"type":"string"},"address":{"type":["string","null"]},"city":{"type":"string"},"region":{"type":"string"}},"required":["id","name","address","city","region"],"additionalProperties":false},"play_date":{"type":"string","format":"date","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$"},"timezone":{"type":"string","description":"IANA zone of the course."},"price_cents":{"anyOf":[{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},{"type":"null"}]},"currency":{"type":"string"},"note":{"type":"string"},"locked":{"type":"boolean"},"version":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991,"description":"Bumped on every change."},"organizer":{"description":"With players:read.","anyOf":[{"type":"object","properties":{"id":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"},"name":{"type":"string"}},"required":["id","name"],"additionalProperties":false},{"type":"null"}]},"invite_url":{"anyOf":[{"type":"string","format":"uri"},{"type":"null"}],"description":"The link golfers open to claim a spot."},"open_count":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"total_count":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"tee_times":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"},"starts_at":{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z))$"},"capacity":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"filled":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"slots":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"},"position":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"status":{"type":"string","enum":["open","taken"]},"player":{"description":"With players:read.","anyOf":[{"type":"object","properties":{"id":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"},"name":{"type":"string"}},"required":["id","name"],"additionalProperties":false},{"type":"null"}]},"guest_of":{"description":"With players:read. Set when the spot is a guest.","anyOf":[{"type":"object","properties":{"id":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"},"name":{"type":"string"}},"required":["id","name"],"additionalProperties":false},{"type":"null"}]}},"required":["id","position","status"],"additionalProperties":false}}},"required":["id","starts_at","capacity","filled","slots"],"additionalProperties":false}},"created_at":{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z))$"},"updated_at":{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z))$"}},"required":["id","external_ref","course","play_date","timezone","price_cents","currency","note","locked","version","invite_url","open_count","total_count","tee_times","created_at","updated_at"],"additionalProperties":false},"OutingList":{"type":"object","properties":{"data":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"},"external_ref":{"type":["string","null"]},"course":{"type":"object","properties":{"id":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"},"name":{"type":"string"},"address":{"type":["string","null"]},"city":{"type":"string"},"region":{"type":"string"}},"required":["id","name","address","city","region"],"additionalProperties":false},"play_date":{"type":"string","format":"date","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$"},"timezone":{"type":"string","description":"IANA zone of the course."},"price_cents":{"anyOf":[{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},{"type":"null"}]},"currency":{"type":"string"},"note":{"type":"string"},"locked":{"type":"boolean"},"version":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991,"description":"Bumped on every change."},"organizer":{"description":"With players:read.","anyOf":[{"type":"object","properties":{"id":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"},"name":{"type":"string"}},"required":["id","name"],"additionalProperties":false},{"type":"null"}]},"invite_url":{"anyOf":[{"type":"string","format":"uri"},{"type":"null"}],"description":"The link golfers open to claim a spot."},"open_count":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"total_count":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"tee_times":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"},"starts_at":{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z))$"},"capacity":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"filled":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"slots":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"},"position":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"status":{"type":"string","enum":["open","taken"]},"player":{"description":"With players:read.","anyOf":[{"type":"object","properties":{"id":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"},"name":{"type":"string"}},"required":["id","name"],"additionalProperties":false},{"type":"null"}]},"guest_of":{"description":"With players:read. Set when the spot is a guest.","anyOf":[{"type":"object","properties":{"id":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"},"name":{"type":"string"}},"required":["id","name"],"additionalProperties":false},{"type":"null"}]}},"required":["id","position","status"],"additionalProperties":false}}},"required":["id","starts_at","capacity","filled","slots"],"additionalProperties":false}},"created_at":{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z))$"},"updated_at":{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z))$"}},"required":["id","external_ref","course","play_date","timezone","price_cents","currency","note","locked","version","invite_url","open_count","total_count","tee_times","created_at","updated_at"],"additionalProperties":false}},"next_cursor":{"description":"Pass as ?cursor= for the next page; null on the last page.","type":["string","null"]}},"required":["data","next_cursor"],"additionalProperties":false},"ClaimResult":{"type":"object","properties":{"player_id":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"},"starts_at":{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z))$"},"guest_count":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"outing":{"type":"object","properties":{"id":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"},"external_ref":{"type":["string","null"]},"course":{"type":"object","properties":{"id":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"},"name":{"type":"string"},"address":{"type":["string","null"]},"city":{"type":"string"},"region":{"type":"string"}},"required":["id","name","address","city","region"],"additionalProperties":false},"play_date":{"type":"string","format":"date","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$"},"timezone":{"type":"string","description":"IANA zone of the course."},"price_cents":{"anyOf":[{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},{"type":"null"}]},"currency":{"type":"string"},"note":{"type":"string"},"locked":{"type":"boolean"},"version":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991,"description":"Bumped on every change."},"organizer":{"description":"With players:read.","anyOf":[{"type":"object","properties":{"id":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"},"name":{"type":"string"}},"required":["id","name"],"additionalProperties":false},{"type":"null"}]},"invite_url":{"anyOf":[{"type":"string","format":"uri"},{"type":"null"}],"description":"The link golfers open to claim a spot."},"open_count":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"total_count":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"tee_times":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"},"starts_at":{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z))$"},"capacity":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"filled":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"slots":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"},"position":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"status":{"type":"string","enum":["open","taken"]},"player":{"description":"With players:read.","anyOf":[{"type":"object","properties":{"id":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"},"name":{"type":"string"}},"required":["id","name"],"additionalProperties":false},{"type":"null"}]},"guest_of":{"description":"With players:read. Set when the spot is a guest.","anyOf":[{"type":"object","properties":{"id":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"},"name":{"type":"string"}},"required":["id","name"],"additionalProperties":false},{"type":"null"}]}},"required":["id","position","status"],"additionalProperties":false}}},"required":["id","starts_at","capacity","filled","slots"],"additionalProperties":false}},"created_at":{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z))$"},"updated_at":{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z))$"}},"required":["id","external_ref","course","play_date","timezone","price_cents","currency","note","locked","version","invite_url","open_count","total_count","tee_times","created_at","updated_at"],"additionalProperties":false}},"required":["player_id","starts_at","guest_count","outing"],"additionalProperties":false},"InviteLink":{"type":"object","properties":{"id":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"},"outing_id":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"},"url":{"type":"string","format":"uri"},"expires_at":{"anyOf":[{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z))$"},{"type":"null"}]}},"required":["id","outing_id","url","expires_at"],"additionalProperties":false},"WidgetToken":{"type":"object","properties":{"token":{"type":"string","description":"Opaque and encrypted. Treat it like a short-lived secret."},"url":{"type":"string","format":"uri","description":"Put this behind the \"Invite your group\" button (href of the embed link)."},"expires_at":{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z))$"}},"required":["token","url","expires_at"],"additionalProperties":false},"CourseList":{"type":"object","properties":{"data":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"},"name":{"type":"string"},"address":{"type":["string","null"]},"city":{"type":"string"},"region":{"type":"string"},"timezone":{"type":"string"},"distance_miles":{"type":"number"},"drive_minutes":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991,"description":"Rough estimate from straight-line distance."}},"required":["id","name","address","city","region","timezone","distance_miles","drive_minutes"],"additionalProperties":false}}},"required":["data"],"additionalProperties":false},"Webhook":{"type":"object","properties":{"id":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"},"url":{"type":"string","format":"uri"},"events":{"type":"array","items":{"type":"string","enum":["outing.created","outing.updated","outing.locked","outing.unlocked","outing.full","slot.claimed","slot.released","tee_time.added","tee_time.removed","tee_time.capacity_changed"]}},"description":{"type":"string"},"enabled":{"type":"boolean"},"created_at":{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z))$"},"updated_at":{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z))$"}},"required":["id","url","events","description","enabled","created_at","updated_at"],"additionalProperties":false},"WebhookCreated":{"type":"object","properties":{"id":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"},"url":{"type":"string","format":"uri"},"events":{"type":"array","items":{"type":"string","enum":["outing.created","outing.updated","outing.locked","outing.unlocked","outing.full","slot.claimed","slot.released","tee_time.added","tee_time.removed","tee_time.capacity_changed"]}},"description":{"type":"string"},"enabled":{"type":"boolean"},"created_at":{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z))$"},"updated_at":{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z))$"},"secret":{"type":"string","description":"Signing secret. Shown only once; store it now."}},"required":["id","url","events","description","enabled","created_at","updated_at","secret"],"additionalProperties":false},"WebhookList":{"type":"object","properties":{"data":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"},"url":{"type":"string","format":"uri"},"events":{"type":"array","items":{"type":"string","enum":["outing.created","outing.updated","outing.locked","outing.unlocked","outing.full","slot.claimed","slot.released","tee_time.added","tee_time.removed","tee_time.capacity_changed"]}},"description":{"type":"string"},"enabled":{"type":"boolean"},"created_at":{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z))$"},"updated_at":{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z))$"}},"required":["id","url","events","description","enabled","created_at","updated_at"],"additionalProperties":false}}},"required":["data"],"additionalProperties":false},"DeliveryList":{"type":"object","properties":{"data":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"},"type":{"type":"string","enum":["outing.created","outing.updated","outing.locked","outing.unlocked","outing.full","slot.claimed","slot.released","tee_time.added","tee_time.removed","tee_time.capacity_changed"]},"status":{"type":"string","enum":["pending","delivered","failed"]},"attempts":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"last_status":{"anyOf":[{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},{"type":"null"}]},"last_error":{"type":["string","null"]},"next_attempt_at":{"anyOf":[{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z))$"},{"type":"null"}]},"delivered_at":{"anyOf":[{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z))$"},{"type":"null"}]},"created_at":{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z))$"}},"required":["id","type","status","attempts","last_status","last_error","next_attempt_at","delivered_at","created_at"],"additionalProperties":false}}},"required":["data"],"additionalProperties":false},"Problem":{"type":"object","properties":{"type":{"type":"string","format":"uri"},"title":{"type":"string"},"status":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"detail":{"type":"string"},"code":{"type":"string","description":"Stable machine-readable reason, e.g. slot_taken, locked, insufficient_scope."},"errors":{"description":"Field → message, on validation errors.","type":"object","propertyNames":{"type":"string"},"additionalProperties":{"type":"string"}},"outing":{"description":"Current tee sheet, on claim conflicts.","type":"object","properties":{"id":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"},"external_ref":{"type":["string","null"]},"course":{"type":"object","properties":{"id":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"},"name":{"type":"string"},"address":{"type":["string","null"]},"city":{"type":"string"},"region":{"type":"string"}},"required":["id","name","address","city","region"],"additionalProperties":false},"play_date":{"type":"string","format":"date","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$"},"timezone":{"type":"string","description":"IANA zone of the course."},"price_cents":{"anyOf":[{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},{"type":"null"}]},"currency":{"type":"string"},"note":{"type":"string"},"locked":{"type":"boolean"},"version":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991,"description":"Bumped on every change."},"organizer":{"description":"With players:read.","anyOf":[{"type":"object","properties":{"id":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"},"name":{"type":"string"}},"required":["id","name"],"additionalProperties":false},{"type":"null"}]},"invite_url":{"anyOf":[{"type":"string","format":"uri"},{"type":"null"}],"description":"The link golfers open to claim a spot."},"open_count":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"total_count":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"tee_times":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"},"starts_at":{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z))$"},"capacity":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"filled":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"slots":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"},"position":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"status":{"type":"string","enum":["open","taken"]},"player":{"description":"With players:read.","anyOf":[{"type":"object","properties":{"id":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"},"name":{"type":"string"}},"required":["id","name"],"additionalProperties":false},{"type":"null"}]},"guest_of":{"description":"With players:read. Set when the spot is a guest.","anyOf":[{"type":"object","properties":{"id":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"},"name":{"type":"string"}},"required":["id","name"],"additionalProperties":false},{"type":"null"}]}},"required":["id","position","status"],"additionalProperties":false}}},"required":["id","starts_at","capacity","filled","slots"],"additionalProperties":false}},"created_at":{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z))$"},"updated_at":{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z))$"}},"required":["id","external_ref","course","play_date","timezone","price_cents","currency","note","locked","version","invite_url","open_count","total_count","tee_times","created_at","updated_at"],"additionalProperties":false}},"required":["type","title","status","detail","code"],"additionalProperties":false}}}}