{"openapi":"3.1.0","info":{"title":"Suggency API","version":"1.0.0-beta","description":"Read-only REST API for public bridge, profile, and collection data."},"servers":[{"url":"https://api.suggency.com/v1/api"}],"components":{"securitySchemes":{"ApiKeyAuth":{"type":"http","scheme":"bearer","bearerFormat":"sgy_"}}},"x-error-codes":[{"code":"missing_api_key","status":401,"description":"No Authorization header was sent."},{"code":"invalid_api_key","status":401,"description":"The key was not found."},{"code":"key_revoked","status":401,"description":"The key was revoked."},{"code":"key_expired","status":401,"description":"The key has passed its expiry."},{"code":"insufficient_scope","status":403,"description":"The key lacks the required scope."},{"code":"api_access_revoked","status":401,"description":"API access for this account is not approved."},{"code":"api_access_required","status":403,"description":"Request and get API access approved before creating keys."},{"code":"rate_limited","status":429,"description":"Too many requests. Honor Retry-After."},{"code":"too_many_invalid_attempts","status":429,"description":"Too many invalid key attempts from your IP."},{"code":"not_found","status":404,"description":"The resource does not exist."},{"code":"validation_failed","status":400,"description":"A request parameter was invalid."},{"code":"service_unavailable","status":503,"description":"Temporary outage. Retry with backoff."},{"code":"internal_error","status":500,"description":"An unexpected error occurred."}],"paths":{"/stats":{"get":{"summary":"Platform-wide counters (bridges, suggestors, passes).","security":[{"ApiKeyAuth":["read:public"]}],"parameters":[],"responses":{"200":{"description":"OK"},"401":{"description":"Missing or invalid API key"},"429":{"description":"Rate limited"}}}},"/bridges":{"get":{"summary":"List published bridges (cursor paginated).","security":[{"ApiKeyAuth":["read:public"]}],"parameters":[{"name":"limit","in":"query","required":false,"description":"Page size (default 20, max 100).","schema":{"type":"integer"}},{"name":"cursor","in":"query","required":false,"description":"Opaque cursor from next_cursor.","schema":{"type":"string"}},{"name":"category","in":"query","required":false,"description":"Filter by category.","schema":{"type":"string"}},{"name":"q","in":"query","required":false,"description":"Full-text search.","schema":{"type":"string"}}],"responses":{"200":{"description":"OK"},"401":{"description":"Missing or invalid API key"},"429":{"description":"Rate limited"}}}},"/bridges/{slug}":{"get":{"summary":"Fetch a single bridge by slug.","security":[{"ApiKeyAuth":["read:public"]}],"parameters":[{"name":"slug","in":"path","required":true,"description":"Bridge slug.","schema":{"type":"string"}}],"responses":{"200":{"description":"OK"},"401":{"description":"Missing or invalid API key"},"429":{"description":"Rate limited"}}}},"/profiles/{username}":{"get":{"summary":"Public profile with published bridges.","security":[{"ApiKeyAuth":["read:public"]}],"parameters":[{"name":"username","in":"path","required":true,"description":"Profile username.","schema":{"type":"string"}}],"responses":{"200":{"description":"OK"},"401":{"description":"Missing or invalid API key"},"429":{"description":"Rate limited"}}}},"/me":{"get":{"summary":"The authenticated key owner's profile.","security":[{"ApiKeyAuth":["read:me"]}],"parameters":[],"responses":{"200":{"description":"OK"},"401":{"description":"Missing or invalid API key"},"429":{"description":"Rate limited"}}}}}}