{"openapi":"3.1.0","info":{"title":"Grundfast API","version":"0.1.0","description":"REST over Datafordeler — BBR ejendom (BFE-keyed), translated kodelister, WGS84 geometry, and a property-keyed batch. Data is property-keyed only (BFE); there is no address- or company-lookup surface."},"servers":[{"url":"https://grundfast.dk"}],"security":[{"bearerAuth":[]}],"components":{"securitySchemes":{"bearerAuth":{"type":"http","scheme":"bearer","description":"gf_live_… / gf_test_… API key."},"cookieAuth":{"type":"apiKey","in":"cookie","name":"gf_session"}},"schemas":{"EjendomBatchInput":{"type":"object","properties":{"bfe":{"minItems":1,"maxItems":50,"type":"array","items":{"type":"integer","exclusiveMinimum":0,"maximum":9007199254740991}}},"required":["bfe"]},"EjendomBatchResponse":{"type":"object","properties":{"results":{"type":"array","items":{"type":"object","properties":{"bfe":{"type":"number"},"ejendom":{"type":"object","properties":{"type":{"type":"string","const":"ejendom"},"bfe_nummer":{"anyOf":[{"type":"number"},{"type":"null"}]},"grund_id":{"anyOf":[{"type":"string"},{"type":"null"}]},"kommunekode":{"anyOf":[{"type":"string"},{"type":"null"}]},"jordstykke":{"type":"object","properties":{"matrikelnummer":{"anyOf":[{"type":"string"},{"type":"null"}]},"ejerlav_kode":{"anyOf":[{"type":"number"},{"type":"null"}]},"ejerlav_navn":{"anyOf":[{"type":"string"},{"type":"null"}]}},"required":["matrikelnummer","ejerlav_kode","ejerlav_navn"]},"antal_bygninger":{"type":"number"},"bygninger":{"type":"array","items":{"type":"object","properties":{"id":{"anyOf":[{"type":"string"},{"type":"null"}]},"type":{"type":"string","const":"bygning"},"bygningsnummer":{"anyOf":[{"type":"number"},{"type":"null"}]},"anvendelse":{"anyOf":[{"type":"object","properties":{"kode":{"type":"string"},"tekst":{"type":"string"}},"required":["kode","tekst"],"description":"A translated code field: raw code + human-readable Danish label."},{"type":"null"}]},"opfoerelsesaar":{"anyOf":[{"type":"number"},{"type":"null"}]},"areal":{"type":"object","properties":{"bebygget_m2":{"anyOf":[{"type":"number"},{"type":"null"}]},"samlet_bygningsareal_m2":{"anyOf":[{"type":"number"},{"type":"null"}]},"samlet_boligareal_m2":{"anyOf":[{"type":"number"},{"type":"null"}]},"samlet_erhvervsareal_m2":{"anyOf":[{"type":"number"},{"type":"null"}]}},"required":["bebygget_m2","samlet_bygningsareal_m2","samlet_boligareal_m2","samlet_erhvervsareal_m2"]},"materialer":{"type":"object","properties":{"ydervaeg":{"anyOf":[{"type":"object","properties":{"kode":{"type":"string"},"tekst":{"type":"string"}},"required":["kode","tekst"],"description":"A translated code field: raw code + human-readable Danish label."},{"type":"null"}]},"tag":{"anyOf":[{"type":"object","properties":{"kode":{"type":"string"},"tekst":{"type":"string"}},"required":["kode","tekst"],"description":"A translated code field: raw code + human-readable Danish label."},{"type":"null"}]}},"required":["ydervaeg","tag"]},"varme":{"type":"object","properties":{"installation":{"anyOf":[{"type":"object","properties":{"kode":{"type":"string"},"tekst":{"type":"string"}},"required":["kode","tekst"],"description":"A translated code field: raw code + human-readable Danish label."},{"type":"null"}]},"opvarmningsmiddel":{"anyOf":[{"type":"object","properties":{"kode":{"type":"string"},"tekst":{"type":"string"}},"required":["kode","tekst"],"description":"A translated code field: raw code + human-readable Danish label."},{"type":"null"}]},"supplerende":{"anyOf":[{"type":"object","properties":{"kode":{"type":"string"},"tekst":{"type":"string"}},"required":["kode","tekst"],"description":"A translated code field: raw code + human-readable Danish label."},{"type":"null"}]}},"required":["installation","opvarmningsmiddel","supplerende"]},"geometri":{"anyOf":[{"type":"object","properties":{"type":{"type":"string","const":"Point"},"coordinates":{"anyOf":[{"type":"array","prefixItems":[{"type":"number"},{"type":"number"}]},{"type":"null"}]},"epsg25832":{"type":"array","prefixItems":[{"type":"number"},{"type":"number"}]}},"required":["type","coordinates","epsg25832"]},{"type":"null"}]},"kommunekode":{"anyOf":[{"type":"string"},{"type":"null"}]},"enheder":{"type":"array","items":{"type":"object","properties":{"id":{"anyOf":[{"type":"string"},{"type":"null"}]},"anvendelse":{"anyOf":[{"type":"object","properties":{"kode":{"type":"string"},"tekst":{"type":"string"}},"required":["kode","tekst"],"description":"A translated code field: raw code + human-readable Danish label."},{"type":"null"}]},"areal":{"type":"object","properties":{"samlet_m2":{"anyOf":[{"type":"number"},{"type":"null"}]}},"required":["samlet_m2"]},"antal_vaerelser":{"anyOf":[{"type":"number"},{"type":"null"}]},"varme":{"type":"object","properties":{"installation":{"anyOf":[{"type":"object","properties":{"kode":{"type":"string"},"tekst":{"type":"string"}},"required":["kode","tekst"],"description":"A translated code field: raw code + human-readable Danish label."},{"type":"null"}]},"opvarmningsmiddel":{"anyOf":[{"type":"object","properties":{"kode":{"type":"string"},"tekst":{"type":"string"}},"required":["kode","tekst"],"description":"A translated code field: raw code + human-readable Danish label."},{"type":"null"}]}},"required":["installation","opvarmningsmiddel"]},"adresse":{"type":"object","properties":{"id":{"anyOf":[{"type":"string"},{"type":"null"}]},"betegnelse":{"anyOf":[{"type":"string"},{"type":"null"}]}},"required":["id","betegnelse"]}},"required":["id","anvendelse","areal","antal_vaerelser","varme","adresse"]}}},"required":["id","type","bygningsnummer","anvendelse","opfoerelsesaar","areal","materialer","varme","geometri","kommunekode","enheder"]}},"meta":{"type":"object","properties":{"kilde":{"type":"string"},"grundfast_version":{"type":"string"}},"required":["kilde","grundfast_version"]}},"required":["type","bfe_nummer","grund_id","kommunekode","jordstykke","antal_bygninger","bygninger","meta"],"description":"A property (BFE): grund identity + every current building on it."},"stale":{"type":"boolean"}},"required":["bfe","ejendom","stale"]}},"errors":{"type":"array","items":{"type":"object","properties":{"bfe":{"type":"number"},"error":{"type":"string"},"status":{"type":"number"}},"required":["bfe","error","status"]}},"requested":{"type":"number"},"succeeded":{"type":"number"},"failed":{"type":"number"}},"required":["results","errors","requested","succeeded","failed"],"description":"Per-BFE results + partial failures; one billable unit per deduped BFE."},"EjendomRollup":{"type":"object","properties":{"type":{"type":"string","const":"ejendom"},"bfe_nummer":{"anyOf":[{"type":"number"},{"type":"null"}]},"grund_id":{"anyOf":[{"type":"string"},{"type":"null"}]},"kommunekode":{"anyOf":[{"type":"string"},{"type":"null"}]},"jordstykke":{"type":"object","properties":{"matrikelnummer":{"anyOf":[{"type":"string"},{"type":"null"}]},"ejerlav_kode":{"anyOf":[{"type":"number"},{"type":"null"}]},"ejerlav_navn":{"anyOf":[{"type":"string"},{"type":"null"}]}},"required":["matrikelnummer","ejerlav_kode","ejerlav_navn"]},"antal_bygninger":{"type":"number"},"bygninger":{"type":"array","items":{"type":"object","properties":{"id":{"anyOf":[{"type":"string"},{"type":"null"}]},"type":{"type":"string","const":"bygning"},"bygningsnummer":{"anyOf":[{"type":"number"},{"type":"null"}]},"anvendelse":{"anyOf":[{"type":"object","properties":{"kode":{"type":"string"},"tekst":{"type":"string"}},"required":["kode","tekst"],"description":"A translated code field: raw code + human-readable Danish label."},{"type":"null"}]},"opfoerelsesaar":{"anyOf":[{"type":"number"},{"type":"null"}]},"areal":{"type":"object","properties":{"bebygget_m2":{"anyOf":[{"type":"number"},{"type":"null"}]},"samlet_bygningsareal_m2":{"anyOf":[{"type":"number"},{"type":"null"}]},"samlet_boligareal_m2":{"anyOf":[{"type":"number"},{"type":"null"}]},"samlet_erhvervsareal_m2":{"anyOf":[{"type":"number"},{"type":"null"}]}},"required":["bebygget_m2","samlet_bygningsareal_m2","samlet_boligareal_m2","samlet_erhvervsareal_m2"]},"materialer":{"type":"object","properties":{"ydervaeg":{"anyOf":[{"type":"object","properties":{"kode":{"type":"string"},"tekst":{"type":"string"}},"required":["kode","tekst"],"description":"A translated code field: raw code + human-readable Danish label."},{"type":"null"}]},"tag":{"anyOf":[{"type":"object","properties":{"kode":{"type":"string"},"tekst":{"type":"string"}},"required":["kode","tekst"],"description":"A translated code field: raw code + human-readable Danish label."},{"type":"null"}]}},"required":["ydervaeg","tag"]},"varme":{"type":"object","properties":{"installation":{"anyOf":[{"type":"object","properties":{"kode":{"type":"string"},"tekst":{"type":"string"}},"required":["kode","tekst"],"description":"A translated code field: raw code + human-readable Danish label."},{"type":"null"}]},"opvarmningsmiddel":{"anyOf":[{"type":"object","properties":{"kode":{"type":"string"},"tekst":{"type":"string"}},"required":["kode","tekst"],"description":"A translated code field: raw code + human-readable Danish label."},{"type":"null"}]},"supplerende":{"anyOf":[{"type":"object","properties":{"kode":{"type":"string"},"tekst":{"type":"string"}},"required":["kode","tekst"],"description":"A translated code field: raw code + human-readable Danish label."},{"type":"null"}]}},"required":["installation","opvarmningsmiddel","supplerende"]},"geometri":{"anyOf":[{"type":"object","properties":{"type":{"type":"string","const":"Point"},"coordinates":{"anyOf":[{"type":"array","prefixItems":[{"type":"number"},{"type":"number"}]},{"type":"null"}]},"epsg25832":{"type":"array","prefixItems":[{"type":"number"},{"type":"number"}]}},"required":["type","coordinates","epsg25832"]},{"type":"null"}]},"kommunekode":{"anyOf":[{"type":"string"},{"type":"null"}]},"enheder":{"type":"array","items":{"type":"object","properties":{"id":{"anyOf":[{"type":"string"},{"type":"null"}]},"anvendelse":{"anyOf":[{"type":"object","properties":{"kode":{"type":"string"},"tekst":{"type":"string"}},"required":["kode","tekst"],"description":"A translated code field: raw code + human-readable Danish label."},{"type":"null"}]},"areal":{"type":"object","properties":{"samlet_m2":{"anyOf":[{"type":"number"},{"type":"null"}]}},"required":["samlet_m2"]},"antal_vaerelser":{"anyOf":[{"type":"number"},{"type":"null"}]},"varme":{"type":"object","properties":{"installation":{"anyOf":[{"type":"object","properties":{"kode":{"type":"string"},"tekst":{"type":"string"}},"required":["kode","tekst"],"description":"A translated code field: raw code + human-readable Danish label."},{"type":"null"}]},"opvarmningsmiddel":{"anyOf":[{"type":"object","properties":{"kode":{"type":"string"},"tekst":{"type":"string"}},"required":["kode","tekst"],"description":"A translated code field: raw code + human-readable Danish label."},{"type":"null"}]}},"required":["installation","opvarmningsmiddel"]},"adresse":{"type":"object","properties":{"id":{"anyOf":[{"type":"string"},{"type":"null"}]},"betegnelse":{"anyOf":[{"type":"string"},{"type":"null"}]}},"required":["id","betegnelse"]}},"required":["id","anvendelse","areal","antal_vaerelser","varme","adresse"]}}},"required":["id","type","bygningsnummer","anvendelse","opfoerelsesaar","areal","materialer","varme","geometri","kommunekode","enheder"]}},"meta":{"type":"object","properties":{"kilde":{"type":"string"},"grundfast_version":{"type":"string"}},"required":["kilde","grundfast_version"]}},"required":["type","bfe_nummer","grund_id","kommunekode","jordstykke","antal_bygninger","bygninger","meta"],"description":"A property (BFE): grund identity + every current building on it."},"BbrFeatureCollection":{"type":"object","properties":{"type":{"type":"string","const":"FeatureCollection"},"features":{"type":"array","items":{"type":"object","properties":{"type":{"type":"string","const":"Feature"},"geometry":{"anyOf":[{"type":"object","properties":{"type":{"type":"string","const":"Point"},"coordinates":{"type":"array","prefixItems":[{"type":"number"},{"type":"number"}]}},"required":["type","coordinates"]},{"type":"null"}]},"properties":{"type":"object","propertyNames":{"type":"string"},"additionalProperties":{"anyOf":[{"type":"string"},{"type":"number"},{"type":"null"}]}}},"required":["type","geometry","properties"]}}},"required":["type","features"]},"KodelisteResponse":{"type":"object","properties":{"navn":{"type":"string"},"koder":{"type":"array","items":{"type":"object","properties":{"kode":{"type":"string"},"tekst":{"type":"string"}},"required":["kode","tekst"],"description":"A translated code field: raw code + human-readable Danish label."}}},"required":["navn","koder"]},"MatrikelEjendom":{"type":"object","properties":{"bfe_nummer":{"anyOf":[{"type":"number"},{"type":"null"}]},"type":{"type":"string","const":"samlet_fast_ejendom"},"jordstykker":{"type":"array","items":{"type":"object","properties":{"id":{"anyOf":[{"type":"string"},{"type":"null"}]},"matrikelnummer":{"anyOf":[{"type":"string"},{"type":"null"}]},"ejerlav":{"type":"object","properties":{"kode":{"anyOf":[{"type":"number"},{"type":"null"}]},"navn":{"anyOf":[{"type":"string"},{"type":"null"}]}},"required":["kode","navn"]},"areal_m2":{"anyOf":[{"type":"number"},{"type":"null"}]},"kommunekode":{"anyOf":[{"type":"string"},{"type":"null"}]}},"required":["id","matrikelnummer","ejerlav","areal_m2","kommunekode"]}},"meta":{"type":"object","properties":{"kilde":{"type":"string"},"grundfast_version":{"type":"string"}},"required":["kilde","grundfast_version"]}},"required":["bfe_nummer","type","jordstykker","meta"]},"RegisterInput":{"type":"object","properties":{"email":{"type":"string","format":"email","pattern":"^(?!\\.)(?!.*\\.\\.)([A-Za-z0-9_'+\\-\\.]*)[A-Za-z0-9_+-]@([A-Za-z0-9][A-Za-z0-9\\-]*\\.)+[A-Za-z]{2,}$"},"password":{"type":"string","minLength":12,"maxLength":200},"name":{"type":"string","minLength":1,"maxLength":200}},"required":["email","password"]},"LoginInput":{"type":"object","properties":{"email":{"type":"string","format":"email","pattern":"^(?!\\.)(?!.*\\.\\.)([A-Za-z0-9_'+\\-\\.]*)[A-Za-z0-9_+-]@([A-Za-z0-9][A-Za-z0-9\\-]*\\.)+[A-Za-z]{2,}$"},"password":{"type":"string","minLength":1}},"required":["email","password"]},"CreateApiKeyInput":{"type":"object","properties":{"name":{"type":"string","minLength":1,"maxLength":120},"permission":{"default":"read_only","type":"string","enum":["full_access","read_only"]},"mode":{"default":"live","type":"string","enum":["live","test"]},"expiresAt":{"type":"string","format":"date-time"}},"required":["name"]},"CreateCustomerInput":{"type":"object","properties":{"email":{"type":"string","format":"email","pattern":"^(?!\\.)(?!.*\\.\\.)([A-Za-z0-9_'+\\-\\.]*)[A-Za-z0-9_+-]@([A-Za-z0-9][A-Za-z0-9\\-]*\\.)+[A-Za-z]{2,}$"},"name":{"type":"string","minLength":1,"maxLength":200},"tier":{"default":"free","type":"string","enum":["free","starter","pro","scale","insurance"]}},"required":["email"]}},"responses":{"Error":{"description":"Error","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"}},"required":["error"]}}}}}},"paths":{"/v1/bbr/ejendom:batch":{"post":{"summary":"Resolve up to 50 BFEs in one call (one billable unit per deduped BFE)","security":[{"bearerAuth":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/EjendomBatchInput"}}}},"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/EjendomBatchResponse"}}}},"400":{"$ref":"#/components/responses/Error"},"401":{"$ref":"#/components/responses/Error"}},"description":"Property-keyed batch. Body is `{ bfe: number[] }` only (max 50, deduped). Always returns 200 with per-BFE results + partial-failure entries; only an invalid body is a 400. Consumes ONE billable unit per deduped BFE."}},"/v1/bbr/ejendom/{bfe}":{"get":{"summary":"Resolve the full BBR rollup for one BFE","security":[{"bearerAuth":[]}],"responses":{"200":{"description":"OK","headers":{"X-RateLimit-Limit":{"description":"Monthly included-call allowance (or \"unlimited\").","schema":{"type":"string"}},"X-RateLimit-Remaining":{"description":"Remaining calls this month.","schema":{"type":"string"}},"X-RateLimit-Reset":{"description":"Unix-seconds timestamp of the monthly quota reset.","schema":{"type":"integer"}},"X-Grundfast-Stale":{"description":"Present (\"true\") when a cached copy was served because the upstream was down.","schema":{"type":"string"}},"X-Grundfast-Cache-Age":{"description":"Seconds since the served (stale) copy was fetched from upstream.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/EjendomRollup"}}}},"400":{"$ref":"#/components/responses/Error"},"401":{"$ref":"#/components/responses/Error"},"404":{"$ref":"#/components/responses/Error"},"429":{"$ref":"#/components/responses/Error"},"502":{"$ref":"#/components/responses/Error"},"503":{"$ref":"#/components/responses/Error"}},"parameters":[{"name":"bfe","in":"path","required":true,"description":"BFE (Bestemt Fast Ejendom) number — the cadastral property key.","schema":{"type":"integer","exclusiveMinimum":0}}]}},"/v1/bbr/ejendom/{bfe}/geojson":{"get":{"summary":"Resolve a BFE as a WFS-compat GeoJSON FeatureCollection","security":[{"bearerAuth":[]}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/BbrFeatureCollection"}}}},"400":{"$ref":"#/components/responses/Error"},"401":{"$ref":"#/components/responses/Error"},"404":{"$ref":"#/components/responses/Error"},"429":{"$ref":"#/components/responses/Error"},"502":{"$ref":"#/components/responses/Error"},"503":{"$ref":"#/components/responses/Error"}},"parameters":[{"name":"bfe","in":"path","required":true,"description":"BFE (Bestemt Fast Ejendom) number — the cadastral property key.","schema":{"type":"integer","exclusiveMinimum":0}}]}},"/v1/bbr/bygning":{"get":{"summary":"Building(s) for a BFE (query param)","security":[{"bearerAuth":[]}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/EjendomRollup"}}}},"400":{"$ref":"#/components/responses/Error"},"401":{"$ref":"#/components/responses/Error"},"404":{"$ref":"#/components/responses/Error"},"429":{"$ref":"#/components/responses/Error"},"502":{"$ref":"#/components/responses/Error"},"503":{"$ref":"#/components/responses/Error"}},"parameters":[{"name":"bfe","in":"query","required":true,"schema":{"type":"integer","exclusiveMinimum":0}}]}},"/v1/matrikel/ejendom/{bfe}":{"get":{"summary":"Cadastre (Matriklen) rollup for one BFE","security":[{"bearerAuth":[]}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/MatrikelEjendom"}}}},"400":{"$ref":"#/components/responses/Error"},"401":{"$ref":"#/components/responses/Error"},"404":{"$ref":"#/components/responses/Error"},"429":{"$ref":"#/components/responses/Error"},"502":{"$ref":"#/components/responses/Error"},"503":{"description":"Live Matriklen source not yet available; use /v1/demo/matrikel.","content":{"application/json":{"schema":{"$ref":"#/components/responses/Error"}}}}},"parameters":[{"name":"bfe","in":"path","required":true,"description":"BFE (Bestemt Fast Ejendom) number — the cadastral property key.","schema":{"type":"integer","exclusiveMinimum":0}}]}},"/v1/kodeliste/{navn}":{"get":{"summary":"Translated code list (kode -> tekst)","security":[],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/KodelisteResponse"}}}},"404":{"$ref":"#/components/responses/Error"}},"parameters":[{"name":"navn","in":"path","required":true,"schema":{"type":"string","enum":["bygningsanvendelse","enhedsanvendelse","varmeinstallation","opvarmningsmiddel","supplerendevarme","ydervaeg","tagdaekning"]}}]}},"/v1/demo/ejendom":{"get":{"summary":"Offline BBR sample (no key)","security":[],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/EjendomRollup"}}}},"404":{"$ref":"#/components/responses/Error"}}}},"/v1/demo/ejendom.geojson":{"get":{"summary":"Offline GeoJSON sample (no key)","security":[],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/BbrFeatureCollection"}}}},"404":{"$ref":"#/components/responses/Error"}}}},"/v1/demo/matrikel":{"get":{"summary":"Offline cadastre sample (no key)","security":[],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/MatrikelEjendom"}}}},"404":{"$ref":"#/components/responses/Error"}}}},"/v1/auth/register":{"post":{"summary":"Self-serve registration (creates a free-tier customer + owner)","security":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/RegisterInput"}}}},"responses":{"201":{"description":"Created"},"400":{"$ref":"#/components/responses/Error"},"409":{"$ref":"#/components/responses/Error"}}}},"/v1/auth/login":{"post":{"summary":"Log in (sets the session cookie)","security":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/LoginInput"}}}},"responses":{"200":{"description":"OK"},"401":{"$ref":"#/components/responses/Error"}}}},"/v1/auth/logout":{"post":{"summary":"Log out (revokes the session)","security":[{"cookieAuth":[]}],"responses":{"200":{"description":"OK"}}}},"/v1/auth/me":{"get":{"summary":"Current identity (session or API key)","responses":{"200":{"description":"OK"}}}},"/v1/keys":{"post":{"summary":"Mint an API key (session-only; plaintext returned once)","security":[{"cookieAuth":[]}],"responses":{"201":{"description":"Created"},"401":{"$ref":"#/components/responses/Error"}}},"get":{"summary":"List API keys","security":[{"cookieAuth":[]}],"responses":{"200":{"description":"OK"}}}},"/v1/keys/{keyId}":{"delete":{"summary":"Revoke an API key","security":[{"cookieAuth":[]}],"parameters":[{"name":"keyId","in":"path","required":true,"schema":{"type":"integer"}}],"responses":{"200":{"description":"OK"},"404":{"$ref":"#/components/responses/Error"}}}},"/v1/me/keys":{"get":{"summary":"List own API keys","security":[{"cookieAuth":[]}],"responses":{"200":{"description":"OK"}}}},"/v1/me/usage":{"get":{"summary":"Month-to-date usage + overage estimate","security":[{"cookieAuth":[]}],"responses":{"200":{"description":"OK"}}}},"/v1/me/billing":{"get":{"summary":"Tier + Stripe linkage","security":[{"cookieAuth":[]}],"responses":{"200":{"description":"OK"}}}}}}