{"components": {"parameters": {"IdempotencyKey": {"description": "Recommended for every receipt-producing request. Reusing a key with a different request body returns 409.", "in": "header", "name": "Idempotency-Key", "required": false, "schema": {"maxLength": 128, "minLength": 1, "type": "string"}}, "ReceiptRoot": {"in": "path", "name": "receipt_root", "required": true, "schema": {"pattern": "^sha256:[a-f0-9]{64}$", "type": "string"}}}, "responses": {"IdempotencyConflict": {"content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}, "description": "Idempotency key was already used with a different request body"}, "NotFound": {"content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}, "description": "Receipt was not found"}, "RequestTooLarge": {"content": {"application/json": {"schema": {"$ref": "#/components/schemas/Error"}}}, "description": "Request body exceeds 262144 bytes"}}, "schemas": {"CheckRequest": {"additionalProperties": false, "properties": {"artifact_name": {"minLength": 1, "type": "string"}, "content": {"description": "The explicitly submitted artifact only; the API does not crawl a repository.", "type": "string"}, "max_catches": {"default": 3, "maximum": 10, "minimum": 1, "type": "integer"}, "stage": {"default": "manual", "type": "string"}}, "required": ["artifact_name", "content"], "type": "object"}, "CheckResponse": {"properties": {"claim_ceiling": {"type": "string"}, "decision_code": {"type": "string"}, "receipt": {"type": "object"}, "receipt_root": {"pattern": "^sha256:[a-f0-9]{64}$", "type": "string"}, "verdict": {"enum": ["PROMOTE", "DENY"]}}, "required": ["decision_code", "verdict", "receipt_root", "receipt", "claim_ceiling"], "type": "object"}, "Error": {"properties": {"error": {"type": "string"}, "message": {"type": "string"}}, "required": ["error", "message"], "type": "object"}, "Health": {"properties": {"api": {"type": "string"}, "product": {"const": "GenXis Gavel"}, "schema": {"const": "genxis-gavel.api/v1"}, "status": {"const": "ok"}}, "required": ["api", "product", "schema", "status"], "type": "object"}, "VerifyReceiptRequest": {"oneOf": [{"required": ["receipt_root"]}, {"required": ["receipt"]}], "properties": {"receipt": {"type": "object"}, "receipt_root": {"pattern": "^sha256:[a-f0-9]{64}$", "type": "string"}, "trusted_key_ids": {"items": {"type": "string"}, "type": "array"}}, "type": "object"}, "VerifyReceiptResponse": {"properties": {"schema": {"const": "genxis-gavel.api/v1"}, "subject_binding": {"type": "object"}, "valid": {"type": "boolean"}, "verification": {"type": "object"}}, "required": ["schema", "valid", "verification", "subject_binding"], "type": "object"}}, "securitySchemes": {"gavelBearer": {"bearerFormat": "GAVEL_API_KEY", "scheme": "bearer", "type": "http"}}}, "info": {"description": "Evidence-bound verification for named artifacts. A positive decision is limited to the declared artifact and bounded check.", "title": "GenXis Gavel API", "version": "1.0.0"}, "openapi": "3.1.0", "paths": {"/checks": {"post": {"operationId": "createCheck", "parameters": [{"$ref": "#/components/parameters/IdempotencyKey"}], "requestBody": {"content": {"application/json": {"schema": {"$ref": "#/components/schemas/CheckRequest"}}}, "required": true}, "responses": {"201": {"content": {"application/json": {"schema": {"$ref": "#/components/schemas/CheckResponse"}}}, "description": "Bounded check completed"}, "409": {"$ref": "#/components/responses/IdempotencyConflict"}, "413": {"$ref": "#/components/responses/RequestTooLarge"}}}}, "/deployments/attest": {"post": {"description": "Available only to accounts enabled for deployment attestation.", "operationId": "attestDeployment", "requestBody": {"content": {"application/json": {"schema": {"type": "object"}}}, "required": true}, "responses": {"201": {"content": {"application/json": {"schema": {"type": "object"}}}, "description": "Deployment evidence attested"}}}}, "/healthz": {"get": {"operationId": "getHealth", "responses": {"200": {"content": {"application/json": {"schema": {"$ref": "#/components/schemas/Health"}}}, "description": "Service health"}}, "security": []}}, "/receipts/verify": {"post": {"operationId": "verifyReceipt", "requestBody": {"content": {"application/json": {"schema": {"$ref": "#/components/schemas/VerifyReceiptRequest"}}}, "required": true}, "responses": {"200": {"content": {"application/json": {"schema": {"$ref": "#/components/schemas/VerifyReceiptResponse"}}}, "description": "Receipt verification"}}}}, "/receipts/{receipt_root}": {"get": {"operationId": "getReceipt", "parameters": [{"$ref": "#/components/parameters/ReceiptRoot"}], "responses": {"200": {"content": {"application/json": {"schema": {"type": "object"}}}, "description": "Signed receipt"}, "404": {"$ref": "#/components/responses/NotFound"}}}}}, "security": [{"gavelBearer": []}], "servers": [{"url": "https://gavel.genxis.com/v1"}]}
