{"openapi":"3.1.0","info":{"title":"CampWatch Agent API","version":"1.0.0","description":"Australian campground search, availability, account, alert and existing credit APIs. Direct API payments are disabled in the current release and require a separate feature flag; MCP has no purchase tools. CampWatch does not reserve campsites. Setup: /developers. Agent guide: /agents.md.","contact":{"name":"CampWatch integrations","url":"https://www.campwatch.com.au/support","email":"hello@campwatch.com.au"}},"externalDocs":{"description":"API and MCP setup guide","url":"https://www.campwatch.com.au/developers"},"servers":[{"url":"https://www.campwatch.com.au/api/v1"}],"paths":{"/session/request":{"post":{"operationId":"postSessionRequest","summary":"Start signup or login by sending an SMS code to the consenting account owner","security":[],"parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"phoneNumber":{"type":"string","example":"+61412345678"},"consent":{"const":true}},"required":["phoneNumber","consent"],"additionalProperties":false}}}},"responses":{"200":{"description":"Operation result in data. For payments only fulfilled means credits were granted.","content":{"application/json":{"schema":{"type":"object","required":["ok","data","meta"],"properties":{"ok":{"const":true},"data":{"type":"object","properties":{"verificationId":{"type":"string"},"expiresAt":{"type":"string","format":"date-time"},"ttlMinutes":{"type":"integer"}},"required":["verificationId","expiresAt","ttlMinutes"],"additionalProperties":true},"error":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"},"retryAfter":{"type":"integer"},"details":{"type":"object"}},"required":["code","message"],"additionalProperties":false},"meta":{"type":"object","properties":{"requestId":{"type":"string"},"serverTime":{"type":"string","format":"date-time"},"apiVersion":{"const":"v1"}},"required":["requestId","serverTime","apiVersion"],"additionalProperties":false}}}}}},"400":{"description":"Structured error. Respect Retry-After. Use the same idempotency key after network or provider uncertainty.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"401":{"description":"Structured error. Respect Retry-After. Use the same idempotency key after network or provider uncertainty.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"403":{"description":"Structured error. Respect Retry-After. Use the same idempotency key after network or provider uncertainty.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"404":{"description":"Structured error. Respect Retry-After. Use the same idempotency key after network or provider uncertainty.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"405":{"description":"Structured error. Respect Retry-After. Use the same idempotency key after network or provider uncertainty.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"409":{"description":"Structured error. Respect Retry-After. Use the same idempotency key after network or provider uncertainty.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"410":{"description":"Structured error. Respect Retry-After. Use the same idempotency key after network or provider uncertainty.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"413":{"description":"Structured error. Respect Retry-After. Use the same idempotency key after network or provider uncertainty.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"429":{"description":"Structured error. Respect Retry-After. Use the same idempotency key after network or provider uncertainty.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"500":{"description":"Structured error. Respect Retry-After. Use the same idempotency key after network or provider uncertainty.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"502":{"description":"Structured error. Respect Retry-After. Use the same idempotency key after network or provider uncertainty.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"503":{"description":"Structured error. Respect Retry-After. Use the same idempotency key after network or provider uncertainty.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}}}}},"/session/verify":{"post":{"operationId":"postSessionVerify","summary":"Verify the SMS code and receive a bearer token","security":[],"parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"verificationId":{"type":"string"},"code":{"type":"string","pattern":"^[0-9]{6}$"},"agentName":{"type":"string","minLength":1,"maxLength":80},"consent":{"const":true}},"required":["verificationId","code","agentName","consent"],"additionalProperties":false}}}},"responses":{"200":{"description":"Operation result in data. For payments only fulfilled means credits were granted.","content":{"application/json":{"schema":{"type":"object","required":["ok","data","meta"],"properties":{"ok":{"const":true},"data":{"type":"object","properties":{"sessionToken":{"type":"string","description":"Secret bearer token. Store securely; never log."},"session":{"type":"object","properties":{"id":{"type":"string"},"phoneId":{"type":"string"},"platform":{"type":"string"},"appVersion":{"type":"string"},"runtimeVersion":{"type":"string"},"createdAt":{"type":"string","format":"date-time"},"lastSeenAt":{"type":"string","format":"date-time"}},"required":["id","phoneId","platform","appVersion","runtimeVersion","createdAt","lastSeenAt"],"additionalProperties":true}},"required":["sessionToken","session"],"additionalProperties":true},"error":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"},"retryAfter":{"type":"integer"},"details":{"type":"object"}},"required":["code","message"],"additionalProperties":false},"meta":{"type":"object","properties":{"requestId":{"type":"string"},"serverTime":{"type":"string","format":"date-time"},"apiVersion":{"const":"v1"}},"required":["requestId","serverTime","apiVersion"],"additionalProperties":false}}}}}},"400":{"description":"Structured error. Respect Retry-After. Use the same idempotency key after network or provider uncertainty.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"401":{"description":"Structured error. Respect Retry-After. Use the same idempotency key after network or provider uncertainty.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"403":{"description":"Structured error. Respect Retry-After. Use the same idempotency key after network or provider uncertainty.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"404":{"description":"Structured error. Respect Retry-After. Use the same idempotency key after network or provider uncertainty.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"405":{"description":"Structured error. Respect Retry-After. Use the same idempotency key after network or provider uncertainty.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"409":{"description":"Structured error. Respect Retry-After. Use the same idempotency key after network or provider uncertainty.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"410":{"description":"Structured error. Respect Retry-After. Use the same idempotency key after network or provider uncertainty.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"413":{"description":"Structured error. Respect Retry-After. Use the same idempotency key after network or provider uncertainty.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"429":{"description":"Structured error. Respect Retry-After. Use the same idempotency key after network or provider uncertainty.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"500":{"description":"Structured error. Respect Retry-After. Use the same idempotency key after network or provider uncertainty.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"502":{"description":"Structured error. Respect Retry-After. Use the same idempotency key after network or provider uncertainty.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"503":{"description":"Structured error. Respect Retry-After. Use the same idempotency key after network or provider uncertainty.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}}}}},"/session/refresh":{"post":{"operationId":"postSessionRefresh","summary":"Read and touch the current session; does not rotate the token","security":[{"bearerAuth":[]}],"parameters":[],"responses":{"200":{"description":"Operation result in data. For payments only fulfilled means credits were granted.","content":{"application/json":{"schema":{"type":"object","required":["ok","data","meta"],"properties":{"ok":{"const":true},"data":{"type":"object","properties":{"session":{"type":"object","properties":{"id":{"type":"string"},"phoneId":{"type":"string"},"platform":{"type":"string"},"appVersion":{"type":"string"},"runtimeVersion":{"type":"string"},"createdAt":{"type":"string","format":"date-time"},"lastSeenAt":{"type":"string","format":"date-time"}},"required":["id","phoneId","platform","appVersion","runtimeVersion","createdAt","lastSeenAt"],"additionalProperties":true}},"required":["session"],"additionalProperties":true},"error":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"},"retryAfter":{"type":"integer"},"details":{"type":"object"}},"required":["code","message"],"additionalProperties":false},"meta":{"type":"object","properties":{"requestId":{"type":"string"},"serverTime":{"type":"string","format":"date-time"},"apiVersion":{"const":"v1"}},"required":["requestId","serverTime","apiVersion"],"additionalProperties":false}}}}}},"400":{"description":"Structured error. Respect Retry-After. Use the same idempotency key after network or provider uncertainty.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"401":{"description":"Structured error. Respect Retry-After. Use the same idempotency key after network or provider uncertainty.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"403":{"description":"Structured error. Respect Retry-After. Use the same idempotency key after network or provider uncertainty.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"404":{"description":"Structured error. Respect Retry-After. Use the same idempotency key after network or provider uncertainty.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"405":{"description":"Structured error. Respect Retry-After. Use the same idempotency key after network or provider uncertainty.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"409":{"description":"Structured error. Respect Retry-After. Use the same idempotency key after network or provider uncertainty.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"410":{"description":"Structured error. Respect Retry-After. Use the same idempotency key after network or provider uncertainty.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"413":{"description":"Structured error. Respect Retry-After. Use the same idempotency key after network or provider uncertainty.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"429":{"description":"Structured error. Respect Retry-After. Use the same idempotency key after network or provider uncertainty.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"500":{"description":"Structured error. Respect Retry-After. Use the same idempotency key after network or provider uncertainty.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"502":{"description":"Structured error. Respect Retry-After. Use the same idempotency key after network or provider uncertainty.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"503":{"description":"Structured error. Respect Retry-After. Use the same idempotency key after network or provider uncertainty.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}}}}},"/session/logout":{"post":{"operationId":"postSessionLogout","summary":"Revoke the current bearer session","security":[{"bearerAuth":[]}],"parameters":[],"responses":{"200":{"description":"Operation result in data. For payments only fulfilled means credits were granted.","content":{"application/json":{"schema":{"type":"object","required":["ok","data","meta"],"properties":{"ok":{"const":true},"data":{"type":"object","properties":{"revoked":{"const":true}},"required":["revoked"],"additionalProperties":true},"error":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"},"retryAfter":{"type":"integer"},"details":{"type":"object"}},"required":["code","message"],"additionalProperties":false},"meta":{"type":"object","properties":{"requestId":{"type":"string"},"serverTime":{"type":"string","format":"date-time"},"apiVersion":{"const":"v1"}},"required":["requestId","serverTime","apiVersion"],"additionalProperties":false}}}}}},"400":{"description":"Structured error. Respect Retry-After. Use the same idempotency key after network or provider uncertainty.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"401":{"description":"Structured error. Respect Retry-After. Use the same idempotency key after network or provider uncertainty.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"403":{"description":"Structured error. Respect Retry-After. Use the same idempotency key after network or provider uncertainty.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"404":{"description":"Structured error. Respect Retry-After. Use the same idempotency key after network or provider uncertainty.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"405":{"description":"Structured error. Respect Retry-After. Use the same idempotency key after network or provider uncertainty.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"409":{"description":"Structured error. Respect Retry-After. Use the same idempotency key after network or provider uncertainty.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"410":{"description":"Structured error. Respect Retry-After. Use the same idempotency key after network or provider uncertainty.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"413":{"description":"Structured error. Respect Retry-After. Use the same idempotency key after network or provider uncertainty.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"429":{"description":"Structured error. Respect Retry-After. Use the same idempotency key after network or provider uncertainty.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"500":{"description":"Structured error. Respect Retry-After. Use the same idempotency key after network or provider uncertainty.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"502":{"description":"Structured error. Respect Retry-After. Use the same idempotency key after network or provider uncertainty.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"503":{"description":"Structured error. Respect Retry-After. Use the same idempotency key after network or provider uncertainty.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}}}}},"/campgrounds":{"get":{"operationId":"getCampgrounds","summary":"Search the current campground catalogue","security":[],"parameters":[{"name":"q","in":"query","required":false,"schema":{"type":"string"}},{"name":"provider","in":"query","required":false,"schema":{"type":"string"}},{"name":"state","in":"query","required":false,"schema":{"type":"string"}},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","minimum":1,"maximum":100}},{"name":"cursor","in":"query","required":false,"schema":{"type":"string"}},{"name":"bbox","in":"query","required":false,"schema":{"type":"string"}},{"name":"nearLat","in":"query","required":false,"schema":{"type":"number"}},{"name":"nearLng","in":"query","required":false,"schema":{"type":"number"}},{"name":"radiusKm","in":"query","required":false,"schema":{"type":"number"}}],"responses":{"200":{"description":"Operation result in data. For payments only fulfilled means credits were granted.","content":{"application/json":{"schema":{"type":"object","required":["ok","data","meta"],"properties":{"ok":{"const":true},"data":{"type":"object","properties":{"campgrounds":{"type":"array","items":{"type":"object","properties":{"provider":{"type":"string"},"slug":{"type":"string"},"name":{"type":"string"},"state":{"type":"string"},"region":{"type":"string"},"park":{"type":"string"},"accommodationType":{"type":"string"},"coord":{"type":"object","properties":{"lat":{"type":"number"},"lng":{"type":"number"}},"required":["lat","lng"],"additionalProperties":true},"webUrl":{"type":"string"}},"required":["provider","slug","name","state","accommodationType"],"additionalProperties":true}},"nextCursor":{"anyOf":[{"type":"string"},{"type":"null"}]}},"required":["campgrounds","nextCursor"],"additionalProperties":true},"error":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"},"retryAfter":{"type":"integer"},"details":{"type":"object"}},"required":["code","message"],"additionalProperties":false},"meta":{"type":"object","properties":{"requestId":{"type":"string"},"serverTime":{"type":"string","format":"date-time"},"apiVersion":{"const":"v1"}},"required":["requestId","serverTime","apiVersion"],"additionalProperties":false}}}}}},"400":{"description":"Structured error. Respect Retry-After. Use the same idempotency key after network or provider uncertainty.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"401":{"description":"Structured error. Respect Retry-After. Use the same idempotency key after network or provider uncertainty.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"403":{"description":"Structured error. Respect Retry-After. Use the same idempotency key after network or provider uncertainty.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"404":{"description":"Structured error. Respect Retry-After. Use the same idempotency key after network or provider uncertainty.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"405":{"description":"Structured error. Respect Retry-After. Use the same idempotency key after network or provider uncertainty.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"409":{"description":"Structured error. Respect Retry-After. Use the same idempotency key after network or provider uncertainty.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"410":{"description":"Structured error. Respect Retry-After. Use the same idempotency key after network or provider uncertainty.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"413":{"description":"Structured error. Respect Retry-After. Use the same idempotency key after network or provider uncertainty.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"429":{"description":"Structured error. Respect Retry-After. Use the same idempotency key after network or provider uncertainty.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"500":{"description":"Structured error. Respect Retry-After. Use the same idempotency key after network or provider uncertainty.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"502":{"description":"Structured error. Respect Retry-After. Use the same idempotency key after network or provider uncertainty.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"503":{"description":"Structured error. Respect Retry-After. Use the same idempotency key after network or provider uncertainty.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}}}}},"/providers":{"get":{"operationId":"getProviders","summary":"List supported booking providers","security":[],"parameters":[],"responses":{"200":{"description":"Operation result in data. For payments only fulfilled means credits were granted.","content":{"application/json":{"schema":{"type":"object","required":["ok","data","meta"],"properties":{"ok":{"const":true},"data":{"type":"object","properties":{"providers":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"displayName":{"type":"string"},"state":{"type":"string"},"bookingWindowDays":{"anyOf":[{"type":"integer"},{"type":"null"}]},"campgroundCount":{"type":"integer"},"iconName":{"type":"string"},"color":{"type":"string"},"blurb":{"type":"string"}},"required":["id","displayName","state","bookingWindowDays","campgroundCount"],"additionalProperties":true}}},"required":["providers"],"additionalProperties":true},"error":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"},"retryAfter":{"type":"integer"},"details":{"type":"object"}},"required":["code","message"],"additionalProperties":false},"meta":{"type":"object","properties":{"requestId":{"type":"string"},"serverTime":{"type":"string","format":"date-time"},"apiVersion":{"const":"v1"}},"required":["requestId","serverTime","apiVersion"],"additionalProperties":false}}}}}},"400":{"description":"Structured error. Respect Retry-After. Use the same idempotency key after network or provider uncertainty.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"401":{"description":"Structured error. Respect Retry-After. Use the same idempotency key after network or provider uncertainty.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"403":{"description":"Structured error. Respect Retry-After. Use the same idempotency key after network or provider uncertainty.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"404":{"description":"Structured error. Respect Retry-After. Use the same idempotency key after network or provider uncertainty.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"405":{"description":"Structured error. Respect Retry-After. Use the same idempotency key after network or provider uncertainty.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"409":{"description":"Structured error. Respect Retry-After. Use the same idempotency key after network or provider uncertainty.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"410":{"description":"Structured error. Respect Retry-After. Use the same idempotency key after network or provider uncertainty.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"413":{"description":"Structured error. Respect Retry-After. Use the same idempotency key after network or provider uncertainty.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"429":{"description":"Structured error. Respect Retry-After. Use the same idempotency key after network or provider uncertainty.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"500":{"description":"Structured error. Respect Retry-After. Use the same idempotency key after network or provider uncertainty.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"502":{"description":"Structured error. Respect Retry-After. Use the same idempotency key after network or provider uncertainty.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"503":{"description":"Structured error. Respect Retry-After. Use the same idempotency key after network or provider uncertainty.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}}}}},"/campgrounds/{provider}/{slug}":{"get":{"operationId":"getCampgroundsProviderSlug","summary":"Read campground details and booking-window information","security":[],"parameters":[{"name":"provider","in":"path","required":true,"schema":{"type":"string"}},{"name":"slug","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Operation result in data. For payments only fulfilled means credits were granted.","content":{"application/json":{"schema":{"type":"object","required":["ok","data","meta"],"properties":{"ok":{"const":true},"data":{"type":"object","properties":{"campground":{"type":"object","properties":{"provider":{"type":"string"},"slug":{"type":"string"},"name":{"type":"string"},"state":{"type":"string"},"region":{"type":"string"},"park":{"type":"string"},"accommodationType":{"type":"string"},"coord":{"type":"object","properties":{"lat":{"type":"number"},"lng":{"type":"number"}},"required":["lat","lng"],"additionalProperties":true},"webUrl":{"type":"string"}},"required":["provider","slug","name","state","accommodationType"],"additionalProperties":true},"blocks":{"type":"array","items":{"type":"object"}},"nearby":{"type":"array","items":{"type":"object","properties":{"provider":{"type":"string"},"slug":{"type":"string"},"name":{"type":"string"},"state":{"type":"string"},"region":{"type":"string"},"park":{"type":"string"},"accommodationType":{"type":"string"},"coord":{"type":"object","properties":{"lat":{"type":"number"},"lng":{"type":"number"}},"required":["lat","lng"],"additionalProperties":true},"webUrl":{"type":"string"}},"required":["provider","slug","name","state","accommodationType"],"additionalProperties":true}}},"required":["campground","blocks","nearby"],"additionalProperties":true},"error":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"},"retryAfter":{"type":"integer"},"details":{"type":"object"}},"required":["code","message"],"additionalProperties":false},"meta":{"type":"object","properties":{"requestId":{"type":"string"},"serverTime":{"type":"string","format":"date-time"},"apiVersion":{"const":"v1"}},"required":["requestId","serverTime","apiVersion"],"additionalProperties":false}}}}}},"400":{"description":"Structured error. Respect Retry-After. Use the same idempotency key after network or provider uncertainty.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"401":{"description":"Structured error. Respect Retry-After. Use the same idempotency key after network or provider uncertainty.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"403":{"description":"Structured error. Respect Retry-After. Use the same idempotency key after network or provider uncertainty.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"404":{"description":"Structured error. Respect Retry-After. Use the same idempotency key after network or provider uncertainty.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"405":{"description":"Structured error. Respect Retry-After. Use the same idempotency key after network or provider uncertainty.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"409":{"description":"Structured error. Respect Retry-After. Use the same idempotency key after network or provider uncertainty.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"410":{"description":"Structured error. Respect Retry-After. Use the same idempotency key after network or provider uncertainty.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"413":{"description":"Structured error. Respect Retry-After. Use the same idempotency key after network or provider uncertainty.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"429":{"description":"Structured error. Respect Retry-After. Use the same idempotency key after network or provider uncertainty.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"500":{"description":"Structured error. Respect Retry-After. Use the same idempotency key after network or provider uncertainty.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"502":{"description":"Structured error. Respect Retry-After. Use the same idempotency key after network or provider uncertainty.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"503":{"description":"Structured error. Respect Retry-After. Use the same idempotency key after network or provider uncertainty.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}}}}},"/campgrounds/{provider}/{slug}/site-types":{"get":{"operationId":"getCampgroundsProviderSlugSiteTypes","summary":"Read available site type filters","security":[],"parameters":[{"name":"provider","in":"path","required":true,"schema":{"type":"string"}},{"name":"slug","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Operation result in data. For payments only fulfilled means credits were granted.","content":{"application/json":{"schema":{"type":"object","required":["ok","data","meta"],"properties":{"ok":{"const":true},"data":{"type":"object","properties":{"siteTypes":{"type":"array","items":{"type":"string"}}},"required":["siteTypes"],"additionalProperties":true},"error":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"},"retryAfter":{"type":"integer"},"details":{"type":"object"}},"required":["code","message"],"additionalProperties":false},"meta":{"type":"object","properties":{"requestId":{"type":"string"},"serverTime":{"type":"string","format":"date-time"},"apiVersion":{"const":"v1"}},"required":["requestId","serverTime","apiVersion"],"additionalProperties":false}}}}}},"400":{"description":"Structured error. Respect Retry-After. Use the same idempotency key after network or provider uncertainty.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"401":{"description":"Structured error. Respect Retry-After. Use the same idempotency key after network or provider uncertainty.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"403":{"description":"Structured error. Respect Retry-After. Use the same idempotency key after network or provider uncertainty.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"404":{"description":"Structured error. Respect Retry-After. Use the same idempotency key after network or provider uncertainty.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"405":{"description":"Structured error. Respect Retry-After. Use the same idempotency key after network or provider uncertainty.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"409":{"description":"Structured error. Respect Retry-After. Use the same idempotency key after network or provider uncertainty.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"410":{"description":"Structured error. Respect Retry-After. Use the same idempotency key after network or provider uncertainty.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"413":{"description":"Structured error. Respect Retry-After. Use the same idempotency key after network or provider uncertainty.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"429":{"description":"Structured error. Respect Retry-After. Use the same idempotency key after network or provider uncertainty.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"500":{"description":"Structured error. Respect Retry-After. Use the same idempotency key after network or provider uncertainty.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"502":{"description":"Structured error. Respect Retry-After. Use the same idempotency key after network or provider uncertainty.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"503":{"description":"Structured error. Respect Retry-After. Use the same idempotency key after network or provider uncertainty.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}}}}},"/campgrounds/{provider}/{slug}/availability":{"get":{"operationId":"getCampgroundsProviderSlugAvailability","summary":"Check availability; read SSE progress, result and error events until the stream closes","security":[],"parameters":[{"name":"provider","in":"path","required":true,"schema":{"type":"string"}},{"name":"slug","in":"path","required":true,"schema":{"type":"string"}},{"name":"checkIn","in":"query","required":true,"schema":{"type":"string","format":"date"}},{"name":"checkOut","in":"query","required":true,"schema":{"type":"string","format":"date"}},{"name":"adults","in":"query","required":true,"schema":{"type":"integer","minimum":1,"maximum":10}},{"name":"children","in":"query","required":false,"schema":{"type":"integer"}},{"name":"infants","in":"query","required":false,"schema":{"type":"integer"}}],"responses":{"200":{"description":"SSE stream: progress, result (isAvailable, bookingUrl, availableLocationTypes), or error (message, requestId). A 200 alone does not mean a successful availability check.","content":{"text/event-stream":{"schema":{"type":"string"}}}},"400":{"description":"Structured error. Respect Retry-After. Use the same idempotency key after network or provider uncertainty.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"401":{"description":"Structured error. Respect Retry-After. Use the same idempotency key after network or provider uncertainty.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"403":{"description":"Structured error. Respect Retry-After. Use the same idempotency key after network or provider uncertainty.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"404":{"description":"Structured error. Respect Retry-After. Use the same idempotency key after network or provider uncertainty.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"405":{"description":"Structured error. Respect Retry-After. Use the same idempotency key after network or provider uncertainty.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"409":{"description":"Structured error. Respect Retry-After. Use the same idempotency key after network or provider uncertainty.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"410":{"description":"Structured error. Respect Retry-After. Use the same idempotency key after network or provider uncertainty.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"413":{"description":"Structured error. Respect Retry-After. Use the same idempotency key after network or provider uncertainty.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"429":{"description":"Structured error. Respect Retry-After. Use the same idempotency key after network or provider uncertainty.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"500":{"description":"Structured error. Respect Retry-After. Use the same idempotency key after network or provider uncertainty.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"502":{"description":"Structured error. Respect Retry-After. Use the same idempotency key after network or provider uncertainty.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"503":{"description":"Structured error. Respect Retry-After. Use the same idempotency key after network or provider uncertainty.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}}}}},"/watches":{"get":{"operationId":"getWatches","summary":"List or create owned campground and park alerts","security":[{"bearerAuth":[]}],"parameters":[{"name":"status","in":"query","required":false,"schema":{"type":"string","example":"ACTIVE,STOPPED,EXPIRED"}},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":100}},{"name":"cursor","in":"query","required":false,"schema":{"type":"string"}}],"responses":{"200":{"description":"Operation result in data. For payments only fulfilled means credits were granted.","content":{"application/json":{"schema":{"type":"object","required":["ok","data","meta"],"properties":{"ok":{"const":true},"data":{"type":"object","properties":{"watches":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"publicToken":{"type":"string"},"status":{"enum":["ACTIVE","STOPPED","EXPIRED"]},"createdAt":{"type":"string","format":"date-time"},"expiresAt":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}]},"stoppedAt":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}]},"lastAlertedAt":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}]},"creditPaused":{"type":"boolean"},"target":{"oneOf":[{"type":"object","properties":{"kind":{"const":"campground"},"provider":{"type":"string"},"slug":{"type":"string"},"name":{"type":"string"}},"required":["kind","provider","slug","name"],"additionalProperties":true},{"type":"object","properties":{"kind":{"const":"park"},"provider":{"type":"string"},"parkSlug":{"type":"string"},"name":{"type":"string"}},"required":["kind","provider","parkSlug","name"],"additionalProperties":true}]},"dates":{"type":"object","properties":{"checkIn":{"type":"string","format":"date"},"checkOut":{"type":"string","format":"date"}},"required":["checkIn","checkOut"],"additionalProperties":true},"partySize":{"type":"object","properties":{"adults":{"type":"integer"},"children":{"type":"integer"},"infants":{"type":"integer"}},"required":["adults","children","infants"],"additionalProperties":true},"siteTypeFilter":{"type":"array","items":{"type":"string"}},"excludedCampgroundSlugs":{"type":"array","items":{"type":"string"}},"alerting":{"type":"object","properties":{"effectiveChannels":{"type":"array","items":{"enum":["push","sms"]}},"pushHealth":{"enum":["healthy","degraded","unknown"]},"lastAlertAt":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}]}},"required":["effectiveChannels","pushHealth","lastAlertAt"],"additionalProperties":true},"actions":{"type":"object","properties":{"stopUrl":{"type":"string"},"bookUrl":{"type":"string"}},"required":["stopUrl","bookUrl"],"additionalProperties":true}},"required":["id","publicToken","status","target","dates","partySize","alerting","actions"],"additionalProperties":true}},"nextCursor":{"anyOf":[{"type":"string"},{"type":"null"}]}},"required":["watches","nextCursor"],"additionalProperties":true},"error":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"},"retryAfter":{"type":"integer"},"details":{"type":"object"}},"required":["code","message"],"additionalProperties":false},"meta":{"type":"object","properties":{"requestId":{"type":"string"},"serverTime":{"type":"string","format":"date-time"},"apiVersion":{"const":"v1"}},"required":["requestId","serverTime","apiVersion"],"additionalProperties":false}}}}}},"400":{"description":"Structured error. Respect Retry-After. Use the same idempotency key after network or provider uncertainty.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"401":{"description":"Structured error. Respect Retry-After. Use the same idempotency key after network or provider uncertainty.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"403":{"description":"Structured error. Respect Retry-After. Use the same idempotency key after network or provider uncertainty.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"404":{"description":"Structured error. Respect Retry-After. Use the same idempotency key after network or provider uncertainty.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"405":{"description":"Structured error. Respect Retry-After. Use the same idempotency key after network or provider uncertainty.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"409":{"description":"Structured error. Respect Retry-After. Use the same idempotency key after network or provider uncertainty.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"410":{"description":"Structured error. Respect Retry-After. Use the same idempotency key after network or provider uncertainty.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"413":{"description":"Structured error. Respect Retry-After. Use the same idempotency key after network or provider uncertainty.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"429":{"description":"Structured error. Respect Retry-After. Use the same idempotency key after network or provider uncertainty.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"500":{"description":"Structured error. Respect Retry-After. Use the same idempotency key after network or provider uncertainty.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"502":{"description":"Structured error. Respect Retry-After. Use the same idempotency key after network or provider uncertainty.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"503":{"description":"Structured error. Respect Retry-After. Use the same idempotency key after network or provider uncertainty.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}}}},"post":{"operationId":"postWatches","summary":"List or create owned campground and park alerts","security":[{"bearerAuth":[]}],"parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"target":{"oneOf":[{"type":"object","properties":{"kind":{"const":"campground"},"provider":{"type":"string"},"slug":{"type":"string"}},"required":["kind","provider","slug"],"additionalProperties":false},{"type":"object","properties":{"kind":{"const":"park"},"provider":{"type":"string"},"parkSlug":{"type":"string"}},"required":["kind","provider","parkSlug"],"additionalProperties":false}]},"dates":{"type":"object","properties":{"checkIn":{"type":"string","format":"date"},"checkOut":{"type":"string","format":"date"}},"required":["checkIn","checkOut"],"additionalProperties":false},"partySize":{"type":"object","properties":{"adults":{"type":"integer","minimum":1,"maximum":10},"children":{"type":"integer","minimum":0,"maximum":10},"infants":{"type":"integer","minimum":0,"maximum":10}},"required":["adults"],"additionalProperties":false},"siteTypeFilter":{"type":"array","items":{"type":"string"},"maxItems":20},"excludedCampgroundSlugs":{"type":"array","items":{"type":"string"},"maxItems":100},"idempotencyKey":{"type":"string","minLength":8,"maxLength":128},"watchOptions":{"type":"object","properties":{"flexibleStartDays":{"type":"integer","minimum":0,"maximum":30},"startDayFilter":{"enum":["weekend","weekday",null]},"campsiteFilterMode":{"enum":["ANY_NIGHT","MUST_INCLUDE","RESTRICT_TO",null]},"campsiteFilter":{"type":"array","items":{"type":"string"},"maxItems":40}},"required":[],"additionalProperties":false}},"required":["target","dates","partySize","idempotencyKey"],"additionalProperties":false}}}},"responses":{"200":{"description":"Operation result in data. For payments only fulfilled means credits were granted.","content":{"application/json":{"schema":{"type":"object","required":["ok","data","meta"],"properties":{"ok":{"const":true},"data":{"type":"object","properties":{"watch":{"anyOf":[{"type":"object","properties":{"id":{"type":"string"},"publicToken":{"type":"string"},"status":{"enum":["ACTIVE","STOPPED","EXPIRED"]},"createdAt":{"type":"string","format":"date-time"},"expiresAt":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}]},"stoppedAt":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}]},"lastAlertedAt":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}]},"creditPaused":{"type":"boolean"},"target":{"oneOf":[{"type":"object","properties":{"kind":{"const":"campground"},"provider":{"type":"string"},"slug":{"type":"string"},"name":{"type":"string"}},"required":["kind","provider","slug","name"],"additionalProperties":true},{"type":"object","properties":{"kind":{"const":"park"},"provider":{"type":"string"},"parkSlug":{"type":"string"},"name":{"type":"string"}},"required":["kind","provider","parkSlug","name"],"additionalProperties":true}]},"dates":{"type":"object","properties":{"checkIn":{"type":"string","format":"date"},"checkOut":{"type":"string","format":"date"}},"required":["checkIn","checkOut"],"additionalProperties":true},"partySize":{"type":"object","properties":{"adults":{"type":"integer"},"children":{"type":"integer"},"infants":{"type":"integer"}},"required":["adults","children","infants"],"additionalProperties":true},"siteTypeFilter":{"type":"array","items":{"type":"string"}},"excludedCampgroundSlugs":{"type":"array","items":{"type":"string"}},"alerting":{"type":"object","properties":{"effectiveChannels":{"type":"array","items":{"enum":["push","sms"]}},"pushHealth":{"enum":["healthy","degraded","unknown"]},"lastAlertAt":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}]}},"required":["effectiveChannels","pushHealth","lastAlertAt"],"additionalProperties":true},"actions":{"type":"object","properties":{"stopUrl":{"type":"string"},"bookUrl":{"type":"string"}},"required":["stopUrl","bookUrl"],"additionalProperties":true}},"required":["id","publicToken","status","target","dates","partySize","alerting","actions"],"additionalProperties":true},{"type":"null"}]},"state":{"enum":["created","already_exists","already_available","payment_required"]},"availableCampgrounds":{"type":"array","items":{"type":"object","properties":{"name":{"type":"string"},"bookingUrl":{"type":"string"},"availableLocationTypes":{"type":"array","items":{"type":"string"}}},"required":["name","bookingUrl","availableLocationTypes"],"additionalProperties":true}},"successfulCombinationId":{"type":"string"}},"required":["watch","state"],"additionalProperties":true},"error":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"},"retryAfter":{"type":"integer"},"details":{"type":"object"}},"required":["code","message"],"additionalProperties":false},"meta":{"type":"object","properties":{"requestId":{"type":"string"},"serverTime":{"type":"string","format":"date-time"},"apiVersion":{"const":"v1"}},"required":["requestId","serverTime","apiVersion"],"additionalProperties":false}}}}}},"400":{"description":"Structured error. Respect Retry-After. Use the same idempotency key after network or provider uncertainty.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"401":{"description":"Structured error. Respect Retry-After. Use the same idempotency key after network or provider uncertainty.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"403":{"description":"Structured error. Respect Retry-After. Use the same idempotency key after network or provider uncertainty.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"404":{"description":"Structured error. Respect Retry-After. Use the same idempotency key after network or provider uncertainty.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"405":{"description":"Structured error. Respect Retry-After. Use the same idempotency key after network or provider uncertainty.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"409":{"description":"Structured error. Respect Retry-After. Use the same idempotency key after network or provider uncertainty.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"410":{"description":"Structured error. Respect Retry-After. Use the same idempotency key after network or provider uncertainty.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"413":{"description":"Structured error. Respect Retry-After. Use the same idempotency key after network or provider uncertainty.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"429":{"description":"Structured error. Respect Retry-After. Use the same idempotency key after network or provider uncertainty.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"500":{"description":"Structured error. Respect Retry-After. Use the same idempotency key after network or provider uncertainty.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"502":{"description":"Structured error. Respect Retry-After. Use the same idempotency key after network or provider uncertainty.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"503":{"description":"Structured error. Respect Retry-After. Use the same idempotency key after network or provider uncertainty.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}}}}},"/watches/{id}":{"get":{"operationId":"getWatchesId","summary":"Read, change park exclusions, or stop an owned alert","security":[{"bearerAuth":[]}],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Operation result in data. For payments only fulfilled means credits were granted.","content":{"application/json":{"schema":{"type":"object","required":["ok","data","meta"],"properties":{"ok":{"const":true},"data":{"type":"object","properties":{"watch":{"type":"object","properties":{"id":{"type":"string"},"publicToken":{"type":"string"},"status":{"enum":["ACTIVE","STOPPED","EXPIRED"]},"createdAt":{"type":"string","format":"date-time"},"expiresAt":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}]},"stoppedAt":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}]},"lastAlertedAt":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}]},"creditPaused":{"type":"boolean"},"target":{"oneOf":[{"type":"object","properties":{"kind":{"const":"campground"},"provider":{"type":"string"},"slug":{"type":"string"},"name":{"type":"string"}},"required":["kind","provider","slug","name"],"additionalProperties":true},{"type":"object","properties":{"kind":{"const":"park"},"provider":{"type":"string"},"parkSlug":{"type":"string"},"name":{"type":"string"}},"required":["kind","provider","parkSlug","name"],"additionalProperties":true}]},"dates":{"type":"object","properties":{"checkIn":{"type":"string","format":"date"},"checkOut":{"type":"string","format":"date"}},"required":["checkIn","checkOut"],"additionalProperties":true},"partySize":{"type":"object","properties":{"adults":{"type":"integer"},"children":{"type":"integer"},"infants":{"type":"integer"}},"required":["adults","children","infants"],"additionalProperties":true},"siteTypeFilter":{"type":"array","items":{"type":"string"}},"excludedCampgroundSlugs":{"type":"array","items":{"type":"string"}},"alerting":{"type":"object","properties":{"effectiveChannels":{"type":"array","items":{"enum":["push","sms"]}},"pushHealth":{"enum":["healthy","degraded","unknown"]},"lastAlertAt":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}]}},"required":["effectiveChannels","pushHealth","lastAlertAt"],"additionalProperties":true},"actions":{"type":"object","properties":{"stopUrl":{"type":"string"},"bookUrl":{"type":"string"}},"required":["stopUrl","bookUrl"],"additionalProperties":true}},"required":["id","publicToken","status","target","dates","partySize","alerting","actions"],"additionalProperties":true}},"required":["watch"],"additionalProperties":true},"error":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"},"retryAfter":{"type":"integer"},"details":{"type":"object"}},"required":["code","message"],"additionalProperties":false},"meta":{"type":"object","properties":{"requestId":{"type":"string"},"serverTime":{"type":"string","format":"date-time"},"apiVersion":{"const":"v1"}},"required":["requestId","serverTime","apiVersion"],"additionalProperties":false}}}}}},"400":{"description":"Structured error. Respect Retry-After. Use the same idempotency key after network or provider uncertainty.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"401":{"description":"Structured error. Respect Retry-After. Use the same idempotency key after network or provider uncertainty.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"403":{"description":"Structured error. Respect Retry-After. Use the same idempotency key after network or provider uncertainty.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"404":{"description":"Structured error. Respect Retry-After. Use the same idempotency key after network or provider uncertainty.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"405":{"description":"Structured error. Respect Retry-After. Use the same idempotency key after network or provider uncertainty.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"409":{"description":"Structured error. Respect Retry-After. Use the same idempotency key after network or provider uncertainty.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"410":{"description":"Structured error. Respect Retry-After. Use the same idempotency key after network or provider uncertainty.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"413":{"description":"Structured error. Respect Retry-After. Use the same idempotency key after network or provider uncertainty.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"429":{"description":"Structured error. Respect Retry-After. Use the same idempotency key after network or provider uncertainty.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"500":{"description":"Structured error. Respect Retry-After. Use the same idempotency key after network or provider uncertainty.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"502":{"description":"Structured error. Respect Retry-After. Use the same idempotency key after network or provider uncertainty.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"503":{"description":"Structured error. Respect Retry-After. Use the same idempotency key after network or provider uncertainty.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}}}},"patch":{"operationId":"patchWatchesId","summary":"Read, change park exclusions, or stop an owned alert","security":[{"bearerAuth":[]}],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"excludedCampgroundSlugs":{"type":"array","items":{"type":"string"},"maxItems":100}},"required":[],"additionalProperties":false}}}},"responses":{"200":{"description":"Operation result in data. For payments only fulfilled means credits were granted.","content":{"application/json":{"schema":{"type":"object","required":["ok","data","meta"],"properties":{"ok":{"const":true},"data":{"type":"object","properties":{"watch":{"type":"object","properties":{"id":{"type":"string"},"publicToken":{"type":"string"},"status":{"enum":["ACTIVE","STOPPED","EXPIRED"]},"createdAt":{"type":"string","format":"date-time"},"expiresAt":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}]},"stoppedAt":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}]},"lastAlertedAt":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}]},"creditPaused":{"type":"boolean"},"target":{"oneOf":[{"type":"object","properties":{"kind":{"const":"campground"},"provider":{"type":"string"},"slug":{"type":"string"},"name":{"type":"string"}},"required":["kind","provider","slug","name"],"additionalProperties":true},{"type":"object","properties":{"kind":{"const":"park"},"provider":{"type":"string"},"parkSlug":{"type":"string"},"name":{"type":"string"}},"required":["kind","provider","parkSlug","name"],"additionalProperties":true}]},"dates":{"type":"object","properties":{"checkIn":{"type":"string","format":"date"},"checkOut":{"type":"string","format":"date"}},"required":["checkIn","checkOut"],"additionalProperties":true},"partySize":{"type":"object","properties":{"adults":{"type":"integer"},"children":{"type":"integer"},"infants":{"type":"integer"}},"required":["adults","children","infants"],"additionalProperties":true},"siteTypeFilter":{"type":"array","items":{"type":"string"}},"excludedCampgroundSlugs":{"type":"array","items":{"type":"string"}},"alerting":{"type":"object","properties":{"effectiveChannels":{"type":"array","items":{"enum":["push","sms"]}},"pushHealth":{"enum":["healthy","degraded","unknown"]},"lastAlertAt":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}]}},"required":["effectiveChannels","pushHealth","lastAlertAt"],"additionalProperties":true},"actions":{"type":"object","properties":{"stopUrl":{"type":"string"},"bookUrl":{"type":"string"}},"required":["stopUrl","bookUrl"],"additionalProperties":true}},"required":["id","publicToken","status","target","dates","partySize","alerting","actions"],"additionalProperties":true}},"required":["watch"],"additionalProperties":true},"error":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"},"retryAfter":{"type":"integer"},"details":{"type":"object"}},"required":["code","message"],"additionalProperties":false},"meta":{"type":"object","properties":{"requestId":{"type":"string"},"serverTime":{"type":"string","format":"date-time"},"apiVersion":{"const":"v1"}},"required":["requestId","serverTime","apiVersion"],"additionalProperties":false}}}}}},"400":{"description":"Structured error. Respect Retry-After. Use the same idempotency key after network or provider uncertainty.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"401":{"description":"Structured error. Respect Retry-After. Use the same idempotency key after network or provider uncertainty.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"403":{"description":"Structured error. Respect Retry-After. Use the same idempotency key after network or provider uncertainty.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"404":{"description":"Structured error. Respect Retry-After. Use the same idempotency key after network or provider uncertainty.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"405":{"description":"Structured error. Respect Retry-After. Use the same idempotency key after network or provider uncertainty.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"409":{"description":"Structured error. Respect Retry-After. Use the same idempotency key after network or provider uncertainty.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"410":{"description":"Structured error. Respect Retry-After. Use the same idempotency key after network or provider uncertainty.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"413":{"description":"Structured error. Respect Retry-After. Use the same idempotency key after network or provider uncertainty.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"429":{"description":"Structured error. Respect Retry-After. Use the same idempotency key after network or provider uncertainty.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"500":{"description":"Structured error. Respect Retry-After. Use the same idempotency key after network or provider uncertainty.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"502":{"description":"Structured error. Respect Retry-After. Use the same idempotency key after network or provider uncertainty.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"503":{"description":"Structured error. Respect Retry-After. Use the same idempotency key after network or provider uncertainty.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}}}},"delete":{"operationId":"deleteWatchesId","summary":"Read, change park exclusions, or stop an owned alert","security":[{"bearerAuth":[]}],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Operation result in data. For payments only fulfilled means credits were granted.","content":{"application/json":{"schema":{"type":"object","required":["ok","data","meta"],"properties":{"ok":{"const":true},"data":{"type":"object","properties":{"watch":{"type":"object","properties":{"id":{"type":"string"},"publicToken":{"type":"string"},"status":{"enum":["ACTIVE","STOPPED","EXPIRED"]},"createdAt":{"type":"string","format":"date-time"},"expiresAt":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}]},"stoppedAt":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}]},"lastAlertedAt":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}]},"creditPaused":{"type":"boolean"},"target":{"oneOf":[{"type":"object","properties":{"kind":{"const":"campground"},"provider":{"type":"string"},"slug":{"type":"string"},"name":{"type":"string"}},"required":["kind","provider","slug","name"],"additionalProperties":true},{"type":"object","properties":{"kind":{"const":"park"},"provider":{"type":"string"},"parkSlug":{"type":"string"},"name":{"type":"string"}},"required":["kind","provider","parkSlug","name"],"additionalProperties":true}]},"dates":{"type":"object","properties":{"checkIn":{"type":"string","format":"date"},"checkOut":{"type":"string","format":"date"}},"required":["checkIn","checkOut"],"additionalProperties":true},"partySize":{"type":"object","properties":{"adults":{"type":"integer"},"children":{"type":"integer"},"infants":{"type":"integer"}},"required":["adults","children","infants"],"additionalProperties":true},"siteTypeFilter":{"type":"array","items":{"type":"string"}},"excludedCampgroundSlugs":{"type":"array","items":{"type":"string"}},"alerting":{"type":"object","properties":{"effectiveChannels":{"type":"array","items":{"enum":["push","sms"]}},"pushHealth":{"enum":["healthy","degraded","unknown"]},"lastAlertAt":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}]}},"required":["effectiveChannels","pushHealth","lastAlertAt"],"additionalProperties":true},"actions":{"type":"object","properties":{"stopUrl":{"type":"string"},"bookUrl":{"type":"string"}},"required":["stopUrl","bookUrl"],"additionalProperties":true}},"required":["id","publicToken","status","target","dates","partySize","alerting","actions"],"additionalProperties":true}},"required":["watch"],"additionalProperties":true},"error":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"},"retryAfter":{"type":"integer"},"details":{"type":"object"}},"required":["code","message"],"additionalProperties":false},"meta":{"type":"object","properties":{"requestId":{"type":"string"},"serverTime":{"type":"string","format":"date-time"},"apiVersion":{"const":"v1"}},"required":["requestId","serverTime","apiVersion"],"additionalProperties":false}}}}}},"400":{"description":"Structured error. Respect Retry-After. Use the same idempotency key after network or provider uncertainty.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"401":{"description":"Structured error. Respect Retry-After. Use the same idempotency key after network or provider uncertainty.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"403":{"description":"Structured error. Respect Retry-After. Use the same idempotency key after network or provider uncertainty.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"404":{"description":"Structured error. Respect Retry-After. Use the same idempotency key after network or provider uncertainty.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"405":{"description":"Structured error. Respect Retry-After. Use the same idempotency key after network or provider uncertainty.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"409":{"description":"Structured error. Respect Retry-After. Use the same idempotency key after network or provider uncertainty.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"410":{"description":"Structured error. Respect Retry-After. Use the same idempotency key after network or provider uncertainty.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"413":{"description":"Structured error. Respect Retry-After. Use the same idempotency key after network or provider uncertainty.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"429":{"description":"Structured error. Respect Retry-After. Use the same idempotency key after network or provider uncertainty.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"500":{"description":"Structured error. Respect Retry-After. Use the same idempotency key after network or provider uncertainty.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"502":{"description":"Structured error. Respect Retry-After. Use the same idempotency key after network or provider uncertainty.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"503":{"description":"Structured error. Respect Retry-After. Use the same idempotency key after network or provider uncertainty.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}}}}},"/watches/{id}/reactivate":{"post":{"operationId":"postWatchesIdReactivate","summary":"Reactivate an owned alert, subject to current quotas and credits","security":[{"bearerAuth":[]}],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Operation result in data. For payments only fulfilled means credits were granted.","content":{"application/json":{"schema":{"type":"object","required":["ok","data","meta"],"properties":{"ok":{"const":true},"data":{"type":"object","properties":{"watch":{"type":"object","properties":{"id":{"type":"string"},"publicToken":{"type":"string"},"status":{"enum":["ACTIVE","STOPPED","EXPIRED"]},"createdAt":{"type":"string","format":"date-time"},"expiresAt":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}]},"stoppedAt":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}]},"lastAlertedAt":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}]},"creditPaused":{"type":"boolean"},"target":{"oneOf":[{"type":"object","properties":{"kind":{"const":"campground"},"provider":{"type":"string"},"slug":{"type":"string"},"name":{"type":"string"}},"required":["kind","provider","slug","name"],"additionalProperties":true},{"type":"object","properties":{"kind":{"const":"park"},"provider":{"type":"string"},"parkSlug":{"type":"string"},"name":{"type":"string"}},"required":["kind","provider","parkSlug","name"],"additionalProperties":true}]},"dates":{"type":"object","properties":{"checkIn":{"type":"string","format":"date"},"checkOut":{"type":"string","format":"date"}},"required":["checkIn","checkOut"],"additionalProperties":true},"partySize":{"type":"object","properties":{"adults":{"type":"integer"},"children":{"type":"integer"},"infants":{"type":"integer"}},"required":["adults","children","infants"],"additionalProperties":true},"siteTypeFilter":{"type":"array","items":{"type":"string"}},"excludedCampgroundSlugs":{"type":"array","items":{"type":"string"}},"alerting":{"type":"object","properties":{"effectiveChannels":{"type":"array","items":{"enum":["push","sms"]}},"pushHealth":{"enum":["healthy","degraded","unknown"]},"lastAlertAt":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}]}},"required":["effectiveChannels","pushHealth","lastAlertAt"],"additionalProperties":true},"actions":{"type":"object","properties":{"stopUrl":{"type":"string"},"bookUrl":{"type":"string"}},"required":["stopUrl","bookUrl"],"additionalProperties":true}},"required":["id","publicToken","status","target","dates","partySize","alerting","actions"],"additionalProperties":true}},"required":["watch"],"additionalProperties":true},"error":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"},"retryAfter":{"type":"integer"},"details":{"type":"object"}},"required":["code","message"],"additionalProperties":false},"meta":{"type":"object","properties":{"requestId":{"type":"string"},"serverTime":{"type":"string","format":"date-time"},"apiVersion":{"const":"v1"}},"required":["requestId","serverTime","apiVersion"],"additionalProperties":false}}}}}},"400":{"description":"Structured error. Respect Retry-After. Use the same idempotency key after network or provider uncertainty.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"401":{"description":"Structured error. Respect Retry-After. Use the same idempotency key after network or provider uncertainty.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"403":{"description":"Structured error. Respect Retry-After. Use the same idempotency key after network or provider uncertainty.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"404":{"description":"Structured error. Respect Retry-After. Use the same idempotency key after network or provider uncertainty.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"405":{"description":"Structured error. Respect Retry-After. Use the same idempotency key after network or provider uncertainty.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"409":{"description":"Structured error. Respect Retry-After. Use the same idempotency key after network or provider uncertainty.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"410":{"description":"Structured error. Respect Retry-After. Use the same idempotency key after network or provider uncertainty.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"413":{"description":"Structured error. Respect Retry-After. Use the same idempotency key after network or provider uncertainty.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"429":{"description":"Structured error. Respect Retry-After. Use the same idempotency key after network or provider uncertainty.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"500":{"description":"Structured error. Respect Retry-After. Use the same idempotency key after network or provider uncertainty.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"502":{"description":"Structured error. Respect Retry-After. Use the same idempotency key after network or provider uncertainty.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"503":{"description":"Structured error. Respect Retry-After. Use the same idempotency key after network or provider uncertainty.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}}}}},"/watches/{id}/events":{"get":{"operationId":"getWatchesIdEvents","summary":"Read owned alert delivery history","security":[{"bearerAuth":[]}],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Operation result in data. For payments only fulfilled means credits were granted.","content":{"application/json":{"schema":{"type":"object","required":["ok","data","meta"],"properties":{"ok":{"const":true},"data":{"type":"object","properties":{"events":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"triggeredAt":{"type":"string","format":"date-time"},"deliveryStatus":{"enum":["queued","sent","delivered","failed"]},"channel":{"enum":["push","sms"]},"resultsUrl":{"type":"string"},"firstBookingUrl":{"anyOf":[{"type":"string"},{"type":"null"}]}},"required":["id","triggeredAt","deliveryStatus","channel","resultsUrl","firstBookingUrl"],"additionalProperties":true}}},"required":["events"],"additionalProperties":true},"error":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"},"retryAfter":{"type":"integer"},"details":{"type":"object"}},"required":["code","message"],"additionalProperties":false},"meta":{"type":"object","properties":{"requestId":{"type":"string"},"serverTime":{"type":"string","format":"date-time"},"apiVersion":{"const":"v1"}},"required":["requestId","serverTime","apiVersion"],"additionalProperties":false}}}}}},"400":{"description":"Structured error. Respect Retry-After. Use the same idempotency key after network or provider uncertainty.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"401":{"description":"Structured error. Respect Retry-After. Use the same idempotency key after network or provider uncertainty.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"403":{"description":"Structured error. Respect Retry-After. Use the same idempotency key after network or provider uncertainty.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"404":{"description":"Structured error. Respect Retry-After. Use the same idempotency key after network or provider uncertainty.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"405":{"description":"Structured error. Respect Retry-After. Use the same idempotency key after network or provider uncertainty.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"409":{"description":"Structured error. Respect Retry-After. Use the same idempotency key after network or provider uncertainty.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"410":{"description":"Structured error. Respect Retry-After. Use the same idempotency key after network or provider uncertainty.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"413":{"description":"Structured error. Respect Retry-After. Use the same idempotency key after network or provider uncertainty.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"429":{"description":"Structured error. Respect Retry-After. Use the same idempotency key after network or provider uncertainty.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"500":{"description":"Structured error. Respect Retry-After. Use the same idempotency key after network or provider uncertainty.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"502":{"description":"Structured error. Respect Retry-After. Use the same idempotency key after network or provider uncertainty.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"503":{"description":"Structured error. Respect Retry-After. Use the same idempotency key after network or provider uncertainty.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}}}}},"/account/preferences":{"get":{"operationId":"getAccountPreferences","summary":"Read or change notification preferences","security":[{"bearerAuth":[]}],"parameters":[],"responses":{"200":{"description":"Operation result in data. For payments only fulfilled means credits were granted.","content":{"application/json":{"schema":{"type":"object","required":["ok","data","meta"],"properties":{"ok":{"const":true},"data":{"type":"object","properties":{"alertPreferences":{"type":"object","properties":{"pushEnabled":{"type":"boolean"},"smsEnabled":{"type":"boolean"},"emailEnabled":{"type":"boolean"}},"required":["pushEnabled","smsEnabled","emailEnabled"],"additionalProperties":true},"limits":{"type":"object"},"tier":{"type":"string"},"quietHours":{"type":"null"}},"required":["alertPreferences","limits","tier","quietHours"],"additionalProperties":true},"error":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"},"retryAfter":{"type":"integer"},"details":{"type":"object"}},"required":["code","message"],"additionalProperties":false},"meta":{"type":"object","properties":{"requestId":{"type":"string"},"serverTime":{"type":"string","format":"date-time"},"apiVersion":{"const":"v1"}},"required":["requestId","serverTime","apiVersion"],"additionalProperties":false}}}}}},"400":{"description":"Structured error. Respect Retry-After. Use the same idempotency key after network or provider uncertainty.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"401":{"description":"Structured error. Respect Retry-After. Use the same idempotency key after network or provider uncertainty.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"403":{"description":"Structured error. Respect Retry-After. Use the same idempotency key after network or provider uncertainty.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"404":{"description":"Structured error. Respect Retry-After. Use the same idempotency key after network or provider uncertainty.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"405":{"description":"Structured error. Respect Retry-After. Use the same idempotency key after network or provider uncertainty.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"409":{"description":"Structured error. Respect Retry-After. Use the same idempotency key after network or provider uncertainty.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"410":{"description":"Structured error. Respect Retry-After. Use the same idempotency key after network or provider uncertainty.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"413":{"description":"Structured error. Respect Retry-After. Use the same idempotency key after network or provider uncertainty.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"429":{"description":"Structured error. Respect Retry-After. Use the same idempotency key after network or provider uncertainty.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"500":{"description":"Structured error. Respect Retry-After. Use the same idempotency key after network or provider uncertainty.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"502":{"description":"Structured error. Respect Retry-After. Use the same idempotency key after network or provider uncertainty.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"503":{"description":"Structured error. Respect Retry-After. Use the same idempotency key after network or provider uncertainty.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}}}},"patch":{"operationId":"patchAccountPreferences","summary":"Read or change notification preferences","security":[{"bearerAuth":[]}],"parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"alertPreferences":{"type":"object","properties":{"pushEnabled":{"type":"boolean"},"smsEnabled":{"type":"boolean"}},"required":[],"additionalProperties":false}},"required":["alertPreferences"],"additionalProperties":false}}}},"responses":{"200":{"description":"Operation result in data. For payments only fulfilled means credits were granted.","content":{"application/json":{"schema":{"type":"object","required":["ok","data","meta"],"properties":{"ok":{"const":true},"data":{"type":"object","properties":{"alertPreferences":{"type":"object","properties":{"pushEnabled":{"type":"boolean"},"smsEnabled":{"type":"boolean"},"emailEnabled":{"type":"boolean"}},"required":["pushEnabled","smsEnabled","emailEnabled"],"additionalProperties":true},"limits":{"type":"object"},"tier":{"type":"string"},"quietHours":{"type":"null"}},"required":["alertPreferences","limits","tier","quietHours"],"additionalProperties":true},"error":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"},"retryAfter":{"type":"integer"},"details":{"type":"object"}},"required":["code","message"],"additionalProperties":false},"meta":{"type":"object","properties":{"requestId":{"type":"string"},"serverTime":{"type":"string","format":"date-time"},"apiVersion":{"const":"v1"}},"required":["requestId","serverTime","apiVersion"],"additionalProperties":false}}}}}},"400":{"description":"Structured error. Respect Retry-After. Use the same idempotency key after network or provider uncertainty.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"401":{"description":"Structured error. Respect Retry-After. Use the same idempotency key after network or provider uncertainty.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"403":{"description":"Structured error. Respect Retry-After. Use the same idempotency key after network or provider uncertainty.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"404":{"description":"Structured error. Respect Retry-After. Use the same idempotency key after network or provider uncertainty.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"405":{"description":"Structured error. Respect Retry-After. Use the same idempotency key after network or provider uncertainty.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"409":{"description":"Structured error. Respect Retry-After. Use the same idempotency key after network or provider uncertainty.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"410":{"description":"Structured error. Respect Retry-After. Use the same idempotency key after network or provider uncertainty.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"413":{"description":"Structured error. Respect Retry-After. Use the same idempotency key after network or provider uncertainty.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"429":{"description":"Structured error. Respect Retry-After. Use the same idempotency key after network or provider uncertainty.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"500":{"description":"Structured error. Respect Retry-After. Use the same idempotency key after network or provider uncertainty.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"502":{"description":"Structured error. Respect Retry-After. Use the same idempotency key after network or provider uncertainty.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"503":{"description":"Structured error. Respect Retry-After. Use the same idempotency key after network or provider uncertainty.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}}}}},"/credits/bundles":{"get":{"operationId":"getCreditsBundles","summary":"Read current prices and the merchant Stripe publishable key","security":[],"parameters":[],"responses":{"200":{"description":"Operation result in data. For payments only fulfilled means credits were granted.","content":{"application/json":{"schema":{"type":"object","required":["ok","data","meta"],"properties":{"ok":{"const":true},"data":{"type":"object","properties":{"purchasesEnabled":{"type":"boolean"},"currency":{"const":"aud"},"bundles":{"type":"array","items":{"type":"object","properties":{"code":{"type":"string"},"name":{"type":"string"},"quantity":{"type":"integer"},"activeCombinationLimit":{"type":"integer"},"priceAudCents":{"type":"integer"},"includesGst":{"type":"boolean"},"default":{"type":"boolean"},"recommended":{"type":"boolean"}},"required":["code","name","quantity","activeCombinationLimit","priceAudCents","includesGst","default","recommended"],"additionalProperties":true}},"stripePublishableKey":{"anyOf":[{"type":"string"},{"type":"null"}]},"paymentCredential":{"type":"string"}},"required":["purchasesEnabled","currency","bundles","stripePublishableKey","paymentCredential"],"additionalProperties":true},"error":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"},"retryAfter":{"type":"integer"},"details":{"type":"object"}},"required":["code","message"],"additionalProperties":false},"meta":{"type":"object","properties":{"requestId":{"type":"string"},"serverTime":{"type":"string","format":"date-time"},"apiVersion":{"const":"v1"}},"required":["requestId","serverTime","apiVersion"],"additionalProperties":false}}}}}},"400":{"description":"Structured error. Respect Retry-After. Use the same idempotency key after network or provider uncertainty.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"401":{"description":"Structured error. Respect Retry-After. Use the same idempotency key after network or provider uncertainty.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"403":{"description":"Structured error. Respect Retry-After. Use the same idempotency key after network or provider uncertainty.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"404":{"description":"Structured error. Respect Retry-After. Use the same idempotency key after network or provider uncertainty.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"405":{"description":"Structured error. Respect Retry-After. Use the same idempotency key after network or provider uncertainty.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"409":{"description":"Structured error. Respect Retry-After. Use the same idempotency key after network or provider uncertainty.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"410":{"description":"Structured error. Respect Retry-After. Use the same idempotency key after network or provider uncertainty.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"413":{"description":"Structured error. Respect Retry-After. Use the same idempotency key after network or provider uncertainty.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"429":{"description":"Structured error. Respect Retry-After. Use the same idempotency key after network or provider uncertainty.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"500":{"description":"Structured error. Respect Retry-After. Use the same idempotency key after network or provider uncertainty.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"502":{"description":"Structured error. Respect Retry-After. Use the same idempotency key after network or provider uncertainty.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"503":{"description":"Structured error. Respect Retry-After. Use the same idempotency key after network or provider uncertainty.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}}}}},"/credits/balance":{"get":{"operationId":"getCreditsBalance","summary":"Read credits, active alert limits and paused alerts","security":[{"bearerAuth":[]}],"parameters":[],"responses":{"200":{"description":"Operation result in data. For payments only fulfilled means credits were granted.","content":{"application/json":{"schema":{"type":"object","required":["ok","data","meta"],"properties":{"ok":{"const":true},"data":{"type":"object","properties":{"canCreateAlert":{"type":"boolean"},"freeUnlocksRemaining":{"type":"integer"},"purchasedUnlocksRemaining":{"type":"integer"},"availableUnlocks":{"type":"integer"},"activeCombinationCount":{"type":"integer"},"activeCombinationLimit":{"type":"integer"},"pausedWatchTokens":{"type":"array","items":{"type":"string"}},"creditPauseAt":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}]},"state":{"type":"string"},"monetizationEnabled":{"type":"boolean"},"purchasesEnabled":{"type":"boolean"}},"required":["canCreateAlert","freeUnlocksRemaining","purchasedUnlocksRemaining","availableUnlocks","activeCombinationCount","activeCombinationLimit","pausedWatchTokens","creditPauseAt","state","monetizationEnabled","purchasesEnabled"],"additionalProperties":true},"error":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"},"retryAfter":{"type":"integer"},"details":{"type":"object"}},"required":["code","message"],"additionalProperties":false},"meta":{"type":"object","properties":{"requestId":{"type":"string"},"serverTime":{"type":"string","format":"date-time"},"apiVersion":{"const":"v1"}},"required":["requestId","serverTime","apiVersion"],"additionalProperties":false}}}}}},"400":{"description":"Structured error. Respect Retry-After. Use the same idempotency key after network or provider uncertainty.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"401":{"description":"Structured error. Respect Retry-After. Use the same idempotency key after network or provider uncertainty.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"403":{"description":"Structured error. Respect Retry-After. Use the same idempotency key after network or provider uncertainty.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"404":{"description":"Structured error. Respect Retry-After. Use the same idempotency key after network or provider uncertainty.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"405":{"description":"Structured error. Respect Retry-After. Use the same idempotency key after network or provider uncertainty.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"409":{"description":"Structured error. Respect Retry-After. Use the same idempotency key after network or provider uncertainty.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"410":{"description":"Structured error. Respect Retry-After. Use the same idempotency key after network or provider uncertainty.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"413":{"description":"Structured error. Respect Retry-After. Use the same idempotency key after network or provider uncertainty.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"429":{"description":"Structured error. Respect Retry-After. Use the same idempotency key after network or provider uncertainty.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"500":{"description":"Structured error. Respect Retry-After. Use the same idempotency key after network or provider uncertainty.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"502":{"description":"Structured error. Respect Retry-After. Use the same idempotency key after network or provider uncertainty.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"503":{"description":"Structured error. Respect Retry-After. Use the same idempotency key after network or provider uncertainty.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}}}}},"/credits/history":{"get":{"operationId":"getCreditsHistory","summary":"Read the account credit ledger with pagination","security":[{"bearerAuth":[]}],"parameters":[{"name":"before","in":"query","required":false,"schema":{"type":"integer","minimum":1}},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","minimum":1,"maximum":100}}],"responses":{"200":{"description":"Operation result in data. For payments only fulfilled means credits were granted.","content":{"application/json":{"schema":{"type":"object","required":["ok","data","meta"],"properties":{"ok":{"const":true},"data":{"type":"object","properties":{"entries":{"type":"array","items":{"type":"object","properties":{"accountSequence":{"type":"integer"},"kind":{"enum":["FREE_GRANT","PURCHASE_GRANT","MATCH_UNLOCK_DEBIT","ADJUSTMENT"]},"freeDelta":{"type":"integer"},"purchasedDelta":{"type":"integer"},"createdAt":{"type":"string","format":"date-time"}},"required":["accountSequence","kind","freeDelta","purchasedDelta","createdAt"],"additionalProperties":true}},"nextBefore":{"anyOf":[{"type":"integer"},{"type":"null"}]}},"required":["entries","nextBefore"],"additionalProperties":true},"error":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"},"retryAfter":{"type":"integer"},"details":{"type":"object"}},"required":["code","message"],"additionalProperties":false},"meta":{"type":"object","properties":{"requestId":{"type":"string"},"serverTime":{"type":"string","format":"date-time"},"apiVersion":{"const":"v1"}},"required":["requestId","serverTime","apiVersion"],"additionalProperties":false}}}}}},"400":{"description":"Structured error. Respect Retry-After. Use the same idempotency key after network or provider uncertainty.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"401":{"description":"Structured error. Respect Retry-After. Use the same idempotency key after network or provider uncertainty.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"403":{"description":"Structured error. Respect Retry-After. Use the same idempotency key after network or provider uncertainty.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"404":{"description":"Structured error. Respect Retry-After. Use the same idempotency key after network or provider uncertainty.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"405":{"description":"Structured error. Respect Retry-After. Use the same idempotency key after network or provider uncertainty.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"409":{"description":"Structured error. Respect Retry-After. Use the same idempotency key after network or provider uncertainty.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"410":{"description":"Structured error. Respect Retry-After. Use the same idempotency key after network or provider uncertainty.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"413":{"description":"Structured error. Respect Retry-After. Use the same idempotency key after network or provider uncertainty.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"429":{"description":"Structured error. Respect Retry-After. Use the same idempotency key after network or provider uncertainty.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"500":{"description":"Structured error. Respect Retry-After. Use the same idempotency key after network or provider uncertainty.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"502":{"description":"Structured error. Respect Retry-After. Use the same idempotency key after network or provider uncertainty.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"503":{"description":"Structured error. Respect Retry-After. Use the same idempotency key after network or provider uncertainty.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}}}}},"/payments":{"post":{"operationId":"postPayments","summary":"Purchase alert credits using a one-use Stripe ConfirmationToken; never submit raw card data","security":[{"bearerAuth":[]}],"parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"bundleCode":{"enum":["credits_5","credits_10","credits_25"]},"confirmationToken":{"type":"string","pattern":"^ctoken_[A-Za-z0-9_]+$","maxLength":255},"expectedAmountCents":{"type":"integer","minimum":1},"currency":{"const":"aud"},"idempotencyKey":{"type":"string","minLength":8,"maxLength":128,"pattern":"^[A-Za-z0-9_-]{8,128}$"}},"required":["bundleCode","confirmationToken","expectedAmountCents","currency","idempotencyKey"],"additionalProperties":false}}}},"responses":{"200":{"description":"Operation result in data. For payments only fulfilled means credits were granted.","content":{"application/json":{"schema":{"type":"object","required":["ok","data","meta"],"properties":{"ok":{"const":true},"data":{"oneOf":[{"type":"object","properties":{"id":{"type":"string"},"status":{"const":"pending"},"retry":{"type":"string"}},"required":["id","status","retry"],"additionalProperties":true},{"type":"object","properties":{"id":{"type":"string"},"paymentIntentId":{"type":"string"},"status":{"enum":["fulfilled","requires_action","processing","requires_payment_method","requires_confirmation","canceled"]},"amountCents":{"type":"integer"},"currency":{"const":"aud"},"credits":{"type":"integer"},"nextAction":{"type":"object","properties":{"type":{"const":"stripe_sdk"},"clientSecret":{"anyOf":[{"type":"string"},{"type":"null"}]},"instruction":{"type":"string"}},"required":["type","clientSecret","instruction"],"additionalProperties":true},"failureCode":{"const":"payment_declined"}},"required":["id","paymentIntentId","status","amountCents","currency","credits"],"additionalProperties":true}]},"error":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"},"retryAfter":{"type":"integer"},"details":{"type":"object"}},"required":["code","message"],"additionalProperties":false},"meta":{"type":"object","properties":{"requestId":{"type":"string"},"serverTime":{"type":"string","format":"date-time"},"apiVersion":{"const":"v1"}},"required":["requestId","serverTime","apiVersion"],"additionalProperties":false}}}}}},"400":{"description":"Structured error. Respect Retry-After. Use the same idempotency key after network or provider uncertainty.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"401":{"description":"Structured error. Respect Retry-After. Use the same idempotency key after network or provider uncertainty.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"403":{"description":"Structured error. Respect Retry-After. Use the same idempotency key after network or provider uncertainty.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"404":{"description":"Structured error. Respect Retry-After. Use the same idempotency key after network or provider uncertainty.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"405":{"description":"Structured error. Respect Retry-After. Use the same idempotency key after network or provider uncertainty.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"409":{"description":"Structured error. Respect Retry-After. Use the same idempotency key after network or provider uncertainty.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"410":{"description":"Structured error. Respect Retry-After. Use the same idempotency key after network or provider uncertainty.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"413":{"description":"Structured error. Respect Retry-After. Use the same idempotency key after network or provider uncertainty.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"429":{"description":"Structured error. Respect Retry-After. Use the same idempotency key after network or provider uncertainty.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"500":{"description":"Structured error. Respect Retry-After. Use the same idempotency key after network or provider uncertainty.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"502":{"description":"Structured error. Respect Retry-After. Use the same idempotency key after network or provider uncertainty.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"503":{"description":"Structured error. Respect Retry-After. Use the same idempotency key after network or provider uncertainty.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}}}}},"/payments/{id}":{"get":{"operationId":"getPaymentsId","summary":"Poll an owned payment and reconcile its credit grant; amount and reference form the API receipt","security":[{"bearerAuth":[]}],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Operation result in data. For payments only fulfilled means credits were granted.","content":{"application/json":{"schema":{"type":"object","required":["ok","data","meta"],"properties":{"ok":{"const":true},"data":{"oneOf":[{"type":"object","properties":{"id":{"type":"string"},"status":{"const":"pending"},"retry":{"type":"string"}},"required":["id","status","retry"],"additionalProperties":true},{"type":"object","properties":{"id":{"type":"string"},"paymentIntentId":{"type":"string"},"status":{"enum":["fulfilled","requires_action","processing","requires_payment_method","requires_confirmation","canceled"]},"amountCents":{"type":"integer"},"currency":{"const":"aud"},"credits":{"type":"integer"},"nextAction":{"type":"object","properties":{"type":{"const":"stripe_sdk"},"clientSecret":{"anyOf":[{"type":"string"},{"type":"null"}]},"instruction":{"type":"string"}},"required":["type","clientSecret","instruction"],"additionalProperties":true},"failureCode":{"const":"payment_declined"}},"required":["id","paymentIntentId","status","amountCents","currency","credits"],"additionalProperties":true}]},"error":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"},"retryAfter":{"type":"integer"},"details":{"type":"object"}},"required":["code","message"],"additionalProperties":false},"meta":{"type":"object","properties":{"requestId":{"type":"string"},"serverTime":{"type":"string","format":"date-time"},"apiVersion":{"const":"v1"}},"required":["requestId","serverTime","apiVersion"],"additionalProperties":false}}}}}},"400":{"description":"Structured error. Respect Retry-After. Use the same idempotency key after network or provider uncertainty.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"401":{"description":"Structured error. Respect Retry-After. Use the same idempotency key after network or provider uncertainty.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"403":{"description":"Structured error. Respect Retry-After. Use the same idempotency key after network or provider uncertainty.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"404":{"description":"Structured error. Respect Retry-After. Use the same idempotency key after network or provider uncertainty.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"405":{"description":"Structured error. Respect Retry-After. Use the same idempotency key after network or provider uncertainty.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"409":{"description":"Structured error. Respect Retry-After. Use the same idempotency key after network or provider uncertainty.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"410":{"description":"Structured error. Respect Retry-After. Use the same idempotency key after network or provider uncertainty.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"413":{"description":"Structured error. Respect Retry-After. Use the same idempotency key after network or provider uncertainty.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"429":{"description":"Structured error. Respect Retry-After. Use the same idempotency key after network or provider uncertainty.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"500":{"description":"Structured error. Respect Retry-After. Use the same idempotency key after network or provider uncertainty.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"502":{"description":"Structured error. Respect Retry-After. Use the same idempotency key after network or provider uncertainty.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"503":{"description":"Structured error. Respect Retry-After. Use the same idempotency key after network or provider uncertainty.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}}}}}},"components":{"securitySchemes":{"bearerAuth":{"type":"http","scheme":"bearer","description":"Opaque token from POST /session/verify. Store securely; revoke with POST /session/logout."}},"schemas":{"Envelope":{"type":"object","required":["ok","meta"],"properties":{"ok":{"type":"boolean"},"data":{"type":"object","additionalProperties":true},"error":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"},"retryAfter":{"type":"integer"},"details":{"type":"object"}},"required":["code","message"],"additionalProperties":false},"meta":{"type":"object","properties":{"requestId":{"type":"string"},"serverTime":{"type":"string","format":"date-time"},"apiVersion":{"const":"v1"}},"required":["requestId","serverTime","apiVersion"],"additionalProperties":false}}}}}}