{"openapi":"3.1.0","info":{"title":"Findivenow public read-only API","version":"1.0.0","description":"Hong Kong fun-dive catalog. No authentication or write operations. See /for-agents for date, filtering, unknown-value and attribution rules."},"servers":[{"url":"https://findivenow.com"}],"paths":{"/api/v1/public/catalog":{"get":{"operationId":"CatalogPublicController_catalogSnapshot","parameters":[],"responses":{"200":{"description":"Successful response","headers":{"X-Request-ID":{"schema":{"type":"string"},"description":"Correlates this request with safe server logs"},"Cache-Control":{"schema":{"type":"string","enum":["no-store"]}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PublicCatalog"}}}},"400":{"description":"400 error; details are safe for the caller","headers":{"X-Request-ID":{"schema":{"type":"string"},"description":"Correlates this request with safe server logs"},"Cache-Control":{"schema":{"type":"string","enum":["no-store"]}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"401":{"description":"401 error; details are safe for the caller","headers":{"X-Request-ID":{"schema":{"type":"string"},"description":"Correlates this request with safe server logs"},"Cache-Control":{"schema":{"type":"string","enum":["no-store"]}},"WWW-Authenticate":{"schema":{"type":"string","enum":["Bearer"]}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"403":{"description":"403 error; details are safe for the caller","headers":{"X-Request-ID":{"schema":{"type":"string"},"description":"Correlates this request with safe server logs"},"Cache-Control":{"schema":{"type":"string","enum":["no-store"]}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"404":{"description":"404 error; details are safe for the caller","headers":{"X-Request-ID":{"schema":{"type":"string"},"description":"Correlates this request with safe server logs"},"Cache-Control":{"schema":{"type":"string","enum":["no-store"]}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"409":{"description":"409 error; details are safe for the caller","headers":{"X-Request-ID":{"schema":{"type":"string"},"description":"Correlates this request with safe server logs"},"Cache-Control":{"schema":{"type":"string","enum":["no-store"]}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"412":{"description":"412 error; details are safe for the caller","headers":{"X-Request-ID":{"schema":{"type":"string"},"description":"Correlates this request with safe server logs"},"Cache-Control":{"schema":{"type":"string","enum":["no-store"]}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"413":{"description":"413 error; details are safe for the caller","headers":{"X-Request-ID":{"schema":{"type":"string"},"description":"Correlates this request with safe server logs"},"Cache-Control":{"schema":{"type":"string","enum":["no-store"]}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"428":{"description":"428 error; details are safe for the caller","headers":{"X-Request-ID":{"schema":{"type":"string"},"description":"Correlates this request with safe server logs"},"Cache-Control":{"schema":{"type":"string","enum":["no-store"]}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"429":{"description":"429 error; details are safe for the caller","headers":{"X-Request-ID":{"schema":{"type":"string"},"description":"Correlates this request with safe server logs"},"Cache-Control":{"schema":{"type":"string","enum":["no-store"]}},"Retry-After":{"schema":{"type":"integer"},"description":"Seconds before retry"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"500":{"description":"500 error; details are safe for the caller","headers":{"X-Request-ID":{"schema":{"type":"string"},"description":"Correlates this request with safe server logs"},"Cache-Control":{"schema":{"type":"string","enum":["no-store"]}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"503":{"description":"503 error; details are safe for the caller","headers":{"X-Request-ID":{"schema":{"type":"string"},"description":"Correlates this request with safe server logs"},"Cache-Control":{"schema":{"type":"string","enum":["no-store"]}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}}},"summary":"Read the complete public catalog snapshot","tags":["Public catalog"]}},"/api/v1/public/site-config":{"get":{"operationId":"SupportController_read","parameters":[],"responses":{"200":{"description":"Successful response","headers":{"X-Request-ID":{"schema":{"type":"string"},"description":"Correlates this request with safe server logs"},"Cache-Control":{"schema":{"type":"string","enum":["no-store"]}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PublicSiteConfig"}}}},"400":{"description":"400 error; details are safe for the caller","headers":{"X-Request-ID":{"schema":{"type":"string"},"description":"Correlates this request with safe server logs"},"Cache-Control":{"schema":{"type":"string","enum":["no-store"]}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"401":{"description":"401 error; details are safe for the caller","headers":{"X-Request-ID":{"schema":{"type":"string"},"description":"Correlates this request with safe server logs"},"Cache-Control":{"schema":{"type":"string","enum":["no-store"]}},"WWW-Authenticate":{"schema":{"type":"string","enum":["Bearer"]}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"403":{"description":"403 error; details are safe for the caller","headers":{"X-Request-ID":{"schema":{"type":"string"},"description":"Correlates this request with safe server logs"},"Cache-Control":{"schema":{"type":"string","enum":["no-store"]}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"404":{"description":"404 error; details are safe for the caller","headers":{"X-Request-ID":{"schema":{"type":"string"},"description":"Correlates this request with safe server logs"},"Cache-Control":{"schema":{"type":"string","enum":["no-store"]}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"409":{"description":"409 error; details are safe for the caller","headers":{"X-Request-ID":{"schema":{"type":"string"},"description":"Correlates this request with safe server logs"},"Cache-Control":{"schema":{"type":"string","enum":["no-store"]}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"412":{"description":"412 error; details are safe for the caller","headers":{"X-Request-ID":{"schema":{"type":"string"},"description":"Correlates this request with safe server logs"},"Cache-Control":{"schema":{"type":"string","enum":["no-store"]}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"413":{"description":"413 error; details are safe for the caller","headers":{"X-Request-ID":{"schema":{"type":"string"},"description":"Correlates this request with safe server logs"},"Cache-Control":{"schema":{"type":"string","enum":["no-store"]}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"428":{"description":"428 error; details are safe for the caller","headers":{"X-Request-ID":{"schema":{"type":"string"},"description":"Correlates this request with safe server logs"},"Cache-Control":{"schema":{"type":"string","enum":["no-store"]}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"429":{"description":"429 error; details are safe for the caller","headers":{"X-Request-ID":{"schema":{"type":"string"},"description":"Correlates this request with safe server logs"},"Cache-Control":{"schema":{"type":"string","enum":["no-store"]}},"Retry-After":{"schema":{"type":"integer"},"description":"Seconds before retry"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"500":{"description":"500 error; details are safe for the caller","headers":{"X-Request-ID":{"schema":{"type":"string"},"description":"Correlates this request with safe server logs"},"Cache-Control":{"schema":{"type":"string","enum":["no-store"]}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"503":{"description":"503 error; details are safe for the caller","headers":{"X-Request-ID":{"schema":{"type":"string"},"description":"Correlates this request with safe server logs"},"Cache-Control":{"schema":{"type":"string","enum":["no-store"]}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}}},"summary":"Read configured public support contact channels","tags":["public"]}}},"components":{"schemas":{"PublicCatalog":{"type":"object","properties":{"schemaVersion":{"type":"number","const":1},"generatedAt":{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"},"nextDateBoundaryAt":{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"},"timeZone":{"type":"string","const":"Asia/Hong_Kong"},"today":{"type":"string","format":"date","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$"},"shops":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"},"name":{"type":"string","minLength":1,"maxLength":200},"published":{"type":"boolean","const":true},"introduction":{"type":"string","maxLength":10000},"region":{"type":"string","minLength":1,"maxLength":200},"image":{"type":"string","pattern":"^\\/api\\/v1\\/public\\/shops\\/[0-9a-f-]{36}\\/avatar\\/[0-9a-f]{64}$"},"channels":{"minItems":1,"maxItems":3,"type":"array","items":{"type":"string","enum":["whatsapp","instagram","facebook"]}},"contacts":{"minItems":1,"maxItems":3,"type":"array","items":{"type":"object","properties":{"channel":{"type":"string","enum":["whatsapp","instagram","facebook"]},"href":{"type":"string","maxLength":2048,"format":"uri"}},"required":["channel","href"],"additionalProperties":false}}},"required":["id","name","published","channels","contacts"],"additionalProperties":false}},"events":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"},"shopId":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"},"published":{"type":"boolean","const":true},"status":{"type":"string","enum":["scheduled","full","cancelled"]},"date":{"type":"string","format":"date","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$"},"name":{"type":"string","minLength":1,"maxLength":200},"regionId":{"type":"string","minLength":1,"maxLength":64,"pattern":"^[a-z0-9]+(?:[-_][a-z0-9]+)*$"},"siteIds":{"maxItems":32,"type":"array","items":{"type":"string","minLength":1,"maxLength":64,"pattern":"^[a-z0-9]+(?:[-_][a-z0-9]+)*$"}},"siteText":{"type":"string","minLength":1,"maxLength":200},"price":{"type":"number","minimum":0,"maximum":21474836.47},"qualifications":{"maxItems":2,"type":"array","items":{"type":"string","enum":["OW","AOW"]}},"specialties":{"maxItems":16,"type":"array","items":{"type":"string","minLength":1,"maxLength":200}},"description":{"type":"string","maxLength":10000},"meeting":{"type":"string","maxLength":1000},"source":{"type":"object","properties":{"label":{"type":"string","minLength":1,"maxLength":200},"url":{"type":"string","maxLength":2048,"format":"uri"}},"required":["label"],"additionalProperties":false},"image":{"anyOf":[{"type":"string","maxLength":2048,"pattern":"^\\/images\\/[a-zA-Z0-9_/-]+\\.(?:jpg|jpeg|png|webp|avif|svg)$"},{"type":"string","maxLength":2048,"format":"uri"}]}},"required":["id","shopId","published","status","date","siteIds","qualifications","specialties"],"additionalProperties":false}},"regions":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string","minLength":1,"maxLength":64,"pattern":"^[a-z0-9]+(?:[-_][a-z0-9]+)*$"},"name":{"type":"string","minLength":1,"maxLength":200},"sites":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string","minLength":1,"maxLength":64,"pattern":"^[a-z0-9]+(?:[-_][a-z0-9]+)*$"},"name":{"type":"string","minLength":1,"maxLength":200}},"required":["id","name"],"additionalProperties":false}}},"required":["id","name","sites"],"additionalProperties":false}},"qualifications":{"maxItems":2,"type":"array","items":{"type":"string","enum":["OW","AOW"]}},"specialties":{"maxItems":1000,"type":"array","items":{"type":"string","minLength":1,"maxLength":200}}},"required":["schemaVersion","generatedAt","nextDateBoundaryAt","timeZone","today","shops","events","regions","qualifications","specialties"],"additionalProperties":false},"PublicSiteConfig":{"type":"object","properties":{"support":{"type":"object","properties":{"whatsappHref":{"type":"string","maxLength":2048,"format":"uri"},"email":{"type":"string","maxLength":254,"format":"email","pattern":"^(?:[A-Za-z0-9_'+\\-]+\\.)*[A-Za-z0-9_'+\\-]*[A-Za-z0-9_+-]@(?:[A-Za-z0-9][A-Za-z0-9\\-]*\\.)+[A-Za-z]{2,}$"}},"additionalProperties":false}},"required":["support"],"additionalProperties":false},"ApiError":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"},"requestId":{"type":"string"},"issues":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"code":{"type":"string"}},"required":["path","code"],"additionalProperties":false}},"currentRevision":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"currentVersion":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991}},"required":["code","message","requestId"],"additionalProperties":false}}}}