{"openapi":"3.1.0","info":{"title":"Gibs API","description":"Regulatory compliance API for EU law. Ask questions about the AI Act, GDPR, and DORA — get cited answers with EUR-Lex article references.\n\nAuthentication: Bearer token (`Authorization: Bearer sk-gibs-...`)\n\nDocs: https://docs.gibs.dev","version":"0.5.6"},"servers":[{"url":"https://api.gibs.dev","description":"Production"}],"paths":{"/v1/health":{"get":{"tags":["health"],"summary":"Health Check","description":"Check API health and component status.\n\nReturns:\n    Health status with component details","operationId":"health_check_v1_health_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HealthResponse"}}}}}}},"/v1/classify":{"post":{"tags":["classify"],"summary":"Classify Ai System","description":"Classify an AI system under EU AI Act risk levels.\n\nReturns risk level, relevant obligations, and source citations.","operationId":"classify_ai_system_v1_classify_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ClassifyRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ClassifyResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/check":{"post":{"tags":["check"],"summary":"Check Compliance","description":"Answer a compliance question with source citations.\n\nReturns grounded answer with article references. Every claim is traceable.\nIf sources don't cover the question, returns abstention with explanation.","operationId":"check_compliance_v1_check_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CheckRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CheckResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/check/stream":{"post":{"tags":["check"],"summary":"Check Compliance Stream","description":"Stream a compliance answer via Server-Sent Events.\n\nRetrieval runs first (~3-5s), then synthesis streams token by token.\nFirst visible token appears within ~5s instead of waiting ~20s for full response.\n\nEvent types:\n  status   — {\"stage\": \"retrieving\"} or {\"stage\": \"synthesizing\"}\n  chunk    — text token from synthesis LLM\n  complete — final metadata: confidence, sources, should_abstain, request_id\n  error    — error message","operationId":"check_compliance_stream_v1_check_stream_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CheckRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/articles/{regulation}/{article_number}":{"get":{"tags":["articles"],"summary":"Get article text by regulation and article number","description":"Fetch article text directly from the corpus.\n\nNo RAG pipeline — returns raw article chunks via Qdrant filter.\nFast (single-digit ms) and suitable for high-frequency lookups.","operationId":"get_article_v1_articles__regulation___article_number__get","parameters":[{"name":"regulation","in":"path","required":true,"schema":{"type":"string","title":"Regulation"}},{"name":"article_number","in":"path","required":true,"schema":{"type":"string","title":"Article Number"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ArticleResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/account/keys":{"get":{"tags":["keys","keys"],"summary":"List Keys","description":"List all active API keys for the authenticated organization.\n\nReturns metadata only — never the full key value.","operationId":"list_keys_v1_account_keys_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"items":{"$ref":"#/components/schemas/KeyInfo"},"type":"array","title":"Response List Keys V1 Account Keys Get"}}}}}},"post":{"tags":["keys","keys"],"summary":"Create Key","description":"Create a new API key for the authenticated organization.\n\nThe full key is returned ONCE in the response. Store it securely —\nit cannot be retrieved again.\n\nKey limit depends on your plan: Free (1), Developer (3), Team (10).","operationId":"create_key_v1_account_keys_post","requestBody":{"content":{"application/json":{"schema":{"anyOf":[{"$ref":"#/components/schemas/CreateKeyRequest"},{"type":"null"}],"title":"Body"}}}},"responses":{"201":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/KeyCreatedResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/account/keys/{key_id}":{"delete":{"tags":["keys","keys"],"summary":"Delete Key","description":"Revoke a specific API key.\n\nThe key must belong to the authenticated organization.\nYou cannot revoke the key you are currently using for authentication.","operationId":"delete_key_v1_account_keys__key_id__delete","parameters":[{"name":"key_id","in":"path","required":true,"schema":{"type":"integer","title":"Key Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":{"type":"string"},"title":"Response Delete Key V1 Account Keys  Key Id  Delete"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}}},"components":{"schemas":{"ArticleChunk":{"properties":{"chunk_id":{"type":"string","title":"Chunk Id"},"text":{"type":"string","title":"Text"},"article_id":{"type":"string","title":"Article Id"},"title":{"type":"string","title":"Title"},"section":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Section"},"chunk_type":{"type":"string","title":"Chunk Type"},"document_type":{"type":"string","title":"Document Type"},"legal_status":{"type":"string","title":"Legal Status"},"applies_from":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Applies From"},"source_celex":{"type":"string","title":"Source Celex"},"binding":{"type":"boolean","title":"Binding"}},"type":"object","required":["chunk_id","text","article_id","title","section","chunk_type","document_type","legal_status","applies_from","source_celex","binding"],"title":"ArticleChunk","description":"A single chunk from an article."},"ArticleResponse":{"properties":{"regulation":{"type":"string","title":"Regulation"},"article":{"type":"string","title":"Article"},"chunks":{"items":{"$ref":"#/components/schemas/ArticleChunk"},"type":"array","title":"Chunks"},"total_chunks":{"type":"integer","title":"Total Chunks"}},"type":"object","required":["regulation","article","chunks","total_chunks"],"title":"ArticleResponse","description":"Response from article lookup."},"CheckRequest":{"properties":{"question":{"type":"string","maxLength":2000,"minLength":10,"title":"Question","description":"Compliance question to answer"},"system_context":{"$ref":"#/components/schemas/SystemContext","description":"Optional context about the AI system"},"regulation":{"type":"string","title":"Regulation","description":"Target regulation: 'ai_act', 'gdpr', 'dora', or 'auto' (auto-detected from question)","default":"auto"},"response_format":{"type":"string","enum":["text","structured"],"title":"Response Format","description":"Response format: 'text' (default markdown) or 'structured' (parsed JSON sections)","default":"text"}},"type":"object","required":["question"],"title":"CheckRequest","description":"Request body for POST /v1/check."},"CheckResponse":{"properties":{"answer":{"type":"string","title":"Answer","description":"Answer to the compliance question (markdown)"},"structured":{"anyOf":[{"$ref":"#/components/schemas/StructuredAnswer"},{"type":"null"}],"description":"Parsed structured answer (only when response_format='structured')"},"confidence":{"type":"string","title":"Confidence","description":"Confidence level: 'high', 'medium', 'low'"},"confidence_score":{"type":"number","maximum":1.0,"minimum":0.0,"title":"Confidence Score","description":"Numeric confidence score (0-1) for programmatic use"},"sources":{"items":{"$ref":"#/components/schemas/SourceCitation"},"type":"array","title":"Sources","description":"Source citations supporting this answer"},"should_abstain":{"type":"boolean","title":"Should Abstain","description":"True if the sources don't contain enough information","default":false},"abstention_reason":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Abstention Reason","description":"Why the system abstained, if applicable"},"request_id":{"type":"string","title":"Request Id","description":"Unique request identifier"},"corpus_version":{"type":"string","title":"Corpus Version","description":"Version of the legal corpus used"},"processing_time_ms":{"type":"integer","minimum":0.0,"title":"Processing Time Ms","description":"Processing time in milliseconds"}},"type":"object","required":["answer","confidence","confidence_score","request_id","corpus_version","processing_time_ms"],"title":"CheckResponse","description":"Response body for POST /v1/check."},"ClassifyRequest":{"properties":{"description":{"type":"string","maxLength":5000,"minLength":10,"title":"Description","description":"Description of the AI system to classify"},"data_types":{"items":{"type":"string"},"type":"array","title":"Data Types","description":"Types of data processed (e.g., 'biometric', 'health')"},"decision_scope":{"type":"string","title":"Decision Scope","description":"What decisions the AI system makes or influences","default":""},"sector":{"type":"string","title":"Sector","description":"Industry sector (e.g., 'healthcare', 'finance', 'employment')","default":""},"jurisdiction":{"type":"string","title":"Jurisdiction","description":"Target jurisdiction (currently only 'EU' supported)","default":"EU"}},"type":"object","required":["description"],"title":"ClassifyRequest","description":"Request body for POST /v1/classify."},"ClassifyResponse":{"properties":{"risk_level":{"$ref":"#/components/schemas/RiskLevel","description":"AI Act risk classification"},"confidence":{"type":"number","maximum":1.0,"minimum":0.0,"title":"Confidence","description":"Confidence in the classification (0-1)"},"reasoning":{"type":"string","title":"Reasoning","description":"Explanation of why this risk level applies"},"obligations":{"items":{"$ref":"#/components/schemas/Obligation"},"type":"array","title":"Obligations","description":"Required compliance obligations for this risk level"},"sources":{"items":{"$ref":"#/components/schemas/SourceCitation"},"type":"array","title":"Sources","description":"Source citations supporting this classification"},"request_id":{"type":"string","title":"Request Id","description":"Unique request identifier for audit trail"},"corpus_version":{"type":"string","title":"Corpus Version","description":"Version of the legal corpus used"},"processing_time_ms":{"type":"integer","minimum":0.0,"title":"Processing Time Ms","description":"Processing time in milliseconds"}},"type":"object","required":["risk_level","confidence","reasoning","request_id","corpus_version","processing_time_ms"],"title":"ClassifyResponse","description":"Response body for POST /v1/classify."},"CreateKeyRequest":{"properties":{"name":{"type":"string","maxLength":255,"title":"Name","description":"Human-readable name for the key","default":"Default"}},"type":"object","title":"CreateKeyRequest","description":"Request body for POST /v1/account/keys."},"HTTPValidationError":{"properties":{"detail":{"items":{"$ref":"#/components/schemas/ValidationError"},"type":"array","title":"Detail"}},"type":"object","title":"HTTPValidationError"},"HealthResponse":{"properties":{"status":{"type":"string","title":"Status"},"corpus_version":{"type":"string","title":"Corpus Version"}},"type":"object","required":["status","corpus_version"],"title":"HealthResponse","description":"Health check response — public version omits internals."},"KeyCreatedResponse":{"properties":{"id":{"type":"integer","title":"Id","description":"Key ID"},"api_key":{"type":"string","title":"Api Key","description":"Full API key (shown once, store securely)"},"key_prefix":{"type":"string","title":"Key Prefix","description":"First 13 characters for identification"},"name":{"type":"string","title":"Name","description":"Human-readable key name"},"created_at":{"type":"string","title":"Created At","description":"ISO 8601 creation timestamp"}},"type":"object","required":["id","api_key","key_prefix","name","created_at"],"title":"KeyCreatedResponse","description":"Response for POST /v1/account/keys. Contains the full key (shown once)."},"KeyInfo":{"properties":{"id":{"type":"integer","title":"Id","description":"Key ID"},"name":{"type":"string","title":"Name","description":"Human-readable key name"},"key_prefix":{"type":"string","title":"Key Prefix","description":"First 13 characters of the key"},"is_test":{"type":"boolean","title":"Is Test","description":"Whether this is a test key"},"created_at":{"type":"string","title":"Created At","description":"ISO 8601 creation timestamp"},"last_used_at":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Last Used At","description":"ISO 8601 last-used timestamp"},"request_count":{"type":"integer","title":"Request Count","description":"Total requests made with this key"}},"type":"object","required":["id","name","key_prefix","is_test","created_at","request_count"],"title":"KeyInfo","description":"API key metadata (never includes the full key)."},"Obligation":{"properties":{"id":{"type":"string","title":"Id","description":"Obligation identifier"},"description":{"type":"string","title":"Description","description":"What the user must do"},"source_article":{"type":"string","title":"Source Article","description":"Article that defines this obligation"},"deadline":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Deadline","description":"Compliance deadline if applicable"}},"type":"object","required":["id","description","source_article"],"title":"Obligation","description":"A compliance obligation the user must fulfill."},"RiskLevel":{"type":"string","enum":["prohibited","high","limited","minimal"],"title":"RiskLevel","description":"AI Act risk levels."},"SourceCitation":{"properties":{"article_id":{"type":"string","title":"Article Id","description":"Article identifier, e.g., 'ai_act_art6'"},"title":{"type":"string","title":"Title","description":"Article title","default":""},"text_excerpt":{"type":"string","title":"Text Excerpt","description":"Relevant excerpt from the article","default":""},"relevance_score":{"type":"number","maximum":1.0,"minimum":0.0,"title":"Relevance Score","description":"How relevant this source is","default":0.0}},"type":"object","required":["article_id"],"title":"SourceCitation","description":"A source citation for a claim in the response."},"StructuredAnswer":{"properties":{"summary":{"type":"string","title":"Summary","description":"Direct 1-2 sentence answer"},"legal_basis":{"type":"string","title":"Legal Basis","description":"Legal basis section with article references","default":""},"requirements":{"items":{"type":"string"},"type":"array","title":"Requirements","description":"Key compliance requirements as bullet points"},"timeline":{"items":{"type":"string"},"type":"array","title":"Timeline","description":"Relevant dates and deadlines"},"articles_cited":{"items":{"type":"string"},"type":"array","title":"Articles Cited","description":"List of articles referenced (e.g., 'Article 5(1)(a)')"}},"type":"object","required":["summary"],"title":"StructuredAnswer","description":"Parsed structured representation of a compliance answer."},"SystemContext":{"properties":{"description":{"type":"string","maxLength":2000,"title":"Description","default":""},"data_types":{"items":{"type":"string"},"type":"array","maxItems":20,"title":"Data Types"},"decision_scope":{"type":"string","maxLength":500,"title":"Decision Scope","default":""},"sector":{"type":"string","maxLength":200,"title":"Sector","default":""}},"type":"object","title":"SystemContext","description":"Validated context about an AI system. Only known fields accepted."},"ValidationError":{"properties":{"loc":{"items":{"anyOf":[{"type":"string"},{"type":"integer"}]},"type":"array","title":"Location"},"msg":{"type":"string","title":"Message"},"type":{"type":"string","title":"Error Type"},"input":{"title":"Input"},"ctx":{"type":"object","title":"Context"}},"type":"object","required":["loc","msg","type"],"title":"ValidationError"}}},"tags":[{"name":"check","description":"Full compliance analysis with source citations"},{"name":"classify","description":"AI system risk classification under EU regulations"},{"name":"articles","description":"Direct article text lookup from EU regulation corpus"},{"name":"health","description":"Service health checks"},{"name":"keys","description":"API key management"}]}