{"openapi":"3.1.0","info":{"title":"CAP-Shield Gateway","description":"Identitet, minne och komprimering för AI-agenter — Fas 1-kärnan.","version":"0.17.0-fasC"},"paths":{"/":{"get":{"summary":"Status","description":"Rot: landningssida till människor, systemstatus till maskiner.\n\nValet görs på Accept-huvudet. En webbläsare ber om text/html och får\nsidan; curl och agenter ber om json eller */* och får samma JSON som\nförut. Samma adress, två publiker, inget duplicerat innehåll.\n\nSidan bär inga egna siffror — den hämtar dem från\n/.well-known/cap-shield.json när den laddas. En marknadsföringsyta med\nhårdkodade tal börjar ljuga så fort mätningen förbättras, och ingen\nmärker det eftersom ingen testar landningssidor.","operationId":"status__get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/.well-known/cap-shield.json":{"get":{"summary":"Wellknown","description":"Maskinläsbar upptäckt — öppen, utan token.\n\nEn agent som utvärderar tjänsten ska kunna läsa vad den presterar\nOCH var den inte håller, innan den skaffar konto. Talen härleds ur\nmätrapporterna, så marknadsföringsytan kan inte driva isär från\nmätningen.","operationId":"wellknown__well_known_cap_shield_json_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/api/v1/diagnose/{arende_id}":{"get":{"summary":"Diagnos","description":"Vad hände i ärende <id>? Slår upp i den hashkedjade audit-loggen.\n\nIngen språkmodell inblandad — ren uppslagning. De flesta fel är kända\nfel, och för dem är svaret bättre om det är exakt än om det är\nformulerat väl.\n\nKräver inloggning: loggen kan innehålla uppgifter om vilken kund som\ngjorde vad, och den ska inte gå att bläddra i anonymt.","operationId":"diagnos_api_v1_diagnose__arende_id__get","parameters":[{"name":"arende_id","in":"path","required":true,"schema":{"type":"string","title":"Arende Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","title":"Response Diagnos Api V1 Diagnose  Arende Id  Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/try":{"post":{"summary":"Prova","description":"Mät besparing på DIN trafik — utan konto, utan att något sparas.","operationId":"prova_api_v1_try_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TryRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","title":"Response Prova Api V1 Try Post"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/docs/quickstart":{"get":{"summary":"Snabbstart","description":"Snabbstart som ren text — för agenter som läser utan webbläsare.\n\nSamma innehåll som SNABBSTART.md, genererat ur samma källa. Vägar,\ntak och siffror kommer från den körande koden, så dokumentet kan\ninte glida isär från API:t.\n\nÖppen med avsikt: den som ska avgöra om tjänsten är värd att prova\nska kunna läsa hur man provar, utan att först skaffa konto.","operationId":"snabbstart_docs_quickstart_get","responses":{"200":{"description":"Successful Response","content":{"text/plain":{"schema":{"type":"string"}}}}}}},"/docs/quickstart.md":{"get":{"summary":"Snabbstart Md","description":"Samma dokument som markdown, för landningssidan.","operationId":"snabbstart_md_docs_quickstart_md_get","responses":{"200":{"description":"Successful Response","content":{"text/plain":{"schema":{"type":"string"}}}}}}},"/api/v1/beta-signup":{"post":{"summary":"Beta Signup","description":"Anmäl intresse för betan. Ingen inloggning.","operationId":"beta_signup_api_v1_beta_signup_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/BetaSignupRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","title":"Response Beta Signup Api V1 Beta Signup Post"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/keys":{"get":{"summary":"Keys List","description":"Dina nycklar. Hashen lämnar aldrig servern.","operationId":"keys_list_api_v1_keys_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","title":"Response Keys List Api V1 Keys Get"}}}}}},"post":{"summary":"Keys Create","description":"Skapa en API-nyckel.\n\nNYCKELN VISAS EN GÅNG. Vi lagrar bara en SHA-256 av den, så den går\ninte att visa igen — tappar du bort den skapar du en ny och\nåterkallar den gamla.\n\nAtt kunna visa den i efterhand skulle betyda att vi lagrat den, och\ndå hade en läcka hos oss varit en läcka hos varje kund.","operationId":"keys_create_api_v1_keys_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/KeyCreateRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","title":"Response Keys Create Api V1 Keys Post"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/keys/{key_id}":{"delete":{"summary":"Keys Revoke","description":"Återkalla en nyckel. Posten står kvar — raderas aldrig.\n\nEn raderad nyckel går inte att skilja från en som aldrig funnits,\noch då kan kunden inte se att den läckte och stängdes.","operationId":"keys_revoke_api_v1_keys__key_id__delete","parameters":[{"name":"key_id","in":"path","required":true,"schema":{"type":"string","title":"Key Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","title":"Response Keys Revoke Api V1 Keys  Key Id  Delete"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/robots.txt":{"get":{"summary":"Robots","description":"Vad som får indexeras.\n\nAPI-vägarna hålls utanför — de svarar 401 för en sökrobot, och en\nindexerad 401-sida hjälper ingen. Upptäcktsdokumentet SKA däremot\nindexeras: det är hela poängen att en agent ska kunna hitta det.","operationId":"robots_robots_txt_get","responses":{"200":{"description":"Successful Response","content":{"text/plain":{"schema":{"type":"string"}}}}}}},"/sitemap.xml":{"get":{"summary":"Sitemap","description":"De fyra sidor som är värda att indexera.","operationId":"sitemap_sitemap_xml_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/health":{"get":{"summary":"Health","operationId":"health_health_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","title":"Response Health Health Get"}}}}}}},"/api/v1/pack":{"post":{"summary":"Pack","description":"Packa text till ett CAP-paket. Redovisar ärliga siffror.","operationId":"pack_api_v1_pack_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PackRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","title":"Response Pack Api V1 Pack Post"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/unpack":{"post":{"summary":"Unpack","description":"Packa upp ett CAP-paket till originaltext (exakt tur-och-retur).","operationId":"unpack_api_v1_unpack_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UnpackRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","title":"Response Unpack Api V1 Unpack Post"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/dict/{dict_id}":{"get":{"summary":"Dict Info","description":"Manifest för en ordbok: versionshistorik, hashar, storlekar.","operationId":"dict_info_api_v1_dict__dict_id__get","parameters":[{"name":"dict_id","in":"path","required":true,"schema":{"type":"string","title":"Dict Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","title":"Response Dict Info Api V1 Dict  Dict Id  Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/dict/{dict_id}/train":{"post":{"summary":"Train","description":"Träna en NY ordboksversion (Lager 4-mekanismen). Gamla bevaras.","operationId":"train_api_v1_dict__dict_id__train_post","parameters":[{"name":"dict_id","in":"path","required":true,"schema":{"type":"string","title":"Dict Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TrainRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","title":"Response Train Api V1 Dict  Dict Id  Train Post"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/pack-batch":{"post":{"summary":"Pack Batch","description":"Bunta många meddelanden i ETT paket — headern betalas en gång.","operationId":"pack_batch_api_v1_pack_batch_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PackBatchRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","title":"Response Pack Batch Api V1 Pack Batch Post"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/unpack-batch":{"post":{"summary":"Unpack Batch","description":"Packa upp en bunt till exakt samma lista av meddelanden.","operationId":"unpack_batch_api_v1_unpack_batch_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UnpackBatchRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","title":"Response Unpack Batch Api V1 Unpack Batch Post"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/catalog":{"get":{"summary":"Catalog Overview","description":"Hela katalogen: domäner, delpaket, provantal samt antal recept.","operationId":"catalog_overview_api_v1_catalog_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","title":"Response Catalog Overview Api V1 Catalog Get"}}}}}}},"/api/v1/catalog/seed-demo":{"post":{"summary":"Catalog Seed Demo","description":"Så demo-korpusar för Nivå 1-delpaketen (endast om de är tomma).","operationId":"catalog_seed_demo_api_v1_catalog_seed_demo_post","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","title":"Response Catalog Seed Demo Api V1 Catalog Seed Demo Post"}}}}}}},"/api/v1/catalog/samples":{"post":{"summary":"Catalog Samples","description":"Utöka ett delpakets korpus — Lager 4:s väg in: växer med trafiken.","operationId":"catalog_samples_api_v1_catalog_samples_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CatalogSamplesRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","title":"Response Catalog Samples Api V1 Catalog Samples Post"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/catalog/mature":{"post":{"summary":"Catalog Mature","description":"Pröva omträning — byt ordbok BARA om den nya mäter bättre.\n\nDetta är självinlärningens hela mekanism. Den nya versionen skapas\nalltid (arkivgarantin gör det ofarligt, och en förlorande version är\ndata värd att behålla), men den blir aktiv bara om den slår den gamla\npå osedd data.\n\nVARFÖR INTE AUTOMATISKT: en omträning på skev trafik kan göra\nprodukten sämre utan att någon märker det. Att kunden själv utlöser\nden betyder att någon vet att den skedde — och svaret säger vad\nmätningen visade, oavsett utfall.","operationId":"catalog_mature_api_v1_catalog_mature_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/MatureRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","title":"Response Catalog Mature Api V1 Catalog Mature Post"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/catalog/compose":{"post":{"summary":"Catalog Compose","description":"Komponera en komposit-ordbok av valda delpaket (kundens recept).\n\nVarningarna följer ALLTID med i svaret, även när kompositionen lyckas.\nEtt recept som innehåller ett avrått delpaket ska inte kunna se ut som\nen ren framgång bara för att träningen gick igenom.","operationId":"catalog_compose_api_v1_catalog_compose_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ComposeRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","title":"Response Catalog Compose Api V1 Catalog Compose Post"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/catalog/status":{"get":{"summary":"Catalog Status Endpoint","description":"Delpaketens status ur UPPMÄTT data — inklusive de som avråds.\n\nDelpaket som inte håller måttet utelämnas medvetet inte. En lucka ser\nut som något ofärdigt; en öppen varning ser ut som någon som mätt.","operationId":"catalog_status_endpoint_api_v1_catalog_status_get","parameters":[{"name":"lang","in":"query","required":false,"schema":{"type":"string","default":"en","title":"Lang"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","title":"Response Catalog Status Endpoint Api V1 Catalog Status Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/catalog/suggested":{"get":{"summary":"Catalog Suggested","description":"Kompositioner som mätdatan faktiskt stödjer.","operationId":"catalog_suggested_api_v1_catalog_suggested_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","title":"Response Catalog Suggested Api V1 Catalog Suggested Get"}}}}}}},"/api/v1/catalog/validate":{"post":{"summary":"Catalog Validate","description":"Granska ett recept INNAN träning. Blockerar aldrig, varnar alltid.","operationId":"catalog_validate_api_v1_catalog_validate_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ValidateRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","title":"Response Catalog Validate Api V1 Catalog Validate Post"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/catalog/measure":{"post":{"summary":"Catalog Measure","description":"Mät kompositens FAKTISKA besparing på testtrafik — regel: inga siffror utan mätning.","operationId":"catalog_measure_api_v1_catalog_measure_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/MeasureRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","title":"Response Catalog Measure Api V1 Catalog Measure Post"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/pack-semantic":{"post":{"summary":"Pack Semantic","description":"FÖRLUSTGIVANDE spåret: kondensera -> zstd -> SEMANTIC-märkt paket.\n\nAldrig för transaktionsdata. Svaret säger alltid lossless=False.","operationId":"pack_semantic_api_v1_pack_semantic_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PackSemanticRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","title":"Response Pack Semantic Api V1 Pack Semantic Post"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/unpack-semantic":{"post":{"summary":"Unpack Semantic","description":"Packa upp ett SEMANTIC-märkt paket till den KONDENSERADE texten.\n\nOriginalet finns inte i paketet — förlusten är permanent per design.","operationId":"unpack_semantic_api_v1_unpack_semantic_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UnpackSemanticRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","title":"Response Unpack Semantic Api V1 Unpack Semantic Post"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/schema/{schema_id}/register":{"post":{"summary":"Schema Register","description":"Registrera NY schemaversion (arkivgarantin: gamla bevaras).","operationId":"schema_register_api_v1_schema__schema_id__register_post","parameters":[{"name":"schema_id","in":"path","required":true,"schema":{"type":"string","title":"Schema Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SchemaRegisterRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","title":"Response Schema Register Api V1 Schema  Schema Id  Register Post"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/schema/{schema_id}":{"get":{"summary":"Schema Info","operationId":"schema_info_api_v1_schema__schema_id__get","parameters":[{"name":"schema_id","in":"path","required":true,"schema":{"type":"string","title":"Schema Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","title":"Response Schema Info Api V1 Schema  Schema Id  Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/pack-schema":{"post":{"summary":"Pack Schema","description":"Schema-kodning + zstd: dict -> taggar/koder -> paket [SCHEMA].","operationId":"pack_schema_api_v1_pack_schema_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PackSchemaRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","title":"Response Pack Schema Api V1 Pack Schema Post"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/unpack-schema":{"post":{"summary":"Unpack Schema","description":"Packa upp ett SCHEMA-märkt paket till exakt samma objekt.","operationId":"unpack_schema_api_v1_unpack_schema_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UnpackSchemaRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","title":"Response Unpack Schema Api V1 Unpack Schema Post"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/memory/put":{"post":{"summary":"Memory Put","description":"Lagra minne med auto-profil. Brandväggen granskar innehållet.","operationId":"memory_put_api_v1_memory_put_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/MemoryPutRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","title":"Response Memory Put Api V1 Memory Put Post"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/memory/{namespace}/{item_id}":{"get":{"summary":"Memory Get","description":"Hämta ett minne EXAKT (förlustfri tur-och-retur).","operationId":"memory_get_api_v1_memory__namespace___item_id__get","parameters":[{"name":"namespace","in":"path","required":true,"schema":{"type":"string","title":"Namespace"}},{"name":"item_id","in":"path","required":true,"schema":{"type":"string","title":"Item Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","title":"Response Memory Get Api V1 Memory  Namespace   Item Id  Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/memory/{namespace}":{"get":{"summary":"Memory List","description":"Minnesindex — utan interna termlistor (de stannar på disken).","operationId":"memory_list_api_v1_memory__namespace__get","parameters":[{"name":"namespace","in":"path","required":true,"schema":{"type":"string","title":"Namespace"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","title":"Response Memory List Api V1 Memory  Namespace  Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/memory/assemble":{"post":{"summary":"Memory Assemble","description":"Selektiv hämtning: packa relevanta minnen inom tokenbudget.","operationId":"memory_assemble_api_v1_memory_assemble_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/MemoryAssembleRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","title":"Response Memory Assemble Api V1 Memory Assemble Post"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/metrics/summary":{"get":{"summary":"Metrics Summary","description":"Aggregerad rapport för DEN INLOGGADE kunden.\n\nSÄKERHETSRÄTTNING 2026-08-06: tog tidigare tenant som frågeparameter\nutan att kontrollera den mot den inloggade. Kund A kunde läsa kund B:s\ntelemetri genom att skicka B:s nyckel. Nycklarna är SHA-256-härledda\noch svåra att gissa — men svårgissad är inte isolerad, och telemetrin\när dessutom debiteringsunderlaget.\n\nOmfånget kommer nu från token, aldrig från förfrågan.","operationId":"metrics_summary_api_v1_metrics_summary_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","title":"Response Metrics Summary Api V1 Metrics Summary Get"}}}}}}},"/api/v1/metrics/all":{"get":{"summary":"Metrics All","description":"Operatörsvy: alla kunder. Endast för admin-omfång.\n\nAdminpanelen behöver detta. Att låta vanliga kunder nå det vore samma\nläcka som ovan, bara med extra steg.","operationId":"metrics_all_api_v1_metrics_all_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","title":"Response Metrics All Api V1 Metrics All Get"}}}}}}},"/api/v1/metrics/flush":{"post":{"summary":"Metrics Flush","description":"Dumpa räknarna till JSONL på disk och nollställ minnesräknarna.\nKörs typiskt en gång per dygn (cron eller manuellt under beta).","operationId":"metrics_flush_api_v1_metrics_flush_post","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","title":"Response Metrics Flush Api V1 Metrics Flush Post"}}}}}}},"/api/v1/gdpr/consent":{"get":{"summary":"Gdpr Consent Get","description":"Kundens nuvarande samtycken. Allt är NEJ tills det aktivt sagts ja.","operationId":"gdpr_consent_get_api_v1_gdpr_consent_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","title":"Response Gdpr Consent Get Api V1 Gdpr Consent Get"}}}}}},"post":{"summary":"Gdpr Consent Set","description":"Ge eller återkalla samtycke. Delarna är oberoende — att säga ja till\ndet ena drar aldrig med sig det andra.","operationId":"gdpr_consent_set_api_v1_gdpr_consent_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ConsentRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","title":"Response Gdpr Consent Set Api V1 Gdpr Consent Post"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/gdpr/consent-text":{"get":{"summary":"Gdpr Consent Text","description":"Vad man faktiskt samtycker till, i klartext. Ingen juridiksoppa.","operationId":"gdpr_consent_text_api_v1_gdpr_consent_text_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","title":"Response Gdpr Consent Text Api V1 Gdpr Consent Text Get"}}}}}}},"/api/v1/gdpr/export":{"get":{"summary":"Gdpr Export","description":"Fullständigt registerutdrag (GDPR art. 15/20). Kundens EGEN data.","operationId":"gdpr_export_api_v1_gdpr_export_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","title":"Response Gdpr Export Api V1 Gdpr Export Get"}}}}}}},"/api/v1/gdpr/erase-info":{"get":{"summary":"Gdpr Erase Info","description":"Konsekvenserna av radering — MÅSTE läsas innan bekräftelse.\n\nDen viktigaste raden: när ordböckerna raderas blir gamla komprimerade\npaket permanent oläsbara. Det går inte att ångra och det ska stå i\nklartext innan någon skriver bekräftelsefrasen.","operationId":"gdpr_erase_info_api_v1_gdpr_erase_info_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","title":"Response Gdpr Erase Info Api V1 Gdpr Erase Info Get"}}}}}}},"/api/v1/gdpr/erase":{"post":{"summary":"Gdpr Erase","description":"Radering (GDPR art. 17). Kräver exakt bekräftelsefras.","operationId":"gdpr_erase_api_v1_gdpr_erase_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/EraseRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","title":"Response Gdpr Erase Api V1 Gdpr Erase Post"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/status/account":{"get":{"summary":"Status Account","description":"Kundens eget kontostatus: aktiv, flaggad, i karantän eller blockerad.","operationId":"status_account_api_v1_status_account_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","title":"Response Status Account Api V1 Status Account Get"}}}}}}},"/api/v1/status/acknowledge":{"post":{"summary":"Status Acknowledge","description":"Agentens egen väg ur karantän.\n\nVägen är medvetet undantagen från statusspärren i middlewaren. En vägg\nutan dörr är inte en spärr, det är en återvändsgränd — en agent måste\nalltid kunna läsa sitt avslag och rätta sig själv.","operationId":"status_acknowledge_api_v1_status_acknowledge_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AcknowledgeRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","title":"Response Status Acknowledge Api V1 Status Acknowledge Post"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}}},"components":{"schemas":{"AcknowledgeRequest":{"properties":{"acknowledgement":{"type":"string","minLength":1,"title":"Acknowledgement","description":"Kvitteringsfrasen ur avslaget"}},"type":"object","required":["acknowledgement"],"title":"AcknowledgeRequest"},"BetaSignupRequest":{"properties":{"email":{"type":"string","maxLength":200,"minLength":5,"title":"Email"},"traffic":{"anyOf":[{"type":"string","maxLength":500},{"type":"null"}],"title":"Traffic","description":"Vad din agent skickar — hjälper oss välja delpaket"},"volume":{"anyOf":[{"type":"string","maxLength":100},{"type":"null"}],"title":"Volume","description":"Ungefärlig volym, t.ex. '10k anrop/dag'"}},"type":"object","required":["email"],"title":"BetaSignupRequest"},"CatalogSamplesRequest":{"properties":{"doman":{"type":"string","maxLength":32,"minLength":1,"title":"Doman"},"delpaket":{"type":"string","maxLength":32,"minLength":1,"title":"Delpaket"},"samples":{"items":{"type":"string"},"type":"array","minItems":1,"title":"Samples"}},"type":"object","required":["doman","delpaket","samples"],"title":"CatalogSamplesRequest"},"ComposeRequest":{"properties":{"parts":{"items":{"type":"string"},"type":"array","minItems":1,"title":"Parts","description":"T.ex. [\"finance/risk\", \"commerce/order\"]"},"dict_size":{"type":"integer","maximum":131072.0,"minimum":256.0,"title":"Dict Size","default":4096},"force":{"type":"boolean","title":"Force","default":false}},"type":"object","required":["parts"],"title":"ComposeRequest"},"ConsentRequest":{"properties":{"training":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Training","description":"Får kundens trafik tränas på? Aldrig förvalt."},"aggregate_stats":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Aggregate Stats","description":"Får anonym aggregerad statistik samlas?"}},"type":"object","title":"ConsentRequest"},"EraseRequest":{"properties":{"confirmation":{"type":"string","minLength":1,"title":"Confirmation","description":"Måste vara exakt: 'RADERA MINA DATA PERMANENT'"}},"type":"object","required":["confirmation"],"title":"EraseRequest"},"HTTPValidationError":{"properties":{"detail":{"items":{"$ref":"#/components/schemas/ValidationError"},"type":"array","title":"Detail"}},"type":"object","title":"HTTPValidationError"},"KeyCreateRequest":{"properties":{"label":{"type":"string","maxLength":100,"title":"Label","description":"Vad nyckeln används till","default":""},"test":{"type":"boolean","title":"Test","description":"cap_test_-prefix i stället för cap_live_","default":false}},"type":"object","title":"KeyCreateRequest"},"MatureRequest":{"properties":{"doman":{"type":"string","maxLength":40,"title":"Doman"},"delpaket":{"type":"string","maxLength":40,"title":"Delpaket"},"force":{"type":"boolean","title":"Force","description":"Pröva även om tillväxten inte nått tröskeln","default":false}},"type":"object","required":["doman","delpaket"],"title":"MatureRequest"},"MeasureRequest":{"properties":{"dict_id":{"type":"string","maxLength":8,"minLength":1,"title":"Dict Id"},"test_texts":{"items":{"type":"string"},"type":"array","minItems":1,"title":"Test Texts"}},"type":"object","required":["dict_id","test_texts"],"title":"MeasureRequest"},"MemoryAssembleRequest":{"properties":{"namespace":{"type":"string","maxLength":32,"minLength":1,"title":"Namespace"},"query":{"type":"string","minLength":1,"title":"Query"},"token_budget":{"type":"integer","maximum":100000.0,"minimum":1.0,"title":"Token Budget","default":500}},"type":"object","required":["namespace","query"],"title":"MemoryAssembleRequest"},"MemoryPutRequest":{"properties":{"namespace":{"type":"string","maxLength":32,"minLength":1,"title":"Namespace"},"item_id":{"type":"string","maxLength":64,"minLength":1,"title":"Item Id"},"text":{"type":"string","minLength":1,"title":"Text"},"tags":{"items":{"type":"string"},"type":"array","title":"Tags"}},"type":"object","required":["namespace","item_id","text"],"title":"MemoryPutRequest"},"PackBatchRequest":{"properties":{"texts":{"items":{"type":"string"},"type":"array","minItems":1,"title":"Texts","description":"Meddelanden att bunta"},"dict_id":{"type":"string","maxLength":8,"title":"Dict Id","default":"core"},"agent_id":{"type":"string","maxLength":64,"title":"Agent Id","default":"okänd"}},"type":"object","required":["texts"],"title":"PackBatchRequest"},"PackRequest":{"properties":{"text":{"type":"string","minLength":1,"title":"Text","description":"Rå text/schema att packa"},"dict_id":{"type":"string","maxLength":8,"title":"Dict Id","default":"core"},"agent_id":{"type":"string","maxLength":64,"title":"Agent Id","default":"okänd"}},"type":"object","required":["text"],"title":"PackRequest"},"PackSchemaRequest":{"properties":{"obj":{"type":"object","title":"Obj"},"schema_id":{"type":"string","maxLength":8,"minLength":1,"title":"Schema Id"},"dict_id":{"type":"string","maxLength":8,"title":"Dict Id","default":"core"},"agent_id":{"type":"string","maxLength":64,"title":"Agent Id","default":"okänd"}},"type":"object","required":["obj","schema_id"],"title":"PackSchemaRequest"},"PackSemanticRequest":{"properties":{"text":{"type":"string","minLength":1,"title":"Text"},"dict_id":{"type":"string","maxLength":8,"title":"Dict Id","default":"core"},"target_ratio":{"type":"number","maximum":1.0,"exclusiveMinimum":0.0,"title":"Target Ratio","default":0.5},"agent_id":{"type":"string","maxLength":64,"title":"Agent Id","default":"okänd"}},"type":"object","required":["text"],"title":"PackSemanticRequest"},"SchemaRegisterRequest":{"properties":{"fields":{"items":{"type":"object"},"type":"array","minItems":1,"title":"Fields","description":"Fält: tag, name, type, enum_values?"}},"type":"object","required":["fields"],"title":"SchemaRegisterRequest"},"TrainRequest":{"properties":{"samples":{"items":{"type":"string"},"type":"array","minItems":8,"title":"Samples","description":"Trafikprover (minst 8)"},"dict_size":{"type":"integer","maximum":131072.0,"minimum":256.0,"title":"Dict Size","default":2048}},"type":"object","required":["samples"],"title":"TrainRequest"},"TryRequest":{"properties":{"texts":{"items":{"type":"string"},"type":"array","minItems":1,"title":"Texts","description":"Dina egna meddelanden att mäta på"},"dict_id":{"type":"string","maxLength":8,"title":"Dict Id","description":"Delpaket att mäta mot — se /api/v1/catalog/status","default":"finance"},"query":{"anyOf":[{"type":"string","maxLength":500},{"type":"null"}],"title":"Query","description":"Valfri. Anges den mäts ÄVEN tokenbesparingen: hur mycket kontext som kan utelämnas om bara det relevanta hämtas."},"token_budget":{"type":"integer","maximum":100000.0,"minimum":50.0,"title":"Token Budget","description":"Tokenbudget för kontexten vid tokenmätning","default":1000}},"type":"object","required":["texts"],"title":"TryRequest"},"UnpackBatchRequest":{"properties":{"packet_b64":{"type":"string","minLength":1,"title":"Packet B64"},"agent_id":{"type":"string","maxLength":64,"title":"Agent Id","default":"okänd"}},"type":"object","required":["packet_b64"],"title":"UnpackBatchRequest"},"UnpackRequest":{"properties":{"packet_b64":{"type":"string","minLength":1,"title":"Packet B64"},"agent_id":{"type":"string","maxLength":64,"title":"Agent Id","default":"okänd"}},"type":"object","required":["packet_b64"],"title":"UnpackRequest"},"UnpackSchemaRequest":{"properties":{"packet_b64":{"type":"string","minLength":1,"title":"Packet B64"},"agent_id":{"type":"string","maxLength":64,"title":"Agent Id","default":"okänd"}},"type":"object","required":["packet_b64"],"title":"UnpackSchemaRequest"},"UnpackSemanticRequest":{"properties":{"packet_b64":{"type":"string","minLength":1,"title":"Packet B64"},"agent_id":{"type":"string","maxLength":64,"title":"Agent Id","default":"okänd"}},"type":"object","required":["packet_b64"],"title":"UnpackSemanticRequest"},"ValidateRequest":{"properties":{"parts":{"items":{"type":"string"},"type":"array","minItems":1,"title":"Parts","description":"Delpaket att granska"}},"type":"object","required":["parts"],"title":"ValidateRequest"},"ValidationError":{"properties":{"loc":{"items":{"anyOf":[{"type":"string"},{"type":"integer"}]},"type":"array","title":"Location"},"msg":{"type":"string","title":"Message"},"type":{"type":"string","title":"Error Type"}},"type":"object","required":["loc","msg","type"],"title":"ValidationError"}}}}