{"openapi":"3.1.0","info":{"title":"nfrax-api","version":"0.1.0"},"paths":{"/ping":{"get":{"tags":["Health Check"],"summary":"Ping","description":"Operation to check if the service is up and running","operationId":"health_ping_get","responses":{"200":{"description":"Ping success","content":{"application/json":{"schema":{"type":"object","additionalProperties":true},"example":{"status":"ok"}}},"headers":{"ETag":{"$ref":"#/components/headers/ETag"},"Last-Modified":{"$ref":"#/components/headers/LastModified"},"X-Request-Id":{"$ref":"#/components/headers/XRequestId"},"X-RateLimit-Limit":{"$ref":"#/components/headers/XRateLimitLimit"},"X-RateLimit-Remaining":{"$ref":"#/components/headers/XRateLimitRemaining"},"X-RateLimit-Reset":{"$ref":"#/components/headers/XRateLimitReset"}}},"400":{"$ref":"#/components/responses/BadRequest"},"422":{"$ref":"#/components/responses/ValidationError"},"500":{"$ref":"#/components/responses/ServerError"},"401":{"$ref":"#/components/responses/Unauthorized"},"403":{"$ref":"#/components/responses/Forbidden"},"404":{"$ref":"#/components/responses/NotFound"},"409":{"$ref":"#/components/responses/Conflict"},"429":{"$ref":"#/components/responses/TooManyRequests"},"304":{"description":"Not Modified","headers":{"ETag":{"$ref":"#/components/headers/ETag"},"Last-Modified":{"$ref":"#/components/headers/LastModified"},"X-Request-Id":{"$ref":"#/components/headers/XRequestId"}}}},"security":[],"parameters":[{"$ref":"#/components/parameters/IfNoneMatch"},{"$ref":"#/components/parameters/IfModifiedSince"}],"x-codeSamples":[{"lang":"bash","label":"curl","source":"curl -X GET '//ping'"},{"lang":"bash","label":"httpie","source":"http GET '//ping'"}]}}},"components":{"schemas":{"Problem":{"type":"object","properties":{"type":{"type":"string","format":"uri","description":"URI identifying the error type"},"title":{"type":"string","description":"Short, human-readable summary"},"status":{"type":"integer","format":"int32","description":"HTTP status code"},"detail":{"type":"string","description":"Human-readable explanation"},"instance":{"type":"string","format":"uri-reference","description":"URI reference for this occurrence"},"code":{"type":"string","description":"Stable application error code"},"errors":{"type":"array","description":"Optional list of field/validation errors","items":{"type":"object","properties":{"loc":{"type":"array","items":{"type":"string"}},"msg":{"type":"string"},"type":{"type":"string"}}}},"trace_id":{"type":"string","description":"Correlation/trace id (if available)"}},"required":["title","status"]}},"responses":{"BadRequest":{"description":"The request is malformed or missing required fields","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"},"examples":{"default":{"value":{"type":"about:blank","title":"Bad Request","status":400,"detail":"Invalid request payload.","instance":"https://api.example.com/request/abc123","code":"BAD_REQUEST","trace_id":"00000000000000000000000000000000"}}}}}},"Unauthorized":{"description":"Authentication required or failed","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"},"examples":{"default":{"value":{"type":"about:blank","title":"Unauthorized","status":401,"detail":"Missing or invalid credentials.","instance":"https://api.example.com/request/abc123","code":"UNAUTHORIZED","trace_id":"00000000000000000000000000000000"}}}}}},"Forbidden":{"description":"The authenticated principal does not have access","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"},"examples":{"default":{"value":{"type":"about:blank","title":"Forbidden","status":403,"detail":"You do not have permission to perform this action.","instance":"https://api.example.com/request/abc123","code":"FORBIDDEN","trace_id":"00000000000000000000000000000000"}}}}}},"NotFound":{"description":"The requested resource was not found","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"},"examples":{"default":{"value":{"type":"about:blank","title":"Not Found","status":404,"detail":"Resource not found.","instance":"https://api.example.com/request/abc123","code":"NOT_FOUND","trace_id":"00000000000000000000000000000000"}}}}}},"Conflict":{"description":"A conflicting resource already exists or constraints were violated","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"},"examples":{"default":{"value":{"type":"about:blank","title":"Conflict","status":409,"detail":"Record already exists.","instance":"https://api.example.com/request/abc123","code":"CONFLICT","trace_id":"00000000000000000000000000000000"}}}}}},"ValidationError":{"description":"Request failed validation","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"},"examples":{"default":{"value":{"type":"about:blank","title":"Unprocessable Entity","status":422,"detail":"Validation failed.","instance":"https://api.example.com/request/abc123","code":"VALIDATION_ERROR","trace_id":"00000000000000000000000000000000","errors":[{"loc":["body","email"],"msg":"value is not a valid email address","type":"value_error.email"}]}}}}}},"TooManyRequests":{"description":"Rate limit exceeded","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"},"examples":{"default":{"value":{"type":"about:blank","title":"Too Many Requests","status":429,"detail":"Rate limit exceeded. Try again later.","instance":"https://api.example.com/request/abc123","code":"RATE_LIMITED","trace_id":"00000000000000000000000000000000"}}}}}},"ServerError":{"description":"Unexpected server error","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"},"examples":{"default":{"value":{"type":"about:blank","title":"Internal Server Error","status":500,"detail":"Something went wrong. Please contact support.","instance":"https://api.example.com/request/abc123","code":"INTERNAL_ERROR","trace_id":"00000000000000000000000000000000"}}}}}}},"parameters":{"IdempotencyKey":{"name":"Idempotency-Key","in":"header","required":false,"schema":{"type":"string"},"description":"Provide to make the request idempotent for 24h."},"IfNoneMatch":{"name":"If-None-Match","in":"header","required":false,"schema":{"type":"string"},"description":"Conditional GET (ETag)."},"IfModifiedSince":{"name":"If-Modified-Since","in":"header","required":false,"schema":{"type":"string"},"description":"Conditional GET. HTTP-date per RFC 9110 (e.g. 'Wed, 01 Jan 2025 00:00:00 GMT')."},"IfMatch":{"name":"If-Match","in":"header","required":false,"schema":{"type":"string"},"description":"Optimistic concurrency for updates."}},"headers":{"ETag":{"schema":{"type":"string"},"description":"Opaque entity tag."},"LastModified":{"schema":{"type":"string"},"description":"Last modification time, HTTP-date per RFC 9110."},"XRateLimitLimit":{"schema":{"type":"integer"},"description":"Tokens in window."},"XRateLimitRemaining":{"schema":{"type":"integer"},"description":"Remaining tokens."},"XRateLimitReset":{"schema":{"type":"integer"},"description":"Unix reset time."},"XRequestId":{"schema":{"type":"string"},"description":"Correlation id."}},"securitySchemes":{"OAuth2PasswordBearer":{"type":"oauth2","flows":{"password":{"tokenUrl":"/users/login","scopes":{}}}}}},"servers":[{"url":"/"}],"tags":[{"name":"Health Check","description":"Operations related to Health Check."}]}