{"openapi":"3.1.0","info":{"title":"companydata.dk API","description":"Danish company data API powered by CVR","version":"1.0.0"},"paths":{"/v1/companies/recent":{"get":{"tags":["Companies"],"summary":"/companies/recent","description":"Get recently registered companies, sorted by registration date (newest first).\n\nOptionally filter by industry code or municipality code. Both filters\naccept multiple comma-separated codes (matches any of them).","operationId":"recent_companies_v1_companies_recent_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"industry","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Filter by industry code. Accepts multiple comma-separated codes, e.g. `561110,563000`","title":"Industry"},"description":"Filter by industry code. Accepts multiple comma-separated codes, e.g. `561110,563000`"},{"name":"municipality","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Filter by municipality code. Accepts multiple comma-separated codes, e.g. `101,147` (matches any of them).","title":"Municipality"},"description":"Filter by municipality code. Accepts multiple comma-separated codes, e.g. `101,147` (matches any of them)."},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":50,"minimum":1,"description":"Number of results","default":10,"title":"Limit"},"description":"Number of results"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/companies":{"get":{"tags":["Companies"],"summary":"/companies","description":"Search companies with filters.\n\nBy default only active companies are returned. When `lat` and `lng` are provided,\nresults are sorted by distance from the center point and include `distance_meters`.\n\nThe `industry` and `type` filters accept multiple comma-separated values and\nmatch any of them.\n\n**Pagination without `lat`/`lng`:** `pagination.total_is_exact` indicates whether `total` is\nan exact count. When false, `total` is a lower bound (counts are capped at\n1,000 or may be incomplete after a query timeout), and `pages` is derived\nfrom that lower bound.\n\nFilter-only browsing (for example, `industry=561110` without a name query)\nstill returns data beyond row 1,000: `page=11&limit=100` is supported even\nwhen `pages` is 10. Do not treat `pages` as an end marker when\n`total_is_exact` is false. An incomplete empty response is not proof that\nno companies match; retry or narrow the filters if a query times out.\n\nName searches rank at most 1,000 candidates. Refine `q` or add filters\nwhen their count is incomplete; deeper pages cannot extend this ranked\nwindow. Query time budgets and rate limits apply to all pages.\n\n**Examples:**\n- Text search: `/v1/companies?q=Copenhagen`\n- Location search: `/v1/companies?lat=55.6761&lng=12.5683&radius=2000`\n- Combined: `/v1/companies?q=cafe&lat=55.6761&lng=12.5683&radius=1000&type=APS`\n- Multiple industries near a point: `/v1/companies?industry=561110,563000,551110&lat=55.6761&lng=12.5683&radius=2000`","operationId":"search_companies_endpoint_v1_companies_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"q","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Search query","title":"Q"},"description":"Search query"},{"name":"status","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Filter by status (active, dissolved)","title":"Status"},"description":"Filter by status (active, dissolved)"},{"name":"include_inactive","in":"query","required":false,"schema":{"type":"boolean","description":"Include inactive/dissolved companies","default":false,"title":"Include Inactive"},"description":"Include inactive/dissolved companies"},{"name":"type","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Filter by company type (APS, AS, etc.). Accepts multiple comma-separated values.","title":"Type"},"description":"Filter by company type (APS, AS, etc.). Accepts multiple comma-separated values."},{"name":"industry","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Filter by industry code. Accepts multiple comma-separated codes, e.g. `561110,563000` (matches any of them).","title":"Industry"},"description":"Filter by industry code. Accepts multiple comma-separated codes, e.g. `561110,563000` (matches any of them)."},{"name":"municipality","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Filter by municipality code. Accepts multiple comma-separated codes, e.g. `101,147` (matches any of them).","title":"Municipality"},"description":"Filter by municipality code. Accepts multiple comma-separated codes, e.g. `101,147` (matches any of them)."},{"name":"postal_code","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Filter by postal code (4 digits)","title":"Postal Code"},"description":"Filter by postal code (4 digits)"},{"name":"lat","in":"query","required":false,"schema":{"anyOf":[{"type":"number"},{"type":"null"}],"description":"Latitude for location-based search","title":"Lat"},"description":"Latitude for location-based search"},{"name":"lng","in":"query","required":false,"schema":{"anyOf":[{"type":"number"},{"type":"null"}],"description":"Longitude for location-based search","title":"Lng"},"description":"Longitude for location-based search"},{"name":"radius","in":"query","required":false,"schema":{"type":"integer","maximum":50000,"minimum":50,"description":"Search radius in meters (min 50m, max 50km)","default":1000,"title":"Radius"},"description":"Search radius in meters (min 50m, max 50km)"},{"name":"page","in":"query","required":false,"schema":{"type":"integer","minimum":1,"description":"Page number","default":1,"title":"Page"},"description":"Page number"},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":100,"minimum":1,"description":"Results per page","default":25,"title":"Limit"},"description":"Results per page"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/app__models__company__CompanySearchResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/companies/autocomplete":{"get":{"tags":["Companies"],"summary":"/companies/autocomplete","description":"Fast autocomplete for search boxes.","operationId":"autocomplete_v1_companies_autocomplete_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"q","in":"query","required":true,"schema":{"type":"string","minLength":2,"description":"Search query","title":"Q"},"description":"Search query"},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":20,"minimum":1,"description":"Max results","default":10,"title":"Limit"},"description":"Max results"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AutocompleteResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/companies/export":{"get":{"tags":["Companies"],"summary":"/companies/export","description":"Export search results to Excel.\n\nReturns an Excel file (.xlsx) with company data matching the search criteria.\n\n**Limits:**\n- Free tier: 100 companies max\n- Pro tier: 500 companies max\n\n**Columns included:**\nCVR, Name, Status, Company Type, Industry Code, Industry Name,\nAddress, Postal Code, City, Municipality, Employees, Revenue, Revenue Year","operationId":"export_search_results_v1_companies_export_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"q","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Search query","title":"Q"},"description":"Search query"},{"name":"include_inactive","in":"query","required":false,"schema":{"type":"boolean","description":"Include inactive/dissolved companies","default":false,"title":"Include Inactive"},"description":"Include inactive/dissolved companies"},{"name":"industry","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Filter by industry code. Accepts multiple comma-separated codes, e.g. `561110,563000` (matches any of them).","title":"Industry"},"description":"Filter by industry code. Accepts multiple comma-separated codes, e.g. `561110,563000` (matches any of them)."},{"name":"municipality","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Filter by municipality code. Accepts multiple comma-separated codes, e.g. `101,147` (matches any of them).","title":"Municipality"},"description":"Filter by municipality code. Accepts multiple comma-separated codes, e.g. `101,147` (matches any of them)."},{"name":"lat","in":"query","required":false,"schema":{"anyOf":[{"type":"number"},{"type":"null"}],"description":"Latitude for location-based search","title":"Lat"},"description":"Latitude for location-based search"},{"name":"lng","in":"query","required":false,"schema":{"anyOf":[{"type":"number"},{"type":"null"}],"description":"Longitude for location-based search","title":"Lng"},"description":"Longitude for location-based search"},{"name":"radius","in":"query","required":false,"schema":{"type":"integer","maximum":50000,"minimum":50,"description":"Search radius in meters","default":2000,"title":"Radius"},"description":"Search radius in meters"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/companies/legal-notices":{"get":{"tags":["Companies"],"summary":"/companies/legal-notices","description":"List recent legal notices from Statstidende, newest first.","operationId":"list_legal_notices_v1_companies_legal_notices_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":200,"minimum":1,"default":50,"title":"Limit"}},{"name":"offset","in":"query","required":false,"schema":{"type":"integer","minimum":0,"default":0,"title":"Offset"}},{"name":"event_type","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Filter by event type: financial_distress or corporate_announcement","title":"Event Type"},"description":"Filter by event type: financial_distress or corporate_announcement"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/LegalNoticesPublicResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/companies/{cvr}":{"get":{"tags":["Companies"],"summary":"/companies/{cvr}","description":"Get full details for a company by CVR number.\n\nReturns company information including address, industry, employees, ownership,\nboard members, directors, and a financial summary.\n\n**Note:** CDS (CompanyData Score) is only included for Pro tier subscriptions.","operationId":"get_company_v1_companies__cvr__get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"cvr","in":"path","required":true,"schema":{"type":"string","title":"Cvr"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CompanyResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/companies/{cvr}/financials":{"get":{"tags":["Companies"],"summary":"/companies/{cvr}/financials","description":"Get financial statements for a company.\n\nReturns all available annual reports with key figures extracted from XBRL,\nsorted by period end date (newest first).","operationId":"get_company_financials_v1_companies__cvr__financials_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"cvr","in":"path","required":true,"schema":{"type":"string","title":"Cvr"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CompanyFinancialsResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/companies/{cvr}/financials/{announcement_id}/pdf":{"get":{"tags":["Companies"],"summary":"/companies/{cvr}/financials/{announcement_id}/pdf","description":"Download PDF for a financial statement.\n\nProxies the PDF download from Virk to avoid exposing the direct URL.\nReturns the PDF file as a streaming response.","operationId":"download_financial_pdf_v1_companies__cvr__financials__announcement_id__pdf_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"cvr","in":"path","required":true,"schema":{"type":"string","title":"Cvr"}},{"name":"announcement_id","in":"path","required":true,"schema":{"type":"string","title":"Announcement Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/companies/{cvr}/financials/{announcement_id}/xhtml":{"get":{"tags":["Companies"],"summary":"/companies/{cvr}/financials/{announcement_id}/xhtml","description":"Get XHTML (viewable annual report) for a financial statement.\n\nProxies the XHTML download from Virk. The XHTML is a styled, human-readable\nversion of the annual report that can be viewed in a browser.","operationId":"view_financial_xhtml_v1_companies__cvr__financials__announcement_id__xhtml_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"cvr","in":"path","required":true,"schema":{"type":"string","title":"Cvr"}},{"name":"announcement_id","in":"path","required":true,"schema":{"type":"string","title":"Announcement Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/companies/{cvr}/timeline":{"get":{"tags":["Companies"],"summary":"/companies/{cvr}/timeline","description":"Get timeline of corporate events for a company.\n\nReturns historical events including:\n- Company founding\n- Director changes (joined/left)\n- Board member changes (joined/left)\n- Ownership changes\n- Auditor changes\n- Status changes (bankruptcy, liquidation, etc.)\n\nEvents are sorted by date (newest first).","operationId":"get_company_timeline_endpoint_v1_companies__cvr__timeline_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"cvr","in":"path","required":true,"schema":{"type":"string","title":"Cvr"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CompanyTimelineResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/companies/{cvr}/portfolio":{"get":{"tags":["Companies"],"summary":"/companies/{cvr}/portfolio","description":"Get companies owned by this company.\n\nReturns all companies where this company is listed as an owner,\nsorted by ownership percentage (highest first).","operationId":"get_company_portfolio_v1_companies__cvr__portfolio_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"cvr","in":"path","required":true,"schema":{"type":"string","title":"Cvr"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CompanyPortfolioResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/companies/{cvr}/tenders":{"get":{"tags":["Companies"],"summary":"/companies/{cvr}/tenders","description":"Public procurement tenders linked to this company.\n\nrole=won: award notices from TED and udbud.dk where the company appears\nas a winner (matched on CVR). role=buyer: tenders the company issued as\ncontracting authority (matched on exact registry name — the sources\ncarry no buyer CVR, so name variants may be missed). Most recent first.","operationId":"get_company_tenders_v1_companies__cvr__tenders_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"cvr","in":"path","required":true,"schema":{"type":"string","title":"Cvr"}},{"name":"role","in":"query","required":false,"schema":{"type":"string","pattern":"^(won|buyer)$","description":"'won' = contracts the company won; 'buyer' = tenders the company issued","default":"won","title":"Role"},"description":"'won' = contracts the company won; 'buyer' = tenders the company issued"},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":50,"minimum":1,"description":"Number of results","default":10,"title":"Limit"},"description":"Number of results"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CompanyTendersResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/companies/{cvr}/news":{"get":{"tags":["Companies"],"summary":"/companies/{cvr}/news","description":"News & press coverage matched to this company: press releases (Via\nRitzau) and media mentions (Danish news feeds), most recent first.\n\nThe 10 most recent items are public; paging beyond them (offset > 0 or\nlimit > 10) requires a Pro subscription.\n\nMedia mentions deliberately carry no summary text — only headline,\nsource, link and date (Danish press publishers' right, ophavsretsloven\n§ 69a). Press releases are distribution content and include the lead.","operationId":"get_company_news_v1_companies__cvr__news_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"cvr","in":"path","required":true,"schema":{"type":"string","title":"Cvr"}},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":25,"minimum":1,"description":"Number of results","default":10,"title":"Limit"},"description":"Number of results"},{"name":"offset","in":"query","required":false,"schema":{"type":"integer","minimum":0,"description":"Skip results (Pro archive paging)","default":0,"title":"Offset"},"description":"Skip results (Pro archive paging)"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CompanyNewsResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/companies/{cvr}/koncern-graph":{"get":{"tags":["Companies"],"summary":"/companies/{cvr}/koncern-graph","description":"Get the corporate group (koncern) graph around a company.\n\nNodes are companies and person owners; edges point from owner to owned\nwith ownership/voting percentages. Traverses the ownership chain up to\n3 levels in both directions (owners and subsidiaries).\n\n`truncated` is `true` whenever the returned graph is incomplete for any\nreason: the depth limit (3 levels each way) cut off further owners or\nsubsidiaries, a single node had more than 25 owners/subsidiaries, or the\ngraph hit the 120-node cap. `truncated: false` means the full ownership\nstructure is included.","operationId":"get_koncern_graph_v1_companies__cvr__koncern_graph_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"cvr","in":"path","required":true,"schema":{"type":"string","title":"Cvr"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/KoncernGraphResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/companies/{cvr}/beneficial-owners":{"get":{"tags":["Companies"],"summary":"/companies/{cvr}/beneficial-owners","description":"Resolve the ultimate (beneficial) owners of a company.\n\nWalks the ownership chain upward through company owners, multiplying the\nownership stake along every path, and returns the ultimate person owners\nwith their effective percentage (summed across all paths). Where a chain\nends at a foreign entity (ANDEN_DELTAGER), a company we can't resolve\nfurther, or the depth limit, that owner is returned as a leaf with a\n`leaf_reason`.\n\nThis is the company-rooted counterpart to\n`/v1/participants/{unit_number}/indirect-ownership`, which is rooted on a\nperson and walks downward. Use this one to answer \"who really owns this\ncompany\" in a single call.","operationId":"get_company_beneficial_owners_v1_companies__cvr__beneficial_owners_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"cvr","in":"path","required":true,"schema":{"type":"string","title":"Cvr"}},{"name":"max_depth","in":"query","required":false,"schema":{"type":"integer","maximum":10,"minimum":1,"description":"Maximum ownership levels to walk upward","default":5,"title":"Max Depth"},"description":"Maximum ownership levels to walk upward"},{"name":"min_percent","in":"query","required":false,"schema":{"type":"number","maximum":1,"minimum":0,"description":"Minimum effective ownership to include (0.01 = 1%)","default":0.01,"title":"Min Percent"},"description":"Minimum effective ownership to include (0.01 = 1%)"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/BeneficialOwnersResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/companies/{cvr}/cds":{"get":{"tags":["Companies"],"summary":"/companies/{cvr}/cds","description":"Get the CDS (CompanyData Score) summary for a company.\n\nRequires a Pro subscription. This is the endpoint the frontend fetches\nclient-side after login so the score never appears in the publicly\ncached company page.","operationId":"get_company_cds_v1_companies__cvr__cds_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"cvr","in":"path","required":true,"schema":{"type":"string","title":"Cvr"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CDSSummary"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/companies/{cvr}/risk-signals":{"get":{"tags":["Companies"],"summary":"/companies/{cvr}/risk-signals","description":"Financial reporting conduct facts for a company, derived from its\nannual reports: filings after the statutory deadline (ÅRL § 138),\nan overdue current filing, missing fiscal years, auditor changes, and\nthe auditor's own latest opinion (qualified opinion, going concern).\n\nFacts only, no score. Signals consider the 5 most recent annual\nreports and are recomputed nightly. `available` is false for companies\nwithout financial statements (including sole proprietorships with no\nfiling duty).","operationId":"get_company_risk_signals_v1_companies__cvr__risk_signals_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"cvr","in":"path","required":true,"schema":{"type":"string","title":"Cvr"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/companies/{cvr}/climate-risk":{"get":{"tags":["Companies"],"summary":"/companies/{cvr}/climate-risk","description":"Flood risk (DHM/Bluespot ekstremregn + DHM/Havvand paa land) aggregated\nover the company's actively owned properties. Assessments are computed on\nfirst request and cached per property, so the first call for a company\nwith many unassessed properties can take a few seconds.\n\nRequires a Pro subscription. Climate data itself is open geodata\n(Klimadatastyrelsen, CC BY 4.0) — the gate covers the aggregation onto a\ncompany's asset portfolio, same as the property list.","operationId":"get_company_climate_v1_companies__cvr__climate_risk_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"cvr","in":"path","required":true,"schema":{"type":"string","title":"Cvr"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CompanyClimateRiskResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/companies/{cvr}/smiley":{"get":{"tags":["Companies"],"summary":"/companies/{cvr}/smiley","description":"Fødevarestyrelsen food inspection (smiley) results for the company's\nregistered establishments. Open data from findsmiley.dk; kontrolresultat\n1 = ingen anmærkninger, 2 = indskærpelse, 3 = påbud/forbud,\n4 = bødeforelæg, politianmeldelse eller autorisation frataget.\nOnly establishments present in the current findsmiley dump are returned.","operationId":"get_company_smiley_v1_companies__cvr__smiley_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"cvr","in":"path","required":true,"schema":{"type":"string","title":"Cvr"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CompanySmileyResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/companies/{cvr}/livestock":{"get":{"tags":["Companies"],"summary":"/companies/{cvr}/livestock","description":"Livestock herds (husdyrbesætninger) registered to the company in CHR,\nDet Centrale Husdyrbrugsregister (Fødevarestyrelsen). Per herd: CHR\nnumber, species, usage, per-category herd sizes and organic status,\nplus the location of the CHR-nummer (address and, where the stald\ncoordinate resolves to a property in the matrikel register, its BFE\nnumber). Populated for active companies with an agriculture/fishery\nindustry code; refreshed continuously.","operationId":"get_company_livestock_v1_companies__cvr__livestock_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"cvr","in":"path","required":true,"schema":{"type":"string","title":"Cvr"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CompanyLivestockResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/companies/{cvr}/pep-screening":{"get":{"tags":["Companies"],"summary":"/companies/{cvr}/pep-screening","description":"Screen a company's people against Finanstilsynet's PEP lists.\n\nScreens current owners (persons), active board members and active\ndirectors by normalized name against the official Danish, Faroese and\nGreenlandic lists of politically exposed persons (hvidvasklovens § 18,\nstk. 7).\n\nCVR carries no birth dates for participants, so matching is name-based\nonly: every match is a *possible* match that must be verified manually.\n`confidence` is `name_exact` when all name parts match and `name_partial`\nwhen only first and last name match. Intended as KYC/AML decision\nsupport — you remain responsible for your own customer due diligence.","operationId":"get_company_pep_screening_v1_companies__cvr__pep_screening_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"cvr","in":"path","required":true,"schema":{"type":"string","title":"Cvr"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PepScreeningResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/companies/{cvr}/properties":{"get":{"tags":["Companies"],"summary":"/companies/{cvr}/properties","description":"Get real estate properties owned by this company.\n\nReturns property ownerships from EJF (Ejerfortegnelsen) linked by CVR number.\nIncludes BFE number, ownership shares, and effective dates.\n\nUse `status=active` (default) for current ownerships, `status=historic` for ended ownerships.","operationId":"get_company_properties_v1_companies__cvr__properties_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"cvr","in":"path","required":true,"schema":{"type":"string","title":"Cvr"}},{"name":"status","in":"query","required":false,"schema":{"type":"string","description":"Filter by status: 'active' or 'historic'","default":"active","title":"Status"},"description":"Filter by status: 'active' or 'historic'"},{"name":"page","in":"query","required":false,"schema":{"type":"integer","minimum":1,"description":"Page number","default":1,"title":"Page"},"description":"Page number"},{"name":"page_size","in":"query","required":false,"schema":{"type":"integer","maximum":100,"minimum":1,"description":"Items per page (max 100)","default":50,"title":"Page Size"},"description":"Items per page (max 100)"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CompanyPropertiesResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/companies/{cvr}/production-units":{"get":{"tags":["Companies"],"summary":"/companies/{cvr}/production-units","description":"Get production units (P-enheder) for a company.\n\nProduction units are physical business locations within a company.\nA company like 7-11 has one CVR but hundreds of P-enheder (store locations).","operationId":"get_company_production_units_v1_companies__cvr__production_units_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"cvr","in":"path","required":true,"schema":{"type":"string","title":"Cvr"}},{"name":"include_dissolved","in":"query","required":false,"schema":{"type":"boolean","description":"Include dissolved P-enheder","default":false,"title":"Include Dissolved"},"description":"Include dissolved P-enheder"},{"name":"page","in":"query","required":false,"schema":{"type":"integer","minimum":1,"description":"Page number","default":1,"title":"Page"},"description":"Page number"},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":500,"minimum":1,"description":"Results per page","default":100,"title":"Limit"},"description":"Results per page"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProductionUnitListResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/companies/{cvr}/export":{"get":{"tags":["Companies","Companies"],"summary":"/companies/{cvr}/export","description":"Export company data to Excel workbook.\n\nReturns an Excel file (.xlsx) with multiple sheets:\n- **Oversigt** - Basic company information\n- **Regnskab** - Financial history\n- **Ejere** - Ownership structure\n- **Ledelse** - Directors and board members\n- **Ejendomme** - Property ownerships (if any)\n- **Historik** - Timeline of corporate events\n\nRequires Pro subscription.","operationId":"export_company_to_excel_v1_companies__cvr__export_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"cvr","in":"path","required":true,"schema":{"type":"string","title":"Cvr"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/companies/{cvr}/similar":{"get":{"tags":["Companies"],"summary":"/companies/{cvr}/similar","description":"Find companies similar to the given company using geo-based search.\n\nReturns companies that are similar based on:\n- Same industry category (first 4 digits of industry code)\n- Geographic proximity (within radius, sorted by distance)\n- Falls back to municipality matching if no nearby companies found\n\nThis endpoint is useful for finding competitors or related businesses in the area.","operationId":"get_similar_companies_endpoint_v1_companies__cvr__similar_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"cvr","in":"path","required":true,"schema":{"type":"string","title":"Cvr"}},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":10,"minimum":1,"description":"Maximum number of similar companies to return","default":5,"title":"Limit"},"description":"Maximum number of similar companies to return"},{"name":"radius","in":"query","required":false,"schema":{"type":"integer","maximum":50000,"minimum":500,"description":"Search radius in meters (500m to 50km)","default":5000,"title":"Radius"},"description":"Search radius in meters (500m to 50km)"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SimilarCompaniesResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/companies/{cvr}/stock-prices":{"get":{"tags":["Companies"],"summary":"/companies/{cvr}/stock-prices","description":"Daily share price candles for an OMX Copenhagen-listed company.\n\nOnly companies listed on Nasdaq Copenhagen have price data; all other\nCVRs return 404. Returns the primary (most traded) share class with up\nto 5 years of daily OHLCV candles, refreshed on trading days.","operationId":"get_stock_prices_v1_companies__cvr__stock_prices_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"cvr","in":"path","required":true,"schema":{"type":"string","title":"Cvr"}},{"name":"range_days","in":"query","required":false,"schema":{"type":"integer","maximum":1900,"minimum":30,"description":"Number of trailing days of candles","default":365,"title":"Range Days"},"description":"Number of trailing days of candles"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/StockPricesResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/companies/{cvr}/summary":{"get":{"tags":["Companies"],"summary":"/companies/{cvr}/summary","description":"Get the AI-generated summary for a company.\n\nReturns a concise 2-3 sentence summary of the company's financial health and trajectory,\navailable in both Danish and English.\n\nSummaries are only available for \"interesting\" companies with meaningful financial data.","operationId":"get_company_summary_endpoint_v1_companies__cvr__summary_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"cvr","in":"path","required":true,"schema":{"type":"string","title":"Cvr"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CompanySummaryResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/companies/{cvr}/legal-notices":{"get":{"tags":["Companies"],"summary":"/companies/{cvr}/legal-notices","description":"Get legal notices from Statstidende linked to this CVR.","operationId":"get_company_legal_notices_v1_companies__cvr__legal_notices_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"cvr","in":"path","required":true,"schema":{"type":"string","title":"Cvr"}},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":100,"minimum":1,"default":20,"title":"Limit"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/LegalNoticesResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/companies/{cvr}/e-invoicing":{"get":{"tags":["Companies"],"summary":"/companies/{cvr}/e-invoicing","description":"Where and how the company receives electronic invoices.\n\nLists the company's EAN numbers and other Peppol endpoints with the\ndocument kinds and invoice formats each accepts (OIOUBL 2.1, Peppol BIS\nBilling 3.0 and others). Sourced daily from the Peppol Directory, which\ncovers the endpoints whose provider publishes a business card; a company\nthat is not listed may still receive invoices by other means. A region\nor large municipality has thousands of EAN numbers; page with limit and\noffset, or search them by name on /ean.","operationId":"get_company_e_invoicing_v1_companies__cvr__e_invoicing_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"cvr","in":"path","required":true,"schema":{"type":"string","title":"Cvr"}},{"name":"include_inactive","in":"query","required":false,"schema":{"type":"boolean","description":"Also return endpoints that have left the Peppol Directory","default":false,"title":"Include Inactive"},"description":"Also return endpoints that have left the Peppol Directory"},{"name":"include","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Set to document_types to include the raw Peppol document type identifiers","title":"Include"},"description":"Set to document_types to include the raw Peppol document type identifiers"},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":500,"minimum":1,"default":50,"title":"Limit"}},{"name":"offset","in":"query","required":false,"schema":{"type":"integer","minimum":0,"default":0,"title":"Offset"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CompanyEInvoicingResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/companies/{cvr}/retslister":{"get":{"tags":["Companies"],"summary":"/companies/{cvr}/retslister","description":"Court hearings (retslister) where the company appears as a party.\n\nSourced from the hearing lists Danmarks Domstole publish per court\n(civil, criminal and forced-auction lists). The source only keeps\nroughly the current month, so this is a snapshot of currently published\nhearings. Party names are matched to registered companies by exact\nnormalized name; private persons are never included.","operationId":"get_company_court_hearings_v1_companies__cvr__retslister_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"cvr","in":"path","required":true,"schema":{"type":"string","title":"Cvr"}},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":50,"minimum":1,"default":20,"title":"Limit"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CompanyCourtHearingsResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/participants":{"get":{"tags":["Participants"],"summary":"/participants","description":"Search participants by name.\n\nSearches individuals (persons) that appear in ownership or management roles.\nCompanies are not stored as participants — look them up by CVR via the\n/companies endpoints (e.g. /companies/{cvr}/beneficial-owners).","operationId":"search_participants_endpoint_v1_participants_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"q","in":"query","required":true,"schema":{"type":"string","minLength":2,"description":"Search query (name)","title":"Q"},"description":"Search query (name)"},{"name":"page","in":"query","required":false,"schema":{"type":"integer","minimum":1,"description":"Page number","default":1,"title":"Page"},"description":"Page number"},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":100,"minimum":1,"description":"Results per page","default":25,"title":"Limit"},"description":"Results per page"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ParticipantSearchResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/participants/count":{"get":{"tags":["Participants"],"summary":"/participants/count","description":"How many persons match a name query (capped at 100).\n\nNot Pro-gated on purpose: it returns a number only, so the search page\ncan label its \"Personer\" tab for every visitor while the persons\nthemselves stay behind the Pro-gated search. Hidden persons are excluded.","operationId":"count_participants_endpoint_v1_participants_count_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"q","in":"query","required":true,"schema":{"type":"string","minLength":2,"maxLength":120,"description":"Name query","title":"Q"},"description":"Name query"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/participants/{unit_number}":{"get":{"tags":["Participants"],"summary":"/participants/{unit_number}","description":"Get a participant by their CVR unit number.\n\nReturns participant details including all company relationships.","operationId":"get_participant_v1_participants__unit_number__get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"unit_number","in":"path","required":true,"schema":{"type":"integer","title":"Unit Number"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ParticipantResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/participants/{unit_number}/preview":{"get":{"tags":["Participants"],"summary":"/participants/{unit_number}/preview","description":"Public lookup of a participant's name and type by unit_number.\n\nUsed by search-box autocomplete to confirm a pasted unit_number\nresolves to a real participant. Does not return portfolio or any\nrole data — those remain pro-gated via /portfolio.","operationId":"get_participant_preview_endpoint_v1_participants__unit_number__preview_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"unit_number","in":"path","required":true,"schema":{"type":"integer","title":"Unit Number"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/participants/{unit_number}/portfolio":{"get":{"tags":["Participants"],"summary":"/participants/{unit_number}/portfolio","description":"Get all companies a participant is involved with.\n\nReturns categorized lists of:\n- Ownership stakes\n- Board positions\n- Director positions\n- Other roles","operationId":"get_participant_portfolio_endpoint_v1_participants__unit_number__portfolio_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"unit_number","in":"path","required":true,"schema":{"type":"integer","title":"Unit Number"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ParticipantPortfolioResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/participants/{unit_number}/network":{"get":{"tags":["Participants"],"summary":"/participants/{unit_number}/network","description":"Get a participant's network — people who held management/board roles\nat the same companies during overlapping time periods.\n\n- `limit=3` (default) returns a teaser (3 people + total count)\n- `limit=0` returns paginated results (use page and page_size)","operationId":"get_participant_network_endpoint_v1_participants__unit_number__network_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"unit_number","in":"path","required":true,"schema":{"type":"integer","title":"Unit Number"}},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","minimum":0,"description":"Max people to return (0 = unlimited)","default":3,"title":"Limit"},"description":"Max people to return (0 = unlimited)"},{"name":"page","in":"query","required":false,"schema":{"type":"integer","minimum":1,"description":"Page number (only used when limit=0)","default":1,"title":"Page"},"description":"Page number (only used when limit=0)"},{"name":"page_size","in":"query","required":false,"schema":{"type":"integer","maximum":100,"minimum":1,"description":"Results per page (only used when limit=0)","default":25,"title":"Page Size"},"description":"Results per page (only used when limit=0)"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/participants/{unit_number}/path/{other_unit_number}":{"get":{"tags":["Participants"],"summary":"/participants/{unit_number}/path/{other_unit_number}","description":"Netværkssøgning: find the shortest relation path between two persons.\n\nPersons are connected through companies where they hold (or held)\nmanagement/board roles or registered ownership. Searches up to 3 degrees\n(companies on the path) and returns up to 8 parallel shortest paths as a\nnodes/edges graph plus the node-id sequence of each path.\n\n- `degrees=1`: the two persons share a company\n- `degrees=2`: connected through one intermediate person\n- `degrees=3`: connected through two intermediate persons\n- `path_found=false`: no connection within 3 degrees","operationId":"get_network_path_endpoint_v1_participants__unit_number__path__other_unit_number__get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"unit_number","in":"path","required":true,"schema":{"type":"integer","title":"Unit Number"}},{"name":"other_unit_number","in":"path","required":true,"schema":{"type":"integer","title":"Other Unit Number"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/participants/{unit_number}/indirect-ownership":{"get":{"tags":["Participants"],"summary":"/participants/{unit_number}/indirect-ownership","description":"Get indirect ownership for a participant.\n\nComputes ownership through chains of company ownership. For example:\n- If Person A owns 50% of Company X\n- And Company X owns 100% of Company Y\n- Then Person A indirectly owns 50% of Company Y\n\nReturns indirect_ownership with effective percentages and ownership paths.","operationId":"get_participant_indirect_ownership_endpoint_v1_participants__unit_number__indirect_ownership_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"unit_number","in":"path","required":true,"schema":{"type":"integer","title":"Unit Number"}},{"name":"max_depth","in":"query","required":false,"schema":{"type":"integer","maximum":5,"minimum":1,"description":"Maximum depth to traverse ownership chains","default":3,"title":"Max Depth"},"description":"Maximum depth to traverse ownership chains"},{"name":"min_percent","in":"query","required":false,"schema":{"type":"number","maximum":1,"minimum":0,"description":"Minimum effective ownership percentage to include","default":0.01,"title":"Min Percent"},"description":"Minimum effective ownership percentage to include"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/account":{"get":{"tags":["Account"],"summary":"/account","description":"Get information about the current API key.","operationId":"get_account_v1_account_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AccountResponse"}}}}},"security":[{"HTTPBearer":[]}]}},"/v1/account/usage":{"get":{"tags":["Account"],"summary":"/account/usage","description":"Get usage statistics for the current API key.\n\n`requests_this_month` is this key's own count. The monthly limit is\nenforced on the organisation's pooled counter, so `requests_remaining`\nis computed from that live counter plus the org's unspent credits;\nwithout the credits a client at the plan limit would read 0 while\nhundreds of paid requests sit unused.","operationId":"get_usage_v1_account_usage_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/app__routers__account__UsageResponse"}}}}},"security":[{"HTTPBearer":[]}]}},"/v1/municipalities":{"get":{"tags":["Reference Data"],"summary":"/municipalities","description":"List all Danish municipalities.\n\nOptionally filter by region code. Results are sorted alphabetically by name.\n\n**Region codes:**\n- 1081: Region Nordjylland\n- 1082: Region Midtjylland\n- 1083: Region Syddanmark\n- 1084: Region Hovedstaden\n- 1085: Region Sjælland","operationId":"list_municipalities_v1_municipalities_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"region_code","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Filter by region code","title":"Region Code"},"description":"Filter by region code"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/app__routers__reference__MunicipalityListResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/municipalities/{code}":{"get":{"tags":["Reference Data"],"summary":"/municipalities/{code}","description":"Get a single municipality by code.","operationId":"get_municipality_v1_municipalities__code__get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"code","in":"path","required":true,"schema":{"type":"string","title":"Code"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Municipality"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/regions":{"get":{"tags":["Reference Data"],"summary":"/regions","description":"List all Danish regions.\n\nDenmark has 5 regions. Results are sorted alphabetically by name.","operationId":"list_regions_v1_regions_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/RegionListResponse"}}}}},"security":[{"HTTPBearer":[]}]}},"/v1/industries":{"get":{"tags":["Reference Data"],"summary":"/industries","description":"List industries with company counts.\n\nReturns industries sorted by total count (most common first).\nUse locale=en for English translations.","operationId":"list_industries_v1_industries_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"q","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Search filter for industry name","title":"Q"},"description":"Search filter for industry name"},{"name":"code","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Filter by exact industry code","title":"Code"},"description":"Filter by exact industry code"},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":2000,"minimum":1,"description":"Max results to return","default":50,"title":"Limit"},"description":"Max results to return"},{"name":"locale","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Locale for industry names (da/en)","default":"da","title":"Locale"},"description":"Locale for industry names (da/en)"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/app__routers__reference__IndustryListResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/industries/translations":{"get":{"tags":["Reference Data"],"summary":"/industries/translations","description":"Get all industry code translations for client-side caching.\n\nReturns a dictionary mapping industry codes to their Danish and English names.\nResponse is cacheable for 24 hours.","operationId":"get_industry_translations_v1_industries_translations_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/IndustryTranslationsResponse"}}}}},"security":[{"HTTPBearer":[]}]}},"/v1/postal-codes":{"get":{"tags":["Reference Data"],"summary":"/postal-codes","description":"List all Danish postal codes, sorted numerically by postal code.\n\n`municipality_code` filters to postal codes observed in that\nmunicipality (registered company addresses; postal codes that straddle\nmunicipal borders appear for every municipality they touch).","operationId":"list_postal_codes_v1_postal_codes_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"municipality_code","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Filter by municipality code","title":"Municipality Code"},"description":"Filter by municipality code"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/app__routers__reference__PostalCodeListResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/kuratorer":{"get":{"tags":["Reference Data"],"summary":"/kuratorer","description":"Directory of kuratorer (bankruptcy trustees): appointments published in\nStatstidende konkursdekret notices within the last 12 months, grouped by\ntrustee name. Professional-capacity data as published in Statstidende.\n\nNames are grouped as published; the same person may appear under name\nvariants.","operationId":"list_kuratorer_v1_kuratorer_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"q","in":"query","required":false,"schema":{"anyOf":[{"type":"string","minLength":2},{"type":"null"}],"description":"Name search (case-insensitive substring)","title":"Q"},"description":"Name search (case-insensitive substring)"},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":100,"minimum":1,"default":25,"title":"Limit"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/KuratorDirectoryResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/postal-codes/{code}":{"get":{"tags":["Reference Data"],"summary":"/postal-codes/{code}","description":"Get a single postal code with company count.","operationId":"get_postal_code_v1_postal_codes__code__get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"code","in":"path","required":true,"schema":{"type":"string","title":"Code"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PostalCode"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/ean/{ean}":{"get":{"tags":["E-invoicing"],"summary":"/ean/{ean}","description":"Look up an EAN number (GLN location number) used for electronic invoicing.\n\nReturns who receives documents on that EAN, the CVR number behind it,\nwhich document kinds and invoice formats it accepts (OIOUBL, Peppol BIS\nBilling 3.0 and others), and the company as we hold it. Endpoints that\nhave left the Peppol Directory are still returned with `active: false`.","operationId":"lookup_ean_v1_ean__ean__get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"ean","in":"path","required":true,"schema":{"type":"string","pattern":"^\\d{8,14}$","description":"EAN (GLN) number, usually 13 digits","examples":["5798000416604"],"title":"Ean"},"description":"EAN (GLN) number, usually 13 digits"},{"name":"include","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Set to document_types to include the raw Peppol document type identifiers","title":"Include"},"description":"Set to document_types to include the raw Peppol document type identifiers"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/EanLookupResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/ean":{"get":{"tags":["E-invoicing"],"summary":"/ean","description":"Find EAN numbers and other e-invoicing endpoints by CVR number or name.\n\nA municipality or a large company often has hundreds of EAN numbers, one\nper department or location; the name on each card tells them apart.\nEAN endpoints come first, then CVR endpoints.","operationId":"search_ean_v1_ean_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"cvr","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"All endpoints of this CVR number","examples":["29189854"],"title":"Cvr"},"description":"All endpoints of this CVR number"},{"name":"name","in":"query","required":false,"schema":{"anyOf":[{"type":"string","minLength":3,"maxLength":100},{"type":"null"}],"description":"Part of the name on the business card","examples":["Københavns Kommune"],"title":"Name"},"description":"Part of the name on the business card"},{"name":"active","in":"query","required":false,"schema":{"type":"boolean","description":"Only endpoints currently in the Peppol Directory","default":true,"title":"Active"},"description":"Only endpoints currently in the Peppol Directory"},{"name":"include","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Set to document_types to include the raw Peppol document type identifiers","title":"Include"},"description":"Set to document_types to include the raw Peppol document type identifiers"},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":200,"minimum":1,"default":50,"title":"Limit"}},{"name":"offset","in":"query","required":false,"schema":{"type":"integer","minimum":0,"default":0,"title":"Offset"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/EanSearchResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/legal-notices":{"get":{"tags":["Legal notices"],"summary":"/legal-notices","description":"Statstidende notices about companies: bankruptcy decrees, creditor\nmeetings, reconstruction, forced auctions, liquidation and forced\ndissolution, general meetings, capital changes and merger plans.\n\nEvery notice carries the rubrik, the companies named, the trustee\n(kurator), court and case number where published, whether a decree was\nlater revoked, and a one-line summary. History goes back to March 2026.\n\n**Browse** with filters and limit/offset: newest publication first, with\na total. **Poll** with `since` once and then `cursor=next_cursor`: every\nnotice indexed after the cursor, oldest first, exactly once. New notices\narrive each morning after Statstidende publishes.\n\nSole proprietorships (ENK), personally owned small businesses (PMV) and\npartnerships (I/S) are not in the feed, because their debtor is a person.\nPer company, use /companies/{cvr}/legal-notices. For push delivery on the\ncompanies you follow, subscribe a webhook to financial_distress and\ncorporate_announcement.\n\nPro and Team.","operationId":"list_legal_notice_feed_v1_legal_notices_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"date_from","in":"query","required":false,"schema":{"anyOf":[{"type":"string","pattern":"^\\d{4}-\\d{2}-\\d{2}$"},{"type":"null"}],"description":"Publication date from (YYYY-MM-DD)","title":"Date From"},"description":"Publication date from (YYYY-MM-DD)"},{"name":"date_to","in":"query","required":false,"schema":{"anyOf":[{"type":"string","pattern":"^\\d{4}-\\d{2}-\\d{2}$"},{"type":"null"}],"description":"Publication date to (YYYY-MM-DD)","title":"Date To"},"description":"Publication date to (YYYY-MM-DD)"},{"name":"cvr","in":"query","required":false,"schema":{"anyOf":[{"type":"string","pattern":"^\\d{8}$"},{"type":"null"}],"description":"Only notices naming this CVR number","title":"Cvr"},"description":"Only notices naming this CVR number"},{"name":"event_type","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"financial_distress or corporate_announcement","title":"Event Type"},"description":"financial_distress or corporate_announcement"},{"name":"section","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Statstidende section, e.g. Konkursboer, Rekonstruktion, Tvangsauktioner","title":"Section"},"description":"Statstidende section, e.g. Konkursboer, Rekonstruktion, Tvangsauktioner"},{"name":"rubrik","in":"query","required":false,"schema":{"anyOf":[{"type":"array","items":{"type":"string"}},{"type":"null"}],"description":"Rubrik keys from /legal-notices/rubrikker (repeatable)","title":"Rubrik"},"description":"Rubrik keys from /legal-notices/rubrikker (repeatable)"},{"name":"municipality_code","in":"query","required":false,"schema":{"anyOf":[{"type":"string","pattern":"^\\d{1,4}$"},{"type":"null"}],"description":"Company municipality code","title":"Municipality Code"},"description":"Company municipality code"},{"name":"division","in":"query","required":false,"schema":{"anyOf":[{"type":"string","pattern":"^\\d{2}$"},{"type":"null"}],"description":"2-digit industry division","title":"Division"},"description":"2-digit industry division"},{"name":"cursor","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"next_cursor from the previous page: returns the notices indexed after it, oldest first","title":"Cursor"},"description":"next_cursor from the previous page: returns the notices indexed after it, oldest first"},{"name":"since","in":"query","required":false,"schema":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"description":"Start polling from this time (ISO 8601): notices indexed after it, oldest first","title":"Since"},"description":"Start polling from this time (ISO 8601): notices indexed after it, oldest first"},{"name":"include","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Set to fields to include the structured fields of each notice","title":"Include"},"description":"Set to fields to include the structured fields of each notice"},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":200,"minimum":1,"default":50,"title":"Limit"}},{"name":"offset","in":"query","required":false,"schema":{"type":"integer","minimum":0,"description":"Only when browsing (no cursor or since)","default":0,"title":"Offset"},"description":"Only when browsing (no cursor or since)"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/NoticeFeedResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/legal-notices/rubrikker":{"get":{"tags":["Legal notices"],"summary":"/legal-notices/rubrikker","description":"The Statstidende rubrikker the feed covers, with section, Danish and English name and event type.","operationId":"list_rubrikker_v1_legal_notices_rubrikker_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/RubrikCatalogResponse"}}}}},"security":[{"HTTPBearer":[]}]}},"/v1/legal-notices/{message_number}":{"get":{"tags":["Legal notices"],"summary":"/legal-notices/{message_number}","description":"One notice with all its structured fields as published. Pro and Team.","operationId":"get_legal_notice_v1_legal_notices__message_number__get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"message_number","in":"path","required":true,"schema":{"type":"string","title":"Message Number"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/FeedNotice"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/production-units":{"get":{"tags":["Production Units"],"summary":"/production-units","description":"Search production units with filters.\n\n**Examples:**\n- Search by P-number: `/v1/production-units?q=1234567890`\n- Filter by municipality: `/v1/production-units?municipality=101`\n- Filter by industry: `/v1/production-units?industry=47.11`","operationId":"search_v1_production_units_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"q","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Search query (P-number or name)","title":"Q"},"description":"Search query (P-number or name)"},{"name":"status","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Filter by status","title":"Status"},"description":"Filter by status"},{"name":"include_dissolved","in":"query","required":false,"schema":{"type":"boolean","description":"Include dissolved P-enheder","default":false,"title":"Include Dissolved"},"description":"Include dissolved P-enheder"},{"name":"industry","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Filter by industry code","title":"Industry"},"description":"Filter by industry code"},{"name":"municipality","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Filter by municipality code","title":"Municipality"},"description":"Filter by municipality code"},{"name":"postal_code","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Filter by postal code","title":"Postal Code"},"description":"Filter by postal code"},{"name":"page","in":"query","required":false,"schema":{"type":"integer","minimum":1,"description":"Page number","default":1,"title":"Page"},"description":"Page number"},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":100,"minimum":1,"description":"Results per page","default":25,"title":"Limit"},"description":"Results per page"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProductionUnitSearchResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/production-units/nearby":{"get":{"tags":["Production Units"],"summary":"/production-units/nearby","description":"Search production units near a location.\n\nReturns P-enheder within the specified radius, sorted by distance.\nThis is useful for finding all business locations (stores, offices, etc.)\nnear a geographic point.\n\n**Example:** Find all stores within 5km of Copenhagen:\n`/v1/production-units/nearby?lat=55.6761&lng=12.5683&radius=5000`","operationId":"search_nearby_v1_production_units_nearby_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"lat","in":"query","required":true,"schema":{"type":"number","description":"Latitude of center point","title":"Lat"},"description":"Latitude of center point"},{"name":"lng","in":"query","required":true,"schema":{"type":"number","description":"Longitude of center point","title":"Lng"},"description":"Longitude of center point"},{"name":"radius","in":"query","required":false,"schema":{"type":"integer","maximum":50000,"minimum":50,"description":"Search radius in meters (min 50m, max 50km)","default":1000,"title":"Radius"},"description":"Search radius in meters (min 50m, max 50km)"},{"name":"status","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Filter by status (active, dissolved)","title":"Status"},"description":"Filter by status (active, dissolved)"},{"name":"include_dissolved","in":"query","required":false,"schema":{"type":"boolean","description":"Include dissolved P-enheder","default":false,"title":"Include Dissolved"},"description":"Include dissolved P-enheder"},{"name":"industry","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Filter by industry code","title":"Industry"},"description":"Filter by industry code"},{"name":"page","in":"query","required":false,"schema":{"type":"integer","minimum":1,"description":"Page number","default":1,"title":"Page"},"description":"Page number"},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":100,"minimum":1,"description":"Results per page","default":25,"title":"Limit"},"description":"Results per page"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProductionUnitSearchResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/production-units/stats":{"get":{"tags":["Production Units"],"summary":"/production-units/stats","description":"Get statistics about production units in the database.","operationId":"stats_v1_production_units_stats_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}},"security":[{"HTTPBearer":[]}]}},"/v1/production-units/{p_number}":{"get":{"tags":["Production Units"],"summary":"/production-units/{p_number}","description":"Get a production unit by P-number.\n\nP-numbers are 10-digit identifiers for physical business locations.","operationId":"get_production_unit_v1_production_units__p_number__get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"p_number","in":"path","required":true,"schema":{"type":"string","title":"P Number"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProductionUnitResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/properties/lookup":{"get":{"tags":["Properties"],"summary":"/properties/lookup","description":"Find the BFE number(s) of a property from an address, a DAWA id, a\ncadastral number or a coordinate. Give exactly one of: `address`,\n`adresse_id`, `adgangsadresse_id`, `ejerlavkode` + `matrikelnr`, or\n`lat` + `lon`.\n\nEach result says how it relates to the input: `parcel` is the property\nthe land belongs to, `unit` an ejerlejlighed at the address. A building\nof flats returns its parcel first, then the flats. Fetch the details with\n`/v1/properties/{bfe_number}`.","operationId":"lookup_properties_v1_properties_lookup_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"address","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Free-text address, e.g. 'Clemensgade 8, 2. th, 6000 Kolding'. With floor or door it resolves the flat, without them the building and its flats.","title":"Address"},"description":"Free-text address, e.g. 'Clemensgade 8, 2. th, 6000 Kolding'. With floor or door it resolves the flat, without them the building and its flats."},{"name":"adresse_id","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"DAR/DAWA adresse id (a unit address)","title":"Adresse Id"},"description":"DAR/DAWA adresse id (a unit address)"},{"name":"adgangsadresse_id","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"DAR husnummer / DAWA adgangsadresse id","title":"Adgangsadresse Id"},"description":"DAR husnummer / DAWA adgangsadresse id"},{"name":"ejerlavkode","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Ejerlav code, together with matrikelnr","title":"Ejerlavkode"},"description":"Ejerlav code, together with matrikelnr"},{"name":"matrikelnr","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Matrikelnummer, together with ejerlavkode","title":"Matrikelnr"},"description":"Matrikelnummer, together with ejerlavkode"},{"name":"lat","in":"query","required":false,"schema":{"anyOf":[{"type":"number","maximum":58.0,"minimum":54.0},{"type":"null"}],"description":"Latitude (WGS84), together with lon","title":"Lat"},"description":"Latitude (WGS84), together with lon"},{"name":"lon","in":"query","required":false,"schema":{"anyOf":[{"type":"number","maximum":15.5,"minimum":7.5},{"type":"null"}],"description":"Longitude (WGS84), together with lat","title":"Lon"},"description":"Longitude (WGS84), together with lat"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PropertyLookupResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/properties/{bfe_number}":{"get":{"tags":["Properties"],"summary":"/properties/{bfe_number}","description":"Get full property details by BFE number.\n\nWith `include` the energy label, flood risk, planning status and public\nvaluation come in the same response, so one call covers what otherwise\ntakes five. A section is null when there is no data for the property.\n\nWhen `withheld` is true the owner's objection was granted: the response\ngives the property's number, type, address and parcels only, and the\ndetail sections answer 451.","operationId":"get_property_v1_properties__bfe_number__get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"bfe_number","in":"path","required":true,"schema":{"type":"integer","title":"Bfe Number"}},{"name":"include","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Comma-separated extra sections in the same response: energy_label, climate, planning, valuation, or all","title":"Include"},"description":"Comma-separated extra sections in the same response: energy_label, climate, planning, valuation, or all"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PropertyDetailResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/properties/{bfe_number}/buildings":{"get":{"tags":["Properties"],"summary":"/properties/{bfe_number}/buildings","description":"GeoDanmark building footprints (bygningspolygoner) for a property.\n\nReturns the building polygons (WGS84 GeoJSON) whose centroid falls on\nthe property's cadastral parcels. Fetched from GeoDanmark on first\nrequest and cached; footprints change rarely.","operationId":"get_property_buildings_v1_properties__bfe_number__buildings_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"bfe_number","in":"path","required":true,"schema":{"type":"integer","title":"Bfe Number"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PropertyBuildingsResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/properties/{bfe_number}/climate":{"get":{"tags":["Properties"],"summary":"/properties/{bfe_number}/climate","description":"Flood risk assessment for a property, based on Klimadatastyrelsen's\nDHM/Bluespot (ekstremregn) and DHM/Havvand paa land models evaluated at\nthe property's coordinates. Assessed on first request and cached.","operationId":"get_property_climate_v1_properties__bfe_number__climate_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"bfe_number","in":"path","required":true,"schema":{"type":"integer","title":"Bfe Number"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ClimateRiskResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/properties/{bfe_number}/energy-label":{"get":{"tags":["Properties"],"summary":"/properties/{bfe_number}/energy-label","description":"Energy labels (energimærker) for a property from Energistyrelsen's\nEMOData service. Looked up on first request and cached; refreshed\nnightly from EMOData's changelog. `classification` is the current\nheadline label; `labels` includes expired labels for history.","operationId":"get_property_energy_labels_v1_properties__bfe_number__energy_label_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"bfe_number","in":"path","required":true,"schema":{"type":"integer","title":"Bfe Number"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PropertyEnergyLabelResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/properties/{bfe_number}/planning":{"get":{"tags":["Properties"],"summary":"/properties/{bfe_number}/planning","description":"Planning status (planforhold) for a property from Plandata.dk: zone\nstatus, adopted local plans, local plan proposals and municipal plan\nframeworks covering the property's coordinate. Assessed on first request\nand cached; re-assessed periodically.","operationId":"get_property_planning_status_v1_properties__bfe_number__planning_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"bfe_number","in":"path","required":true,"schema":{"type":"integer","title":"Bfe Number"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PropertyPlanningResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/properties/{bfe_number}/valuation":{"get":{"tags":["Properties"],"summary":"/properties/{bfe_number}/valuation","description":"Public property valuations (offentlige ejendomsvurderinger) from\nVurderingsstyrelsen: ejendomsværdi, grundværdi, vurderet areal and\njuridisk kategori per year, newest first.\n\n- `history` and `latest`: final valuations from the register via\n  Datafordeler (the old system to 2020, and new-system valuations of homes\n  as they become final). Synced nightly. Licensed CC BY 4.0.\n- `preliminary`: the current preliminary valuations (foreløbige\n  vurderinger) from Vurderingsstyrelsen's published files: homes 2022 and\n  2024, business and agricultural land values 2023 and 2025. Checked for\n  new releases daily.\n\nA property with only preliminary valuations answers with `latest: null`.","operationId":"get_property_valuations_v1_properties__bfe_number__valuation_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"bfe_number","in":"path","required":true,"schema":{"type":"integer","title":"Bfe Number"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PropertyValuationResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/screen":{"post":{"tags":["Screening"],"summary":"/screen","description":"Screen the company register on structured criteria: industry, geography,\ncompany type, size and financial key figures from the latest annual\nreport. All given filters are combined with AND; results are paginated\nwith an opaque cursor.\n\nExample: companies in Region Midtjylland with an equity ratio below 15%\nand at least 5 employees:\n\n```json\n{\n  \"filters\": {\n    \"region_codes\": [\"1082\"],\n    \"employees\": {\"min\": 5},\n    \"financials\": {\"equity_ratio\": {\"max\": 0.15}}\n  },\n  \"sort\": {\"field\": \"equity_ratio\", \"direction\": \"asc\"},\n  \"limit\": 50\n}\n```\n\n**Data notes:**\n\n- Financial criteria use the company's most recent annual report. Most\n  small companies (reporting class B) do not publish revenue, only gross\n  profit; filtering on `revenue` therefore excludes them. Each result\n  includes `financials.reporting_class` and `financials.period_end` so\n  you can judge coverage and freshness.\n- **Metric coverage** (active companies with the metric, August 2026 —\n  about 41% of the ~860,000 active companies file annual reports at all;\n  the rest are mainly sole proprietorships with no filing duty):\n\n  | Metric | Active companies |\n  |---|---|\n  | `profit_loss`, `equity`, `total_assets` | ~353,000 (41%) |\n  | `equity_ratio` | ~348,000 (40%) |\n  | `gross_profit` | ~338,000 (39%) |\n  | `current_ratio` | ~329,000 (38%) |\n  | `return_on_equity` | ~299,000 (35%) |\n  | `operating_profit` | ~278,000 (32%) |\n  | `employees` | ~257,000 (30%) |\n  | `revenue` | ~24,000 (2.7%) |\n\n  For \"small companies\" screens, `gross_profit` and `employees` reach\n  the broad register; `revenue` reaches only the minority obliged to\n  disclose it (reporting classes C/D).\n- Amounts are DKK. Ratios are fractions: `equity_ratio` 0.15 means a\n  soliditetsgrad of 15%. Figures are as filed; occasional filing errors\n  can produce extreme ratio values.\n- A company only matches a financial filter if its latest report contains\n  that metric. Sorting by a metric likewise only returns companies where\n  the metric is present.\n- Growth metrics (`revenue_growth`, `gross_profit_growth`,\n  `equity_growth`) are year-over-year fractions computed from the\n  report's own comparative figures: -0.2 means a 20% decline. Absent\n  when the base year is missing or zero.\n- `cds_score` (0-100) and `cds_ratings` filter on the CDS (CompanyData\n  Score). Only companies with a computed score match these filters.\n- Each result carries `location` (`lat`/`lng`, WGS84) for the registered\n  address, so a result set can be plotted or trimmed by area without a\n  second lookup. It is absent when the address could not be geocoded or\n  is withheld.\n\nUse `POST /v1/screen/count` with the same filters to size a segment\nbefore pulling pages.","operationId":"screen_companies_v1_screen_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ScreenRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ScreenResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]}]}},"/v1/screen/count":{"post":{"tags":["Screening"],"summary":"/screen/count","description":"Count the companies matching a set of screening filters without\nretrieving them. Takes the same `filters` object as `POST /v1/screen`.\n\nPass the optional `sort` to count only companies where the sort field\nis present — the same restriction a sorted `/screen` listing applies,\nso the two numbers agree.","operationId":"screen_companies_count_v1_screen_count_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ScreenCountRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ScreenCountResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]}]}},"/v1/screen/aggregate":{"post":{"tags":["Screening"],"summary":"/screen/aggregate","description":"Group the companies matching a set of screening filters by a dimension\n(industry, municipality, company type, reporting class or CDS rating)\nand get per-group counts, optionally with sums and averages of up to 3\nkey figures.\n\nGroups are sorted by company count and capped at 100\n(`meta.truncated` is true when more groups exist). Keys are codes;\nresolve display names via `/v1/industries` and `/v1/municipalities`.","operationId":"screen_aggregate_v1_screen_aggregate_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ScreenAggregateRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ScreenAggregateResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]}]}},"/v1/screen/properties":{"post":{"tags":["Screening"],"summary":"/screen/properties","description":"Property-first screening: find company-owned properties by building and\nlocation attributes, with the owning companies attached.\n\nExample: large buildings with elevated flood exposure in two\nmunicipalities, excluding advertising-protected owners:\n\n```json\n{\n  \"filters\": {\n    \"municipality_codes\": [\"751\", \"727\"],\n    \"building_area\": {\"min\": 200},\n    \"has_flood_risk\": true,\n    \"exclude_advertising_protected\": true\n  }\n}\n```\n\n**Scope**: results are exclusively properties with at least one active\ncompany ownership registered in Ejerfortegnelsen; the owning companies\n(CVR and name) are attached to each property. Set\n`exclude_advertising_protected` when the results are used for direct\nmarketing (CVR-loven).\n\nFlood exposure and energy labels are indicative, based on\nKlimadatastyrelsen's open elevation models and Energistyrelsen's EMO\nregister. Results are ordered by BFE number; page with `meta.next_cursor`.","operationId":"screen_properties_v1_screen_properties_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PropertyScreenRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PropertyScreenResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]}]}},"/v1/screen/export":{"post":{"tags":["Screening"],"summary":"/screen/export","description":"Export every company matching a set of screening filters to an Excel\nfile, delivered by email (the same asynchronous pipeline as lead lists\nand CVR-list enrichment, including its field catalog).\n\nWeb flow only: requires a logged-in Pro/Team user (the file is\ndelivered to the account's email address). API integrators can build\nthe same by paging `/v1/screen` and posting the CVRs to\n`/v1/enrichments`.\n\nWith `fields.financial_history` set, the download is a ZIP holding the\nmain file plus a financial-history file in long format: one row per\ncompany per fiscal year, every year on record, with the selected\nfinancial/ratio columns as reported in the annual filings.\n\nLimits: at most 25,000 matching companies per export.","operationId":"export_screen_v1_screen_export_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ScreenExportRequest"}}},"required":true},"responses":{"201":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ScreenExportResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]}]}},"/v1/screen/exports":{"get":{"tags":["Screening"],"summary":"/screen/exports","description":"List the current user's screening exports, newest first — the status/\nhistory surface behind /virksomhedsscreening/eksporter (the sibling of\n/leadlister for lead lists and /berigelse for enrichment jobs).\n\nWeb flow only, Pro-gated like the export itself.","operationId":"list_screen_exports_v1_screen_exports_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"items":{"$ref":"#/components/schemas/ScreenExportStatusResponse"},"type":"array","title":"Response List Screen Exports V1 Screen Exports Get"}}}}},"security":[{"HTTPBearer":[]}]}},"/v1/screen/saved":{"get":{"tags":["Screening"],"summary":"/screen/saved list","description":"List the organization's saved screens.","operationId":"list_saved_screens_v1_screen_saved_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SavedScreenListResponse"}}}}},"security":[{"HTTPBearer":[]}]},"post":{"tags":["Screening"],"summary":"/screen/saved","description":"Save a screening query. Without a `webhook_id` this is an instant\nbookmark of the named filters, with no match-size limit. With a\n`webhook_id` the screen is monitored: the current match set is\nsnapshotted immediately and re-evaluated daily, and companies that\nstart or stop matching produce `screen_entered` / `screen_left`\nwebhook events (one event per company, same payload shape and signing\nas all other webhook events).\n\nLimits: an organization can hold 25 saved screens, and a MONITORED\nscreen must match at most 25,000 companies. The initial snapshot emits\nno events, and neither does editing the filters (the snapshot\nre-baselines).","operationId":"create_saved_screen_v1_screen_saved_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SavedScreenCreate"}}},"required":true},"responses":{"201":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SavedScreenResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]}]}},"/v1/screen/saved/{screen_id}":{"get":{"tags":["Screening"],"summary":"/screen/saved/{id}","description":"Get one saved screen, including its latest evaluation state.","operationId":"get_saved_screen_v1_screen_saved__screen_id__get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"screen_id","in":"path","required":true,"schema":{"type":"string","title":"Screen Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SavedScreenResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"patch":{"tags":["Screening"],"summary":"/screen/saved/{id} update","description":"Update a saved screen. Changing `filters` re-baselines the match\nsnapshot without emitting events. Set `clear_webhook` to detach the\nwebhook; set `active` to false to pause evaluation.","operationId":"update_saved_screen_v1_screen_saved__screen_id__patch","security":[{"HTTPBearer":[]}],"parameters":[{"name":"screen_id","in":"path","required":true,"schema":{"type":"string","title":"Screen Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SavedScreenUpdate"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SavedScreenResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"delete":{"tags":["Screening"],"summary":"/screen/saved/{id} delete","description":"Delete a saved screen and its notification routing.","operationId":"delete_saved_screen_v1_screen_saved__screen_id__delete","security":[{"HTTPBearer":[]}],"parameters":[{"name":"screen_id","in":"path","required":true,"schema":{"type":"string","title":"Screen Id"}}],"responses":{"204":{"description":"Successful Response"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/auditors/{cvr}":{"get":{"tags":["Auditors"],"summary":"/auditors/{cvr}","description":"Portfolio profile for an audit firm: active client count, top client\nindustries (DB07 divisions), and factual counts of clients' financial\nreporting conduct (late filings, going concern, overdue filings) drawn\nfrom the clients' own published annual reports.\n\nCounts are facts about the client portfolio, not an assessment of the\naudit firm. Resolve division names via `/v1/industries`.","operationId":"auditor_profile_v1_auditors__cvr__get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"cvr","in":"path","required":true,"schema":{"type":"string","title":"Cvr"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AuditorProfile"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/auditors/{cvr}/clients":{"get":{"tags":["Auditors"],"summary":"/auditors/{cvr}/clients","description":"Active clients of an audit firm (companies whose current registered\nauditor is this firm), ordered by CVR with cursor pagination.","operationId":"auditor_clients_v1_auditors__cvr__clients_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"cvr","in":"path","required":true,"schema":{"type":"string","title":"Cvr"}},{"name":"cursor","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"CVR cursor from meta.next_cursor","title":"Cursor"},"description":"CVR cursor from meta.next_cursor"},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":100,"minimum":1,"default":25,"title":"Limit"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AuditorClientsResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/guides":{"get":{"tags":["internal"],"summary":"/guides","description":"List all published guides.","operationId":"list_guides_v1_guides_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"locale","in":"query","required":false,"schema":{"type":"string","description":"Locale (da or en)","default":"da","title":"Locale"},"description":"Locale (da or en)"},{"name":"category","in":"query","required":false,"schema":{"type":"string","description":"Filter by category","title":"Category"},"description":"Filter by category"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/GuideListResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/guides/{slug}":{"get":{"tags":["internal"],"summary":"/guides/{slug}","description":"Get a single guide by slug.","operationId":"get_guide_v1_guides__slug__get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"slug","in":"path","required":true,"schema":{"type":"string","title":"Slug"}},{"name":"locale","in":"query","required":false,"schema":{"type":"string","description":"Locale (da or en)","default":"da","title":"Locale"},"description":"Locale (da or en)"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/GuideDetailResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/glossary":{"get":{"tags":["internal"],"summary":"/glossary","description":"List all published glossary terms.","operationId":"list_glossary_terms_v1_glossary_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"locale","in":"query","required":false,"schema":{"type":"string","description":"Locale (da or en)","default":"da","title":"Locale"},"description":"Locale (da or en)"},{"name":"category","in":"query","required":false,"schema":{"type":"string","description":"Filter by category","title":"Category"},"description":"Filter by category"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/GlossaryTermListResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/glossary/{slug}":{"get":{"tags":["internal"],"summary":"/glossary/{slug}","description":"Get a single glossary term by slug.","operationId":"get_glossary_term_v1_glossary__slug__get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"slug","in":"path","required":true,"schema":{"type":"string","title":"Slug"}},{"name":"locale","in":"query","required":false,"schema":{"type":"string","description":"Locale (da or en)","default":"da","title":"Locale"},"description":"Locale (da or en)"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/GlossaryTermDetailResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/working-lists":{"get":{"tags":["Working Lists"],"summary":"/working-lists","operationId":"list_working_records_v1_working_lists_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"status","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Filter by pipeline status","title":"Status"},"description":"Filter by pipeline status"},{"name":"due","in":"query","required":false,"schema":{"type":"boolean","description":"Only records with a due/overdue follow-up","default":false,"title":"Due"},"description":"Only records with a due/overdue follow-up"},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":2000,"minimum":1,"description":"Maximum records returned","default":2000,"title":"Limit"},"description":"Maximum records returned"},{"name":"owner","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Filter by assigned owner email","title":"Owner"},"description":"Filter by assigned owner email"},{"name":"q","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Filter by company name","title":"Q"},"description":"Filter by company name"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/RecordsResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"post":{"tags":["Working Lists"],"summary":"/working-lists","operationId":"create_working_record_v1_working_lists_post","security":[{"HTTPBearer":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreateRecordRequest"}}}},"responses":{"201":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SingleRecordResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/working-lists/due":{"get":{"tags":["Working Lists"],"summary":"/working-lists/due","description":"Dashboard badge counts (open records + due follow-ups).","operationId":"working_list_due_v1_working_lists_due_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}},"security":[{"HTTPBearer":[]}]}},"/v1/working-lists/bulk":{"post":{"tags":["Working Lists"],"summary":"/working-lists/bulk","description":"Create records for many CVRs at once (from a lead list or paste).","operationId":"bulk_create_working_records_v1_working_lists_bulk_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/BulkCreateRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/BulkCreateResult"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]}]}},"/v1/working-lists/{record_id}":{"get":{"tags":["Working Lists"],"summary":"/working-lists/{record_id}","operationId":"get_working_record_v1_working_lists__record_id__get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"record_id","in":"path","required":true,"schema":{"type":"string","title":"Record Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SingleRecordResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"patch":{"tags":["Working Lists"],"summary":"/working-lists/{record_id}","operationId":"update_working_record_v1_working_lists__record_id__patch","security":[{"HTTPBearer":[]}],"parameters":[{"name":"record_id","in":"path","required":true,"schema":{"type":"string","title":"Record Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UpdateRecordRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SingleRecordResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"delete":{"tags":["Working Lists"],"summary":"/working-lists/{record_id}","operationId":"delete_working_record_v1_working_lists__record_id__delete","security":[{"HTTPBearer":[]}],"parameters":[{"name":"record_id","in":"path","required":true,"schema":{"type":"string","title":"Record Id"}}],"responses":{"204":{"description":"Successful Response"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/working-lists/{record_id}/activities":{"post":{"tags":["Working Lists"],"summary":"/working-lists/{record_id}/activities","operationId":"add_working_activity_v1_working_lists__record_id__activities_post","security":[{"HTTPBearer":[]}],"parameters":[{"name":"record_id","in":"path","required":true,"schema":{"type":"string","title":"Record Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreateActivityRequest"}}}},"responses":{"201":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SingleRecordResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/working-lists/{record_id}/activities/{activity_id}/complete":{"post":{"tags":["Working Lists"],"summary":"/working-lists/{record_id}/activities/{activity_id}/complete","description":"Mark a follow-up done; recurring follow-ups spawn their next occurrence.","operationId":"complete_working_followup_v1_working_lists__record_id__activities__activity_id__complete_post","security":[{"HTTPBearer":[]}],"parameters":[{"name":"record_id","in":"path","required":true,"schema":{"type":"string","title":"Record Id"}},{"name":"activity_id","in":"path","required":true,"schema":{"type":"string","title":"Activity Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SingleRecordResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/auth/register":{"post":{"tags":["internal"],"summary":"Register","description":"Register a new user account. A verification email will be sent.","operationId":"register_auth_register_post","parameters":[{"name":"locale","in":"query","required":false,"schema":{"type":"string","description":"Locale for verification email","default":"da","title":"Locale"},"description":"Locale for verification email"}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UserCreate"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/UserResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/auth/login":{"post":{"tags":["internal"],"summary":"Login","description":"Login and get access token.\n\nIf 2FA is enabled, returns requires_2fa=true and a temp_token.\nUse /login/2fa or /login/recovery to complete authentication.\n\nSets an httpOnly cookie with the JWT token for browser-based authentication.\nThe token is also returned in the response body for API clients.","operationId":"login_auth_login_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UserLogin"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/TwoFactorLoginResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/auth/login/2fa":{"post":{"tags":["internal"],"summary":"Login 2Fa","description":"Complete login with 2FA code.\n\nRequires a valid temp_token from /login and a TOTP code.\nSets an httpOnly cookie with the JWT token for browser-based authentication.","operationId":"login_2fa_auth_login_2fa_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TwoFactorLoginRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/TokenResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/auth/google":{"post":{"tags":["internal"],"summary":"Google Auth","description":"Authenticate or register with Google.\n\nAccepts a Google ID token credential. If the email matches an existing account,\nthe Google identity is linked. If no account exists, a new one is created.\n\nReturns requires_2fa=true if the linked account has 2FA enabled.","operationId":"google_auth_auth_google_post","parameters":[{"name":"locale","in":"query","required":false,"schema":{"type":"string","description":"Locale for new users","default":"da","title":"Locale"},"description":"Locale for new users"}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/GoogleAuthRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/GoogleAuthResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/auth/me":{"get":{"tags":["internal"],"summary":"Get Me","description":"Get current user info.","operationId":"get_me_auth_me_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/UserResponse"}}}}},"security":[{"HTTPBearer":[]}]},"delete":{"tags":["internal"],"summary":"Delete Account","description":"Permanently delete the current user's account.\n\nThis action:\n- Cancels any active Stripe subscription (no refund)\n- Revokes all API keys\n- Releases any claimed company profiles\n- Deletes notification subscriptions and webhooks\n- Soft-deletes the account (can be recovered by admin within 30 days)\n\nRequires password verification and typing \"DELETE\" to confirm.","operationId":"delete_account_auth_me_delete","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeleteAccountRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeleteAccountResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]}]},"patch":{"tags":["internal"],"summary":"Update Profile","description":"Update the current user's profile.\n\nCan update: name, company, locale (da/en), notification_frequency.","operationId":"update_profile_auth_me_patch","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/app__routers__auth__ProfileUpdateRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/UserResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]}]}},"/auth/logout":{"post":{"tags":["internal"],"summary":"Logout","description":"Logout by clearing the authentication cookie.\n\nThis endpoint clears the httpOnly cookie. The JWT token itself remains valid\nuntil expiry, but without the cookie the browser cannot send it automatically.","operationId":"logout_auth_logout_post","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/LogoutResponse"}}}}}}},"/auth/verify-email":{"post":{"tags":["internal"],"summary":"Verify Email Endpoint","description":"Verify a user's email address using the token from the verification email.\n\nMagic-link semantics: the single-use, expiring token that just arrived in\nthe mailbox proves control of it, so the verified user is signed in on the\nsame response (cookie + access_token) and lands on the continuation\ninstead of retyping the password chosen a minute earlier. Accounts with\n2FA are never auto-signed-in (2FA can only be enabled after a login, so\nthis only concerns re-verification of an existing account).","operationId":"verify_email_endpoint_auth_verify_email_post","parameters":[{"name":"token","in":"query","required":true,"schema":{"type":"string","description":"Verification token from email","title":"Token"},"description":"Verification token from email"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/app__routers__auth__VerifyEmailResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/auth/resend-verification":{"post":{"tags":["internal"],"summary":"Resend Verification","description":"Resend the verification email to a user.","operationId":"resend_verification_auth_resend_verification_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/app__routers__auth__ResendVerificationRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/app__routers__auth__VerifyEmailResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/auth/forgot-password":{"post":{"tags":["internal"],"summary":"Forgot Password","description":"Request a password reset email.\n\nAlways returns success to prevent email enumeration.\nIf an account exists, a reset email will be sent.","operationId":"forgot_password_auth_forgot_password_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ForgotPasswordRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/app__routers__auth__VerifyEmailResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/auth/reset-password":{"post":{"tags":["internal"],"summary":"Reset Password Endpoint","description":"Reset password using the token from the reset email.\n\nThe token is valid for 1 hour after being requested.","operationId":"reset_password_endpoint_auth_reset_password_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ResetPasswordRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/app__routers__auth__VerifyEmailResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/auth/api-keys":{"get":{"tags":["internal"],"summary":"List Api Keys","description":"List all API keys for the current user with user-level usage stats.","operationId":"list_api_keys_auth_api_keys_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIKeysWithUsage"}}}}},"security":[{"HTTPBearer":[]}]},"post":{"tags":["internal"],"summary":"Create New Api Key","description":"Create a new API key. The full key is only shown once.","operationId":"create_new_api_key_auth_api_keys_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIKeyCreate"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIKeyWithSecret"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]}]}},"/auth/api-keys/{key_id}":{"delete":{"tags":["internal"],"summary":"Revoke Api Key","description":"Revoke an API key.","operationId":"revoke_api_key_auth_api_keys__key_id__delete","security":[{"HTTPBearer":[]}],"parameters":[{"name":"key_id","in":"path","required":true,"schema":{"type":"string","title":"Key Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/auth/marketing-consent":{"post":{"tags":["internal"],"summary":"Respond Marketing Consent","description":"Record the user's answer to the one-time newsletter consent prompt.\n\nSetting prompted_at on both accept and decline ensures the prompt is shown\nat most once. Accepting enqueues a real-time Brevo sync.","operationId":"respond_marketing_consent_auth_marketing_consent_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/MarketingConsentRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/UserResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]}]}},"/auth/change-password":{"post":{"tags":["internal"],"summary":"Change Password","description":"Change the current user's password.\n\nRequires the current password for verification (unless user has no password set).\nNew password must be at least 8 characters.","operationId":"change_password_auth_change_password_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ChangePasswordRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ChangePasswordResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]}]}},"/auth/2fa/status":{"get":{"tags":["internal"],"summary":"Get 2Fa Status","description":"Get the current user's 2FA status.","operationId":"get_2fa_status_auth_2fa_status_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/TwoFactorStatusResponse"}}}}},"security":[{"HTTPBearer":[]}]}},"/auth/2fa/setup":{"post":{"tags":["internal"],"summary":"Setup 2Fa","description":"Start 2FA setup.\n\nReturns a secret, QR code, and URI for authenticator apps.\nThe user must verify with a code before 2FA is enabled.","operationId":"setup_2fa_auth_2fa_setup_post","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/TwoFactorSetupResponse"}}}}},"security":[{"HTTPBearer":[]}]}},"/auth/2fa/verify-setup":{"post":{"tags":["internal"],"summary":"Verify 2Fa Setup","description":"Verify 2FA setup with the first code from the authenticator app.\n\nReturns recovery codes that the user must save.","operationId":"verify_2fa_setup_auth_2fa_verify_setup_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TwoFactorVerifyRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/TwoFactorVerifySetupResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]}]}},"/auth/2fa/disable":{"post":{"tags":["internal"],"summary":"Disable 2Fa","description":"Disable 2FA.\n\nRequires a valid TOTP code or recovery code.","operationId":"disable_2fa_auth_2fa_disable_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TwoFactorVerifyRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/app__routers__auth__VerifyEmailResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]}]}},"/auth/2fa/recovery-codes":{"post":{"tags":["internal"],"summary":"Regenerate 2Fa Recovery Codes","description":"Generate new recovery codes.\n\nRequires a valid TOTP code. Old recovery codes will be invalidated.","operationId":"regenerate_2fa_recovery_codes_auth_2fa_recovery_codes_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TwoFactorVerifyRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/TwoFactorRecoveryCodesResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]}]}},"/oauth2/register":{"post":{"tags":["internal"],"summary":"Register Client","description":"OAuth 2.0 Dynamic Client Registration (RFC 7591).\n\nOpen registration so MCP clients (e.g. Claude) can self-register — this grants\nnothing on its own; a user must still log in and consent. Public by default\n(token_endpoint_auth_method=none, PKCE); a secret is issued only if a\nconfidential method is requested.","operationId":"register_client_oauth2_register_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ClientRegistrationRequest"}}},"required":true},"responses":{"201":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/oauth2/authorize":{"get":{"tags":["internal"],"summary":"Authorize","description":"OAuth2 Authorization Endpoint.\n\nThe user must be logged in. Shows a consent page with the requested scopes.\nOn approval, redirects back to redirect_uri with an authorization code.","operationId":"authorize_oauth2_authorize_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"response_type","in":"query","required":true,"schema":{"type":"string","title":"Response Type"}},{"name":"client_id","in":"query","required":true,"schema":{"type":"string","title":"Client Id"}},{"name":"redirect_uri","in":"query","required":true,"schema":{"type":"string","title":"Redirect Uri"}},{"name":"scope","in":"query","required":false,"schema":{"type":"string","default":"read:companies","title":"Scope"}},{"name":"state","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"State"}},{"name":"code_challenge","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Code Challenge"}},{"name":"code_challenge_method","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Code Challenge Method"}},{"name":"resource","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Resource"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/oauth2/token":{"post":{"tags":["internal"],"summary":"Token","description":"OAuth2 Token Endpoint.\n\nSupports:\n- grant_type=authorization_code: Exchange auth code for tokens\n- grant_type=refresh_token: Refresh an access token","operationId":"token_oauth2_token_post","requestBody":{"content":{"application/x-www-form-urlencoded":{"schema":{"$ref":"#/components/schemas/Body_token_oauth2_token_post"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/oauth2/client-info":{"get":{"tags":["internal"],"summary":"Client Info","description":"Return public OAuth2 client info for the frontend consent page.\nNo authentication required — only returns public fields (name, description).","operationId":"client_info_oauth2_client_info_get","parameters":[{"name":"client_id","in":"query","required":true,"schema":{"type":"string","title":"Client Id"}},{"name":"scope","in":"query","required":false,"schema":{"type":"string","default":"read:companies","title":"Scope"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/oauth2/approve":{"post":{"tags":["internal"],"summary":"Approve","description":"Approve OAuth2 authorization from the frontend consent page.\n\nCalled via the frontend proxy (X-Auth-Token header) after user clicks Allow.\nReturns JSON with the authorization code; frontend performs the redirect.","operationId":"approve_oauth2_approve_post","requestBody":{"content":{"application/x-www-form-urlencoded":{"schema":{"$ref":"#/components/schemas/Body_approve_oauth2_approve_post"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]}]}},"/oauth2/revoke":{"post":{"tags":["internal"],"summary":"Revoke","description":"OAuth2 Token Revocation Endpoint (RFC 7009).\n\nRevokes an access or refresh token.","operationId":"revoke_oauth2_revoke_post","requestBody":{"content":{"application/x-www-form-urlencoded":{"schema":{"$ref":"#/components/schemas/Body_revoke_oauth2_revoke_post"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/.well-known/oauth-protected-resource":{"get":{"tags":["internal"],"summary":"Oauth Protected Resource","description":"RFC 9728 — Protected Resource Metadata for the MCP endpoint.","operationId":"oauth_protected_resource__well_known_oauth_protected_resource_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"additionalProperties":true,"type":"object","title":"Response Oauth Protected Resource  Well Known Oauth Protected Resource Get"}}}}}}},"/.well-known/oauth-authorization-server":{"get":{"tags":["internal"],"summary":"Oauth Authorization Server","description":"RFC 8414 — Authorization Server Metadata.","operationId":"oauth_authorization_server__well_known_oauth_authorization_server_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"additionalProperties":true,"type":"object","title":"Response Oauth Authorization Server  Well Known Oauth Authorization Server Get"}}}}}}},"/billing/billing-portal":{"post":{"tags":["internal"],"summary":"Create Billing Portal","description":"Create a Stripe billing portal session.\n\nReturns a URL where the user can manage their subscription,\nupdate payment methods, and view invoices.","operationId":"create_billing_portal_billing_billing_portal_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/app__routers__billing__BillingPortalRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/app__routers__billing__BillingPortalResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]}]}},"/billing/subscription/checkout":{"post":{"tags":["internal"],"summary":"Create Subscription Checkout","description":"Create a Stripe checkout session for user subscription.\n\nReturns a checkout URL where the user can complete payment.","operationId":"create_subscription_checkout_billing_subscription_checkout_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SubscriptionCheckoutRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SubscriptionCheckoutResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]}]}},"/billing/subscription/seats":{"post":{"tags":["internal"],"summary":"Update Seats","description":"Change the org's total seat count (Team tier, Owner only).\n\nSeat ADDITIONS take effect immediately and are billed in full on the next\ninvoice (F4-mechanic: quantity bump with proration_behavior='none' — free\nfor the remainder of the current cycle). Seat REMOVALS also use no\nproration, so nothing is refunded mid-cycle; the lower price applies from\nthe next renewal. Seats below the current member count are rejected.","operationId":"update_seats_billing_subscription_seats_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SeatUpdateRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SeatUpdateResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]}]}},"/billing/subscription/cancel":{"post":{"tags":["internal"],"summary":"Cancel Subscription","description":"Cancel the current subscription at the end of the paid period.\n\nThe user keeps Pro access until current_period_end. Stripe's\ncustomer.subscription.updated webhook persists the cancel flag and sends the\nconfirmation email; we also write the flag locally for an immediate UI update.","operationId":"cancel_subscription_billing_subscription_cancel_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CancelSubscriptionRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SubscriptionStateResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]}]}},"/billing/subscription/reactivate":{"post":{"tags":["internal"],"summary":"Reactivate Subscription","description":"Undo a scheduled cancellation while the subscription is still within its paid\nperiod (cancel_at_period_end was true). Re-subscribing after a *full* cancel\ngoes through /subscription/checkout instead.","operationId":"reactivate_subscription_billing_subscription_reactivate_post","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SubscriptionStateResponse"}}}}},"security":[{"HTTPBearer":[]}]}},"/billing/subscription/pause":{"post":{"tags":["internal"],"summary":"Pause Subscription","description":"Pause the subscription for 1–3 months (monthly subscribers only).\n\nPro access is suspended for the pause window and Stripe collects nothing\n(pause_collection behavior \"void\"); Stripe auto-resumes at the end.","operationId":"pause_subscription_billing_subscription_pause_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PauseSubscriptionRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PauseStateResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]}]}},"/billing/subscription/resume":{"post":{"tags":["internal"],"summary":"Resume Subscription","description":"Resume a paused subscription early (clears the Stripe pause).","operationId":"resume_subscription_billing_subscription_resume_post","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PauseStateResponse"}}}}},"security":[{"HTTPBearer":[]}]}},"/billing/invoices":{"get":{"tags":["internal"],"summary":"Get Invoices","description":"Get the user's invoice history from Stripe.\n\nReturns a list of paid invoices with links to view/download.","operationId":"get_invoices_billing_invoices_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":100,"minimum":1,"default":10,"title":"Limit"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/InvoicesResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/billing/credits/packs":{"get":{"tags":["internal"],"summary":"List Credit Packs","description":"List available credit packs for purchase.","operationId":"list_credit_packs_billing_credits_packs_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreditPacksResponse"}}}}}}},"/billing/credits/checkout":{"post":{"tags":["internal"],"summary":"Create Credit Checkout","description":"Create a Stripe checkout session for a one-time credit pack purchase.","operationId":"create_credit_checkout_billing_credits_checkout_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreditCheckoutRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreditCheckoutResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]}]}},"/billing/credit-report/checkout":{"post":{"tags":["internal"],"summary":"Create Credit Report Checkout","description":"Create a Stripe checkout session for a one-off credit report purchase.\nEvery tier buys per report; Pro/Team pay the member price.","operationId":"create_credit_report_checkout_billing_credit_report_checkout_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreditReportCheckoutRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreditReportCheckoutResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]}]}},"/billing/fokus/checkout":{"post":{"tags":["internal"],"summary":"Create Fokus Checkout","description":"Create a Stripe checkout session for a one-off \"Virksomheder i fokus\"\nbid. Anyone with an account can feature ANY active company - the bidder\nbuys placement (30 days on the rolling board), never card content.\nSee backend/docs/FOKUS_AUCTION.md.","operationId":"create_fokus_checkout_billing_fokus_checkout_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/FokusCheckoutRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/FokusCheckoutResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]}]}},"/billing/branche-report/checkout":{"post":{"tags":["internal"],"summary":"Create Branche Report Checkout","description":"Create a Stripe checkout session for a one-off industry report purchase.\nEvery tier buys per report; Pro/Team pay the member price.","operationId":"create_branche_report_checkout_billing_branche_report_checkout_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/BrancheReportCheckoutRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/BrancheReportCheckoutResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]}]}},"/billing/property-report/checkout":{"post":{"tags":["internal"],"summary":"Create Property Report Checkout","description":"Create a Stripe checkout session for a one-off property report purchase.\nEvery tier buys per report; Pro/Team pay the member price.","operationId":"create_property_report_checkout_billing_property_report_checkout_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PropertyReportCheckoutRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PropertyReportCheckoutResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]}]}},"/billing/report-prices":{"get":{"tags":["internal"],"summary":"Get Report Prices","description":"Public price list for the one-off reports and the prepaid pack.","operationId":"get_report_prices_billing_report_prices_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ReportPricesResponse"}}}}},"security":[{"HTTPBearer":[]}]}},"/billing/report-credits":{"get":{"tags":["internal"],"summary":"Get Report Credits","description":"The caller's prepaid report credit balance and the pack offer.","operationId":"get_report_credits_billing_report_credits_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ReportCreditsResponse"}}}}},"security":[{"HTTPBearer":[]}]}},"/billing/report-pack/checkout":{"post":{"tags":["internal"],"summary":"Create Report Pack Checkout","description":"Create a Stripe checkout session for a prepaid report pack.\n\nOne SKU for every tier: settings.report_pack_credits credits redeemable\nacross all one-off reports (kreditrapport post-gate, baggrundstjek,\nbrancherapport, ejendomsrapport).","operationId":"create_report_pack_checkout_billing_report_pack_checkout_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ReportPackCheckoutRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ReportPackCheckoutResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]}]}},"/v1/credit-reports/{cvr}/access":{"get":{"tags":["internal"],"summary":"Credit Report Access","description":"Check download entitlement + price for the buy button.","operationId":"credit_report_access_v1_credit_reports__cvr__access_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"cvr","in":"path","required":true,"schema":{"type":"string","title":"Cvr"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreditReportAccessResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/credit-reports/history":{"get":{"tags":["internal"],"summary":"Credit Report History","description":"The current user's previously generated credit reports, newest first.","operationId":"credit_report_history_v1_credit_reports_history_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreditReportHistoryResponse"}}}}},"security":[{"HTTPBearer":[]}]}},"/v1/credit-reports/{cvr}":{"get":{"tags":["internal"],"summary":"Download Credit Report","description":"Generate and download the credit report PDF (lang: da|en).","operationId":"download_credit_report_v1_credit_reports__cvr__get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"cvr","in":"path","required":true,"schema":{"type":"string","title":"Cvr"}},{"name":"lang","in":"query","required":false,"schema":{"type":"string","default":"da","title":"Lang"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/portfolio/dashboard":{"get":{"tags":["internal"],"summary":"Portfolio Dashboard","description":"Aggregate dashboard over the caller's monitored companies.","operationId":"portfolio_dashboard_v1_portfolio_dashboard_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"lang","in":"query","required":false,"schema":{"type":"string","default":"da","title":"Lang"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PortfolioDashboardResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/branche-reports/{industry_code}/access":{"get":{"tags":["internal"],"summary":"Branche Report Access","description":"Check availability, entitlement and price for the buy button.","operationId":"branche_report_access_v1_branche_reports__industry_code__access_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"industry_code","in":"path","required":true,"schema":{"type":"string","title":"Industry Code"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/BrancheReportAccessResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/branche-reports/history":{"get":{"tags":["internal"],"summary":"Branche Report History","description":"The current user's previously generated industry reports, newest first.","operationId":"branche_report_history_v1_branche_reports_history_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/BrancheReportHistoryResponse"}}}}},"security":[{"HTTPBearer":[]}]}},"/v1/branche-reports/{industry_code}":{"get":{"tags":["internal"],"summary":"Download Branche Report","description":"Generate and download the industry report PDF (lang: da|en).","operationId":"download_branche_report_v1_branche_reports__industry_code__get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"industry_code","in":"path","required":true,"schema":{"type":"string","title":"Industry Code"}},{"name":"lang","in":"query","required":false,"schema":{"type":"string","default":"da","title":"Lang"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/property-reports/{cvr}/access":{"get":{"tags":["internal"],"summary":"Property Report Access","description":"Check download entitlement + price for the buy button.","operationId":"property_report_access_v1_property_reports__cvr__access_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"cvr","in":"path","required":true,"schema":{"type":"string","title":"Cvr"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PropertyReportAccessResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/property-reports/history":{"get":{"tags":["internal"],"summary":"Property Report History","description":"The current user's previously generated property reports, newest first.","operationId":"property_report_history_v1_property_reports_history_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PropertyReportHistoryResponse"}}}}},"security":[{"HTTPBearer":[]}]}},"/v1/property-reports/{cvr}":{"get":{"tags":["internal"],"summary":"Download Property Report","description":"Generate and download the property report PDF (lang: da|en).","operationId":"download_property_report_v1_property_reports__cvr__get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"cvr","in":"path","required":true,"schema":{"type":"string","title":"Cvr"}},{"name":"lang","in":"query","required":false,"schema":{"type":"string","default":"da","title":"Lang"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/admin/auth/google":{"post":{"tags":["internal","Admin - Auth"],"summary":"Admin Google Login","operationId":"admin_google_login_admin_auth_google_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/GoogleLoginRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/admin/auth/logout":{"post":{"tags":["internal","Admin - Auth"],"summary":"Admin Logout","operationId":"admin_logout_admin_auth_logout_post","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/admin/stats/counts/quick":{"get":{"tags":["internal","Admin - Stats"],"summary":"Get Quick Counts","description":"Get fast database counts using metadata (estimated_document_count).","operationId":"get_quick_counts_admin_stats_counts_quick_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/QuickDatabaseCounts"}}}}}}},"/admin/stats/counts/filtered":{"get":{"tags":["internal","Admin - Stats"],"summary":"Get Filtered Counts","description":"Get filtered database counts (uses cache when available).","operationId":"get_filtered_counts_admin_stats_counts_filtered_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/FilteredDatabaseCounts"}}}}}}},"/admin/stats/revenue":{"get":{"tags":["internal","Admin - Stats"],"summary":"Get Revenue Stats","description":"Paying subscriptions + projected recurring revenue (Redis-cached; ?refresh=true bypasses).","operationId":"get_revenue_stats_admin_stats_revenue_get","parameters":[{"name":"refresh","in":"query","required":false,"schema":{"type":"boolean","default":false,"title":"Refresh"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/RevenueStats"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/admin/stats/api-activity":{"get":{"tags":["internal","Admin - Stats"],"summary":"Get Api Activity Stats","description":"API key population and request volume (today vs. yesterday / 7d / month).","operationId":"get_api_activity_stats_admin_stats_api_activity_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiActivityStats"}}}}}}},"/admin/stats/sync/{sync_type}":{"get":{"tags":["internal","Admin - Stats"],"summary":"Get Sync Status","description":"Get status for a specific sync type. Fast - just a document lookup.","operationId":"get_sync_status_admin_stats_sync__sync_type__get","parameters":[{"name":"sync_type","in":"path","required":true,"schema":{"type":"string","title":"Sync Type"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/admin/stats/sync-all":{"get":{"tags":["internal","Admin - Stats"],"summary":"Get All Sync Statuses","description":"Get all sync statuses in one call. Used for initial dashboard load.","operationId":"get_all_sync_statuses_admin_stats_sync_all_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/admin/stats/geocoding":{"get":{"tags":["internal","Admin - Stats"],"summary":"Get Geocoding Stats","description":"Get geocoding status with computed remaining counts (uses cache).","operationId":"get_geocoding_stats_admin_stats_geocoding_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/admin/stats/notifications":{"get":{"tags":["internal","Admin - Stats"],"summary":"Get Notification Stats","description":"Get notification system statistics.","operationId":"get_notification_stats_admin_stats_notifications_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"anyOf":[{"$ref":"#/components/schemas/NotificationStats"},{"type":"null"}],"title":"Response Get Notification Stats Admin Stats Notifications Get"}}}}}}},"/admin/stats/scoring":{"get":{"tags":["internal","Admin - Stats"],"summary":"Get Scoring Stats","description":"Get CDS scoring statistics with distribution (uses cache).","operationId":"get_scoring_stats_admin_stats_scoring_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"anyOf":[{"$ref":"#/components/schemas/CompanyScoringStatus"},{"type":"null"}],"title":"Response Get Scoring Stats Admin Stats Scoring Get"}}}}}}},"/admin/stats/financials-processing":{"get":{"tags":["internal","Admin - Stats"],"summary":"Get Financials Processing Stats","description":"Get XBRL financials processing status.","operationId":"get_financials_processing_stats_admin_stats_financials_processing_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/admin/stats/reports":{"get":{"tags":["internal","Admin - Stats"],"summary":"Get Report Stats","description":"Get report generation statistics (today, this week, this month, total).","operationId":"get_report_stats_admin_stats_reports_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ReportStats"}}}}}}},"/admin/usage":{"get":{"tags":["internal","Admin - Stats"],"summary":"Get Usage Stats","description":"Get API usage statistics - daily totals from api_usage_daily collection.","operationId":"get_usage_stats_admin_usage_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/app__routers__admin__models__UsageResponse"}}}}}}},"/admin/sync/trigger":{"post":{"tags":["internal","Admin - Sync"],"summary":"Trigger Sync","description":"Trigger a full CVR company data sync job (syncs ALL companies).","operationId":"trigger_sync_admin_sync_trigger_post","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/TriggerSyncResponse"}}}}}}},"/admin/sync/trigger-brevo-newsletter":{"post":{"tags":["internal","Admin - Sync"],"summary":"Trigger Brevo Newsletter","description":"Reconcile the Brevo newsletter list with marketing consent.\n\nAdds eligible (opted-in + verified) users that were missed and removes\nanyone who has since revoked consent or been deleted. Idempotent.","operationId":"trigger_brevo_newsletter_admin_sync_trigger_brevo_newsletter_post","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/TriggerSyncResponse"}}}}}}},"/admin/sync/trigger-crawl-stats":{"post":{"tags":["internal","Admin - Sync"],"summary":"Trigger Crawl Stats","description":"Collect missing days of crawler traffic from Cloudflare analytics.\n\nIdempotent: days already stored in crawl_stats_daily are skipped. Does\nnothing (returns a skipped result) when CLOUDFLARE_ANALYTICS_TOKEN is unset.","operationId":"trigger_crawl_stats_admin_sync_trigger_crawl_stats_post","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/TriggerSyncResponse"}}}}}}},"/admin/sync/trigger-crawl-stats-digest":{"post":{"tags":["internal","Admin - Sync"],"summary":"Trigger Crawl Stats Digest","description":"Post the weekly Googlebot crawl digest to Telegram now (production only).","operationId":"trigger_crawl_stats_digest_admin_sync_trigger_crawl_stats_digest_post","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/TriggerSyncResponse"}}}}}}},"/admin/sync/trigger-cds-backtest":{"post":{"tags":["internal","Admin - Sync"],"summary":"Trigger Cds Backtest","description":"Run the CDS validation backtest (quarterly konkursanalyse) on demand.\n\nStores a DRAFT snapshot for review; publishing to the public page is a\nseparate manual step under Scoring → Konkursanalyse.","operationId":"trigger_cds_backtest_admin_sync_trigger_cds_backtest_post","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/TriggerSyncResponse"}}}}}}},"/admin/sync/trigger-website-discovery":{"post":{"tags":["internal","Admin - Sync"],"summary":"Trigger Website Discovery","description":"Trigger the website-discovery sweep (finds + verifies sites for companies\nwith none in CVR, enriching contact data). Resumes from its cursor.","operationId":"trigger_website_discovery_admin_sync_trigger_website_discovery_post","parameters":[{"name":"segment","in":"query","required":false,"schema":{"type":"string","description":"restaurants | financials | employees | email (free, no SERP) | all","default":"financials","title":"Segment"},"description":"restaurants | financials | employees | email (free, no SERP) | all"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/TriggerSyncResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/admin/sync/stop-website-discovery":{"post":{"tags":["internal","Admin - Sync"],"summary":"Stop Website Discovery","description":"Signal a running website-discovery sweep to stop.\n\nCooperative: the worker notices the flag between companies, checkpoints its\ncursor, and exits cleanly (status → ``stopped``). No data is lost or\ncorrupted; press Start sweep later to resume from the cursor. Use this when a\nscraping flaw is discovered, so we stop ingesting bad data while it's fixed.","operationId":"stop_website_discovery_admin_sync_stop_website_discovery_post","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/TriggerSyncResponse"}}}}}}},"/admin/sync/website-discovery-budget":{"post":{"tags":["internal","Admin - Sync"],"summary":"Adjust Website Discovery Budget","description":"Adjust the website-discovery Serper budget by a signed delta (clamped ≥ 0).\n\nThe budget is cumulative: add (positive) after topping up Serper, or subtract\n(negative) to reconcile drift between our recorded credits_spent and the real\naccount. Clears the low-balance flag so a paused sweep can re-arm. From a zero\nstart, a positive delta is just the initial budget.","operationId":"adjust_website_discovery_budget_admin_sync_website_discovery_budget_post","parameters":[{"name":"delta","in":"query","required":true,"schema":{"type":"integer","description":"Credits to add to the Serper budget; negative subtracts","title":"Delta"},"description":"Credits to add to the Serper budget; negative subtracts"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/TriggerSyncResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/admin/sync/website-discovery-log":{"get":{"tags":["internal","Admin - Sync"],"summary":"Website Discovery Log","description":"Recent website-discovery activity (newest first) + live summary.\n\nDerived from each company's `discovered_website` (and `scraped_contacts` for\ncontact counts) — during a sweep this is the live feed of what's being\nprocessed: which domain for which CVR, and how many contacts were found.","operationId":"website_discovery_log_admin_sync_website_discovery_log_get","parameters":[{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":200,"minimum":1,"default":50,"title":"Limit"}},{"name":"status","in":"query","required":false,"schema":{"type":"string","description":"Filter by outcome: found | no_match | no_results","title":"Status"},"description":"Filter by outcome: found | no_match | no_results"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/admin/sync/trigger-incremental":{"post":{"tags":["internal","Admin - Sync"],"summary":"Trigger Incremental Sync","description":"Trigger an incremental CVR company sync job.\nOnly syncs companies that changed since the last successful sync.\nMuch faster than a full sync.","operationId":"trigger_incremental_sync_admin_sync_trigger_incremental_post","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/TriggerSyncResponse"}}}}}}},"/admin/sync/company/{cvr}":{"post":{"tags":["internal","Admin - Sync"],"summary":"Refresh Single Company","description":"Refresh a single company from CVR API.","operationId":"refresh_single_company_admin_sync_company__cvr__post","parameters":[{"name":"cvr","in":"path","required":true,"schema":{"type":"string","title":"Cvr"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/TriggerSyncResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/admin/sync/trigger-participants":{"post":{"tags":["internal","Admin - Sync"],"summary":"Trigger Participant Sync","description":"Trigger a full participant/deltager sync job (syncs ALL participants).","operationId":"trigger_participant_sync_admin_sync_trigger_participants_post","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/TriggerSyncResponse"}}}}}}},"/admin/sync/trigger-participants-incremental":{"post":{"tags":["internal","Admin - Sync"],"summary":"Trigger Participant Incremental Sync","description":"Trigger an incremental participant sync job.\nOnly syncs participants that changed since the last successful sync.","operationId":"trigger_participant_incremental_sync_admin_sync_trigger_participants_incremental_post","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/TriggerSyncResponse"}}}}}}},"/admin/sync/trigger-participant-name-heal":{"post":{"tags":["internal","Admin - Sync"],"summary":"Trigger Participant Name Heal","description":"Trigger the stale participant-name heal job (also runs weekly on cron).\nScans all companies for embedded participant names that drifted from the\nparticipants collection and re-fetches the affected companies from CVR.","operationId":"trigger_participant_name_heal_admin_sync_trigger_participant_name_heal_post","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/TriggerSyncResponse"}}}}}}},"/admin/sync/trigger-production-units":{"post":{"tags":["internal","Admin - Sync"],"summary":"Trigger Production Unit Sync","description":"Trigger a full production unit (P-enheder) sync job (syncs ALL production units).","operationId":"trigger_production_unit_sync_admin_sync_trigger_production_units_post","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/TriggerSyncResponse"}}}}}}},"/admin/sync/trigger-production-units-incremental":{"post":{"tags":["internal","Admin - Sync"],"summary":"Trigger Production Unit Incremental Sync","description":"Trigger an incremental production unit sync job.\nOnly syncs production units that changed since the last successful sync.","operationId":"trigger_production_unit_incremental_sync_admin_sync_trigger_production_units_incremental_post","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/TriggerSyncResponse"}}}}}}},"/admin/sync/trigger-ejf-ownerships":{"post":{"tags":["internal","Admin - Sync"],"summary":"Trigger Ejf Ownership Sync","description":"Trigger a full EJF property ownership sync from Datafordeler.","operationId":"trigger_ejf_ownership_sync_admin_sync_trigger_ejf_ownerships_post","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/TriggerSyncResponse"}}}}}}},"/admin/sync/trigger-ejf-transfers":{"post":{"tags":["internal","Admin - Sync"],"summary":"Trigger Ejf Transfer Sync","description":"Trigger a full EJF property transfer sync from Datafordeler.","operationId":"trigger_ejf_transfer_sync_admin_sync_trigger_ejf_transfers_post","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/TriggerSyncResponse"}}}}}}},"/admin/sync/trigger-ejf-transactions":{"post":{"tags":["internal","Admin - Sync"],"summary":"Trigger Ejf Transaction Sync","description":"Trigger a full EJF property transaction sync from Datafordeler.","operationId":"trigger_ejf_transaction_sync_admin_sync_trigger_ejf_transactions_post","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/TriggerSyncResponse"}}}}}}},"/admin/sync/trigger-ejf-administrators":{"post":{"tags":["internal","Admin - Sync"],"summary":"Trigger Ejf Administrator Sync","description":"Trigger a full EJF property administrator sync from Datafordeler.","operationId":"trigger_ejf_administrator_sync_admin_sync_trigger_ejf_administrators_post","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/TriggerSyncResponse"}}}}}}},"/admin/sync/trigger-mat-jordstykker":{"post":{"tags":["internal","Admin - Sync"],"summary":"Trigger Mat Jordstykke Sync","description":"Trigger a full MAT_Jordstykke sync (BFE → jordstykke mapping).","operationId":"trigger_mat_jordstykke_sync_admin_sync_trigger_mat_jordstykker_post","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/TriggerSyncResponse"}}}}}}},"/admin/sync/trigger-dar-husnumre":{"post":{"tags":["internal","Admin - Sync"],"summary":"Trigger Dar Husnummer Sync","description":"Trigger a full DAR_Husnummer sync (jordstykke → address mapping).","operationId":"trigger_dar_husnummer_sync_admin_sync_trigger_dar_husnumre_post","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/TriggerSyncResponse"}}}}}}},"/admin/sync/trigger-dar-husnumre-incremental":{"post":{"tags":["internal","Admin - Sync"],"summary":"Trigger Dar Husnummer Incremental Sync","description":"Trigger incremental DAR husnummer sync (only records since last sync).","operationId":"trigger_dar_husnummer_incremental_sync_admin_sync_trigger_dar_husnumre_incremental_post","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/TriggerSyncResponse"}}}}}}},"/admin/sync/trigger-address-enrichment":{"post":{"tags":["internal","Admin - Sync"],"summary":"Trigger Address Enrichment","description":"Trigger address enrichment for property ownership records (MongoDB local joins).","operationId":"trigger_address_enrichment_admin_sync_trigger_address_enrichment_post","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/TriggerSyncResponse"}}}}}}},"/admin/sync/trigger-bbr-bygninger":{"post":{"tags":["internal","Admin - Sync"],"summary":"Trigger Bbr Bygninger Sync","description":"Trigger BBR_Bygning (buildings) sync from Datafordeler.","operationId":"trigger_bbr_bygninger_sync_admin_sync_trigger_bbr_bygninger_post","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/TriggerSyncResponse"}}}}}}},"/admin/sync/trigger-bbr-enheder":{"post":{"tags":["internal","Admin - Sync"],"summary":"Trigger Bbr Enheder Sync","description":"Trigger BBR_Enhed (units/apartments) sync from Datafordeler.","operationId":"trigger_bbr_enheder_sync_admin_sync_trigger_bbr_enheder_post","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/TriggerSyncResponse"}}}}}}},"/admin/sync/trigger-bbr-ejendomsrelationer":{"post":{"tags":["internal","Admin - Sync"],"summary":"Trigger Bbr Ejendomsrelationer Sync","description":"Trigger BBR_Ejendomsrelation (BFE → property type) sync from Datafordeler.","operationId":"trigger_bbr_ejendomsrelationer_sync_admin_sync_trigger_bbr_ejendomsrelationer_post","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/TriggerSyncResponse"}}}}}}},"/admin/sync/trigger-bbr-enhed-ejendomsrelationer":{"post":{"tags":["internal","Admin - Sync"],"summary":"Trigger Bbr Enhed Ejendomsrelationer Sync","description":"Trigger BBR_EnhedEjendomsrelation (ejerlejlighed → unit) sync from Datafordeler.","operationId":"trigger_bbr_enhed_ejendomsrelationer_sync_admin_sync_trigger_bbr_enhed_ejendomsrelationer_post","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/TriggerSyncResponse"}}}}}}},"/admin/sync/trigger-property-summary":{"post":{"tags":["internal","Admin - Sync"],"summary":"Trigger Property Summary","description":"Aggregate property data per CVR and write summary blob onto company documents.","operationId":"trigger_property_summary_admin_sync_trigger_property_summary_post","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/TriggerSyncResponse"}}}}}}},"/admin/sync/trigger-risk-signals":{"post":{"tags":["internal","Admin - Sync"],"summary":"Trigger Risk Signals","description":"Recompute financial reporting conduct signals (risk_signals) on companies.","operationId":"trigger_risk_signals_admin_sync_trigger_risk_signals_post","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/TriggerSyncResponse"}}}}}}},"/admin/sync/trigger-distress-history":{"post":{"tags":["internal","Admin - Sync"],"summary":"Trigger Distress History","description":"Recompute per-person distress history (distress_history) on participants.","operationId":"trigger_distress_history_admin_sync_trigger_distress_history_post","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/TriggerSyncResponse"}}}}}}},"/admin/sync/trigger-address-publication":{"post":{"tags":["internal","Admin - Sync"],"summary":"Trigger Address Publication","description":"Recompute the CVR 5-year rule flag (address_publication_ceased) on participants.","operationId":"trigger_address_publication_admin_sync_trigger_address_publication_post","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/TriggerSyncResponse"}}}}}}},"/admin/sync/trigger-administered-property-summary":{"post":{"tags":["internal","Admin - Sync"],"summary":"Trigger Administered Property Summary","description":"Aggregate administered properties per CVR and write summary blob onto company documents.","operationId":"trigger_administered_property_summary_admin_sync_trigger_administered_property_summary_post","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/TriggerSyncResponse"}}}}}}},"/admin/sync/trigger-building-enrichment":{"post":{"tags":["internal","Admin - Sync"],"summary":"Trigger Building Enrichment","description":"Trigger building enrichment for property ownership records (MongoDB local joins).","operationId":"trigger_building_enrichment_admin_sync_trigger_building_enrichment_post","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/TriggerSyncResponse"}}}}}}},"/admin/sync/trigger-property-geocoding":{"post":{"tags":["internal","Admin - Sync"],"summary":"Trigger Property Geocoding","description":"Trigger geocoding enrichment for property ownerships (matches addresses to DAWA coordinates).","operationId":"trigger_property_geocoding_admin_sync_trigger_property_geocoding_post","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/TriggerSyncResponse"}}}}}}},"/admin/sync/trigger-mat-geometry":{"post":{"tags":["internal","Admin - Sync"],"summary":"Trigger Mat Geometry Sync","description":"Trigger MAT centroide + lodflade geometry sync (parcel boundaries).","operationId":"trigger_mat_geometry_sync_admin_sync_trigger_mat_geometry_post","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/TriggerSyncResponse"}}}}}}},"/admin/sync/trigger-matrikel-geometry-enrichment":{"post":{"tags":["internal","Admin - Sync"],"summary":"Trigger Matrikel Geometry Enrichment","description":"Trigger matrikel geometry enrichment on properties (polygon + centroid fallback).","operationId":"trigger_matrikel_geometry_enrichment_admin_sync_trigger_matrikel_geometry_enrichment_post","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/TriggerSyncResponse"}}}}}}},"/admin/sync/trigger-climate-risk-backfill":{"post":{"tags":["internal","Admin - Sync"],"summary":"Trigger Climate Risk Backfill","description":"Trigger climate/flood risk backfill for every property, company-owned first (throttled; resumable).","operationId":"trigger_climate_risk_backfill_admin_sync_trigger_climate_risk_backfill_post","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/TriggerSyncResponse"}}}}}}},"/admin/sync/trigger-energy-label-backfill":{"post":{"tags":["internal","Admin - Sync"],"summary":"Trigger Energy Label Backfill","description":"Trigger EMOData energy label backfill for every property, company-owned first (throttled; resumable).","operationId":"trigger_energy_label_backfill_admin_sync_trigger_energy_label_backfill_post","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/TriggerSyncResponse"}}}}}}},"/admin/sync/trigger-chr-backfill":{"post":{"tags":["internal","Admin - Sync"],"summary":"Trigger Chr Backfill","description":"Trigger CHR herd backfill for active agri/fishery companies (throttled; resumable).","operationId":"trigger_chr_backfill_admin_sync_trigger_chr_backfill_post","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/TriggerSyncResponse"}}}}}}},"/admin/sync/trigger-chr-ejendom-sync":{"post":{"tags":["internal","Admin - Sync"],"summary":"Trigger Chr Ejendom Sync","description":"Trigger CHR ejendom sync: address + stald coordinates per CHR-nummer, BFE resolved via the matrikel corpus (throttled; resumable).","operationId":"trigger_chr_ejendom_sync_admin_sync_trigger_chr_ejendom_sync_post","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/TriggerSyncResponse"}}}}}}},"/admin/sync/trigger-plandata-sync":{"post":{"tags":["internal","Admin - Sync"],"summary":"Trigger Plandata Sync","description":"Trigger Plandata plan corpus refresh (all four layers) + property zone stamping.","operationId":"trigger_plandata_sync_admin_sync_trigger_plandata_sync_post","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/TriggerSyncResponse"}}}}}}},"/admin/sync/trigger-dawa":{"post":{"tags":["internal","Admin - Sync"],"summary":"Trigger Dawa Sync","description":"Trigger DAR address build job (joins reference data to build ~2.6M addresses).","operationId":"trigger_dawa_sync_admin_sync_trigger_dawa_post","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/TriggerSyncResponse"}}}}}}},"/admin/sync/trigger-dar-addresses-incremental":{"post":{"tags":["internal","Admin - Sync"],"summary":"Trigger Dar Addresses Incremental Sync","description":"Trigger incremental DAR address build (re-runs full join from local data).","operationId":"trigger_dar_addresses_incremental_sync_admin_sync_trigger_dar_addresses_incremental_post","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/TriggerSyncResponse"}}}}}}},"/admin/sync/trigger-dar-adressepunkter":{"post":{"tags":["internal","Admin - Sync"],"summary":"Trigger Dar Adressepunkter Sync","description":"Trigger DAR adressepunkter (access points with coordinates) sync. ~2.6M records.","operationId":"trigger_dar_adressepunkter_sync_admin_sync_trigger_dar_adressepunkter_post","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/TriggerSyncResponse"}}}}}}},"/admin/sync/trigger-dar-adressepunkter-incremental":{"post":{"tags":["internal","Admin - Sync"],"summary":"Trigger Dar Adressepunkter Incremental Sync","description":"Trigger incremental DAR adressepunkter sync (only records since last sync).","operationId":"trigger_dar_adressepunkter_incremental_sync_admin_sync_trigger_dar_adressepunkter_incremental_post","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/TriggerSyncResponse"}}}}}}},"/admin/sync/trigger-ebr-beliggenhed":{"post":{"tags":["internal","Admin - Sync"],"summary":"Trigger Ebr Beliggenhed Sync","description":"Trigger EBR beliggenhed (official property location addresses) sync. ~2.9M records.","operationId":"trigger_ebr_beliggenhed_sync_admin_sync_trigger_ebr_beliggenhed_post","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/TriggerSyncResponse"}}}}}}},"/admin/sync/trigger-ebr-beliggenhed-incremental":{"post":{"tags":["internal","Admin - Sync"],"summary":"Trigger Ebr Beliggenhed Incremental Sync","description":"Trigger incremental EBR beliggenhed sync (only records since last sync).","operationId":"trigger_ebr_beliggenhed_incremental_sync_admin_sync_trigger_ebr_beliggenhed_incremental_post","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/TriggerSyncResponse"}}}}}}},"/admin/sync/trigger-dar-navngivne-veje":{"post":{"tags":["internal","Admin - Sync"],"summary":"Trigger Dar Navngivne Veje Sync","description":"Trigger DAR navngivne veje (named roads) sync. ~100K records.","operationId":"trigger_dar_navngivne_veje_sync_admin_sync_trigger_dar_navngivne_veje_post","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/TriggerSyncResponse"}}}}}}},"/admin/sync/trigger-dar-postnumre":{"post":{"tags":["internal","Admin - Sync"],"summary":"Trigger Dar Postnumre Sync","description":"Trigger DAR postnumre (postal codes) sync. ~1200 records.","operationId":"trigger_dar_postnumre_sync_admin_sync_trigger_dar_postnumre_post","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/TriggerSyncResponse"}}}}}}},"/admin/sync/trigger-dar-vej-kommunedele":{"post":{"tags":["internal","Admin - Sync"],"summary":"Trigger Dar Vej Kommunedele Sync","description":"Trigger DAR vej-kommunedele (road-municipality mapping) sync. ~100K records.","operationId":"trigger_dar_vej_kommunedele_sync_admin_sync_trigger_dar_vej_kommunedele_post","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/TriggerSyncResponse"}}}}}}},"/admin/sync/trigger-municipalities":{"post":{"tags":["internal","Admin - Sync"],"summary":"Trigger Municipalities Sync","description":"Trigger municipalities and regions sync from Dataforsyningen.","operationId":"trigger_municipalities_sync_admin_sync_trigger_municipalities_post","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/TriggerSyncResponse"}}}}}}},"/admin/sync/trigger-industry-codes":{"post":{"tags":["internal","Admin - Sync"],"summary":"Trigger Industry Codes Sync","description":"Trigger industry codes extraction from existing company data.","operationId":"trigger_industry_codes_sync_admin_sync_trigger_industry_codes_post","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/TriggerSyncResponse"}}}}}}},"/admin/sync/trigger-municipality-reports":{"post":{"tags":["internal","Admin - Sync"],"summary":"Trigger Municipality Reports","description":"Trigger municipality report generation from company data.","operationId":"trigger_municipality_reports_admin_sync_trigger_municipality_reports_post","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/TriggerSyncResponse"}}}}}}},"/admin/sync/trigger-postal-code-reports":{"post":{"tags":["internal","Admin - Sync"],"summary":"Trigger Postal Code Reports","description":"Trigger postal code report generation from company data.","operationId":"trigger_postal_code_reports_admin_sync_trigger_postal_code_reports_post","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/TriggerSyncResponse"}}}}}}},"/admin/sync/trigger-municipality-division-reports":{"post":{"tags":["internal","Admin - Sync"],"summary":"Trigger Municipality Division Reports","description":"Trigger kommune x branche (division) report generation plus sector aggregates.","operationId":"trigger_municipality_division_reports_admin_sync_trigger_municipality_division_reports_post","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/TriggerSyncResponse"}}}}}}},"/admin/sync/trigger-industry-benchmarks":{"post":{"tags":["internal","Admin - Sync"],"summary":"Trigger Industry Benchmarks","description":"Trigger industry benchmark generation from company and financial data.","operationId":"trigger_industry_benchmarks_admin_sync_trigger_industry_benchmarks_post","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/TriggerSyncResponse"}}}}}}},"/admin/sync/trigger-country-reports":{"post":{"tags":["internal","Admin - Sync"],"summary":"Trigger Country Reports","description":"Trigger country report generation showing foreign ownership in Danish companies.","operationId":"trigger_country_reports_admin_sync_trigger_country_reports_post","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/TriggerSyncResponse"}}}}}}},"/admin/sync/trigger-top-companies":{"post":{"tags":["internal","Admin - Sync"],"summary":"Trigger Top Companies Report","description":"Trigger top companies report generation ('Danmarks største virksomheder').","operationId":"trigger_top_companies_report_admin_sync_trigger_top_companies_post","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/TriggerSyncResponse"}}}}}}},"/admin/sync/trigger-glossary-figures":{"post":{"tags":["internal","Admin - Sync"],"summary":"Trigger Glossary Figures","description":"Trigger the ordbog key-figure job (medians, quartiles and company counts).","operationId":"trigger_glossary_figures_admin_sync_trigger_glossary_figures_post","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/TriggerSyncResponse"}}}}}}},"/admin/sync/trigger-geocoding":{"post":{"tags":["internal","Admin - Sync"],"summary":"Trigger Geocoding","description":"Trigger company geocoding job (requires DAWA addresses to be synced first).","operationId":"trigger_geocoding_admin_sync_trigger_geocoding_post","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/TriggerSyncResponse"}}}}}}},"/admin/sync/trigger-production-units-geocoding":{"post":{"tags":["internal","Admin - Sync"],"summary":"Trigger Production Units Geocoding","description":"Trigger production units geocoding job (requires DAWA addresses to be synced first).","operationId":"trigger_production_units_geocoding_admin_sync_trigger_production_units_geocoding_post","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/TriggerSyncResponse"}}}}}}},"/admin/sync/trigger-sitemaps":{"post":{"tags":["internal","Admin - Sync"],"summary":"Trigger Sitemap Generation","description":"Trigger sitemap generation job.","operationId":"trigger_sitemap_generation_admin_sync_trigger_sitemaps_post","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/TriggerSyncResponse"}}}}}}},"/admin/sync/trigger-announcements":{"post":{"tags":["internal","Admin - Sync"],"summary":"Trigger Announcement Sync","description":"Trigger bulk announcement metadata sync (Phase 1 of two-phase financial sync).\nThis is fast - just syncs metadata without processing XBRL.","operationId":"trigger_announcement_sync_admin_sync_trigger_announcements_post","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/TriggerSyncResponse"}}}}}}},"/admin/sync/trigger-announcements-incremental":{"post":{"tags":["internal","Admin - Sync"],"summary":"Trigger Announcement Incremental Sync","description":"Trigger incremental announcement sync (regnskab only).\nOnly fetches announcements that have changed since the last sync.","operationId":"trigger_announcement_incremental_sync_admin_sync_trigger_announcements_incremental_post","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/TriggerSyncResponse"}}}}}}},"/admin/sync/trigger-financials-processing":{"post":{"tags":["internal","Admin - Sync"],"summary":"Trigger Financials Processing","description":"Trigger XBRL processing for pending announcements (Phase 2 of two-phase financial sync).\nThis processes announcements that have been synced but not yet had their XBRL extracted.\nResumable and prioritizes active companies.","operationId":"trigger_financials_processing_admin_sync_trigger_financials_processing_post","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/TriggerSyncResponse"}}}}}}},"/admin/sync/retry-failed-financials":{"post":{"tags":["internal","Admin - Sync"],"summary":"Trigger Retry Failed Financials","description":"Trigger retry of failed financial processing.\nResets failed announcements to pending so they can be retried.","operationId":"trigger_retry_failed_financials_admin_sync_retry_failed_financials_post","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/TriggerSyncResponse"}}}}}}},"/admin/sync/reprocessing-stats":{"get":{"tags":["internal","Admin - Sync"],"summary":"Get Reprocessing Stats","description":"Get statistics about records marked for reprocessing.\nReturns count, breakdown by reason, and oldest marked timestamp.","operationId":"get_reprocessing_stats_admin_sync_reprocessing_stats_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/admin/sync/trigger-financial-reprocessing":{"post":{"tags":["internal","Admin - Sync"],"summary":"Trigger Financial Reprocessing","description":"Trigger reprocessing of all marked financial statements.\nReads XBRL from cache and parses with current parser version.\nUse after parser fixes or cache repairs.","operationId":"trigger_financial_reprocessing_admin_sync_trigger_financial_reprocessing_post","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/TriggerSyncResponse"}}}}}}},"/admin/sync/mark-for-reprocessing":{"post":{"tags":["internal","Admin - Sync"],"summary":"Mark For Reprocessing","description":"Mark financial statements for reprocessing.\n\nParameters:\n- reason: Required. Why these records need reprocessing.\n- cvr: Optional. Mark all records for this CVR.\n- reporting_class: Optional. Mark records with this reporting class (A, B, C, D).\n- limit: Optional. Maximum number of records to mark.","operationId":"mark_for_reprocessing_admin_sync_mark_for_reprocessing_post","parameters":[{"name":"reason","in":"query","required":true,"schema":{"type":"string","title":"Reason"}},{"name":"cvr","in":"query","required":false,"schema":{"type":"string","title":"Cvr"}},{"name":"reporting_class","in":"query","required":false,"schema":{"type":"string","title":"Reporting Class"}},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","title":"Limit"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/TriggerSyncResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/admin/sync/trigger-scoring":{"post":{"tags":["internal","Admin - Sync"],"summary":"Trigger Company Scoring","description":"Trigger CDS (CompanyData Score) calculation for all companies.\n\nArgs:\n    force_recalculate: If True, recalculates all scores. If False, only updates stale/missing scores.","operationId":"trigger_company_scoring_admin_sync_trigger_scoring_post","parameters":[{"name":"force_recalculate","in":"query","required":false,"schema":{"type":"boolean","description":"If True, recalculates all scores","default":false,"title":"Force Recalculate"},"description":"If True, recalculates all scores"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/TriggerSyncResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/admin/sync/score-company/{cvr}":{"post":{"tags":["internal","Admin - Sync"],"summary":"Trigger Single Company Scoring","description":"Trigger CDS (CompanyData Score) calculation for a single company.","operationId":"trigger_single_company_scoring_admin_sync_score_company__cvr__post","parameters":[{"name":"cvr","in":"path","required":true,"schema":{"type":"string","title":"Cvr"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/TriggerSyncResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/admin/sync/trigger-ai-summaries":{"post":{"tags":["internal","Admin - Sync"],"summary":"Trigger Ai Summaries","description":"Trigger AI summary generation for companies.\n\nGenerates concise AI summaries for \"interesting\" companies (those with meaningful\nfinancial data, CDS scores, and active status). Processes all candidates in one run.","operationId":"trigger_ai_summaries_admin_sync_trigger_ai_summaries_post","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/TriggerSyncResponse"}}}}}}},"/admin/sync/trigger-stats-cache":{"post":{"tags":["internal","Admin - Sync"],"summary":"Trigger Stats Cache Update","description":"Trigger stats cache update.\n\nThis pre-computes expensive aggregation queries (score distribution,\ngeocoding counts, etc.) to speed up admin dashboard loading.","operationId":"trigger_stats_cache_update_admin_sync_trigger_stats_cache_post","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/TriggerSyncResponse"}}}}}}},"/admin/sync/chain-status":{"get":{"tags":["internal","Admin - Sync"],"summary":"Get Sync Chain Status","description":"Get the current status of sync chain execution and lock status.\n\nReturns information about:\n- Whether a sync is currently running\n- Which phase is currently executing\n- Which phases have completed\n- Lock status (full vs incremental)","operationId":"get_sync_chain_status_admin_sync_chain_status_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SyncChainStatus"}}}}}}},"/admin/sync/trigger-sync-chain":{"post":{"tags":["internal","Admin - Sync"],"summary":"Trigger Sync Chain","description":"Trigger the orchestrated sync chain.\n\nThe sync chain runs all sync jobs in the correct dependency order:\n1. Companies\n2. Participants + Production Units (parallel)\n3. Regnskab (announcement metadata)\n4. Financials (XBRL processing)\n5. Scoring\n6. Reports + Sitemaps + AI Summaries (parallel)\n\nArgs:\n    is_full_sync: If True, runs full sync (exclusive lock, syncs everything).\n                  If False, runs incremental sync (shared lock, only recent changes).","operationId":"trigger_sync_chain_admin_sync_trigger_sync_chain_post","parameters":[{"name":"is_full_sync","in":"query","required":false,"schema":{"type":"boolean","default":false,"title":"Is Full Sync"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/TriggerSyncResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/admin/sync/trigger-quick-sync":{"post":{"tags":["internal","Admin - Sync"],"summary":"Trigger Quick Incremental Sync","description":"Trigger a quick incremental sync (companies + participants only).\n\nThis is faster than the full sync chain and useful for getting\nrecent changes quickly for notifications.","operationId":"trigger_quick_incremental_sync_admin_sync_trigger_quick_sync_post","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/TriggerSyncResponse"}}}}}}},"/admin/sync/trigger-statstidende":{"post":{"tags":["internal","Admin - Sync"],"summary":"Trigger Statstidende Sync","description":"Trigger a Statstidende legal notices sync.","operationId":"trigger_statstidende_sync_admin_sync_trigger_statstidende_post","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/TriggerSyncResponse"}}}}}}},"/admin/sync/trigger-eurostat-reference":{"post":{"tags":["internal","Admin - Sync"],"summary":"Trigger Eurostat Reference Sync","description":"Refresh the Eurostat reference figures (bankruptcies, demography, foreign control).","operationId":"trigger_eurostat_reference_sync_admin_sync_trigger_eurostat_reference_post","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/TriggerSyncResponse"}}}}}}},"/admin/sync/trigger-teledata-check":{"post":{"tags":["internal","Admin - Sync"],"summary":"Trigger Teledata Check","description":"Trigger a §31 teledata feed check (airlock inboxes + pull feeds).","operationId":"trigger_teledata_check_admin_sync_trigger_teledata_check_post","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/TriggerSyncResponse"}}}}}}},"/admin/sync/trigger-teledata-ingest":{"post":{"tags":["internal","Admin - Sync"],"summary":"Trigger Teledata Ingest","description":"Trigger §31 teledata ingestion (consume finished airlock deliveries).","operationId":"trigger_teledata_ingest_admin_sync_trigger_teledata_ingest_post","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/TriggerSyncResponse"}}}}}}},"/admin/sync/trigger-teledata-match":{"post":{"tags":["internal","Admin - Sync"],"summary":"Trigger Teledata Match","description":"Trigger §31 directory-number matching (rebuild nummeroplysning_numbers).","operationId":"trigger_teledata_match_admin_sync_trigger_teledata_match_post","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/TriggerSyncResponse"}}}}}}},"/admin/sync/trigger-teledata-digest":{"post":{"tags":["internal","Admin - Sync"],"summary":"Trigger Teledata Digest","description":"Send the daily §31 teledata Telegram digest now.","operationId":"trigger_teledata_digest_admin_sync_trigger_teledata_digest_post","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/TriggerSyncResponse"}}}}}}},"/admin/sync/trigger-pep-list":{"post":{"tags":["internal","Admin - Sync"],"summary":"Trigger Pep List Sync","description":"Trigger a Finanstilsynet PEP list sync.","operationId":"trigger_pep_list_sync_admin_sync_trigger_pep_list_post","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/TriggerSyncResponse"}}}}}}},"/admin/sync/trigger-listed-companies":{"post":{"tags":["internal","Admin - Sync"],"summary":"Trigger Listed Companies Sync","description":"Trigger an OMX listed-companies sync (ESMA FIRDS + GLEIF).","operationId":"trigger_listed_companies_sync_admin_sync_trigger_listed_companies_post","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/TriggerSyncResponse"}}}}}}},"/admin/sync/trigger-stock-prices":{"post":{"tags":["internal","Admin - Sync"],"summary":"Trigger Stock Prices Sync","description":"Trigger an OMX stock price sync (daily candles for listed companies).","operationId":"trigger_stock_prices_sync_admin_sync_trigger_stock_prices_post","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/TriggerSyncResponse"}}}}}}},"/admin/sync/trigger-smiley-sync":{"post":{"tags":["internal","Admin - Sync"],"summary":"Trigger Smiley Sync","description":"Trigger a Fodevarestyrelsen smiley data sync.","operationId":"trigger_smiley_sync_admin_sync_trigger_smiley_sync_post","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/TriggerSyncResponse"}}}}}}},"/admin/sync/trigger-retslister-sync":{"post":{"tags":["internal","Admin - Sync"],"summary":"Trigger Retslister Sync","description":"Trigger a retslister harvest from Danmarks Domstole.","operationId":"trigger_retslister_sync_admin_sync_trigger_retslister_sync_post","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/TriggerSyncResponse"}}}}}}},"/admin/sync/trigger-tender-sync":{"post":{"tags":["internal","Admin - Sync"],"summary":"Trigger Tender Sync","description":"Trigger a tender sync from udbudsscanner's replication feed.","operationId":"trigger_tender_sync_admin_sync_trigger_tender_sync_post","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/TriggerSyncResponse"}}}}}}},"/admin/sync/trigger-name-index":{"post":{"tags":["internal","Admin - Sync"],"summary":"Trigger Name Index","description":"Trigger a rebuild of the company name match index (news matching).","operationId":"trigger_name_index_admin_sync_trigger_name_index_post","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/TriggerSyncResponse"}}}}}}},"/admin/sync/trigger-ritzau-news":{"post":{"tags":["internal","Admin - Sync"],"summary":"Trigger Ritzau News","description":"Trigger a Via Ritzau press-release sync.","operationId":"trigger_ritzau_news_admin_sync_trigger_ritzau_news_post","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/TriggerSyncResponse"}}}}}}},"/admin/sync/trigger-news-feeds":{"post":{"tags":["internal","Admin - Sync"],"summary":"Trigger News Feeds","description":"Trigger an RSS news feed poll (media mention matching).","operationId":"trigger_news_feeds_admin_sync_trigger_news_feeds_post","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/TriggerSyncResponse"}}}}}}},"/admin/sync/trigger-news-disambiguation":{"post":{"tags":["internal","Admin - Sync"],"summary":"Trigger News Disambiguation","description":"Trigger LLM disambiguation of ambiguous news matches.","operationId":"trigger_news_disambiguation_admin_sync_trigger_news_disambiguation_post","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/TriggerSyncResponse"}}}}}}},"/admin/sync/trigger-logo-fetch":{"post":{"tags":["internal","Admin - Sync"],"summary":"Trigger Logo Fetch","description":"Trigger the company-logo drain job (news-flagged companies).","operationId":"trigger_logo_fetch_admin_sync_trigger_logo_fetch_post","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/TriggerSyncResponse"}}}}}}},"/admin/sync/release-lock":{"post":{"tags":["internal","Admin - Sync"],"summary":"Release Sync Lock","description":"Force release a stuck sync lock.\n\nUse this if a sync job crashed and left a lock behind.\nWarning: Only use this if you're sure no sync is actually running.","operationId":"release_sync_lock_admin_sync_release_lock_post","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/TriggerSyncResponse"}}}}}}},"/admin/sync/trigger-dar-supplerende-bynavne":{"post":{"tags":["internal","Admin - Sync"],"summary":"Trigger Dar Supplerende Bynavne Sync","description":"Trigger DAR supplementary town name sync (Datafordeler).","operationId":"trigger_dar_supplerende_bynavne_sync_admin_sync_trigger_dar_supplerende_bynavne_post","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/TriggerSyncResponse"}}}}}}},"/admin/sync/trigger-vur-valuations":{"post":{"tags":["internal","Admin - Sync"],"summary":"Trigger Vur Valuation Sync","description":"Sync public property valuations (Datafordeler VUR); resumes an interrupted run.","operationId":"trigger_vur_valuation_sync_admin_sync_trigger_vur_valuations_post","parameters":[{"name":"full","in":"query","required":false,"schema":{"type":"boolean","description":"Re-read every valuation instead of only the changed ones","default":false,"title":"Full"},"description":"Re-read every valuation instead of only the changed ones"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/TriggerSyncResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/admin/sync/trigger-vur-preliminary":{"post":{"tags":["internal","Admin - Sync"],"summary":"Trigger Vur Preliminary Sync","description":"Import Vurderingsstyrelsen's preliminary valuation files (new releases only unless force).","operationId":"trigger_vur_preliminary_sync_admin_sync_trigger_vur_preliminary_post","parameters":[{"name":"force","in":"query","required":false,"schema":{"type":"boolean","description":"Import every release file again, also the ones already imported","default":false,"title":"Force"},"description":"Import every release file again, also the ones already imported"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/TriggerSyncResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/admin/sync/trigger-peppol-directory":{"post":{"tags":["internal","Admin - Sync"],"summary":"Trigger Peppol Directory Sync","description":"Refresh Danish e-invoicing endpoints (EAN/GLN) from the Peppol Directory export.","operationId":"trigger_peppol_directory_sync_admin_sync_trigger_peppol_directory_post","parameters":[{"name":"force","in":"query","required":false,"schema":{"type":"boolean","description":"Download even when the export's ETag is unchanged","default":false,"title":"Force"},"description":"Download even when the export's ETag is unchanged"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/TriggerSyncResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/admin/sync/trigger-dawa-index":{"post":{"tags":["internal","Admin - Sync"],"summary":"Trigger Dawa Index Build","description":"Build the DAWA address read model (dawa.companydata.dk) from the DAR mirror.","operationId":"trigger_dawa_index_build_admin_sync_trigger_dawa_index_post","parameters":[{"name":"full","in":"query","required":false,"schema":{"type":"boolean","description":"Rebuild every record instead of only what changed","default":false,"title":"Full"},"description":"Rebuild every record instead of only what changed"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/TriggerSyncResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/admin/users":{"post":{"tags":["internal","Admin - Users"],"summary":"Admin Create User","description":"Create a new user account from admin. Skips email verification.","operationId":"admin_create_user_admin_users_post","requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AdminCreateUserRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AdminCreateUserResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"get":{"tags":["internal","Admin - Users"],"summary":"List Users","description":"List users with optional filters and pagination.","operationId":"list_users_admin_users_get","parameters":[{"name":"include_deleted","in":"query","required":false,"schema":{"type":"boolean","description":"Include deleted users in the list","default":false,"title":"Include Deleted"},"description":"Include deleted users in the list"},{"name":"tier","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Filter by subscription tier: basic, pro, enterprise","title":"Tier"},"description":"Filter by subscription tier: basic, pro, enterprise"},{"name":"has_api_calls","in":"query","required":false,"schema":{"type":"boolean","description":"Only users with 1+ API calls this month","default":false,"title":"Has Api Calls"},"description":"Only users with 1+ API calls this month"},{"name":"churn_risk","in":"query","required":false,"schema":{"type":"boolean","description":"Only users whose org is canceling, past due or unpaid","default":false,"title":"Churn Risk"},"description":"Only users whose org is canceling, past due or unpaid"},{"name":"page","in":"query","required":false,"schema":{"type":"integer","minimum":1,"description":"1-based page number","default":1,"title":"Page"},"description":"1-based page number"},{"name":"page_size","in":"query","required":false,"schema":{"type":"integer","maximum":200,"minimum":1,"description":"Page size (max 200)","default":50,"title":"Page Size"},"description":"Page size (max 200)"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/UsersListResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/admin/users/overage":{"get":{"tags":["internal","Admin - Users"],"summary":"List Overage Users","description":"List orgs currently at or above their monthly API limit (owner shown).","operationId":"list_overage_users_admin_users_overage_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/admin/users/{user_id}/subscription":{"patch":{"tags":["internal","Admin - Users"],"summary":"Update User Subscription","description":"Update a user's subscription tier.","operationId":"update_user_subscription_admin_users__user_id__subscription_patch","parameters":[{"name":"user_id","in":"path","required":true,"schema":{"type":"string","title":"User Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UpdateSubscriptionRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/UpdateSubscriptionResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/admin/users/{user_id}/subscription/cancel":{"post":{"tags":["internal","Admin - Users"],"summary":"Admin Cancel Subscription","description":"Schedule cancellation at period end on the live Stripe subscription.","operationId":"admin_cancel_subscription_admin_users__user_id__subscription_cancel_post","parameters":[{"name":"user_id","in":"path","required":true,"schema":{"type":"string","title":"User Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SubscriptionActionResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/admin/users/{user_id}/subscription/reactivate":{"post":{"tags":["internal","Admin - Users"],"summary":"Admin Reactivate Subscription","description":"Undo a scheduled cancellation on the live Stripe subscription.","operationId":"admin_reactivate_subscription_admin_users__user_id__subscription_reactivate_post","parameters":[{"name":"user_id","in":"path","required":true,"schema":{"type":"string","title":"User Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SubscriptionActionResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/admin/users/{user_id}/subscription/pause":{"post":{"tags":["internal","Admin - Users"],"summary":"Admin Pause Subscription","description":"Pause the live Stripe subscription for 1–3 months (monthly subscribers only).","operationId":"admin_pause_subscription_admin_users__user_id__subscription_pause_post","parameters":[{"name":"user_id","in":"path","required":true,"schema":{"type":"string","title":"User Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AdminPauseRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SubscriptionActionResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/admin/users/{user_id}/subscription/resume":{"post":{"tags":["internal","Admin - Users"],"summary":"Admin Resume Subscription","description":"Resume a paused subscription early (clears the Stripe pause).","operationId":"admin_resume_subscription_admin_users__user_id__subscription_resume_post","parameters":[{"name":"user_id","in":"path","required":true,"schema":{"type":"string","title":"User Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SubscriptionActionResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/admin/users/{user_id}/subscription/grant":{"post":{"tags":["internal","Admin - Users"],"summary":"Admin Grant Subscription","description":"Comp a user to a paid tier without Stripe. ends_at=null = indefinite.","operationId":"admin_grant_subscription_admin_users__user_id__subscription_grant_post","parameters":[{"name":"user_id","in":"path","required":true,"schema":{"type":"string","title":"User Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AdminGrantRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SubscriptionActionResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"delete":{"tags":["internal","Admin - Users"],"summary":"Admin Revoke Subscription","description":"Revoke a comp/granted trial and revert the user to basic.","operationId":"admin_revoke_subscription_admin_users__user_id__subscription_grant_delete","parameters":[{"name":"user_id","in":"path","required":true,"schema":{"type":"string","title":"User Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SubscriptionActionResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/admin/users/{user_id}/subscription/extend":{"post":{"tags":["internal","Admin - Users"],"summary":"Admin Extend Trial","description":"Extend an existing granted comp/trial end date.","operationId":"admin_extend_trial_admin_users__user_id__subscription_extend_post","parameters":[{"name":"user_id","in":"path","required":true,"schema":{"type":"string","title":"User Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AdminExtendTrialRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SubscriptionActionResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/admin/users/{user_id}/subscription/price-override":{"post":{"tags":["internal","Admin - Users"],"summary":"Admin Set Price Override","description":"Set a custom price (øre) applied at the user's next checkout.","operationId":"admin_set_price_override_admin_users__user_id__subscription_price_override_post","parameters":[{"name":"user_id","in":"path","required":true,"schema":{"type":"string","title":"User Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AdminPriceOverrideRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SubscriptionActionResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"delete":{"tags":["internal","Admin - Users"],"summary":"Admin Remove Price Override","description":"Remove a user's price override.","operationId":"admin_remove_price_override_admin_users__user_id__subscription_price_override_delete","parameters":[{"name":"user_id","in":"path","required":true,"schema":{"type":"string","title":"User Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SubscriptionActionResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/admin/users/{user_id}":{"get":{"tags":["internal","Admin - Users"],"summary":"Get User","description":"Get user details.","operationId":"get_user_admin_users__user_id__get","parameters":[{"name":"user_id","in":"path","required":true,"schema":{"type":"string","title":"User Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/UserDetail"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/admin/users/{user_id}/invoices":{"get":{"tags":["internal","Admin - Users"],"summary":"Get User Invoices","description":"List a user's paid Stripe invoices for admin review.","operationId":"get_user_invoices_admin_users__user_id__invoices_get","parameters":[{"name":"user_id","in":"path","required":true,"schema":{"type":"string","title":"User Id"}},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":100,"minimum":1,"default":10,"title":"Limit"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AdminInvoicesResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/admin/users/{user_id}/reports":{"get":{"tags":["internal","Admin - Users"],"summary":"Get User Reports","description":"Get a user's report requests, newest first.","operationId":"get_user_reports_admin_users__user_id__reports_get","parameters":[{"name":"user_id","in":"path","required":true,"schema":{"type":"string","title":"User Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/UserReportItem"},"title":"Response Get User Reports Admin Users  User Id  Reports Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/admin/users/{user_id}/report-purchases":{"get":{"tags":["internal","Admin - Users"],"summary":"Get User Report Purchases","description":"Get a user's one-off report purchases and pack credit balance.","operationId":"get_user_report_purchases_admin_users__user_id__report_purchases_get","parameters":[{"name":"user_id","in":"path","required":true,"schema":{"type":"string","title":"User Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/UserReportPurchasesResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/admin/scoring/simulate/{cvr}":{"get":{"tags":["internal","Admin - Scoring"],"summary":"Simulate Company Score","description":"Simulate the CDS v2 calculation for a company and return the full\npillar/factor breakdown (does not save to the database).","operationId":"simulate_company_score_admin_scoring_simulate__cvr__get","parameters":[{"name":"cvr","in":"path","required":true,"schema":{"type":"string","title":"Cvr"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ScoreSimulationResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/admin/scoring/recalculate/{cvr}":{"post":{"tags":["internal","Admin - Scoring"],"summary":"Recalculate And Save Score","description":"Recalculate and save the CDS for a company, returning the same detailed\nbreakdown as the simulation endpoint.","operationId":"recalculate_and_save_score_admin_scoring_recalculate__cvr__post","parameters":[{"name":"cvr","in":"path","required":true,"schema":{"type":"string","title":"Cvr"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ScoreSimulationResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/admin/scoring/backtest":{"get":{"tags":["internal","Admin - Scoring"],"summary":"Get Backtest Snapshots","description":"Return the latest draft and the currently-published backtest snapshot.\n\nThe quarterly job stores drafts; publishing is a manual gate from this\npanel. `history` is the published snapshots over time (newest first) that\ndrive the public trend chart.","operationId":"get_backtest_snapshots_admin_scoring_backtest_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/admin/scoring/backtest/{snapshot_id}/publish":{"post":{"tags":["internal","Admin - Scoring"],"summary":"Publish Backtest Snapshot","description":"Publish a draft snapshot so it surfaces on the public konkursanalyse page.\n\nPrior published snapshots are retained (status stays `published`) so the\ntrend chart keeps its history; the public surface always shows the most\nrecently published one.","operationId":"publish_backtest_snapshot_admin_scoring_backtest__snapshot_id__publish_post","parameters":[{"name":"snapshot_id","in":"path","required":true,"schema":{"type":"string","title":"Snapshot Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/admin/sync/announcements/stats":{"get":{"tags":["internal","Admin - Announcements"],"summary":"Get Announcement Stats Endpoint","description":"Get detailed statistics about announcement sync and processing.","operationId":"get_announcement_stats_endpoint_admin_sync_announcements_stats_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AnnouncementStatsResponse"}}}}}}},"/admin/sync/announcements/types":{"get":{"tags":["internal","Admin - Announcements"],"summary":"Get Announcement Types","description":"Get list of supported announcement types with their sync status.","operationId":"get_announcement_types_admin_sync_announcements_types_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/admin/sync/trigger-announcement-type/{announcement_type}":{"post":{"tags":["internal","Admin - Announcements"],"summary":"Trigger Announcement Type Sync","description":"Trigger sync for a specific announcement type.\nValid types: regnskab","operationId":"trigger_announcement_type_sync_admin_sync_trigger_announcement_type__announcement_type__post","parameters":[{"name":"announcement_type","in":"path","required":true,"schema":{"type":"string","title":"Announcement Type"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/TriggerSyncResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/admin/pricing/one-off-reports":{"get":{"tags":["internal","Admin - Pricing"],"summary":"Get One Off Report Prices","description":"Effective one-off report prices. Stripe needs NO pre-created products\nfor these: every checkout uses inline price_data.","operationId":"get_one_off_report_prices_admin_pricing_one_off_reports_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/admin/pricing/promotions":{"get":{"tags":["internal","Admin - Pricing"],"summary":"List Promotions","description":"Get all promotions.","operationId":"list_promotions_admin_pricing_promotions_get","parameters":[{"name":"include_inactive","in":"query","required":false,"schema":{"type":"boolean","default":false,"title":"Include Inactive"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PromotionsListResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"post":{"tags":["internal","Admin - Pricing"],"summary":"Create Promotion Endpoint","description":"Create a new promotion.","operationId":"create_promotion_endpoint_admin_pricing_promotions_post","requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PromotionCreate"}}}},"responses":{"201":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PromotionResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/admin/pricing/promotions/active":{"get":{"tags":["internal","Admin - Pricing"],"summary":"List Active Promotions","description":"Get currently active promotions (within date range and under usage limit).","operationId":"list_active_promotions_admin_pricing_promotions_active_get","parameters":[{"name":"tier_id","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Tier Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PromotionsListResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/admin/pricing/promotions/{promotion_id}":{"get":{"tags":["internal","Admin - Pricing"],"summary":"Get Promotion Endpoint","description":"Get a specific promotion.","operationId":"get_promotion_endpoint_admin_pricing_promotions__promotion_id__get","parameters":[{"name":"promotion_id","in":"path","required":true,"schema":{"type":"string","title":"Promotion Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PromotionResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"patch":{"tags":["internal","Admin - Pricing"],"summary":"Update Promotion Endpoint","description":"Update a promotion.","operationId":"update_promotion_endpoint_admin_pricing_promotions__promotion_id__patch","parameters":[{"name":"promotion_id","in":"path","required":true,"schema":{"type":"string","title":"Promotion Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PromotionUpdate"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PromotionResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"delete":{"tags":["internal","Admin - Pricing"],"summary":"Delete Promotion Endpoint","description":"Soft-delete a promotion.","operationId":"delete_promotion_endpoint_admin_pricing_promotions__promotion_id__delete","parameters":[{"name":"promotion_id","in":"path","required":true,"schema":{"type":"string","title":"Promotion Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/admin/pricing/grant-trial":{"post":{"tags":["internal","Admin - Pricing"],"summary":"Grant Trial Endpoint","description":"Grant a trial subscription to a user.","operationId":"grant_trial_endpoint_admin_pricing_grant_trial_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/GrantTrialRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/admin/pricing/extend-trial":{"post":{"tags":["internal","Admin - Pricing"],"summary":"Extend Trial Endpoint","description":"Extend a user's trial subscription.","operationId":"extend_trial_endpoint_admin_pricing_extend_trial_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ExtendTrialRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/admin/pricing/set-price-override":{"post":{"tags":["internal","Admin - Pricing"],"summary":"Set Price Override Endpoint","description":"Set a custom price override for a user.","operationId":"set_price_override_endpoint_admin_pricing_set_price_override_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SetPriceOverrideRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/admin/pricing/price-override/{user_email}":{"delete":{"tags":["internal","Admin - Pricing"],"summary":"Remove Price Override Endpoint","description":"Remove a price override from a user.","operationId":"remove_price_override_endpoint_admin_pricing_price_override__user_email__delete","parameters":[{"name":"user_email","in":"path","required":true,"schema":{"type":"string","title":"User Email"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/admin/pricing/calculate":{"post":{"tags":["internal","Admin - Pricing"],"summary":"Calculate Price Endpoint","description":"Calculate effective price for a user considering overrides and promotions.","operationId":"calculate_price_endpoint_admin_pricing_calculate_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CalculatePriceRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PriceCalculationResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/admin/pricing/events/{user_email}":{"get":{"tags":["internal","Admin - Pricing"],"summary":"Get User Subscription Events Endpoint","description":"Get subscription events for a specific user.","operationId":"get_user_subscription_events_endpoint_admin_pricing_events__user_email__get","parameters":[{"name":"user_email","in":"path","required":true,"schema":{"type":"string","title":"User Email"}},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","default":100,"title":"Limit"}},{"name":"offset","in":"query","required":false,"schema":{"type":"integer","default":0,"title":"Offset"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SubscriptionEventsResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/admin/pricing/events":{"get":{"tags":["internal","Admin - Pricing"],"summary":"Get Recent Events Endpoint","description":"Get recent subscription events across all users.","operationId":"get_recent_events_endpoint_admin_pricing_events_get","parameters":[{"name":"limit","in":"query","required":false,"schema":{"type":"integer","default":100,"title":"Limit"}},{"name":"event_type","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Event Type"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SubscriptionEventsResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/admin/pricing/check-expired-trials":{"post":{"tags":["internal","Admin - Pricing"],"summary":"Check Expired Trials Endpoint","description":"Manually check and end expired trials.","operationId":"check_expired_trials_endpoint_admin_pricing_check_expired_trials_post","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/admin/pricing/claim-price-sets":{"get":{"tags":["internal","Admin - Pricing"],"summary":"List Claim Price Sets","description":"List all claim price sets, newest first.","operationId":"list_claim_price_sets_admin_pricing_claim_price_sets_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ClaimPriceSetsListResponse"}}}}}},"post":{"tags":["internal","Admin - Pricing"],"summary":"Create Claim Price Set","description":"Create a new claim price set.\n\nThis creates Stripe prices for all tiers (business, business_plus).\nIf activate=true, this set becomes the active one immediately.","operationId":"create_claim_price_set_admin_pricing_claim_price_sets_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ClaimPriceSetCreate"}}},"required":true},"responses":{"201":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ClaimPriceSetResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/admin/pricing/claim-price-sets/active":{"get":{"tags":["internal","Admin - Pricing"],"summary":"Get Active Claim Price Set","description":"Get the currently active claim price set.","operationId":"get_active_claim_price_set_admin_pricing_claim_price_sets_active_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ClaimPriceSetResponse"}}}}}}},"/admin/pricing/claim-price-sets/{price_set_id}/activate":{"post":{"tags":["internal","Admin - Pricing"],"summary":"Activate Claim Price Set","description":"Activate a claim price set, deactivating any currently active set.","operationId":"activate_claim_price_set_admin_pricing_claim_price_sets__price_set_id__activate_post","parameters":[{"name":"price_set_id","in":"path","required":true,"schema":{"type":"string","title":"Price Set Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/admin/pricing/claim-price-sets/{price_set_id}":{"delete":{"tags":["internal","Admin - Pricing"],"summary":"Delete Claim Price Set","description":"Delete a claim price set.\n\nCannot delete the active price set - activate another one first.","operationId":"delete_claim_price_set_admin_pricing_claim_price_sets__price_set_id__delete","parameters":[{"name":"price_set_id","in":"path","required":true,"schema":{"type":"string","title":"Price Set Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/admin/pricing/user-price-sets":{"get":{"tags":["internal","Admin - Pricing"],"summary":"List User Price Sets","description":"List all user price sets, newest first.","operationId":"list_user_price_sets_admin_pricing_user_price_sets_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/UserPriceSetsListResponse"}}}}}},"post":{"tags":["internal","Admin - Pricing"],"summary":"Create User Price Set","description":"Create a new user price set.\n\nThis creates Stripe prices for all user tiers.\nIf activate=true, this set becomes the active one immediately.","operationId":"create_user_price_set_admin_pricing_user_price_sets_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UserPriceSetCreate"}}},"required":true},"responses":{"201":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/UserPriceSetResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/admin/pricing/user-price-sets/active":{"get":{"tags":["internal","Admin - Pricing"],"summary":"Get Active User Price Set","description":"Get the currently active user price set.","operationId":"get_active_user_price_set_admin_pricing_user_price_sets_active_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/UserPriceSetResponse"}}}}}}},"/admin/pricing/user-price-sets/{price_set_id}/activate":{"post":{"tags":["internal","Admin - Pricing"],"summary":"Activate User Price Set","description":"Activate a user price set, deactivating any currently active set.","operationId":"activate_user_price_set_admin_pricing_user_price_sets__price_set_id__activate_post","parameters":[{"name":"price_set_id","in":"path","required":true,"schema":{"type":"string","title":"Price Set Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/admin/pricing/user-price-sets/{price_set_id}":{"delete":{"tags":["internal","Admin - Pricing"],"summary":"Delete User Price Set","description":"Delete a user price set.\n\nCannot delete the active price set - activate another one first.","operationId":"delete_user_price_set_admin_pricing_user_price_sets__price_set_id__delete","parameters":[{"name":"price_set_id","in":"path","required":true,"schema":{"type":"string","title":"Price Set Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/admin/pricing/credit-packs":{"get":{"tags":["internal","Admin - Pricing"],"summary":"List Credit Packs","description":"List all credit packs.","operationId":"list_credit_packs_admin_pricing_credit_packs_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreditPacksAdminResponse"}}}}}},"post":{"tags":["internal","Admin - Pricing"],"summary":"Create Credit Pack","description":"Create a new credit pack with a corresponding Stripe Price.","operationId":"create_credit_pack_admin_pricing_credit_packs_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreditPackCreateRequest"}}},"required":true},"responses":{"201":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreditPackAdminItem"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/admin/pricing/credit-packs/{pack_id}":{"patch":{"tags":["internal","Admin - Pricing"],"summary":"Update Credit Pack","description":"Update a credit pack. Creates a new Stripe Price if price changes.","operationId":"update_credit_pack_admin_pricing_credit_packs__pack_id__patch","parameters":[{"name":"pack_id","in":"path","required":true,"schema":{"type":"string","title":"Pack Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreditPackUpdateRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreditPackAdminItem"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"delete":{"tags":["internal","Admin - Pricing"],"summary":"Delete Credit Pack Endpoint","description":"Delete a credit pack. Deactivates the Stripe Price.","operationId":"delete_credit_pack_endpoint_admin_pricing_credit_packs__pack_id__delete","parameters":[{"name":"pack_id","in":"path","required":true,"schema":{"type":"string","title":"Pack Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/admin/claims":{"get":{"tags":["internal","Admin - Claims"],"summary":"List Claims","description":"List company claims filtered by admin queue.\n\nQueues: pending (needs an admin decision), awaiting_user (verification\nemail sent, waiting on the requester), verified, rejected, revoked, expired.","operationId":"list_claims_admin_claims_get","parameters":[{"name":"status","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Status"}},{"name":"skip","in":"query","required":false,"schema":{"type":"integer","default":0,"title":"Skip"}},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","default":50,"title":"Limit"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ClaimsListResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/admin/claims/{claim_id}":{"get":{"tags":["internal","Admin - Claims"],"summary":"Get Claim Detail","description":"Get full claim details for admin review.","operationId":"get_claim_detail_admin_claims__claim_id__get","parameters":[{"name":"claim_id","in":"path","required":true,"schema":{"type":"string","title":"Claim Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ClaimDetailResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/admin/claims/{claim_id}/approve":{"post":{"tags":["internal","Admin - Claims"],"summary":"Approve Claim","description":"Approve a pending (or expired) claim.","operationId":"approve_claim_admin_claims__claim_id__approve_post","parameters":[{"name":"claim_id","in":"path","required":true,"schema":{"type":"string","title":"Claim Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/admin/claims/{claim_id}/reject":{"post":{"tags":["internal","Admin - Claims"],"summary":"Reject Claim","description":"Reject a pending (or expired) claim with a reason.","operationId":"reject_claim_admin_claims__claim_id__reject_post","parameters":[{"name":"claim_id","in":"path","required":true,"schema":{"type":"string","title":"Claim Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/RejectClaimRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/admin/claims/{claim_id}/send-verification-email":{"post":{"tags":["internal","Admin - Claims"],"summary":"Send Claim Verification Email","description":"Admin-initiated email verification.\n\nSends a verification email to the requester's email address.\nUsed when auto-verification wasn't possible but admin wants to verify via email.","operationId":"send_claim_verification_email_admin_claims__claim_id__send_verification_email_post","parameters":[{"name":"claim_id","in":"path","required":true,"schema":{"type":"string","title":"Claim Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/admin/claims/stats/overview":{"get":{"tags":["internal","Admin - Claims"],"summary":"Get Claim Stats","description":"Get overview statistics for company claims.","operationId":"get_claim_stats_admin_claims_stats_overview_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ClaimStatsResponse"}}}}}}},"/admin/views/company/{cvr}":{"get":{"tags":["internal","Admin - Analytics"],"summary":"Get Company Views","description":"Get view stats for a specific company by CVR.","operationId":"get_company_views_admin_views_company__cvr__get","parameters":[{"name":"cvr","in":"path","required":true,"schema":{"type":"string","title":"Cvr"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"anyOf":[{"$ref":"#/components/schemas/CompanyViewStats"},{"type":"null"}],"title":"Response Get Company Views Admin Views Company  Cvr  Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/admin/views/top":{"get":{"tags":["internal","Admin - Analytics"],"summary":"Get Top Viewed","description":"Get most viewed companies (all-time).","operationId":"get_top_viewed_admin_views_top_get","parameters":[{"name":"limit","in":"query","required":false,"schema":{"type":"integer","default":10,"title":"Limit"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/TopViewedCompaniesResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/admin/views/trending":{"get":{"tags":["internal","Admin - Analytics"],"summary":"Get Trending","description":"Get trending companies (highest trending score in last 7 days).","operationId":"get_trending_admin_views_trending_get","parameters":[{"name":"limit","in":"query","required":false,"schema":{"type":"integer","default":10,"title":"Limit"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/TopViewedCompaniesResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/admin/views/sync":{"post":{"tags":["internal","Admin - Analytics"],"summary":"Trigger Views Sync","description":"Manually trigger sync of view stats from Redis to MongoDB.","operationId":"trigger_views_sync_admin_views_sync_post","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/admin/disputes":{"get":{"tags":["internal","Admin - Disputes"],"summary":"List Disputes","description":"List open claim disputes for admin review.","operationId":"list_disputes_admin_disputes_get","parameters":[{"name":"skip","in":"query","required":false,"schema":{"type":"integer","default":0,"title":"Skip"}},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","default":50,"title":"Limit"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DisputesListResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/admin/disputes/{dispute_id}":{"get":{"tags":["internal","Admin - Disputes"],"summary":"Get Dispute Detail","description":"Get full dispute details for admin review.","operationId":"get_dispute_detail_admin_disputes__dispute_id__get","parameters":[{"name":"dispute_id","in":"path","required":true,"schema":{"type":"string","title":"Dispute Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DisputeDetailResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/admin/disputes/{dispute_id}/resolve":{"post":{"tags":["internal","Admin - Disputes"],"summary":"Resolve Dispute","description":"Resolve a dispute.\n\nIf revoke_claim is True, the current claim is revoked and the disputer\ncan then claim the company. Otherwise, the current claim is kept.","operationId":"resolve_dispute_admin_disputes__dispute_id__resolve_post","parameters":[{"name":"dispute_id","in":"path","required":true,"schema":{"type":"string","title":"Dispute Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ResolveDisputeRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/admin/request-logs":{"get":{"tags":["internal","Admin - Logging"],"summary":"Get Request Logs","description":"Get request logs with filtering and pagination.\n\nFilters:\n- method: HTTP method (GET, POST, etc.)\n- path_contains: Substring match on path\n- status_code: Exact status code match\n- min_status: Minimum status code (e.g., 400 for errors only)\n- user_id: Filter by user ID\n- api_key_id: Filter by API key ID\n- min_duration_ms: Minimum request duration (for slow queries)\n- has_error: Only show requests with errors","operationId":"get_request_logs_admin_request_logs_get","parameters":[{"name":"page","in":"query","required":false,"schema":{"type":"integer","default":1,"title":"Page"}},{"name":"page_size","in":"query","required":false,"schema":{"type":"integer","default":50,"title":"Page Size"}},{"name":"method","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Method"}},{"name":"path_contains","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Path Contains"}},{"name":"status_code","in":"query","required":false,"schema":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Status Code"}},{"name":"min_status","in":"query","required":false,"schema":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Min Status"}},{"name":"user_id","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"User Id"}},{"name":"api_key_id","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Api Key Id"}},{"name":"min_duration_ms","in":"query","required":false,"schema":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Min Duration Ms"}},{"name":"has_error","in":"query","required":false,"schema":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Has Error"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/RequestLogsResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/admin/request-logs/stats":{"get":{"tags":["internal","Admin - Logging"],"summary":"Get Request Logs Stats","description":"Get statistics about request logs for the dashboard.","operationId":"get_request_logs_stats_admin_request_logs_stats_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/RequestLogStats"}}}}}}},"/admin/admin-profiles":{"get":{"tags":["internal","Admin - Admin Profiles"],"summary":"List Admin Profiles","description":"List all admin profiles with company name lookup.","operationId":"list_admin_profiles_admin_admin_profiles_get","parameters":[{"name":"skip","in":"query","required":false,"schema":{"type":"integer","default":0,"title":"Skip"}},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","default":50,"title":"Limit"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AdminProfilesListResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"post":{"tags":["internal","Admin - Admin Profiles"],"summary":"Create Admin Profile","description":"Create a new admin profile with logo upload.\n\nValidates that:\n- Company exists in the companies collection\n- Company does NOT have a verified claim already\n- Company does NOT already have an admin profile","operationId":"create_admin_profile_admin_admin_profiles_post","requestBody":{"required":true,"content":{"multipart/form-data":{"schema":{"$ref":"#/components/schemas/Body_create_admin_profile_admin_admin_profiles_post"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreateAdminProfileResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/admin/admin-profiles/search-companies":{"get":{"tags":["internal","Admin - Admin Profiles"],"summary":"Search Companies For Admin Profile","description":"Search for companies that can have an admin profile created.\n\nReturns companies matching the query with flags indicating if they\nalready have a claim or admin profile.","operationId":"search_companies_for_admin_profile_admin_admin_profiles_search_companies_get","parameters":[{"name":"q","in":"query","required":true,"schema":{"type":"string","title":"Q"}},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","default":10,"title":"Limit"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/app__routers__admin__admin_profiles__CompanySearchResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/admin/admin-profiles/{cvr}":{"get":{"tags":["internal","Admin - Admin Profiles"],"summary":"Get Admin Profile","description":"Get a single admin profile by CVR.","operationId":"get_admin_profile_admin_admin_profiles__cvr__get","parameters":[{"name":"cvr","in":"path","required":true,"schema":{"type":"string","title":"Cvr"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AdminProfileResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"delete":{"tags":["internal","Admin - Admin Profiles"],"summary":"Delete Admin Profile","description":"Delete an admin profile and its logo from R2.","operationId":"delete_admin_profile_admin_admin_profiles__cvr__delete","parameters":[{"name":"cvr","in":"path","required":true,"schema":{"type":"string","title":"Cvr"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/admin/financials/bug-definitions":{"get":{"tags":["internal","Admin - Financials"],"summary":"Get Bug Definitions","description":"Return all known filing bug definitions.","operationId":"get_bug_definitions_admin_financials_bug_definitions_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/admin/financials":{"get":{"tags":["internal","Admin - Financials"],"summary":"Get Financials","description":"Get financial statements for a given CVR number.","operationId":"get_financials_admin_financials_get","parameters":[{"name":"cvr","in":"query","required":true,"schema":{"type":"string","description":"CVR number to look up","title":"Cvr"},"description":"CVR number to look up"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/admin/financials/{announcement_id}/bugs":{"put":{"tags":["internal","Admin - Financials"],"summary":"Update Bugs","description":"Update the bugs array on a financial statement and mark it for reprocessing.","operationId":"update_bugs_admin_financials__announcement_id__bugs_put","parameters":[{"name":"announcement_id","in":"path","required":true,"schema":{"type":"string","title":"Announcement Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UpdateBugsRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/admin/oauth2-clients":{"get":{"tags":["internal","Admin - OAuth2 Clients"],"summary":"Admin List Clients","description":"List all OAuth2 clients.","operationId":"admin_list_clients_admin_oauth2_clients_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"additionalProperties":true,"type":"object","title":"Response Admin List Clients Admin Oauth2 Clients Get"}}}}}},"post":{"tags":["internal","Admin - OAuth2 Clients"],"summary":"Admin Create Client","description":"Create a new OAuth2 client. The secret is shown only once.","operationId":"admin_create_client_admin_oauth2_clients_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/OAuth2ClientCreate"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/OAuth2ClientWithSecret"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/admin/oauth2-clients/{client_id}":{"put":{"tags":["internal","Admin - OAuth2 Clients"],"summary":"Admin Update Client","description":"Update an OAuth2 client.","operationId":"admin_update_client_admin_oauth2_clients__client_id__put","parameters":[{"name":"client_id","in":"path","required":true,"schema":{"type":"string","title":"Client Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/OAuth2ClientUpdate"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/OAuth2ClientResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"delete":{"tags":["internal","Admin - OAuth2 Clients"],"summary":"Admin Delete Client","description":"Deactivate an OAuth2 client and revoke all its tokens.","operationId":"admin_delete_client_admin_oauth2_clients__client_id__delete","parameters":[{"name":"client_id","in":"path","required":true,"schema":{"type":"string","title":"Client Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Admin Delete Client Admin Oauth2 Clients  Client Id  Delete"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/admin/companies/{cvr}/privacy-override":{"post":{"tags":["internal","Admin - Privacy"],"summary":"Set Company Privacy Override","description":"Toggle privacy override for a company. Activating requires a reason.","operationId":"set_company_privacy_override_admin_companies__cvr__privacy_override_post","parameters":[{"name":"cvr","in":"path","required":true,"schema":{"type":"string","title":"Cvr"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PrivacyOverrideRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"get":{"tags":["internal","Admin - Privacy"],"summary":"Get Company Privacy Override","description":"Get current override state + audit log for a company.","operationId":"get_company_privacy_override_admin_companies__cvr__privacy_override_get","parameters":[{"name":"cvr","in":"path","required":true,"schema":{"type":"string","title":"Cvr"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PrivacyOverrideStatus"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/admin/privacy/context/{cvr}":{"get":{"tags":["internal","Admin - Privacy"],"summary":"Get Privacy Context","description":"Unified lookup: return the company and all its participants with enough\ncontext (names, current addresses, override status) for an admin to decide\nwhere to apply the override.","operationId":"get_privacy_context_admin_privacy_context__cvr__get","parameters":[{"name":"cvr","in":"path","required":true,"schema":{"type":"string","title":"Cvr"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PrivacyContextResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/admin/participants/{unit_number}/privacy-override":{"post":{"tags":["internal","Admin - Privacy"],"summary":"Set Participant Privacy Override","description":"Toggle privacy override for a participant. Activating requires a reason.","operationId":"set_participant_privacy_override_admin_participants__unit_number__privacy_override_post","parameters":[{"name":"unit_number","in":"path","required":true,"schema":{"type":"integer","title":"Unit Number"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PrivacyOverrideRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"get":{"tags":["internal","Admin - Privacy"],"summary":"Get Participant Privacy Override","description":"Get current override state + audit log for a participant.","operationId":"get_participant_privacy_override_admin_participants__unit_number__privacy_override_get","parameters":[{"name":"unit_number","in":"path","required":true,"schema":{"type":"integer","title":"Unit Number"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PrivacyOverrideStatus"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/admin/mcp-analytics":{"get":{"tags":["internal","Admin - MCP Analytics"],"summary":"Mcp Analytics","description":"MCP tool-call analytics for the admin dashboard.\n\nReturns:\n  * window: {days, from, to}\n  * tools[]: per-tool totals + daily series + tier split + unique users\n  * totals: sum across tools for quick top-line numbers","operationId":"mcp_analytics_admin_mcp_analytics_get","parameters":[{"name":"days","in":"query","required":false,"schema":{"type":"integer","maximum":100,"minimum":1,"default":30,"title":"Days"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/admin/news/recent-matches":{"get":{"tags":["internal","Admin - News"],"summary":"Recent News Matches","description":"Recent articles by match_status for precision review.","operationId":"recent_news_matches_admin_news_recent_matches_get","parameters":[{"name":"status","in":"query","required":false,"schema":{"type":"string","default":"matched","title":"Status"}},{"name":"kind","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Kind"}},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","default":100,"title":"Limit"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/admin/news/unmapped-publishers":{"get":{"tags":["internal","Admin - News"],"summary":"Unmapped Publishers","description":"Ritzau nyhedsrum without a CVR mapping, busiest first.","operationId":"unmapped_publishers_admin_news_unmapped_publishers_get","parameters":[{"name":"limit","in":"query","required":false,"schema":{"type":"integer","default":200,"title":"Limit"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/admin/news/publishers/{publisher_id}/map":{"post":{"tags":["internal","Admin - News"],"summary":"Map Publisher","description":"Manually map (or unmap) a Ritzau nyhedsrum to a CVR.","operationId":"map_publisher_admin_news_publishers__publisher_id__map_post","parameters":[{"name":"publisher_id","in":"path","required":true,"schema":{"type":"integer","title":"Publisher Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PublisherMapRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/admin/news/aliases":{"get":{"tags":["internal","Admin - News"],"summary":"List Aliases","description":"Curated term -> CVR aliases (the reverse of the blocklist).","operationId":"list_aliases_admin_news_aliases_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}},"post":{"tags":["internal","Admin - News"],"summary":"Add Alias","description":"Map a news-text term to a CVR (\"Google\" -> Google Denmark ApS).\n\nAliased terms match deterministically (confidence 1.0), taking\nprecedence over the name index, the blocklist and the LLM queue.\nStored articles mentioning the term are re-matched immediately, so\nexisting coverage (including prior false positives on the term) is\nre-attributed in the same call.","operationId":"add_alias_admin_news_aliases_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AliasAddRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/admin/news/aliases/{name_norm}":{"delete":{"tags":["internal","Admin - News"],"summary":"Delete Alias","description":"Remove an alias and re-match articles mentioning the term under the\nnormal pipeline (index + LLM).","operationId":"delete_alias_admin_news_aliases__name_norm__delete","parameters":[{"name":"name_norm","in":"path","required":true,"schema":{"type":"string","title":"Name Norm"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/admin/news/blocklist":{"post":{"tags":["internal","Admin - News"],"summary":"Add To Blocklist","description":"Add a generic name to the matching blocklist (no deploy needed).","operationId":"add_to_blocklist_admin_news_blocklist_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/BlocklistAddRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/admin/news/articles/{article_id}/reject":{"post":{"tags":["internal","Admin - News"],"summary":"Reject Article Match","description":"Kill a false-positive match: article -> rejected, matches moved to\nrejected_candidates (manual review reason).","operationId":"reject_article_match_admin_news_articles__article_id__reject_post","parameters":[{"name":"article_id","in":"path","required":true,"schema":{"type":"string","title":"Article Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/admin/partners/codes":{"get":{"tags":["internal","Admin - Partners"],"summary":"List Partner Codes","description":"All partner codes with per-code counts of orgs signed up through them.","operationId":"list_partner_codes_admin_partners_codes_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}},"post":{"tags":["internal","Admin - Partners"],"summary":"Create Partner Code","description":"Create a partner code. Fails if the code already exists (reactivate\nor pick another instead of silently overwriting an arrangement).","operationId":"create_partner_code_admin_partners_codes_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PartnerCodeCreate"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/admin/partners/codes/{code}":{"patch":{"tags":["internal","Admin - Partners"],"summary":"Toggle Partner Code","description":"Activate/deactivate a code. Deactivation only affects future signups.","operationId":"toggle_partner_code_admin_partners_codes__code__patch","parameters":[{"name":"code","in":"path","required":true,"schema":{"type":"string","title":"Code"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PartnerCodeToggle"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/reports/municipalities":{"get":{"tags":["internal"],"summary":"List Municipality Reports","description":"List all municipalities with their latest report summary.","operationId":"list_municipality_reports_v1_reports_municipalities_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"region_code","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Filter by region code","title":"Region Code"},"description":"Filter by region code"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/app__routers__reports__MunicipalityListResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/reports/municipalities/{code}":{"get":{"tags":["internal"],"summary":"Get Municipality Report","description":"Get municipality report with optional historical data for trends.","operationId":"get_municipality_report_v1_reports_municipalities__code__get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"code","in":"path","required":true,"schema":{"type":"string","title":"Code"}},{"name":"period","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Specific period (YYYY-MM-DD)","title":"Period"},"description":"Specific period (YYYY-MM-DD)"},{"name":"include_history","in":"query","required":false,"schema":{"type":"boolean","description":"Include historical data for charts","default":true,"title":"Include History"},"description":"Include historical data for charts"},{"name":"history_periods","in":"query","required":false,"schema":{"type":"integer","maximum":36,"minimum":1,"description":"Number of historical data points","default":12,"title":"History Periods"},"description":"Number of historical data points"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/MunicipalityReportResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/reports/municipalities/{code}/divisions":{"get":{"tags":["internal"],"summary":"List Municipality Divisions","description":"Industry categories (2-digit divisions) with 3+ active companies in a municipality, largest first.","operationId":"list_municipality_divisions_v1_reports_municipalities__code__divisions_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"code","in":"path","required":true,"schema":{"type":"string","title":"Code"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/MunicipalityDivisionListResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/reports/municipalities/{code}/divisions/{division}":{"get":{"tags":["internal"],"summary":"Get Municipality Division Report","description":"Precomputed statistics for one municipality x industry category (2-digit division).","operationId":"get_municipality_division_report_v1_reports_municipalities__code__divisions__division__get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"code","in":"path","required":true,"schema":{"type":"string","title":"Code"}},{"name":"division","in":"path","required":true,"schema":{"type":"string","title":"Division"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/MunicipalityDivisionReportResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/reports/trades":{"get":{"tags":["internal"],"summary":"List Trades","description":"Every curated trade with its industry codes.","operationId":"list_trades_v1_reports_trades_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/TradeListResponse"}}}}},"security":[{"HTTPBearer":[]}]}},"/v1/reports/municipalities/{code}/trades":{"get":{"tags":["internal"],"summary":"List Municipality Trades","description":"Trades with 3+ active companies in a municipality, largest first.","operationId":"list_municipality_trades_v1_reports_municipalities__code__trades_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"code","in":"path","required":true,"schema":{"type":"string","title":"Code"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/MunicipalityTradeListResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/reports/municipalities/{code}/trades/{trade_slug}":{"get":{"tags":["internal"],"summary":"Get Trade Municipality Report","description":"Precomputed statistics and the largest companies for one trade in one municipality.","operationId":"get_trade_municipality_report_v1_reports_municipalities__code__trades__trade_slug__get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"code","in":"path","required":true,"schema":{"type":"string","title":"Code"}},{"name":"trade_slug","in":"path","required":true,"schema":{"type":"string","title":"Trade Slug"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/TradeMunicipalityReportResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/reports/postal-codes":{"get":{"tags":["internal"],"summary":"List Postal Code Reports","description":"List all postal codes with their latest report summary.","operationId":"list_postal_code_reports_v1_reports_postal_codes_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"municipality_code","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Filter by municipality code","title":"Municipality Code"},"description":"Filter by municipality code"},{"name":"min_companies","in":"query","required":false,"schema":{"type":"integer","maximum":1000,"minimum":0,"description":"Minimum active companies to include","default":5,"title":"Min Companies"},"description":"Minimum active companies to include"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/app__routers__reports__PostalCodeListResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/reports/postal-codes/{code}":{"get":{"tags":["internal"],"summary":"Get Postal Code Report","description":"Get postal code report with optional historical data for trends.","operationId":"get_postal_code_report_v1_reports_postal_codes__code__get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"code","in":"path","required":true,"schema":{"type":"string","title":"Code"}},{"name":"period","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Specific period (YYYY-MM-DD)","title":"Period"},"description":"Specific period (YYYY-MM-DD)"},{"name":"include_history","in":"query","required":false,"schema":{"type":"boolean","description":"Include historical data for charts","default":true,"title":"Include History"},"description":"Include historical data for charts"},{"name":"history_periods","in":"query","required":false,"schema":{"type":"integer","maximum":36,"minimum":1,"description":"Number of historical data points","default":12,"title":"History Periods"},"description":"Number of historical data points"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PostalCodeReportResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/reports/industries":{"get":{"tags":["internal"],"summary":"List Industry Benchmarks","description":"List all industries with their latest benchmark summary.","operationId":"list_industry_benchmarks_v1_reports_industries_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"division","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Filter by division (first 2 digits of code)","title":"Division"},"description":"Filter by division (first 2 digits of code)"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/app__routers__reports__IndustryListResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/reports/industries/{code}":{"get":{"tags":["internal"],"summary":"Get Industry Benchmark","description":"Get industry benchmark with optional historical data.","operationId":"get_industry_benchmark_v1_reports_industries__code__get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"code","in":"path","required":true,"schema":{"type":"string","title":"Code"}},{"name":"period","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Specific period (YYYY-MM-DD)","title":"Period"},"description":"Specific period (YYYY-MM-DD)"},{"name":"include_history","in":"query","required":false,"schema":{"type":"boolean","description":"Include historical data for charts","default":true,"title":"Include History"},"description":"Include historical data for charts"},{"name":"history_periods","in":"query","required":false,"schema":{"type":"integer","maximum":36,"minimum":1,"description":"Number of historical data points","default":12,"title":"History Periods"},"description":"Number of historical data points"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/IndustryBenchmarkResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/reports/industries/{code}/info":{"get":{"tags":["internal"],"summary":"Get Industry Info","description":"Get basic industry information (code, name, company counts) without benchmark data.\n\nUse this endpoint to check if an industry code is valid and get its name,\neven if benchmarks haven't been generated yet.","operationId":"get_industry_info_v1_reports_industries__code__info_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"code","in":"path","required":true,"schema":{"type":"string","title":"Code"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/IndustryInfo"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/reports/divisions":{"get":{"tags":["internal"],"summary":"List Division Benchmarks","description":"List all industry divisions (2-digit codes) with their latest benchmark summary.","operationId":"list_division_benchmarks_v1_reports_divisions_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DivisionListResponse"}}}}},"security":[{"HTTPBearer":[]}]}},"/v1/reports/divisions/{code}":{"get":{"tags":["internal"],"summary":"Get Division Benchmark","description":"Get division benchmark with child industries and optional historical data.","operationId":"get_division_benchmark_v1_reports_divisions__code__get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"code","in":"path","required":true,"schema":{"type":"string","title":"Code"}},{"name":"period","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Specific period (YYYY-MM-DD)","title":"Period"},"description":"Specific period (YYYY-MM-DD)"},{"name":"include_history","in":"query","required":false,"schema":{"type":"boolean","description":"Include historical data for charts","default":true,"title":"Include History"},"description":"Include historical data for charts"},{"name":"history_periods","in":"query","required":false,"schema":{"type":"integer","maximum":36,"minimum":1,"description":"Number of historical data points","default":12,"title":"History Periods"},"description":"Number of historical data points"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DivisionBenchmarkResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/reports/industry-groups":{"get":{"tags":["internal"],"summary":"List Industry Groups","description":"Curated sectors (byggebranchen, it-branchen, ...) that have a precomputed aggregate, largest first.","operationId":"list_industry_groups_v1_reports_industry_groups_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/IndustryGroupListResponse"}}}}},"security":[{"HTTPBearer":[]}]}},"/v1/reports/industry-groups/{slug}":{"get":{"tags":["internal"],"summary":"Get Industry Group Report","description":"Precomputed aggregate for one curated industry group.","operationId":"get_industry_group_report_v1_reports_industry_groups__slug__get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"slug","in":"path","required":true,"schema":{"type":"string","title":"Slug"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/IndustryGroupReportResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/reports/countries":{"get":{"tags":["internal"],"summary":"List Country Reports","description":"List all countries with their latest foreign ownership summary.","operationId":"list_country_reports_v1_reports_countries_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"sort_by","in":"query","required":false,"schema":{"type":"string","description":"Sort by: ownership_value, participants, companies","default":"ownership_value","title":"Sort By"},"description":"Sort by: ownership_value, participants, companies"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CountryListResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/reports/top-companies":{"get":{"tags":["internal"],"summary":"Get Top Companies Report","description":"Get the Danmarks største virksomheder report (top 100 by revenue).","operationId":"get_top_companies_report_v1_reports_top_companies_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/TopCompaniesReport"}}}}},"security":[{"HTTPBearer":[]}]}},"/v1/reports/top-companies/export":{"get":{"tags":["internal"],"summary":"/reports/top-companies/export","description":"Download the Danmarks største virksomheder list (top 100 by revenue) as\nan Excel workbook.\n\nFree-account gate: any logged-in user, Basic included. The same data is\npublic on /top-companies; the download is the conversion mechanic on the\n/danmarks-stoerste page, not a data restriction.","operationId":"export_top_companies_excel_v1_reports_top_companies_export_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"lang","in":"query","required":false,"schema":{"type":"string","description":"Column-header language: da or en","default":"da","title":"Lang"},"description":"Column-header language: da or en"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/reports/countries/{code}":{"get":{"tags":["internal"],"summary":"Get Country Report","description":"Get country report with optional historical data for trends.","operationId":"get_country_report_v1_reports_countries__code__get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"code","in":"path","required":true,"schema":{"type":"string","title":"Code"}},{"name":"period","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Specific period (YYYY-MM-DD)","title":"Period"},"description":"Specific period (YYYY-MM-DD)"},{"name":"include_history","in":"query","required":false,"schema":{"type":"boolean","description":"Include historical data for charts","default":true,"title":"Include History"},"description":"Include historical data for charts"},{"name":"history_periods","in":"query","required":false,"schema":{"type":"integer","maximum":36,"minimum":1,"description":"Number of historical data points","default":12,"title":"History Periods"},"description":"Number of historical data points"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CountryReportResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/reports/toplists/groups":{"get":{"tags":["internal"],"summary":"Get Toplist Groups","description":"Curated industry groups with a toplist scope (industry_groups.json\norder) and the metrics that have a generated list for each. Alias\ngroups (a group identical to one division) carry the division path to\nredirect to and an empty metrics list.","operationId":"get_toplist_groups_v1_reports_toplists_groups_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ToplistGroupsResponse"}}}}},"security":[{"HTTPBearer":[]}]}},"/v1/reports/toplists/{metric}/scopes":{"get":{"tags":["internal"],"summary":"Get Toplist Scopes","description":"Municipality or division scopes with a generated list for this metric.\n\nLivestock and growth lists only exist for scopes above a size floor, so\nthe frontend builds its link grids from this instead of the full\nmunicipality and division lists.","operationId":"get_toplist_scopes_v1_reports_toplists__metric__scopes_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"metric","in":"path","required":true,"schema":{"type":"string","title":"Metric"}},{"name":"scope_type","in":"query","required":false,"schema":{"enum":["municipality","division"],"type":"string","description":"Which scoped lists to enumerate","default":"municipality","title":"Scope Type"},"description":"Which scoped lists to enumerate"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ToplistScopesResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/reports/toplists/{metric}":{"get":{"tags":["internal"],"summary":"Get Toplist","description":"Top-100 company list for a metric, optionally scoped to a municipality,\nan industry division or a curated industry group.\n\nServed from the nightly-precomputed `toplists` collection; falls back to\na live query only when the combination has not been generated yet\n(e.g. right after deploy, before the first generation run). Growth lists\nand alias groups are never computed live: without a doc they are 404.","operationId":"get_toplist_v1_reports_toplists__metric__get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"metric","in":"path","required":true,"schema":{"type":"string","title":"Metric"}},{"name":"municipality","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Municipality code (e.g. 101)","title":"Municipality"},"description":"Municipality code (e.g. 101)"},{"name":"division","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Industry division code (2 digits, e.g. 62)","title":"Division"},"description":"Industry division code (2 digits, e.g. 62)"},{"name":"group","in":"query","required":false,"schema":{"anyOf":[{"type":"string","pattern":"^[a-z][a-z0-9-]{1,40}$"},{"type":"null"}],"description":"Curated industry group slug (e.g. banker), see /toplists/groups","title":"Group"},"description":"Curated industry group slug (e.g. banker), see /toplists/groups"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ToplistResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/reports/statistics":{"get":{"tags":["internal"],"summary":"List Press Statistics","operationId":"list_press_statistics_v1_reports_statistics_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"locale","in":"query","required":false,"schema":{"enum":["da","en"],"type":"string","default":"da","title":"Locale"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/reports/statistics/{slug}":{"get":{"tags":["internal"],"summary":"Get Press Dataset","operationId":"get_press_dataset_v1_reports_statistics__slug__get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"slug","in":"path","required":true,"schema":{"type":"string","title":"Slug"}},{"name":"revision","in":"query","required":false,"schema":{"anyOf":[{"type":"string","pattern":"^[a-f0-9]{24}$"},{"type":"null"}],"title":"Revision"}},{"name":"locale","in":"query","required":false,"schema":{"enum":["da","en"],"type":"string","default":"da","title":"Locale"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/reports/statistics/{slug}/download":{"get":{"tags":["internal"],"summary":"Download Press Dataset","operationId":"download_press_dataset_v1_reports_statistics__slug__download_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"slug","in":"path","required":true,"schema":{"type":"string","title":"Slug"}},{"name":"format","in":"query","required":false,"schema":{"enum":["csv","xlsx","png"],"type":"string","default":"csv","title":"Format"}},{"name":"revision","in":"query","required":false,"schema":{"anyOf":[{"type":"string","pattern":"^[a-f0-9]{24}$"},{"type":"null"}],"title":"Revision"}},{"name":"locale","in":"query","required":false,"schema":{"enum":["da","en"],"type":"string","default":"da","title":"Locale"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/reports/eurostat/business-dynamics":{"get":{"tags":["internal"],"summary":"Business Dynamics","description":"Quarterly bankruptcy and registration indices (2021 = 100), Denmark next to the EU.","operationId":"business_dynamics_v1_reports_eurostat_business_dynamics_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/BusinessDynamicsResponse"}}}}},"security":[{"HTTPBearer":[]}]}},"/v1/reports/eurostat/business-demography":{"get":{"tags":["internal"],"summary":"Business Demography","description":"Birth, death and 3-year survival rates of enterprises, Denmark next to the EU.","operationId":"business_demography_v1_reports_eurostat_business_demography_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/BusinessDemographyResponse"}}}}},"security":[{"HTTPBearer":[]}]}},"/v1/reports/eurostat/foreign-control/{country_code}":{"get":{"tags":["internal"],"summary":"Foreign Control","description":"Enterprises in Denmark controlled from one country (ISO 3166 alpha-2).","operationId":"foreign_control_v1_reports_eurostat_foreign_control__country_code__get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"country_code","in":"path","required":true,"schema":{"type":"string","title":"Country Code"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ForeignControlResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/reports/bankruptcies":{"get":{"tags":["internal"],"summary":"/reports/bankruptcies","description":"Bankruptcy decrees published in Statstidende for companies with a CVR number.\n\nDecrees later revoked (Ophaevelse af konkursdekret) are excluded. Sorted by\npublication date, newest first.","operationId":"get_bankruptcies_v1_reports_bankruptcies_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"date_from","in":"query","required":false,"schema":{"anyOf":[{"type":"string","pattern":"^\\d{4}-\\d{2}-\\d{2}$"},{"type":"null"}],"description":"Publication date from (YYYY-MM-DD)","title":"Date From"},"description":"Publication date from (YYYY-MM-DD)"},{"name":"date_to","in":"query","required":false,"schema":{"anyOf":[{"type":"string","pattern":"^\\d{4}-\\d{2}-\\d{2}$"},{"type":"null"}],"description":"Publication date to (YYYY-MM-DD)","title":"Date To"},"description":"Publication date to (YYYY-MM-DD)"},{"name":"municipality_code","in":"query","required":false,"schema":{"anyOf":[{"type":"string","pattern":"^0*[1-9]\\d{0,3}$"},{"type":"null"}],"description":"Municipality code, leading zeros ignored","title":"Municipality Code"},"description":"Municipality code, leading zeros ignored"},{"name":"division","in":"query","required":false,"schema":{"anyOf":[{"type":"string","pattern":"^\\d{2}$"},{"type":"null"}],"description":"2-digit industry division","title":"Division"},"description":"2-digit industry division"},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":200,"minimum":1,"default":50,"title":"Limit"}},{"name":"offset","in":"query","required":false,"schema":{"type":"integer","minimum":0,"default":0,"title":"Offset"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/BankruptcyListResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/reports/bankruptcies/timeline":{"get":{"tags":["internal"],"summary":"/reports/bankruptcies/timeline","description":"Bankruptcy decrees per day or per week over a window, zero-filled.\n\nEvery date in the window is represented, so days without a Statstidende\npublication count as zero rather than dropping out. The same rows as the\nlist endpoint: revoked decrees and person-only notices are excluded.","operationId":"get_bankruptcy_timeline_v1_reports_bankruptcies_timeline_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"date_from","in":"query","required":false,"schema":{"anyOf":[{"type":"string","pattern":"^\\d{4}-\\d{2}-\\d{2}$"},{"type":"null"}],"description":"Publication date from (YYYY-MM-DD), default 30 days ago","title":"Date From"},"description":"Publication date from (YYYY-MM-DD), default 30 days ago"},{"name":"date_to","in":"query","required":false,"schema":{"anyOf":[{"type":"string","pattern":"^\\d{4}-\\d{2}-\\d{2}$"},{"type":"null"}],"description":"Publication date to (YYYY-MM-DD), default today","title":"Date To"},"description":"Publication date to (YYYY-MM-DD), default today"},{"name":"municipality_code","in":"query","required":false,"schema":{"anyOf":[{"type":"string","pattern":"^0*[1-9]\\d{0,3}$"},{"type":"null"}],"description":"Municipality code, leading zeros ignored","title":"Municipality Code"},"description":"Municipality code, leading zeros ignored"},{"name":"division","in":"query","required":false,"schema":{"anyOf":[{"type":"string","pattern":"^\\d{2}$"},{"type":"null"}],"description":"2-digit industry division","title":"Division"},"description":"2-digit industry division"},{"name":"bucket","in":"query","required":false,"schema":{"type":"string","description":"day or week (Monday to Sunday)","default":"day","title":"Bucket"},"description":"day or week (Monday to Sunday)"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/BankruptcyTimelineResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/reports/bankruptcies/summary":{"get":{"tags":["internal"],"summary":"/reports/bankruptcies/summary","description":"Counts of bankruptcy decrees today, this week, this month and this year,\nplus totals per municipality and per industry division.","operationId":"get_bankruptcy_summary_v1_reports_bankruptcies_summary_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/BankruptcySummaryResponse"}}}}},"security":[{"HTTPBearer":[]}]}},"/v1/news/latest":{"get":{"tags":["internal"],"summary":"/news/latest","description":"Latest news & press coverage matched to Danish companies, most recent\nfirst. Duplicate headlines (syndicated stories) are collapsed and a\nsingle company appears at most a few times per page.","operationId":"latest_news_v1_news_latest_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":100,"minimum":1,"description":"Number of results","default":30,"title":"Limit"},"description":"Number of results"},{"name":"kind","in":"query","required":false,"schema":{"anyOf":[{"type":"string","pattern":"^(press_release|media_mention)$"},{"type":"null"}],"title":"Kind"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/LatestNewsResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/stocks":{"get":{"tags":["internal"],"summary":"/stocks","description":"Latest share prices for all OMX Copenhagen-listed companies.\n\nOne row per company (primary share class): latest close plus 1-day and\n1-year percentage changes. Prices refresh on trading days after close.","operationId":"stock_overview_v1_stocks_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/StockOverviewResponse"}}}}},"security":[{"HTTPBearer":[]}]}},"/v1/games/hq":{"get":{"tags":["internal"],"summary":"/games/hq","description":"Ten rounds for the headquarters-guessing game, answers included\n(pre-leaderboard flow). Prefer POST /hq/sessions for server-scored play.","operationId":"hq_game_v1_games_hq_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"mode","in":"query","required":false,"schema":{"type":"string","pattern":"^(daily|random)$","default":"daily","title":"Mode"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HqGameResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/games/hq/results":{"post":{"tags":["internal"],"summary":"/games/hq/results","description":"Log an anonymous client-scored daily game and return today's aggregate\nstats. Points are recomputed from the logged distances so casual\ntampering doesn't skew the percentile. Session play logs automatically —\nthis endpoint serves already-cached clients.","operationId":"log_hq_result_v1_games_hq_results_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/HqResultLog"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HqDailyStats"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]}]}},"/v1/games/hq/sessions":{"post":{"tags":["internal"],"summary":"/games/hq/sessions","description":"Start a server-scored game. Rounds come WITHOUT coordinates; submit each\nguess to /hq/sessions/{id}/guess to score and reveal. Sessions expire\nafter two days.","operationId":"create_hq_session_v1_games_hq_sessions_post","security":[{"HTTPBearer":[]}],"parameters":[{"name":"mode","in":"query","required":false,"schema":{"type":"string","pattern":"^(daily|random)$","default":"daily","title":"Mode"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HqSessionResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/games/hq/sessions/{session_id}/guess":{"post":{"tags":["internal"],"summary":"/games/hq/sessions/{id}/guess","description":"Score the next round of a session and reveal the actual location.","operationId":"submit_hq_guess_v1_games_hq_sessions__session_id__guess_post","security":[{"HTTPBearer":[]}],"parameters":[{"name":"session_id","in":"path","required":true,"schema":{"type":"string","title":"Session Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/HqGuessRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HqGuessResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/games/hq/sessions/{session_id}/claim":{"post":{"tags":["internal"],"summary":"/games/hq/sessions/{id}/claim","description":"Put a display name on a completed daily session's leaderboard entry.","operationId":"claim_hq_leaderboard_spot_v1_games_hq_sessions__session_id__claim_post","security":[{"HTTPBearer":[]}],"parameters":[{"name":"session_id","in":"path","required":true,"schema":{"type":"string","title":"Session Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/HqClaimRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HqClaimResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/games/hq/leaderboard":{"get":{"tags":["internal"],"summary":"/games/hq/leaderboard","description":"Today's named leaderboard (top 25) plus the total play count.","operationId":"hq_leaderboard_v1_games_hq_leaderboard_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HqLeaderboardResponse"}}}}},"security":[{"HTTPBearer":[]}]}},"/v1/games/revenue-duel":{"get":{"tags":["internal"],"summary":"/games/revenue-duel","description":"Shuffled pool for the higher/lower revenue game: every OMX-listed company\nwith a known latest revenue. The client runs the endless duel locally.","operationId":"revenue_duel_v1_games_revenue_duel_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/RevenueDuelResponse"}}}}},"security":[{"HTTPBearer":[]}]}},"/v1/fokus/board":{"get":{"tags":["internal"],"summary":"Get Fokus Board","description":"The live rolling leaderboard (top of the board holds the frontpage\nslots). Entries are real payments only — empty slots are rendered as\nopen slots by the frontend, never faked.","operationId":"get_fokus_board_v1_fokus_board_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/FokusBoardResponse"}}}}}}},"/v1/fokus/archive":{"get":{"tags":["internal"],"summary":"Get Fokus Archive","description":"Past months' Gold/Silver/Bronze podiums, newest first. Computed\nretroactively from the bid log; cached briefly in-process.","operationId":"get_fokus_archive_v1_fokus_archive_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/FokusArchiveResponse"}}}}}}},"/v1/fokus/company/{cvr}":{"get":{"tags":["internal"],"summary":"Get Fokus Company","description":"A company's auction presence: current standing + past podium\nfinishes. Used by the company page (medal + far-down section).","operationId":"get_fokus_company_v1_fokus_company__cvr__get","parameters":[{"name":"cvr","in":"path","required":true,"schema":{"type":"string","title":"Cvr"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/FokusCompanyResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/fokus/impressions":{"post":{"tags":["internal"],"summary":"Record Placement Events","description":"Beacon from the frontend: a placement rendered or was clicked. Public\nand unauthenticated (it carries no identifiers), so it is validated\ntightly and capped per request. Counts are raw.","operationId":"record_placement_events_v1_fokus_impressions_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PlacementEventsRequest"}}},"required":true},"responses":{"204":{"description":"Successful Response"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/fokus/confirm":{"post":{"tags":["internal"],"summary":"Confirm Fokus Payment","description":"Instant placement on the Stripe return leg: verify the checkout\nsession server-side and record the bid without waiting for the webhook.\nIdempotent with the webhook (record_bid dedupes on the session id) -\nwhichever lands first wins, the other is a no-op.","operationId":"confirm_fokus_payment_v1_fokus_confirm_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/FokusConfirmRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/lists":{"get":{"tags":["internal"],"summary":"/lists","description":"Get all lists for the current user.","operationId":"get_lists_v1_lists_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ListsResponse"}}}}},"security":[{"HTTPBearer":[]}]},"post":{"tags":["internal"],"summary":"/lists","description":"Create a new list.","operationId":"create_new_list_v1_lists_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreateListRequest"}}},"required":true},"responses":{"201":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SingleListResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]}]}},"/v1/lists/shared/{slug}":{"get":{"tags":["internal"],"summary":"/lists/shared/{slug}","description":"Get a public list by its share slug. No authentication required.","operationId":"get_shared_list_v1_lists_shared__slug__get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"slug","in":"path","required":true,"schema":{"type":"string","title":"Slug"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SingleListResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/lists/containing/{cvr}":{"get":{"tags":["internal"],"summary":"/lists/containing/{cvr}","description":"Get all lists that contain a specific company.","operationId":"get_lists_with_company_v1_lists_containing__cvr__get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"cvr","in":"path","required":true,"schema":{"type":"string","title":"Cvr"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/lists/{list_id}":{"get":{"tags":["internal"],"summary":"/lists/{list_id}","description":"Get a list by ID with full company details.","operationId":"get_single_list_v1_lists__list_id__get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"list_id","in":"path","required":true,"schema":{"type":"string","title":"List Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SingleListResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"put":{"tags":["internal"],"summary":"/lists/{list_id}","description":"Update a list's name, description, or settings.","operationId":"update_existing_list_v1_lists__list_id__put","security":[{"HTTPBearer":[]}],"parameters":[{"name":"list_id","in":"path","required":true,"schema":{"type":"string","title":"List Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UpdateListRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SingleListResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"delete":{"tags":["internal"],"summary":"/lists/{list_id}","description":"Delete a list.","operationId":"delete_existing_list_v1_lists__list_id__delete","security":[{"HTTPBearer":[]}],"parameters":[{"name":"list_id","in":"path","required":true,"schema":{"type":"string","title":"List Id"}}],"responses":{"204":{"description":"Successful Response"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/lists/{list_id}/companies":{"post":{"tags":["internal"],"summary":"/lists/{list_id}/companies","description":"Add a company to a list.","operationId":"add_company_v1_lists__list_id__companies_post","security":[{"HTTPBearer":[]}],"parameters":[{"name":"list_id","in":"path","required":true,"schema":{"type":"string","title":"List Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AddCompanyRequest"}}}},"responses":{"201":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/lists/{list_id}/companies/bulk":{"post":{"tags":["internal"],"summary":"/lists/{list_id}/companies/bulk","description":"Add many companies to a list at once (CVR paste / CSV import).\n\nTokens that aren't 8-digit CVR numbers are reported as invalid; CVRs not\nin the registry are reported as not_found. Both are skipped, the rest are\nadded (duplicates within the list are skipped silently).","operationId":"bulk_add_companies_v1_lists__list_id__companies_bulk_post","security":[{"HTTPBearer":[]}],"parameters":[{"name":"list_id","in":"path","required":true,"schema":{"type":"string","title":"List Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/BulkAddCompaniesRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/BulkAddCompaniesResult"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/lists/{list_id}/companies/{cvr}":{"delete":{"tags":["internal"],"summary":"/lists/{list_id}/companies/{cvr}","description":"Remove a company from a list.","operationId":"remove_company_v1_lists__list_id__companies__cvr__delete","security":[{"HTTPBearer":[]}],"parameters":[{"name":"list_id","in":"path","required":true,"schema":{"type":"string","title":"List Id"}},{"name":"cvr","in":"path","required":true,"schema":{"type":"string","title":"Cvr"}}],"responses":{"204":{"description":"Successful Response"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/lists/{list_id}/companies/{cvr}/notes":{"put":{"tags":["internal"],"summary":"/lists/{list_id}/companies/{cvr}/notes","description":"Update notes for a company in a list.","operationId":"update_notes_v1_lists__list_id__companies__cvr__notes_put","security":[{"HTTPBearer":[]}],"parameters":[{"name":"list_id","in":"path","required":true,"schema":{"type":"string","title":"List Id"}},{"name":"cvr","in":"path","required":true,"schema":{"type":"string","title":"Cvr"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UpdateCompanyNotesRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/notifications/history":{"get":{"tags":["internal"],"summary":"/notifications/history","description":"Get notification delivery history for the current user.","operationId":"get_notification_history_v1_notifications_history_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"limit","in":"query","required":false,"schema":{"type":"integer","default":50,"title":"Limit"}},{"name":"offset","in":"query","required":false,"schema":{"type":"integer","default":0,"title":"Offset"}},{"name":"event_type","in":"query","required":false,"schema":{"anyOf":[{"$ref":"#/components/schemas/EventType"},{"type":"null"}],"title":"Event Type"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeliveryHistoryResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/notifications/activity-feed":{"get":{"tags":["internal"],"summary":"/notifications/activity-feed","description":"Recent change events matching anything the user is watching.\n\nResolves the user's Watchers into a set of CVRs (explicit cvrs, plus CVRs\nmatched by rule-based or accounting-connection Watchers), then queries\nchange_events for those CVRs. Sorted newest first.","operationId":"get_activity_feed_v1_notifications_activity_feed_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"limit","in":"query","required":false,"schema":{"type":"integer","default":50,"title":"Limit"}},{"name":"offset","in":"query","required":false,"schema":{"type":"integer","default":0,"title":"Offset"}},{"name":"event_type","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Filter by event type","title":"Event Type"},"description":"Filter by event type"},{"name":"from_date","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Start date (YYYY-MM-DD)","title":"From Date"},"description":"Start date (YYYY-MM-DD)"},{"name":"to_date","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"End date (YYYY-MM-DD)","title":"To Date"},"description":"End date (YYYY-MM-DD)"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ActivityFeedResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/watch-list":{"get":{"tags":["internal"],"summary":"/watch-list","description":"List every Watcher belonging to the current user, newest first.","operationId":"list_watchers_v1_watch_list_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"items":{"$ref":"#/components/schemas/WatcherResponse"},"type":"array","title":"Response List Watchers V1 Watch List Get"}}}}},"security":[{"HTTPBearer":[]}]},"post":{"tags":["internal"],"summary":"/watch-list","description":"Create a new Watcher.\n\nExactly one of `cvrs`, `rules`, `connection_id`, `mne_numbers`, or\n`unit_numbers` (person watcher) must be set. Delivery must include at\nleast one channel (`webhook_id` and/or `email`).","operationId":"create_new_watcher_v1_watch_list_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreateWatcherRequest"}}},"required":true},"responses":{"201":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/WatcherResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]}]}},"/v1/watch-list/cvr/{cvr}":{"get":{"tags":["internal"],"summary":"/watch-list/cvr/{cvr}","description":"Hot-path check used by the company-page \"Følg\" button.\n\nThe company page probes this for every logged-in visitor. Until\n2026-09-24 it sat behind the Pro gate, so every Basic page view recorded\na \"notifications\" paywall hit and fed the nudge mails: the hit counts\nmeasured page views, not follow attempts. Any tier that may hold\nwatchers reads its own state here, and no hit is recorded.\n\nReturns `{watching: bool, watcher: Watcher | null}`. `watcher` is the\nsingle-CVR Watcher targeting this CVR (if any), or null. Multi-CVR\nWatchers (e.g. an API-managed bulk filter) count toward `watching=true`\nbut `watcher` will still be null in that case — the per-company\nedit/delete UI only operates on per-CVR Watchers.","operationId":"is_watching_cvr_v1_watch_list_cvr__cvr__get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"cvr","in":"path","required":true,"schema":{"type":"string","title":"Cvr"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/watch-list/{watcher_id}":{"get":{"tags":["internal"],"summary":"/watch-list/{watcher_id}","description":"Read a single Watcher by ID.","operationId":"read_watcher_v1_watch_list__watcher_id__get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"watcher_id","in":"path","required":true,"schema":{"type":"string","title":"Watcher Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/WatcherResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"put":{"tags":["internal"],"summary":"/watch-list/{watcher_id}","description":"Update a Watcher. Only provided fields are changed.","operationId":"update_existing_watcher_v1_watch_list__watcher_id__put","security":[{"HTTPBearer":[]}],"parameters":[{"name":"watcher_id","in":"path","required":true,"schema":{"type":"string","title":"Watcher Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UpdateWatcherRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/WatcherResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"delete":{"tags":["internal"],"summary":"/watch-list/{watcher_id}","description":"Delete a Watcher.","operationId":"remove_watcher_v1_watch_list__watcher_id__delete","security":[{"HTTPBearer":[]}],"parameters":[{"name":"watcher_id","in":"path","required":true,"schema":{"type":"string","title":"Watcher Id"}}],"responses":{"204":{"description":"Successful Response"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/watch-list/{watcher_id}/mute":{"post":{"tags":["internal"],"summary":"/watch-list/{watcher_id}/mute","description":"Mute email delivery from this Watcher for the calling member only.\n\nThe shared definition is untouched — other team members keep receiving\nalerts (shared definition, personal delivery).","operationId":"mute_watcher_v1_watch_list__watcher_id__mute_post","security":[{"HTTPBearer":[]}],"parameters":[{"name":"watcher_id","in":"path","required":true,"schema":{"type":"string","title":"Watcher Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"delete":{"tags":["internal"],"summary":"/watch-list/{watcher_id}/mute","description":"Re-enable email delivery from this Watcher for the calling member.","operationId":"unmute_watcher_v1_watch_list__watcher_id__mute_delete","security":[{"HTTPBearer":[]}],"parameters":[{"name":"watcher_id","in":"path","required":true,"schema":{"type":"string","title":"Watcher Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/watch-list/bulk/from-list":{"post":{"tags":["internal"],"summary":"/watch-list/bulk/from-list","description":"Subscribe (one Watcher per CVR) to every company in a saved list.\n\nSkips CVRs the user is already watching via an explicit-cvrs Watcher.\nReturns counts so the dashboard can show \"added X, already subscribed Y.\"","operationId":"bulk_add_from_list_v1_watch_list_bulk_from_list_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/BulkFromListRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/BulkAddResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]}]}},"/v1/watch-list/bulk/from-list/{list_id}":{"delete":{"tags":["internal"],"summary":"/watch-list/bulk/from-list/{list_id}","description":"Unsubscribe from every CVR in a saved list. Only deletes single-CVR\nWatchers — multi-CVR Watchers (e.g. an API-managed bulk filter) and\nrule/connection-based Watchers are left untouched.","operationId":"bulk_remove_from_list_v1_watch_list_bulk_from_list__list_id__delete","security":[{"HTTPBearer":[]}],"parameters":[{"name":"list_id","in":"path","required":true,"schema":{"type":"string","title":"List Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/BulkRemoveResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/webhooks/event-types":{"get":{"tags":["Webhooks"],"summary":"/webhooks/event-types","description":"List all notification event types that can appear in webhook payloads and\nbe used in `event_types` arrays on webhooks and CVR filters.\n\nEach entry includes the identifier (`value`), Danish and English labels,\nand a description of what change in the underlying CVR data triggers it.\n\nOpen to any API key — no Pro subscription required.","operationId":"list_event_types_v1_webhooks_event_types_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"items":{"$ref":"#/components/schemas/EventTypeInfo"},"type":"array","title":"Response List Event Types V1 Webhooks Event Types Get"}}}}},"security":[{"HTTPBearer":[]}]}},"/v1/webhooks":{"get":{"tags":["Webhooks"],"summary":"/webhooks","description":"List all webhooks owned by the calling API key.\n\n`meta.max_webhooks` shows your subscription tier's webhook limit.\nSecrets are not returned — they are only available at creation time.","operationId":"list_webhooks_v1_webhooks_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/WebhooksListResponse"}}}}},"security":[{"HTTPBearer":[]}]},"post":{"tags":["Webhooks"],"summary":"/webhooks","description":"Register a new webhook endpoint.\n\nThe `url` must be HTTPS and respond `2xx` within 10 seconds. After creation, set\nthe list of CVRs to monitor with `PUT /v1/webhooks/{webhook_id}/cvr-filter` to start\nreceiving events.\n\n**The `secret` field in the response is only returned here.** Store it now — it is\nused to verify the HMAC signature on every incoming delivery and cannot be retrieved later.\nA new secret can only be obtained by deleting and re-creating the webhook.\n\nReturns `403` if you have reached your subscription tier's webhook limit.","operationId":"create_new_webhook_v1_webhooks_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreateWebhookRequest"}}},"required":true},"responses":{"201":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/WebhookWithSecret"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]}]}},"/v1/webhooks/{webhook_id}":{"get":{"tags":["Webhooks"],"summary":"/webhooks/{webhook_id}","description":"Get the current configuration and health of a single webhook.\n\nUse `consecutive_failures` and `disabled_reason` to monitor delivery health.","operationId":"get_webhook_details_v1_webhooks__webhook_id__get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"webhook_id","in":"path","required":true,"schema":{"type":"string","title":"Webhook Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/WebhookResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"put":{"tags":["Webhooks"],"summary":"/webhooks/{webhook_id}","description":"Update a webhook's configuration. Only the fields you provide are changed.\n\nSetting `active: true` on an auto-disabled webhook re-enables it and resets the\nconsecutive-failure counter — fix the underlying issue first or it will be\nauto-disabled again.\n\nThe signing secret cannot be rotated through this endpoint; delete and re-create\nthe webhook if you need a new secret.","operationId":"update_webhook_settings_v1_webhooks__webhook_id__put","security":[{"HTTPBearer":[]}],"parameters":[{"name":"webhook_id","in":"path","required":true,"schema":{"type":"string","title":"Webhook Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UpdateWebhookRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/WebhookResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"delete":{"tags":["Webhooks"],"summary":"/webhooks/{webhook_id}","description":"Permanently delete a webhook. Delivery stops immediately and any pending\nretries are dropped. Any watch-list entries that targeted this webhook\nare removed too — there's no point in keeping routing rules pointing at\na vanished URL.","operationId":"remove_webhook_v1_webhooks__webhook_id__delete","security":[{"HTTPBearer":[]}],"parameters":[{"name":"webhook_id","in":"path","required":true,"schema":{"type":"string","title":"Webhook Id"}}],"responses":{"204":{"description":"Successful Response"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/webhooks/{webhook_id}/test":{"post":{"tags":["Webhooks"],"summary":"/webhooks/{webhook_id}/test","description":"Send a synthetic test event to the webhook URL. Useful for verifying your\nendpoint accepts the payload and signature before going live.\n\nThe test payload uses `event_type=company_status` with CVR `00000000` and\ncompany name `Test Company ApS`. It is signed with your webhook secret exactly\nlike a real event, and will count toward `consecutive_failures` if your endpoint\nrejects it.","operationId":"send_test_webhook_v1_webhooks__webhook_id__test_post","security":[{"HTTPBearer":[]}],"parameters":[{"name":"webhook_id","in":"path","required":true,"schema":{"type":"string","title":"Webhook Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/TestWebhookResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/webhooks/{webhook_id}/deliveries":{"get":{"tags":["Webhooks"],"summary":"/webhooks/{webhook_id}/deliveries","description":"List delivery attempts for this webhook, newest first.\n\nEach entry includes the HTTP status code returned by your endpoint, an error\nmessage if delivery failed, and timestamps. Use this to diagnose missed events\nor repeated failures. Pending entries are still being attempted (up to 3 tries).","operationId":"get_webhook_deliveries_v1_webhooks__webhook_id__deliveries_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"webhook_id","in":"path","required":true,"schema":{"type":"string","title":"Webhook Id"}},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":100,"minimum":1,"description":"Number of deliveries to return per page. Maximum 100.","default":50,"title":"Limit"},"description":"Number of deliveries to return per page. Maximum 100."},{"name":"offset","in":"query","required":false,"schema":{"type":"integer","minimum":0,"description":"Number of deliveries to skip. Use with `limit` for pagination.","default":0,"title":"Offset"},"description":"Number of deliveries to skip. Use with `limit` for pagination."}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/WebhookDeliveriesResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/webhooks/{webhook_id}/cvr-filter":{"put":{"tags":["Webhooks"],"summary":"/webhooks/{webhook_id}/cvr-filter","description":"Replace the list of CVRs that this webhook monitors (idempotent).\n\nOnce set, the webhook receives every change event for any CVR in the list, for\nthe chosen event types. To sync your portfolio, send the full current list each\ntime — the new list completely replaces the previous one.\n\n**Validation**\n- Each CVR must be exactly 8 numeric digits.\n- Maximum 50,000 CVRs per webhook.\n- Duplicates are silently de-duplicated.\n- Pass an empty `cvrs` array to keep the filter present but match nothing.\n- Omit `event_types` (or pass `null`) to subscribe to all event types.\n\nUnknown CVRs are accepted silently — you simply receive no events for them.\nThis makes it safe to send a list that may include companies that don't exist\nyet or have been deleted.\n\nReturns `400` for invalid CVRs or count above the cap, `404` if the webhook\ndoes not exist or is not owned by you.","operationId":"replace_cvr_filter_v1_webhooks__webhook_id__cvr_filter_put","security":[{"HTTPBearer":[]}],"parameters":[{"name":"webhook_id","in":"path","required":true,"schema":{"type":"string","title":"Webhook Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SetCvrFilterRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CvrFilterResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"get":{"tags":["Webhooks"],"summary":"/webhooks/{webhook_id}/cvr-filter","description":"Read the current bulk CVR filter on a webhook.\n\nReturns `404` if no filter is set on this webhook. CVRs are returned in the\norder they were originally registered (after de-duplication).","operationId":"read_cvr_filter_v1_webhooks__webhook_id__cvr_filter_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"webhook_id","in":"path","required":true,"schema":{"type":"string","title":"Webhook Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CvrFilterResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"delete":{"tags":["Webhooks"],"summary":"/webhooks/{webhook_id}/cvr-filter","description":"Remove the CVR list from a webhook. The webhook itself is unchanged —\nit simply stops receiving events until a new list is set.","operationId":"remove_cvr_filter_v1_webhooks__webhook_id__cvr_filter_delete","security":[{"HTTPBearer":[]}],"parameters":[{"name":"webhook_id","in":"path","required":true,"schema":{"type":"string","title":"Webhook Id"}}],"responses":{"204":{"description":"Successful Response"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/stats":{"get":{"tags":["internal"],"summary":"Get Public Stats","description":"Get public statistics about the company database.\n\nReturns total company counts, recent registrations, and top industries/municipalities.\nStats are pre-computed by the worker and cached in Redis for instant loading.","operationId":"get_public_stats_v1_stats_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PublicStatsResponse"}}}}}}},"/v1/trending":{"get":{"tags":["internal"],"summary":"Get Trending Companies Public","description":"Get trending companies based on recent page views.\n\nReturns companies with the highest view velocity in the last 7 days.\nResults are cached for 5 minutes.","operationId":"get_trending_companies_public_v1_trending_get","parameters":[{"name":"limit","in":"query","required":false,"schema":{"type":"integer","default":10,"title":"Limit"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/TrendingCompaniesResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/events/recent":{"get":{"tags":["internal"],"summary":"Get Recent Events","description":"Get recent change events detected by the daily CVR sync.\n\nReturns the most recent company change events with bilingual summaries\nand structured change details. Phone numbers and email addresses are\nstripped from change values for privacy.\nResults are cached for 5 minutes.","operationId":"get_recent_events_v1_events_recent_get","parameters":[{"name":"limit","in":"query","required":false,"schema":{"type":"integer","default":15,"title":"Limit"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/RecentEventsResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/events/count":{"get":{"tags":["internal"],"summary":"Get Event Count","description":"Get the count of change events for a given period.\n\nPeriods: 'today', 'week', 'month'.\nResults are cached for 5 minutes.","operationId":"get_event_count_v1_events_count_get","parameters":[{"name":"period","in":"query","required":false,"schema":{"type":"string","default":"today","title":"Period"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/EventCountResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/cds-backtest/latest":{"get":{"tags":["internal"],"summary":"Get Cds Backtest Latest","description":"Latest PUBLISHED CDS validation snapshot for the konkursanalyse page.\n\nReturns ``{\"snapshot\": null}`` if nothing has been published yet. Cached\nfor 30 minutes (snapshots only change quarterly, after a manual publish).","operationId":"get_cds_backtest_latest_v1_cds_backtest_latest_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/v1/pricing":{"get":{"tags":["internal"],"summary":"Get Public Pricing","description":"Get public pricing information.\n\nReturns active pricing tiers with prices from the active user price set.\nLimits are hardcoded as they don't change dynamically.\nAlso returns any active auto-applied promotion (no promo code required).\nNo authentication required.","operationId":"get_public_pricing_v1_pricing_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PublicPricingResponse"}}}}}}},"/v1/pricing/claims":{"get":{"tags":["internal"],"summary":"Get Claim Pricing","description":"Get claim pricing information.\n\nReturns pricing tiers for claimed company profiles from the active claim price set.\nNo authentication required.","operationId":"get_claim_pricing_v1_pricing_claims_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ClaimPricingResponse"}}}}}}},"/v1/featured-companies/by-industry/{industry_code}":{"get":{"tags":["internal"],"summary":"Get Featured Companies By Industry","description":"Featured cards for an industry page (exact 6-digit code, or a prefix).","operationId":"get_featured_companies_by_industry_v1_featured_companies_by_industry__industry_code__get","parameters":[{"name":"industry_code","in":"path","required":true,"schema":{"type":"string","title":"Industry Code"}},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","default":5,"title":"Limit"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/FeaturedCompaniesResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/featured-companies/by-municipality/{municipality_code}":{"get":{"tags":["internal"],"summary":"Get Featured Companies By Municipality","description":"Featured cards for a municipality page, or for the local strip on a\ncompany page (`exclude` = that page's own CVR).","operationId":"get_featured_companies_by_municipality_v1_featured_companies_by_municipality__municipality_code__get","parameters":[{"name":"municipality_code","in":"path","required":true,"schema":{"type":"string","title":"Municipality Code"}},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","default":5,"title":"Limit"}},{"name":"exclude","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Exclude"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/FeaturedCompaniesResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/featured-companies/by-trade/{trade_slug}/{municipality_code}":{"get":{"tags":["internal"],"summary":"Get Featured Companies By Trade","description":"Featured cards for a trade x kommune page (\"Tømrere i Aalborg\").","operationId":"get_featured_companies_by_trade_v1_featured_companies_by_trade__trade_slug___municipality_code__get","parameters":[{"name":"trade_slug","in":"path","required":true,"schema":{"type":"string","title":"Trade Slug"}},{"name":"municipality_code","in":"path","required":true,"schema":{"type":"string","title":"Municipality Code"}},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","default":6,"title":"Limit"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/FeaturedCompaniesResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/featured-companies/by-postal-code/{postal_code}":{"get":{"tags":["internal"],"summary":"Get Featured Companies By Postal Code","description":"Featured cards for a postal code page.","operationId":"get_featured_companies_by_postal_code_v1_featured_companies_by_postal_code__postal_code__get","parameters":[{"name":"postal_code","in":"path","required":true,"schema":{"type":"string","title":"Postal Code"}},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","default":6,"title":"Limit"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/FeaturedCompaniesResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/featured-companies/by-division/{division_code}":{"get":{"tags":["internal"],"summary":"Get Featured Companies By Division","description":"Featured cards for a division page (2-digit industry code).","operationId":"get_featured_companies_by_division_v1_featured_companies_by_division__division_code__get","parameters":[{"name":"division_code","in":"path","required":true,"schema":{"type":"string","title":"Division Code"}},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","default":6,"title":"Limit"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/FeaturedCompaniesResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/featured-companies":{"get":{"tags":["internal"],"summary":"Get Featured Companies","description":"Get featured companies for the front page with three-tier fallback:\n\n1. Premium (business_plus) companies - always first, guaranteed placement\n2. Other claimed profiles (free/business) - fill remaining slots\n3. Random active companies - fill any remaining slots\n\nThis ensures the list is always full, even at launch with few claimed profiles.\nPremium companies are shuffled for fair rotation among paying customers.\nResults are cached for 5 minutes.","operationId":"get_featured_companies_v1_featured_companies_get","parameters":[{"name":"limit","in":"query","required":false,"schema":{"type":"integer","default":6,"title":"Limit"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/FeaturedCompaniesResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/dawa/autocomplete":{"get":{"tags":["internal"],"summary":"/autocomplete","description":"The combined autocomplete used by dawa-autocomplete2: road name,\nthen access address, then full address, with caret positions.","operationId":"autocomplete_dawa_autocomplete_get","parameters":[{"name":"q","in":"query","required":false,"schema":{"type":"string","description":"Search text","default":"","title":"Q"},"description":"Search text"},{"name":"caretpos","in":"query","required":false,"schema":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Caretpos"}},{"name":"type","in":"query","required":false,"schema":{"type":"string","pattern":"^(vejnavn|adgangsadresse|adresse)$","default":"adresse","title":"Type"}},{"name":"startfra","in":"query","required":false,"schema":{"anyOf":[{"type":"string","pattern":"^(vejnavn|adgangsadresse|adresse)$"},{"type":"null"}],"title":"Startfra"}},{"name":"adgangsadresseid","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Adgangsadresseid"}},{"name":"id","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Id"}},{"name":"postnr","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Postnr"}},{"name":"kommunekode","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Kommunekode"}},{"name":"per_side","in":"query","required":false,"schema":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Per Side"}},{"name":"srid","in":"query","required":false,"schema":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Srid"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/dawa/adresser/autocomplete":{"get":{"tags":["internal"],"summary":"/adresser/autocomplete","operationId":"adresser_autocomplete_dawa_adresser_autocomplete_get","parameters":[{"name":"q","in":"query","required":false,"schema":{"type":"string","default":"","title":"Q"}},{"name":"postnr","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Postnr"}},{"name":"kommunekode","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Kommunekode"}},{"name":"adgangsadresseid","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Adgangsadresseid"}},{"name":"per_side","in":"query","required":false,"schema":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Per Side"}},{"name":"srid","in":"query","required":false,"schema":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Srid"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/dawa/adgangsadresser/autocomplete":{"get":{"tags":["internal"],"summary":"/adgangsadresser/autocomplete","operationId":"adgangsadresser_autocomplete_dawa_adgangsadresser_autocomplete_get","parameters":[{"name":"q","in":"query","required":false,"schema":{"type":"string","default":"","title":"Q"}},{"name":"postnr","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Postnr"}},{"name":"kommunekode","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Kommunekode"}},{"name":"per_side","in":"query","required":false,"schema":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Per Side"}},{"name":"srid","in":"query","required":false,"schema":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Srid"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/dawa/vejnavne/autocomplete":{"get":{"tags":["internal"],"summary":"/vejnavne/autocomplete","operationId":"vejnavne_autocomplete_dawa_vejnavne_autocomplete_get","parameters":[{"name":"q","in":"query","required":false,"schema":{"type":"string","default":"","title":"Q"}},{"name":"postnr","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Postnr"}},{"name":"kommunekode","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Kommunekode"}},{"name":"per_side","in":"query","required":false,"schema":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Per Side"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/dawa/vejnavne":{"get":{"tags":["internal"],"summary":"/vejnavne","operationId":"vejnavne_dawa_vejnavne_get","parameters":[{"name":"q","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Q"}},{"name":"navn","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Navn"}},{"name":"postnr","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Postnr"}},{"name":"kommunekode","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Kommunekode"}},{"name":"side","in":"query","required":false,"schema":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Side"}},{"name":"per_side","in":"query","required":false,"schema":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Per Side"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/dawa/adresser":{"get":{"tags":["internal"],"summary":"/adresser","operationId":"adresser_dawa_adresser_get","parameters":[{"name":"id","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Id"}},{"name":"q","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Q"}},{"name":"autocomplete","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Autocomplete"}},{"name":"vejnavn","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Vejnavn"}},{"name":"husnr","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Husnr"}},{"name":"etage","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Etage"}},{"name":"dør","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Dør"}},{"name":"postnr","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Postnr"}},{"name":"supplerendebynavn","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Supplerendebynavn"}},{"name":"kommunekode","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Kommunekode"}},{"name":"vejkode","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Vejkode"}},{"name":"adgangsadresseid","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Adgangsadresseid"}},{"name":"navngivenvej_id","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Navngivenvej Id"}},{"name":"status","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Status"}},{"name":"cirkel","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Cirkel"}},{"name":"polygon","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Polygon"}},{"name":"struktur","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Struktur"}},{"name":"srid","in":"query","required":false,"schema":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Srid"}},{"name":"side","in":"query","required":false,"schema":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Side"}},{"name":"per_side","in":"query","required":false,"schema":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Per Side"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/dawa/adresser/{adresse_id}":{"get":{"tags":["internal"],"summary":"/adresser/{id}","operationId":"adresse_dawa_adresser__adresse_id__get","parameters":[{"name":"adresse_id","in":"path","required":true,"schema":{"type":"string","title":"Adresse Id"}},{"name":"struktur","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Struktur"}},{"name":"srid","in":"query","required":false,"schema":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Srid"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/dawa/adgangsadresser/reverse":{"get":{"tags":["internal"],"summary":"/adgangsadresser/reverse","description":"The access address nearest to a point. One object, as DAWA served it.","operationId":"adgangsadresser_reverse_dawa_adgangsadresser_reverse_get","parameters":[{"name":"x","in":"query","required":true,"schema":{"type":"number","title":"X"}},{"name":"y","in":"query","required":true,"schema":{"type":"number","title":"Y"}},{"name":"srid","in":"query","required":false,"schema":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Srid"}},{"name":"struktur","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Struktur"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/dawa/adgangsadresser":{"get":{"tags":["internal"],"summary":"/adgangsadresser","operationId":"adgangsadresser_dawa_adgangsadresser_get","parameters":[{"name":"id","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Id"}},{"name":"q","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Q"}},{"name":"autocomplete","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Autocomplete"}},{"name":"vejnavn","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Vejnavn"}},{"name":"husnr","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Husnr"}},{"name":"postnr","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Postnr"}},{"name":"supplerendebynavn","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Supplerendebynavn"}},{"name":"kommunekode","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Kommunekode"}},{"name":"vejkode","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Vejkode"}},{"name":"navngivenvej_id","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Navngivenvej Id"}},{"name":"status","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Status"}},{"name":"cirkel","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Cirkel"}},{"name":"polygon","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Polygon"}},{"name":"struktur","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Struktur"}},{"name":"srid","in":"query","required":false,"schema":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Srid"}},{"name":"side","in":"query","required":false,"schema":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Side"}},{"name":"per_side","in":"query","required":false,"schema":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Per Side"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/dawa/adgangsadresser/{adgangsadresse_id}":{"get":{"tags":["internal"],"summary":"/adgangsadresser/{id}","operationId":"adgangsadresse_dawa_adgangsadresser__adgangsadresse_id__get","parameters":[{"name":"adgangsadresse_id","in":"path","required":true,"schema":{"type":"string","title":"Adgangsadresse Id"}},{"name":"struktur","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Struktur"}},{"name":"srid","in":"query","required":false,"schema":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Srid"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/dawa/datavask/adresser":{"get":{"tags":["internal"],"summary":"/datavask/adresser","operationId":"datavask_adresser_dawa_datavask_adresser_get","parameters":[{"name":"betegnelse","in":"query","required":true,"schema":{"type":"string","title":"Betegnelse"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/dawa/datavask/adgangsadresser":{"get":{"tags":["internal"],"summary":"/datavask/adgangsadresser","operationId":"datavask_adgangsadresser_dawa_datavask_adgangsadresser_get","parameters":[{"name":"betegnelse","in":"query","required":true,"schema":{"type":"string","title":"Betegnelse"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/dawa/postnumre/autocomplete":{"get":{"tags":["internal"],"summary":"/postnumre/autocomplete","operationId":"postnumre_autocomplete_dawa_postnumre_autocomplete_get","parameters":[{"name":"q","in":"query","required":false,"schema":{"type":"string","default":"","title":"Q"}},{"name":"per_side","in":"query","required":false,"schema":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Per Side"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/dawa/postnumre/reverse":{"get":{"tags":["internal"],"summary":"/postnumre/reverse","operationId":"postnumre_reverse_dawa_postnumre_reverse_get","parameters":[{"name":"x","in":"query","required":true,"schema":{"type":"number","title":"X"}},{"name":"y","in":"query","required":true,"schema":{"type":"number","title":"Y"}},{"name":"srid","in":"query","required":false,"schema":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Srid"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/dawa/postnumre":{"get":{"tags":["internal"],"summary":"/postnumre","operationId":"postnumre_dawa_postnumre_get","parameters":[{"name":"nr","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Nr"}},{"name":"navn","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Navn"}},{"name":"q","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Q"}},{"name":"kommunekode","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Kommunekode"}},{"name":"side","in":"query","required":false,"schema":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Side"}},{"name":"per_side","in":"query","required":false,"schema":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Per Side"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/dawa/postnumre/{nr}":{"get":{"tags":["internal"],"summary":"/postnumre/{nr}","operationId":"postnummer_dawa_postnumre__nr__get","parameters":[{"name":"nr","in":"path","required":true,"schema":{"type":"string","title":"Nr"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/dawa/kommuner/reverse":{"get":{"tags":["internal"],"summary":"/kommuner/reverse","operationId":"kommuner_reverse_dawa_kommuner_reverse_get","parameters":[{"name":"x","in":"query","required":true,"schema":{"type":"number","title":"X"}},{"name":"y","in":"query","required":true,"schema":{"type":"number","title":"Y"}},{"name":"srid","in":"query","required":false,"schema":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Srid"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/dawa/kommuner":{"get":{"tags":["internal"],"summary":"/kommuner","operationId":"kommuner_dawa_kommuner_get","parameters":[{"name":"kode","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Kode"}},{"name":"navn","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Navn"}},{"name":"q","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Q"}},{"name":"regionskode","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Regionskode"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/dawa/kommuner/{kode}":{"get":{"tags":["internal"],"summary":"/kommuner/{kode}","operationId":"kommune_dawa_kommuner__kode__get","parameters":[{"name":"kode","in":"path","required":true,"schema":{"type":"string","title":"Kode"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/dawa/regioner":{"get":{"tags":["internal"],"summary":"/regioner","operationId":"regioner_dawa_regioner_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/cvrapi/api":{"get":{"tags":["cvrapi.dk compatibility"],"summary":"/cvrapi/api","description":"Look up one Danish company in cvrapi.dk's version 6 format.\n\nA drop-in replacement for `https://cvrapi.dk/api`: change the base URL to\n`https://api.companydata.dk/cvrapi/api` and keep your parameters.\n\n**Parameters** (query string, or form fields on POST):\n- `vat`: CVR number. `produ`: P-number (answers with the production unit\n  in the company shape). `phone`: phone number. `name`: best match for\n  a company name, active companies first. `search`: a CVR number,\n  P-number or name. One is used, in that order.\n- `country`: `dk` (the default; only Danish companies are served).\n- `format`: `json` (default) or `xml`. `callback`: JSONP function name.\n- `token`: a companydata.dk API key (`sk_...`), also accepted as\n  `Authorization: Bearer`.\n\n**Access:** everyone gets 50 lookups a day (per IP without a key, per\naccount with one). A companydata.dk API key adds its monthly API quota\non top: a free account 1,000 a month, Pro 300,000.\n\n**Errors** keep cvrapi.dk's shape, e.g. HTTP 404\n`{\"error\":\"NOT_FOUND\",\"t\":0,\"version\":6}`. Codes: NOT_FOUND,\nQUOTA_EXCEEDED (429), INVALID_VAT, NO_SEARCH, UNSUPPORTED_COUNTRY (400),\nINVALID_TOKEN (401).","operationId":"cvrapi_lookup_cvrapi_api_get","responses":{"200":{"description":"The company in cvrapi.dk's version 6 format","content":{"application/json":{},"application/xml":{},"application/javascript":{}}},"404":{"description":"Not found: {\"error\":\"NOT_FOUND\",\"t\":0,\"version\":6}"},"429":{"description":"QUOTA_EXCEEDED: keyless ceiling or the key's quota reached"}}},"post":{"tags":["cvrapi.dk compatibility"],"summary":"/cvrapi/api","description":"Look up one Danish company in cvrapi.dk's version 6 format.\n\nA drop-in replacement for `https://cvrapi.dk/api`: change the base URL to\n`https://api.companydata.dk/cvrapi/api` and keep your parameters.\n\n**Parameters** (query string, or form fields on POST):\n- `vat`: CVR number. `produ`: P-number (answers with the production unit\n  in the company shape). `phone`: phone number. `name`: best match for\n  a company name, active companies first. `search`: a CVR number,\n  P-number or name. One is used, in that order.\n- `country`: `dk` (the default; only Danish companies are served).\n- `format`: `json` (default) or `xml`. `callback`: JSONP function name.\n- `token`: a companydata.dk API key (`sk_...`), also accepted as\n  `Authorization: Bearer`.\n\n**Access:** everyone gets 50 lookups a day (per IP without a key, per\naccount with one). A companydata.dk API key adds its monthly API quota\non top: a free account 1,000 a month, Pro 300,000.\n\n**Errors** keep cvrapi.dk's shape, e.g. HTTP 404\n`{\"error\":\"NOT_FOUND\",\"t\":0,\"version\":6}`. Codes: NOT_FOUND,\nQUOTA_EXCEEDED (429), INVALID_VAT, NO_SEARCH, UNSUPPORTED_COUNTRY (400),\nINVALID_TOKEN (401).","operationId":"cvrapi_lookup_cvrapi_api_get","responses":{"200":{"description":"The company in cvrapi.dk's version 6 format","content":{"application/json":{},"application/xml":{},"application/javascript":{}}},"404":{"description":"Not found: {\"error\":\"NOT_FOUND\",\"t\":0,\"version\":6}"},"429":{"description":"QUOTA_EXCEEDED: keyless ceiling or the key's quota reached"}}}},"/v1/track/company-view":{"post":{"tags":["internal"],"summary":"Track company page view","description":"Track that a user viewed a company page. Called by frontend on page load.","operationId":"track_company_view_endpoint_v1_track_company_view_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CompanyViewRequest"}}},"required":true},"responses":{"204":{"description":"Successful Response"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]}]}},"/v1/stripe/webhooks":{"post":{"tags":["internal"],"summary":"Stripe Webhook","description":"Handle Stripe webhook events.\n\nStripe will send events here when subscription-related events occur.","operationId":"stripe_webhook_v1_stripe_webhooks_post","parameters":[{"name":"Stripe-Signature","in":"header","required":false,"schema":{"type":"string","title":"Stripe-Signature"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/brevo/webhook":{"post":{"tags":["internal"],"summary":"Brevo Webhook","description":"Handle Brevo marketing webhook events (unsubscribe / spam).\n\nAlways returns 200 for accepted events (even unknown emails) so Brevo\ndoesn't retry indefinitely and so the endpoint can't be used to probe for\naccounts. Returns 503 when not configured, 401 on a bad token.","operationId":"brevo_webhook_v1_brevo_webhook_post","parameters":[{"name":"token","in":"query","required":false,"schema":{"type":"string","default":"","title":"Token"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/claims":{"post":{"tags":["internal"],"summary":"Start Claim","description":"Start a new claim for a company.\n\nVerification uses your verified account email. If it is the company's\nCVR-registered email, or its domain matches the company website, the\nclaim is approved instantly. Otherwise it goes to manual admin review.","operationId":"start_claim_v1_claims_post","security":[{"HTTPBearer":[]}],"parameters":[{"name":"locale","in":"query","required":false,"schema":{"type":"string","description":"Locale for emails","default":"da","title":"Locale"},"description":"Locale for emails"}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ClaimCreateRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ClaimCreateResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/claims/verify-email":{"post":{"tags":["internal"],"summary":"Verify Claim Email","description":"Verify a claim using the email token.\n\nThis endpoint is called when the user clicks the verification link\nin their email. No authentication required since the token is secret.","operationId":"verify_claim_email_v1_claims_verify_email_post","security":[{"HTTPBearer":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/VerifyEmailRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/app__routers__claims__VerifyEmailResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"get":{"tags":["internal"],"summary":"Verify Claim Email Get","description":"Verify a claim using the email token (GET variant for email links).\n\nThis endpoint is called when the user clicks the verification link\nin their email. No authentication required since the token is secret.","operationId":"verify_claim_email_get_v1_claims_verify_email_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"token","in":"query","required":true,"schema":{"type":"string","description":"Verification token from email","title":"Token"},"description":"Verification token from email"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/app__routers__claims__VerifyEmailResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/claims/resend-verification":{"post":{"tags":["internal"],"summary":"Resend Verification Email","description":"Re-send an admin-initiated verification email.\n\nCalled from the expired-link page. The token from the original email\n(even if expired) identifies the claim; a fresh token is issued and the\nemail re-sent to the original requester address. No authentication\nrequired since the token is secret. Capped at 3 resends per claim.","operationId":"resend_verification_email_v1_claims_resend_verification_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/app__routers__claims__ResendVerificationRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ResendVerificationResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]}]}},"/v1/claims/my-companies":{"get":{"tags":["internal"],"summary":"List My Companies","description":"List all companies claimed by the current user.\n\nReturns a list of companies where the user is a team member,\nincluding their role, subscription tier, and basic stats.","operationId":"list_my_companies_v1_claims_my_companies_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"items":{"$ref":"#/components/schemas/MyCompanyResponse"},"type":"array","title":"Response List My Companies V1 Claims My Companies Get"}}}}},"security":[{"HTTPBearer":[]}]}},"/v1/claims/my-companies/{cvr}":{"get":{"tags":["internal"],"summary":"Get My Company","description":"Get full details of a claimed company for editing.\n\nReturns profile content, subscription info, team members, and analytics.","operationId":"get_my_company_v1_claims_my_companies__cvr__get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"cvr","in":"path","required":true,"schema":{"type":"string","title":"Cvr"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/MyCompanyDetailResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/claims/my-companies/{cvr}/profile":{"put":{"tags":["internal"],"summary":"Update My Company Profile","description":"Update profile content for a claimed company.\n\nSome fields are only available on higher subscription tiers:\n- Description, photos, hide similar: Business tier required\n- Video, promotional CTA: Plus tier required","operationId":"update_my_company_profile_v1_claims_my_companies__cvr__profile_put","security":[{"HTTPBearer":[]}],"parameters":[{"name":"cvr","in":"path","required":true,"schema":{"type":"string","title":"Cvr"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/app__models__claimed_profile__ProfileUpdateRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/claims/my-companies/{cvr}/profile/logo":{"post":{"tags":["internal"],"summary":"Update Company Logo","description":"Update the company logo.\n\nProvide the URL of the uploaded logo image.\nLogo should be square, minimum 200x200 pixels.","operationId":"update_company_logo_v1_claims_my_companies__cvr__profile_logo_post","security":[{"HTTPBearer":[]}],"parameters":[{"name":"cvr","in":"path","required":true,"schema":{"type":"string","title":"Cvr"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/LogoUploadRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/LogoUploadResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"delete":{"tags":["internal"],"summary":"Delete Company Logo","description":"Delete the company logo.","operationId":"delete_company_logo_v1_claims_my_companies__cvr__profile_logo_delete","security":[{"HTTPBearer":[]}],"parameters":[{"name":"cvr","in":"path","required":true,"schema":{"type":"string","title":"Cvr"}}],"responses":{"204":{"description":"Successful Response"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/claims/my-companies/{cvr}/profile/translate-description":{"post":{"tags":["internal"],"summary":"Translate Description","description":"Translate a Danish description to English using AI.\n\nIf 'text' is provided in the request body, translates that text.\nOtherwise, translates the saved Danish description from the profile.","operationId":"translate_description_v1_claims_my_companies__cvr__profile_translate_description_post","security":[{"HTTPBearer":[]}],"parameters":[{"name":"cvr","in":"path","required":true,"schema":{"type":"string","title":"Cvr"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TranslateDescriptionRequest","default":{}}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/TranslateDescriptionResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/claims/my-companies/{cvr}/profile/photos":{"post":{"tags":["internal"],"summary":"Add Company Photo","description":"Add a photo to the company gallery.\n\nRequires Business tier or higher. Maximum 10 photos.","operationId":"add_company_photo_v1_claims_my_companies__cvr__profile_photos_post","security":[{"HTTPBearer":[]}],"parameters":[{"name":"cvr","in":"path","required":true,"schema":{"type":"string","title":"Cvr"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PhotoUploadRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PhotoUploadResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/claims/my-companies/{cvr}/profile/photos/{photo_id}":{"delete":{"tags":["internal"],"summary":"Remove Company Photo","description":"Remove a photo from the company gallery.","operationId":"remove_company_photo_v1_claims_my_companies__cvr__profile_photos__photo_id__delete","security":[{"HTTPBearer":[]}],"parameters":[{"name":"cvr","in":"path","required":true,"schema":{"type":"string","title":"Cvr"}},{"name":"photo_id","in":"path","required":true,"schema":{"type":"string","title":"Photo Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/claims/my-companies/{cvr}/analytics":{"get":{"tags":["internal"],"summary":"Get Company Analytics","description":"Get analytics for a claimed company.\n\nReturns total views and views by month (last 12 months).","operationId":"get_company_analytics_v1_claims_my_companies__cvr__analytics_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"cvr","in":"path","required":true,"schema":{"type":"string","title":"Cvr"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AnalyticsResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/claims/my-companies/{cvr}/leads":{"get":{"tags":["internal"],"summary":"List Leads","description":"List leads (contact form submissions) for a claimed company.\n\nRequires Business tier or higher subscription.","operationId":"list_leads_v1_claims_my_companies__cvr__leads_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"cvr","in":"path","required":true,"schema":{"type":"string","title":"Cvr"}},{"name":"skip","in":"query","required":false,"schema":{"type":"integer","minimum":0,"default":0,"title":"Skip"}},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":100,"minimum":1,"default":50,"title":"Limit"}},{"name":"unread_only","in":"query","required":false,"schema":{"type":"boolean","default":false,"title":"Unread Only"}},{"name":"include_archived","in":"query","required":false,"schema":{"type":"boolean","default":false,"title":"Include Archived"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/LeadResponse"},"title":"Response List Leads V1 Claims My Companies  Cvr  Leads Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/claims/my-companies/{cvr}/leads/{lead_id}":{"put":{"tags":["internal"],"summary":"Update Lead","description":"Update a lead (mark as read, archive/unarchive).","operationId":"update_lead_v1_claims_my_companies__cvr__leads__lead_id__put","security":[{"HTTPBearer":[]}],"parameters":[{"name":"cvr","in":"path","required":true,"schema":{"type":"string","title":"Cvr"}},{"name":"lead_id","in":"path","required":true,"schema":{"type":"string","title":"Lead Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/LeadUpdateRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/claims/my-companies/{cvr}/team":{"get":{"tags":["internal"],"summary":"List Team Members","description":"List team members for a claimed company.","operationId":"list_team_members_v1_claims_my_companies__cvr__team_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"cvr","in":"path","required":true,"schema":{"type":"string","title":"Cvr"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/TeamMember"},"title":"Response List Team Members V1 Claims My Companies  Cvr  Team Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"post":{"tags":["internal"],"summary":"Invite Team Member","description":"Invite a user to the team.\n\nOnly owners and admins can invite. Only owners can add admins.\nThe invited user must already have an account.","operationId":"invite_team_member_v1_claims_my_companies__cvr__team_post","security":[{"HTTPBearer":[]}],"parameters":[{"name":"cvr","in":"path","required":true,"schema":{"type":"string","title":"Cvr"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TeamInviteRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/claims/my-companies/{cvr}/team/{user_id}":{"put":{"tags":["internal"],"summary":"Update Team Member","description":"Update a team member's role.\n\nOnly the owner can change roles. Use transfer ownership to make\nsomeone else the owner.","operationId":"update_team_member_v1_claims_my_companies__cvr__team__user_id__put","security":[{"HTTPBearer":[]}],"parameters":[{"name":"cvr","in":"path","required":true,"schema":{"type":"string","title":"Cvr"}},{"name":"user_id","in":"path","required":true,"schema":{"type":"string","title":"User Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TeamUpdateRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"delete":{"tags":["internal"],"summary":"Remove Team Member","description":"Remove a team member.\n\nOwners and admins can remove members. The owner cannot be removed.","operationId":"remove_team_member_v1_claims_my_companies__cvr__team__user_id__delete","security":[{"HTTPBearer":[]}],"parameters":[{"name":"cvr","in":"path","required":true,"schema":{"type":"string","title":"Cvr"}},{"name":"user_id","in":"path","required":true,"schema":{"type":"string","title":"User Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/claims/my-companies/{cvr}/team/transfer-ownership":{"post":{"tags":["internal"],"summary":"Transfer Ownership","description":"Transfer ownership to another team member.\n\nOnly the current owner can transfer ownership.\nThe current owner will become an admin.","operationId":"transfer_ownership_v1_claims_my_companies__cvr__team_transfer_ownership_post","security":[{"HTTPBearer":[]}],"parameters":[{"name":"cvr","in":"path","required":true,"schema":{"type":"string","title":"Cvr"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TransferOwnershipRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/claims/my-companies/{cvr}/subscription/checkout":{"post":{"tags":["internal"],"summary":"Create Subscription Checkout","description":"Create a Stripe checkout session for upgrading the claim subscription.\n\nOnly the owner can upgrade the subscription.\n\nOne paid plan (indicative; source of truth is the active claim_price_sets / Stripe):\n- business_plus (Premium): 599 DKK/month or 5,990 DKK/year, VAT included\n\nThe former Business tier is kept in the model for existing records but\nis no longer sold.","operationId":"create_subscription_checkout_v1_claims_my_companies__cvr__subscription_checkout_post","security":[{"HTTPBearer":[]}],"parameters":[{"name":"cvr","in":"path","required":true,"schema":{"type":"string","title":"Cvr"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreateCheckoutRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CheckoutResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/claims/my-companies/{cvr}/subscription/portal":{"post":{"tags":["internal"],"summary":"Create Billing Portal","description":"Create a Stripe billing portal session.\n\nThe billing portal allows the owner to:\n- View invoices\n- Update payment method\n- Cancel subscription\n- Change plan","operationId":"create_billing_portal_v1_claims_my_companies__cvr__subscription_portal_post","security":[{"HTTPBearer":[]}],"parameters":[{"name":"cvr","in":"path","required":true,"schema":{"type":"string","title":"Cvr"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/app__routers__claims__BillingPortalRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/app__routers__claims__BillingPortalResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/claims/public/{cvr}":{"get":{"tags":["internal"],"summary":"Get Public Claimed Profile","description":"Get public claimed profile data for a company.\n\nThis is used by the frontend to display claimed profile info\n(logo, description, social links, etc.) on the company page.\n\nAlways returns 200. The `is_claimed` field indicates whether there's\na real verified claim. Falls back to admin profile data if no claim exists.","operationId":"get_public_claimed_profile_v1_claims_public__cvr__get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"cvr","in":"path","required":true,"schema":{"type":"string","title":"Cvr"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PublicClaimedProfileResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/claims/public/{cvr}/contact":{"post":{"tags":["internal"],"summary":"Submit Lead","description":"Submit a contact form (lead) for a claimed company.\n\nThis is a public endpoint - no authentication required.\nRate limited to 5 submissions per hour per IP address.\n\nRequires the company to have Business tier or higher subscription.","operationId":"submit_lead_v1_claims_public__cvr__contact_post","security":[{"HTTPBearer":[]}],"parameters":[{"name":"cvr","in":"path","required":true,"schema":{"type":"string","title":"Cvr"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/LeadSubmitRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/LeadSubmitResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/claims/{claim_id}":{"get":{"tags":["internal"],"summary":"Get Claim Status","description":"Get the status of a claim.\n\nReturns claim status, verification method, and any rejection reason.","operationId":"get_claim_status_v1_claims__claim_id__get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"claim_id","in":"path","required":true,"schema":{"type":"string","title":"Claim Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ClaimStatusResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/upload/image":{"post":{"tags":["internal"],"summary":"Upload an image","description":"Upload an image file (JPEG, PNG, WebP, GIF). Max 5MB.","operationId":"upload_image_v1_upload_image_post","requestBody":{"content":{"multipart/form-data":{"schema":{"$ref":"#/components/schemas/Body_upload_image_v1_upload_image_post"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/UploadResponse"}}}},"400":{"description":"Invalid file","content":{"application/json":{"schema":{"$ref":"#/components/schemas/UploadError"}}}},"413":{"description":"File too large","content":{"application/json":{"schema":{"$ref":"#/components/schemas/UploadError"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]}]}},"/v1/upload/video":{"post":{"tags":["internal"],"summary":"Upload a video","description":"Upload a video file (MP4 only). Max 10MB.","operationId":"upload_video_v1_upload_video_post","requestBody":{"content":{"multipart/form-data":{"schema":{"$ref":"#/components/schemas/Body_upload_video_v1_upload_video_post"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/UploadResponse"}}}},"400":{"description":"Invalid file","content":{"application/json":{"schema":{"$ref":"#/components/schemas/UploadError"}}}},"413":{"description":"File too large","content":{"application/json":{"schema":{"$ref":"#/components/schemas/UploadError"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]}]}},"/v1/upload/document":{"post":{"tags":["internal"],"summary":"Upload a document","description":"Upload a document file (PDF only). Max 10MB.","operationId":"upload_document_v1_upload_document_post","requestBody":{"content":{"multipart/form-data":{"schema":{"$ref":"#/components/schemas/Body_upload_document_v1_upload_document_post"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/UploadResponse"}}}},"400":{"description":"Invalid file","content":{"application/json":{"schema":{"$ref":"#/components/schemas/UploadError"}}}},"413":{"description":"File too large","content":{"application/json":{"schema":{"$ref":"#/components/schemas/UploadError"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]}]}},"/v1/report-requests/estimate":{"post":{"tags":["internal"],"summary":"Estimate Report","description":"Estimate the number of companies matching the given filters.\n\nAccepts either the legacy flat ReportFilters shape or the new-style\n`{\"screen\": {...}, \"list_ids\": [], \"connection_ids\": []}` shape that\nexposes every /v1/screen filter.\n\nWhen `include_preview=true`, the response also includes a sample of\nmatching companies (capped at 50). The HTML UI never sets this — it's\nused by the MCP `preview_lead_list` tool to give agents a concrete\nview before the user commits to a full Pro-tier export.\n\nBelow Pro (companydata.dk only): a logged-out visitor gets the count, a\nBasic account the count and, with include_preview, the first 5 companies,\nboth within the daily allowances in services/preview_limits.py.","operationId":"estimate_report_v1_report_requests_estimate_post","security":[{"HTTPBearer":[]}],"parameters":[{"name":"include_preview","in":"query","required":false,"schema":{"type":"boolean","default":false,"title":"Include Preview"}},{"name":"preview_limit","in":"query","required":false,"schema":{"type":"integer","default":10,"title":"Preview Limit"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"anyOf":[{"$ref":"#/components/schemas/LeadListFilters"},{"$ref":"#/components/schemas/ReportFilters"}],"title":"Body"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ReportEstimateResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/report-requests":{"get":{"tags":["internal"],"summary":"List Report Requests","description":"List all lead list requests for the current user, newest first.","operationId":"list_report_requests_v1_report_requests_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"items":{"$ref":"#/components/schemas/ReportRequestResponse"},"type":"array","title":"Response List Report Requests V1 Report Requests Get"}}}}},"security":[{"HTTPBearer":[]}]},"post":{"tags":["internal"],"summary":"Create Report Request","description":"Create a new lead list request and enqueue it for background processing.","operationId":"create_report_request_v1_report_requests_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreateReportRequest"}}},"required":true},"responses":{"201":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ReportRequestResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]}]}},"/v1/report-requests/{report_id}":{"get":{"tags":["internal"],"summary":"Get Report Request","description":"Get a single lead list request by ID.","operationId":"get_report_request_v1_report_requests__report_id__get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"report_id","in":"path","required":true,"schema":{"type":"string","title":"Report Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ReportRequestResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/enrichments/estimate":{"post":{"tags":["internal"],"summary":"Estimate Enrichment Endpoint","description":"Count how many of the submitted CVRs exist in our database.\n\nCheap + available to any logged-in user — the UI calls this while the\nuser edits the paste box so \"7,832 of 10,000 matched\" can render live.\nSize cap applies so we don't let a basic user point a 100k list here.","operationId":"estimate_enrichment_endpoint_v1_enrichments_estimate_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/EnrichmentEstimateRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/EnrichmentEstimateResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]}]}},"/v1/enrichments":{"get":{"tags":["internal"],"summary":"List Enrichments","description":"List the current user's enrichment jobs, newest first.","operationId":"list_enrichments_v1_enrichments_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"items":{"$ref":"#/components/schemas/EnrichmentRequestResponse"},"type":"array","title":"Response List Enrichments V1 Enrichments Get"}}}}},"security":[{"HTTPBearer":[]}]},"post":{"tags":["internal"],"summary":"Create Enrichment","description":"Create a new enrichment job and enqueue the async worker.\n\nStores in report_requests with source=\"cvr_list\". The worker\n(generate_custom_report) dispatches on source to build the query.","operationId":"create_enrichment_v1_enrichments_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreateEnrichmentRequest"}}},"required":true},"responses":{"201":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/EnrichmentRequestResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]}]}},"/v1/enrichments/{enrichment_id}":{"get":{"tags":["internal"],"summary":"Get Enrichment","description":"Get one enrichment job by id. Scoped to the current user.","operationId":"get_enrichment_v1_enrichments__enrichment_id__get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"enrichment_id","in":"path","required":true,"schema":{"type":"string","title":"Enrichment Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/EnrichmentRequestResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"delete":{"tags":["internal"],"summary":"Delete Enrichment","description":"Delete an enrichment job (only completed/failed ones — running jobs\nare left alone so the worker doesn't crash on a missing doc).","operationId":"delete_enrichment_v1_enrichments__enrichment_id__delete","security":[{"HTTPBearer":[]}],"parameters":[{"name":"enrichment_id","in":"path","required":true,"schema":{"type":"string","title":"Enrichment Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/enrichment-quotes":{"post":{"tags":["internal"],"summary":"Create Quote Request","description":"Capture a managed-enrichment quote request.\n\nPublic + unauthenticated — anyone can submit. To prevent trivial abuse\nwe rely on the rate-limit middleware at the edge; we don't need user\nidentity here.","operationId":"create_quote_request_v1_enrichment_quotes_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreateEnrichmentQuoteRequest"}}},"required":true},"responses":{"201":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/EnrichmentQuoteResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/geocode":{"get":{"tags":["internal"],"summary":"Geocode Address","description":"Geocode a Danish address by searching the local addresses collection.\n\nTries multiple matching strategies:\n1. Parsed address components → lookup_key match\n2. Regex prefix match on vejnavn + postnr\n3. Text search fallback\n\nReturns the best matching address with coordinates.","operationId":"geocode_address_v1_geocode_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"q","in":"query","required":true,"schema":{"type":"string","minLength":2,"maxLength":200,"description":"Address search query","title":"Q"},"description":"Address search query"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/contact-scrape/{cvr}":{"post":{"tags":["internal"],"summary":"Scrape Single Company","description":"Reveal contact data for a single company. Returns fresh cached data if\navailable, otherwise runs a scrape.\n\nIncluded with Pro — **no credit is consumed**. Contact enrichment is a\nsubscription feature that drives Pro upgrades, not a metered product.","operationId":"scrape_single_company_v1_contact_scrape__cvr__post","security":[{"HTTPBearer":[]}],"parameters":[{"name":"cvr","in":"path","required":true,"schema":{"type":"string","title":"Cvr"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SingleScrapeResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"get":{"tags":["internal"],"summary":"Get Cached Scrape","description":"Get cached scrape result for a company. No credit consumed.","operationId":"get_cached_scrape_v1_contact_scrape__cvr__get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"cvr","in":"path","required":true,"schema":{"type":"string","title":"Cvr"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SingleScrapeResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/zapier/hooks/subscribe":{"post":{"tags":["internal"],"summary":"Subscribe a Zapier REST hook","description":"Subscribe a Zapier REST hook.\n\nCalled by Zapier when a user turns on a Zap. Creates a webhook that\ndelivers matching change events to Zapier's hook URL.\n\nAt least one filter (cvrs, industry_codes, municipality_codes, or\npostal_codes) is required to scope the subscription.","operationId":"zapier_subscribe_v1_zapier_hooks_subscribe_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ZapierSubscribeRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ZapierSubscribeResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]}]}},"/v1/zapier/hooks/{webhook_id}":{"delete":{"tags":["internal"],"summary":"Unsubscribe a Zapier REST hook","description":"Unsubscribe a Zapier REST hook.\n\nCalled by Zapier when a user turns off a Zap. Deletes the webhook\nso no further events are delivered.","operationId":"zapier_unsubscribe_v1_zapier_hooks__webhook_id__delete","security":[{"HTTPBearer":[]}],"parameters":[{"name":"webhook_id","in":"path","required":true,"schema":{"type":"string","title":"Webhook Id"}}],"responses":{"204":{"description":"Successful Response"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/zapier/hooks/sample-events":{"get":{"tags":["internal"],"summary":"Get sample change events for Zapier field mapping","description":"Return recent change events as sample data, filtered by the user's\nconfigured Zap filters when available.\n\nZapier calls this endpoint (performList) so users can map fields when\nsetting up a Zap.","operationId":"zapier_sample_events_v1_zapier_hooks_sample_events_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"event_type","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Filter by event type","title":"Event Type"},"description":"Filter by event type"},{"name":"cvrs","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Comma-separated CVR numbers","title":"Cvrs"},"description":"Comma-separated CVR numbers"},{"name":"industry_codes","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Comma-separated industry codes","title":"Industry Codes"},"description":"Comma-separated industry codes"},{"name":"municipality_codes","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Comma-separated municipality codes","title":"Municipality Codes"},"description":"Comma-separated municipality codes"},{"name":"postal_codes","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Comma-separated postal codes","title":"Postal Codes"},"description":"Comma-separated postal codes"},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":10,"minimum":1,"description":"Number of sample events","default":5,"title":"Limit"},"description":"Number of sample events"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/ZapierSampleEvent"},"title":"Response Zapier Sample Events V1 Zapier Hooks Sample Events Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/accounting/providers":{"get":{"tags":["internal"],"summary":"List Providers","description":"List available accounting providers and whether the user has connected them.","operationId":"list_providers_v1_accounting_providers_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"items":{"$ref":"#/components/schemas/ProviderInfo"},"type":"array","title":"Response List Providers V1 Accounting Providers Get"}}}}},"security":[{"HTTPBearer":[]}]}},"/v1/accounting/connections":{"get":{"tags":["internal"],"summary":"List Connections","description":"List all accounting connections for the current user.","operationId":"list_connections_v1_accounting_connections_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"items":{"$ref":"#/components/schemas/AccountingConnectionResponse"},"type":"array","title":"Response List Connections V1 Accounting Connections Get"}}}}},"security":[{"HTTPBearer":[]}]}},"/v1/accounting/connect/{provider_id}":{"get":{"tags":["internal"],"summary":"Initiate Connection","description":"Get the OAuth redirect URL to connect an accounting provider.","operationId":"initiate_connection_v1_accounting_connect__provider_id__get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"provider_id","in":"path","required":true,"schema":{"type":"string","title":"Provider Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/accounting/callback/{provider_id}":{"get":{"tags":["internal"],"summary":"Handle Callback","description":"Handle the OAuth callback from an accounting provider.\n\nThis endpoint is called directly by the provider's redirect, not via\nthe frontend proxy. It validates the state, stores tokens, and\nredirects to the frontend.","operationId":"handle_callback_v1_accounting_callback__provider_id__get","parameters":[{"name":"provider_id","in":"path","required":true,"schema":{"type":"string","title":"Provider Id"}},{"name":"token","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Token"}},{"name":"code","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Code"}},{"name":"state","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"State"}},{"name":"error","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Error"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/accounting/connections/{connection_id}/sync":{"post":{"tags":["internal"],"summary":"Trigger Sync","description":"Trigger a manual sync for an accounting connection.","operationId":"trigger_sync_v1_accounting_connections__connection_id__sync_post","security":[{"HTTPBearer":[]}],"parameters":[{"name":"connection_id","in":"path","required":true,"schema":{"type":"string","title":"Connection Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/accounting/connections/{connection_id}":{"delete":{"tags":["internal"],"summary":"Disconnect","description":"Disconnect an accounting connection.","operationId":"disconnect_v1_accounting_connections__connection_id__delete","security":[{"HTTPBearer":[]}],"parameters":[{"name":"connection_id","in":"path","required":true,"schema":{"type":"string","title":"Connection Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/accounting/contacts":{"get":{"tags":["internal"],"summary":"List Contacts","description":"Get paginated enriched contacts for the current user.","operationId":"list_contacts_v1_accounting_contacts_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"connection_id","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Connection Id"}},{"name":"contact_type","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"customer or supplier","title":"Contact Type"},"description":"customer or supplier"},{"name":"has_risk","in":"query","required":false,"schema":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Has Risk"}},{"name":"sort","in":"query","required":false,"schema":{"type":"string","description":"Sort field","default":"name","title":"Sort"},"description":"Sort field"},{"name":"order","in":"query","required":false,"schema":{"type":"string","description":"asc or desc","default":"asc","title":"Order"},"description":"asc or desc"},{"name":"page","in":"query","required":false,"schema":{"type":"integer","minimum":1,"default":1,"title":"Page"}},{"name":"page_size","in":"query","required":false,"schema":{"type":"integer","maximum":200,"minimum":1,"default":50,"title":"Page Size"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AccountingContactsListResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/accounting/risk-summary":{"get":{"tags":["internal"],"summary":"Risk Summary","description":"Get aggregate risk stats for the current user's accounting contacts.","operationId":"risk_summary_v1_accounting_risk_summary_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/RiskSummaryResponse"}}}}},"security":[{"HTTPBearer":[]}]}},"/v1/team":{"get":{"tags":["internal"],"summary":"Get My Team","description":"The calling user's organization: members, invitations, seats.","operationId":"get_my_team_v1_team_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/OrganizationResponse"}}}}},"security":[{"HTTPBearer":[]}]},"patch":{"tags":["internal"],"summary":"Rename Team","description":"Rename the organization (Owner/Admin).","operationId":"rename_team_v1_team_patch","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/OrgRenameRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/OrganizationResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]}]}},"/v1/team/invitations":{"post":{"tags":["internal"],"summary":"Invite Member","description":"Invite a member by email (Owner/Admin). Requires a free seat.","operationId":"invite_member_v1_team_invitations_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/OrgInviteRequest"}}},"required":true},"responses":{"201":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/OrganizationResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]}]}},"/v1/team/invitations/{email}":{"delete":{"tags":["internal"],"summary":"Revoke Invitation","description":"Revoke a pending invitation (Owner/Admin).","operationId":"revoke_invitation_v1_team_invitations__email__delete","security":[{"HTTPBearer":[]}],"parameters":[{"name":"email","in":"path","required":true,"schema":{"type":"string","title":"Email"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/OrganizationResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/team/invitations/accept":{"post":{"tags":["internal"],"summary":"Accept Invitation","description":"Accept a team invitation (the logged-in user joins the inviting org).\n\nThe user's current org-of-one must not have a live paid subscription —\nwe never silently absorb someone else's billing. Their org-of-one is kept\n(emptied) so personal data is never destroyed; workspace rows they created\nstay in the old org.","operationId":"accept_invitation_v1_team_invitations_accept_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AcceptInvitationRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]}]}},"/v1/team/members/{user_id}":{"patch":{"tags":["internal"],"summary":"Change Member Role","description":"Change a member's role between member and admin (Owner/Admin).\n\nThe Owner role is changed only via ownership transfer.","operationId":"change_member_role_v1_team_members__user_id__patch","security":[{"HTTPBearer":[]}],"parameters":[{"name":"user_id","in":"path","required":true,"schema":{"type":"string","title":"User Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/OrgRoleUpdateRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/OrganizationResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"delete":{"tags":["internal"],"summary":"Remove Member","description":"Remove a member (Owner/Admin; the Owner cannot be removed).\n\nRemoving a member auto-revokes the API keys they created (S5) and re-homes\nthem to a fresh org-of-one (basic tier) so they keep a working account.","operationId":"remove_member_v1_team_members__user_id__delete","security":[{"HTTPBearer":[]}],"parameters":[{"name":"user_id","in":"path","required":true,"schema":{"type":"string","title":"User Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/OrganizationResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/team/transfer-ownership":{"post":{"tags":["internal"],"summary":"Transfer Ownership","description":"Transfer ownership to another member (Owner only). The previous owner\nbecomes an Admin.","operationId":"transfer_ownership_v1_team_transfer_ownership_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/OrgTransferOwnershipRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/OrganizationResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]}]}},"/v1/team/api-keys/{key_id}":{"delete":{"tags":["internal"],"summary":"Revoke Any Api Key","description":"Revoke ANY API key in the org (Owner/Admin).","operationId":"revoke_any_api_key_v1_team_api_keys__key_id__delete","security":[{"HTTPBearer":[]}],"parameters":[{"name":"key_id","in":"path","required":true,"schema":{"type":"string","title":"Key Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/team/usage":{"get":{"tags":["internal"],"summary":"Get Usage Dashboard","description":"Org usage dashboard: pool consumption, per-member usage, key activity.\n\nOwner/Admin only (usage_dashboard feature, Team tier).","operationId":"get_usage_dashboard_v1_team_usage_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/OrgUsageDashboardResponse"}}}}},"security":[{"HTTPBearer":[]}]}},"/v1/email/unsubscribe":{"post":{"tags":["internal"],"summary":"Unsubscribe One Click","description":"RFC 8058 one-click unsubscribe target.","operationId":"unsubscribe_one_click_v1_email_unsubscribe_post","parameters":[{"name":"token","in":"query","required":true,"schema":{"type":"string","title":"Token"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"get":{"tags":["internal"],"summary":"Unsubscribe Link","description":"Human-clickable unsubscribe link from the email footer.","operationId":"unsubscribe_link_v1_email_unsubscribe_get","parameters":[{"name":"token","in":"query","required":true,"schema":{"type":"string","title":"Token"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/internal/privacy-override":{"post":{"tags":["internal"],"summary":"Utility Set Privacy Override","description":"Set or clear the privacy override on a company, participant or property.\n\nWhen active on a participant: address hidden from all public responses,\nprofile page rendered noindex, excluded from sitemaps. When active on a\nproperty (a granted objection per property): the property's details are\nwithheld; the API, lookup and page show only its number, type, address and\nparcel with withheld=true, and the sitemap skips it. Runs the full\nside-effect chain (audit log, IndexNow ping, ISR cache purge).","operationId":"utility_set_privacy_override_internal_privacy_override_post","parameters":[{"name":"x-utility-key","in":"header","required":true,"schema":{"type":"string","description":"Utility API key","title":"X-Utility-Key"},"description":"Utility API key"}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UtilityPrivacyOverrideRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"get":{"tags":["internal"],"summary":"Utility Get Privacy Override","description":"Current override state and audit history for a company or participant.","operationId":"utility_get_privacy_override_internal_privacy_override_get","parameters":[{"name":"target_type","in":"query","required":true,"schema":{"enum":["company","participant","property"],"type":"string","title":"Target Type"}},{"name":"target_id","in":"query","required":true,"schema":{"type":"string","title":"Target Id"}},{"name":"x-utility-key","in":"header","required":true,"schema":{"type":"string","description":"Utility API key","title":"X-Utility-Key"},"description":"Utility API key"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/UtilityPrivacyOverrideStatus"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/mcp/":{"get":{"tags":["MCP"],"summary":"Mcp Descriptor","description":"Public discovery descriptor for the MCP endpoint.","operationId":"mcp_descriptor_mcp__get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"additionalProperties":true,"type":"object","title":"Response Mcp Descriptor Mcp  Get"}}}}}},"post":{"tags":["MCP"],"summary":"Mcp Endpoint","operationId":"mcp_endpoint_mcp__post","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/mcp":{"get":{"tags":["MCP"],"summary":"Mcp Descriptor","description":"Public discovery descriptor for the MCP endpoint.","operationId":"mcp_descriptor_mcp_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"additionalProperties":true,"type":"object","title":"Response Mcp Descriptor Mcp Get"}}}}}},"post":{"tags":["MCP"],"summary":"Mcp Endpoint","operationId":"mcp_endpoint_mcp_post","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}}},"components":{"schemas":{"APIKeyCreate":{"properties":{"name":{"type":"string","title":"Name","default":"Default Key"}},"type":"object","title":"APIKeyCreate"},"APIKeyInfo":{"properties":{"id":{"type":"string","title":"Id"},"name":{"type":"string","title":"Name"},"key_prefix":{"type":"string","title":"Key Prefix"},"created_at":{"type":"string","format":"date-time","title":"Created At"},"last_used_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Last Used At"},"requests_this_month":{"type":"integer","title":"Requests This Month"},"usage_months":{"additionalProperties":{"type":"integer"},"type":"object","title":"Usage Months","default":{}}},"type":"object","required":["id","name","key_prefix","created_at","last_used_at","requests_this_month"],"title":"APIKeyInfo"},"APIKeyResponse":{"properties":{"id":{"type":"string","title":"Id"},"key_prefix":{"type":"string","title":"Key Prefix"},"name":{"type":"string","title":"Name"},"permissions":{"items":{"type":"string"},"type":"array","title":"Permissions"},"rate_limit":{"$ref":"#/components/schemas/RateLimit"},"usage":{"$ref":"#/components/schemas/Usage"},"active":{"type":"boolean","title":"Active"},"created_at":{"type":"string","format":"date-time","title":"Created At"},"last_used_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Last Used At"}},"type":"object","required":["id","key_prefix","name","permissions","rate_limit","usage","active","created_at"],"title":"APIKeyResponse"},"APIKeyWithSecret":{"properties":{"id":{"type":"string","title":"Id"},"key":{"type":"string","title":"Key"},"key_prefix":{"type":"string","title":"Key Prefix"},"name":{"type":"string","title":"Name"},"permissions":{"items":{"type":"string"},"type":"array","title":"Permissions"},"rate_limit":{"$ref":"#/components/schemas/RateLimit"},"created_at":{"type":"string","format":"date-time","title":"Created At"}},"type":"object","required":["id","key","key_prefix","name","permissions","rate_limit","created_at"],"title":"APIKeyWithSecret","description":"Response when creating a new API key - includes the full key (only shown once)."},"APIKeysWithUsage":{"properties":{"keys":{"items":{"$ref":"#/components/schemas/APIKeyResponse"},"type":"array","title":"Keys"},"usage":{"$ref":"#/components/schemas/UserUsage"}},"type":"object","required":["keys","usage"],"title":"APIKeysWithUsage","description":"Response containing API keys and user-level usage."},"AcceptInvitationRequest":{"properties":{"token":{"type":"string","title":"Token"}},"type":"object","required":["token"],"title":"AcceptInvitationRequest"},"AccountInfo":{"properties":{"key_prefix":{"type":"string","title":"Key Prefix","description":"First characters of the API key"},"name":{"type":"string","title":"Name","description":"API key name"},"permissions":{"items":{"type":"string"},"type":"array","title":"Permissions","description":"Granted permissions"},"rate_limit":{"additionalProperties":true,"type":"object","title":"Rate Limit","description":"Rate limit configuration"},"created_at":{"type":"string","format":"date-time","title":"Created At","description":"When the API key was created"}},"type":"object","required":["key_prefix","name","permissions","rate_limit","created_at"],"title":"AccountInfo"},"AccountResponse":{"properties":{"data":{"$ref":"#/components/schemas/AccountInfo","description":"Account information"},"meta":{"additionalProperties":true,"type":"object","title":"Meta","description":"Response metadata"}},"type":"object","required":["data"],"title":"AccountResponse"},"AccountingConnectionResponse":{"properties":{"id":{"type":"string","title":"Id"},"provider":{"type":"string","title":"Provider","description":"Provider ID: economic, dinero, hubspot"},"provider_display_name":{"type":"string","title":"Provider Display Name","description":"Human-readable provider name"},"status":{"type":"string","title":"Status","description":"active, syncing, error, revoked"},"error_message":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Error Message"},"last_synced_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Last Synced At"},"contact_count":{"type":"integer","title":"Contact Count","default":0},"matched_count":{"type":"integer","title":"Matched Count","default":0},"created_at":{"type":"string","format":"date-time","title":"Created At"}},"type":"object","required":["id","provider","provider_display_name","status","created_at"],"title":"AccountingConnectionResponse","description":"Response model for an accounting connection."},"AccountingContactResponse":{"properties":{"id":{"type":"string","title":"Id"},"connection_id":{"type":"string","title":"Connection Id"},"provider":{"type":"string","title":"Provider"},"contact_type":{"type":"string","title":"Contact Type","description":"customer or supplier"},"name":{"type":"string","title":"Name"},"cvr":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Cvr"},"matched":{"type":"boolean","title":"Matched","default":false},"enriched":{"anyOf":[{"$ref":"#/components/schemas/EnrichedContactData"},{"type":"null"}]},"risk_flags":{"items":{"type":"string"},"type":"array","title":"Risk Flags"},"synced_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Synced At"}},"type":"object","required":["id","connection_id","provider","contact_type","name"],"title":"AccountingContactResponse","description":"Response model for an enriched accounting contact."},"AccountingContactsListResponse":{"properties":{"contacts":{"items":{"$ref":"#/components/schemas/AccountingContactResponse"},"type":"array","title":"Contacts"},"total":{"type":"integer","title":"Total"},"page":{"type":"integer","title":"Page"},"page_size":{"type":"integer","title":"Page Size"}},"type":"object","required":["contacts","total","page","page_size"],"title":"AccountingContactsListResponse","description":"Paginated list of enriched contacts."},"Activity":{"properties":{"_id":{"type":"string","title":"Id"},"record_id":{"type":"string","title":"Record Id"},"kind":{"type":"string","enum":["note","call","followup","status_change","system","company_event"],"title":"Kind"},"body":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Body"},"system_event":{"anyOf":[{"type":"string","enum":["created","assigned","unassigned"]},{"type":"null"}],"title":"System Event"},"system_param":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"System Param"},"event_type":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Event Type"},"summary_da":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Summary Da"},"summary_en":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Summary En"},"old_status":{"anyOf":[{"type":"string","enum":["ny","kontaktet","dialog","vundet","tabt"]},{"type":"null"}],"title":"Old Status"},"new_status":{"anyOf":[{"type":"string","enum":["ny","kontaktet","dialog","vundet","tabt"]},{"type":"null"}],"title":"New Status"},"followup":{"anyOf":[{"$ref":"#/components/schemas/ActivityFollowup"},{"type":"null"}]},"created_at":{"type":"string","format":"date-time","title":"Created At"},"created_by_email":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Created By Email"}},"type":"object","required":["_id","record_id","kind","created_at"],"title":"Activity"},"ActivityFeedItem":{"properties":{"event_id":{"type":"string","title":"Event Id"},"event_type":{"type":"string","title":"Event Type"},"cvr":{"type":"string","title":"Cvr"},"company_name":{"type":"string","title":"Company Name"},"summary_da":{"type":"string","title":"Summary Da"},"summary_en":{"type":"string","title":"Summary En"},"detected_at":{"type":"string","title":"Detected At"}},"type":"object","required":["event_id","event_type","cvr","company_name","summary_da","summary_en","detected_at"],"title":"ActivityFeedItem"},"ActivityFeedResponse":{"properties":{"data":{"items":{"$ref":"#/components/schemas/ActivityFeedItem"},"type":"array","title":"Data"},"total":{"type":"integer","title":"Total"},"limit":{"type":"integer","title":"Limit"},"offset":{"type":"integer","title":"Offset"}},"type":"object","required":["data","total","limit","offset"],"title":"ActivityFeedResponse"},"ActivityFollowup":{"properties":{"due_at":{"type":"string","format":"date-time","title":"Due At"},"recurrence":{"type":"string","enum":["none","weekly","monthly","quarterly","yearly"],"title":"Recurrence","default":"none"},"completed_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Completed At"}},"type":"object","required":["due_at"],"title":"ActivityFollowup"},"AddCompanyRequest":{"properties":{"cvr":{"type":"string","pattern":"^\\d{8}$","title":"Cvr"},"notes":{"anyOf":[{"type":"string","maxLength":500},{"type":"null"}],"title":"Notes"}},"type":"object","required":["cvr"],"title":"AddCompanyRequest","description":"Request to add a company to a list."},"AdminCreateUserRequest":{"properties":{"email":{"type":"string","format":"email","title":"Email"},"password":{"type":"string","title":"Password"},"name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Name"},"tier":{"type":"string","title":"Tier","default":"basic"}},"type":"object","required":["email","password"],"title":"AdminCreateUserRequest"},"AdminCreateUserResponse":{"properties":{"message":{"type":"string","title":"Message"},"user_id":{"type":"string","title":"User Id"},"email":{"type":"string","title":"Email"},"tier":{"type":"string","title":"Tier"}},"type":"object","required":["message","user_id","email","tier"],"title":"AdminCreateUserResponse"},"AdminExtendTrialRequest":{"properties":{"new_ends_at":{"type":"string","format":"date-time","title":"New Ends At"},"reason":{"type":"string","title":"Reason"}},"type":"object","required":["new_ends_at","reason"],"title":"AdminExtendTrialRequest"},"AdminGrantRequest":{"properties":{"tier":{"type":"string","title":"Tier","default":"pro"},"ends_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Ends At"},"reason":{"type":"string","title":"Reason"}},"type":"object","required":["reason"],"title":"AdminGrantRequest"},"AdminInvoiceItem":{"properties":{"id":{"type":"string","title":"Id"},"number":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Number"},"amount":{"type":"integer","title":"Amount"},"currency":{"type":"string","title":"Currency"},"status":{"type":"string","title":"Status"},"created":{"type":"string","format":"date-time","title":"Created"},"period_start":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Period Start"},"period_end":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Period End"},"invoice_url":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Invoice Url"},"pdf_url":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Pdf Url"}},"type":"object","required":["id","amount","currency","status","created"],"title":"AdminInvoiceItem","description":"A paid invoice for admin display."},"AdminInvoicesResponse":{"properties":{"invoices":{"items":{"$ref":"#/components/schemas/AdminInvoiceItem"},"type":"array","title":"Invoices"},"has_more":{"type":"boolean","title":"Has More","default":false},"has_stripe_customer":{"type":"boolean","title":"Has Stripe Customer","default":true}},"type":"object","required":["invoices"],"title":"AdminInvoicesResponse"},"AdminPauseRequest":{"properties":{"months":{"type":"integer","title":"Months","default":1}},"type":"object","title":"AdminPauseRequest"},"AdminPriceOverrideRequest":{"properties":{"price_dkk":{"type":"integer","title":"Price Dkk"},"reason":{"type":"string","title":"Reason"}},"type":"object","required":["price_dkk","reason"],"title":"AdminPriceOverrideRequest"},"AdminProfileListItem":{"properties":{"cvr":{"type":"string","title":"Cvr"},"company_name":{"type":"string","title":"Company Name"},"logo_url":{"type":"string","title":"Logo Url"},"created_at":{"type":"string","title":"Created At"},"created_by":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Created By"}},"type":"object","required":["cvr","company_name","logo_url","created_at"],"title":"AdminProfileListItem","description":"Admin profile list item."},"AdminProfileResponse":{"properties":{"cvr":{"type":"string","title":"Cvr"},"company_name":{"type":"string","title":"Company Name"},"logo_url":{"type":"string","title":"Logo Url"},"created_at":{"type":"string","title":"Created At"},"updated_at":{"type":"string","title":"Updated At"},"created_by":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Created By"}},"type":"object","required":["cvr","company_name","logo_url","created_at","updated_at"],"title":"AdminProfileResponse","description":"Response for a single admin profile."},"AdminProfilesListResponse":{"properties":{"profiles":{"items":{"$ref":"#/components/schemas/AdminProfileListItem"},"type":"array","title":"Profiles"},"total":{"type":"integer","title":"Total"}},"type":"object","required":["profiles","total"],"title":"AdminProfilesListResponse","description":"Response for listing admin profiles."},"AdminUserUsage":{"properties":{"current_month":{"type":"integer","title":"Current Month","default":0},"monthly_limit":{"type":"integer","title":"Monthly Limit","default":300000},"credit_balance":{"type":"integer","title":"Credit Balance","default":0},"usage_percentage":{"type":"integer","title":"Usage Percentage","default":0},"usage_status":{"type":"string","title":"Usage Status","default":"normal"}},"type":"object","title":"AdminUserUsage"},"AggregateBucket":{"properties":{"key":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Key","description":"Group key (code); null groups companies missing the dimension"},"count":{"type":"integer","title":"Count"},"metrics":{"additionalProperties":{"additionalProperties":{"anyOf":[{"type":"number"},{"type":"null"}]},"type":"object"},"type":"object","title":"Metrics","description":"Per requested metric: {\"sum\": ..., \"avg\": ...}"}},"type":"object","required":["count"],"title":"AggregateBucket"},"AggregateDimension":{"type":"string","enum":["industry","industry_division","municipality","company_type","reporting_class","cds_rating"],"title":"AggregateDimension","description":"Grouping dimensions for POST /v1/screen/aggregate."},"AliasAddRequest":{"properties":{"name":{"type":"string","title":"Name","description":"Term as written in news text (normalized automatically)"},"cvr":{"type":"string","title":"Cvr","description":"8-digit CVR the term refers to"},"note":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Note"}},"type":"object","required":["name","cvr"],"title":"AliasAddRequest"},"AnalyticsResponse":{"properties":{"cvr":{"type":"string","title":"Cvr"},"total_views":{"type":"integer","title":"Total Views"},"views_this_month":{"type":"integer","title":"Views This Month","default":0},"views_by_month":{"additionalProperties":{"type":"integer"},"type":"object","title":"Views By Month"}},"type":"object","required":["cvr","total_views","views_by_month"],"title":"AnalyticsResponse","description":"Response with analytics data."},"AnnouncementStatsResponse":{"properties":{"total_announcements":{"type":"integer","title":"Total Announcements"},"by_status":{"$ref":"#/components/schemas/AnnouncementStatusBreakdown"},"by_type":{"additionalProperties":true,"type":"object","title":"By Type"},"date_range":{"additionalProperties":true,"type":"object","title":"Date Range"}},"type":"object","required":["total_announcements","by_status","by_type","date_range"],"title":"AnnouncementStatsResponse"},"AnnouncementStatusBreakdown":{"properties":{"pending":{"type":"integer","title":"Pending"},"processing":{"type":"integer","title":"Processing"},"completed":{"type":"integer","title":"Completed"},"failed":{"type":"integer","title":"Failed"},"permanent_failed":{"type":"integer","title":"Permanent Failed"},"no_xbrl":{"type":"integer","title":"No Xbrl"},"not_applicable":{"type":"integer","title":"Not Applicable","default":0}},"type":"object","required":["pending","processing","completed","failed","permanent_failed","no_xbrl"],"title":"AnnouncementStatusBreakdown"},"ApiActivityStats":{"properties":{"keys_total":{"type":"integer","title":"Keys Total"},"keys_active":{"type":"integer","title":"Keys Active"},"keys_used_7d":{"type":"integer","title":"Keys Used 7D"},"keys_used_30d":{"type":"integer","title":"Keys Used 30D"},"keys_created_30d":{"type":"integer","title":"Keys Created 30D"},"orgs_with_keys":{"type":"integer","title":"Orgs With Keys"},"orgs_with_usage_month":{"type":"integer","title":"Orgs With Usage Month"},"orgs_near_limit":{"type":"integer","title":"Orgs Near Limit"},"orgs_over_limit":{"type":"integer","title":"Orgs Over Limit"},"requests_today":{"type":"integer","title":"Requests Today"},"external_today":{"type":"integer","title":"External Today"},"requests_yesterday":{"type":"integer","title":"Requests Yesterday"},"external_yesterday":{"type":"integer","title":"External Yesterday"},"requests_avg_7d":{"type":"integer","title":"Requests Avg 7D"},"external_avg_7d":{"type":"integer","title":"External Avg 7D"},"requests_mtd":{"type":"integer","title":"Requests Mtd"},"external_mtd":{"type":"integer","title":"External Mtd"}},"type":"object","required":["keys_total","keys_active","keys_used_7d","keys_used_30d","keys_created_30d","orgs_with_keys","orgs_with_usage_month","orgs_near_limit","orgs_over_limit","requests_today","external_today","requests_yesterday","external_yesterday","requests_avg_7d","external_avg_7d","requests_mtd","external_mtd"],"title":"ApiActivityStats"},"AuditInfo":{"properties":{"audit_type":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Audit Type","description":"Type of assurance","examples":["audit","review","compilation","extended_review"]},"opinion_type":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Opinion Type","description":"Auditor's opinion type","examples":["unqualified","qualified","adverse","disclaimer"]},"has_going_concern":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Has Going Concern","description":"Whether report contains going concern paragraph"},"has_emphasis_of_matter":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Has Emphasis Of Matter","description":"Whether report contains emphasis of matter"},"auditor_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Auditor Name","description":"Name of signing auditor"},"audit_firm_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Audit Firm Name","description":"Name of audit firm"},"audit_firm_cvr":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Audit Firm Cvr","description":"CVR number of audit firm"},"audit_date":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Audit Date","description":"Date of auditor's report"},"auditor_mne_numbers":{"items":{"type":"string"},"type":"array","title":"Auditor Mne Numbers","description":"MNE numbers of the signing auditors, normalized (e.g. 'mne24819')"}},"type":"object","title":"AuditInfo","description":"Audit-related information from the annual report."},"AuditorClient":{"properties":{"cvr":{"type":"string","title":"Cvr"},"name":{"type":"string","title":"Name"},"industry_code":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Industry Code"},"industry_text":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Industry Text"},"municipality_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Municipality Name"}},"type":"object","required":["cvr","name"],"title":"AuditorClient"},"AuditorClientsResponse":{"properties":{"data":{"items":{"$ref":"#/components/schemas/AuditorClient"},"type":"array","title":"Data"},"meta":{"additionalProperties":true,"type":"object","title":"Meta"}},"type":"object","required":["data","meta"],"title":"AuditorClientsResponse"},"AuditorIndustryBucket":{"properties":{"code":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Code","description":"DB07 division (2-digit)"},"count":{"type":"integer","title":"Count"}},"type":"object","required":["count"],"title":"AuditorIndustryBucket"},"AuditorProfile":{"properties":{"cvr":{"type":"string","title":"Cvr"},"name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Name","description":"Audit firm name"},"client_count":{"type":"integer","title":"Client Count","description":"Active companies with this firm as registered auditor"},"industries":{"items":{"$ref":"#/components/schemas/AuditorIndustryBucket"},"type":"array","title":"Industries","description":"Top client industries (DB07 divisions)"},"clients_with_signals":{"type":"integer","title":"Clients With Signals","description":"Clients with computed financial reporting signals","default":0},"clients_late_filings":{"type":"integer","title":"Clients Late Filings","description":"Clients with at least one late filing among their last 5 annual reports","default":0},"clients_going_concern":{"type":"integer","title":"Clients Going Concern","description":"Clients whose latest report carries a going concern emphasis","default":0},"clients_overdue_filing":{"type":"integer","title":"Clients Overdue Filing","description":"Active clients whose next expected report is past its statutory deadline","default":0}},"type":"object","required":["cvr","client_count"],"title":"AuditorProfile","description":"Audit firm profile: portfolio facts derived from CVR registrations\nand clients' published annual reports. Factual counts only."},"AutocompleteResponse":{"properties":{"data":{"items":{"$ref":"#/components/schemas/AutocompleteResult"},"type":"array","title":"Data","description":"Autocomplete results"}},"type":"object","required":["data"],"title":"AutocompleteResponse"},"AutocompleteResult":{"properties":{"cvr":{"type":"string","title":"Cvr","description":"CVR number"},"name":{"type":"string","title":"Name","description":"Company name"},"company_type":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Company Type","description":"Company type"},"logo_url":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Logo Url","description":"Company logo URL if available"}},"type":"object","required":["cvr","name"],"title":"AutocompleteResult"},"BalanceSheet":{"properties":{"total_assets":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Total Assets","description":"Total assets (aktiver i alt)"},"noncurrent_assets":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Noncurrent Assets","description":"Non-current assets (anlægsaktiver)"},"current_assets":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Current Assets","description":"Current assets (omsætningsaktiver)"},"cash":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Cash","description":"Cash and cash equivalents (likvide beholdninger)"},"inventories":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Inventories","description":"Inventories (varebeholdninger)"},"receivables":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Receivables","description":"Total receivables (tilgodehavender)"},"intangible_assets":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Intangible Assets","description":"Intangible assets (immaterielle anlægsaktiver)"},"property_plant_equipment":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Property Plant Equipment","description":"Property, plant & equipment (materielle anlægsaktiver)"},"investment_property":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Investment Property","description":"Investment property (investeringsejendomme)"},"goodwill":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Goodwill","description":"Goodwill"},"other_fixtures_equipment":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Other Fixtures Equipment","description":"Other fixtures, fittings, tools and equipment (driftsmateriel og inventar)"},"investments":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Investments","description":"Investments in subsidiaries/associates"},"trade_receivables":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Trade Receivables","description":"Trade receivables (varetilgodehavender)"},"receivables_from_group":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Receivables From Group","description":"Receivables from group companies"},"right_of_use_assets":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Right Of Use Assets","description":"Right-of-use assets (IFRS 16 leases)"},"equity":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Equity","description":"Shareholder equity (egenkapital)"},"contributed_capital":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Contributed Capital","description":"Share capital (selskabskapital)"},"retained_earnings":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Retained Earnings","description":"Retained earnings (overført resultat)"},"total_liabilities":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Total Liabilities","description":"Total liabilities (gældsforpligtelser)"},"longterm_liabilities":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Longterm Liabilities","description":"Long-term liabilities (langfristede gældsforpligtelser)"},"shortterm_liabilities":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Shortterm Liabilities","description":"Short-term liabilities (kortfristede gældsforpligtelser)"},"provisions":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Provisions","description":"Provisions (hensættelser)"},"deferred_tax":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Deferred Tax","description":"Deferred tax liabilities"},"trade_payables":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Trade Payables","description":"Trade payables (varekreditorer)"},"payables_to_group":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Payables To Group","description":"Payables to group companies"},"bank_loans":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Bank Loans","description":"Bank loans and mortgage debt"},"lease_liabilities":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Lease Liabilities","description":"Lease liabilities (IFRS 16)"}},"type":"object","title":"BalanceSheet","description":"Key figures from the balance sheet (balance). All amounts in DKK."},"BankruptcyItem":{"properties":{"message_number":{"type":"string","title":"Message Number"},"publication_date":{"type":"string","title":"Publication Date"},"decree_date":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Decree Date"},"cvr":{"type":"string","title":"Cvr"},"cvrs":{"items":{"type":"string"},"type":"array","title":"Cvrs"},"company_name":{"type":"string","title":"Company Name"},"municipality_code":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Municipality Code"},"municipality_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Municipality Name"},"industry_code":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Industry Code"},"division_code":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Division Code"},"industry_text":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Industry Text"},"company_type":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Company Type"},"court":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Court"},"case_number":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Case Number"},"kurator":{"anyOf":[{"$ref":"#/components/schemas/KuratorItem"},{"type":"null"}]}},"type":"object","required":["message_number","publication_date","cvr","cvrs","company_name"],"title":"BankruptcyItem"},"BankruptcyListResponse":{"properties":{"items":{"items":{"$ref":"#/components/schemas/BankruptcyItem"},"type":"array","title":"Items"},"total":{"type":"integer","title":"Total"},"date_from":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Date From"},"date_to":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Date To"}},"type":"object","required":["items","total"],"title":"BankruptcyListResponse"},"BankruptcyPeriodTotals":{"properties":{"days":{"type":"integer","title":"Days"},"since":{"type":"string","title":"Since"},"total":{"type":"integer","title":"Total"},"municipalities":{"additionalProperties":{"type":"integer"},"type":"object","title":"Municipalities"},"divisions":{"additionalProperties":{"type":"integer"},"type":"object","title":"Divisions"}},"type":"object","required":["days","since","total","municipalities","divisions"],"title":"BankruptcyPeriodTotals"},"BankruptcyScopeCount":{"properties":{"code":{"type":"string","title":"Code"},"name":{"type":"string","title":"Name"},"name_en":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Name En"},"total_12m":{"type":"integer","title":"Total 12M"},"last_30_days":{"type":"integer","title":"Last 30 Days"}},"type":"object","required":["code","name","total_12m","last_30_days"],"title":"BankruptcyScopeCount"},"BankruptcySummaryResponse":{"properties":{"as_of":{"type":"string","title":"As Of"},"periods":{"additionalProperties":{"$ref":"#/components/schemas/BankruptcyPeriodTotals"},"type":"object","title":"Periods","default":{}},"data_since":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Data Since"},"today":{"type":"integer","title":"Today"},"last_7_days":{"type":"integer","title":"Last 7 Days"},"last_30_days":{"type":"integer","title":"Last 30 Days"},"this_month":{"type":"integer","title":"This Month"},"this_year":{"type":"integer","title":"This Year"},"last_12_months":{"type":"integer","title":"Last 12 Months"},"municipalities":{"items":{"$ref":"#/components/schemas/BankruptcyScopeCount"},"type":"array","title":"Municipalities"},"divisions":{"items":{"$ref":"#/components/schemas/BankruptcyScopeCount"},"type":"array","title":"Divisions"}},"type":"object","required":["as_of","today","last_7_days","last_30_days","this_month","this_year","last_12_months","municipalities","divisions"],"title":"BankruptcySummaryResponse"},"BankruptcyTimelinePoint":{"properties":{"start":{"type":"string","title":"Start"},"count":{"type":"integer","title":"Count"},"days_in_bucket":{"type":"integer","title":"Days In Bucket"}},"type":"object","required":["start","count","days_in_bucket"],"title":"BankruptcyTimelinePoint"},"BankruptcyTimelineResponse":{"properties":{"bucket":{"type":"string","title":"Bucket"},"date_from":{"type":"string","title":"Date From"},"date_to":{"type":"string","title":"Date To"},"points":{"items":{"$ref":"#/components/schemas/BankruptcyTimelinePoint"},"type":"array","title":"Points"}},"type":"object","required":["bucket","date_from","date_to","points"],"title":"BankruptcyTimelineResponse"},"BannerAd":{"properties":{"enabled":{"type":"boolean","title":"Enabled","default":false},"type":{"type":"string","title":"Type","default":"image"},"media_url":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Media Url"},"click_url":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Click Url"},"alt_text":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Alt Text"}},"type":"object","title":"BannerAd","description":"Banner advertisement for Premium tier (image or video)."},"BeneficialOwner":{"properties":{"unit_number":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Unit Number","description":"enhedsNummer of the ultimate owner (null for an unresolved company leaf)"},"cvr":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Cvr","description":"CVR, set only when the chain ends at a company we can't resolve further"},"name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Name"},"type":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Type","description":"PERSON | ANDEN_DELTAGER | VIRKSOMHED"},"is_person":{"type":"boolean","title":"Is Person","description":"True for an ultimate individual owner","default":false},"effective_ownership_percent":{"type":"number","title":"Effective Ownership Percent","description":"Effective stake summed across all paths (0.5 = 50%)"},"leaf_reason":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Leaf Reason","description":"Why the chain ends here: person_or_other | no_further_owners | max_depth | cycle"},"paths":{"items":{"items":{"$ref":"#/components/schemas/BeneficialOwnerPathStep"},"type":"array"},"type":"array","title":"Paths","description":"Ownership paths from the company up to this owner"}},"type":"object","required":["effective_ownership_percent"],"title":"BeneficialOwner"},"BeneficialOwnerPathStep":{"properties":{"cvr":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Cvr"},"unit_number":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Unit Number"},"name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Name"},"type":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Type"},"ownership_percent":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Ownership Percent"}},"type":"object","title":"BeneficialOwnerPathStep"},"BeneficialOwnersResponse":{"properties":{"cvr":{"type":"string","title":"Cvr"},"name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Name"},"beneficial_owners":{"items":{"$ref":"#/components/schemas/BeneficialOwner"},"type":"array","title":"Beneficial Owners"},"max_depth_used":{"type":"integer","title":"Max Depth Used"},"truncated":{"type":"boolean","title":"Truncated","default":false}},"type":"object","required":["cvr","beneficial_owners","max_depth_used"],"title":"BeneficialOwnersResponse"},"BlocklistAddRequest":{"properties":{"name":{"type":"string","title":"Name","description":"Name to block (normalized automatically)"},"reason":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Reason"}},"type":"object","required":["name"],"title":"BlocklistAddRequest"},"Body_approve_oauth2_approve_post":{"properties":{"client_id":{"type":"string","title":"Client Id"},"redirect_uri":{"type":"string","title":"Redirect Uri"},"scope":{"type":"string","title":"Scope","default":"read:companies"},"state":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"State"},"code_challenge":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Code Challenge"},"code_challenge_method":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Code Challenge Method"},"resource":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Resource"}},"type":"object","required":["client_id","redirect_uri"],"title":"Body_approve_oauth2_approve_post"},"Body_create_admin_profile_admin_admin_profiles_post":{"properties":{"cvr":{"type":"string","title":"Cvr"},"file":{"type":"string","contentMediaType":"application/octet-stream","title":"File"}},"type":"object","required":["cvr","file"],"title":"Body_create_admin_profile_admin_admin_profiles_post"},"Body_revoke_oauth2_revoke_post":{"properties":{"token":{"type":"string","title":"Token"},"client_id":{"type":"string","title":"Client Id"},"client_secret":{"type":"string","title":"Client Secret"}},"type":"object","required":["token","client_id","client_secret"],"title":"Body_revoke_oauth2_revoke_post"},"Body_token_oauth2_token_post":{"properties":{"grant_type":{"type":"string","title":"Grant Type"},"code":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Code"},"redirect_uri":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Redirect Uri"},"refresh_token":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Refresh Token"},"client_id":{"type":"string","title":"Client Id"},"client_secret":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Client Secret"},"code_verifier":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Code Verifier"},"resource":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Resource"}},"type":"object","required":["grant_type","client_id"],"title":"Body_token_oauth2_token_post"},"Body_upload_document_v1_upload_document_post":{"properties":{"file":{"type":"string","contentMediaType":"application/octet-stream","title":"File"},"folder":{"type":"string","title":"Folder","default":"documents"},"identifier":{"type":"string","title":"Identifier","default":"general"}},"type":"object","required":["file"],"title":"Body_upload_document_v1_upload_document_post"},"Body_upload_image_v1_upload_image_post":{"properties":{"file":{"type":"string","contentMediaType":"application/octet-stream","title":"File"},"folder":{"type":"string","title":"Folder","default":"uploads"},"identifier":{"type":"string","title":"Identifier","default":"general"}},"type":"object","required":["file"],"title":"Body_upload_image_v1_upload_image_post"},"Body_upload_video_v1_upload_video_post":{"properties":{"file":{"type":"string","contentMediaType":"application/octet-stream","title":"File"},"folder":{"type":"string","title":"Folder","default":"uploads"},"identifier":{"type":"string","title":"Identifier","default":"general"}},"type":"object","required":["file"],"title":"Body_upload_video_v1_upload_video_post"},"BrancheReportAccessResponse":{"properties":{"industry_code":{"type":"string","title":"Industry Code"},"industry_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Industry Name"},"available":{"type":"boolean","title":"Available"},"can_download":{"type":"boolean","title":"Can Download"},"is_pro":{"type":"boolean","title":"Is Pro"},"purchased":{"type":"boolean","title":"Purchased"},"purchase_expires_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Purchase Expires At"},"price_dkk":{"type":"integer","title":"Price Dkk"},"pack_credits":{"type":"integer","title":"Pack Credits","default":0}},"type":"object","required":["industry_code","available","can_download","is_pro","purchased","price_dkk"],"title":"BrancheReportAccessResponse","description":"Whether the current user can download a report for an industry."},"BrancheReportCheckoutRequest":{"properties":{"ga_client_id":{"anyOf":[{"type":"string","maxLength":64},{"type":"null"}],"title":"Ga Client Id","description":"GA4 client id from the _ga cookie (analytics attribution)"},"ga_session_id":{"anyOf":[{"type":"string","maxLength":32},{"type":"null"}],"title":"Ga Session Id","description":"GA4 session id from the _ga_<container> cookie (session attribution)"},"industry_code":{"type":"string","title":"Industry Code","description":"6-digit NACE industry code the report covers"},"success_url":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Success Url","description":"Redirect URL on success"},"cancel_url":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Cancel Url","description":"Redirect URL on cancel"}},"type":"object","required":["industry_code"],"title":"BrancheReportCheckoutRequest","description":"Request to create a one-off industry report checkout session."},"BrancheReportCheckoutResponse":{"properties":{"checkout_url":{"type":"string","title":"Checkout Url"}},"type":"object","required":["checkout_url"],"title":"BrancheReportCheckoutResponse","description":"Response with industry report checkout URL."},"BrancheReportHistoryItem":{"properties":{"industry_code":{"type":"string","title":"Industry Code"},"industry_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Industry Name"},"last_generated_at":{"type":"string","format":"date-time","title":"Last Generated At"},"count":{"type":"integer","title":"Count"},"can_redownload":{"type":"boolean","title":"Can Redownload"},"purchase_expires_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Purchase Expires At"}},"type":"object","required":["industry_code","last_generated_at","count","can_redownload"],"title":"BrancheReportHistoryItem"},"BrancheReportHistoryResponse":{"properties":{"items":{"items":{"$ref":"#/components/schemas/BrancheReportHistoryItem"},"type":"array","title":"Items"}},"type":"object","required":["items"],"title":"BrancheReportHistoryResponse"},"BuildingInfo":{"properties":{"usage_code":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Usage Code"},"year_built":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Year Built"},"year_renovated":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Year Renovated"},"total_area":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Total Area"},"residential_area":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Residential Area"},"commercial_area":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Commercial Area"},"floors":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Floors"},"heating_installation":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Heating Installation"},"heating_source":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Heating Source"},"wall_material":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Wall Material"},"roof_material":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Roof Material"}},"type":"object","title":"BuildingInfo","description":"Building data from BBR enrichment."},"BuildingPolygon":{"properties":{"geometry":{"$ref":"#/components/schemas/GeoPolygon"},"status":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Status","description":"GeoDanmark building status","examples":["Anlagt"]}},"type":"object","required":["geometry"],"title":"BuildingPolygon","description":"A GeoDanmark building footprint on the property's parcels."},"BulkAddCompaniesRequest":{"properties":{"cvrs":{"items":{"type":"string"},"type":"array","maxItems":5000,"minItems":1,"title":"Cvrs"}},"type":"object","required":["cvrs"],"title":"BulkAddCompaniesRequest","description":"Request to add many companies to a list at once (paste/CSV import).\n\nInput is free-form lines/tokens; the endpoint extracts CVR numbers, so the\nclient can pass raw pasted text split into tokens."},"BulkAddCompaniesResult":{"properties":{"added":{"type":"integer","title":"Added"},"already_in_list":{"type":"integer","title":"Already In List"},"not_found":{"items":{"type":"string"},"type":"array","title":"Not Found","default":[]},"invalid":{"items":{"type":"string"},"type":"array","title":"Invalid","default":[]},"total_in_list":{"type":"integer","title":"Total In List"}},"type":"object","required":["added","already_in_list","total_in_list"],"title":"BulkAddCompaniesResult","description":"Outcome of a bulk add."},"BulkAddResponse":{"properties":{"added":{"type":"integer","title":"Added"},"already_subscribed":{"type":"integer","title":"Already Subscribed"}},"type":"object","required":["added","already_subscribed"],"title":"BulkAddResponse"},"BulkCreateRequest":{"properties":{"cvrs":{"items":{"type":"string"},"type":"array","maxItems":2000,"minItems":1,"title":"Cvrs"},"source":{"anyOf":[{"type":"string","maxLength":120},{"type":"null"}],"title":"Source"}},"type":"object","required":["cvrs"],"title":"BulkCreateRequest"},"BulkCreateResult":{"properties":{"created":{"type":"integer","title":"Created"},"already_present":{"type":"integer","title":"Already Present"},"not_found":{"items":{"type":"string"},"type":"array","title":"Not Found","default":[]},"invalid":{"items":{"type":"string"},"type":"array","title":"Invalid","default":[]}},"type":"object","required":["created","already_present"],"title":"BulkCreateResult"},"BulkFromListRequest":{"properties":{"list_id":{"type":"string","title":"List Id"}},"type":"object","required":["list_id"],"title":"BulkFromListRequest"},"BulkRemoveResponse":{"properties":{"removed":{"type":"integer","title":"Removed"}},"type":"object","required":["removed"],"title":"BulkRemoveResponse"},"BundleProperty":{"properties":{"bfe_number":{"type":"integer","title":"Bfe Number"},"address":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Address"}},"type":"object","required":["bfe_number"],"title":"BundleProperty","description":"A sibling property in the same transaction bundle."},"BusinessDemographyResponse":{"properties":{"dataset":{"type":"string","title":"Dataset"},"source_url":{"type":"string","title":"Source Url"},"source_updated_at":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Source Updated At"},"fetched_at":{"type":"string","format":"date-time","title":"Fetched At"},"nace":{"type":"string","title":"Nace"},"year":{"type":"integer","title":"Year"},"geos":{"items":{"type":"string"},"type":"array","title":"Geos"},"rates":{"additionalProperties":{"$ref":"#/components/schemas/DemographyRates"},"type":"object","title":"Rates"}},"type":"object","required":["dataset","source_url","fetched_at","nace","year","geos","rates"],"title":"BusinessDemographyResponse"},"BusinessDynamicsResponse":{"properties":{"dataset":{"type":"string","title":"Dataset"},"source_url":{"type":"string","title":"Source Url"},"source_updated_at":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Source Updated At"},"fetched_at":{"type":"string","format":"date-time","title":"Fetched At"},"nace":{"type":"string","title":"Nace"},"unit":{"type":"string","title":"Unit"},"adjustment":{"type":"string","title":"Adjustment"},"geos":{"items":{"type":"string"},"type":"array","title":"Geos"},"quarters":{"items":{"type":"string"},"type":"array","title":"Quarters"},"series":{"additionalProperties":{"additionalProperties":{"items":{"anyOf":[{"type":"number"},{"type":"null"}]},"type":"array"},"type":"object"},"type":"object","title":"Series"}},"type":"object","required":["dataset","source_url","fetched_at","nace","unit","adjustment","geos","quarters","series"],"title":"BusinessDynamicsResponse"},"CDSPillar":{"properties":{"key":{"type":"string","title":"Key","description":"Pillar key","examples":["financial_position","earnings","conduct_filings","stability","insider_track_record"]},"score":{"type":"number","title":"Score","description":"Points earned on this pillar"},"max":{"type":"number","title":"Max","description":"Maximum points available on this pillar for this company"}},"type":"object","required":["key","score","max"],"title":"CDSPillar","description":"Coarse pillar score. Only pillars applicable to the company appear\n(structurally absent data classes are renormalized away, not zero-filled).\nSub-factor detail is deliberately not exposed (methodology: public surfaces\nshow the coarse pillar breakdown only)."},"CDSSummary":{"properties":{"score":{"anyOf":[{"type":"integer","maximum":100.0,"minimum":-1.0},{"type":"null"}],"title":"Score","description":"Score from 0-100 (higher is better). -1 = a score exists but is not published yet"},"rating":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Rating","description":"Rating category","examples":["excellent","good","moderate","high_risk","critical"]},"confidence":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Confidence","description":"How much data the score rests on: high = recent accounts, audit and ownership data on file; low = mostly registry data","examples":["high","medium","low"]},"credit_recommendation":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Credit Recommendation","description":"Trade-credit recommendation: status (recommended/zero_advised/no_recommendation), limit_dkk, payment_terms_days (0 = prepayment), basis, reason"},"has_score":{"type":"boolean","title":"Has Score","description":"Whether a score has been calculated for this company","default":false},"not_scored_reason":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Not Scored Reason","description":"Machine-readable reason when no score is disclosed. 'company_dissolved' = the company has ceased; no credit assessment is made or disclosed for dissolved companies."},"calculated_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Calculated At","description":"When the score was last calculated"},"pillars":{"anyOf":[{"items":{"$ref":"#/components/schemas/CDSPillar"},"type":"array"},{"type":"null"}],"title":"Pillars","description":"Coarse per-pillar breakdown (only on the dedicated /companies/{cvr}/cds endpoint)"}},"type":"object","title":"CDSSummary","description":"CDS (CompanyData Score) - proprietary credit/health score for companies."},"CalculatePriceRequest":{"properties":{"user_email":{"type":"string","title":"User Email"},"tier_id":{"type":"string","title":"Tier Id"},"billing_interval":{"type":"string","title":"Billing Interval"},"promo_code":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Promo Code"}},"type":"object","required":["user_email","tier_id","billing_interval"],"title":"CalculatePriceRequest"},"CancelSubscriptionRequest":{"properties":{"reason":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Reason","description":"Optional cancellation reason for retention analytics"}},"type":"object","title":"CancelSubscriptionRequest","description":"Request to cancel the current subscription at period end."},"CashFlowStatement":{"properties":{"operating_cash_flow":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Operating Cash Flow","description":"Cash flow from operating activities"},"investing_cash_flow":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Investing Cash Flow","description":"Cash flow from investing activities"},"financing_cash_flow":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Financing Cash Flow","description":"Cash flow from financing activities"},"net_cash_change":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Net Cash Change","description":"Net increase/decrease in cash"},"capex":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Capex","description":"Capital expenditures (purchase of PP&E)"},"dividends_paid":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Dividends Paid","description":"Dividends paid to shareholders"}},"type":"object","title":"CashFlowStatement","description":"Key figures from the cash flow statement (pengestrømsopgørelse). All amounts in DKK."},"ChangePasswordRequest":{"properties":{"current_password":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Current Password"},"new_password":{"type":"string","title":"New Password"}},"type":"object","required":["new_password"],"title":"ChangePasswordRequest","description":"Request to change password."},"ChangePasswordResponse":{"properties":{"success":{"type":"boolean","title":"Success"},"message":{"type":"string","title":"Message"}},"type":"object","required":["success","message"],"title":"ChangePasswordResponse","description":"Response for password change."},"CheckoutResponse":{"properties":{"checkout_url":{"type":"string","title":"Checkout Url"}},"type":"object","required":["checkout_url"],"title":"CheckoutResponse","description":"Response with checkout URL."},"ClaimCompanyInfo":{"properties":{"name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Name"},"status":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Status"},"address":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Address"},"website":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Website"},"industry":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Industry"},"founded_date":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Founded Date"}},"type":"object","required":["name","status","address","website","industry","founded_date"],"title":"ClaimCompanyInfo"},"ClaimCreateRequest":{"properties":{"cvr":{"type":"string","title":"Cvr"},"name":{"type":"string","title":"Name"},"role":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Role"}},"type":"object","required":["cvr","name"],"title":"ClaimCreateRequest","description":"Request to start a new claim.\n\nThe claim is bound to the logged-in user; verification uses their verified\naccount email, so no email is accepted from the client."},"ClaimCreateResponse":{"properties":{"claim_id":{"type":"string","title":"Claim Id"},"cvr":{"type":"string","title":"Cvr"},"verification_method":{"$ref":"#/components/schemas/VerificationMethod"},"next_step":{"type":"string","title":"Next Step"},"message":{"type":"string","title":"Message"}},"type":"object","required":["claim_id","cvr","verification_method","next_step","message"],"title":"ClaimCreateResponse","description":"Response after starting a claim."},"ClaimDetailResponse":{"properties":{"claim_id":{"type":"string","title":"Claim Id"},"cvr":{"type":"string","title":"Cvr"},"status":{"type":"string","title":"Status"},"created_at":{"type":"string","format":"date-time","title":"Created At"},"updated_at":{"type":"string","format":"date-time","title":"Updated At"},"requester":{"$ref":"#/components/schemas/ClaimRequesterInfo"},"verification":{"$ref":"#/components/schemas/ClaimVerificationInfo"},"company":{"anyOf":[{"$ref":"#/components/schemas/ClaimCompanyInfo"},{"type":"null"}]},"risk_signals":{"items":{"type":"string"},"type":"array","title":"Risk Signals"},"email_analysis":{"anyOf":[{"$ref":"#/components/schemas/EmailAnalysis"},{"type":"null"}]}},"type":"object","required":["claim_id","cvr","status","created_at","updated_at","requester","verification","company","risk_signals"],"title":"ClaimDetailResponse"},"ClaimGeoInfo":{"properties":{"country_code":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Country Code"},"country_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Country Name"},"city":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"City"},"latitude":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Latitude"},"longitude":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Longitude"}},"type":"object","title":"ClaimGeoInfo","description":"Best-effort IP geolocation. Null fields just mean MaxMind didn't have data."},"ClaimListItem":{"properties":{"claim_id":{"type":"string","title":"Claim Id"},"cvr":{"type":"string","title":"Cvr"},"company_name":{"type":"string","title":"Company Name"},"requester_name":{"type":"string","title":"Requester Name"},"requester_email":{"type":"string","title":"Requester Email"},"verification_method":{"type":"string","title":"Verification Method"},"status":{"type":"string","title":"Status"},"awaiting_user":{"type":"boolean","title":"Awaiting User","default":false},"requested_at":{"type":"string","format":"date-time","title":"Requested At"},"has_evidence":{"type":"boolean","title":"Has Evidence"}},"type":"object","required":["claim_id","cvr","company_name","requester_name","requester_email","verification_method","status","requested_at","has_evidence"],"title":"ClaimListItem"},"ClaimPriceSetCreate":{"properties":{"name":{"type":"string","title":"Name"},"prices":{"additionalProperties":{"additionalProperties":{"type":"integer"},"type":"object"},"type":"object","title":"Prices"},"activate":{"type":"boolean","title":"Activate","default":false}},"type":"object","required":["name","prices"],"title":"ClaimPriceSetCreate","description":"Request to create a new claim price set."},"ClaimPriceSetResponse":{"properties":{"id":{"type":"string","title":"Id"},"name":{"type":"string","title":"Name"},"is_active":{"type":"boolean","title":"Is Active"},"created_at":{"type":"string","format":"date-time","title":"Created At"},"activated_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Activated At"},"deactivated_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Deactivated At"},"created_by":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Created By"},"prices":{"additionalProperties":{"$ref":"#/components/schemas/ClaimTierPrices"},"type":"object","title":"Prices"}},"type":"object","required":["id","name","is_active","created_at","prices"],"title":"ClaimPriceSetResponse","description":"Response with claim price set data."},"ClaimPriceSetsListResponse":{"properties":{"price_sets":{"items":{"$ref":"#/components/schemas/ClaimPriceSetResponse"},"type":"array","title":"Price Sets"}},"type":"object","required":["price_sets"],"title":"ClaimPriceSetsListResponse","description":"Response with list of claim price sets."},"ClaimPricingResponse":{"properties":{"tiers":{"items":{"$ref":"#/components/schemas/ClaimPricingTier"},"type":"array","title":"Tiers"}},"type":"object","required":["tiers"],"title":"ClaimPricingResponse","description":"Claim pricing response."},"ClaimPricingTier":{"properties":{"tier_id":{"type":"string","title":"Tier Id"},"name":{"type":"string","title":"Name"},"price_monthly_dkk":{"type":"integer","title":"Price Monthly Dkk"},"price_yearly_dkk":{"type":"integer","title":"Price Yearly Dkk"}},"type":"object","required":["tier_id","name","price_monthly_dkk","price_yearly_dkk"],"title":"ClaimPricingTier","description":"Claim pricing tier info."},"ClaimRequesterInfo":{"properties":{"user_id":{"type":"string","title":"User Id"},"name":{"type":"string","title":"Name"},"email":{"type":"string","title":"Email"},"role":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Role"},"ip_address":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Ip Address"},"ip_geo":{"anyOf":[{"$ref":"#/components/schemas/ClaimGeoInfo"},{"type":"null"}]},"user_agent":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"User Agent"},"requested_at":{"type":"string","format":"date-time","title":"Requested At"},"account_created_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Account Created At"}},"type":"object","required":["user_id","name","email","role","ip_address","user_agent","requested_at","account_created_at"],"title":"ClaimRequesterInfo"},"ClaimStatsResponse":{"properties":{"total_claims":{"type":"integer","title":"Total Claims"},"pending_claims":{"type":"integer","title":"Pending Claims"},"awaiting_user_claims":{"type":"integer","title":"Awaiting User Claims","default":0},"expired_claims":{"type":"integer","title":"Expired Claims","default":0},"verified_claims":{"type":"integer","title":"Verified Claims"},"rejected_claims":{"type":"integer","title":"Rejected Claims"},"revoked_claims":{"type":"integer","title":"Revoked Claims"},"open_disputes":{"type":"integer","title":"Open Disputes"},"free_tier":{"type":"integer","title":"Free Tier"},"business_tier":{"type":"integer","title":"Business Tier"},"business_plus_tier":{"type":"integer","title":"Business Plus Tier"}},"type":"object","required":["total_claims","pending_claims","verified_claims","rejected_claims","revoked_claims","open_disputes","free_tier","business_tier","business_plus_tier"],"title":"ClaimStatsResponse"},"ClaimStatus":{"type":"string","enum":["pending","verified","rejected","revoked","expired"],"title":"ClaimStatus","description":"Status of a claim request."},"ClaimStatusResponse":{"properties":{"claim_id":{"type":"string","title":"Claim Id"},"cvr":{"type":"string","title":"Cvr"},"status":{"$ref":"#/components/schemas/ClaimStatus"},"verification_method":{"anyOf":[{"$ref":"#/components/schemas/VerificationMethod"},{"type":"null"}]},"rejection_reason":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Rejection Reason"},"created_at":{"type":"string","format":"date-time","title":"Created At"}},"type":"object","required":["claim_id","cvr","status","created_at"],"title":"ClaimStatusResponse","description":"Response with claim status."},"ClaimSubscription":{"properties":{"tier":{"$ref":"#/components/schemas/ClaimTier","default":"free"},"stripe_subscription_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Stripe Subscription Id"},"stripe_customer_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Stripe Customer Id"},"current_period_start":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Current Period Start"},"current_period_end":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Current Period End"},"cancel_at_period_end":{"type":"boolean","title":"Cancel At Period End","default":false}},"type":"object","title":"ClaimSubscription","description":"Subscription information for a claimed profile."},"ClaimTier":{"type":"string","enum":["free","business","business_plus"],"title":"ClaimTier","description":"Subscription tier for claimed profiles."},"ClaimTierPrices":{"properties":{"monthly":{"$ref":"#/components/schemas/StripePrice"},"yearly":{"$ref":"#/components/schemas/StripePrice"}},"type":"object","required":["monthly","yearly"],"title":"ClaimTierPrices","description":"Prices for a single claim tier (monthly and yearly)."},"ClaimVerificationInfo":{"properties":{"method":{"type":"string","title":"Method"},"verified_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Verified At"},"verified_by":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Verified By"},"rejection_reason":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Rejection Reason"},"evidence_documents":{"items":{"additionalProperties":true,"type":"object"},"type":"array","title":"Evidence Documents"},"email_sent_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Email Sent At"}},"type":"object","required":["method","verified_at","verified_by","rejection_reason","evidence_documents"],"title":"ClaimVerificationInfo"},"ClaimedProfileContent":{"properties":{"logo_url":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Logo Url"},"description":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Description"},"description_en":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Description En"},"social_links":{"$ref":"#/components/schemas/SocialLinks"},"contact_override":{"anyOf":[{"$ref":"#/components/schemas/ContactOverride"},{"type":"null"}]},"website_override":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Website Override"},"photos":{"items":{"$ref":"#/components/schemas/ProfilePhoto"},"type":"array","title":"Photos"},"video_url":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Video Url"},"promotional_cta":{"anyOf":[{"$ref":"#/components/schemas/PromotionalCTA"},{"type":"null"}]},"job_listings":{"items":{"$ref":"#/components/schemas/JobListing"},"type":"array","title":"Job Listings"},"hide_similar_companies":{"type":"boolean","title":"Hide Similar Companies","default":false},"contact_form_enabled":{"type":"boolean","title":"Contact Form Enabled","default":false},"banner_ad":{"anyOf":[{"$ref":"#/components/schemas/BannerAd"},{"type":"null"}]}},"type":"object","title":"ClaimedProfileContent","description":"The actual profile content that can be edited."},"ClaimsListResponse":{"properties":{"claims":{"items":{"$ref":"#/components/schemas/ClaimListItem"},"type":"array","title":"Claims"},"total":{"type":"integer","title":"Total"}},"type":"object","required":["claims","total"],"title":"ClaimsListResponse"},"ClientRegistrationRequest":{"properties":{"redirect_uris":{"items":{"type":"string"},"type":"array","title":"Redirect Uris"},"client_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Client Name"},"grant_types":{"anyOf":[{"items":{"type":"string"},"type":"array"},{"type":"null"}],"title":"Grant Types"},"response_types":{"anyOf":[{"items":{"type":"string"},"type":"array"},{"type":"null"}],"title":"Response Types"},"token_endpoint_auth_method":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Token Endpoint Auth Method"},"scope":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Scope"}},"type":"object","required":["redirect_uris"],"title":"ClientRegistrationRequest","description":"RFC 7591 Dynamic Client Registration request (subset we honor)."},"ClimateRiskResponse":{"properties":{"version":{"type":"integer","title":"Version"},"bluespot_at_point":{"type":"boolean","title":"Bluespot At Point"},"bluespot_fill_mm":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Bluespot Fill Mm"},"bluespot_share_10m":{"type":"number","title":"Bluespot Share 10M","default":0.0},"havvand_flood_level_m":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Havvand Flood Level M"},"assessed_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Assessed At"}},"type":"object","required":["version","bluespot_at_point"],"title":"ClimateRiskResponse","description":"Flood risk assessment for a property (DHM bluespot + havvand paa land)."},"Company":{"properties":{"cvr":{"type":"string","title":"Cvr","description":"8-digit CVR number (unique company identifier)","examples":["12345678"]},"name":{"type":"string","title":"Name","description":"Official company name"},"name_valid_from":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Name Valid From","description":"Date when current name became valid"},"name_history":{"items":{"$ref":"#/components/schemas/NameHistoryEntry"},"type":"array","title":"Name History","description":"Full name history with validity periods"},"secondary_names":{"items":{"type":"string"},"type":"array","title":"Secondary Names","description":"Alternative/trade names (binavne)"},"status":{"type":"string","title":"Status","description":"Company status","default":"active","examples":["active","dissolved","under_bankruptcy","liquidation"]},"cvr_status":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Cvr Status","description":"Raw CVR status (sammensatStatus) behind `status`, which says how a company ended or what proceeding it is in","examples":["NORMAL","OPLØSTEFTERKONKURS","TVANGSOPLØST","UNDERKONKURS"]},"company_type":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Company Type","description":"Short company type code","examples":["A/S","ApS","IVS","K/S","I/S","ENK"]},"company_type_long":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Company Type Long","description":"Full company type description","examples":["Aktieselskab","Anpartsselskab"]},"company_type_code":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Company Type Code","description":"CVR company form code (virksomhedsformkode)","examples":[80,60,10]},"registration_number":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Registration Number","description":"Registration number (if different from CVR)"},"founded_date":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Founded Date","description":"Date company was founded/registered"},"start_date":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Start Date","description":"Date company started operations"},"ceased_date":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Ceased Date","description":"Date company ceased operations (ophørsdato)"},"bankruptcy_date":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Bankruptcy Date","description":"Date the probate court declared the company bankrupt (start of its latest UNDER KONKURS status in CVR); also set after the company was dissolved after the bankruptcy"},"address":{"anyOf":[{"$ref":"#/components/schemas/CompanyAddress"},{"type":"null"}],"description":"Registered company address"},"contact":{"anyOf":[{"$ref":"#/components/schemas/CvrContact"},{"type":"null"}],"description":"Contact information (phone, email, website)"},"claimed_contact":{"anyOf":[{"$ref":"#/components/schemas/CompanyContact"},{"type":"null"}],"description":"Contact information provided by the verified owner of the claimed company profile — takes display precedence over the CVR-registered `contact`"},"industry":{"anyOf":[{"$ref":"#/components/schemas/CompanyIndustry"},{"type":"null"}],"description":"Industry classification (DB07 codes)"},"employees":{"anyOf":[{"$ref":"#/components/schemas/CompanyEmployees"},{"type":"null"}],"description":"Current employee count from CVR: the latest monthly headcount (month and year given), else the last yearly figure"},"employees_monthly":{"anyOf":[{"$ref":"#/components/schemas/CompanyEmployees"},{"type":"null"}],"description":"Latest monthly headcount from CVR (payroll-based, the series CVR still updates)"},"employees_yearly":{"anyOf":[{"$ref":"#/components/schemas/CompanyEmployees"},{"type":"null"}],"description":"CVR's yearly employment series, which ends with 2018"},"capital":{"anyOf":[{"$ref":"#/components/schemas/CompanyCapital"},{"type":"null"}],"description":"Registered share capital"},"purpose":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Purpose","description":"Company purpose/objective from articles of association"},"participants":{"items":{"$ref":"#/components/schemas/CompanyParticipant"},"type":"array","title":"Participants","description":"Basic participant list (legacy)"},"owners":{"items":{"$ref":"#/components/schemas/CompanyOwner"},"type":"array","title":"Owners","description":"Current owners with ownership percentages"},"board_members":{"items":{"$ref":"#/components/schemas/CompanyBoardMember"},"type":"array","title":"Board Members","description":"Board of directors (bestyrelse)"},"directors":{"items":{"$ref":"#/components/schemas/CompanyDirector"},"type":"array","title":"Directors","description":"Executive management (direktion)"},"founders":{"items":{"$ref":"#/components/schemas/CompanyFounder"},"type":"array","title":"Founders","description":"Company founders (stiftere)"},"p_units":{"items":{"type":"string"},"type":"array","title":"P Units","description":"List of P-unit numbers (production units)"},"advertising_protected":{"type":"boolean","title":"Advertising Protected","description":"Whether company is protected from advertising (reklamebeskyttet)","default":false},"location":{"anyOf":[{"$ref":"#/components/schemas/app__models__company__GeoLocation"},{"type":"null"}],"description":"Geocoded coordinates from DAWA"},"logo_url":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Logo Url","description":"Company logo URL if available"},"stock_listing":{"anyOf":[{"$ref":"#/components/schemas/StockListing"},{"type":"null"}],"description":"Present when the company is listed on Nasdaq Copenhagen (primary share class)"},"property_summary":{"anyOf":[{"$ref":"#/components/schemas/PropertySummary"},{"type":"null"}],"description":"Aggregated property ownership summary"},"contact_enrichment":{"anyOf":[{"$ref":"#/components/schemas/ContactEnrichmentSummary"},{"type":"null"}],"description":"Availability summary for enriched contact data (counts shown to all; values gated to Pro)"},"noindex":{"type":"boolean","title":"Noindex","description":"True when the company profile page should not be indexed by search engines","default":false},"meta":{"$ref":"#/components/schemas/CompanyMeta","description":"Record metadata"}},"type":"object","required":["cvr","name"],"title":"Company","description":"Full company details from the Danish CVR registry."},"CompanyAddress":{"properties":{"address_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Address Id","description":"DAWA adgangsadresse ID for direct geocoding lookup"},"street_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Street Name","description":"Street name (vejnavn)"},"street_code":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Street Code","description":"Street code, unique per municipality (vejkode)"},"house_number":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"House Number","description":"House number (husnummerFra)"},"house_number_to":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"House Number To","description":"House number end for address ranges"},"house_letter":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"House Letter","description":"Letter suffix, e.g. 'A', 'B'"},"house_letter_to":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"House Letter To","description":"Letter suffix end for ranges"},"floor":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Floor","description":"Floor (etage), e.g. 'st', '1', '2'"},"door":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Door","description":"Door identifier: 'th' (right), 'tv' (left), 'mf' (middle)"},"postal_code":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Postal Code","description":"4-digit Danish postal code","examples":["1000","2100"]},"postal_district":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Postal District","description":"Postal district name","examples":["København K","Aarhus C"]},"town_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Town Name","description":"Town name for rural areas (bynavn)"},"care_of":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Care Of","description":"c/o name if applicable"},"po_box":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Po Box","description":"P.O. box number"},"free_text":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Free Text","description":"Free text address (typically for foreign addresses)"},"country_code":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Country Code","description":"ISO 3166-1 alpha-2 country code","default":"DK"},"municipality_code":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Municipality Code","description":"3-digit Danish municipality code","examples":["101","751"]},"municipality_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Municipality Name","description":"Municipality name","examples":["København","Aarhus"]},"street":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Street","description":"Formatted street address for display","examples":["Rådhuspladsen 1"]},"city":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"City","description":"City name (same as postal_district)"}},"type":"object","title":"CompanyAddress","description":"Danish address with all CVR fields preserved for accurate geocoding."},"CompanyAgeInsight":{"properties":{"category":{"type":"string","title":"Category","description":"Age category: new, established, well_established"},"years":{"type":"integer","title":"Years","description":"Company age in years"}},"type":"object","required":["category","years"],"title":"CompanyAgeInsight","description":"Company age insight based on founding date."},"CompanyBoardMember":{"properties":{"unit_number":{"type":"integer","title":"Unit Number","description":"CVR unit number for lookups"},"name":{"type":"string","title":"Name","description":"Board member name"},"type":{"type":"string","title":"Type","description":"Type: PERSON or VIRKSOMHED"},"cvr":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Cvr","description":"CVR number if board member is a company"},"function":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Function","description":"Board function","examples":["Bestyrelsesformand","Bestyrelsesmedlem","Næstformand"]},"role":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Role","description":"Same as function (for compatibility)"},"valid_from":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Valid From","description":"Date when board membership started"},"valid_to":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Valid To","description":"Date when board membership ended (null = current)"}},"type":"object","required":["unit_number","name","type"],"title":"CompanyBoardMember","description":"Board member (bestyrelse) information."},"CompanyCapital":{"properties":{"amount":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Amount","description":"Share capital amount","examples":[500000]},"currency":{"type":"string","title":"Currency","description":"Currency code (typically DKK)","default":"DKK"}},"type":"object","title":"CompanyCapital","description":"Registered share capital."},"CompanyClimateRiskResponse":{"properties":{"total_properties":{"type":"integer","title":"Total Properties"},"assessed_properties":{"type":"integer","title":"Assessed Properties"},"bluespot_count":{"type":"integer","title":"Bluespot Count"},"havvand_count":{"type":"integer","title":"Havvand Count"},"properties":{"items":{"$ref":"#/components/schemas/PropertyClimateSummary"},"type":"array","title":"Properties"}},"type":"object","required":["total_properties","assessed_properties","bluespot_count","havvand_count","properties"],"title":"CompanyClimateRiskResponse","description":"Flood risk aggregated over a company's actively owned properties."},"CompanyContact":{"properties":{"phone":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Phone","description":"Phone number","examples":["+45 12345678"]},"email":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Email","description":"Email address"},"website":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Website","description":"Website URL"}},"type":"object","title":"CompanyContact","description":"Company contact information."},"CompanyCourtHearingsResponse":{"properties":{"cvr":{"type":"string","title":"Cvr"},"total":{"type":"integer","title":"Total"},"hearings":{"items":{"$ref":"#/components/schemas/CourtHearingItem"},"type":"array","title":"Hearings"},"note":{"type":"string","title":"Note"}},"type":"object","required":["cvr","total","hearings","note"],"title":"CompanyCourtHearingsResponse"},"CompanyDirector":{"properties":{"unit_number":{"type":"integer","title":"Unit Number","description":"CVR unit number for lookups"},"name":{"type":"string","title":"Name","description":"Director name"},"type":{"type":"string","title":"Type","description":"Type: PERSON or VIRKSOMHED"},"cvr":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Cvr","description":"CVR number if director is a company"},"function":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Function","description":"Director function","examples":["Direktør","Administrerende direktør"]},"role":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Role","description":"Same as function (for compatibility)"},"valid_from":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Valid From","description":"Date when directorship started"},"valid_to":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Valid To","description":"Date when directorship ended (null = current)"}},"type":"object","required":["unit_number","name","type"],"title":"CompanyDirector","description":"Director/management (direktion) information."},"CompanyEInvoicingResponse":{"properties":{"cvr":{"type":"string","title":"Cvr"},"can_receive_invoice":{"type":"boolean","title":"Can Receive Invoice","description":"True when at least one active endpoint accepts invoices"},"ean_count":{"type":"integer","title":"Ean Count","description":"Active EAN numbers that accept invoices"},"invoice_formats":{"items":{"type":"string"},"type":"array","title":"Invoice Formats","description":"Invoice formats accepted by at least one active endpoint"},"total":{"type":"integer","title":"Total","description":"Endpoints matching the filter, across all pages"},"limit":{"type":"integer","title":"Limit"},"offset":{"type":"integer","title":"Offset"},"endpoints":{"items":{"$ref":"#/components/schemas/EInvoicingEndpoint"},"type":"array","title":"Endpoints","description":"One page: active first, EAN endpoints before CVR endpoints, then by name"},"source":{"type":"string","title":"Source","description":"Data source, refreshed daily","default":"Peppol Directory"}},"type":"object","required":["cvr","can_receive_invoice","ean_count","total","limit","offset","endpoints"],"title":"CompanyEInvoicingResponse"},"CompanyEmployees":{"properties":{"count":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Count","description":"Exact employee count (if available)","examples":[25]},"interval":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Interval","description":"Employee count interval","examples":["10-19","20-49","50-99"]},"full_time_equivalent":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Full Time Equivalent","description":"Full-time equivalent (FTE) count"},"including_owners":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Including Owners","description":"Employee count including owners"},"year":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Year","description":"Year the employee data was reported","examples":[2024]},"month":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Month","description":"Month of the figure (monthly series only)","examples":[7]}},"type":"object","title":"CompanyEmployees","description":"Employee count information from CVR."},"CompanyFinancialsResponse":{"properties":{"cvr":{"type":"string","title":"Cvr","description":"CVR number of the company","examples":["12345678"]},"statements":{"items":{"$ref":"#/components/schemas/FinancialStatement"},"type":"array","title":"Statements","description":"Full financial statements, newest first"},"summary":{"items":{"$ref":"#/components/schemas/FinancialSummary"},"type":"array","title":"Summary","description":"Quick overview of key figures per year"},"meta":{"additionalProperties":true,"type":"object","title":"Meta","description":"Response metadata"}},"type":"object","required":["cvr","statements","summary"],"title":"CompanyFinancialsResponse","description":"Response for company financial history endpoint."},"CompanyFounder":{"properties":{"unit_number":{"type":"integer","title":"Unit Number","description":"CVR unit number for lookups"},"name":{"type":"string","title":"Name","description":"Founder name"},"type":{"type":"string","title":"Type","description":"Type: PERSON or VIRKSOMHED"},"cvr":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Cvr","description":"CVR number if founder is a company"},"valid_from":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Valid From","description":"Date of company founding"}},"type":"object","required":["unit_number","name","type"],"title":"CompanyFounder","description":"Company founder information."},"CompanyIndustry":{"properties":{"primary_code":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Primary Code","description":"Primary 6-digit industry code (DB07)","examples":["620100"]},"primary_text":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Primary Text","description":"Primary industry description","examples":["Computerprogrammering"]},"secondary":{"items":{"$ref":"#/components/schemas/SecondaryIndustry"},"type":"array","title":"Secondary","description":"List of secondary industry codes"}},"type":"object","title":"CompanyIndustry","description":"Industry classification using Danish DB07 codes."},"CompanyInsights":{"properties":{"revenue_trend":{"anyOf":[{"$ref":"#/components/schemas/RevenueTrendInsight"},{"type":"null"}],"description":"Revenue trend insight"},"size":{"anyOf":[{"$ref":"#/components/schemas/CompanySizeInsight"},{"type":"null"}],"description":"Company size insight"},"age":{"anyOf":[{"$ref":"#/components/schemas/CompanyAgeInsight"},{"type":"null"}],"description":"Company age insight; null for a company that has ceased"},"profitability":{"anyOf":[{"$ref":"#/components/schemas/ProfitabilityInsight"},{"type":"null"}],"description":"Profitability insight"}},"type":"object","title":"CompanyInsights","description":"All computed insights for a company."},"CompanyListItemWithDetails":{"properties":{"cvr":{"type":"string","title":"Cvr"},"added_at":{"type":"string","format":"date-time","title":"Added At"},"notes":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Notes"},"name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Name"},"status":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Status"},"company_type":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Company Type"},"industry_code":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Industry Code"},"industry_text":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Industry Text"}},"type":"object","required":["cvr","added_at"],"title":"CompanyListItemWithDetails","description":"A company in a list with company details for display."},"CompanyListResponse":{"properties":{"id":{"type":"string","title":"Id"},"name":{"type":"string","title":"Name"},"description":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Description"},"companies":{"items":{"$ref":"#/components/schemas/CompanyListItemWithDetails"},"type":"array","title":"Companies"},"is_public":{"type":"boolean","title":"Is Public"},"public_slug":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Public Slug"},"created_at":{"type":"string","format":"date-time","title":"Created At"},"updated_at":{"type":"string","format":"date-time","title":"Updated At"}},"type":"object","required":["id","name","companies","is_public","created_at","updated_at"],"title":"CompanyListResponse","description":"Full list with company details."},"CompanyListSummary":{"properties":{"id":{"type":"string","title":"Id"},"name":{"type":"string","title":"Name"},"description":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Description"},"company_count":{"type":"integer","title":"Company Count"},"is_public":{"type":"boolean","title":"Is Public"},"created_at":{"type":"string","format":"date-time","title":"Created At"},"updated_at":{"type":"string","format":"date-time","title":"Updated At"}},"type":"object","required":["id","name","company_count","is_public","created_at","updated_at"],"title":"CompanyListSummary","description":"Summary of a list for list views."},"CompanyLivestockResponse":{"properties":{"total":{"type":"integer","title":"Total"},"total_animals":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Total Animals"},"species":{"items":{"type":"string"},"type":"array","title":"Species","default":[]},"assessed_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Assessed At"},"herds":{"items":{"$ref":"#/components/schemas/LivestockHerd"},"type":"array","title":"Herds","default":[]}},"type":"object","required":["total"],"title":"CompanyLivestockResponse"},"CompanyLogo":{"properties":{"status":{"type":"string","title":"Status","description":"pending | found | not_found | failed"},"url":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Url","description":"Public R2 URL of the normalized PNG (status=found)"},"domain":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Domain","description":"Website domain the icon was fetched from"},"url_source":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Url Source","description":"How the website was resolved","examples":["cvr_website","email_domain","discovered"]},"icon_source":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Icon Source","description":"Which icon won","examples":["apple-touch-icon","link-icon","apple-touch-icon-path","favicon-path"]},"icon_url":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Icon Url"},"width":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Width"},"height":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Height"},"reason":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Reason","description":"Why not_found/failed","examples":["no_website","no_usable_icon","homepage_fetch_failed"]},"error":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Error"},"requested_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Requested At"},"fetched_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Fetched At"}},"type":"object","required":["status"],"title":"CompanyLogo","description":"Scraped-logo state, doubling as the drain-job queue marker.\n\nWritten by logo_service / the fetch_company_logos job. Display always\ngoes through effective_logo_url() — the claimed-profile logo\n(companies.logo_url) wins over the scraped one."},"CompanyMeta":{"properties":{"cvr_updated_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Cvr Updated At","description":"When company data was last synced from CVR"},"geocoded_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Geocoded At","description":"When address was geocoded to coordinates"},"created_at":{"type":"string","format":"date-time","title":"Created At","description":"When record was created in Selskabsbasen"},"updated_at":{"type":"string","format":"date-time","title":"Updated At","description":"When record was last updated"}},"type":"object","title":"CompanyMeta","description":"Metadata about the company record."},"CompanyNewsResponse":{"properties":{"cvr":{"type":"string","title":"Cvr"},"total":{"type":"integer","title":"Total"},"items":{"items":{"$ref":"#/components/schemas/NewsItem"},"type":"array","title":"Items"}},"type":"object","required":["cvr","total","items"],"title":"CompanyNewsResponse"},"CompanyOwner":{"properties":{"unit_number":{"type":"integer","title":"Unit Number","description":"CVR unit number for owner lookups"},"name":{"type":"string","title":"Name","description":"Owner name (person or company)"},"type":{"type":"string","title":"Type","description":"Owner type: PERSON or VIRKSOMHED"},"cvr":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Cvr","description":"CVR number if owner is a company"},"ownership_percent":{"anyOf":[{"type":"number","maximum":1.0,"minimum":0.0},{"type":"null"}],"title":"Ownership Percent","description":"Ownership percentage (0.05 = 5%, 1.0 = 100%)"},"voting_percent":{"anyOf":[{"type":"number","maximum":1.0,"minimum":0.0},{"type":"null"}],"title":"Voting Percent","description":"Voting rights percentage (0.05 = 5%, 1.0 = 100%)"},"valid_from":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Valid From","description":"Date when ownership started"}},"type":"object","required":["unit_number","name","type"],"title":"CompanyOwner","description":"Owner with ownership stake information."},"CompanyParticipant":{"properties":{"name":{"type":"string","title":"Name","description":"Full name of the participant"},"type":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Type","description":"Participant type","examples":["PERSON","VIRKSOMHED"]},"unit_number":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Unit Number","description":"CVR unit number for participant lookups"},"role":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Role","description":"Role category","examples":["DIREKTION","BESTYRELSE"]},"function":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Function","description":"Specific function/title","examples":["Direktør","Bestyrelsesformand"]},"valid_from":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Valid From","description":"Date when this role started"},"valid_to":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Valid To","description":"Date when this role ended (null = current)"}},"type":"object","required":["name"],"title":"CompanyParticipant","description":"Basic participant info embedded in company record."},"CompanyPortfolioResponse":{"properties":{"cvr":{"type":"string","title":"Cvr","description":"CVR number of the owning company"},"owned_companies":{"items":{"$ref":"#/components/schemas/OwnedCompany"},"type":"array","title":"Owned Companies","description":"Companies with ownership stakes"},"meta":{"additionalProperties":true,"type":"object","title":"Meta","description":"Response metadata"}},"type":"object","required":["cvr"],"title":"CompanyPortfolioResponse","description":"Response for companies owned by a company (investment portfolio)."},"CompanyPropertiesResponse":{"properties":{"cvr":{"type":"string","title":"Cvr"},"properties":{"items":{"$ref":"#/components/schemas/PropertyOwnershipResponse"},"type":"array","title":"Properties"},"total":{"type":"integer","title":"Total"},"page":{"type":"integer","title":"Page","default":1},"page_size":{"type":"integer","title":"Page Size","default":50},"pages":{"type":"integer","title":"Pages","default":1},"meta":{"additionalProperties":true,"type":"object","title":"Meta"}},"type":"object","required":["cvr","properties","total"],"title":"CompanyPropertiesResponse","description":"Response model for GET /companies/{cvr}/properties."},"CompanyRef":{"properties":{"cvr":{"type":"string","title":"Cvr"},"name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Name"},"status":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Status"}},"type":"object","required":["cvr"],"title":"CompanyRef"},"CompanyResponse":{"properties":{"data":{"$ref":"#/components/schemas/Company","description":"Full company details"},"financial_summary":{"items":{"$ref":"#/components/schemas/FinancialYearSummary"},"type":"array","title":"Financial Summary","description":"Financial summary for recent years"},"cds":{"anyOf":[{"$ref":"#/components/schemas/CDSSummary"},{"type":"null"}],"description":"CDS - CompanyData Score (Pro feature)"},"insights":{"anyOf":[{"$ref":"#/components/schemas/CompanyInsights"},{"type":"null"}],"description":"Computed company insights (revenue trend, size, age, profitability)"},"meta":{"additionalProperties":true,"type":"object","title":"Meta","description":"Response metadata"}},"type":"object","required":["data"],"title":"CompanyResponse","description":"Response for single company lookup."},"CompanyScoringStatus":{"properties":{"last_sync_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Last Sync At"},"companies_scored":{"type":"integer","title":"Companies Scored"},"companies_skipped":{"type":"integer","title":"Companies Skipped","default":0},"companies_failed":{"type":"integer","title":"Companies Failed","default":0},"total_to_score":{"type":"integer","title":"Total To Score","default":0},"total_scored_companies":{"type":"integer","title":"Total Scored Companies","default":0},"status":{"type":"string","title":"Status"},"phase":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Phase"},"error_message":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Error Message"},"excellent_count":{"type":"integer","title":"Excellent Count","default":0},"good_count":{"type":"integer","title":"Good Count","default":0},"moderate_count":{"type":"integer","title":"Moderate Count","default":0},"high_risk_count":{"type":"integer","title":"High Risk Count","default":0},"critical_count":{"type":"integer","title":"Critical Count","default":0},"version_counts":{"additionalProperties":{"type":"integer"},"type":"object","title":"Version Counts","default":{}},"confidence_counts":{"additionalProperties":{"type":"integer"},"type":"object","title":"Confidence Counts","default":{}}},"type":"object","required":["last_sync_at","companies_scored","status"],"title":"CompanyScoringStatus","description":"Status for company CDS (CompanyData Score) calculation."},"CompanySizeInsight":{"properties":{"category":{"type":"string","title":"Category","description":"Size category: micro, small, medium, large"},"basis":{"type":"string","title":"Basis","description":"Basis for classification: employees or revenue"}},"type":"object","required":["category","basis"],"title":"CompanySizeInsight","description":"Company size classification using EU SME thresholds."},"CompanySmileyResponse":{"properties":{"total":{"type":"integer","title":"Total"},"establishments":{"items":{"$ref":"#/components/schemas/SmileyEstablishment"},"type":"array","title":"Establishments"}},"type":"object","required":["total","establishments"],"title":"CompanySmileyResponse","description":"Food inspection (smiley) results for a company's establishments."},"CompanySnapshot":{"properties":{"name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Name"},"status":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Status"},"company_type":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Company Type"},"industry_code":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Industry Code"},"industry_text":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Industry Text"},"city":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"City"},"municipality_code":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Municipality Code"}},"type":"object","title":"CompanySnapshot","description":"Denormalized company card, refreshed when the record is touched."},"CompanySummaryData":{"properties":{"summary_da":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Summary Da","description":"Danish summary"},"summary_en":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Summary En","description":"English summary"},"generated_at":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Generated At","description":"When the summary was generated"}},"type":"object","title":"CompanySummaryData","description":"AI-generated company summary."},"CompanySummaryResponse":{"properties":{"data":{"anyOf":[{"$ref":"#/components/schemas/CompanySummaryData"},{"type":"null"}]},"meta":{"additionalProperties":true,"type":"object","title":"Meta"}},"type":"object","required":["data","meta"],"title":"CompanySummaryResponse","description":"Response for company AI summary endpoint."},"CompanyTendersResponse":{"properties":{"cvr":{"type":"string","title":"Cvr"},"total":{"type":"integer","title":"Total"},"tenders":{"items":{"$ref":"#/components/schemas/WonTender"},"type":"array","title":"Tenders"}},"type":"object","required":["cvr","total","tenders"],"title":"CompanyTendersResponse"},"CompanyTimelineResponse":{"properties":{"cvr":{"type":"string","title":"Cvr","description":"CVR number of the company"},"company_name":{"type":"string","title":"Company Name","description":"Company name"},"events":{"items":{"$ref":"#/components/schemas/TimelineEvent"},"type":"array","title":"Events","description":"List of timeline events, sorted by date (newest first)"},"meta":{"additionalProperties":true,"type":"object","title":"Meta","description":"Response metadata"}},"type":"object","required":["cvr","company_name","events"],"title":"CompanyTimelineResponse","description":"Response for company timeline endpoint."},"CompanyType":{"properties":{"code":{"type":"string","title":"Code"},"name":{"type":"string","title":"Name"},"count":{"type":"integer","title":"Count"}},"type":"object","required":["code","name","count"],"title":"CompanyType"},"CompanyViewRequest":{"properties":{"cvr":{"type":"string","title":"Cvr","description":"CVR number of the viewed company"}},"type":"object","required":["cvr"],"title":"CompanyViewRequest","description":"Request body for tracking a company view."},"CompanyViewStats":{"properties":{"cvr":{"type":"string","title":"Cvr"},"company_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Company Name"},"total_views":{"type":"integer","title":"Total Views"},"views_7d":{"type":"integer","title":"Views 7D"},"views_30d":{"type":"integer","title":"Views 30D"},"trending_score":{"type":"number","title":"Trending Score"},"first_viewed_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"First Viewed At"},"last_viewed_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Last Viewed At"},"unique_viewers_today":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Unique Viewers Today"}},"type":"object","required":["cvr","total_views","views_7d","views_30d","trending_score"],"title":"CompanyViewStats"},"ContactEnrichmentCounts":{"properties":{"people":{"type":"integer","title":"People","description":"Number of named contact people found","default":0},"emails":{"type":"integer","title":"Emails","description":"Number of email addresses found","default":0},"phones":{"type":"integer","title":"Phones","description":"Number of phone numbers found","default":0},"socials":{"type":"integer","title":"Socials","description":"Number of social-media profiles found","default":0}},"type":"object","title":"ContactEnrichmentCounts","description":"Value-free counts of enriched contact data (safe to show any tier)."},"ContactEnrichmentSummary":{"properties":{"available":{"type":"boolean","title":"Available","description":"Whether enriched contact values exist (gated to Pro)","default":false},"counts":{"$ref":"#/components/schemas/ContactEnrichmentCounts","description":"Counts of what was found (value-free)"},"website":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Website","description":"Discovered official website URL — shown to all; set only when CVR has no registered website"},"website_source":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Website Source","description":"Origin of the website field","examples":["discovered"]},"contacts":{"anyOf":[{"$ref":"#/components/schemas/ScrapedContactData"},{"type":"null"}],"description":"The actual enriched contact values (named people, emails, phones, socials). Populated only for Pro callers; null for basic — the counts above advertise availability without exposing values."}},"type":"object","title":"ContactEnrichmentSummary","description":"Availability summary for enriched contact data.\n\nDrives the company-page teaser: counts + discovered website are shown to\neveryone (no personal data), while the actual contact VALUES stay Pro-gated."},"ContactOverride":{"properties":{"website":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Website"},"email":{"anyOf":[{"type":"string","format":"email"},{"type":"null"}],"title":"Email"},"phone":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Phone"}},"type":"object","title":"ContactOverride","description":"Owner-provided contact info for a claimed company.\n\nShown on the company page in place of the CVR-registered values, which\nroutinely go stale after rebrands (only someone with MitID Erhverv rights\ncan update the registry). Denormalized to companies.claimed_contact for\ndisplay; the CVR-synced `contact` field is never touched."},"ControlFigures":{"properties":{"enterprises":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Enterprises"},"persons_employed":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Persons Employed"},"value_added_meur":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Value Added Meur"}},"type":"object","title":"ControlFigures"},"CountryHistoryPoint":{"properties":{"period":{"type":"string","title":"Period"},"total_participants":{"type":"integer","title":"Total Participants"},"total_ownership_value":{"type":"integer","title":"Total Ownership Value"},"companies_with_foreign_ownership":{"type":"integer","title":"Companies With Foreign Ownership"}},"type":"object","required":["period","total_participants","total_ownership_value","companies_with_foreign_ownership"],"title":"CountryHistoryPoint"},"CountryIndustry":{"properties":{"code":{"type":"string","title":"Code"},"text":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Text"},"count":{"type":"integer","title":"Count"},"total_value":{"type":"integer","title":"Total Value"}},"type":"object","required":["code","text","count","total_value"],"title":"CountryIndustry"},"CountryListResponse":{"properties":{"data":{"items":{"$ref":"#/components/schemas/CountrySummary"},"type":"array","title":"Data"},"count":{"type":"integer","title":"Count"}},"type":"object","required":["data","count"],"title":"CountryListResponse"},"CountryMetrics":{"properties":{"total_participants":{"type":"integer","title":"Total Participants"},"participants_with_ownership":{"type":"integer","title":"Participants With Ownership"},"total_ownership_value":{"type":"integer","title":"Total Ownership Value"},"companies_with_foreign_ownership":{"type":"integer","title":"Companies With Foreign Ownership"},"top_participants_by_count":{"items":{"$ref":"#/components/schemas/CountryTopParticipant"},"type":"array","title":"Top Participants By Count"},"top_participants_by_value":{"items":{"$ref":"#/components/schemas/CountryTopParticipant"},"type":"array","title":"Top Participants By Value"},"top_companies":{"items":{"$ref":"#/components/schemas/CountryTopCompany"},"type":"array","title":"Top Companies"},"top_industries":{"items":{"$ref":"#/components/schemas/CountryIndustry"},"type":"array","title":"Top Industries"}},"type":"object","required":["total_participants","participants_with_ownership","total_ownership_value","companies_with_foreign_ownership","top_participants_by_count","top_participants_by_value","top_companies","top_industries"],"title":"CountryMetrics"},"CountryReport":{"properties":{"country_code":{"type":"string","title":"Country Code"},"country_name":{"type":"string","title":"Country Name"},"country_name_en":{"type":"string","title":"Country Name En"},"period":{"type":"string","title":"Period"},"metrics":{"$ref":"#/components/schemas/CountryMetrics"},"year_over_year":{"anyOf":[{"$ref":"#/components/schemas/CountryYearOverYear"},{"type":"null"}]},"generated_at":{"type":"string","format":"date-time","title":"Generated At"}},"type":"object","required":["country_code","country_name","country_name_en","period","metrics","year_over_year","generated_at"],"title":"CountryReport"},"CountryReportResponse":{"properties":{"data":{"$ref":"#/components/schemas/CountryReport"},"historical":{"anyOf":[{"items":{"$ref":"#/components/schemas/CountryHistoryPoint"},"type":"array"},{"type":"null"}],"title":"Historical"}},"type":"object","required":["data"],"title":"CountryReportResponse"},"CountrySummary":{"properties":{"code":{"type":"string","title":"Code"},"name":{"type":"string","title":"Name"},"name_en":{"type":"string","title":"Name En"},"total_participants":{"type":"integer","title":"Total Participants"},"participants_with_ownership":{"type":"integer","title":"Participants With Ownership"},"total_ownership_value":{"type":"integer","title":"Total Ownership Value"},"companies_with_foreign_ownership":{"type":"integer","title":"Companies With Foreign Ownership"}},"type":"object","required":["code","name","name_en","total_participants","participants_with_ownership","total_ownership_value","companies_with_foreign_ownership"],"title":"CountrySummary"},"CountryTopCompany":{"properties":{"cvr":{"type":"string","title":"Cvr"},"name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Name"},"total_assets":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Total Assets"},"foreign_ownership_percent":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Foreign Ownership Percent"},"foreign_ownership_value":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Foreign Ownership Value"}},"type":"object","required":["cvr","name","total_assets","foreign_ownership_percent","foreign_ownership_value"],"title":"CountryTopCompany"},"CountryTopParticipant":{"properties":{"unit_number":{"type":"integer","title":"Unit Number"},"name":{"type":"string","title":"Name"},"type":{"type":"string","title":"Type"},"companies_owned":{"type":"integer","title":"Companies Owned"},"total_ownership_value":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Total Ownership Value"}},"type":"object","required":["unit_number","name","type","companies_owned","total_ownership_value"],"title":"CountryTopParticipant"},"CountryYearOverYear":{"properties":{"participants_change":{"type":"integer","title":"Participants Change"},"participants_change_pct":{"type":"number","title":"Participants Change Pct"},"ownership_value_change_pct":{"type":"number","title":"Ownership Value Change Pct"},"companies_change":{"type":"integer","title":"Companies Change"}},"type":"object","required":["participants_change","participants_change_pct","ownership_value_change_pct","companies_change"],"title":"CountryYearOverYear"},"CourtHearingItem":{"properties":{"court":{"type":"string","title":"Court","description":"Court display name"},"category":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Category","description":"civile-sager | straffesager | tvangsauktioner | andet"},"start":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Start","description":"Hearing start time"},"roles":{"items":{"type":"string"},"type":"array","title":"Roles","description":"This company's role(s) in the hearing"},"type_line":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Type Line","description":"Hearing type as published (e.g. 'Borgerlig sag, Hovedforhandling')"},"subject":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Subject","description":"Case subject when published"},"public":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Public","description":"Whether the hearing is public; None when unstated"}},"type":"object","required":["court"],"title":"CourtHearingItem"},"CreateActivityRequest":{"properties":{"kind":{"type":"string","enum":["note","call","followup"],"title":"Kind"},"body":{"anyOf":[{"type":"string","maxLength":5000},{"type":"null"}],"title":"Body"},"followup_due_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Followup Due At"},"followup_recurrence":{"type":"string","enum":["none","weekly","monthly","quarterly","yearly"],"title":"Followup Recurrence","default":"none"}},"type":"object","required":["kind"],"title":"CreateActivityRequest"},"CreateAdminProfileResponse":{"properties":{"cvr":{"type":"string","title":"Cvr"},"logo_url":{"type":"string","title":"Logo Url"},"message":{"type":"string","title":"Message"}},"type":"object","required":["cvr","logo_url","message"],"title":"CreateAdminProfileResponse","description":"Response for creating an admin profile."},"CreateCheckoutRequest":{"properties":{"tier":{"$ref":"#/components/schemas/ClaimTier"},"billing_interval":{"type":"string","title":"Billing Interval","default":"monthly"},"success_url":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Success Url"},"cancel_url":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Cancel Url"}},"type":"object","required":["tier"],"title":"CreateCheckoutRequest","description":"Request to create a checkout session."},"CreateEnrichmentQuoteRequest":{"properties":{"name":{"type":"string","maxLength":200,"minLength":1,"title":"Name"},"email":{"type":"string","format":"email","title":"Email"},"company":{"anyOf":[{"type":"string","maxLength":200},{"type":"null"}],"title":"Company"},"phone":{"anyOf":[{"type":"string","maxLength":50},{"type":"null"}],"title":"Phone"},"estimated_cvr_count":{"type":"integer","maximum":10000000.0,"minimum":1.0,"title":"Estimated Cvr Count","description":"Rough count — used to price the tier, doesn't need to be exact."},"fields_needed":{"anyOf":[{"type":"string","maxLength":2000},{"type":"null"}],"title":"Fields Needed","description":"Free text describing which data fields the lead wants back."},"deadline":{"anyOf":[{"type":"string","maxLength":100},{"type":"null"}],"title":"Deadline","description":"Free-text deadline (e.g. 'inden fredag', '2026-05-01')."},"notes":{"anyOf":[{"type":"string","maxLength":5000},{"type":"null"}],"title":"Notes"},"locale":{"type":"string","title":"Locale","description":"Locale the form was submitted from.","default":"da"}},"type":"object","required":["name","email","estimated_cvr_count"],"title":"CreateEnrichmentQuoteRequest","description":"Public lead-capture form body."},"CreateEnrichmentRequest":{"properties":{"name":{"type":"string","maxLength":200,"minLength":1,"title":"Name","description":"Job name (shown in the dashboard)"},"cvrs":{"items":{"type":"string"},"type":"array","maxItems":50000,"minItems":1,"title":"Cvrs","description":"CVR numbers to enrich. Whitespace and duplicates are cleaned server-side."},"fields":{"$ref":"#/components/schemas/ReportFieldSelection"},"locale":{"type":"string","title":"Locale","description":"Locale for Excel headers (da or en)","default":"da"}},"type":"object","required":["name","cvrs","fields"],"title":"CreateEnrichmentRequest","description":"Request body for creating a new enrichment job."},"CreateListRequest":{"properties":{"name":{"type":"string","maxLength":100,"minLength":1,"title":"Name"},"description":{"anyOf":[{"type":"string","maxLength":500},{"type":"null"}],"title":"Description"},"is_public":{"type":"boolean","title":"Is Public","default":false}},"type":"object","required":["name"],"title":"CreateListRequest","description":"Request to create a new list."},"CreateRecordRequest":{"properties":{"cvr":{"type":"string","pattern":"^\\d{8}$","title":"Cvr"},"source":{"anyOf":[{"type":"string","maxLength":120},{"type":"null"}],"title":"Source"}},"type":"object","required":["cvr"],"title":"CreateRecordRequest"},"CreateReportRequest":{"properties":{"name":{"type":"string","maxLength":200,"minLength":1,"title":"Name","description":"Lead list name"},"filters":{"anyOf":[{"$ref":"#/components/schemas/LeadListFilters"},{"$ref":"#/components/schemas/ReportFilters"}],"title":"Filters","description":"Either the new-style shape {\"screen\": {...ScreenFilters...}, \"list_ids\": [], \"connection_ids\": []} exposing every /v1/screen filter, or the legacy flat ReportFilters shape."},"fields":{"$ref":"#/components/schemas/ReportFieldSelection"},"locale":{"type":"string","title":"Locale","description":"Locale for Excel headers (da or en)","default":"da"}},"type":"object","required":["name","filters","fields"],"title":"CreateReportRequest","description":"Request body for creating a new lead list."},"CreateWatcherRequest":{"properties":{"name":{"type":"string","title":"Name","default":""},"cvrs":{"items":{"type":"string"},"type":"array","title":"Cvrs"},"rules":{"anyOf":[{"$ref":"#/components/schemas/WatcherRules"},{"type":"null"}]},"connection_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Connection Id"},"mne_numbers":{"items":{"type":"string"},"type":"array","title":"Mne Numbers"},"unit_numbers":{"items":{"type":"integer"},"type":"array","title":"Unit Numbers"},"event_types":{"items":{"$ref":"#/components/schemas/EventType"},"type":"array","title":"Event Types"},"delivery":{"$ref":"#/components/schemas/WatcherDelivery"}},"type":"object","required":["delivery"],"title":"CreateWatcherRequest","description":"Request body for `POST /v1/watch-list`."},"CreateWebhookRequest":{"properties":{"name":{"type":"string","title":"Name","description":"Human-readable label shown in your account. Not sent to the webhook URL.","examples":["Production CRM sync"]},"url":{"type":"string","title":"Url","description":"HTTPS URL that will receive POST requests when matching events occur. Must respond with a 2xx status code within 10 seconds.","examples":["https://api.example.com/companydata-webhook"]},"event_types":{"items":{"$ref":"#/components/schemas/EventType"},"type":"array","title":"Event Types","description":"Event types this webhook should receive. Defaults to all event types. See `GET /v1/webhooks/event-types` for the catalog."},"headers":{"additionalProperties":{"type":"string"},"type":"object","title":"Headers","description":"Custom HTTP headers added to every delivery. Useful for routing or additional authentication on your endpoint.","examples":[{"X-My-Service-Token":"abc123"}]}},"type":"object","required":["name","url"],"title":"CreateWebhookRequest","description":"Request to create a webhook."},"CreditCheckoutRequest":{"properties":{"ga_client_id":{"anyOf":[{"type":"string","maxLength":64},{"type":"null"}],"title":"Ga Client Id","description":"GA4 client id from the _ga cookie (analytics attribution)"},"ga_session_id":{"anyOf":[{"type":"string","maxLength":32},{"type":"null"}],"title":"Ga Session Id","description":"GA4 session id from the _ga_<container> cookie (session attribution)"},"pack_id":{"type":"string","title":"Pack Id","description":"Credit pack ID (pack_5000, pack_25000, pack_100000)"},"success_url":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Success Url"},"cancel_url":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Cancel Url"}},"type":"object","required":["pack_id"],"title":"CreditCheckoutRequest","description":"Request to create credit pack checkout session."},"CreditCheckoutResponse":{"properties":{"checkout_url":{"type":"string","title":"Checkout Url"}},"type":"object","required":["checkout_url"],"title":"CreditCheckoutResponse","description":"Response with credit pack checkout URL."},"CreditPackAdminItem":{"properties":{"id":{"type":"string","title":"Id"},"name":{"type":"string","title":"Name"},"credits":{"type":"integer","title":"Credits"},"price_dkk_ore":{"type":"integer","title":"Price Dkk Ore"},"stripe_price_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Stripe Price Id"},"created_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Created At"}},"type":"object","required":["id","name","credits","price_dkk_ore"],"title":"CreditPackAdminItem"},"CreditPackCreateRequest":{"properties":{"id":{"type":"string","title":"Id"},"name":{"type":"string","title":"Name"},"credits":{"type":"integer","title":"Credits"},"price_dkk_ore":{"type":"integer","title":"Price Dkk Ore"}},"type":"object","required":["id","name","credits","price_dkk_ore"],"title":"CreditPackCreateRequest"},"CreditPackResponse":{"properties":{"id":{"type":"string","title":"Id"},"name":{"type":"string","title":"Name"},"credits":{"type":"integer","title":"Credits"},"price_dkk_ore":{"type":"integer","title":"Price Dkk Ore"}},"type":"object","required":["id","name","credits","price_dkk_ore"],"title":"CreditPackResponse","description":"A credit pack available for purchase."},"CreditPackUpdateRequest":{"properties":{"name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Name"},"credits":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Credits"},"price_dkk_ore":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Price Dkk Ore"}},"type":"object","title":"CreditPackUpdateRequest"},"CreditPacksAdminResponse":{"properties":{"packs":{"items":{"$ref":"#/components/schemas/CreditPackAdminItem"},"type":"array","title":"Packs"}},"type":"object","required":["packs"],"title":"CreditPacksAdminResponse"},"CreditPacksResponse":{"properties":{"packs":{"items":{"$ref":"#/components/schemas/CreditPackResponse"},"type":"array","title":"Packs"}},"type":"object","required":["packs"],"title":"CreditPacksResponse","description":"Response with available credit packs."},"CreditPurchaseInfo":{"properties":{"pack_id":{"type":"string","title":"Pack Id"},"credits_purchased":{"type":"integer","title":"Credits Purchased"},"credits_remaining":{"type":"integer","title":"Credits Remaining"},"purchased_at":{"type":"string","format":"date-time","title":"Purchased At"},"expires_at":{"type":"string","format":"date-time","title":"Expires At"}},"type":"object","required":["pack_id","credits_purchased","credits_remaining","purchased_at","expires_at"],"title":"CreditPurchaseInfo"},"CreditReportAccessResponse":{"properties":{"cvr":{"type":"string","title":"Cvr"},"can_download":{"type":"boolean","title":"Can Download"},"is_pro":{"type":"boolean","title":"Is Pro"},"purchased":{"type":"boolean","title":"Purchased"},"purchase_expires_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Purchase Expires At"},"price_dkk":{"type":"integer","title":"Price Dkk"},"pending_permission":{"type":"boolean","title":"Pending Permission","default":false}},"type":"object","required":["cvr","can_download","is_pro","purchased","price_dkk"],"title":"CreditReportAccessResponse","description":"Whether the current user can download a credit report for a CVR."},"CreditReportCheckoutRequest":{"properties":{"ga_client_id":{"anyOf":[{"type":"string","maxLength":64},{"type":"null"}],"title":"Ga Client Id","description":"GA4 client id from the _ga cookie (analytics attribution)"},"ga_session_id":{"anyOf":[{"type":"string","maxLength":32},{"type":"null"}],"title":"Ga Session Id","description":"GA4 session id from the _ga_<container> cookie (session attribution)"},"cvr":{"type":"string","title":"Cvr","description":"CVR number of the company the report covers"},"success_url":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Success Url","description":"Redirect URL on success"},"cancel_url":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Cancel Url","description":"Redirect URL on cancel"}},"type":"object","required":["cvr"],"title":"CreditReportCheckoutRequest","description":"Request to create a one-off credit report checkout session."},"CreditReportCheckoutResponse":{"properties":{"checkout_url":{"type":"string","title":"Checkout Url"}},"type":"object","required":["checkout_url"],"title":"CreditReportCheckoutResponse","description":"Response with credit report checkout URL."},"CreditReportHistoryItem":{"properties":{"cvr":{"type":"string","title":"Cvr"},"company_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Company Name"},"last_generated_at":{"type":"string","format":"date-time","title":"Last Generated At"},"count":{"type":"integer","title":"Count"},"can_redownload":{"type":"boolean","title":"Can Redownload"},"purchase_expires_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Purchase Expires At"}},"type":"object","required":["cvr","last_generated_at","count","can_redownload"],"title":"CreditReportHistoryItem"},"CreditReportHistoryResponse":{"properties":{"items":{"items":{"$ref":"#/components/schemas/CreditReportHistoryItem"},"type":"array","title":"Items"}},"type":"object","required":["items"],"title":"CreditReportHistoryResponse"},"CvrContact":{"properties":{"phone":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Phone","description":"Phone number","examples":["+45 12345678"]},"email":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Email","description":"Email address"},"website":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Website","description":"Website URL"},"fax":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Fax","description":"Fax number"}},"type":"object","title":"CvrContact","description":"Contact information as registered in CVR (adds the fax number, which\na claimed profile cannot set)."},"CvrFilterResponse":{"properties":{"cvrs":{"items":{"type":"string"},"type":"array","title":"Cvrs","description":"The CVRs being monitored, in registration order."},"event_types":{"items":{"$ref":"#/components/schemas/EventType"},"type":"array","title":"Event Types","description":"Event types being delivered for these CVRs."},"cvr_count":{"type":"integer","title":"Cvr Count","description":"Number of CVRs in the filter. Convenience for clients."}},"type":"object","required":["cvrs","event_types","cvr_count"],"title":"CvrFilterResponse","description":"The bulk CVR filter currently set on a webhook."},"DateRange":{"properties":{"from":{"anyOf":[{"type":"string","format":"date"},{"type":"null"}],"title":"From","description":"Inclusive start date"},"to":{"anyOf":[{"type":"string","format":"date"},{"type":"null"}],"title":"To","description":"Inclusive end date"}},"type":"object","title":"DateRange","description":"Inclusive date range. At least one bound must be set."},"DeleteAccountRequest":{"properties":{"password":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Password"},"confirmation":{"type":"string","title":"Confirmation"},"reason":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Reason"}},"type":"object","required":["confirmation"],"title":"DeleteAccountRequest","description":"Request to delete user account."},"DeleteAccountResponse":{"properties":{"success":{"type":"boolean","title":"Success"},"message":{"type":"string","title":"Message"}},"type":"object","required":["success","message"],"title":"DeleteAccountResponse","description":"Response after account deletion."},"DeliveryChannel":{"type":"string","enum":["email","webhook"],"title":"DeliveryChannel","description":"Notification delivery channels."},"DeliveryHistoryItem":{"properties":{"delivery_id":{"type":"string","title":"Delivery Id"},"event_type":{"$ref":"#/components/schemas/EventType"},"cvr":{"type":"string","title":"Cvr"},"company_name":{"type":"string","title":"Company Name"},"summary":{"type":"string","title":"Summary"},"channel":{"$ref":"#/components/schemas/DeliveryChannel"},"status":{"$ref":"#/components/schemas/DeliveryStatus"},"created_at":{"type":"string","format":"date-time","title":"Created At"},"sent_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Sent At"},"error_message":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Error Message"}},"type":"object","required":["delivery_id","event_type","cvr","company_name","summary","channel","status","created_at"],"title":"DeliveryHistoryItem","description":"Delivery history item for API response."},"DeliveryHistoryResponse":{"properties":{"data":{"items":{"$ref":"#/components/schemas/DeliveryHistoryItem"},"type":"array","title":"Data"},"total":{"type":"integer","title":"Total"},"limit":{"type":"integer","title":"Limit"},"offset":{"type":"integer","title":"Offset"}},"type":"object","required":["data","total","limit","offset"],"title":"DeliveryHistoryResponse","description":"Response for delivery history."},"DeliveryStatus":{"type":"string","enum":["pending","sent","failed","delivered"],"title":"DeliveryStatus","description":"Status of a notification delivery."},"DemographyRates":{"properties":{"birth_rate":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Birth Rate"},"death_rate":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Death Rate"},"survival_3y":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Survival 3Y"}},"type":"object","title":"DemographyRates"},"DiscoveredWebsite":{"properties":{"status":{"type":"string","title":"Status","description":"Discovery outcome","examples":["found","no_match","no_results","skipped_no_credits","error"]},"url":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Url","description":"Verified official website URL (null unless status='found')"},"domain":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Domain","description":"Verified registrable domain"},"confidence":{"type":"string","title":"Confidence","description":"Verification confidence","default":"none","examples":["verified_cvr","verified_phone","verified_address","probable","none"]},"verified_by":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Verified By","description":"Signal that verified the match","examples":["cvr","phone","address"]},"evidence":{"anyOf":[{"$ref":"#/components/schemas/DiscoveryEvidence"},{"type":"null"}],"description":"What confirmed the verified candidate"},"candidates":{"items":{"$ref":"#/components/schemas/DiscoveryCandidate"},"type":"array","title":"Candidates","description":"All candidates considered, with scores and reject reasons (audit trail)"},"serp_query":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Serp Query","description":"Query sent to the search API"},"source":{"type":"string","title":"Source","description":"How discovery was triggered","default":"on_demand","examples":["preemptive_sweep","on_demand"]},"discovered_at":{"type":"string","format":"date-time","title":"Discovered At","description":"When discovery was performed"},"expires_at":{"type":"string","format":"date-time","title":"Expires At","description":"When this result should be re-checked"},"error_message":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Error Message","description":"Error details if status is 'error'"}},"type":"object","required":["status","discovered_at","expires_at"],"title":"DiscoveredWebsite","description":"Result of discovering a company's official website when CVR has none registered.\n\nInternal — excluded from API responses. Persisted on the company document so a\ncompany (including a negative outcome) is never re-discovered unnecessarily."},"DiscoveryCandidate":{"properties":{"domain":{"type":"string","title":"Domain","description":"Candidate registrable domain","examples":["example.dk"]},"similarity":{"type":"number","title":"Similarity","description":"Name-to-domain similarity score in [0, 1]","default":0.0},"rank":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Rank","description":"SERP organic rank (1-based); null for a name-guess candidate"},"source":{"type":"string","title":"Source","description":"Where the candidate came from","default":"serp","examples":["serp","guess"]},"accepted":{"type":"boolean","title":"Accepted","description":"Whether this candidate was accepted as the official site","default":false},"rejected_reason":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Rejected Reason","description":"Why the candidate was not accepted","examples":["blocklist","low_similarity","cvr_mismatch","no_signal","unreachable"]}},"type":"object","required":["domain"],"title":"DiscoveryCandidate","description":"A candidate domain considered during website discovery (kept as an audit trail)."},"DiscoveryEvidence":{"properties":{"cvr_found":{"type":"boolean","title":"Cvr Found","description":"Company CVR was present on the page","default":false},"phone_found":{"type":"boolean","title":"Phone Found","description":"Company phone was present on the page","default":false},"address_found":{"type":"boolean","title":"Address Found","description":"Company street + postal/city were present on the page","default":false},"page_url":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Page Url","description":"Page URL where the matching signal was found"}},"type":"object","title":"DiscoveryEvidence","description":"Which signal(s) confirmed the verified candidate."},"DisputeDetailResponse":{"properties":{"dispute_id":{"type":"string","title":"Dispute Id"},"cvr":{"type":"string","title":"Cvr"},"status":{"type":"string","title":"Status"},"disputed_at":{"type":"string","format":"date-time","title":"Disputed At"},"resolved_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Resolved At"},"resolved_by":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Resolved By"},"resolution_notes":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Resolution Notes"},"disputed_by":{"additionalProperties":true,"type":"object","title":"Disputed By"},"reason":{"type":"string","title":"Reason"},"evidence_documents":{"items":{"additionalProperties":true,"type":"object"},"type":"array","title":"Evidence Documents"},"current_claim":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Current Claim"},"company":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Company"}},"type":"object","required":["dispute_id","cvr","status","disputed_at","resolved_at","resolved_by","resolution_notes","disputed_by","reason","evidence_documents","current_claim","company"],"title":"DisputeDetailResponse"},"DisputeListItem":{"properties":{"dispute_id":{"type":"string","title":"Dispute Id"},"cvr":{"type":"string","title":"Cvr"},"company_name":{"type":"string","title":"Company Name"},"disputed_by":{"additionalProperties":true,"type":"object","title":"Disputed By"},"disputed_at":{"type":"string","format":"date-time","title":"Disputed At"},"reason":{"type":"string","title":"Reason"},"current_owner_email":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Current Owner Email"},"has_evidence":{"type":"boolean","title":"Has Evidence"},"status":{"type":"string","title":"Status"}},"type":"object","required":["dispute_id","cvr","company_name","disputed_by","disputed_at","reason","current_owner_email","has_evidence","status"],"title":"DisputeListItem"},"DisputesListResponse":{"properties":{"disputes":{"items":{"$ref":"#/components/schemas/DisputeListItem"},"type":"array","title":"Disputes"},"total":{"type":"integer","title":"Total"}},"type":"object","required":["disputes","total"],"title":"DisputesListResponse"},"DivisionBenchmark":{"properties":{"division_code":{"type":"string","title":"Division Code"},"division_name":{"type":"string","title":"Division Name"},"division_name_en":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Division Name En"},"period":{"type":"string","title":"Period"},"total_companies":{"type":"integer","title":"Total Companies"},"total_industries":{"type":"integer","title":"Total Industries"},"metrics":{"$ref":"#/components/schemas/IndustryMetrics"},"top_industries":{"items":{"$ref":"#/components/schemas/DivisionTopIndustry"},"type":"array","title":"Top Industries"},"by_municipality":{"items":{"$ref":"#/components/schemas/IndustryMunicipality"},"type":"array","title":"By Municipality"},"company_types":{"items":{"$ref":"#/components/schemas/CompanyType"},"type":"array","title":"Company Types","default":[]},"top_companies":{"items":{"$ref":"#/components/schemas/TopCompany"},"type":"array","title":"Top Companies","default":[]},"year_over_year":{"anyOf":[{"$ref":"#/components/schemas/DivisionYearOverYear"},{"type":"null"}]},"score_distribution":{"anyOf":[{"$ref":"#/components/schemas/ScoreDistribution"},{"type":"null"}]},"score_deviation":{"anyOf":[{"$ref":"#/components/schemas/ScoreDeviation"},{"type":"null"}]},"generated_at":{"type":"string","format":"date-time","title":"Generated At"}},"type":"object","required":["division_code","division_name","period","total_companies","total_industries","metrics","top_industries","by_municipality","generated_at"],"title":"DivisionBenchmark","description":"Full division benchmark with aggregate statistics."},"DivisionBenchmarkResponse":{"properties":{"data":{"$ref":"#/components/schemas/DivisionBenchmark"},"industries":{"items":{"$ref":"#/components/schemas/IndustrySummary"},"type":"array","title":"Industries"},"historical":{"anyOf":[{"items":{"$ref":"#/components/schemas/DivisionHistoryPoint"},"type":"array"},{"type":"null"}],"title":"Historical"}},"type":"object","required":["data","industries"],"title":"DivisionBenchmarkResponse","description":"Response for single division benchmark with child industries."},"DivisionHistoryPoint":{"properties":{"period":{"type":"string","title":"Period"},"total_companies":{"type":"integer","title":"Total Companies"},"revenue_median":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Revenue Median"}},"type":"object","required":["period","total_companies","revenue_median"],"title":"DivisionHistoryPoint","description":"Historical data point for division charts."},"DivisionListResponse":{"properties":{"data":{"items":{"$ref":"#/components/schemas/DivisionSummary"},"type":"array","title":"Data"},"count":{"type":"integer","title":"Count"}},"type":"object","required":["data","count"],"title":"DivisionListResponse","description":"Response for division list endpoint."},"DivisionSummary":{"properties":{"code":{"type":"string","title":"Code"},"name":{"type":"string","title":"Name"},"name_en":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Name En"},"total_companies":{"type":"integer","title":"Total Companies"},"total_industries":{"type":"integer","title":"Total Industries"},"revenue_median":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Revenue Median"}},"type":"object","required":["code","name","total_companies","total_industries","revenue_median"],"title":"DivisionSummary","description":"Summary for division list."},"DivisionTopIndustry":{"properties":{"code":{"type":"string","title":"Code"},"text":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Text"},"count":{"type":"integer","title":"Count"},"revenue_median":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Revenue Median"}},"type":"object","required":["code","text","count","revenue_median"],"title":"DivisionTopIndustry","description":"Top industry within a division."},"DivisionYearOverYear":{"properties":{"total_companies_change":{"type":"integer","title":"Total Companies Change"},"total_companies_change_pct":{"type":"number","title":"Total Companies Change Pct"},"revenue_median_change_pct":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Revenue Median Change Pct"}},"type":"object","required":["total_companies_change","total_companies_change_pct"],"title":"DivisionYearOverYear","description":"Year-over-year changes for a division."},"DocumentInfo":{"properties":{"url":{"type":"string","title":"Url","description":"Download URL for the document"},"mime_type":{"type":"string","title":"Mime Type","description":"MIME type","examples":["application/pdf","application/xml"]},"document_type":{"type":"string","title":"Document Type","description":"Document type","examples":["AARSRAPPORT"]}},"type":"object","required":["url","mime_type","document_type"],"title":"DocumentInfo","description":"Information about a document attached to the announcement."},"EInvoicingEndpoint":{"properties":{"endpoint_id":{"type":"string","title":"Endpoint Id","description":"Scheme and value, e.g. 0088:5790000000000","examples":["0088:5798000416604"]},"participant_id":{"type":"string","title":"Participant Id","description":"Full Peppol participant identifier"},"scheme":{"type":"string","title":"Scheme","description":"ISO 6523 scheme code: 0088 EAN/GLN, 0184 CVR, 0096 P-number, 0198 SE-number","examples":["0088"]},"scheme_name":{"type":"string","title":"Scheme Name","description":"gln, cvr, p_number, se_number or other","examples":["gln"]},"ean":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Ean","description":"The EAN (GLN) number when the endpoint is an EAN address","examples":["5798000416604"]},"cvr":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Cvr","description":"CVR number of the receiving company, when stated or derivable","examples":["29189854"]},"cvr_source":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Cvr Source","description":"Where the CVR came from: participant, identifier, vat, p_number or se_number"},"p_number":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"P Number"},"se_number":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Se Number"},"name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Name","description":"Name on the business card","examples":["Københavns Kommune"]},"names":{"items":{"$ref":"#/components/schemas/EndpointName"},"type":"array","title":"Names"},"country_code":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Country Code"},"geo_info":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Geo Info"},"identifiers":{"items":{"$ref":"#/components/schemas/EndpointIdentifier"},"type":"array","title":"Identifiers"},"websites":{"items":{"type":"string"},"type":"array","title":"Websites"},"contacts":{"items":{"$ref":"#/components/schemas/EndpointContact"},"type":"array","title":"Contacts","description":"Contacts on the card, often the access point provider"},"additional_info":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Additional Info"},"registration_date":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Registration Date","description":"Business card registration date (YYYY-MM-DD)"},"can_receive_invoice":{"type":"boolean","title":"Can Receive Invoice","description":"True when the endpoint accepts at least one invoice format"},"accepts":{"items":{"type":"string"},"type":"array","title":"Accepts","description":"Document kinds accepted: invoice, credit_note, reminder, order, order_response, ..."},"invoice_formats":{"items":{"type":"string"},"type":"array","title":"Invoice Formats","description":"Invoice formats accepted: oioubl_2.1, oioubl_2.02, peppol_bis_3_ubl, peppol_bis_3_cii, peppol_pint, peppol_selfbilling, en16931"},"document_types":{"anyOf":[{"items":{"type":"string"},"type":"array"},{"type":"null"}],"title":"Document Types","description":"Raw Peppol document type identifiers (only with include=document_types)"},"active":{"type":"boolean","title":"Active","description":"False when the endpoint has disappeared from the Peppol Directory","default":true},"first_seen_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"First Seen At"},"last_seen_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Last Seen At"},"removed_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Removed At"}},"type":"object","required":["endpoint_id","participant_id","scheme","scheme_name","can_receive_invoice"],"title":"EInvoicingEndpoint","description":"One electronic address (Peppol participant) that can receive documents."},"EanLookupResponse":{"properties":{"ean":{"type":"string","title":"Ean"},"endpoint":{"$ref":"#/components/schemas/EInvoicingEndpoint"},"company":{"anyOf":[{"$ref":"#/components/schemas/CompanyRef"},{"type":"null"}],"description":"The registered company behind the CVR, when we hold it"}},"type":"object","required":["ean","endpoint"],"title":"EanLookupResponse"},"EanSearchResponse":{"properties":{"total":{"type":"integer","title":"Total"},"limit":{"type":"integer","title":"Limit"},"offset":{"type":"integer","title":"Offset"},"endpoints":{"items":{"$ref":"#/components/schemas/EInvoicingEndpoint"},"type":"array","title":"Endpoints"}},"type":"object","required":["total","limit","offset","endpoints"],"title":"EanSearchResponse"},"EmailAnalysis":{"properties":{"email":{"type":"string","title":"Email"},"domain":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Domain"},"mx_check":{"$ref":"#/components/schemas/EmailMxCheck"},"ns_check":{"$ref":"#/components/schemas/EmailNsCheck"},"whois":{"$ref":"#/components/schemas/EmailWhois"},"company_match":{"$ref":"#/components/schemas/EmailCompanyMatch"},"recommendation":{"type":"string","title":"Recommendation"}},"type":"object","required":["email","domain","mx_check","ns_check","whois","company_match","recommendation"],"title":"EmailAnalysis"},"EmailCompanyMatch":{"properties":{"score":{"type":"number","title":"Score"},"match_type":{"type":"string","title":"Match Type"}},"type":"object","required":["score","match_type"],"title":"EmailCompanyMatch"},"EmailMxCheck":{"properties":{"has_mx":{"type":"boolean","title":"Has Mx"},"mx_records":{"items":{"type":"string"},"type":"array","title":"Mx Records"},"error":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Error"}},"type":"object","required":["has_mx","mx_records","error"],"title":"EmailMxCheck"},"EmailNsCheck":{"properties":{"has_ns":{"type":"boolean","title":"Has Ns"},"nameservers":{"items":{"type":"string"},"type":"array","title":"Nameservers"},"error":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Error"}},"type":"object","required":["has_ns","nameservers","error"],"title":"EmailNsCheck"},"EmailWhois":{"properties":{"registrant_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Registrant Name"},"registrant_organization":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Registrant Organization"},"registrant_email":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Registrant Email"},"registrant_phone":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Registrant Phone"},"registrant_address":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Registrant Address"},"registrant_city":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Registrant City"},"registrant_country":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Registrant Country"},"registrar":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Registrar"},"registrar_url":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Registrar Url"},"creation_date":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Creation Date"},"expiration_date":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Expiration Date"},"updated_date":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Updated Date"},"status":{"anyOf":[{"items":{"type":"string"},"type":"array"},{"type":"null"}],"title":"Status"},"dnssec":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Dnssec"},"error":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Error"}},"type":"object","required":["registrant_name","registrant_organization","registrant_email","registrant_phone","registrant_address","registrant_city","registrant_country","registrar","registrar_url","creation_date","expiration_date","updated_date","status","dnssec","error"],"title":"EmailWhois"},"EndpointContact":{"properties":{"type":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Type"},"name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Name"},"phone":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Phone"},"email":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Email"}},"type":"object","title":"EndpointContact"},"EndpointIdentifier":{"properties":{"scheme":{"type":"string","title":"Scheme","description":"Identifier scheme as published, e.g. OrgNr or VAT"},"value":{"type":"string","title":"Value"}},"type":"object","required":["scheme","value"],"title":"EndpointIdentifier"},"EndpointName":{"properties":{"name":{"type":"string","title":"Name"},"lang":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Lang","description":"Language code when the card states one"}},"type":"object","required":["name"],"title":"EndpointName"},"EnergyLabelBuilding":{"properties":{"number":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Number"},"use_code":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Use Code"},"year_built":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Year Built"},"heat_supply":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Heat Supply"}},"type":"object","title":"EnergyLabelBuilding","description":"Building covered by an energy label (from EMOData)."},"EnergyLabelItem":{"properties":{"serial":{"type":"string","title":"Serial"},"classification":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Classification","description":"A2020/A2015/A2010/B..G"},"status":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Status","description":"VALID/EXPIRED/..."},"valid_from":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Valid From"},"valid_to":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Valid To"},"type_usage":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Type Usage"},"based_on":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Based On"},"demo_link":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Demo Link","description":"sparenergi.dk deep link"},"buildings":{"items":{"$ref":"#/components/schemas/EnergyLabelBuilding"},"type":"array","title":"Buildings"}},"type":"object","required":["serial"],"title":"EnergyLabelItem","description":"A single energy label on a property (Energistyrelsen EMOData)."},"EnrichedContactData":{"properties":{"company_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Company Name"},"status":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Status"},"industry_code":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Industry Code"},"industry_text":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Industry Text"},"municipality":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Municipality"},"employee_count":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Employee Count"},"latest_revenue":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Latest Revenue"},"latest_gross_profit":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Latest Gross Profit"},"cds_score":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Cds Score"},"cds_rating":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Cds Rating"},"property_count":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Property Count"},"negative_equity":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Negative Equity"}},"type":"object","title":"EnrichedContactData","description":"Enrichment data from our company database."},"EnrichmentEstimateRequest":{"properties":{"cvrs":{"items":{"type":"string"},"type":"array","maxItems":50000,"minItems":1,"title":"Cvrs"},"include_preview":{"type":"boolean","title":"Include Preview","description":"Include a sample of matched companies.","default":false},"preview_limit":{"type":"integer","maximum":50.0,"minimum":1.0,"title":"Preview Limit","default":10}},"type":"object","required":["cvrs"],"title":"EnrichmentEstimateRequest","description":"Request body for /v1/enrichments/estimate — count + preview before submit."},"EnrichmentEstimateResponse":{"properties":{"requested":{"type":"integer","title":"Requested","description":"Unique CVRs after dedup"},"matched":{"type":"integer","title":"Matched","description":"How many of those CVRs exist in the database"},"not_found_sample":{"items":{"type":"string"},"type":"array","title":"Not Found Sample","description":"Up to 25 CVRs that had no match — lets the UI explain the gap."},"preview":{"anyOf":[{"items":{"additionalProperties":true,"type":"object"},"type":"array"},{"type":"null"}],"title":"Preview","description":"Sample of matched companies, only when include_preview=true."}},"type":"object","required":["requested","matched"],"title":"EnrichmentEstimateResponse","description":"Response for /v1/enrichments/estimate."},"EnrichmentQuoteResponse":{"properties":{"id":{"type":"string","title":"Id"},"created_at":{"type":"string","format":"date-time","title":"Created At"}},"type":"object","required":["id","created_at"],"title":"EnrichmentQuoteResponse","description":"Response confirming the quote request was captured."},"EnrichmentRequestResponse":{"properties":{"id":{"type":"string","title":"Id"},"name":{"type":"string","title":"Name"},"status":{"type":"string","title":"Status","description":"queued, processing, completed, failed"},"requested_count":{"type":"integer","title":"Requested Count","description":"CVRs submitted (after dedup)"},"matched_count":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Matched Count","description":"Filled by worker once matched"},"fields":{"$ref":"#/components/schemas/ReportFieldSelection"},"row_count":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Row Count"},"capped":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Capped"},"download_url":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Download Url"},"error_message":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Error Message"},"created_at":{"type":"string","format":"date-time","title":"Created At"},"completed_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Completed At"}},"type":"object","required":["id","name","status","requested_count","fields","created_at"],"title":"EnrichmentRequestResponse","description":"Response for a queued/completed enrichment job. Mirrors\nReportRequestResponse but replaces the filter-centric fields with\nCVR-list metadata."},"EventCountResponse":{"properties":{"count":{"type":"integer","title":"Count"},"period":{"type":"string","title":"Period"}},"type":"object","required":["count","period"],"title":"EventCountResponse","description":"Event count response."},"EventType":{"type":"string","enum":["company_status","ownership","board","director","financial","announcement","address","contact","financial_distress","corporate_announcement","property_ownership","tender_award","new_company","press_release","media_mention","court_hearing","screen_entered","screen_left"],"title":"EventType","description":"Types of change events that can trigger notifications."},"EventTypeInfo":{"properties":{"value":{"type":"string","title":"Value","description":"Identifier used in `event_type` fields and webhook filter configuration."},"label_da":{"type":"string","title":"Label Da","description":"Short human-readable Danish label."},"label_en":{"type":"string","title":"Label En","description":"Short human-readable English label."},"description":{"type":"string","title":"Description","description":"What change in the CVR data triggers this event."}},"type":"object","required":["value","label_da","label_en","description"],"title":"EventTypeInfo","description":"A single notification event type that can appear in webhook payloads."},"ExtendTrialRequest":{"properties":{"user_email":{"type":"string","title":"User Email"},"new_ends_at":{"type":"string","format":"date-time","title":"New Ends At"},"reason":{"type":"string","title":"Reason"}},"type":"object","required":["user_email","new_ends_at","reason"],"title":"ExtendTrialRequest"},"FeaturedCompaniesResponse":{"properties":{"companies":{"items":{"$ref":"#/components/schemas/FeaturedCompany"},"type":"array","title":"Companies"}},"type":"object","required":["companies"],"title":"FeaturedCompaniesResponse","description":"Featured companies response."},"FeaturedCompany":{"properties":{"cvr":{"type":"string","title":"Cvr"},"name":{"type":"string","title":"Name"},"logo_url":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Logo Url"},"description":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Description"},"description_en":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Description En"},"website":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Website"},"focus_rank":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Focus Rank"},"focus_total_dkk":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Focus Total Dkk"},"social_links":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Social Links"},"tier":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Tier"}},"type":"object","required":["cvr","name"],"title":"FeaturedCompany","description":"A featured (Premium) company for industry pages."},"FeedNotice":{"properties":{"message_number":{"type":"string","title":"Message Number","examples":["S16032026-23"]},"publication_date":{"type":"string","title":"Publication Date","description":"Publication date in Statstidende (YYYY-MM-DD)"},"indexed_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Indexed At","description":"When we stored the notice; the polling cursor follows this"},"rubrik":{"anyOf":[{"$ref":"#/components/schemas/Rubrik"},{"type":"null"}]},"cvrs":{"items":{"type":"string"},"type":"array","title":"Cvrs"},"companies":{"items":{"$ref":"#/components/schemas/NoticeCompany"},"type":"array","title":"Companies"},"municipality_code":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Municipality Code","description":"Company municipality (single-company notices)"},"municipality_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Municipality Name"},"industry_code":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Industry Code"},"industry_text":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Industry Text"},"division_code":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Division Code"},"decree_date":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Decree Date","description":"Bankruptcy decree date (YYYY-MM-DD) on konkursdekret notices"},"court":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Court"},"case_number":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Case Number"},"kurator":{"anyOf":[{"$ref":"#/components/schemas/NoticeKurator"},{"type":"null"}],"description":"Bankruptcy trustee as published"},"revoked":{"type":"boolean","title":"Revoked","description":"A later Ophævelse af konkursdekret revoked this decree","default":false},"revoked_by":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Revoked By","description":"Message number of the revoking notice"},"revokes":{"type":"boolean","title":"Revokes","description":"This notice revokes an earlier bankruptcy decree","default":false},"correction_of":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Correction Of","description":"Message number this notice corrects"},"corrected_by":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Corrected By","description":"Message number of a later correction"},"summary":{"type":"string","title":"Summary","description":"The notice as one Danish sentence or two","default":""},"fields":{"anyOf":[{"items":{"$ref":"#/components/schemas/NoticeFieldGroup"},"type":"array"},{"type":"null"}],"title":"Fields","description":"Structured fields as published (with include=fields; always on the single-notice endpoint). Submitter and billing groups and CPR numbers are left out."}},"type":"object","required":["message_number","publication_date","cvrs"],"title":"FeedNotice"},"FilteredDatabaseCounts":{"properties":{"active_companies_count":{"type":"integer","title":"Active Companies Count"},"geocoded_companies_count":{"type":"integer","title":"Geocoded Companies Count"},"geocoded_production_units_count":{"type":"integer","title":"Geocoded Production Units Count"},"requests_today":{"type":"integer","title":"Requests Today"}},"type":"object","required":["active_companies_count","geocoded_companies_count","geocoded_production_units_count","requests_today"],"title":"FilteredDatabaseCounts","description":"Slower counts that require filtering/scanning."},"FinancialMetric":{"type":"string","enum":["revenue","gross_profit","operating_profit","profit_loss","equity","total_assets","equity_ratio","current_ratio","return_on_equity","profit_margin","revenue_growth","gross_profit_growth","equity_growth"],"title":"FinancialMetric","description":"Key figures available as screening criteria.\n\nEach value is a key in the `latest_financials` subdocument. Amounts are\nDKK from the company's most recent annual report; ratios are fractions\n(equity_ratio 0.15 = 15% soliditetsgrad)."},"FinancialPeriod":{"properties":{"start_date":{"type":"string","format":"date-time","title":"Start Date","description":"Period start date"},"end_date":{"type":"string","format":"date-time","title":"End Date","description":"Period end date (fiscal year end)"}},"type":"object","required":["start_date","end_date"],"title":"FinancialPeriod","description":"Accounting period for a financial statement."},"FinancialRatios":{"properties":{"profit_margin":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Profit Margin","description":"Profit margin: profit_loss / revenue (overskudsgrad)"},"return_on_equity":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Return On Equity","description":"Return on equity: profit_loss / equity (egenkapitalforrentning)"},"equity_ratio":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Equity Ratio","description":"Equity ratio: equity / total_assets (soliditetsgrad)"},"current_ratio":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Current Ratio","description":"Current ratio: current_assets / shortterm_liabilities (likviditetsgrad)"}},"type":"object","title":"FinancialRatios","description":"Calculated financial ratios (nøgletal)."},"FinancialStatement":{"properties":{"cvr":{"type":"string","title":"Cvr","description":"8-digit CVR number","examples":["12345678"]},"period":{"$ref":"#/components/schemas/FinancialPeriod","description":"Accounting period"},"report_type":{"type":"string","title":"Report Type","description":"Type of publication","default":"regnskab","examples":["regnskab","koncernregnskab"]},"reporting_class":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Reporting Class","description":"Reporting class (regnskabsklasse)","examples":["A","B","C","D"]},"is_consolidated":{"type":"boolean","title":"Is Consolidated","description":"Whether this is a consolidated (group) report","default":false},"is_amended":{"type":"boolean","title":"Is Amended","description":"Whether this is an amended/corrected filing","default":false},"approval_date":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Approval Date","description":"Date report was approved by general assembly"},"chairman_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Chairman Name","description":"Name of meeting chairman (dirigent)"},"currency":{"type":"string","title":"Currency","description":"Currency for all amounts","default":"DKK"},"income_statement":{"$ref":"#/components/schemas/IncomeStatement","description":"Income statement figures"},"balance_sheet":{"$ref":"#/components/schemas/BalanceSheet","description":"Balance sheet figures"},"cash_flow":{"anyOf":[{"$ref":"#/components/schemas/CashFlowStatement"},{"type":"null"}],"description":"Cash flow statement (if available)"},"prev_income_statement":{"anyOf":[{"$ref":"#/components/schemas/IncomeStatement"},{"type":"null"}],"description":"Previous period income statement"},"prev_balance_sheet":{"anyOf":[{"$ref":"#/components/schemas/BalanceSheet"},{"type":"null"}],"description":"Previous period balance sheet"},"prev_cash_flow":{"anyOf":[{"$ref":"#/components/schemas/CashFlowStatement"},{"type":"null"}],"description":"Previous period cash flow"},"ratios":{"anyOf":[{"$ref":"#/components/schemas/FinancialRatios"},{"type":"null"}],"description":"Calculated financial ratios"},"employees":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Employees","description":"Average number of employees"},"dividend_proposed":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Dividend Proposed","description":"Proposed dividend amount in DKK"},"audit_info":{"anyOf":[{"$ref":"#/components/schemas/AuditInfo"},{"type":"null"}],"description":"Audit information"},"documents":{"items":{"$ref":"#/components/schemas/DocumentInfo"},"type":"array","title":"Documents","description":"Attached documents (PDF, XBRL)"},"meta":{"$ref":"#/components/schemas/FinancialStatementMeta","description":"Statement metadata"}},"type":"object","required":["cvr","period","meta"],"title":"FinancialStatement","description":"Complete financial statement (årsrapport) for a company.\n\nCombines metadata from CVR offentliggørelser with key figures extracted from XBRL documents."},"FinancialStatementMeta":{"properties":{"announcement_id":{"type":"string","title":"Announcement Id","description":"Unique announcement ID (URN) from CVR"},"case_number":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Case Number","description":"Case number (sagsNummer)"},"publication_date":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Publication Date","description":"Publication date on CVR"},"cvr_updated_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Cvr Updated At","description":"Last update timestamp from CVR"},"xbrl_parsed_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Xbrl Parsed At","description":"When XBRL was parsed by Selskabsbasen"},"created_at":{"type":"string","format":"date-time","title":"Created At","description":"Record creation time"},"updated_at":{"type":"string","format":"date-time","title":"Updated At","description":"Record last update time"}},"type":"object","required":["announcement_id"],"title":"FinancialStatementMeta","description":"Metadata about the financial statement."},"FinancialSummary":{"properties":{"period_end":{"type":"string","format":"date-time","title":"Period End","description":"End date of fiscal period"},"period_start":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Period Start","description":"Start date of fiscal period"},"reporting_scope":{"type":"string","title":"Reporting Scope","description":"group when explicitly recorded; otherwise unspecified. Legacy false consolidation flags do not prove company-only scope.","default":"unspecified"},"currency":{"type":"string","title":"Currency","description":"Currency code (e.g., DKK, EUR)","default":"DKK"},"revenue":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Revenue","description":"Annual revenue"},"gross_profit":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Gross Profit","description":"Gross profit"},"profit_loss":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Profit Loss","description":"Net profit/loss"},"total_assets":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Total Assets","description":"Total assets"},"equity":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Equity","description":"Shareholder equity"},"employees":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Employees","description":"Average number of employees"},"announcement_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Announcement Id","description":"Announcement ID for PDF download link"}},"type":"object","required":["period_end"],"title":"FinancialSummary","description":"Simplified financial summary for company overview."},"FinancialYearSummary":{"properties":{"year":{"type":"integer","title":"Year","description":"Fiscal year","examples":[2024]},"period_start":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Period Start","description":"Start of the reporting period"},"period_end":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Period End","description":"End of the reporting period"},"reporting_scope":{"type":"string","title":"Reporting Scope","description":"group when explicitly recorded; otherwise unspecified","default":"unspecified"},"currency":{"type":"string","title":"Currency","description":"Currency code (e.g., DKK, EUR)","default":"DKK"},"revenue":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Revenue","description":"Annual revenue (omsætning)"},"gross_profit":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Gross Profit","description":"Gross profit (bruttofortjeneste) in DKK"},"profit_loss":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Profit Loss","description":"Net profit/loss (årets resultat) in DKK"},"total_assets":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Total Assets","description":"Total assets (aktiver i alt) in DKK"},"equity":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Equity","description":"Shareholder equity (egenkapital) in DKK"},"employees":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Employees","description":"Average number of employees"},"announcement_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Announcement Id","description":"Announcement ID for linking to document download"},"has_pdf":{"type":"boolean","title":"Has Pdf","description":"Whether a PDF document is available","default":false},"has_xhtml":{"type":"boolean","title":"Has Xhtml","description":"Whether an XHTML (viewable) document is available","default":false},"source_url":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Source Url","description":"Public URL of the original filing at Erhvervsstyrelsen (regnskaber.virk.dk). Free for everyone; our inline viewer and PDF proxy remain Pro-only.","examples":["http://regnskaber.virk.dk/07887831/Y3ZyLmRrOi8vcGRmcy8xMzg3ODg3MA.pdf"]}},"type":"object","required":["year"],"title":"FinancialYearSummary","description":"Key financial figures for a single fiscal year."},"FokusArchiveMonth":{"properties":{"year":{"type":"integer","title":"Year"},"month":{"type":"integer","title":"Month"},"podium":{"items":{"$ref":"#/components/schemas/FokusPodiumEntry"},"type":"array","title":"Podium"}},"type":"object","required":["year","month","podium"],"title":"FokusArchiveMonth"},"FokusArchiveResponse":{"properties":{"months":{"items":{"$ref":"#/components/schemas/FokusArchiveMonth"},"type":"array","title":"Months"}},"type":"object","required":["months"],"title":"FokusArchiveResponse"},"FokusBoardResponse":{"properties":{"window_days":{"type":"integer","title":"Window Days"},"slots":{"type":"integer","title":"Slots"},"min_bid_dkk":{"type":"integer","title":"Min Bid Dkk"},"max_bid_dkk":{"type":"integer","title":"Max Bid Dkk"},"podium_decided_at":{"type":"string","title":"Podium Decided At"},"entries":{"items":{"$ref":"#/components/schemas/FokusEntry"},"type":"array","title":"Entries"},"total_active_dkk":{"type":"integer","title":"Total Active Dkk"}},"type":"object","required":["window_days","slots","min_bid_dkk","max_bid_dkk","podium_decided_at","entries","total_active_dkk"],"title":"FokusBoardResponse"},"FokusCheckoutRequest":{"properties":{"ga_client_id":{"anyOf":[{"type":"string","maxLength":64},{"type":"null"}],"title":"Ga Client Id","description":"GA4 client id from the _ga cookie (analytics attribution)"},"ga_session_id":{"anyOf":[{"type":"string","maxLength":32},{"type":"null"}],"title":"Ga Session Id","description":"GA4 session id from the _ga_<container> cookie (session attribution)"},"cvr":{"type":"string","title":"Cvr","description":"CVR of the company the bid features"},"amount_dkk":{"type":"integer","maximum":25000.0,"minimum":10.0,"title":"Amount Dkk","description":"Bid amount in whole DKK (VAT incl.)"},"success_url":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Success Url","description":"Redirect URL on success"},"cancel_url":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Cancel Url","description":"Redirect URL on cancel"}},"type":"object","required":["cvr","amount_dkk"],"title":"FokusCheckoutRequest","description":"Request to create a one-off \"Virksomheder i fokus\" bid checkout."},"FokusCheckoutResponse":{"properties":{"checkout_url":{"type":"string","title":"Checkout Url"}},"type":"object","required":["checkout_url"],"title":"FokusCheckoutResponse","description":"Response with fokus bid checkout URL."},"FokusCompanyResponse":{"properties":{"current":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Current"},"podiums":{"items":{"additionalProperties":true,"type":"object"},"type":"array","title":"Podiums","default":[]},"stats_30d":{"additionalProperties":true,"type":"object","title":"Stats 30D","default":{"impressions":0,"clicks":0}}},"type":"object","title":"FokusCompanyResponse"},"FokusConfirmRequest":{"properties":{"session_id":{"type":"string","title":"Session Id"}},"type":"object","required":["session_id"],"title":"FokusConfirmRequest"},"FokusEntry":{"properties":{"rank":{"type":"integer","title":"Rank"},"cvr":{"type":"string","title":"Cvr"},"name":{"type":"string","title":"Name"},"logo_url":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Logo Url"},"description":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Description"},"description_en":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Description En"},"total_dkk":{"type":"integer","title":"Total Dkk"},"bid_count":{"type":"integer","title":"Bid Count"},"is_claimed":{"type":"boolean","title":"Is Claimed","default":false},"social_links":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Social Links"},"website":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Website"},"on_frontpage":{"type":"boolean","title":"On Frontpage","default":false},"impressions_30d":{"type":"integer","title":"Impressions 30D","default":0}},"type":"object","required":["rank","cvr","name","total_dkk","bid_count"],"title":"FokusEntry"},"FokusPodiumEntry":{"properties":{"rank":{"type":"integer","title":"Rank"},"cvr":{"type":"string","title":"Cvr"},"name":{"type":"string","title":"Name"},"logo_url":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Logo Url"},"total_dkk":{"type":"integer","title":"Total Dkk"}},"type":"object","required":["rank","cvr","name","total_dkk"],"title":"FokusPodiumEntry"},"ForeignControlResponse":{"properties":{"dataset":{"type":"string","title":"Dataset"},"source_url":{"type":"string","title":"Source Url"},"source_updated_at":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Source Updated At"},"fetched_at":{"type":"string","format":"date-time","title":"Fetched At"},"nace":{"type":"string","title":"Nace"},"year":{"type":"integer","title":"Year"},"country_code":{"type":"string","title":"Country Code"},"country":{"$ref":"#/components/schemas/ControlFigures"},"rank":{"type":"integer","title":"Rank"},"countries_ranked":{"type":"integer","title":"Countries Ranked"},"foreign_total":{"$ref":"#/components/schemas/ControlFigures"}},"type":"object","required":["dataset","source_url","fetched_at","nace","year","country_code","country","rank","countries_ranked","foreign_total"],"title":"ForeignControlResponse"},"ForgotPasswordRequest":{"properties":{"email":{"type":"string","format":"email","title":"Email"}},"type":"object","required":["email"],"title":"ForgotPasswordRequest"},"GeoPolygon":{"properties":{"type":{"type":"string","title":"Type","default":"Polygon"},"coordinates":{"items":{"items":{"items":{"type":"number"},"type":"array"},"type":"array"},"type":"array","title":"Coordinates"}},"type":"object","required":["coordinates"],"title":"GeoPolygon","description":"GeoJSON Polygon."},"GeoRadius":{"properties":{"lat":{"type":"number","maximum":90.0,"minimum":-90.0,"title":"Lat","description":"Latitude of center"},"lng":{"type":"number","maximum":180.0,"minimum":-180.0,"title":"Lng","description":"Longitude of center"},"radius":{"type":"integer","maximum":50000.0,"minimum":50.0,"title":"Radius","description":"Radius in meters (50-50000)"}},"type":"object","required":["lat","lng","radius"],"title":"GeoRadius","description":"Circular geographic area (same bounds as /v1/companies geo search)."},"GlossaryFaqItem":{"properties":{"question":{"type":"string","title":"Question"},"answer":{"type":"string","title":"Answer"}},"type":"object","required":["question","answer"],"title":"GlossaryFaqItem"},"GlossaryFigure":{"properties":{"key":{"type":"string","title":"Key"},"label":{"type":"string","title":"Label"},"value":{"anyOf":[{"type":"integer"},{"type":"number"}],"title":"Value"},"unit":{"type":"string","enum":["ratio","dkk","count"],"title":"Unit"},"sample_size":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Sample Size"},"as_of":{"type":"string","title":"As Of"},"href":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Href"}},"type":"object","required":["key","label","value","unit","as_of"],"title":"GlossaryFigure","description":"One live figure on a term page (a quartile, a median or a company count)."},"GlossaryTermDetailResponse":{"properties":{"slug":{"type":"string","title":"Slug"},"category":{"type":"string","title":"Category"},"title":{"type":"string","title":"Title"},"meta_description":{"type":"string","title":"Meta Description"},"excerpt":{"type":"string","title":"Excerpt"},"sections":{"items":{"$ref":"#/components/schemas/GuideSection"},"type":"array","title":"Sections"},"related_terms":{"items":{"type":"string"},"type":"array","title":"Related Terms"},"cta":{"anyOf":[{"$ref":"#/components/schemas/GuideCTA"},{"type":"null"}]},"created_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Created At"},"updated_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Updated At"},"figures":{"items":{"$ref":"#/components/schemas/GlossaryFigure"},"type":"array","title":"Figures"},"faq":{"items":{"$ref":"#/components/schemas/GlossaryFaqItem"},"type":"array","title":"Faq"}},"type":"object","required":["slug","category","title","meta_description","excerpt"],"title":"GlossaryTermDetailResponse"},"GlossaryTermListItem":{"properties":{"slug":{"type":"string","title":"Slug"},"category":{"type":"string","title":"Category"},"title":{"type":"string","title":"Title"},"excerpt":{"type":"string","title":"Excerpt"}},"type":"object","required":["slug","category","title","excerpt"],"title":"GlossaryTermListItem"},"GlossaryTermListResponse":{"properties":{"terms":{"items":{"$ref":"#/components/schemas/GlossaryTermListItem"},"type":"array","title":"Terms"},"total":{"type":"integer","title":"Total"}},"type":"object","required":["terms","total"],"title":"GlossaryTermListResponse"},"GoogleAuthRequest":{"properties":{"credential":{"type":"string","title":"Credential"},"marketing_consent":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Marketing Consent"},"partner_code":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Partner Code"}},"type":"object","required":["credential"],"title":"GoogleAuthRequest","description":"Request to authenticate via Google."},"GoogleAuthResponse":{"properties":{"requires_2fa":{"type":"boolean","title":"Requires 2Fa","default":false},"temp_token":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Temp Token"},"access_token":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Access Token"},"token_type":{"type":"string","title":"Token Type","default":"bearer"},"is_new_user":{"type":"boolean","title":"Is New User","default":false}},"type":"object","title":"GoogleAuthResponse","description":"Response from Google OAuth login."},"GoogleLoginRequest":{"properties":{"credential":{"type":"string","title":"Credential"}},"type":"object","required":["credential"],"title":"GoogleLoginRequest"},"GrantTrialRequest":{"properties":{"user_email":{"type":"string","title":"User Email"},"tier_id":{"type":"string","title":"Tier Id","default":"pro"},"ends_at":{"type":"string","format":"date-time","title":"Ends At"},"reason":{"type":"string","title":"Reason"}},"type":"object","required":["user_email","ends_at","reason"],"title":"GrantTrialRequest"},"GuideCTA":{"properties":{"text":{"type":"string","title":"Text"},"href":{"type":"string","title":"Href"}},"type":"object","required":["text","href"],"title":"GuideCTA"},"GuideDetailResponse":{"properties":{"slug":{"type":"string","title":"Slug"},"category":{"type":"string","title":"Category"},"sort_order":{"type":"integer","title":"Sort Order"},"title":{"type":"string","title":"Title"},"meta_description":{"type":"string","title":"Meta Description"},"excerpt":{"type":"string","title":"Excerpt"},"sections":{"items":{"$ref":"#/components/schemas/GuideSection"},"type":"array","title":"Sections"},"related_guides":{"items":{"type":"string"},"type":"array","title":"Related Guides"},"cta":{"anyOf":[{"$ref":"#/components/schemas/GuideCTA"},{"type":"null"}]},"created_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Created At"},"updated_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Updated At"}},"type":"object","required":["slug","category","sort_order","title","meta_description","excerpt"],"title":"GuideDetailResponse"},"GuideListItem":{"properties":{"slug":{"type":"string","title":"Slug"},"category":{"type":"string","title":"Category"},"title":{"type":"string","title":"Title"},"excerpt":{"type":"string","title":"Excerpt"},"cta":{"anyOf":[{"$ref":"#/components/schemas/GuideCTA"},{"type":"null"}]}},"type":"object","required":["slug","category","title","excerpt"],"title":"GuideListItem"},"GuideListResponse":{"properties":{"guides":{"items":{"$ref":"#/components/schemas/GuideListItem"},"type":"array","title":"Guides"},"total":{"type":"integer","title":"Total"}},"type":"object","required":["guides","total"],"title":"GuideListResponse"},"GuideSection":{"properties":{"type":{"type":"string","title":"Type","description":"Section type: paragraph, heading, list, callout, internal_link"},"text":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Text"},"level":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Level"},"id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Id"},"ordered":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Ordered"},"items":{"anyOf":[{"items":{"type":"string"},"type":"array"},{"type":"null"}],"title":"Items"},"variant":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Variant"},"title":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Title"},"href":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Href"},"description":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Description"}},"type":"object","required":["type"],"title":"GuideSection"},"HTTPValidationError":{"properties":{"detail":{"items":{"$ref":"#/components/schemas/ValidationError"},"type":"array","title":"Detail"}},"type":"object","title":"HTTPValidationError"},"HqClaimRequest":{"properties":{"name":{"type":"string","maxLength":40,"minLength":1,"title":"Name"}},"type":"object","required":["name"],"title":"HqClaimRequest"},"HqClaimResponse":{"properties":{"rank":{"type":"integer","title":"Rank"},"name":{"type":"string","title":"Name"},"score":{"type":"integer","title":"Score"},"leaderboard":{"$ref":"#/components/schemas/HqLeaderboardResponse"}},"type":"object","required":["rank","name","score","leaderboard"],"title":"HqClaimResponse"},"HqDailyStats":{"properties":{"date":{"type":"string","title":"Date"},"plays":{"type":"integer","title":"Plays"},"percentile":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Percentile","description":"Share of today's plays this score beats (0-100)"},"avg_score":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Avg Score"},"hardest":{"anyOf":[{"$ref":"#/components/schemas/HqHardestCompany"},{"type":"null"}]}},"type":"object","required":["date","plays"],"title":"HqDailyStats"},"HqGameResponse":{"properties":{"mode":{"type":"string","title":"Mode"},"date":{"type":"string","title":"Date","description":"Copenhagen date the daily set is seeded by"},"daily_number":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Daily Number","description":"Daily challenge number, None in random mode"},"rounds":{"items":{"$ref":"#/components/schemas/HqRound"},"type":"array","title":"Rounds"},"count":{"type":"integer","title":"Count"}},"type":"object","required":["mode","date","rounds","count"],"title":"HqGameResponse"},"HqGuessLog":{"properties":{"cvr":{"type":"string","pattern":"^\\d{8}$","title":"Cvr"},"distance_km":{"type":"number","maximum":1000.0,"minimum":0.0,"title":"Distance Km"},"points":{"type":"integer","maximum":1000.0,"minimum":0.0,"title":"Points"}},"type":"object","required":["cvr","distance_km","points"],"title":"HqGuessLog"},"HqGuessRequest":{"properties":{"lat":{"type":"number","maximum":90.0,"minimum":-90.0,"title":"Lat"},"lng":{"type":"number","maximum":180.0,"minimum":-180.0,"title":"Lng"}},"type":"object","required":["lat","lng"],"title":"HqGuessRequest"},"HqGuessResponse":{"properties":{"round_index":{"type":"integer","title":"Round Index"},"lat":{"type":"number","title":"Lat","description":"Actual HQ latitude"},"lng":{"type":"number","title":"Lng"},"city":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"City"},"street":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Street"},"distance_km":{"type":"number","title":"Distance Km"},"points":{"type":"integer","title":"Points"},"total_score":{"type":"integer","title":"Total Score"},"done":{"type":"boolean","title":"Done"},"stats":{"anyOf":[{"$ref":"#/components/schemas/HqDailyStats"},{"type":"null"}],"description":"Set on the final daily round"}},"type":"object","required":["round_index","lat","lng","distance_km","points","total_score","done"],"title":"HqGuessResponse"},"HqHardestCompany":{"properties":{"cvr":{"type":"string","title":"Cvr"},"name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Name"},"avg_distance_km":{"type":"number","title":"Avg Distance Km"}},"type":"object","required":["cvr","avg_distance_km"],"title":"HqHardestCompany"},"HqLeaderboardEntry":{"properties":{"rank":{"type":"integer","title":"Rank"},"name":{"type":"string","title":"Name"},"score":{"type":"integer","title":"Score"}},"type":"object","required":["rank","name","score"],"title":"HqLeaderboardEntry"},"HqLeaderboardResponse":{"properties":{"date":{"type":"string","title":"Date"},"entries":{"items":{"$ref":"#/components/schemas/HqLeaderboardEntry"},"type":"array","title":"Entries"},"plays":{"type":"integer","title":"Plays","description":"All plays today incl. anonymous"}},"type":"object","required":["date","entries","plays"],"title":"HqLeaderboardResponse"},"HqResultLog":{"properties":{"rounds":{"items":{"$ref":"#/components/schemas/HqGuessLog"},"type":"array","maxItems":10,"minItems":10,"title":"Rounds"}},"type":"object","required":["rounds"],"title":"HqResultLog"},"HqRound":{"properties":{"cvr":{"type":"string","title":"Cvr"},"name":{"type":"string","title":"Name"},"logo_url":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Logo Url"},"lat":{"type":"number","title":"Lat"},"lng":{"type":"number","title":"Lng"},"city":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"City","description":"Revealed after the guess"},"street":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Street","description":"Revealed after the guess"}},"type":"object","required":["cvr","name","lat","lng"],"title":"HqRound"},"HqSessionResponse":{"properties":{"session_id":{"type":"string","title":"Session Id"},"mode":{"type":"string","title":"Mode"},"date":{"type":"string","title":"Date"},"daily_number":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Daily Number"},"rounds":{"items":{"$ref":"#/components/schemas/HqSessionRound"},"type":"array","title":"Rounds"},"count":{"type":"integer","title":"Count"}},"type":"object","required":["session_id","mode","date","rounds","count"],"title":"HqSessionResponse"},"HqSessionRound":{"properties":{"cvr":{"type":"string","title":"Cvr"},"name":{"type":"string","title":"Name"},"logo_url":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Logo Url"}},"type":"object","required":["cvr","name"],"title":"HqSessionRound"},"IncomeStatement":{"properties":{"revenue":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Revenue","description":"Net revenue (nettoomsætning)"},"gross_profit":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Gross Profit","description":"Gross profit (bruttofortjeneste)"},"ebitda":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Ebitda","description":"EBITDA - profit before depreciation & amortization"},"operating_profit":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Operating Profit","description":"Operating profit (resultat af ordinær primær drift)"},"profit_before_tax":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Profit Before Tax","description":"Profit before tax (resultat før skat)"},"profit_loss":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Profit Loss","description":"Net profit/loss for the year (årets resultat)"},"tax_expense":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Tax Expense","description":"Tax expense (skat af årets resultat)"},"external_expenses":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"External Expenses","description":"External expenses (eksterne omkostninger)"},"staff_costs":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Staff Costs","description":"Staff costs (personaleomkostninger)"},"depreciation":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Depreciation","description":"Depreciation & amortization (af- og nedskrivninger)"},"finance_income":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Finance Income","description":"Finance income (finansielle indtægter)"},"finance_costs":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Finance Costs","description":"Finance costs (finansielle omkostninger)"},"other_income":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Other Income","description":"Other operating income"},"income_from_subsidiaries":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Income From Subsidiaries","description":"Income from investments in subsidiaries"},"income_from_associates":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Income From Associates","description":"Income from investments in associates"}},"type":"object","title":"IncomeStatement","description":"Key figures from the income statement (resultatopgørelse). All amounts in DKK."},"Industry":{"properties":{"code":{"type":"string","title":"Code","description":"6-digit industry code (DB07)","examples":["620100"]},"name":{"type":"string","title":"Name","description":"Industry name in selected locale"},"name_en":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Name En","description":"English industry name"},"count":{"type":"integer","title":"Count","description":"Total company count (primary + secondary)"},"primary_count":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Primary Count","description":"Companies with this as primary industry"},"secondary_count":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Secondary Count","description":"Companies with this as secondary industry"},"active_count":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Active Count","description":"Active companies with this as primary industry; null until computed, 0 for a retired code"},"division":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Division","description":"2-digit industry category (division) the code belongs to"}},"type":"object","required":["code","name","count"],"title":"Industry","description":"Industry data for dropdown/filter."},"IndustryBenchmark":{"properties":{"industry_code":{"type":"string","title":"Industry Code"},"industry_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Industry Name"},"period":{"type":"string","title":"Period"},"sample_size":{"type":"integer","title":"Sample Size"},"metrics":{"$ref":"#/components/schemas/IndustryMetrics"},"by_municipality":{"items":{"$ref":"#/components/schemas/IndustryMunicipality"},"type":"array","title":"By Municipality"},"company_types":{"items":{"$ref":"#/components/schemas/CompanyType"},"type":"array","title":"Company Types","default":[]},"top_companies":{"items":{"$ref":"#/components/schemas/TopCompany"},"type":"array","title":"Top Companies","default":[]},"year_over_year":{"anyOf":[{"$ref":"#/components/schemas/IndustryYearOverYear"},{"type":"null"}]},"score_distribution":{"anyOf":[{"$ref":"#/components/schemas/ScoreDistribution"},{"type":"null"}]},"score_deviation":{"anyOf":[{"$ref":"#/components/schemas/ScoreDeviation"},{"type":"null"}]},"generated_at":{"type":"string","format":"date-time","title":"Generated At"}},"type":"object","required":["industry_code","industry_name","period","sample_size","metrics","by_municipality","year_over_year","generated_at"],"title":"IndustryBenchmark"},"IndustryBenchmarkResponse":{"properties":{"data":{"$ref":"#/components/schemas/IndustryBenchmark"},"historical":{"anyOf":[{"items":{"$ref":"#/components/schemas/IndustryHistoryPoint"},"type":"array"},{"type":"null"}],"title":"Historical"}},"type":"object","required":["data"],"title":"IndustryBenchmarkResponse"},"IndustryGroupDivision":{"properties":{"code":{"type":"string","title":"Code"},"name":{"type":"string","title":"Name"},"name_en":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Name En"},"count":{"type":"integer","title":"Count"}},"type":"object","required":["code","name","count"],"title":"IndustryGroupDivision"},"IndustryGroupListResponse":{"properties":{"data":{"items":{"$ref":"#/components/schemas/IndustryGroupSummary"},"type":"array","title":"Data"},"count":{"type":"integer","title":"Count"}},"type":"object","required":["data","count"],"title":"IndustryGroupListResponse"},"IndustryGroupMunicipality":{"properties":{"code":{"type":"string","title":"Code"},"name":{"type":"string","title":"Name"},"count":{"type":"integer","title":"Count"}},"type":"object","required":["code","name","count"],"title":"IndustryGroupMunicipality"},"IndustryGroupReport":{"properties":{"slug":{"type":"string","title":"Slug"},"name":{"type":"string","title":"Name"},"name_en":{"type":"string","title":"Name En"},"name_plural":{"type":"string","title":"Name Plural"},"name_plural_en":{"type":"string","title":"Name Plural En"},"title":{"type":"string","title":"Title"},"title_en":{"type":"string","title":"Title En"},"sector":{"type":"boolean","title":"Sector"},"divisions":{"items":{"$ref":"#/components/schemas/IndustryGroupDivision"},"type":"array","title":"Divisions"},"codes":{"items":{"type":"string"},"type":"array","title":"Codes"},"company_count":{"type":"integer","title":"Company Count"},"revenue_total":{"type":"integer","title":"Revenue Total"},"revenue_companies":{"type":"integer","title":"Revenue Companies"},"employees_total":{"type":"integer","title":"Employees Total"},"top_companies":{"items":{"$ref":"#/components/schemas/MunicipalityDivisionCompany"},"type":"array","title":"Top Companies"},"by_municipality":{"items":{"$ref":"#/components/schemas/IndustryGroupMunicipality"},"type":"array","title":"By Municipality"},"company_types":{"items":{"$ref":"#/components/schemas/CompanyType"},"type":"array","title":"Company Types"},"generated_at":{"type":"string","format":"date-time","title":"Generated At"}},"type":"object","required":["slug","name","name_en","name_plural","name_plural_en","title","title_en","sector","divisions","codes","company_count","revenue_total","revenue_companies","employees_total","top_companies","by_municipality","company_types","generated_at"],"title":"IndustryGroupReport","description":"Aggregate for one curated industry group (sector hub or toplist scope)."},"IndustryGroupReportResponse":{"properties":{"data":{"$ref":"#/components/schemas/IndustryGroupReport"}},"type":"object","required":["data"],"title":"IndustryGroupReportResponse"},"IndustryGroupSummary":{"properties":{"slug":{"type":"string","title":"Slug"},"name":{"type":"string","title":"Name"},"name_en":{"type":"string","title":"Name En"},"company_count":{"type":"integer","title":"Company Count"}},"type":"object","required":["slug","name","name_en","company_count"],"title":"IndustryGroupSummary"},"IndustryHistoryPoint":{"properties":{"period":{"type":"string","title":"Period"},"sample_size":{"type":"integer","title":"Sample Size"},"revenue_median":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Revenue Median"}},"type":"object","required":["period","sample_size","revenue_median"],"title":"IndustryHistoryPoint"},"IndustryInfo":{"properties":{"code":{"type":"string","title":"Code"},"name":{"type":"string","title":"Name"},"division":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Division"},"group":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Group"},"primary_count":{"type":"integer","title":"Primary Count"},"secondary_count":{"type":"integer","title":"Secondary Count"},"active_count":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Active Count"}},"type":"object","required":["code","name","division","group","primary_count","secondary_count"],"title":"IndustryInfo","description":"Basic industry information from the industry_codes collection."},"IndustryMetrics":{"properties":{"revenue":{"$ref":"#/components/schemas/PercentileMetrics"},"profit_margin":{"$ref":"#/components/schemas/PercentileMetrics"},"employees":{"$ref":"#/components/schemas/PercentileMetrics"},"equity_ratio":{"$ref":"#/components/schemas/PercentileMetrics"}},"type":"object","required":["revenue","profit_margin","employees","equity_ratio"],"title":"IndustryMetrics"},"IndustryMunicipality":{"properties":{"code":{"type":"string","title":"Code"},"name":{"type":"string","title":"Name"},"count":{"type":"integer","title":"Count"},"avg_revenue":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Avg Revenue"}},"type":"object","required":["code","name","count"],"title":"IndustryMunicipality"},"IndustrySummary":{"properties":{"code":{"type":"string","title":"Code"},"name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Name"},"sample_size":{"type":"integer","title":"Sample Size"},"revenue_median":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Revenue Median"}},"type":"object","required":["code","name","sample_size","revenue_median"],"title":"IndustrySummary"},"IndustryTranslation":{"properties":{"da":{"type":"string","title":"Da","description":"Danish name"},"en":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"En","description":"English name"}},"type":"object","required":["da"],"title":"IndustryTranslation","description":"Industry translation with both Danish and English names."},"IndustryTranslationsResponse":{"properties":{"translations":{"additionalProperties":{"$ref":"#/components/schemas/IndustryTranslation"},"type":"object","title":"Translations","description":"Map of code to translations"},"count":{"type":"integer","title":"Count","description":"Number of translations"}},"type":"object","required":["translations","count"],"title":"IndustryTranslationsResponse","description":"Response with all industry translations for client-side caching."},"IndustryYearOverYear":{"properties":{"sample_size_change":{"type":"integer","title":"Sample Size Change"},"sample_size_change_pct":{"type":"number","title":"Sample Size Change Pct"},"revenue_median_change_pct":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Revenue Median Change Pct"}},"type":"object","required":["sample_size_change","sample_size_change_pct"],"title":"IndustryYearOverYear"},"InvoiceItem":{"properties":{"id":{"type":"string","title":"Id"},"number":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Number"},"amount":{"type":"integer","title":"Amount"},"currency":{"type":"string","title":"Currency"},"status":{"type":"string","title":"Status"},"created":{"type":"string","format":"date-time","title":"Created"},"period_start":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Period Start"},"period_end":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Period End"},"invoice_url":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Invoice Url"},"pdf_url":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Pdf Url"}},"type":"object","required":["id","number","amount","currency","status","created","period_start","period_end","invoice_url","pdf_url"],"title":"InvoiceItem","description":"A single invoice from Stripe."},"InvoicesResponse":{"properties":{"invoices":{"items":{"$ref":"#/components/schemas/InvoiceItem"},"type":"array","title":"Invoices"},"has_more":{"type":"boolean","title":"Has More"}},"type":"object","required":["invoices","has_more"],"title":"InvoicesResponse","description":"Response with list of invoices."},"JobListing":{"properties":{"job_id":{"type":"string","title":"Job Id"},"title":{"type":"string","title":"Title"},"url":{"type":"string","title":"Url"},"location":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Location"},"added_at":{"type":"string","format":"date-time","title":"Added At"}},"type":"object","required":["job_id","title","url"],"title":"JobListing","description":"A job listing on the profile (Plus tier only)."},"KoncernGraphEdge":{"properties":{"source":{"type":"string","title":"Source"},"target":{"type":"string","title":"Target"},"ownership_percent":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Ownership Percent"},"voting_percent":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Voting Percent"}},"type":"object","required":["source","target"],"title":"KoncernGraphEdge"},"KoncernGraphNode":{"properties":{"id":{"type":"string","title":"Id"},"type":{"type":"string","title":"Type"},"name":{"type":"string","title":"Name"},"cvr":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Cvr"},"unit_number":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Unit Number"},"status":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Status"},"depth":{"type":"integer","title":"Depth"}},"type":"object","required":["id","type","name","depth"],"title":"KoncernGraphNode"},"KoncernGraphResponse":{"properties":{"root":{"type":"string","title":"Root"},"nodes":{"items":{"$ref":"#/components/schemas/KoncernGraphNode"},"type":"array","title":"Nodes"},"edges":{"items":{"$ref":"#/components/schemas/KoncernGraphEdge"},"type":"array","title":"Edges"},"truncated":{"type":"boolean","title":"Truncated","default":false}},"type":"object","required":["root","nodes","edges"],"title":"KoncernGraphResponse"},"KuratorDirectoryEntry":{"properties":{"name":{"type":"string","title":"Name","description":"Kurator name as published"},"title":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Title","description":"Title (e.g. Advokat)"},"active_cases_12m":{"type":"integer","title":"Active Cases 12M","description":"Konkursdekret appointments in the last 12 months"},"latest_appointment":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Latest Appointment","description":"Most recent appointment date"},"courts":{"items":{"type":"string"},"type":"array","title":"Courts","description":"Courts appearing in the appointments"}},"type":"object","required":["name","active_cases_12m"],"title":"KuratorDirectoryEntry"},"KuratorDirectoryResponse":{"properties":{"data":{"items":{"$ref":"#/components/schemas/KuratorDirectoryEntry"},"type":"array","title":"Data"},"meta":{"additionalProperties":true,"type":"object","title":"Meta"}},"type":"object","required":["data","meta"],"title":"KuratorDirectoryResponse"},"KuratorInfo":{"properties":{"title":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Title"},"name":{"type":"string","title":"Name"},"address":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Address"},"court":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Court"}},"type":"object","required":["name"],"title":"KuratorInfo","description":"Bankruptcy trustee as published in the notice (professional capacity)."},"KuratorItem":{"properties":{"title":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Title"},"name":{"type":"string","title":"Name"},"address":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Address"},"court":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Court"}},"type":"object","required":["name"],"title":"KuratorItem"},"LatestFinancials":{"properties":{"revenue":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Revenue","description":"Latest annual amount in the statement's currency. Missing or zero revenue falls back to gross profit; inspect metric to identify the amount (legacy field name)."},"year":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Year","description":"Year of the financial data","examples":[2024]},"currency":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Currency","description":"Currency code of the figures (e.g., DKK, EUR, USD)","default":"DKK"},"metric":{"type":"string","title":"Metric","description":"Metric carried in the legacy revenue field: revenue or gross_profit","default":"revenue"},"period_end":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Period End","description":"End date of the annual reporting period"}},"type":"object","title":"LatestFinancials","description":"Latest financial figures for search results (lightweight)."},"LatestNewsItem":{"properties":{"kind":{"type":"string","title":"Kind"},"title":{"type":"string","title":"Title"},"summary":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Summary"},"url":{"type":"string","title":"Url"},"source":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Source"},"source_domain":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Source Domain"},"published_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Published At"},"companies":{"items":{"$ref":"#/components/schemas/NewsCompanyRef"},"type":"array","title":"Companies"}},"type":"object","required":["kind","title","url","companies"],"title":"LatestNewsItem"},"LatestNewsResponse":{"properties":{"items":{"items":{"$ref":"#/components/schemas/LatestNewsItem"},"type":"array","title":"Items"},"count":{"type":"integer","title":"Count"}},"type":"object","required":["items","count"],"title":"LatestNewsResponse"},"LeadListFilters":{"properties":{"screen":{"anyOf":[{"$ref":"#/components/schemas/LeadListScreenCriteria"},{"type":"null"}],"description":"Screening criteria — the same model as POST /v1/screen. May be null when list_ids or connection_ids provide the scope."},"list_ids":{"items":{"type":"string"},"type":"array","maxItems":20,"title":"List Ids","description":"Company list IDs — restrict to companies in these lists"},"connection_ids":{"items":{"type":"string"},"type":"array","maxItems":10,"title":"Connection Ids","description":"Accounting connection IDs — restrict to companies matched in these integrations"},"employee_intervals":{"items":{"type":"string"},"type":"array","maxItems":11,"title":"Employee Intervals","description":"CVR employee-count intervals (e.g. '2-4', '10-19', 'ANTAL_1000_999999'). Multiple selections OR together, so disjoint brackets stay expressible — unlike the single numeric `screen.employees` range. Unknown interval keys are ignored, matching the legacy shape's behaviour."}},"additionalProperties":false,"type":"object","required":["screen"],"title":"LeadListFilters","description":"New-style lead-list filters: the shared screening model plus the\nlead-list-only user scopes layered on top.\n\nThe `screen` key is required (but nullable) and extra keys are\nforbidden — that is what lets request bodies and stored documents be\ntold apart from the legacy flat ReportFilters shape with certainty."},"LeadListScreenCriteria":{"properties":{"industry_codes":{"items":{"type":"string"},"type":"array","maxItems":20,"title":"Industry Codes","description":"DB07 industry codes, 2-6 digits. Codes shorter than 6 digits match as prefixes: `47` matches every retail code. Matches primary or secondary industry."},"company_types":{"items":{"type":"string"},"type":"array","maxItems":20,"title":"Company Types","description":"Company type codes, e.g. A/S, ApS, ENK"},"statuses":{"items":{"type":"string"},"type":"array","maxItems":4,"title":"Statuses","description":"Company statuses to include. Defaults to active companies only. Valid values: active, dissolved, under_bankruptcy, liquidation."},"founded":{"anyOf":[{"$ref":"#/components/schemas/DateRange"},{"type":"null"}],"description":"Founding date range (inclusive)"},"municipality_codes":{"items":{"type":"string"},"type":"array","maxItems":99,"title":"Municipality Codes","description":"Municipality codes"},"postal_codes":{"items":{"type":"string"},"type":"array","maxItems":100,"title":"Postal Codes","description":"Postal codes"},"region_codes":{"items":{"type":"string"},"type":"array","maxItems":5,"title":"Region Codes","description":"Region codes (resolved to the region's municipalities)"},"geo":{"anyOf":[{"$ref":"#/components/schemas/GeoRadius"},{"type":"null"}],"description":"Circular geographic area around a coordinate"},"employees":{"anyOf":[{"$ref":"#/components/schemas/NumericRange"},{"type":"null"}],"description":"Employee count range. Uses the best known headcount (max of CVR-reported and annual-report FTE)."},"financials":{"additionalProperties":{"$ref":"#/components/schemas/NumericRange"},"propertyNames":{"$ref":"#/components/schemas/FinancialMetric"},"type":"object","title":"Financials","description":"Key figure ranges, e.g. `{\"equity_ratio\": {\"min\": 0.15}}`. Valid keys: revenue, gross_profit, operating_profit, profit_loss, equity, total_assets, equity_ratio, current_ratio, return_on_equity, profit_margin, revenue_growth, gross_profit_growth, equity_growth. Amounts in DKK; ratios and growth rates as fractions. Note that most small companies (reporting class B) do not publish revenue, only gross profit. A company only matches a metric filter if its latest annual report contains that metric."},"reporting_classes":{"items":{"type":"string"},"type":"array","maxItems":4,"title":"Reporting Classes","description":"Reporting classes (regnskabsklasse) to include: A, B, C, D"},"financial_period_end_after":{"anyOf":[{"type":"string","format":"date"},{"type":"null"}],"title":"Financial Period End After","description":"Only match companies whose latest annual report period ends on or after this date (freshness guard)"},"late_filings":{"anyOf":[{"$ref":"#/components/schemas/NumericRange"},{"type":"null"}],"description":"Number of the last 5 annual reports filed after the statutory deadline (ÅRL § 138). Only companies with computed reporting signals match."},"auditor_changes":{"anyOf":[{"$ref":"#/components/schemas/NumericRange"},{"type":"null"}],"description":"Auditor firm changes across the last 5 annual reports"},"has_overdue_filing":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Has Overdue Filing","description":"Active companies whose next expected annual report has passed its statutory deadline without being published"},"has_going_concern":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Has Going Concern","description":"The latest report carries a going concern emphasis from the auditor"},"has_qualified_opinion":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Has Qualified Opinion","description":"The latest auditor opinion is not unqualified"},"cds_score":{"anyOf":[{"$ref":"#/components/schemas/NumericRange"},{"type":"null"}],"description":"CDS (CompanyData Score) range, 0-100. Only companies with a computed score match."},"cds_ratings":{"items":{"type":"string"},"type":"array","maxItems":5,"title":"Cds Ratings","description":"CDS rating buckets to include: excellent, good, moderate, high_risk, critical"},"has_phone":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Has Phone","description":"Company has a phone number"},"has_email":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Has Email","description":"Company has an email address"},"has_website":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Has Website","description":"Company has a website"},"has_properties":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Has Properties","description":"Company owns properties"},"property_area":{"anyOf":[{"$ref":"#/components/schemas/NumericRange"},{"type":"null"}],"description":"Total building area (m²) across owned properties"},"property_zones":{"items":{"type":"string"},"type":"array","maxItems":3,"title":"Property Zones","description":"Planzone of owned properties: byzone, landzone and/or sommerhusomraade. Matches companies owning at least one property in any selected zone."},"has_flood_risk_properties":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Has Flood Risk Properties","description":"Company owns at least one property with elevated flood risk (in a cloudburst depression or flooded at a storm surge of 3 m or less, per Klimadatastyrelsen's DHM models)"},"has_poor_energy_label":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Has Poor Energy Label","description":"Company owns at least one property whose current energy label is D, E, F or G (per Energistyrelsen's EMOData register)"},"auditor_cvrs":{"items":{"type":"string"},"type":"array","maxItems":10,"title":"Auditor Cvrs","description":"Companies whose current registered auditor is one of these audit firms (CVR numbers)"},"contact_role_categories":{"items":{"type":"string"},"type":"array","maxItems":9,"title":"Contact Role Categories","description":"Companies with an enriched contact person in any of these role categories (management, sales, marketing, it, hr, finance, operations, procurement, customer_service). Sourced from the company's own website."},"has_livestock":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Has Livestock","description":"Company has at least one active livestock herd in CHR. Companies with a CHR marketing protection are excluded."},"livestock_species_codes":{"items":{"type":"integer"},"type":"array","maxItems":20,"title":"Livestock Species Codes","description":"CHR species (dyreart) codes, e.g. 12=Kvæg, 15=Svin, 13=Får. Matches companies with at least one active herd of any selected species. Implies the CHR marketing protection exclusion."},"exclude_advertising_protected":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Exclude Advertising Protected","description":"Exclude companies with CVR advertising protection (reklamebeskyttelse). Required when results are used for direct marketing."}},"type":"object","title":"LeadListScreenCriteria","description":"ScreenFilters without the standalone at-least-one guard: inside a\nlead list, employee_intervals / list_ids / connection_ids can provide\nthe anchor instead (e.g. the UI's default exclude_advertising_protected\nplus an employee interval). LeadListFilters.screen_or_scope enforces\nthe combined rule."},"LeadResponse":{"properties":{"lead_id":{"type":"string","title":"Lead Id"},"name":{"type":"string","title":"Name"},"email":{"type":"string","format":"email","title":"Email"},"phone":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Phone"},"message":{"type":"string","title":"Message"},"submitted_at":{"type":"string","format":"date-time","title":"Submitted At"},"read":{"type":"boolean","title":"Read"},"archived":{"type":"boolean","title":"Archived"}},"type":"object","required":["lead_id","name","email","message","submitted_at","read","archived"],"title":"LeadResponse","description":"Response with lead data."},"LeadSubmitRequest":{"properties":{"name":{"type":"string","title":"Name"},"email":{"type":"string","format":"email","title":"Email"},"phone":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Phone"},"message":{"type":"string","title":"Message"}},"type":"object","required":["name","email","message"],"title":"LeadSubmitRequest","description":"Request to submit a contact form (lead)."},"LeadSubmitResponse":{"properties":{"success":{"type":"boolean","title":"Success"},"message":{"type":"string","title":"Message"}},"type":"object","required":["success","message"],"title":"LeadSubmitResponse","description":"Response from lead submission."},"LeadUpdateRequest":{"properties":{"read":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Read"},"archived":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Archived"}},"type":"object","title":"LeadUpdateRequest","description":"Request to update lead status."},"LegalNoticeItem":{"properties":{"message_number":{"type":"string","title":"Message Number"},"publication_date":{"type":"string","title":"Publication Date"},"message_type_name":{"type":"string","title":"Message Type Name"},"cvrs":{"items":{"type":"string"},"type":"array","title":"Cvrs"},"company_name":{"type":"string","title":"Company Name","default":""},"summary":{"type":"string","title":"Summary","default":""},"kurator":{"anyOf":[{"$ref":"#/components/schemas/KuratorInfo"},{"type":"null"}],"description":"Kurator (trustee) when the notice appoints one"}},"type":"object","required":["message_number","publication_date","message_type_name"],"title":"LegalNoticeItem","description":"A single legal notice from Statstidende."},"LegalNoticePublicItem":{"properties":{"message_number":{"type":"string","title":"Message Number"},"publication_date":{"type":"string","title":"Publication Date"},"message_type_name":{"type":"string","title":"Message Type Name"},"cvrs":{"items":{"type":"string"},"type":"array","title":"Cvrs"},"company_name":{"type":"string","title":"Company Name","default":""},"event_type":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Event Type"},"summary":{"type":"string","title":"Summary","default":""}},"type":"object","required":["message_number","publication_date","message_type_name"],"title":"LegalNoticePublicItem","description":"A legal notice for the public listing page."},"LegalNoticesPublicResponse":{"properties":{"notices":{"items":{"$ref":"#/components/schemas/LegalNoticePublicItem"},"type":"array","title":"Notices"},"total":{"type":"integer","title":"Total"}},"type":"object","required":["notices","total"],"title":"LegalNoticesPublicResponse","description":"Response for public legal notices listing."},"LegalNoticesResponse":{"properties":{"notices":{"items":{"$ref":"#/components/schemas/LegalNoticeItem"},"type":"array","title":"Notices"},"total":{"type":"integer","title":"Total"}},"type":"object","required":["notices","total"],"title":"LegalNoticesResponse","description":"Response for company legal notices."},"ListsResponse":{"properties":{"data":{"items":{"$ref":"#/components/schemas/CompanyListSummary"},"type":"array","title":"Data"},"meta":{"additionalProperties":true,"type":"object","title":"Meta","default":{}}},"type":"object","required":["data"],"title":"ListsResponse","description":"Response with multiple lists."},"LivestockHerd":{"properties":{"chr_number":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Chr Number"},"herd_number":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Herd Number"},"species":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Species"},"usage":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Usage"},"business_type":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Business Type"},"sizes":{"items":{"$ref":"#/components/schemas/LivestockHerdSize"},"type":"array","title":"Sizes","default":[]},"total_animals":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Total Animals"},"organic":{"type":"boolean","title":"Organic","default":false},"sizes_updated_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Sizes Updated At"},"created_date":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Created Date"},"updated_date":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Updated Date"},"property":{"anyOf":[{"$ref":"#/components/schemas/LivestockHerdProperty"},{"type":"null"}]}},"type":"object","title":"LivestockHerd"},"LivestockHerdProperty":{"properties":{"bfe_number":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Bfe Number","description":"BFE number of the property the herd stands on, resolved from the CHR stald coordinate via the matrikel register"},"address":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Address","description":"Location address of the CHR-nummer (the herd's physical site)"},"has_page":{"type":"boolean","title":"Has Page","description":"Whether property data exists for the BFE (i.e. a property page can be linked)","default":false}},"type":"object","title":"LivestockHerdProperty"},"LivestockHerdSize":{"properties":{"label":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Label"},"count":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Count"}},"type":"object","title":"LivestockHerdSize"},"LogoUploadRequest":{"properties":{"url":{"type":"string","title":"Url"}},"type":"object","required":["url"],"title":"LogoUploadRequest","description":"Request to update logo URL."},"LogoUploadResponse":{"properties":{"success":{"type":"boolean","title":"Success"},"logo_url":{"type":"string","title":"Logo Url"}},"type":"object","required":["success","logo_url"],"title":"LogoUploadResponse","description":"Response from logo update."},"LogoutResponse":{"properties":{"success":{"type":"boolean","title":"Success"},"message":{"type":"string","title":"Message"}},"type":"object","required":["success","message"],"title":"LogoutResponse"},"MarketingConsentRequest":{"properties":{"consent":{"type":"boolean","title":"Consent"}},"type":"object","required":["consent"],"title":"MarketingConsentRequest","description":"Response to the one-time newsletter consent prompt."},"MatrikelPolygon":{"properties":{"matrikelnummer":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Matrikelnummer"},"ejerlav_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Ejerlav Id"},"geometry":{"$ref":"#/components/schemas/GeoPolygon"}},"type":"object","required":["geometry"],"title":"MatrikelPolygon","description":"A matrikel parcel polygon with metadata."},"Municipality":{"properties":{"code":{"type":"string","title":"Code","description":"Municipality code","examples":["101"]},"name":{"type":"string","title":"Name","description":"Municipality name","examples":["København"]},"region_code":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Region Code","description":"Region code","examples":["1084"]},"region_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Region Name","description":"Region name","examples":["Region Hovedstaden"]}},"type":"object","required":["code","name"],"title":"Municipality","description":"Municipality data for dropdown/filter."},"MunicipalityDivisionCompany":{"properties":{"rank":{"type":"integer","title":"Rank"},"cvr":{"type":"string","title":"Cvr"},"name":{"type":"string","title":"Name"},"revenue":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Revenue"},"employees":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Employees"},"industry_code":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Industry Code"},"industry_text":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Industry Text"}},"type":"object","required":["rank","cvr","name"],"title":"MunicipalityDivisionCompany"},"MunicipalityDivisionListResponse":{"properties":{"data":{"items":{"$ref":"#/components/schemas/MunicipalityDivisionSummary"},"type":"array","title":"Data"},"count":{"type":"integer","title":"Count"},"municipality_code":{"type":"string","title":"Municipality Code"},"municipality_name":{"type":"string","title":"Municipality Name"}},"type":"object","required":["data","count","municipality_code","municipality_name"],"title":"MunicipalityDivisionListResponse"},"MunicipalityDivisionReport":{"properties":{"municipality_code":{"type":"string","title":"Municipality Code"},"municipality_name":{"type":"string","title":"Municipality Name"},"division":{"type":"string","title":"Division"},"division_name":{"type":"string","title":"Division Name"},"division_name_en":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Division Name En"},"count":{"type":"integer","title":"Count"},"revenue_total":{"type":"integer","title":"Revenue Total"},"revenue_companies":{"type":"integer","title":"Revenue Companies"},"employees_total":{"type":"integer","title":"Employees Total"},"top_companies":{"items":{"$ref":"#/components/schemas/MunicipalityDivisionCompany"},"type":"array","title":"Top Companies"},"company_types":{"items":{"$ref":"#/components/schemas/CompanyType"},"type":"array","title":"Company Types"},"generated_at":{"type":"string","format":"date-time","title":"Generated At"}},"type":"object","required":["municipality_code","municipality_name","division","division_name","count","revenue_total","revenue_companies","employees_total","top_companies","company_types","generated_at"],"title":"MunicipalityDivisionReport","description":"Precomputed statistics for one (kommune, 2-digit division) combination."},"MunicipalityDivisionReportResponse":{"properties":{"data":{"$ref":"#/components/schemas/MunicipalityDivisionReport"}},"type":"object","required":["data"],"title":"MunicipalityDivisionReportResponse"},"MunicipalityDivisionSummary":{"properties":{"division":{"type":"string","title":"Division"},"name":{"type":"string","title":"Name"},"name_en":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Name En"},"count":{"type":"integer","title":"Count"}},"type":"object","required":["division","name","count"],"title":"MunicipalityDivisionSummary"},"MunicipalityHistoryPoint":{"properties":{"period":{"type":"string","title":"Period"},"total_companies":{"type":"integer","title":"Total Companies"},"active_companies":{"type":"integer","title":"Active Companies"},"estimated_turnover":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Estimated Turnover"}},"type":"object","required":["period","total_companies","active_companies"],"title":"MunicipalityHistoryPoint"},"MunicipalityMetrics":{"properties":{"total_companies":{"type":"integer","title":"Total Companies","default":0},"active_companies":{"type":"integer","title":"Active Companies","default":0},"dissolved_companies":{"type":"integer","title":"Dissolved Companies","default":0},"new_registrations":{"type":"integer","title":"New Registrations","default":0},"net_growth":{"type":"integer","title":"Net Growth","default":0},"estimated_turnover":{"type":"integer","title":"Estimated Turnover","default":0},"median_turnover":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Median Turnover"},"estimated_employees":{"type":"integer","title":"Estimated Employees","default":0},"companies_with_financials":{"type":"integer","title":"Companies With Financials","default":0},"unique_industries_count":{"type":"integer","title":"Unique Industries Count","default":0},"top_industries":{"items":{"$ref":"#/components/schemas/app__routers__reports__TopIndustry"},"type":"array","title":"Top Industries","default":[]},"top_companies":{"items":{"$ref":"#/components/schemas/TopCompany"},"type":"array","title":"Top Companies","default":[]},"company_types":{"items":{"$ref":"#/components/schemas/CompanyType"},"type":"array","title":"Company Types","default":[]},"score_distribution":{"anyOf":[{"$ref":"#/components/schemas/ScoreDistribution"},{"type":"null"}]},"score_deviation":{"anyOf":[{"$ref":"#/components/schemas/ScoreDeviation"},{"type":"null"}]}},"type":"object","title":"MunicipalityMetrics"},"MunicipalityReport":{"properties":{"municipality_code":{"type":"string","title":"Municipality Code"},"municipality_name":{"type":"string","title":"Municipality Name"},"region_code":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Region Code"},"region_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Region Name"},"period":{"type":"string","title":"Period"},"metrics":{"$ref":"#/components/schemas/MunicipalityMetrics"},"year_over_year":{"anyOf":[{"$ref":"#/components/schemas/MunicipalityYearOverYear"},{"type":"null"}]},"generated_at":{"type":"string","format":"date-time","title":"Generated At"}},"type":"object","required":["municipality_code","municipality_name","region_code","region_name","period","metrics","year_over_year","generated_at"],"title":"MunicipalityReport"},"MunicipalityReportResponse":{"properties":{"data":{"$ref":"#/components/schemas/MunicipalityReport"},"historical":{"anyOf":[{"items":{"$ref":"#/components/schemas/MunicipalityHistoryPoint"},"type":"array"},{"type":"null"}],"title":"Historical"}},"type":"object","required":["data"],"title":"MunicipalityReportResponse"},"MunicipalitySummary":{"properties":{"code":{"type":"string","title":"Code"},"name":{"type":"string","title":"Name"},"region_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Region Name"},"total_companies":{"type":"integer","title":"Total Companies"},"active_companies":{"type":"integer","title":"Active Companies"}},"type":"object","required":["code","name","region_name","total_companies","active_companies"],"title":"MunicipalitySummary"},"MunicipalityTradeListResponse":{"properties":{"data":{"items":{"$ref":"#/components/schemas/MunicipalityTradeSummary"},"type":"array","title":"Data"},"municipality_code":{"type":"string","title":"Municipality Code"},"municipality_name":{"type":"string","title":"Municipality Name"}},"type":"object","required":["data","municipality_code","municipality_name"],"title":"MunicipalityTradeListResponse"},"MunicipalityTradeSummary":{"properties":{"slug":{"type":"string","title":"Slug"},"name":{"type":"string","title":"Name"},"name_en":{"type":"string","title":"Name En"},"count":{"type":"integer","title":"Count"}},"type":"object","required":["slug","name","name_en","count"],"title":"MunicipalityTradeSummary"},"MunicipalityYearOverYear":{"properties":{"total_companies_change":{"type":"integer","title":"Total Companies Change"},"total_companies_change_pct":{"type":"number","title":"Total Companies Change Pct"},"active_companies_change_pct":{"type":"number","title":"Active Companies Change Pct"},"turnover_change_pct":{"type":"number","title":"Turnover Change Pct"}},"type":"object","required":["total_companies_change","total_companies_change_pct","active_companies_change_pct","turnover_change_pct"],"title":"MunicipalityYearOverYear"},"MyCompanyDetailResponse":{"properties":{"cvr":{"type":"string","title":"Cvr"},"company_name":{"type":"string","title":"Company Name"},"status":{"$ref":"#/components/schemas/ClaimStatus"},"tier":{"$ref":"#/components/schemas/ClaimTier"},"role":{"$ref":"#/components/schemas/TeamRole"},"profile":{"$ref":"#/components/schemas/ClaimedProfileContent"},"subscription":{"$ref":"#/components/schemas/ClaimSubscription"},"team":{"items":{"$ref":"#/components/schemas/TeamMember"},"type":"array","title":"Team"},"analytics":{"$ref":"#/components/schemas/ProfileAnalytics"},"created_at":{"type":"string","format":"date-time","title":"Created At"},"updated_at":{"type":"string","format":"date-time","title":"Updated At"}},"type":"object","required":["cvr","company_name","status","tier","role","profile","subscription","team","analytics","created_at","updated_at"],"title":"MyCompanyDetailResponse","description":"Full response for managing a claimed company."},"MyCompanyResponse":{"properties":{"cvr":{"type":"string","title":"Cvr"},"company_name":{"type":"string","title":"Company Name"},"status":{"$ref":"#/components/schemas/ClaimStatus"},"tier":{"$ref":"#/components/schemas/ClaimTier"},"role":{"$ref":"#/components/schemas/TeamRole"},"logo_url":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Logo Url"},"views_this_month":{"type":"integer","title":"Views This Month","default":0},"unread_leads":{"type":"integer","title":"Unread Leads","default":0}},"type":"object","required":["cvr","company_name","status","tier","role"],"title":"MyCompanyResponse","description":"Response for listing user's companies."},"NameHistoryEntry":{"properties":{"name":{"type":"string","title":"Name","description":"Company name"},"valid_from":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Valid From","description":"Date when this name became valid"},"valid_to":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Valid To","description":"Date when this name was replaced (null = current)"}},"type":"object","required":["name"],"title":"NameHistoryEntry","description":"A historical name entry with validity period."},"NewsCompanyRef":{"properties":{"cvr":{"type":"string","title":"Cvr"},"name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Name"},"industry":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Industry"},"city":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"City"},"latest_revenue":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Latest Revenue"},"logo_url":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Logo Url"}},"type":"object","required":["cvr"],"title":"NewsCompanyRef"},"NewsItem":{"properties":{"kind":{"type":"string","title":"Kind"},"title":{"type":"string","title":"Title"},"summary":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Summary"},"url":{"type":"string","title":"Url"},"source":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Source"},"source_domain":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Source Domain"},"published_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Published At"}},"type":"object","required":["kind","title","url"],"title":"NewsItem"},"NoticeCompany":{"properties":{"cvr":{"type":"string","title":"Cvr"},"name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Name"},"company_type":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Company Type","description":"Company form code, e.g. APS or A/S"},"status":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Status"}},"type":"object","required":["cvr"],"title":"NoticeCompany"},"NoticeFeedResponse":{"properties":{"total":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Total","description":"Matching notices; null when polling with cursor or since"},"limit":{"type":"integer","title":"Limit"},"offset":{"type":"integer","title":"Offset"},"next_cursor":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Next Cursor","description":"Pass as cursor to get the notices indexed after this page"},"notices":{"items":{"$ref":"#/components/schemas/FeedNotice"},"type":"array","title":"Notices"}},"type":"object","required":["limit","offset","notices"],"title":"NoticeFeedResponse"},"NoticeFieldGroup":{"properties":{"name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Name","description":"Field group as published, e.g. Kurator or Skifteret"},"fields":{"additionalProperties":true,"type":"object","title":"Fields"}},"type":"object","title":"NoticeFieldGroup"},"NoticeKurator":{"properties":{"title":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Title"},"name":{"type":"string","title":"Name"},"address":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Address"},"court":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Court"}},"type":"object","required":["name"],"title":"NoticeKurator"},"NotificationFrequency":{"type":"string","enum":["immediate","daily","weekly"],"title":"NotificationFrequency","description":"How often to send notification digests."},"NotificationPreferences":{"properties":{"email_frequency":{"$ref":"#/components/schemas/NotificationFrequency","default":"daily"}},"type":"object","title":"NotificationPreferences","description":"User's global notification preferences."},"NotificationStats":{"properties":{"change_events_total":{"type":"integer","title":"Change Events Total"},"change_events_unprocessed":{"type":"integer","title":"Change Events Unprocessed"},"subscriptions_total":{"type":"integer","title":"Subscriptions Total"},"subscriptions_active":{"type":"integer","title":"Subscriptions Active"},"webhooks_total":{"type":"integer","title":"Webhooks Total"},"webhooks_active":{"type":"integer","title":"Webhooks Active"},"deliveries_pending":{"type":"integer","title":"Deliveries Pending"},"deliveries_sent_today":{"type":"integer","title":"Deliveries Sent Today"},"deliveries_failed_today":{"type":"integer","title":"Deliveries Failed Today"}},"type":"object","required":["change_events_total","change_events_unprocessed","subscriptions_total","subscriptions_active","webhooks_total","webhooks_active","deliveries_pending","deliveries_sent_today","deliveries_failed_today"],"title":"NotificationStats","description":"Statistics for the notification system."},"NumericRange":{"properties":{"min":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Min","description":"Inclusive lower bound"},"max":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Max","description":"Inclusive upper bound"}},"type":"object","title":"NumericRange","description":"Inclusive min/max range. At least one bound must be set."},"OAuth2ClientCreate":{"properties":{"name":{"type":"string","maxLength":100,"minLength":1,"title":"Name"},"description":{"type":"string","maxLength":500,"title":"Description","default":""},"redirect_uris":{"items":{"type":"string"},"type":"array","minItems":1,"title":"Redirect Uris"},"allowed_scopes":{"items":{"type":"string"},"type":"array","title":"Allowed Scopes"}},"type":"object","required":["name","redirect_uris"],"title":"OAuth2ClientCreate","description":"Request to create an OAuth2 client (admin only)."},"OAuth2ClientResponse":{"properties":{"id":{"type":"string","title":"Id"},"client_id":{"type":"string","title":"Client Id"},"name":{"type":"string","title":"Name"},"description":{"type":"string","title":"Description"},"redirect_uris":{"items":{"type":"string"},"type":"array","title":"Redirect Uris"},"allowed_scopes":{"items":{"type":"string"},"type":"array","title":"Allowed Scopes"},"created_by":{"type":"string","title":"Created By"},"created_at":{"type":"string","format":"date-time","title":"Created At"},"active":{"type":"boolean","title":"Active"}},"type":"object","required":["id","client_id","name","description","redirect_uris","allowed_scopes","created_by","created_at","active"],"title":"OAuth2ClientResponse","description":"Response for an OAuth2 client (no secret)."},"OAuth2ClientUpdate":{"properties":{"name":{"anyOf":[{"type":"string","maxLength":100,"minLength":1},{"type":"null"}],"title":"Name"},"description":{"anyOf":[{"type":"string","maxLength":500},{"type":"null"}],"title":"Description"},"redirect_uris":{"anyOf":[{"items":{"type":"string"},"type":"array"},{"type":"null"}],"title":"Redirect Uris"},"allowed_scopes":{"anyOf":[{"items":{"type":"string"},"type":"array"},{"type":"null"}],"title":"Allowed Scopes"},"active":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Active"}},"type":"object","title":"OAuth2ClientUpdate","description":"Request to update an OAuth2 client."},"OAuth2ClientWithSecret":{"properties":{"id":{"type":"string","title":"Id"},"client_id":{"type":"string","title":"Client Id"},"client_secret":{"type":"string","title":"Client Secret"},"name":{"type":"string","title":"Name"},"description":{"type":"string","title":"Description"},"redirect_uris":{"items":{"type":"string"},"type":"array","title":"Redirect Uris"},"allowed_scopes":{"items":{"type":"string"},"type":"array","title":"Allowed Scopes"},"created_by":{"type":"string","title":"Created By"},"created_at":{"type":"string","format":"date-time","title":"Created At"},"active":{"type":"boolean","title":"Active"}},"type":"object","required":["id","client_id","client_secret","name","description","redirect_uris","allowed_scopes","created_by","created_at","active"],"title":"OAuth2ClientWithSecret","description":"Response when creating a client (includes secret, shown once)."},"OneOffReportPrice":{"properties":{"standard_dkk":{"type":"integer","title":"Standard Dkk"},"member_dkk":{"type":"integer","title":"Member Dkk"}},"type":"object","required":["standard_dkk","member_dkk"],"title":"OneOffReportPrice","description":"Standard vs member price for a one-off report, in whole DKK."},"OrgInvitationResponse":{"properties":{"email":{"type":"string","format":"email","title":"Email"},"role":{"$ref":"#/components/schemas/OrgRole"},"invited_at":{"type":"string","format":"date-time","title":"Invited At"},"expires_at":{"type":"string","format":"date-time","title":"Expires At"}},"type":"object","required":["email","role","invited_at","expires_at"],"title":"OrgInvitationResponse"},"OrgInviteRequest":{"properties":{"email":{"type":"string","format":"email","title":"Email"},"role":{"$ref":"#/components/schemas/OrgRole","default":"member"}},"type":"object","required":["email"],"title":"OrgInviteRequest"},"OrgMemberResponse":{"properties":{"user_id":{"type":"string","title":"User Id"},"email":{"type":"string","format":"email","title":"Email"},"name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Name"},"role":{"$ref":"#/components/schemas/OrgRole"},"added_at":{"type":"string","format":"date-time","title":"Added At"}},"type":"object","required":["user_id","email","role","added_at"],"title":"OrgMemberResponse"},"OrgRenameRequest":{"properties":{"name":{"type":"string","maxLength":120,"minLength":1,"title":"Name"}},"type":"object","required":["name"],"title":"OrgRenameRequest"},"OrgRole":{"type":"string","enum":["owner","admin","member"],"title":"OrgRole","description":"Role of a member within an organization (S2).\n\nExactly one Owner (transferable); multiple Admins allowed."},"OrgRoleUpdateRequest":{"properties":{"role":{"$ref":"#/components/schemas/OrgRole"}},"type":"object","required":["role"],"title":"OrgRoleUpdateRequest"},"OrgTransferOwnershipRequest":{"properties":{"user_id":{"type":"string","title":"User Id"}},"type":"object","required":["user_id"],"title":"OrgTransferOwnershipRequest"},"OrgUsageDashboardResponse":{"properties":{"pool_used":{"type":"integer","title":"Pool Used"},"pool_limit":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Pool Limit"},"pool_percentage":{"type":"integer","title":"Pool Percentage","default":0},"credit_balance":{"type":"integer","title":"Credit Balance","default":0},"in_overage":{"type":"boolean","title":"In Overage","default":false},"resets_at":{"type":"string","title":"Resets At"},"members":{"items":{"$ref":"#/components/schemas/OrgUsageMemberItem"},"type":"array","title":"Members"},"keys":{"items":{"$ref":"#/components/schemas/OrgUsageKeyItem"},"type":"array","title":"Keys"}},"type":"object","required":["pool_used","resets_at","members","keys"],"title":"OrgUsageDashboardResponse","description":"Org-level usage dashboard (Team tier, Admin+)."},"OrgUsageKeyItem":{"properties":{"id":{"type":"string","title":"Id"},"name":{"type":"string","title":"Name"},"key_prefix":{"type":"string","title":"Key Prefix"},"created_by":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Created By"},"created_by_email":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Created By Email"},"calls_this_month":{"type":"integer","title":"Calls This Month","default":0},"last_used_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Last Used At"}},"type":"object","required":["id","name","key_prefix"],"title":"OrgUsageKeyItem","description":"Per-API-key activity for the usage dashboard."},"OrgUsageMemberItem":{"properties":{"user_id":{"type":"string","title":"User Id"},"email":{"type":"string","format":"email","title":"Email"},"name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Name"},"role":{"$ref":"#/components/schemas/OrgRole"},"api_calls_this_month":{"type":"integer","title":"Api Calls This Month","default":0},"active_api_keys":{"type":"integer","title":"Active Api Keys","default":0},"last_request_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Last Request At"}},"type":"object","required":["user_id","email","role"],"title":"OrgUsageMemberItem","description":"Per-member usage for the usage dashboard."},"OrganizationResponse":{"properties":{"id":{"type":"string","title":"Id"},"name":{"type":"string","title":"Name"},"tier":{"type":"string","title":"Tier"},"role":{"$ref":"#/components/schemas/OrgRole"},"members":{"items":{"$ref":"#/components/schemas/OrgMemberResponse"},"type":"array","title":"Members"},"pending_invitations":{"items":{"$ref":"#/components/schemas/OrgInvitationResponse"},"type":"array","title":"Pending Invitations"},"seats_included":{"type":"integer","title":"Seats Included"},"extra_seats":{"type":"integer","title":"Extra Seats"},"seats_total":{"type":"integer","title":"Seats Total"},"seats_used":{"type":"integer","title":"Seats Used"},"billing_interval":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Billing Interval"},"created_at":{"type":"string","format":"date-time","title":"Created At"}},"type":"object","required":["id","name","tier","role","members","pending_invitations","seats_included","extra_seats","seats_total","seats_used","created_at"],"title":"OrganizationResponse"},"OwnedCompany":{"properties":{"cvr":{"type":"string","title":"Cvr","description":"CVR number of owned company"},"company_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Company Name","description":"Company name"},"status":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Status","description":"Company status","examples":["active","dissolved"]},"ownership_percent":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Ownership Percent","description":"Ownership stake (0.05 = 5%)"},"voting_percent":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Voting Percent","description":"Voting rights (0.05 = 5%)"},"valid_from":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Valid From","description":"When ownership started"}},"type":"object","required":["cvr"],"title":"OwnedCompany","description":"A company in an ownership portfolio."},"OwnershipShare":{"properties":{"numerator":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Numerator","description":"Share numerator (tæller)"},"denominator":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Denominator","description":"Share denominator (nævner)"}},"type":"object","title":"OwnershipShare","description":"Ownership share expressed as a fraction (numerator/denominator)."},"ParticipantPortfolioResponse":{"properties":{"data":{"additionalProperties":true,"type":"object","title":"Data","description":"Participant portfolio data"},"meta":{"additionalProperties":true,"type":"object","title":"Meta","description":"Response metadata"}},"type":"object","required":["data"],"title":"ParticipantPortfolioResponse","description":"Response for participant's company portfolio."},"ParticipantResponse":{"properties":{"data":{"additionalProperties":true,"type":"object","title":"Data","description":"Full participant details"},"meta":{"additionalProperties":true,"type":"object","title":"Meta","description":"Response metadata"}},"type":"object","required":["data"],"title":"ParticipantResponse","description":"Response for single participant lookup."},"ParticipantSearchResponse":{"properties":{"data":{"items":{"$ref":"#/components/schemas/app__models__participant__ParticipantSearchResult"},"type":"array","title":"Data","description":"Matching participants"},"meta":{"additionalProperties":true,"type":"object","title":"Meta","description":"Response metadata"},"pagination":{"additionalProperties":true,"type":"object","title":"Pagination","description":"Pagination info"}},"type":"object","required":["data"],"title":"ParticipantSearchResponse","description":"Response for participant search endpoint."},"ParticipantSearchResultRelation":{"properties":{"cvr":{"type":"string","title":"Cvr","description":"Company CVR number"},"company_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Company Name","description":"Company name"},"role_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Role Name","description":"Role in the company"}},"type":"object","required":["cvr"],"title":"ParticipantSearchResultRelation","description":"A company relation shown in search results."},"PartnerCodeCreate":{"properties":{"code":{"type":"string","title":"Code","description":"The signup-link code (normalized to lowercase)"},"name":{"type":"string","title":"Name","description":"Who the arrangement is with"},"api_requests_per_minute":{"anyOf":[{"type":"integer","exclusiveMinimum":0.0},{"type":"null"}],"title":"Api Requests Per Minute","description":"Per-minute override for referred orgs (paid tiers only)"},"api_requests_per_month":{"anyOf":[{"type":"integer","exclusiveMinimum":0.0},{"type":"null"}],"title":"Api Requests Per Month","description":"Monthly override for referred orgs (paid tiers only)"},"note":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Note"}},"type":"object","required":["code","name"],"title":"PartnerCodeCreate"},"PartnerCodeToggle":{"properties":{"active":{"type":"boolean","title":"Active"}},"type":"object","required":["active"],"title":"PartnerCodeToggle"},"PauseStateResponse":{"properties":{"paused":{"type":"boolean","title":"Paused"},"pause_resumes_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Pause Resumes At"}},"type":"object","required":["paused"],"title":"PauseStateResponse","description":"Current pause state after a pause/resume action."},"PauseSubscriptionRequest":{"properties":{"months":{"type":"integer","maximum":3.0,"minimum":1.0,"title":"Months","description":"Pause length: 1, 2 or 3 months"},"reason":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Reason"}},"type":"object","required":["months"],"title":"PauseSubscriptionRequest","description":"Request to pause the subscription for a fixed number of months."},"PepMatch":{"properties":{"person_name":{"type":"string","title":"Person Name"},"person_unit_number":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Person Unit Number"},"roles":{"items":{"type":"string"},"type":"array","title":"Roles"},"confidence":{"type":"string","title":"Confidence","description":"name_exact (all name parts match) or name_partial (one name is the other with middle names missing; the registered surname matches in full)"},"pep":{"$ref":"#/components/schemas/PepMatchEntry"}},"type":"object","required":["person_name","confidence","pep"],"title":"PepMatch"},"PepMatchEntry":{"properties":{"source":{"type":"string","title":"Source","description":"PEP list: dk | fo (Faroe Islands) | gl (Greenland)"},"status":{"type":"string","title":"Status","description":"current if the person holds any capacity on the PEP list today, former if every capacity has been removed"},"full_name":{"type":"string","title":"Full Name"},"birth_date":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Birth Date","description":"Birth date from the PEP list (not available in CVR — use for manual verification)"},"positions":{"items":{"$ref":"#/components/schemas/PepPosition"},"type":"array","title":"Positions","description":"All PEP capacities for this person, current first (the lists carry one row per capacity; current and former capacities are merged here)"}},"type":"object","required":["source","status","full_name"],"title":"PepMatchEntry"},"PepPosition":{"properties":{"status":{"type":"string","title":"Status","description":"current (still on the PEP list in this capacity) or former (removed)"},"title":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Title","description":"Position that makes the person a PEP"},"category":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Category","description":"PEP category per hvidvasklovens § 2, stk. 1, nr. 8 (current PEPs only)"},"added_date":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Added Date","description":"Date added to the PEP list"},"removed_date":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Removed Date","description":"Date removed from the PEP list"}},"type":"object","required":["status"],"title":"PepPosition"},"PepScreeningResponse":{"properties":{"cvr":{"type":"string","title":"Cvr"},"name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Name"},"screened_count":{"type":"integer","title":"Screened Count","description":"Number of persons screened"},"matches":{"items":{"$ref":"#/components/schemas/PepMatch"},"type":"array","title":"Matches"},"note":{"type":"string","title":"Note","description":"Interpretation caveat — matches are possible matches, never confirmed PEP status"}},"type":"object","required":["cvr","screened_count","matches","note"],"title":"PepScreeningResponse"},"PercentileMetrics":{"properties":{"p25":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"P25"},"median":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Median"},"p75":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"P75"},"avg":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Avg"}},"type":"object","required":["p25","median","p75","avg"],"title":"PercentileMetrics"},"PhotoUploadRequest":{"properties":{"photo_id":{"type":"string","title":"Photo Id"},"url":{"type":"string","title":"Url"},"caption":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Caption"}},"type":"object","required":["photo_id","url"],"title":"PhotoUploadRequest","description":"Request to add a photo."},"PhotoUploadResponse":{"properties":{"success":{"type":"boolean","title":"Success"},"message":{"type":"string","title":"Message"}},"type":"object","required":["success","message"],"title":"PhotoUploadResponse","description":"Response from photo upload."},"PlacementEvent":{"properties":{"cvr":{"type":"string","title":"Cvr"},"kind":{"type":"string","title":"Kind"}},"type":"object","required":["cvr","kind"],"title":"PlacementEvent"},"PlacementEventsRequest":{"properties":{"surface":{"type":"string","title":"Surface"},"events":{"items":{"$ref":"#/components/schemas/PlacementEvent"},"type":"array","title":"Events"}},"type":"object","required":["surface","events"],"title":"PlacementEventsRequest"},"PlanningPlan":{"properties":{"planid":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Planid"},"plannr":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Plannr"},"plannavn":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Plannavn"},"plantype":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Plantype","description":"Plandata plan type code (e.g. 20.1)"},"anvendelse":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Anvendelse","description":"General use category (anvendelse generel)"},"zonestatus":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Zonestatus"},"fremtidig_zonestatus":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Fremtidig Zonestatus"},"status":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Status","description":"Plan status code (V=vedtaget, F=forslag)"},"dato_forslag":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Dato Forslag"},"dato_vedtaget":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Dato Vedtaget"},"dato_ikraft":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Dato Ikraft"},"doklink":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Doklink","description":"Link to the plan document (PDF)"},"kommunenavn":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Kommunenavn"},"distrikt":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Distrikt"},"bebygpct":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Bebygpct","description":"Max building coverage percentage"},"maxetager":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Maxetager"},"maxbygnhjd":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Maxbygnhjd","description":"Max building height in meters"}},"type":"object","title":"PlanningPlan","description":"A local plan or municipal plan framework covering a property (Plandata.dk)."},"PortfolioAttentionItem":{"properties":{"cvr":{"type":"string","title":"Cvr"},"company_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Company Name"},"status":{"type":"string","title":"Status"},"cvr_status":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Cvr Status"}},"type":"object","required":["cvr","status"],"title":"PortfolioAttentionItem"},"PortfolioCds":{"properties":{"scored":{"type":"integer","title":"Scored","default":0},"avg_score":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Avg Score"},"ratings":{"additionalProperties":{"type":"integer"},"type":"object","title":"Ratings","default":{}},"pending_permission":{"type":"boolean","title":"Pending Permission","default":false}},"type":"object","title":"PortfolioCds"},"PortfolioChangeItem":{"properties":{"cvr":{"type":"string","title":"Cvr"},"company_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Company Name"},"event_type":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Event Type"},"summary":{"type":"string","title":"Summary","default":""},"detected_at":{"type":"string","format":"date-time","title":"Detected At"}},"type":"object","required":["cvr","detected_at"],"title":"PortfolioChangeItem"},"PortfolioChanges":{"properties":{"total":{"type":"integer","title":"Total","default":0},"counts":{"additionalProperties":{"type":"integer"},"type":"object","title":"Counts","default":{}},"items":{"items":{"$ref":"#/components/schemas/PortfolioChangeItem"},"type":"array","title":"Items","default":[]}},"type":"object","title":"PortfolioChanges"},"PortfolioDashboardResponse":{"properties":{"generated_at":{"type":"string","format":"date-time","title":"Generated At"},"total":{"type":"integer","title":"Total"},"sources":{"additionalProperties":{"type":"integer"},"type":"object","title":"Sources"},"status_distribution":{"additionalProperties":{"type":"integer"},"type":"object","title":"Status Distribution"},"sectors":{"items":{"$ref":"#/components/schemas/PortfolioSector"},"type":"array","title":"Sectors"},"is_pro":{"type":"boolean","title":"Is Pro"},"locked":{"type":"boolean","title":"Locked","default":false},"attention":{"items":{"$ref":"#/components/schemas/PortfolioAttentionItem"},"type":"array","title":"Attention","default":[]},"changes":{"$ref":"#/components/schemas/PortfolioChanges","default":{"total":0,"counts":{},"items":[]}},"frister":{"$ref":"#/components/schemas/PortfolioFrister","default":{"upcoming":[],"overdue":[],"upcoming_total":0,"overdue_total":0}},"cds":{"$ref":"#/components/schemas/PortfolioCds","default":{"scored":0,"ratings":{},"pending_permission":false}}},"type":"object","required":["generated_at","total","sources","status_distribution","sectors","is_pro"],"title":"PortfolioDashboardResponse"},"PortfolioFrist":{"properties":{"cvr":{"type":"string","title":"Cvr"},"company_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Company Name"},"period_end":{"type":"string","format":"date-time","title":"Period End"},"deadline":{"type":"string","format":"date-time","title":"Deadline"},"days_left":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Days Left"},"days_overdue":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Days Overdue"}},"type":"object","required":["cvr","period_end","deadline"],"title":"PortfolioFrist"},"PortfolioFrister":{"properties":{"upcoming":{"items":{"$ref":"#/components/schemas/PortfolioFrist"},"type":"array","title":"Upcoming","default":[]},"overdue":{"items":{"$ref":"#/components/schemas/PortfolioFrist"},"type":"array","title":"Overdue","default":[]},"upcoming_total":{"type":"integer","title":"Upcoming Total","default":0},"overdue_total":{"type":"integer","title":"Overdue Total","default":0}},"type":"object","title":"PortfolioFrister"},"PortfolioSector":{"properties":{"industry":{"type":"string","title":"Industry"},"count":{"type":"integer","title":"Count"}},"type":"object","required":["industry","count"],"title":"PortfolioSector"},"PostalCode":{"properties":{"code":{"type":"string","title":"Code","description":"4-digit postal code","examples":["2100"]},"name":{"type":"string","title":"Name","description":"Postal code district name","examples":["København Ø"]},"municipality_code":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Municipality Code","description":"Municipality code","examples":["101"]},"municipality_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Municipality Name","description":"Municipality name","examples":["København"]}},"type":"object","required":["code","name"],"title":"PostalCode","description":"Postal code data for dropdown/filter."},"PostalCodeHistoryPoint":{"properties":{"period":{"type":"string","title":"Period"},"total_companies":{"type":"integer","title":"Total Companies"},"active_companies":{"type":"integer","title":"Active Companies"},"estimated_turnover":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Estimated Turnover"}},"type":"object","required":["period","total_companies","active_companies"],"title":"PostalCodeHistoryPoint"},"PostalCodeMetrics":{"properties":{"total_companies":{"type":"integer","title":"Total Companies","default":0},"active_companies":{"type":"integer","title":"Active Companies","default":0},"dissolved_companies":{"type":"integer","title":"Dissolved Companies","default":0},"new_registrations":{"type":"integer","title":"New Registrations","default":0},"estimated_turnover":{"type":"integer","title":"Estimated Turnover","default":0},"median_turnover":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Median Turnover"},"estimated_employees":{"type":"integer","title":"Estimated Employees","default":0},"unique_industries_count":{"type":"integer","title":"Unique Industries Count","default":0},"top_industries":{"items":{"$ref":"#/components/schemas/app__routers__reports__TopIndustry"},"type":"array","title":"Top Industries","default":[]},"top_companies":{"items":{"$ref":"#/components/schemas/TopCompany"},"type":"array","title":"Top Companies","default":[]},"company_types":{"items":{"$ref":"#/components/schemas/CompanyType"},"type":"array","title":"Company Types","default":[]}},"type":"object","title":"PostalCodeMetrics","description":"Metrics for postal code report - similar to MunicipalityMetrics."},"PostalCodeReport":{"properties":{"postal_code":{"type":"string","title":"Postal Code"},"postal_district":{"type":"string","title":"Postal District"},"municipality_code":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Municipality Code"},"municipality_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Municipality Name"},"period":{"type":"string","title":"Period"},"metrics":{"$ref":"#/components/schemas/PostalCodeMetrics"},"year_over_year":{"anyOf":[{"$ref":"#/components/schemas/PostalCodeYearOverYear"},{"type":"null"}]},"generated_at":{"type":"string","format":"date-time","title":"Generated At"}},"type":"object","required":["postal_code","postal_district","municipality_code","municipality_name","period","metrics","year_over_year","generated_at"],"title":"PostalCodeReport"},"PostalCodeReportResponse":{"properties":{"data":{"$ref":"#/components/schemas/PostalCodeReport"},"historical":{"anyOf":[{"items":{"$ref":"#/components/schemas/PostalCodeHistoryPoint"},"type":"array"},{"type":"null"}],"title":"Historical"}},"type":"object","required":["data"],"title":"PostalCodeReportResponse"},"PostalCodeSummary":{"properties":{"code":{"type":"string","title":"Code"},"name":{"type":"string","title":"Name"},"municipality_code":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Municipality Code"},"municipality_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Municipality Name"},"total_companies":{"type":"integer","title":"Total Companies"},"active_companies":{"type":"integer","title":"Active Companies"}},"type":"object","required":["code","name","municipality_code","municipality_name","total_companies","active_companies"],"title":"PostalCodeSummary"},"PostalCodeYearOverYear":{"properties":{"active_companies_change":{"type":"integer","title":"Active Companies Change"},"active_companies_change_pct":{"type":"number","title":"Active Companies Change Pct"}},"type":"object","required":["active_companies_change","active_companies_change_pct"],"title":"PostalCodeYearOverYear"},"PriceCalculationResponse":{"properties":{"base_price_dkk":{"type":"integer","title":"Base Price Dkk"},"final_price_dkk":{"type":"integer","title":"Final Price Dkk"},"discount_amount_dkk":{"type":"integer","title":"Discount Amount Dkk"},"applied_promotion":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Applied Promotion"},"is_override":{"type":"boolean","title":"Is Override"},"override_reason":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Override Reason"}},"type":"object","required":["base_price_dkk","final_price_dkk","discount_amount_dkk","applied_promotion","is_override"],"title":"PriceCalculationResponse"},"PrivacyContextCompany":{"properties":{"cvr":{"type":"string","title":"Cvr"},"name":{"type":"string","title":"Name"},"status":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Status"},"company_type":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Company Type"},"address":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Address"},"advertising_protected":{"type":"boolean","title":"Advertising Protected","default":false},"privacy_override":{"anyOf":[{"$ref":"#/components/schemas/PrivacyOverrideEvent"},{"type":"null"}]}},"type":"object","required":["cvr","name"],"title":"PrivacyContextCompany"},"PrivacyContextParticipant":{"properties":{"unit_number":{"type":"integer","title":"Unit Number"},"unit_type":{"type":"string","title":"Unit Type"},"name":{"type":"string","title":"Name"},"cvr":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Cvr"},"roles":{"items":{"type":"string"},"type":"array","title":"Roles","default":[]},"address":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Address"},"address_protected":{"type":"boolean","title":"Address Protected","default":false},"privacy_override":{"anyOf":[{"$ref":"#/components/schemas/PrivacyOverrideEvent"},{"type":"null"}]}},"type":"object","required":["unit_number","unit_type","name"],"title":"PrivacyContextParticipant"},"PrivacyContextResponse":{"properties":{"company":{"$ref":"#/components/schemas/PrivacyContextCompany"},"participants":{"items":{"$ref":"#/components/schemas/PrivacyContextParticipant"},"type":"array","title":"Participants"}},"type":"object","required":["company","participants"],"title":"PrivacyContextResponse"},"PrivacyEvent":{"properties":{"active":{"type":"boolean","title":"Active"},"hide_person":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Hide Person"},"set_by":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Set By"},"set_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Set At"},"reason":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Reason"}},"type":"object","required":["active","set_by","set_at","reason"],"title":"PrivacyEvent"},"PrivacyOverride":{"properties":{"active":{"type":"boolean","title":"Active","description":"Whether the override is currently in effect","default":false},"set_by":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Set By","description":"Admin email who set the override"},"set_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Set At","description":"When the override was set"},"reason":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Reason","description":"Free-text reason for the override"}},"type":"object","title":"PrivacyOverride","description":"Admin-controlled override that hides address data regardless of CVR status.\n\nUsed for ceased companies / participants where CVR's own advertising_protected\nflag is no longer available, but a legitimate safety concern exists\n(e.g. harassment reports)."},"PrivacyOverrideEvent":{"properties":{"active":{"type":"boolean","title":"Active"},"hide_person":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Hide Person"},"set_by":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Set By"},"set_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Set At"},"reason":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Reason"}},"type":"object","required":["active","set_by","set_at","reason"],"title":"PrivacyOverrideEvent"},"PrivacyOverrideRequest":{"properties":{"active":{"type":"boolean","title":"Active","description":"True to enable the override, False to clear it"},"reason":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Reason","description":"Free-text reason — required when activating"},"hide_person":{"type":"boolean","title":"Hide Person","description":"Participants only: fully suppress the person from all public surfaces (profile 404s, removed from search and from company pages). Implies active.","default":false}},"type":"object","required":["active"],"title":"PrivacyOverrideRequest"},"PrivacyOverrideStatus":{"properties":{"target_type":{"type":"string","title":"Target Type"},"target_id":{"type":"string","title":"Target Id"},"current":{"anyOf":[{"$ref":"#/components/schemas/PrivacyOverrideEvent"},{"type":"null"}]},"history":{"items":{"$ref":"#/components/schemas/PrivacyOverrideEvent"},"type":"array","title":"History"}},"type":"object","required":["target_type","target_id","current","history"],"title":"PrivacyOverrideStatus"},"ProductionUnit":{"properties":{"p_number":{"type":"string","title":"P Number","description":"10-digit P-nummer (unique production unit identifier)","examples":["1234567890"]},"cvr":{"type":"string","title":"Cvr","description":"CVR number of parent company","examples":["12345678"]},"name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Name","description":"Production unit name/description"},"status":{"type":"string","title":"Status","description":"Unit status","default":"active","examples":["active","dissolved"]},"is_main_unit":{"type":"boolean","title":"Is Main Unit","description":"Whether this is the main unit (hovedafdeling)","default":false},"valid_from":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Valid From","description":"Date P-enhed was created"},"valid_to":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Valid To","description":"Date P-enhed was dissolved (null = active)"},"address":{"anyOf":[{"$ref":"#/components/schemas/CompanyAddress"},{"type":"null"}],"description":"Physical location address"},"location":{"anyOf":[{"$ref":"#/components/schemas/app__models__company__GeoLocation"},{"type":"null"}],"description":"Geocoded coordinates"},"industry":{"anyOf":[{"$ref":"#/components/schemas/CompanyIndustry"},{"type":"null"}],"description":"Industry classification (may differ from parent)"},"employees":{"anyOf":[{"$ref":"#/components/schemas/CompanyEmployees"},{"type":"null"}],"description":"Employee count at this location"},"employees_monthly":{"anyOf":[{"$ref":"#/components/schemas/CompanyEmployees"},{"type":"null"}],"description":"Latest monthly headcount at this location from CVR"},"employees_yearly":{"anyOf":[{"$ref":"#/components/schemas/CompanyEmployees"},{"type":"null"}],"description":"CVR's yearly employment series at this location, which ends with 2018"},"contact":{"anyOf":[{"$ref":"#/components/schemas/CvrContact"},{"type":"null"}],"description":"Contact information for this location"},"advertising_protected":{"type":"boolean","title":"Advertising Protected","description":"Whether unit is protected from advertising","default":false},"meta":{"$ref":"#/components/schemas/ProductionUnitMeta","description":"Record metadata"}},"type":"object","required":["p_number","cvr"],"title":"ProductionUnit","description":"A production unit (P-enhed) - physical business location.\n\nP-enheder are separate entities in CVR with their own unique address,\nemployee counts, and industry classification."},"ProductionUnitListResponse":{"properties":{"data":{"items":{"$ref":"#/components/schemas/ProductionUnitSearchResult"},"type":"array","title":"Data","description":"List of production units"},"company_cvr":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Company Cvr","description":"Parent company CVR"},"company_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Company Name","description":"Parent company name"},"meta":{"additionalProperties":true,"type":"object","title":"Meta","description":"Response metadata"},"pagination":{"additionalProperties":true,"type":"object","title":"Pagination","description":"Pagination info: page, limit, total, pages"}},"type":"object","required":["data"],"title":"ProductionUnitListResponse","description":"Response for listing production units of a company."},"ProductionUnitMeta":{"properties":{"cvr_updated_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Cvr Updated At","description":"Last sync from CVR"},"geocoded_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Geocoded At","description":"When address was geocoded"},"synced_at":{"type":"string","format":"date-time","title":"Synced At","description":"Last sync timestamp"},"created_at":{"type":"string","format":"date-time","title":"Created At","description":"Record creation time"},"updated_at":{"type":"string","format":"date-time","title":"Updated At","description":"Record last update time"}},"type":"object","title":"ProductionUnitMeta","description":"Metadata for production unit records."},"ProductionUnitResponse":{"properties":{"data":{"$ref":"#/components/schemas/ProductionUnit","description":"Full production unit details"},"company_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Company Name","description":"Parent company name for context"},"meta":{"additionalProperties":true,"type":"object","title":"Meta","description":"Response metadata"}},"type":"object","required":["data"],"title":"ProductionUnitResponse","description":"Response for single production unit lookup."},"ProductionUnitSearchResponse":{"properties":{"data":{"items":{"$ref":"#/components/schemas/ProductionUnitSearchResult"},"type":"array","title":"Data","description":"Matching production units"},"meta":{"additionalProperties":true,"type":"object","title":"Meta","description":"Response metadata"},"pagination":{"additionalProperties":true,"type":"object","title":"Pagination","description":"Pagination info: page, limit, total, pages"}},"type":"object","required":["data"],"title":"ProductionUnitSearchResponse","description":"Response for production unit search endpoint."},"ProductionUnitSearchResult":{"properties":{"p_number":{"type":"string","title":"P Number","description":"10-digit P-nummer","examples":["1234567890"]},"cvr":{"type":"string","title":"Cvr","description":"Parent company CVR","examples":["12345678"]},"name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Name","description":"Production unit name"},"status":{"type":"string","title":"Status","description":"Unit status","examples":["active","dissolved"]},"is_main_unit":{"type":"boolean","title":"Is Main Unit","description":"Whether this is the main unit","default":false},"address":{"anyOf":[{"$ref":"#/components/schemas/CompanyAddress"},{"type":"null"}],"description":"Physical address"},"industry":{"anyOf":[{"$ref":"#/components/schemas/CompanyIndustry"},{"type":"null"}],"description":"Industry classification"},"employees":{"anyOf":[{"$ref":"#/components/schemas/CompanyEmployees"},{"type":"null"}],"description":"Employee information"},"location":{"anyOf":[{"$ref":"#/components/schemas/app__models__company__GeoLocation"},{"type":"null"}],"description":"Geocoded coordinates"},"distance_meters":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Distance Meters","description":"Distance from search point (location searches only)"}},"type":"object","required":["p_number","cvr","status"],"title":"ProductionUnitSearchResult","description":"Simplified production unit for search results."},"ProfileAnalytics":{"properties":{"total_views":{"type":"integer","title":"Total Views","default":0},"views_this_month":{"type":"integer","title":"Views This Month","default":0},"views_by_month":{"additionalProperties":{"type":"integer"},"type":"object","title":"Views By Month"}},"type":"object","title":"ProfileAnalytics","description":"Simple analytics for the profile."},"ProfilePhoto":{"properties":{"photo_id":{"type":"string","title":"Photo Id"},"url":{"type":"string","title":"Url"},"caption":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Caption"},"order":{"type":"integer","title":"Order","default":0},"uploaded_at":{"type":"string","format":"date-time","title":"Uploaded At"}},"type":"object","required":["photo_id","url"],"title":"ProfilePhoto","description":"A photo in the profile gallery."},"ProfitabilityInsight":{"properties":{"status":{"type":"string","title":"Status","description":"Status: profitable, loss, breakeven"},"margin_percent":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Margin Percent","description":"Profit margin percentage"}},"type":"object","required":["status"],"title":"ProfitabilityInsight","description":"Profitability insight based on latest financial data."},"Promotion":{"properties":{"promotion_id":{"type":"string","title":"Promotion Id"},"name":{"type":"string","title":"Name"},"description":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Description"},"applicable_tiers":{"items":{"type":"string"},"type":"array","title":"Applicable Tiers","default":[]},"discount_type":{"type":"string","enum":["percentage","fixed_amount"],"title":"Discount Type","default":"percentage"},"discount_value":{"type":"integer","title":"Discount Value"},"stripe_coupon_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Stripe Coupon Id"},"starts_at":{"type":"string","format":"date-time","title":"Starts At"},"ends_at":{"type":"string","format":"date-time","title":"Ends At"},"max_uses":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Max Uses"},"current_uses":{"type":"integer","title":"Current Uses","default":0},"promo_code":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Promo Code"},"is_active":{"type":"boolean","title":"Is Active","default":true},"created_at":{"type":"string","format":"date-time","title":"Created At"},"updated_at":{"type":"string","format":"date-time","title":"Updated At"}},"type":"object","required":["promotion_id","name","discount_value","starts_at","ends_at"],"title":"Promotion","description":"Time-limited promotional pricing."},"PromotionCreate":{"properties":{"promotion_id":{"type":"string","title":"Promotion Id"},"name":{"type":"string","title":"Name"},"description":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Description"},"applicable_tiers":{"items":{"type":"string"},"type":"array","title":"Applicable Tiers","default":[]},"discount_type":{"type":"string","enum":["percentage","fixed_amount"],"title":"Discount Type","default":"percentage"},"discount_value":{"type":"integer","title":"Discount Value"},"stripe_coupon_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Stripe Coupon Id"},"starts_at":{"type":"string","format":"date-time","title":"Starts At"},"ends_at":{"type":"string","format":"date-time","title":"Ends At"},"max_uses":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Max Uses"},"promo_code":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Promo Code"},"is_active":{"type":"boolean","title":"Is Active","default":true}},"type":"object","required":["promotion_id","name","discount_value","starts_at","ends_at"],"title":"PromotionCreate"},"PromotionResponse":{"properties":{"promotion":{"$ref":"#/components/schemas/Promotion"}},"type":"object","required":["promotion"],"title":"PromotionResponse"},"PromotionUpdate":{"properties":{"name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Name"},"description":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Description"},"applicable_tiers":{"anyOf":[{"items":{"type":"string"},"type":"array"},{"type":"null"}],"title":"Applicable Tiers"},"discount_type":{"anyOf":[{"type":"string","enum":["percentage","fixed_amount"]},{"type":"null"}],"title":"Discount Type"},"discount_value":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Discount Value"},"stripe_coupon_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Stripe Coupon Id"},"starts_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Starts At"},"ends_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Ends At"},"max_uses":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Max Uses"},"promo_code":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Promo Code"},"is_active":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Is Active"}},"type":"object","title":"PromotionUpdate"},"PromotionalCTA":{"properties":{"enabled":{"type":"boolean","title":"Enabled","default":false},"text":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Text"},"url":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Url"},"style":{"type":"string","title":"Style","default":"primary"}},"type":"object","title":"PromotionalCTA","description":"Promotional call-to-action banner (Plus tier only). DEPRECATED - use BannerAd instead."},"PromotionsListResponse":{"properties":{"promotions":{"items":{"$ref":"#/components/schemas/Promotion"},"type":"array","title":"Promotions"}},"type":"object","required":["promotions"],"title":"PromotionsListResponse"},"PropertyAdministratorResponse":{"properties":{"bfe_number":{"type":"integer","title":"Bfe Number"},"administrator_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Administrator Name"},"administrator_cvr":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Administrator Cvr"},"status":{"type":"string","title":"Status"}},"type":"object","required":["bfe_number","status"],"title":"PropertyAdministratorResponse","description":"Administrator for API response."},"PropertyBuildingData":{"properties":{"ejendomstype":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Ejendomstype"},"buildings":{"items":{"$ref":"#/components/schemas/BuildingInfo"},"type":"array","title":"Buildings"},"units":{"items":{"$ref":"#/components/schemas/UnitInfo"},"type":"array","title":"Units"},"land_area":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Land Area"}},"type":"object","title":"PropertyBuildingData","description":"Aggregated building/unit data for a property."},"PropertyBuildingsResponse":{"properties":{"bfe_number":{"type":"integer","title":"Bfe Number","description":"BFE number of the property"},"buildings":{"items":{"$ref":"#/components/schemas/BuildingPolygon"},"type":"array","title":"Buildings","description":"Building footprints (WGS84) whose centroid lies on the property's parcels"},"count":{"type":"integer","title":"Count","description":"Number of footprints returned","default":0},"error":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Error","description":"Set to 'fetch_failed' when the upstream WFS was unavailable (result not cached)"}},"type":"object","required":["bfe_number"],"title":"PropertyBuildingsResponse","description":"GeoDanmark building footprints (bygningspolygoner) for a property."},"PropertyClimateSummary":{"properties":{"bfe_number":{"type":"integer","title":"Bfe Number"},"assessed":{"type":"boolean","title":"Assessed"},"bluespot_at_point":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Bluespot At Point"},"bluespot_fill_mm":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Bluespot Fill Mm"},"bluespot_share_10m":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Bluespot Share 10M"},"havvand_flood_level_m":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Havvand Flood Level M"}},"type":"object","required":["bfe_number","assessed"],"title":"PropertyClimateSummary","description":"Per-property entry in a company climate aggregation."},"PropertyDetailResponse":{"properties":{"bfe_number":{"type":"integer","title":"Bfe Number"},"withheld":{"type":"boolean","title":"Withheld","description":"True when the property's details are withheld after a granted objection from the owner: only number, type, address and parcels are given","default":false},"property_type":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Property Type","description":"samlet_fast_ejendom, ejerlejlighed or bygning_paa_fremmed_grund"},"property_type_code":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Property Type Code","description":"BBR ejendomstype code (1, 2 or 3)"},"ejerlejlighedsnummer":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Ejerlejlighedsnummer"},"matrikler":{"items":{"$ref":"#/components/schemas/PropertyLookupMatrikel"},"type":"array","title":"Matrikler","description":"Parcels (ejerlav + matrikelnummer) the property holds"},"address":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Address"},"location":{"anyOf":[{"$ref":"#/components/schemas/app__models__property__GeoLocation"},{"type":"null"}]},"building_data":{"anyOf":[{"$ref":"#/components/schemas/PropertyBuildingData"},{"type":"null"}]},"matrikel_polygons":{"anyOf":[{"items":{"$ref":"#/components/schemas/MatrikelPolygon"},"type":"array"},{"type":"null"}],"title":"Matrikel Polygons"},"owner_type":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Owner Type","description":"The current owners' shared owner_type, 'mixed' when they differ, null when unknown","examples":["private"]},"owners":{"items":{"$ref":"#/components/schemas/PropertyOwner"},"type":"array","title":"Owners","description":"Current owners of every kind (companies with CVR and name)"},"ownerships":{"items":{"$ref":"#/components/schemas/PropertyOwnershipResponse"},"type":"array","title":"Ownerships"},"transfers":{"items":{"$ref":"#/components/schemas/PropertyTransferResponse"},"type":"array","title":"Transfers"},"administrators":{"items":{"$ref":"#/components/schemas/PropertyAdministratorResponse"},"type":"array","title":"Administrators"},"energy_label":{"anyOf":[{"$ref":"#/components/schemas/PropertyEnergyLabelResponse"},{"type":"null"}],"description":"Only with include=energy_label (or all); null when no label data exists"},"climate":{"anyOf":[{"$ref":"#/components/schemas/ClimateRiskResponse"},{"type":"null"}],"description":"Only with include=climate (or all); null when the property cannot be assessed"},"planning":{"anyOf":[{"$ref":"#/components/schemas/PropertyPlanningResponse"},{"type":"null"}],"description":"Only with include=planning (or all); null when the property cannot be assessed"},"valuation":{"anyOf":[{"$ref":"#/components/schemas/PropertyValuationResponse"},{"type":"null"}],"description":"Only with include=valuation (or all); null when no public valuation is known"},"meta":{"additionalProperties":true,"type":"object","title":"Meta"}},"type":"object","required":["bfe_number","ownerships","transfers","administrators"],"title":"PropertyDetailResponse","description":"Full property details including transfers, transactions, and administrators."},"PropertyEnergyLabelResponse":{"properties":{"version":{"type":"integer","title":"Version"},"source":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Source","description":"bfe or bbr lookup path"},"classification":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Classification","description":"Current headline label"},"valid_to":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Valid To"},"label_count":{"type":"integer","title":"Label Count","default":0},"labels":{"items":{"$ref":"#/components/schemas/EnergyLabelItem"},"type":"array","title":"Labels"},"assessed_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Assessed At"}},"type":"object","required":["version"],"title":"PropertyEnergyLabelResponse","description":"Energy labels for a property (EMOData lookup, cached on the property)."},"PropertyLookupItem":{"properties":{"bfe_number":{"type":"integer","title":"Bfe Number","description":"BFE number; use it with /v1/properties/{bfe_number}"},"type":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Type","description":"samlet_fast_ejendom, ejerlejlighed or bygning_paa_fremmed_grund","examples":["ejerlejlighed"]},"type_code":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Type Code","description":"BBR ejendomstype code (1, 2 or 3)"},"relation":{"type":"string","title":"Relation","description":"parcel: the property the land belongs to; unit: an ejerlejlighed at the address","examples":["unit"]},"ejerlejlighedsnummer":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Ejerlejlighedsnummer"},"address":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Address","description":"The unit address for ejerlejligheder, else the property's address"},"adresse_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Adresse Id","description":"DAR/DAWA adresse id of the unit (unit relations only)"},"matrikler":{"items":{"$ref":"#/components/schemas/PropertyLookupMatrikel"},"type":"array","title":"Matrikler"},"details_available":{"type":"boolean","title":"Details Available","description":"Whether /v1/properties/{bfe_number} has data for this BFE"},"withheld":{"type":"boolean","title":"Withheld","description":"True when the property's details are withheld after a granted objection","default":false}},"type":"object","required":["bfe_number","relation","details_available"],"title":"PropertyLookupItem","description":"A property (BFE) that the looked-up address, parcel or point belongs to."},"PropertyLookupMatrikel":{"properties":{"ejerlavkode":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Ejerlavkode","description":"Ejerlav code"},"matrikelnummer":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Matrikelnummer"}},"type":"object","title":"PropertyLookupMatrikel"},"PropertyLookupResponse":{"properties":{"match":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Match","description":"What the input resolved to: type (adresse, adgangsadresse, matrikel, koordinat), id and betegnelse; kategori A/B/C for free-text addresses (A exact, B confident, C uncertain)"},"properties":{"items":{"$ref":"#/components/schemas/PropertyLookupItem"},"type":"array","title":"Properties"},"count":{"type":"integer","title":"Count"}},"type":"object","required":["properties","count"],"title":"PropertyLookupResponse","description":"Properties matching an address, DAWA id, cadastral number or coordinate."},"PropertyOwner":{"properties":{"owner_type":{"type":"string","title":"Owner Type","description":"private, social_housing, company, association, housing_cooperative, municipality, other_municipality, region, state, other, not_calculated or unknown","examples":["private"]},"owner_type_code":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Owner Type Code","description":"EJF ejerforholdskode","examples":["10"]},"owner_type_text":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Owner Type Text","description":"The register's text for the code","examples":["Privatpersoner, incl. I/S"]},"cvr":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Cvr","description":"Owning company's CVR (companies only)"},"name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Name","description":"Owning company's name (companies only)"},"share":{"anyOf":[{"$ref":"#/components/schemas/OwnershipShare"},{"type":"null"}],"description":"Ownership share (actual, else registered)"},"since":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Since","description":"Owner since (virkningFra)"},"primary_contact":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Primary Contact"}},"type":"object","required":["owner_type"],"title":"PropertyOwner","description":"A current owner. Companies carry CVR and name; every other owner only its\ntype, share and date. Private owners are never named."},"PropertyOwnershipResponse":{"properties":{"bfe_number":{"type":"integer","title":"Bfe Number"},"cvr":{"type":"string","title":"Cvr"},"ownership_type_code":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Ownership Type Code"},"actual_ownership":{"anyOf":[{"$ref":"#/components/schemas/OwnershipShare"},{"type":"null"}]},"registered_ownership":{"anyOf":[{"$ref":"#/components/schemas/OwnershipShare"},{"type":"null"}]},"primary_contact":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Primary Contact"},"status":{"type":"string","title":"Status"},"effective_from":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Effective From"},"effective_to":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Effective To"},"company_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Company Name"},"address":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Address"},"building_data":{"anyOf":[{"$ref":"#/components/schemas/PropertyBuildingData"},{"type":"null"}]}},"type":"object","required":["bfe_number","cvr","status"],"title":"PropertyOwnershipResponse","description":"Single property ownership for API response (excludes raw field)."},"PropertyPlanningResponse":{"properties":{"version":{"type":"integer","title":"Version"},"zonestatus":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Zonestatus","description":"Byzone/Landzone/Sommerhusomraade"},"lokalplaner":{"items":{"$ref":"#/components/schemas/PlanningPlan"},"type":"array","title":"Lokalplaner"},"lokalplan_forslag":{"items":{"$ref":"#/components/schemas/PlanningPlan"},"type":"array","title":"Lokalplan Forslag"},"kommuneplanrammer":{"items":{"$ref":"#/components/schemas/PlanningPlan"},"type":"array","title":"Kommuneplanrammer"},"assessed_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Assessed At"}},"type":"object","required":["version"],"title":"PropertyPlanningResponse","description":"Planning status at the property's coordinate (Plandata.dk point lookup)."},"PropertyPreliminaryValuation":{"properties":{"year":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Year","description":"The valuation year"},"property_value":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Property Value","description":"Foreløbig ejendomsværdi in DKK (0 for business properties, which get a land value only)"},"land_value":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Land Value","description":"Foreløbig grundværdi in DKK"},"land_value_housing":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Land Value Housing","description":"Land and forestry: grundværdi of the dwelling"},"production_land_value":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Production Land Value","description":"Land and forestry: grundværdi of production land"},"other_land_value":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Other Land Value","description":"Land and forestry: grundværdi of other land"},"legal_category_code":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Legal Category Code"},"legal_category":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Legal Category","description":"Juridisk kategori, e.g. 'Ejerbolig til vurdering i lige år'"},"legal_subcategory_code":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Legal Subcategory Code"},"legal_subcategory":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Legal Subcategory"},"vurderingsejendom_id":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Vurderingsejendom Id"},"bfe_numbers":{"items":{"type":"integer"},"type":"array","title":"Bfe Numbers","description":"Every BFE number the valuation covers"},"release_date":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Release Date","description":"Date of Vurderingsstyrelsen's data release (YYYY-MM-DD)"}},"type":"object","title":"PropertyPreliminaryValuation","description":"One preliminary valuation (foreløbig vurdering) from Vurderingsstyrelsen's\npublished files: homes 2022 and 2024, business and agricultural land\nvalues 2023 and 2025 (their ejendomsværdi is 0)."},"PropertyReportAccessResponse":{"properties":{"cvr":{"type":"string","title":"Cvr"},"can_download":{"type":"boolean","title":"Can Download"},"is_pro":{"type":"boolean","title":"Is Pro"},"purchased":{"type":"boolean","title":"Purchased"},"purchase_expires_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Purchase Expires At"},"price_dkk":{"type":"integer","title":"Price Dkk"},"pack_credits":{"type":"integer","title":"Pack Credits","default":0}},"type":"object","required":["cvr","can_download","is_pro","purchased","price_dkk"],"title":"PropertyReportAccessResponse","description":"Whether the current user can download a property report for a CVR."},"PropertyReportCheckoutRequest":{"properties":{"ga_client_id":{"anyOf":[{"type":"string","maxLength":64},{"type":"null"}],"title":"Ga Client Id","description":"GA4 client id from the _ga cookie (analytics attribution)"},"ga_session_id":{"anyOf":[{"type":"string","maxLength":32},{"type":"null"}],"title":"Ga Session Id","description":"GA4 session id from the _ga_<container> cookie (session attribution)"},"cvr":{"type":"string","title":"Cvr","description":"CVR number of the company the report covers"},"success_url":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Success Url","description":"Redirect URL on success"},"cancel_url":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Cancel Url","description":"Redirect URL on cancel"}},"type":"object","required":["cvr"],"title":"PropertyReportCheckoutRequest","description":"Request to create a one-off property report checkout session."},"PropertyReportCheckoutResponse":{"properties":{"checkout_url":{"type":"string","title":"Checkout Url"}},"type":"object","required":["checkout_url"],"title":"PropertyReportCheckoutResponse","description":"Response with property report checkout URL."},"PropertyReportHistoryItem":{"properties":{"cvr":{"type":"string","title":"Cvr"},"company_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Company Name"},"last_generated_at":{"type":"string","format":"date-time","title":"Last Generated At"},"count":{"type":"integer","title":"Count"},"can_redownload":{"type":"boolean","title":"Can Redownload"},"purchase_expires_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Purchase Expires At"}},"type":"object","required":["cvr","last_generated_at","count","can_redownload"],"title":"PropertyReportHistoryItem"},"PropertyReportHistoryResponse":{"properties":{"items":{"items":{"$ref":"#/components/schemas/PropertyReportHistoryItem"},"type":"array","title":"Items"}},"type":"object","required":["items"],"title":"PropertyReportHistoryResponse"},"PropertyScreenFilters":{"properties":{"postal_codes":{"items":{"type":"string"},"type":"array","maxItems":100,"title":"Postal Codes"},"municipality_codes":{"items":{"type":"string"},"type":"array","maxItems":99,"title":"Municipality Codes","description":"Resolved to the municipality's postal codes"},"region_codes":{"items":{"type":"string"},"type":"array","maxItems":5,"title":"Region Codes","description":"Resolved to the region's postal codes"},"geo":{"anyOf":[{"$ref":"#/components/schemas/GeoRadius"},{"type":"null"}]},"building_area":{"anyOf":[{"$ref":"#/components/schemas/NumericRange"},{"type":"null"}],"description":"Matches properties with at least one building whose total area (m²) is in the range. Condominium unit areas are not covered."},"has_flood_risk":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Has Flood Risk","description":"At least elevated flood exposure per Klimadatastyrelsen's DHM models (cloudburst depression or storm surge at 3 m or less)"},"energy_classifications":{"items":{"type":"string"},"type":"array","maxItems":7,"title":"Energy Classifications","description":"Current energy label letters to include (A-G; prefix matched)"},"has_poor_energy_label":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Has Poor Energy Label","description":"Current energy label D, E, F or G"},"zone_statuses":{"items":{"type":"string"},"type":"array","maxItems":3,"title":"Zone Statuses","description":"Planzone: byzone, landzone and/or sommerhusomraade"},"exclude_advertising_protected":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Exclude Advertising Protected","description":"Exclude properties whose only active company owners have CVR advertising protection. Required when results are used for direct marketing."}},"type":"object","title":"PropertyScreenFilters","description":"Filters for POST /v1/screen/properties. Results are always scoped to\nproperties with at least one active company ownership."},"PropertyScreenItem":{"properties":{"bfe_number":{"type":"integer","title":"Bfe Number"},"address":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Address"},"postal_code":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Postal Code"},"building_area":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Building Area","description":"Largest building's total area (m²)"},"flood_flagged":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Flood Flagged"},"energy_classification":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Energy Classification"},"zone_status":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Zone Status"},"owners":{"items":{"$ref":"#/components/schemas/PropertyScreenOwner"},"type":"array","title":"Owners","description":"Active company owners"}},"type":"object","required":["bfe_number"],"title":"PropertyScreenItem"},"PropertyScreenMeta":{"properties":{"limit":{"type":"integer","title":"Limit"},"has_more":{"type":"boolean","title":"Has More"},"next_cursor":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Next Cursor"}},"type":"object","required":["limit","has_more"],"title":"PropertyScreenMeta"},"PropertyScreenOwner":{"properties":{"cvr":{"type":"string","title":"Cvr"},"name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Name"}},"type":"object","required":["cvr"],"title":"PropertyScreenOwner"},"PropertyScreenRequest":{"properties":{"filters":{"$ref":"#/components/schemas/PropertyScreenFilters"},"cursor":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Cursor","description":"bfe_number cursor from the previous page's meta.next_cursor"},"limit":{"type":"integer","maximum":100.0,"minimum":1.0,"title":"Limit","default":25}},"type":"object","required":["filters"],"title":"PropertyScreenRequest"},"PropertyScreenResponse":{"properties":{"data":{"items":{"$ref":"#/components/schemas/PropertyScreenItem"},"type":"array","title":"Data"},"meta":{"$ref":"#/components/schemas/PropertyScreenMeta"}},"type":"object","required":["data","meta"],"title":"PropertyScreenResponse"},"PropertySummary":{"properties":{"count":{"type":"integer","title":"Count","description":"Total number of active property ownerships","default":0},"historic_count":{"type":"integer","title":"Historic Count","description":"Number of historic (ended) property ownerships","default":0},"total_area_sqm":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Total Area Sqm","description":"Total building area in square meters"},"residential_area_sqm":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Residential Area Sqm","description":"Residential area in square meters"},"commercial_area_sqm":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Commercial Area Sqm","description":"Commercial area in square meters"},"land_area_sqm":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Land Area Sqm","description":"Total land area in square meters"},"property_types":{"anyOf":[{"additionalProperties":{"type":"integer"},"type":"object"},{"type":"null"}],"title":"Property Types","description":"Count by property type"},"updated_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Updated At","description":"When the summary was last computed"}},"type":"object","title":"PropertySummary","description":"Aggregated property ownership summary for a company."},"PropertyTransactionResponse":{"properties":{"total_purchase_price":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Total Purchase Price"},"cash_purchase_price":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Cash Purchase Price"},"purchase_agreement_date":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Purchase Agreement Date"},"transfer_date":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Transfer Date"},"currency_code":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Currency Code"},"buildings_included":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Buildings Included"}},"type":"object","title":"PropertyTransactionResponse","description":"Transaction details for API response."},"PropertyTransferResponse":{"properties":{"bfe_number":{"type":"integer","title":"Bfe Number"},"takeover_date":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Takeover Date"},"registration_date":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Registration Date"},"transfer_method":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Transfer Method"},"conditional":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Conditional"},"deadline_date":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Deadline Date"},"status":{"type":"string","title":"Status"},"rolled_back":{"type":"boolean","title":"Rolled Back","default":false},"transaction":{"anyOf":[{"$ref":"#/components/schemas/PropertyTransactionResponse"},{"type":"null"}]},"bundle":{"anyOf":[{"items":{"$ref":"#/components/schemas/BundleProperty"},"type":"array"},{"type":"null"}],"title":"Bundle"}},"type":"object","required":["bfe_number","status"],"title":"PropertyTransferResponse","description":"Transfer event for API response, with denormalized transaction."},"PropertyValuation":{"properties":{"year":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Year","description":"The year the valuation applies to"},"property_value":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Property Value","description":"Ejendomsværdi in DKK; 0 means the register holds no value for that year"},"land_value":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Land Value","description":"Grundværdi in DKK"},"assessed_area":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Assessed Area","description":"Vurderet areal in m²"},"legal_category_code":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Legal Category Code"},"legal_category":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Legal Category","description":"Juridisk kategori, e.g. 'Ejerbolig til vurdering i lige år'"},"legal_subcategory_code":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Legal Subcategory Code"},"legal_subcategory":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Legal Subcategory"},"usage_code":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Usage Code","description":"Benyttelseskode"},"change_code":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Change Code","description":"Ændringskode (type of valuation or deciding authority)"},"change_date":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Change Date","description":"Date of the latest valid valuation"},"updated_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Updated At","description":"When the valuation was last updated in the register"},"apartments_included":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Apartments Included","description":"Number of flats valued together with the property"},"valuation_id":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Valuation Id"},"vurderingsejendom_id":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Vurderingsejendom Id"},"moderejendom_id":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Moderejendom Id"}},"type":"object","title":"PropertyValuation","description":"One public property valuation (offentlig ejendomsvurdering, Datafordeler VUR)."},"PropertyValuationResponse":{"properties":{"latest":{"anyOf":[{"$ref":"#/components/schemas/PropertyValuation"},{"type":"null"}],"description":"The newest final valuation; null when only preliminary valuations exist"},"history":{"items":{"$ref":"#/components/schemas/PropertyValuation"},"type":"array","title":"History"},"count":{"type":"integer","title":"Count"},"source":{"type":"string","title":"Source","description":"Attribution the data licence requires","default":"Vurderingsstyrelsen (Ejendomsvurdering via Datafordeler, CC BY 4.0)"},"preliminary":{"items":{"$ref":"#/components/schemas/PropertyPreliminaryValuation"},"type":"array","title":"Preliminary","description":"Current preliminary valuations, newest year first"},"preliminary_source":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Preliminary Source","description":"Attribution for the preliminary valuations"}},"type":"object","required":["history","count"],"title":"PropertyValuationResponse","description":"Public valuations of a property. Final valuations newest first\n(old-system valuations to 2020, new-system valuations of homes as they\nbecome final) and the current preliminary valuations."},"ProviderInfo":{"properties":{"id":{"type":"string","title":"Id"},"name":{"type":"string","title":"Name"},"description":{"type":"string","title":"Description"},"connected":{"type":"boolean","title":"Connected","default":false},"connection_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Connection Id"}},"type":"object","required":["id","name","description"],"title":"ProviderInfo","description":"Info about an available accounting provider."},"PublicChangeDetail":{"properties":{"field":{"type":"string","title":"Field"},"old_value":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Old Value"},"new_value":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"New Value"}},"type":"object","required":["field"],"title":"PublicChangeDetail","description":"A single field change, with values stripped for private fields."},"PublicChangeEvent":{"properties":{"event_type":{"type":"string","title":"Event Type"},"cvr":{"type":"string","title":"Cvr"},"company_name":{"type":"string","title":"Company Name"},"summary_da":{"type":"string","title":"Summary Da"},"summary_en":{"type":"string","title":"Summary En"},"changes":{"items":{"$ref":"#/components/schemas/PublicChangeDetail"},"type":"array","title":"Changes"},"detected_at":{"type":"string","title":"Detected At"}},"type":"object","required":["event_type","cvr","company_name","summary_da","summary_en","changes","detected_at"],"title":"PublicChangeEvent","description":"A public change event with structured changes."},"PublicClaimedProfileResponse":{"properties":{"cvr":{"type":"string","title":"Cvr"},"is_claimed":{"type":"boolean","title":"Is Claimed","default":true},"tier":{"$ref":"#/components/schemas/ClaimTier"},"logo_url":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Logo Url"},"description":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Description"},"description_en":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Description En"},"social_links":{"$ref":"#/components/schemas/SocialLinks"},"website_override":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Website Override"},"photos":{"items":{"$ref":"#/components/schemas/ProfilePhoto"},"type":"array","title":"Photos"},"video_url":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Video Url"},"promotional_cta":{"anyOf":[{"$ref":"#/components/schemas/PromotionalCTA"},{"type":"null"}]},"job_listings":{"items":{"$ref":"#/components/schemas/JobListing"},"type":"array","title":"Job Listings"},"has_contact_form":{"type":"boolean","title":"Has Contact Form","default":false},"hide_similar_companies":{"type":"boolean","title":"Hide Similar Companies","default":false},"banner_ad":{"anyOf":[{"$ref":"#/components/schemas/BannerAd"},{"type":"null"}]}},"type":"object","required":["cvr","tier"],"title":"PublicClaimedProfileResponse","description":"Public response with claimed profile data (shown on company page)."},"PublicPricingResponse":{"properties":{"tiers":{"items":{"$ref":"#/components/schemas/PublicPricingTier"},"type":"array","title":"Tiers"},"active_promotion":{"anyOf":[{"$ref":"#/components/schemas/PublicPromotion"},{"type":"null"}]}},"type":"object","required":["tiers"],"title":"PublicPricingResponse","description":"Public pricing response."},"PublicPricingTier":{"properties":{"tier_id":{"type":"string","title":"Tier Id"},"name":{"type":"string","title":"Name"},"description":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Description"},"price_monthly_dkk":{"type":"integer","title":"Price Monthly Dkk"},"price_yearly_dkk":{"type":"integer","title":"Price Yearly Dkk"},"api_requests_per_month":{"type":"integer","title":"Api Requests Per Month"},"max_lists":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Max Lists"},"max_notifications":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Max Notifications"},"seats_included":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Seats Included"},"seat_price_monthly_dkk":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Seat Price Monthly Dkk"},"seat_price_yearly_dkk":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Seat Price Yearly Dkk"}},"type":"object","required":["tier_id","name","price_monthly_dkk","price_yearly_dkk","api_requests_per_month"],"title":"PublicPricingTier","description":"Public pricing tier info."},"PublicPromotion":{"properties":{"promotion_id":{"type":"string","title":"Promotion Id"},"name":{"type":"string","title":"Name"},"description":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Description"},"discount_type":{"type":"string","title":"Discount Type"},"discount_value":{"type":"integer","title":"Discount Value"},"applicable_tiers":{"items":{"type":"string"},"type":"array","title":"Applicable Tiers"},"ends_at":{"type":"string","title":"Ends At"}},"type":"object","required":["promotion_id","name","discount_type","discount_value","applicable_tiers","ends_at"],"title":"PublicPromotion","description":"Public promotion info (auto-applied promotions only)."},"PublicStatsResponse":{"properties":{"total_companies":{"type":"integer","title":"Total Companies"},"active_companies":{"type":"integer","title":"Active Companies"},"municipalities_count":{"type":"integer","title":"Municipalities Count"},"last_updated":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Last Updated"},"recent_registrations":{"items":{"$ref":"#/components/schemas/RecentCompany"},"type":"array","title":"Recent Registrations"},"top_industries":{"items":{"$ref":"#/components/schemas/app__routers__public__TopIndustry"},"type":"array","title":"Top Industries"},"top_municipalities":{"items":{"$ref":"#/components/schemas/TopMunicipality"},"type":"array","title":"Top Municipalities"},"financial_statements_count":{"type":"integer","title":"Financial Statements Count","default":0},"participants_count":{"type":"integer","title":"Participants Count","default":0},"properties_count":{"type":"integer","title":"Properties Count","default":0},"production_units_count":{"type":"integer","title":"Production Units Count","default":0},"credit_scores_count":{"type":"integer","title":"Credit Scores Count","default":0}},"type":"object","required":["total_companies","active_companies","municipalities_count","recent_registrations","top_industries","top_municipalities"],"title":"PublicStatsResponse","description":"Public statistics response."},"PublisherMapRequest":{"properties":{"cvr":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Cvr","description":"8-digit CVR, or null to unmap"}},"type":"object","title":"PublisherMapRequest"},"QuickDatabaseCounts":{"properties":{"companies_count":{"type":"integer","title":"Companies Count"},"participants_count":{"type":"integer","title":"Participants Count"},"production_units_count":{"type":"integer","title":"Production Units Count"},"addresses_count":{"type":"integer","title":"Addresses Count"},"financial_statements_count":{"type":"integer","title":"Financial Statements Count"},"users_count":{"type":"integer","title":"Users Count"},"api_keys_count":{"type":"integer","title":"Api Keys Count"},"property_ownerships_count":{"type":"integer","title":"Property Ownerships Count","default":0},"property_transfers_count":{"type":"integer","title":"Property Transfers Count","default":0},"property_transactions_count":{"type":"integer","title":"Property Transactions Count","default":0},"property_administrators_count":{"type":"integer","title":"Property Administrators Count","default":0},"mat_jordstykker_count":{"type":"integer","title":"Mat Jordstykker Count","default":0},"dar_husnumre_count":{"type":"integer","title":"Dar Husnumre Count","default":0},"dar_adressepunkter_count":{"type":"integer","title":"Dar Adressepunkter Count","default":0},"dar_navngivne_veje_count":{"type":"integer","title":"Dar Navngivne Veje Count","default":0},"dar_postnumre_count":{"type":"integer","title":"Dar Postnumre Count","default":0},"dar_vej_kommunedele_count":{"type":"integer","title":"Dar Vej Kommunedele Count","default":0},"bbr_bygninger_count":{"type":"integer","title":"Bbr Bygninger Count","default":0},"bbr_enheder_count":{"type":"integer","title":"Bbr Enheder Count","default":0},"bbr_ejendomsrelationer_count":{"type":"integer","title":"Bbr Ejendomsrelationer Count","default":0},"bbr_enhed_ejendomsrelationer_count":{"type":"integer","title":"Bbr Enhed Ejendomsrelationer Count","default":0}},"type":"object","required":["companies_count","participants_count","production_units_count","addresses_count","financial_statements_count","users_count","api_keys_count"],"title":"QuickDatabaseCounts","description":"Fast counts using estimated_document_count - instant metadata lookup."},"RateLimit":{"properties":{"requests_per_minute":{"type":"integer","title":"Requests Per Minute","default":60},"requests_per_month":{"type":"integer","title":"Requests Per Month","default":10000}},"type":"object","title":"RateLimit"},"RecentCompany":{"properties":{"name":{"type":"string","title":"Name"},"cvr":{"type":"string","title":"Cvr"},"date":{"type":"string","title":"Date"},"industry":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Industry"},"municipality":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Municipality"}},"type":"object","required":["name","cvr","date"],"title":"RecentCompany","description":"Recently registered company."},"RecentEventsResponse":{"properties":{"events":{"items":{"$ref":"#/components/schemas/PublicChangeEvent"},"type":"array","title":"Events"},"total_today":{"type":"integer","title":"Total Today"}},"type":"object","required":["events","total_today"],"title":"RecentEventsResponse","description":"Recent change events response."},"RecordDetail":{"properties":{"id":{"type":"string","title":"Id"},"cvr":{"type":"string","title":"Cvr"},"company":{"$ref":"#/components/schemas/CompanySnapshot"},"status":{"type":"string","enum":["ny","kontaktet","dialog","vundet","tabt"],"title":"Status"},"source":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Source"},"owner_email":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Owner Email"},"created_by_email":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Created By Email"},"next_followup_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Next Followup At"},"last_activity_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Last Activity At"},"open_followup_count":{"type":"integer","title":"Open Followup Count","default":0},"created_at":{"type":"string","format":"date-time","title":"Created At"},"activities":{"items":{"$ref":"#/components/schemas/Activity"},"type":"array","title":"Activities","default":[]}},"type":"object","required":["id","cvr","company","status","created_at"],"title":"RecordDetail"},"RecordSummary":{"properties":{"id":{"type":"string","title":"Id"},"cvr":{"type":"string","title":"Cvr"},"company":{"$ref":"#/components/schemas/CompanySnapshot"},"status":{"type":"string","enum":["ny","kontaktet","dialog","vundet","tabt"],"title":"Status"},"source":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Source"},"owner_email":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Owner Email"},"created_by_email":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Created By Email"},"next_followup_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Next Followup At"},"last_activity_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Last Activity At"},"open_followup_count":{"type":"integer","title":"Open Followup Count","default":0},"created_at":{"type":"string","format":"date-time","title":"Created At"}},"type":"object","required":["id","cvr","company","status","created_at"],"title":"RecordSummary","description":"Row in the working-list table view."},"RecordsResponse":{"properties":{"data":{"items":{"$ref":"#/components/schemas/RecordSummary"},"type":"array","title":"Data"},"meta":{"additionalProperties":true,"type":"object","title":"Meta","default":{}}},"type":"object","required":["data"],"title":"RecordsResponse"},"Region":{"properties":{"code":{"type":"string","title":"Code","description":"Region code","examples":["1084"]},"name":{"type":"string","title":"Name","description":"Region name","examples":["Region Hovedstaden"]}},"type":"object","required":["code","name"],"title":"Region","description":"Region data."},"RegionListResponse":{"properties":{"data":{"items":{"$ref":"#/components/schemas/Region"},"type":"array","title":"Data","description":"List of regions"},"meta":{"additionalProperties":true,"type":"object","title":"Meta","description":"Response metadata"}},"type":"object","required":["data","meta"],"title":"RegionListResponse","description":"Response with list of regions."},"RejectClaimRequest":{"properties":{"reason":{"type":"string","title":"Reason"}},"type":"object","required":["reason"],"title":"RejectClaimRequest"},"ReportCreditsResponse":{"properties":{"credits":{"type":"integer","title":"Credits"},"pack_credits":{"type":"integer","title":"Pack Credits"},"pack_price_dkk":{"type":"integer","title":"Pack Price Dkk"}},"type":"object","required":["credits","pack_credits","pack_price_dkk"],"title":"ReportCreditsResponse","description":"The caller's prepaid report credit balance + pack offer."},"ReportEstimateResponse":{"properties":{"estimated_count":{"type":"integer","title":"Estimated Count","description":"Estimated number of companies matching filters"},"preview":{"anyOf":[{"items":{"additionalProperties":true,"type":"object"},"type":"array"},{"type":"null"}],"title":"Preview","description":"Sample of matching companies. Only populated when include_preview=true is requested (the MCP preview_lead_list tool, and the free preview on companydata.dk, which shows a Basic account the first 5)."},"preview_withheld":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Preview Withheld","description":"Why a requested preview is empty below Pro: `pro_filters` (the filters use Pro-only criteria) or `daily_limit` (the day's previews are used)."}},"type":"object","required":["estimated_count"],"title":"ReportEstimateResponse","description":"Response model for a lead list estimate."},"ReportFieldSelection":{"properties":{"basic_data":{"items":{"type":"string"},"type":"array","title":"Basic Data","description":"Basic company data fields"},"management_ownership":{"items":{"type":"string"},"type":"array","title":"Management Ownership","description":"Management and ownership data fields"},"financial_data":{"items":{"type":"string"},"type":"array","title":"Financial Data","description":"Financial statement fields"},"ratios":{"items":{"type":"string"},"type":"array","title":"Ratios","description":"Financial ratio fields"},"property_data":{"items":{"type":"string"},"type":"array","title":"Property Data","description":"Property data fields"},"livestock":{"items":{"type":"string"},"type":"array","title":"Livestock","description":"CHR livestock fields (herd count, species, total animals) from Det Centrale Husdyrbrugsregister"},"contact_enrichment":{"items":{"type":"string"},"type":"array","title":"Contact Enrichment","description":"Enriched contact fields (discovered website, contact people, emails, phones) from our website-discovery pipeline"},"cds":{"items":{"type":"string"},"type":"array","title":"Cds","description":"CDS score and credit recommendation fields (score, rating, confidence, credit limit, payment terms)"},"tenders":{"items":{"type":"string"},"type":"array","title":"Tenders","description":"Public procurement fields (tenders won, latest tender) computed from TED/udbud.dk award notices"},"financial_history":{"type":"boolean","title":"Financial History","description":"Include the full financial-statement history in the export: a separate Excel file in long format, one row per company per fiscal year, covering every year on record (up to ~13) with the selected financial and ratio columns (raw reported figures, not recomputed). The download then becomes a ZIP holding the main file and the history file.","default":false}},"type":"object","title":"ReportFieldSelection","description":"Which fields to include in the report."},"ReportFilters":{"properties":{"industry_codes":{"items":{"type":"string"},"type":"array","maxItems":10,"title":"Industry Codes","description":"DB07 industry codes to filter by (max 10)"},"municipality_codes":{"items":{"type":"string"},"type":"array","title":"Municipality Codes","description":"Municipality codes to filter by"},"company_types":{"items":{"type":"string"},"type":"array","title":"Company Types","description":"Company type codes (e.g. A/S, ApS, IVS)"},"employee_intervals":{"items":{"type":"string"},"type":"array","title":"Employee Intervals","description":"Employee count intervals (e.g. '1-4', '10-19', '1000+')"},"financial_metric":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Financial Metric","description":"Which financial metric to filter on: 'gross_profit' or 'revenue'"},"financial_min":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Financial Min","description":"Minimum value for the selected financial metric (DKK)"},"financial_max":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Financial Max","description":"Maximum value for the selected financial metric (DKK)"},"has_phone":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Has Phone","description":"Filter for companies with a phone number"},"has_email":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Has Email","description":"Filter for companies with an email address"},"has_website":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Has Website","description":"Filter for companies with a website"},"has_properties":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Has Properties","description":"Filter for companies that own properties"},"has_flood_risk_properties":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Has Flood Risk Properties","description":"Filter for companies owning at least one property with elevated flood risk (in a cloudburst depression or flooded at a storm surge of 3 m or less, per Klimadatastyrelsen's DHM models)"},"contact_role_categories":{"items":{"type":"string"},"type":"array","maxItems":9,"title":"Contact Role Categories","description":"Filter for companies with an enriched contact person in any of these role categories (management, sales, marketing, it, hr, finance, operations, procurement, customer_service). Sourced from the company's own website via contact enrichment."},"has_poor_energy_label":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Has Poor Energy Label","description":"Filter for companies owning at least one property whose current energy label is D, E, F or G (renovation prospects, per Energistyrelsen's EMOData register)"},"property_area_min":{"anyOf":[{"type":"integer","minimum":0.0},{"type":"null"}],"title":"Property Area Min","description":"Minimum total building area (m²) across the company's owned properties"},"property_area_max":{"anyOf":[{"type":"integer","minimum":0.0},{"type":"null"}],"title":"Property Area Max","description":"Maximum total building area (m²) across the company's owned properties"},"property_zones":{"items":{"type":"string"},"type":"array","maxItems":3,"title":"Property Zones","description":"Zone status (planzone) of owned properties: byzone, landzone and/or sommerhusomraade. Matches companies owning at least one property in any selected zone (per Plandata.dk's zonekort)."},"has_livestock":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Has Livestock","description":"Filter for companies with at least one active livestock herd registered in CHR (Det Centrale Husdyrbrugsregister). Companies with a CHR marketing protection (reklamebeskyttelse) are always excluded from livestock-filtered results."},"livestock_species_codes":{"items":{"type":"integer"},"type":"array","maxItems":20,"title":"Livestock Species Codes","description":"CHR species (dyreart) codes to filter by, e.g. 12=Kvæg, 15=Svin, 13=Får. Matches companies with at least one active herd of any selected species. Implies the CHR marketing protection exclusion."},"exclude_advertising_protected":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Exclude Advertising Protected","description":"Exclude companies with CVR advertising protection (reklamebeskyttelse). Required when the list is used for direct marketing: CVR-loven prohibits marketing contact to protected companies based on registry data."},"list_ids":{"items":{"type":"string"},"type":"array","maxItems":20,"title":"List Ids","description":"Company list IDs — restrict to companies in these lists"},"connection_ids":{"items":{"type":"string"},"type":"array","maxItems":10,"title":"Connection Ids","description":"Accounting connection IDs — restrict to companies matched in these integrations"}},"type":"object","title":"ReportFilters","description":"Filters for lead list generation (legacy flat shape)."},"ReportPackCheckoutRequest":{"properties":{"ga_client_id":{"anyOf":[{"type":"string","maxLength":64},{"type":"null"}],"title":"Ga Client Id","description":"GA4 client id from the _ga cookie (analytics attribution)"},"ga_session_id":{"anyOf":[{"type":"string","maxLength":32},{"type":"null"}],"title":"Ga Session Id","description":"GA4 session id from the _ga_<container> cookie (session attribution)"},"success_url":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Success Url","description":"Redirect URL on success"},"cancel_url":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Cancel Url","description":"Redirect URL on cancel"}},"type":"object","title":"ReportPackCheckoutRequest","description":"Request to create a report pack checkout session."},"ReportPackCheckoutResponse":{"properties":{"checkout_url":{"type":"string","title":"Checkout Url"}},"type":"object","required":["checkout_url"],"title":"ReportPackCheckoutResponse","description":"Response with report pack checkout URL."},"ReportPricesResponse":{"properties":{"credit_report":{"$ref":"#/components/schemas/OneOffReportPrice"},"branche_report":{"$ref":"#/components/schemas/OneOffReportPrice"},"property_report":{"$ref":"#/components/schemas/OneOffReportPrice"},"pack_credits":{"type":"integer","title":"Pack Credits"},"pack_price_dkk":{"type":"integer","title":"Pack Price Dkk"}},"type":"object","required":["credit_report","branche_report","property_report","pack_credits","pack_price_dkk"],"title":"ReportPricesResponse","description":"Public price list for one-off reports and the prepaid pack.\n\nNo auth: used to show real prices to logged-out visitors before they\nhit the login wall."},"ReportRequestResponse":{"properties":{"id":{"type":"string","title":"Id","description":"Lead list request ID"},"name":{"type":"string","title":"Name","description":"Lead list name"},"status":{"type":"string","title":"Status","description":"Status: queued, processing, completed, failed"},"filters":{"anyOf":[{"$ref":"#/components/schemas/LeadListFilters"},{"$ref":"#/components/schemas/ReportFilters"}],"title":"Filters"},"fields":{"$ref":"#/components/schemas/ReportFieldSelection"},"estimated_count":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Estimated Count","description":"Estimated number of companies"},"row_count":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Row Count","description":"Actual number of rows in the lead list"},"capped":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Capped","description":"Whether the result was capped at the row limit"},"download_url":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Download Url","description":"R2 CDN URL for the completed lead list"},"error_message":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Error Message","description":"Error message if generation failed"},"created_at":{"type":"string","format":"date-time","title":"Created At","description":"When the lead list was requested"},"completed_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Completed At","description":"When the lead list finished"}},"type":"object","required":["id","name","status","filters","fields","created_at"],"title":"ReportRequestResponse","description":"Response model for a lead list request."},"ReportStats":{"properties":{"reports_today":{"type":"integer","title":"Reports Today"},"reports_this_week":{"type":"integer","title":"Reports This Week"},"reports_this_month":{"type":"integer","title":"Reports This Month"},"reports_total":{"type":"integer","title":"Reports Total"}},"type":"object","required":["reports_today","reports_this_week","reports_this_month","reports_total"],"title":"ReportStats","description":"Report generation statistics."},"RequestLogEntry":{"properties":{"id":{"type":"string","title":"Id"},"timestamp":{"type":"string","format":"date-time","title":"Timestamp"},"method":{"type":"string","title":"Method"},"path":{"type":"string","title":"Path"},"query_string":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Query String"},"status_code":{"type":"integer","title":"Status Code"},"duration_ms":{"type":"integer","title":"Duration Ms"},"ip_address":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Ip Address"},"user_agent":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"User Agent"},"user_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"User Id"},"api_key_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Api Key Id"},"error":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Error"}},"type":"object","required":["id","timestamp","method","path","status_code","duration_ms"],"title":"RequestLogEntry","description":"Single request log entry."},"RequestLogStats":{"properties":{"total_requests":{"type":"integer","title":"Total Requests"},"requests_today":{"type":"integer","title":"Requests Today"},"requests_last_hour":{"type":"integer","title":"Requests Last Hour"},"error_count_today":{"type":"integer","title":"Error Count Today"},"avg_duration_ms":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Avg Duration Ms"},"top_endpoints":{"items":{"additionalProperties":true,"type":"object"},"type":"array","title":"Top Endpoints"},"status_distribution":{"additionalProperties":{"type":"integer"},"type":"object","title":"Status Distribution"}},"type":"object","required":["total_requests","requests_today","requests_last_hour","error_count_today","top_endpoints","status_distribution"],"title":"RequestLogStats","description":"Statistics about request logs."},"RequestLogsResponse":{"properties":{"logs":{"items":{"$ref":"#/components/schemas/RequestLogEntry"},"type":"array","title":"Logs"},"total":{"type":"integer","title":"Total"},"page":{"type":"integer","title":"Page"},"page_size":{"type":"integer","title":"Page Size"},"has_more":{"type":"boolean","title":"Has More"}},"type":"object","required":["logs","total","page","page_size","has_more"],"title":"RequestLogsResponse","description":"Response containing request logs with pagination."},"ResendVerificationResponse":{"properties":{"success":{"type":"boolean","title":"Success"},"message":{"type":"string","title":"Message"}},"type":"object","required":["success","message"],"title":"ResendVerificationResponse","description":"Response from a verification email resend."},"ResetPasswordRequest":{"properties":{"token":{"type":"string","title":"Token"},"new_password":{"type":"string","title":"New Password"}},"type":"object","required":["token","new_password"],"title":"ResetPasswordRequest"},"ResolveDisputeRequest":{"properties":{"revoke_claim":{"type":"boolean","title":"Revoke Claim"},"notes":{"type":"string","title":"Notes"}},"type":"object","required":["revoke_claim","notes"],"title":"ResolveDisputeRequest"},"RevenueDuelItem":{"properties":{"cvr":{"type":"string","title":"Cvr"},"name":{"type":"string","title":"Name"},"logo_url":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Logo Url"},"revenue":{"type":"integer","title":"Revenue","description":"Latest annual revenue, DKK"},"year":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Year","description":"Fiscal year of the figure"}},"type":"object","required":["cvr","name","revenue"],"title":"RevenueDuelItem"},"RevenueDuelResponse":{"properties":{"items":{"items":{"$ref":"#/components/schemas/RevenueDuelItem"},"type":"array","title":"Items"},"count":{"type":"integer","title":"Count"}},"type":"object","required":["items","count"],"title":"RevenueDuelResponse"},"RevenueStats":{"properties":{"source":{"type":"string","title":"Source"},"computed_at":{"type":"string","format":"date-time","title":"Computed At"},"cached":{"type":"boolean","title":"Cached"},"mrr_ore":{"type":"integer","title":"Mrr Ore"},"arr_ore":{"type":"integer","title":"Arr Ore"},"mrr_users_ore":{"type":"integer","title":"Mrr Users Ore"},"mrr_claims_ore":{"type":"integer","title":"Mrr Claims Ore"},"mrr_monthly_billed_ore":{"type":"integer","title":"Mrr Monthly Billed Ore"},"mrr_yearly_billed_ore":{"type":"integer","title":"Mrr Yearly Billed Ore"},"mrr_at_risk_ore":{"type":"integer","title":"Mrr At Risk Ore"},"expected_30d_ore":{"type":"integer","title":"Expected 30D Ore"},"paid_mtd_ore":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Paid Mtd Ore"},"paid_prev_month_ore":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Paid Prev Month Ore"},"one_off_mtd_ore":{"type":"integer","title":"One Off Mtd Ore"},"one_off_30d_ore":{"type":"integer","title":"One Off 30D Ore"},"users_total":{"type":"integer","title":"Users Total"},"users_new_7d":{"type":"integer","title":"Users New 7D"},"users_new_30d":{"type":"integer","title":"Users New 30D"},"subscriptions":{"$ref":"#/components/schemas/SubscriptionStats"}},"type":"object","required":["source","computed_at","cached","mrr_ore","arr_ore","mrr_users_ore","mrr_claims_ore","mrr_monthly_billed_ore","mrr_yearly_billed_ore","mrr_at_risk_ore","expected_30d_ore","paid_mtd_ore","paid_prev_month_ore","one_off_mtd_ore","one_off_30d_ore","users_total","users_new_7d","users_new_30d","subscriptions"],"title":"RevenueStats","description":"Projected recurring revenue. Amounts are DKK øre, VAT-inclusive."},"RevenueTrendInsight":{"properties":{"trend":{"type":"string","title":"Trend","description":"Trend category: growing, stable, declining"},"percentage":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Percentage","description":"CAGR percentage (e.g., 8 for 8%)"},"years_analyzed":{"type":"integer","title":"Years Analyzed","description":"Number of years used in calculation"}},"type":"object","required":["trend","years_analyzed"],"title":"RevenueTrendInsight","description":"Revenue trend insight computed from financial history."},"RiskSummaryResponse":{"properties":{"total_contacts":{"type":"integer","title":"Total Contacts","default":0},"matched_contacts":{"type":"integer","title":"Matched Contacts","default":0},"match_rate":{"type":"number","title":"Match Rate","default":0.0},"avg_cds_score":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Avg Cds Score"},"at_risk_count":{"type":"integer","title":"At Risk Count","default":0},"dissolved_count":{"type":"integer","title":"Dissolved Count","default":0},"negative_equity_count":{"type":"integer","title":"Negative Equity Count","default":0}},"type":"object","title":"RiskSummaryResponse","description":"Aggregate risk stats for the dashboard."},"Rubrik":{"properties":{"key":{"type":"string","title":"Key","description":"Statstidende message type key","examples":["14a1d71d-f215-58e5-ade0-214f90482cdc"]},"section":{"type":"string","title":"Section","description":"Section in Statstidende","examples":["Konkursboer"]},"name":{"type":"string","title":"Name","description":"Rubrik name in Danish","examples":["Konkursdekret"]},"name_en":{"type":"string","title":"Name En","examples":["Bankruptcy decree"]},"event_type":{"type":"string","title":"Event Type","description":"financial_distress or corporate_announcement","examples":["financial_distress"]}},"type":"object","required":["key","section","name","name_en","event_type"],"title":"Rubrik"},"RubrikCatalogResponse":{"properties":{"rubrikker":{"items":{"$ref":"#/components/schemas/Rubrik"},"type":"array","title":"Rubrikker"}},"type":"object","required":["rubrikker"],"title":"RubrikCatalogResponse"},"SavedScreenCreate":{"properties":{"name":{"type":"string","maxLength":200,"minLength":1,"title":"Name"},"filters":{"$ref":"#/components/schemas/ScreenFilters"},"webhook_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Webhook Id","description":"Webhook (created via /v1/webhooks) that receives screen_entered/screen_left events when companies start or stop matching this screen. Omit to save the screen without notifications."}},"type":"object","required":["name","filters"],"title":"SavedScreenCreate","description":"Request body for POST /v1/screen/saved."},"SavedScreenListResponse":{"properties":{"data":{"items":{"$ref":"#/components/schemas/SavedScreenResponse"},"type":"array","title":"Data"}},"type":"object","required":["data"],"title":"SavedScreenListResponse"},"SavedScreenResponse":{"properties":{"screen_id":{"type":"string","title":"Screen Id"},"name":{"type":"string","title":"Name"},"filters":{"$ref":"#/components/schemas/ScreenFilters"},"webhook_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Webhook Id"},"active":{"type":"boolean","title":"Active"},"matched_count":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Matched Count","description":"Match count at the last evaluation"},"last_evaluated_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Last Evaluated At"},"created_at":{"type":"string","format":"date-time","title":"Created At"},"updated_at":{"type":"string","format":"date-time","title":"Updated At"}},"type":"object","required":["screen_id","name","filters","active","created_at","updated_at"],"title":"SavedScreenResponse"},"SavedScreenUpdate":{"properties":{"name":{"anyOf":[{"type":"string","maxLength":200,"minLength":1},{"type":"null"}],"title":"Name"},"filters":{"anyOf":[{"$ref":"#/components/schemas/ScreenFilters"},{"type":"null"}]},"webhook_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Webhook Id"},"clear_webhook":{"type":"boolean","title":"Clear Webhook","description":"Set true to detach the webhook","default":false},"active":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Active"}},"type":"object","title":"SavedScreenUpdate","description":"Request body for PATCH /v1/screen/saved/{screen_id}. Only provided\nfields change; updating filters re-baselines the match snapshot (no\nevents are emitted for the reset)."},"ScoreDeviation":{"properties":{"excellent_deviation":{"type":"number","title":"Excellent Deviation","default":0.0},"good_deviation":{"type":"number","title":"Good Deviation","default":0.0},"normal_deviation":{"type":"number","title":"Normal Deviation","default":0.0},"high_risk_deviation":{"type":"number","title":"High Risk Deviation","default":0.0},"critical_deviation":{"type":"number","title":"Critical Deviation","default":0.0},"avg_score":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Avg Score"},"national_avg_score":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"National Avg Score"}},"type":"object","title":"ScoreDeviation","description":"Deviation from national average in percentage points."},"ScoreDistribution":{"properties":{"excellent_count":{"type":"integer","title":"Excellent Count","default":0},"excellent_pct":{"type":"number","title":"Excellent Pct","default":0.0},"good_count":{"type":"integer","title":"Good Count","default":0},"good_pct":{"type":"number","title":"Good Pct","default":0.0},"normal_count":{"type":"integer","title":"Normal Count","default":0},"normal_pct":{"type":"number","title":"Normal Pct","default":0.0},"high_risk_count":{"type":"integer","title":"High Risk Count","default":0},"high_risk_pct":{"type":"number","title":"High Risk Pct","default":0.0},"critical_count":{"type":"integer","title":"Critical Count","default":0},"critical_pct":{"type":"number","title":"Critical Pct","default":0.0},"total_scored":{"type":"integer","title":"Total Scored","default":0}},"type":"object","title":"ScoreDistribution","description":"CDS (CompanyData Score) distribution with counts and percentages."},"ScoreSimulationResponse":{"properties":{"cvr":{"type":"string","title":"Cvr"},"company_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Company Name"},"score":{"type":"integer","title":"Score"},"rating":{"type":"string","title":"Rating"},"score_version":{"type":"integer","title":"Score Version"},"confidence":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Confidence"},"pillars":{"items":{"additionalProperties":true,"type":"object"},"type":"array","title":"Pillars"},"credit_recommendation":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Credit Recommendation"},"base_score":{"type":"integer","title":"Base Score"},"penalties":{"items":{"type":"string"},"type":"array","title":"Penalties"},"penalty_points":{"type":"integer","title":"Penalty Points"},"has_financial_data":{"type":"boolean","title":"Has Financial Data"},"has_audit_data":{"type":"boolean","title":"Has Audit Data"},"financial_data_age_days":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Financial Data Age Days"},"financial_period_end":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Financial Period End"},"financial_data":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Financial Data"},"company_status":{"type":"string","title":"Company Status"},"company_cvr_status":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Company Cvr Status"},"company_type":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Company Type"}},"type":"object","required":["cvr","company_name","score","rating","score_version","confidence","pillars","base_score","penalties","penalty_points","has_financial_data","has_audit_data","financial_data_age_days","financial_period_end","financial_data","company_status","company_cvr_status","company_type"],"title":"ScoreSimulationResponse","description":"Detailed v2 score simulation response for the admin scoring page."},"ScrapedContactData":{"properties":{"people":{"items":{"$ref":"#/components/schemas/ScrapedPerson"},"type":"array","title":"People","description":"Key contacts / team members"},"phone_numbers":{"items":{"type":"string"},"type":"array","title":"Phone Numbers","description":"General phone numbers (not tied to a person)"},"email_addresses":{"items":{"type":"string"},"type":"array","title":"Email Addresses","description":"General email addresses (not tied to a person)"},"social_media":{"anyOf":[{"$ref":"#/components/schemas/ScrapedSocialMedia"},{"type":"null"}],"description":"Social media profile links"},"physical_addresses":{"items":{"type":"string"},"type":"array","title":"Physical Addresses","description":"Physical addresses as found on website (free text)"}},"type":"object","title":"ScrapedContactData","description":"Structured contact data extracted from a company website."},"ScrapedContacts":{"properties":{"status":{"type":"string","title":"Status","description":"Scrape outcome","examples":["success","no_data","failed"]},"data":{"anyOf":[{"$ref":"#/components/schemas/ScrapedContactData"},{"type":"null"}],"description":"Extracted contact data (null if failed)"},"scraped_at":{"type":"string","format":"date-time","title":"Scraped At","description":"When the scrape was performed"},"expires_at":{"type":"string","format":"date-time","title":"Expires At","description":"When the cached result expires (scraped_at + 30 days)"},"source_url":{"type":"string","title":"Source Url","description":"Website URL that was crawled"},"url_source":{"type":"string","title":"Url Source","description":"How the URL was determined","default":"cvr_website","examples":["cvr_website","email_domain"]},"pages_crawled":{"type":"integer","title":"Pages Crawled","description":"Number of pages the crawler visited","default":0},"cloudflare_job_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Cloudflare Job Id","description":"Cloudflare crawl job ID for debugging"},"error_message":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Error Message","description":"Error details if status is 'failed'"}},"type":"object","required":["status","scraped_at","expires_at","source_url"],"title":"ScrapedContacts","description":"Full scrape result stored on a company document."},"ScrapedPerson":{"properties":{"name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Name","description":"Person's full name"},"title":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Title","description":"Job title / role"},"role_category":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Role Category","description":"Normalized role category classified from the title (management, sales, marketing, it, hr, finance, operations, procurement, customer_service). Null when the title has no confident mapping."},"phone":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Phone","description":"Direct phone number"},"email":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Email","description":"Email address"},"linkedin":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Linkedin","description":"LinkedIn profile URL"}},"type":"object","title":"ScrapedPerson","description":"A person extracted from a company website."},"ScrapedSocialMedia":{"properties":{"linkedin":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Linkedin","description":"LinkedIn profile/company URL"},"facebook":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Facebook","description":"Facebook page URL"},"instagram":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Instagram","description":"Instagram profile URL"},"twitter":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Twitter","description":"X/Twitter profile URL"},"youtube":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Youtube","description":"YouTube channel URL"},"other":{"items":{"type":"string"},"type":"array","title":"Other","description":"Other social media URLs"}},"type":"object","title":"ScrapedSocialMedia","description":"Social media links extracted from a company website."},"ScreenAggregateMeta":{"properties":{"groups":{"type":"integer","title":"Groups"},"truncated":{"type":"boolean","title":"Truncated","description":"True when more than 100 groups matched"}},"type":"object","required":["groups","truncated"],"title":"ScreenAggregateMeta"},"ScreenAggregateRequest":{"properties":{"filters":{"$ref":"#/components/schemas/ScreenFilters"},"group_by":{"$ref":"#/components/schemas/AggregateDimension"},"metrics":{"items":{"$ref":"#/components/schemas/FinancialMetric"},"type":"array","maxItems":3,"title":"Metrics","description":"Up to 3 key figures to sum and average per group. Companies without the figure are excluded from that figure's sum/avg (but still counted)."}},"type":"object","required":["filters","group_by"],"title":"ScreenAggregateRequest","description":"Request body for POST /v1/screen/aggregate."},"ScreenAggregateResponse":{"properties":{"data":{"items":{"$ref":"#/components/schemas/AggregateBucket"},"type":"array","title":"Data"},"meta":{"$ref":"#/components/schemas/ScreenAggregateMeta"}},"type":"object","required":["data","meta"],"title":"ScreenAggregateResponse"},"ScreenCountRequest":{"properties":{"filters":{"$ref":"#/components/schemas/ScreenFilters"},"sort":{"anyOf":[{"$ref":"#/components/schemas/ScreenSort"},{"type":"null"}],"description":"Optional: when given, the count is restricted to companies where the sort field is present — the same restriction a sorted /screen listing applies — so the count matches what a sorted listing can actually reach."}},"type":"object","required":["filters"],"title":"ScreenCountRequest","description":"Request body for POST /v1/screen/count."},"ScreenCountResponse":{"properties":{"count":{"type":"integer","title":"Count","description":"Number of companies matching the filters"}},"type":"object","required":["count"],"title":"ScreenCountResponse"},"ScreenExportRequest":{"properties":{"filters":{"$ref":"#/components/schemas/ScreenFilters"},"fields":{"$ref":"#/components/schemas/ReportFieldSelection","description":"Excel columns to include, by field category — the same catalog as the lead-list generator"},"name":{"type":"string","maxLength":200,"minLength":1,"title":"Name","description":"Report name"},"sort":{"anyOf":[{"$ref":"#/components/schemas/ScreenSort"},{"type":"null"}],"description":"Row order in the produced file. Defaults to gross profit, highest first; companies without the sort metric come last."},"locale":{"type":"string","pattern":"^(da|en)$","title":"Locale","description":"File and email language","default":"da"}},"type":"object","required":["filters","fields","name"],"title":"ScreenExportRequest","description":"Request body for POST /v1/screen/export."},"ScreenExportResponse":{"properties":{"id":{"type":"string","title":"Id","description":"Report request id"},"status":{"type":"string","title":"Status"},"matched_count":{"type":"integer","title":"Matched Count","description":"Companies included in the export"}},"type":"object","required":["id","status","matched_count"],"title":"ScreenExportResponse"},"ScreenExportStatusResponse":{"properties":{"id":{"type":"string","title":"Id","description":"Report request id"},"name":{"type":"string","title":"Name"},"status":{"type":"string","title":"Status","description":"queued | processing | completed | failed"},"requested_count":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Requested Count"},"row_count":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Row Count"},"download_url":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Download Url"},"error_message":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Error Message"},"created_at":{"type":"string","format":"date-time","title":"Created At"},"completed_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Completed At"}},"type":"object","required":["id","name","status","created_at"],"title":"ScreenExportStatusResponse","description":"One row on the screening exports page (GET /v1/screen/exports)."},"ScreenFilters":{"properties":{"industry_codes":{"items":{"type":"string"},"type":"array","maxItems":20,"title":"Industry Codes","description":"DB07 industry codes, 2-6 digits. Codes shorter than 6 digits match as prefixes: `47` matches every retail code. Matches primary or secondary industry."},"company_types":{"items":{"type":"string"},"type":"array","maxItems":20,"title":"Company Types","description":"Company type codes, e.g. A/S, ApS, ENK"},"statuses":{"items":{"type":"string"},"type":"array","maxItems":4,"title":"Statuses","description":"Company statuses to include. Defaults to active companies only. Valid values: active, dissolved, under_bankruptcy, liquidation."},"founded":{"anyOf":[{"$ref":"#/components/schemas/DateRange"},{"type":"null"}],"description":"Founding date range (inclusive)"},"municipality_codes":{"items":{"type":"string"},"type":"array","maxItems":99,"title":"Municipality Codes","description":"Municipality codes"},"postal_codes":{"items":{"type":"string"},"type":"array","maxItems":100,"title":"Postal Codes","description":"Postal codes"},"region_codes":{"items":{"type":"string"},"type":"array","maxItems":5,"title":"Region Codes","description":"Region codes (resolved to the region's municipalities)"},"geo":{"anyOf":[{"$ref":"#/components/schemas/GeoRadius"},{"type":"null"}],"description":"Circular geographic area around a coordinate"},"employees":{"anyOf":[{"$ref":"#/components/schemas/NumericRange"},{"type":"null"}],"description":"Employee count range. Uses the best known headcount (max of CVR-reported and annual-report FTE)."},"financials":{"additionalProperties":{"$ref":"#/components/schemas/NumericRange"},"propertyNames":{"$ref":"#/components/schemas/FinancialMetric"},"type":"object","title":"Financials","description":"Key figure ranges, e.g. `{\"equity_ratio\": {\"min\": 0.15}}`. Valid keys: revenue, gross_profit, operating_profit, profit_loss, equity, total_assets, equity_ratio, current_ratio, return_on_equity, profit_margin, revenue_growth, gross_profit_growth, equity_growth. Amounts in DKK; ratios and growth rates as fractions. Note that most small companies (reporting class B) do not publish revenue, only gross profit. A company only matches a metric filter if its latest annual report contains that metric."},"reporting_classes":{"items":{"type":"string"},"type":"array","maxItems":4,"title":"Reporting Classes","description":"Reporting classes (regnskabsklasse) to include: A, B, C, D"},"financial_period_end_after":{"anyOf":[{"type":"string","format":"date"},{"type":"null"}],"title":"Financial Period End After","description":"Only match companies whose latest annual report period ends on or after this date (freshness guard)"},"late_filings":{"anyOf":[{"$ref":"#/components/schemas/NumericRange"},{"type":"null"}],"description":"Number of the last 5 annual reports filed after the statutory deadline (ÅRL § 138). Only companies with computed reporting signals match."},"auditor_changes":{"anyOf":[{"$ref":"#/components/schemas/NumericRange"},{"type":"null"}],"description":"Auditor firm changes across the last 5 annual reports"},"has_overdue_filing":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Has Overdue Filing","description":"Active companies whose next expected annual report has passed its statutory deadline without being published"},"has_going_concern":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Has Going Concern","description":"The latest report carries a going concern emphasis from the auditor"},"has_qualified_opinion":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Has Qualified Opinion","description":"The latest auditor opinion is not unqualified"},"cds_score":{"anyOf":[{"$ref":"#/components/schemas/NumericRange"},{"type":"null"}],"description":"CDS (CompanyData Score) range, 0-100. Only companies with a computed score match."},"cds_ratings":{"items":{"type":"string"},"type":"array","maxItems":5,"title":"Cds Ratings","description":"CDS rating buckets to include: excellent, good, moderate, high_risk, critical"},"has_phone":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Has Phone","description":"Company has a phone number"},"has_email":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Has Email","description":"Company has an email address"},"has_website":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Has Website","description":"Company has a website"},"has_properties":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Has Properties","description":"Company owns properties"},"property_area":{"anyOf":[{"$ref":"#/components/schemas/NumericRange"},{"type":"null"}],"description":"Total building area (m²) across owned properties"},"property_zones":{"items":{"type":"string"},"type":"array","maxItems":3,"title":"Property Zones","description":"Planzone of owned properties: byzone, landzone and/or sommerhusomraade. Matches companies owning at least one property in any selected zone."},"has_flood_risk_properties":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Has Flood Risk Properties","description":"Company owns at least one property with elevated flood risk (in a cloudburst depression or flooded at a storm surge of 3 m or less, per Klimadatastyrelsen's DHM models)"},"has_poor_energy_label":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Has Poor Energy Label","description":"Company owns at least one property whose current energy label is D, E, F or G (per Energistyrelsen's EMOData register)"},"auditor_cvrs":{"items":{"type":"string"},"type":"array","maxItems":10,"title":"Auditor Cvrs","description":"Companies whose current registered auditor is one of these audit firms (CVR numbers)"},"contact_role_categories":{"items":{"type":"string"},"type":"array","maxItems":9,"title":"Contact Role Categories","description":"Companies with an enriched contact person in any of these role categories (management, sales, marketing, it, hr, finance, operations, procurement, customer_service). Sourced from the company's own website."},"has_livestock":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Has Livestock","description":"Company has at least one active livestock herd in CHR. Companies with a CHR marketing protection are excluded."},"livestock_species_codes":{"items":{"type":"integer"},"type":"array","maxItems":20,"title":"Livestock Species Codes","description":"CHR species (dyreart) codes, e.g. 12=Kvæg, 15=Svin, 13=Får. Matches companies with at least one active herd of any selected species. Implies the CHR marketing protection exclusion."},"exclude_advertising_protected":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Exclude Advertising Protected","description":"Exclude companies with CVR advertising protection (reklamebeskyttelse). Required when results are used for direct marketing."}},"type":"object","title":"ScreenFilters","description":"Screening criteria. All given filters are combined with AND.\n\nAt least one filter beyond `statuses` must be set."},"ScreenItem":{"properties":{"cvr":{"type":"string","title":"Cvr"},"name":{"type":"string","title":"Name"},"status":{"type":"string","title":"Status"},"company_type":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Company Type"},"industry":{"anyOf":[{"$ref":"#/components/schemas/ScreenItemIndustry"},{"type":"null"}]},"address":{"anyOf":[{"$ref":"#/components/schemas/ScreenItemAddress"},{"type":"null"}]},"location":{"anyOf":[{"$ref":"#/components/schemas/ScreenItemLocation"},{"type":"null"}],"description":"Geocoded coordinates of the registered address (WGS84). Absent when the address could not be geocoded or is withheld."},"founded_date":{"anyOf":[{"type":"string","format":"date"},{"type":"null"}],"title":"Founded Date","description":"Company founding date"},"employees":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Employees","description":"Best known headcount (CVR or annual report)"},"financials":{"anyOf":[{"$ref":"#/components/schemas/ScreenItemFinancials"},{"type":"null"}],"description":"Latest annual report key figures, when available"},"cds":{"anyOf":[{"$ref":"#/components/schemas/ScreenItemCDS"},{"type":"null"}],"description":"CDS score and rating, when computed"}},"type":"object","required":["cvr","name","status"],"title":"ScreenItem"},"ScreenItemAddress":{"properties":{"municipality_code":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Municipality Code"},"municipality_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Municipality Name"},"postal_code":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Postal Code"},"postal_district":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Postal District"}},"type":"object","title":"ScreenItemAddress"},"ScreenItemCDS":{"properties":{"score":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Score","description":"CDS score, 0-100"},"rating":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Rating","description":"excellent, good, moderate, high_risk or critical"}},"type":"object","title":"ScreenItemCDS"},"ScreenItemFinancials":{"properties":{"period_end":{"anyOf":[{"type":"string","format":"date"},{"type":"null"}],"title":"Period End","description":"Annual report period end"},"reporting_class":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Reporting Class","description":"Regnskabsklasse (A/B/C/D)"},"currency":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Currency","description":"Currency for amounts"},"is_consolidated":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Is Consolidated","description":"Whether the report is consolidated (koncernregnskab)"},"revenue":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Revenue"},"gross_profit":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Gross Profit"},"operating_profit":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Operating Profit"},"profit_loss":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Profit Loss"},"equity":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Equity"},"total_assets":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Total Assets"},"equity_ratio":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Equity Ratio","description":"Soliditetsgrad as a fraction"},"current_ratio":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Current Ratio"},"return_on_equity":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Return On Equity"},"profit_margin":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Profit Margin"},"revenue_growth":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Revenue Growth","description":"YoY growth as a fraction"},"gross_profit_growth":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Gross Profit Growth","description":"YoY growth as a fraction"},"equity_growth":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Equity Growth","description":"YoY growth as a fraction"}},"type":"object","title":"ScreenItemFinancials","description":"Key figures from the company's most recent annual report. Only\npublished figures are present; most reporting class B companies publish\ngross profit but not revenue."},"ScreenItemIndustry":{"properties":{"code":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Code","description":"Primary DB07 industry code"},"text":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Text","description":"Primary industry description"}},"type":"object","title":"ScreenItemIndustry"},"ScreenItemLocation":{"properties":{"lat":{"type":"number","title":"Lat","description":"Latitude (WGS84)"},"lng":{"type":"number","title":"Lng","description":"Longitude (WGS84)"}},"type":"object","required":["lat","lng"],"title":"ScreenItemLocation","description":"WGS84 coordinates of the company's registered address."},"ScreenMeta":{"properties":{"limit":{"type":"integer","title":"Limit"},"has_more":{"type":"boolean","title":"Has More","description":"Whether another page exists"},"next_cursor":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Next Cursor","description":"Cursor for the next page (absent on the last page)"},"preview":{"type":"boolean","title":"Preview","description":"True for the free preview on companydata.dk (the first rows only, no pagination). Always false for API keys.","default":false},"preview_withheld":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Preview Withheld","description":"Why a preview returned no rows: `pro_filters` (the filters use Pro-only criteria) or `daily_limit` (the day's previews are used)."}},"type":"object","required":["limit","has_more"],"title":"ScreenMeta"},"ScreenRequest":{"properties":{"filters":{"$ref":"#/components/schemas/ScreenFilters"},"sort":{"anyOf":[{"$ref":"#/components/schemas/ScreenSort"},{"type":"null"}],"description":"Result ordering. Default: stable register order."},"cursor":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Cursor","description":"Opaque pagination cursor from a previous response's meta.next_cursor. Filters and sort must be unchanged between pages."},"limit":{"type":"integer","maximum":100.0,"minimum":1.0,"title":"Limit","description":"Results per page (1-100)","default":25}},"type":"object","required":["filters"],"title":"ScreenRequest","description":"Request body for POST /v1/screen."},"ScreenResponse":{"properties":{"data":{"items":{"$ref":"#/components/schemas/ScreenItem"},"type":"array","title":"Data"},"meta":{"$ref":"#/components/schemas/ScreenMeta"}},"type":"object","required":["data","meta"],"title":"ScreenResponse"},"ScreenSort":{"properties":{"field":{"type":"string","title":"Field","description":"Sort field: any financial metric name, or employees, founded_date, period_end"},"direction":{"type":"string","title":"Direction","description":"asc or desc","default":"desc"}},"type":"object","required":["field"],"title":"ScreenSort","description":"Result ordering. Sorting on a field implicitly restricts results to\ncompanies where that field is present (e.g. sorting by revenue only\nreturns companies with a known revenue)."},"SeatUpdateRequest":{"properties":{"seats":{"type":"integer","maximum":100.0,"minimum":3.0,"title":"Seats","description":"New total seat count (3 included in flat price)"}},"type":"object","required":["seats"],"title":"SeatUpdateRequest","description":"Request to change the org's total seat count (team tier)."},"SeatUpdateResponse":{"properties":{"seats_total":{"type":"integer","title":"Seats Total"},"extra_seats":{"type":"integer","title":"Extra Seats"},"effective":{"type":"string","title":"Effective"}},"type":"object","required":["seats_total","extra_seats","effective"],"title":"SeatUpdateResponse"},"SecondaryIndustry":{"properties":{"code":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Code","description":"6-digit Danish industry code (DB07)","examples":["620100"]},"text":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Text","description":"Industry description in Danish"}},"type":"object","title":"SecondaryIndustry","description":"Secondary industry classification."},"SetCvrFilterRequest":{"properties":{"cvrs":{"items":{"type":"string"},"type":"array","title":"Cvrs","description":"Complete list of 8-digit CVR numbers to monitor. Replaces any existing filter. Maximum 50,000 entries per webhook. Duplicates are silently de-duplicated. Pass an empty list to disable the filter without deleting it.","examples":[["12345678","87654321","11223344"]]},"event_types":{"anyOf":[{"items":{"$ref":"#/components/schemas/EventType"},"type":"array"},{"type":"null"}],"title":"Event Types","description":"Event types to receive for the CVRs in this filter. Omit or set to `null` to receive all event types."}},"type":"object","required":["cvrs"],"title":"SetCvrFilterRequest","description":"Request body for `PUT /v1/webhooks/{webhook_id}/cvr-filter`."},"SetPriceOverrideRequest":{"properties":{"user_email":{"type":"string","title":"User Email"},"price_dkk":{"type":"integer","title":"Price Dkk"},"reason":{"type":"string","title":"Reason"}},"type":"object","required":["user_email","price_dkk","reason"],"title":"SetPriceOverrideRequest"},"SimilarCompaniesResponse":{"properties":{"similar_companies":{"items":{"$ref":"#/components/schemas/SimilarCompany"},"type":"array","title":"Similar Companies"},"meta":{"additionalProperties":true,"type":"object","title":"Meta","default":{}}},"type":"object","required":["similar_companies"],"title":"SimilarCompaniesResponse","description":"Response for similar companies endpoint."},"SimilarCompany":{"properties":{"cvr":{"type":"string","title":"Cvr"},"name":{"type":"string","title":"Name"},"industry":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Industry"},"industry_code":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Industry Code"},"employees":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Employees"},"municipality":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Municipality"},"municipality_code":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Municipality Code"},"distance_meters":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Distance Meters","description":"Distance from source company in meters"}},"type":"object","required":["cvr","name"],"title":"SimilarCompany","description":"A company similar to the requested one."},"SingleListResponse":{"properties":{"data":{"$ref":"#/components/schemas/CompanyListResponse"},"meta":{"additionalProperties":true,"type":"object","title":"Meta","default":{}}},"type":"object","required":["data"],"title":"SingleListResponse","description":"Response with a single list."},"SingleRecordResponse":{"properties":{"data":{"$ref":"#/components/schemas/RecordDetail"},"meta":{"additionalProperties":true,"type":"object","title":"Meta","default":{}}},"type":"object","required":["data"],"title":"SingleRecordResponse"},"SingleScrapeResponse":{"properties":{"cvr":{"type":"string","title":"Cvr"},"company_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Company Name"},"website_url":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Website Url"},"url_source":{"type":"string","title":"Url Source","default":"cvr_website"},"status":{"type":"string","title":"Status"},"data":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Data"},"scraped_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Scraped At"},"pages_crawled":{"type":"integer","title":"Pages Crawled","default":0},"from_cache":{"type":"boolean","title":"From Cache","default":false}},"type":"object","required":["cvr","status"],"title":"SingleScrapeResponse"},"SmileyEstablishment":{"properties":{"navnelbnr":{"type":"string","title":"Navnelbnr"},"pnr":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Pnr"},"name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Name"},"address":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Address"},"postal_code":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Postal Code"},"city":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"City"},"industry_text":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Industry Text"},"business_type":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Business Type"},"latest_result":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Latest Result"},"latest_date":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Latest Date"},"inspections":{"items":{"$ref":"#/components/schemas/SmileyInspection"},"type":"array","title":"Inspections"},"url":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Url"}},"type":"object","required":["navnelbnr"],"title":"SmileyEstablishment"},"SmileyInspection":{"properties":{"result":{"type":"integer","title":"Result","description":"Kontrolresultat 1-4 (1=ingen anmærkninger, 2=indskærpelse, 3=påbud/forbud, 4=bødeforelæg m.v.)"},"date":{"type":"string","format":"date-time","title":"Date"}},"type":"object","required":["result","date"],"title":"SmileyInspection"},"SocialLinks":{"properties":{"linkedin":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Linkedin"},"facebook":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Facebook"},"twitter":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Twitter"},"instagram":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Instagram"}},"type":"object","title":"SocialLinks","description":"Social media links for the profile."},"StockCandle":{"properties":{"date":{"type":"string","title":"Date","description":"Trading day (YYYY-MM-DD)"},"open":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Open"},"high":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"High"},"low":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Low"},"close":{"type":"number","title":"Close"},"volume":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Volume"}},"type":"object","required":["date","close"],"title":"StockCandle","description":"One daily OHLCV candle."},"StockListing":{"properties":{"symbol":{"type":"string","title":"Symbol","description":"Primary share class ticker","examples":["NOVO-B.CO"]},"currency":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Currency","examples":["DKK"]},"exchange":{"type":"string","title":"Exchange","description":"Exchange MIC","default":"XCSE"}},"type":"object","required":["symbol"],"title":"StockListing","description":"Stock exchange listing hint, stamped by the sync_stock_prices job.\n\nPresence tells clients that /companies/{cvr}/stock-prices has data."},"StockOverviewItem":{"properties":{"cvr":{"type":"string","title":"Cvr"},"name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Name"},"symbol":{"type":"string","title":"Symbol","examples":["NOVO-B.CO"]},"currency":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Currency"},"latest_close":{"type":"number","title":"Latest Close"},"latest_date":{"type":"string","title":"Latest Date","description":"Trading day of latest close (YYYY-MM-DD)"},"change_1d_pct":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Change 1D Pct","description":"Percent vs previous close"},"change_1y_pct":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Change 1Y Pct","description":"Percent vs ~1 year ago"}},"type":"object","required":["cvr","symbol","latest_close","latest_date"],"title":"StockOverviewItem"},"StockOverviewResponse":{"properties":{"items":{"items":{"$ref":"#/components/schemas/StockOverviewItem"},"type":"array","title":"Items"},"count":{"type":"integer","title":"Count"}},"type":"object","required":["items","count"],"title":"StockOverviewResponse"},"StockPricesResponse":{"properties":{"symbol":{"type":"string","title":"Symbol","description":"Ticker symbol","examples":["NOVO-B.CO"]},"exchange":{"type":"string","title":"Exchange","description":"Exchange MIC","examples":["XCSE"]},"currency":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Currency","examples":["DKK"]},"candles":{"items":{"$ref":"#/components/schemas/StockCandle"},"type":"array","title":"Candles"},"synced_at":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Synced At","description":"When the candles were last refreshed"},"meta":{"additionalProperties":true,"type":"object","title":"Meta","default":{}}},"type":"object","required":["symbol","exchange","candles"],"title":"StockPricesResponse","description":"Daily share price history for a listed company (primary share class)."},"StripePrice":{"properties":{"stripe_price_id":{"type":"string","title":"Stripe Price Id"},"amount_dkk":{"type":"integer","title":"Amount Dkk"}},"type":"object","required":["stripe_price_id","amount_dkk"],"title":"StripePrice","description":"A single Stripe price configuration."},"SubscriptionActionResponse":{"properties":{"message":{"type":"string","title":"Message"}},"type":"object","required":["message"],"title":"SubscriptionActionResponse"},"SubscriptionCheckoutRequest":{"properties":{"ga_client_id":{"anyOf":[{"type":"string","maxLength":64},{"type":"null"}],"title":"Ga Client Id","description":"GA4 client id from the _ga cookie (analytics attribution)"},"ga_session_id":{"anyOf":[{"type":"string","maxLength":32},{"type":"null"}],"title":"Ga Session Id","description":"GA4 session id from the _ga_<container> cookie (session attribution)"},"tier":{"type":"string","title":"Tier","description":"Subscription tier ('pro' or 'team')"},"billing_interval":{"type":"string","title":"Billing Interval","description":"'monthly' or 'yearly'","default":"yearly"},"seats":{"type":"integer","maximum":100.0,"minimum":3.0,"title":"Seats","description":"Total seats (team tier only; 3 included)","default":3},"promo_code":{"anyOf":[{"type":"string","maxLength":50},{"type":"null"}],"title":"Promo Code","description":"Promotion code to pre-apply to the checkout (e.g. from a campaign link). Unknown or inactive codes are ignored and the checkout falls back to the manual code entry field."},"success_url":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Success Url"},"cancel_url":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Cancel Url"}},"type":"object","required":["tier"],"title":"SubscriptionCheckoutRequest","description":"Request to create subscription checkout session."},"SubscriptionCheckoutResponse":{"properties":{"checkout_url":{"type":"string","title":"Checkout Url"}},"type":"object","required":["checkout_url"],"title":"SubscriptionCheckoutResponse","description":"Response with checkout URL."},"SubscriptionEvent":{"properties":{"event_id":{"type":"string","title":"Event Id"},"user_email":{"type":"string","title":"User Email"},"event_type":{"type":"string","enum":["subscription_created","subscription_upgraded","subscription_downgraded","subscription_renewed","subscription_cancelled","cancellation_feedback","subscription_reactivated","subscription_paused","subscription_resumed","subscription_expired","trial_started","trial_extended","trial_ended","subscription_granted","price_override_set","price_override_removed","promotion_applied","payment_succeeded","payment_failed","refund_issued"],"title":"Event Type"},"details":{"additionalProperties":true,"type":"object","title":"Details"},"triggered_by":{"type":"string","enum":["user","admin","system","stripe_webhook"],"title":"Triggered By"},"admin_email":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Admin Email"},"created_at":{"type":"string","format":"date-time","title":"Created At"}},"type":"object","required":["event_id","user_email","event_type","triggered_by"],"title":"SubscriptionEvent","description":"Audit log for all subscription-related events."},"SubscriptionEventsResponse":{"properties":{"events":{"items":{"$ref":"#/components/schemas/SubscriptionEvent"},"type":"array","title":"Events"},"total":{"type":"integer","title":"Total"}},"type":"object","required":["events","total"],"title":"SubscriptionEventsResponse"},"SubscriptionStateResponse":{"properties":{"cancel_at_period_end":{"type":"boolean","title":"Cancel At Period End"},"current_period_end":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Current Period End"},"status":{"type":"string","title":"Status"}},"type":"object","required":["cancel_at_period_end","status"],"title":"SubscriptionStateResponse","description":"Current cancellation state after a cancel/reactivate action."},"SubscriptionStats":{"properties":{"paying_total":{"type":"integer","title":"Paying Total"},"comped_total":{"type":"integer","title":"Comped Total"},"cancelling":{"type":"integer","title":"Cancelling"},"past_due":{"type":"integer","title":"Past Due"},"paused":{"type":"integer","title":"Paused"},"unpaid_access":{"type":"integer","title":"Unpaid Access"},"stripe_mismatch":{"type":"integer","title":"Stripe Mismatch"},"new_30d":{"type":"integer","title":"New 30D"},"churned_30d":{"type":"integer","title":"Churned 30D"},"pro":{"$ref":"#/components/schemas/SubscriptionTierBreakdown"},"team":{"$ref":"#/components/schemas/SubscriptionTierBreakdown"},"enterprise":{"$ref":"#/components/schemas/SubscriptionTierBreakdown"},"claims":{"$ref":"#/components/schemas/SubscriptionTierBreakdown"}},"type":"object","required":["paying_total","comped_total","cancelling","past_due","paused","unpaid_access","stripe_mismatch","new_30d","churned_30d","pro","team","enterprise","claims"],"title":"SubscriptionStats"},"SubscriptionTierBreakdown":{"properties":{"total":{"type":"integer","title":"Total","default":0},"monthly":{"type":"integer","title":"Monthly","default":0},"yearly":{"type":"integer","title":"Yearly","default":0},"comped":{"type":"integer","title":"Comped","default":0},"extra_seats":{"type":"integer","title":"Extra Seats","default":0}},"type":"object","title":"SubscriptionTierBreakdown","description":"Paying subscriptions on one tier (claims = claimed-profile subscriptions)."},"SyncChainStatus":{"properties":{"chain_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Chain Id"},"status":{"type":"string","title":"Status"},"current_phase":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Current Phase"},"completed_phases":{"items":{"type":"string"},"type":"array","title":"Completed Phases","default":[]},"started_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Started At"},"updated_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Updated At"},"error":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Error"},"lock":{"$ref":"#/components/schemas/SyncLockStatus"}},"type":"object","required":["status","lock"],"title":"SyncChainStatus","description":"Sync chain execution status."},"SyncLockStatus":{"properties":{"is_locked":{"type":"boolean","title":"Is Locked"},"lock_type":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Lock Type"},"job_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Job Name"},"acquired_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Acquired At"},"expires_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Expires At"},"active_jobs":{"items":{"type":"string"},"type":"array","title":"Active Jobs","default":[]}},"type":"object","required":["is_locked"],"title":"SyncLockStatus","description":"Sync lock status."},"TeamInviteRequest":{"properties":{"email":{"type":"string","format":"email","title":"Email"},"role":{"$ref":"#/components/schemas/TeamRole","default":"editor"}},"type":"object","required":["email"],"title":"TeamInviteRequest","description":"Request to invite a team member."},"TeamMember":{"properties":{"user_id":{"type":"string","title":"User Id"},"email":{"type":"string","format":"email","title":"Email"},"role":{"$ref":"#/components/schemas/TeamRole"},"added_at":{"type":"string","format":"date-time","title":"Added At"},"added_by":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Added By"}},"type":"object","required":["user_id","email","role"],"title":"TeamMember","description":"A team member who can manage the claimed profile."},"TeamRole":{"type":"string","enum":["owner","admin","editor"],"title":"TeamRole","description":"Role of a team member in managing a claimed profile."},"TeamUpdateRequest":{"properties":{"role":{"$ref":"#/components/schemas/TeamRole"}},"type":"object","required":["role"],"title":"TeamUpdateRequest","description":"Request to update a team member's role."},"TestWebhookResponse":{"properties":{"success":{"type":"boolean","title":"Success"},"message":{"type":"string","title":"Message"}},"type":"object","required":["success","message"],"title":"TestWebhookResponse","description":"Response for webhook test."},"TimelineEvent":{"properties":{"event_type":{"type":"string","title":"Event Type","description":"Event type identifier","examples":["director_joined","director_left","owner_changed","board_joined","board_left","status_changed","founded","name_changed"]},"date":{"type":"string","format":"date-time","title":"Date","description":"Date when the event occurred"},"title":{"type":"string","title":"Title","description":"Short human-readable title","examples":["Ny direktør tilføjet","Ejerandel ændret"]},"description":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Description","description":"Additional event details"},"person_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Person Name","description":"Name of person involved (if applicable)"},"company_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Company Name","description":"Name of company involved (if applicable)"},"cvr":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Cvr","description":"CVR of related company (if applicable)"},"ownership_percent":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Ownership Percent","description":"Ownership percentage for ownership events"},"role":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Role","description":"Role/function for role change events"},"old_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Old Name","description":"Previous company name (for name_changed events)"},"new_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"New Name","description":"New company name (for name_changed events)"},"is_end_event":{"type":"boolean","title":"Is End Event","description":"Whether this marks the end of something (e.g., director left)","default":false},"unit_number":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Unit Number","description":"Participant unit number for person events (links to the participant page)"},"details":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Details","description":"Extra type-specific fields (e.g. financial figures for regnskab_published, tender title/buyer/value for tender_award)"}},"type":"object","required":["event_type","date","title"],"title":"TimelineEvent","description":"A single event in the company's history."},"TokenResponse":{"properties":{"access_token":{"type":"string","title":"Access Token"},"token_type":{"type":"string","title":"Token Type","default":"bearer"}},"type":"object","required":["access_token"],"title":"TokenResponse"},"TopCompaniesIndustry":{"properties":{"code":{"type":"string","title":"Code"},"text":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Text"},"count":{"type":"integer","title":"Count"},"total_revenue":{"type":"integer","title":"Total Revenue"}},"type":"object","required":["code","text","count","total_revenue"],"title":"TopCompaniesIndustry"},"TopCompaniesMunicipality":{"properties":{"code":{"type":"string","title":"Code"},"name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Name"},"count":{"type":"integer","title":"Count"},"total_revenue":{"type":"integer","title":"Total Revenue"}},"type":"object","required":["code","name","count","total_revenue"],"title":"TopCompaniesMunicipality"},"TopCompaniesReport":{"properties":{"type":{"type":"string","title":"Type"},"period":{"type":"string","title":"Period"},"title":{"type":"string","title":"Title"},"summary":{"$ref":"#/components/schemas/TopCompaniesSummary"},"top_industries":{"items":{"$ref":"#/components/schemas/TopCompaniesIndustry"},"type":"array","title":"Top Industries"},"top_municipalities":{"items":{"$ref":"#/components/schemas/TopCompaniesMunicipality"},"type":"array","title":"Top Municipalities"},"companies":{"items":{"$ref":"#/components/schemas/TopCompanyRanked"},"type":"array","title":"Companies"},"generated_at":{"type":"string","format":"date-time","title":"Generated At"}},"type":"object","required":["type","period","title","summary","top_industries","top_municipalities","companies","generated_at"],"title":"TopCompaniesReport"},"TopCompaniesSummary":{"properties":{"total_companies":{"type":"integer","title":"Total Companies"},"total_revenue":{"type":"integer","title":"Total Revenue"},"total_employees":{"type":"integer","title":"Total Employees"},"total_assets":{"type":"integer","title":"Total Assets"},"total_profit":{"type":"integer","title":"Total Profit"},"avg_revenue":{"type":"integer","title":"Avg Revenue"},"avg_employees":{"type":"integer","title":"Avg Employees"}},"type":"object","required":["total_companies","total_revenue","total_employees","total_assets","total_profit","avg_revenue","avg_employees"],"title":"TopCompaniesSummary"},"TopCompany":{"properties":{"cvr":{"type":"string","title":"Cvr"},"name":{"type":"string","title":"Name"},"revenue":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Revenue"},"employees":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Employees"},"industry_code":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Industry Code"},"industry_text":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Industry Text"},"municipality_code":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Municipality Code"},"municipality_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Municipality Name"}},"type":"object","required":["cvr","name","revenue","employees"],"title":"TopCompany"},"TopCompanyRanked":{"properties":{"rank":{"type":"integer","title":"Rank"},"cvr":{"type":"string","title":"Cvr"},"name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Name"},"revenue":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Revenue"},"profit_loss":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Profit Loss"},"employees":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Employees"},"total_assets":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Total Assets"},"equity":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Equity"},"industry_code":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Industry Code"},"industry_text":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Industry Text"},"municipality_code":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Municipality Code"},"municipality_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Municipality Name"},"financial_year_end":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Financial Year End"}},"type":"object","required":["rank","cvr","name","revenue","profit_loss","employees","total_assets","equity","industry_code","industry_text","municipality_code","municipality_name","financial_year_end"],"title":"TopCompanyRanked"},"TopMunicipality":{"properties":{"code":{"type":"string","title":"Code"},"name":{"type":"string","title":"Name"},"count":{"type":"integer","title":"Count"}},"type":"object","required":["code","name","count"],"title":"TopMunicipality","description":"Top municipality by company count."},"TopViewedCompaniesResponse":{"properties":{"companies":{"items":{"$ref":"#/components/schemas/CompanyViewStats"},"type":"array","title":"Companies"}},"type":"object","required":["companies"],"title":"TopViewedCompaniesResponse"},"ToplistEntry":{"properties":{"rank":{"type":"integer","title":"Rank"},"cvr":{"type":"string","title":"Cvr"},"name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Name"},"founded_date":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Founded Date"},"revenue":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Revenue"},"employees":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Employees"},"company_type":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Company Type"},"industry_code":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Industry Code"},"industry_text":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Industry Text"},"municipality_code":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Municipality Code"},"municipality_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Municipality Name"},"animals":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Animals"},"herds":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Herds"},"revenue_growth":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Revenue Growth"},"size_value":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Size Value"},"size_basis":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Size Basis"}},"type":"object","required":["rank","cvr","name"],"title":"ToplistEntry"},"ToplistGroupSummary":{"properties":{"slug":{"type":"string","title":"Slug"},"name":{"type":"string","title":"Name"},"name_en":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Name En"},"name_plural":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Name Plural"},"name_plural_en":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Name Plural En"},"size_metric":{"type":"string","title":"Size Metric"},"alias_path":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Alias Path"},"metrics":{"items":{"type":"string"},"type":"array","title":"Metrics"}},"type":"object","required":["slug","name","size_metric","metrics"],"title":"ToplistGroupSummary"},"ToplistGroupsResponse":{"properties":{"data":{"items":{"$ref":"#/components/schemas/ToplistGroupSummary"},"type":"array","title":"Data"}},"type":"object","required":["data"],"title":"ToplistGroupsResponse"},"ToplistResponse":{"properties":{"metric":{"type":"string","title":"Metric"},"scope":{"$ref":"#/components/schemas/ToplistScope"},"entries":{"items":{"$ref":"#/components/schemas/ToplistEntry"},"type":"array","title":"Entries"},"count":{"type":"integer","title":"Count"},"generated_at":{"type":"string","format":"date-time","title":"Generated At"},"available_metrics":{"items":{"type":"string"},"type":"array","title":"Available Metrics","default":[]}},"type":"object","required":["metric","scope","entries","count","generated_at"],"title":"ToplistResponse"},"ToplistScope":{"properties":{"type":{"type":"string","title":"Type"},"code":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Code"},"name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Name"},"name_en":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Name En"},"name_plural":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Name Plural"},"name_plural_en":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Name Plural En"}},"type":"object","required":["type"],"title":"ToplistScope"},"ToplistScopeSummary":{"properties":{"code":{"type":"string","title":"Code"},"name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Name"},"name_en":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Name En"}},"type":"object","required":["code"],"title":"ToplistScopeSummary"},"ToplistScopesResponse":{"properties":{"data":{"items":{"$ref":"#/components/schemas/ToplistScopeSummary"},"type":"array","title":"Data"}},"type":"object","required":["data"],"title":"ToplistScopesResponse"},"Trade":{"properties":{"slug":{"type":"string","title":"Slug"},"name":{"type":"string","title":"Name"},"name_en":{"type":"string","title":"Name En"},"singular":{"type":"string","title":"Singular"},"singular_en":{"type":"string","title":"Singular En"},"codes":{"items":{"type":"string"},"type":"array","title":"Codes"},"industries":{"items":{"$ref":"#/components/schemas/TradeIndustry"},"type":"array","title":"Industries"}},"type":"object","required":["slug","name","name_en","singular","singular_en","codes","industries"],"title":"Trade","description":"A curated trade: the word people search with, mapped onto industry codes."},"TradeCompany":{"properties":{"cvr":{"type":"string","title":"Cvr"},"name":{"type":"string","title":"Name"},"street":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Street"},"postal_code":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Postal Code"},"city":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"City"},"employees":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Employees"},"revenue":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Revenue"},"founded_year":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Founded Year"},"company_type":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Company Type"}},"type":"object","required":["cvr","name"],"title":"TradeCompany"},"TradeIndustry":{"properties":{"code":{"type":"string","title":"Code"},"name":{"type":"string","title":"Name"}},"type":"object","required":["code","name"],"title":"TradeIndustry"},"TradeListResponse":{"properties":{"data":{"items":{"$ref":"#/components/schemas/Trade"},"type":"array","title":"Data"}},"type":"object","required":["data"],"title":"TradeListResponse"},"TradeMunicipalityCount":{"properties":{"code":{"type":"string","title":"Code"},"name":{"type":"string","title":"Name"},"count":{"type":"integer","title":"Count"}},"type":"object","required":["code","name","count"],"title":"TradeMunicipalityCount"},"TradeMunicipalityReport":{"properties":{"trade":{"$ref":"#/components/schemas/Trade"},"municipality_code":{"type":"string","title":"Municipality Code"},"municipality_name":{"type":"string","title":"Municipality Name"},"count":{"type":"integer","title":"Count"},"revenue_total":{"type":"integer","title":"Revenue Total"},"revenue_companies":{"type":"integer","title":"Revenue Companies"},"employees_total":{"type":"integer","title":"Employees Total"},"established_10y":{"type":"integer","title":"Established 10Y","default":0},"companies":{"items":{"$ref":"#/components/schemas/TradeCompany"},"type":"array","title":"Companies"},"company_types":{"items":{"$ref":"#/components/schemas/CompanyType"},"type":"array","title":"Company Types"},"other_municipalities":{"items":{"$ref":"#/components/schemas/TradeMunicipalityCount"},"type":"array","title":"Other Municipalities"},"generated_at":{"type":"string","format":"date-time","title":"Generated At"}},"type":"object","required":["trade","municipality_code","municipality_name","count","revenue_total","revenue_companies","employees_total","companies","company_types","other_municipalities","generated_at"],"title":"TradeMunicipalityReport","description":"Precomputed statistics for one (trade, kommune) combination."},"TradeMunicipalityReportResponse":{"properties":{"data":{"$ref":"#/components/schemas/TradeMunicipalityReport"}},"type":"object","required":["data"],"title":"TradeMunicipalityReportResponse"},"TransferOwnershipRequest":{"properties":{"new_owner_user_id":{"type":"string","title":"New Owner User Id"}},"type":"object","required":["new_owner_user_id"],"title":"TransferOwnershipRequest","description":"Request to transfer ownership."},"TranslateDescriptionRequest":{"properties":{"text":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Text"}},"type":"object","title":"TranslateDescriptionRequest","description":"Request to translate description."},"TranslateDescriptionResponse":{"properties":{"success":{"type":"boolean","title":"Success"},"translated_text":{"type":"string","title":"Translated Text"}},"type":"object","required":["success","translated_text"],"title":"TranslateDescriptionResponse","description":"Response from description translation."},"TrendingCompaniesResponse":{"properties":{"companies":{"items":{"$ref":"#/components/schemas/TrendingCompany"},"type":"array","title":"Companies"}},"type":"object","required":["companies"],"title":"TrendingCompaniesResponse","description":"Trending companies response."},"TrendingCompany":{"properties":{"cvr":{"type":"string","title":"Cvr"},"name":{"type":"string","title":"Name"},"industry":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Industry"},"municipality":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Municipality"},"views_7d":{"type":"integer","title":"Views 7D"},"trending_score":{"type":"number","title":"Trending Score"}},"type":"object","required":["cvr","name","views_7d","trending_score"],"title":"TrendingCompany","description":"A trending company."},"TriggerSyncResponse":{"properties":{"message":{"type":"string","title":"Message"},"job_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Job Id"}},"type":"object","required":["message","job_id"],"title":"TriggerSyncResponse"},"TwoFactorLoginRequest":{"properties":{"temp_token":{"type":"string","title":"Temp Token"},"code":{"type":"string","maxLength":10,"minLength":6,"title":"Code"}},"type":"object","required":["temp_token","code"],"title":"TwoFactorLoginRequest","description":"Request to complete login with 2FA."},"TwoFactorLoginResponse":{"properties":{"requires_2fa":{"type":"boolean","title":"Requires 2Fa","default":false},"temp_token":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Temp Token"},"access_token":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Access Token"},"token_type":{"type":"string","title":"Token Type","default":"bearer"}},"type":"object","title":"TwoFactorLoginResponse","description":"Response that may require 2FA."},"TwoFactorRecoveryCodesResponse":{"properties":{"recovery_codes":{"items":{"type":"string"},"type":"array","title":"Recovery Codes"}},"type":"object","required":["recovery_codes"],"title":"TwoFactorRecoveryCodesResponse","description":"Response with new recovery codes."},"TwoFactorSetupResponse":{"properties":{"secret":{"type":"string","title":"Secret"},"uri":{"type":"string","title":"Uri"},"qr_code":{"type":"string","title":"Qr Code"}},"type":"object","required":["secret","uri","qr_code"],"title":"TwoFactorSetupResponse","description":"Response with 2FA setup details."},"TwoFactorStatusResponse":{"properties":{"enabled":{"type":"boolean","title":"Enabled"},"verified_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Verified At"},"recovery_codes_remaining":{"type":"integer","title":"Recovery Codes Remaining"}},"type":"object","required":["enabled","recovery_codes_remaining"],"title":"TwoFactorStatusResponse","description":"Response with 2FA status."},"TwoFactorVerifyRequest":{"properties":{"code":{"type":"string","maxLength":8,"minLength":6,"title":"Code"}},"type":"object","required":["code"],"title":"TwoFactorVerifyRequest","description":"Request to verify 2FA setup or code."},"TwoFactorVerifySetupResponse":{"properties":{"success":{"type":"boolean","title":"Success"},"recovery_codes":{"items":{"type":"string"},"type":"array","title":"Recovery Codes"}},"type":"object","required":["success","recovery_codes"],"title":"TwoFactorVerifySetupResponse","description":"Response after successful 2FA setup verification."},"UnitInfo":{"properties":{"usage_code":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Usage Code"},"total_area":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Total Area"},"residential_area":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Residential Area"},"commercial_area":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Commercial Area"},"rooms":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Rooms"},"dwelling_type":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Dwelling Type"},"heating_installation":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Heating Installation"},"heating_source":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Heating Source"}},"type":"object","title":"UnitInfo","description":"Unit (enhed) data from BBR enrichment."},"UpdateBugsRequest":{"properties":{"bugs":{"items":{"type":"string"},"type":"array","title":"Bugs"}},"type":"object","required":["bugs"],"title":"UpdateBugsRequest"},"UpdateCompanyNotesRequest":{"properties":{"notes":{"anyOf":[{"type":"string","maxLength":500},{"type":"null"}],"title":"Notes"}},"type":"object","title":"UpdateCompanyNotesRequest","description":"Request to update notes for a company in a list."},"UpdateListRequest":{"properties":{"name":{"anyOf":[{"type":"string","maxLength":100,"minLength":1},{"type":"null"}],"title":"Name"},"description":{"anyOf":[{"type":"string","maxLength":500},{"type":"null"}],"title":"Description"},"is_public":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Is Public"}},"type":"object","title":"UpdateListRequest","description":"Request to update a list."},"UpdateRecordRequest":{"properties":{"status":{"anyOf":[{"type":"string","enum":["ny","kontaktet","dialog","vundet","tabt"]},{"type":"null"}],"title":"Status"},"owner_email":{"anyOf":[{"type":"string","maxLength":254},{"type":"null"}],"title":"Owner Email"}},"type":"object","title":"UpdateRecordRequest","description":"Patch a record's status and/or owner (owner reassignment is Team-only\nand enforced in the service against org membership)."},"UpdateSubscriptionRequest":{"properties":{"tier":{"type":"string","title":"Tier"}},"type":"object","required":["tier"],"title":"UpdateSubscriptionRequest"},"UpdateSubscriptionResponse":{"properties":{"message":{"type":"string","title":"Message"},"user_id":{"type":"string","title":"User Id"},"new_tier":{"type":"string","title":"New Tier"}},"type":"object","required":["message","user_id","new_tier"],"title":"UpdateSubscriptionResponse"},"UpdateWatcherRequest":{"properties":{"name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Name"},"cvrs":{"anyOf":[{"items":{"type":"string"},"type":"array"},{"type":"null"}],"title":"Cvrs"},"rules":{"anyOf":[{"$ref":"#/components/schemas/WatcherRules"},{"type":"null"}]},"connection_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Connection Id"},"mne_numbers":{"anyOf":[{"items":{"type":"string"},"type":"array"},{"type":"null"}],"title":"Mne Numbers"},"unit_numbers":{"anyOf":[{"items":{"type":"integer"},"type":"array"},{"type":"null"}],"title":"Unit Numbers"},"event_types":{"anyOf":[{"items":{"$ref":"#/components/schemas/EventType"},"type":"array"},{"type":"null"}],"title":"Event Types"},"delivery":{"anyOf":[{"$ref":"#/components/schemas/WatcherDelivery"},{"type":"null"}]},"active":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Active"}},"type":"object","title":"UpdateWatcherRequest","description":"Request body for `PUT /v1/watch-list/{id}`. Only provided fields are changed."},"UpdateWebhookRequest":{"properties":{"name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Name","description":"New label for the webhook."},"url":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Url","description":"New HTTPS endpoint URL."},"event_types":{"anyOf":[{"items":{"$ref":"#/components/schemas/EventType"},"type":"array"},{"type":"null"}],"title":"Event Types","description":"Replace the list of event types this webhook receives."},"headers":{"anyOf":[{"additionalProperties":{"type":"string"},"type":"object"},{"type":"null"}],"title":"Headers","description":"Replace the custom headers sent with every delivery."},"active":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Active","description":"Enable or disable delivery. Setting `true` on an auto-disabled webhook re-enables it and resets the consecutive-failure counter."}},"type":"object","title":"UpdateWebhookRequest","description":"Request to update a webhook. Only provided fields are changed."},"UploadError":{"properties":{"detail":{"type":"string","title":"Detail"}},"type":"object","required":["detail"],"title":"UploadError","description":"Response for upload errors."},"UploadResponse":{"properties":{"url":{"type":"string","title":"Url"}},"type":"object","required":["url"],"title":"UploadResponse","description":"Response for successful upload."},"Usage":{"properties":{"current_month":{"type":"integer","title":"Current Month","default":0},"last_request_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Last Request At"},"months":{"additionalProperties":{"type":"integer"},"type":"object","title":"Months","default":{}}},"type":"object","title":"Usage"},"UsageEntry":{"properties":{"date":{"type":"string","title":"Date"},"requests":{"type":"integer","title":"Requests"},"external_requests":{"type":"integer","title":"External Requests","default":0}},"type":"object","required":["date","requests"],"title":"UsageEntry"},"UsageStats":{"properties":{"requests_this_month":{"type":"integer","title":"Requests This Month","description":"Number of requests made this month with this API key"},"requests_limit":{"type":"integer","title":"Requests Limit","description":"Monthly request limit of the plan"},"credits_remaining":{"type":"integer","title":"Credits Remaining","description":"Purchased credits still unspent. Credits are pooled per organisation and are drawn on automatically once the monthly limit is reached.","default":0},"requests_remaining":{"type":"integer","title":"Requests Remaining","description":"Requests the organisation can still make this month: what is left of the plan limit plus every unspent credit.","default":0},"last_request_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Last Request At","description":"Timestamp of last request"}},"type":"object","required":["requests_this_month","requests_limit"],"title":"UsageStats"},"UserCreate":{"properties":{"email":{"type":"string","format":"email","title":"Email"},"password":{"type":"string","title":"Password"},"name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Name"},"company":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Company"},"website":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Website"},"accepted_terms":{"type":"boolean","title":"Accepted Terms","default":false},"marketing_consent":{"type":"boolean","title":"Marketing Consent","default":false},"partner_code":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Partner Code"},"post_verification_redirect":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Post Verification Redirect"},"turnstile_token":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Turnstile Token"}},"type":"object","required":["email","password"],"title":"UserCreate"},"UserDetail":{"properties":{"id":{"type":"string","title":"Id"},"email":{"type":"string","title":"Email"},"name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Name"},"company":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Company"},"is_admin":{"type":"boolean","title":"Is Admin"},"subscription":{"$ref":"#/components/schemas/app__routers__admin__models__UserSubscription"},"api_keys":{"items":{"$ref":"#/components/schemas/APIKeyInfo"},"type":"array","title":"Api Keys"},"usage":{"$ref":"#/components/schemas/AdminUserUsage"},"credit_purchases":{"items":{"$ref":"#/components/schemas/CreditPurchaseInfo"},"type":"array","title":"Credit Purchases","default":[]},"created_at":{"type":"string","format":"date-time","title":"Created At"},"updated_at":{"type":"string","format":"date-time","title":"Updated At"},"deleted_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Deleted At"},"deletion_reason":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Deletion Reason"}},"type":"object","required":["id","email","name","company","is_admin","subscription","api_keys","usage","created_at","updated_at"],"title":"UserDetail"},"UserListItem":{"properties":{"id":{"type":"string","title":"Id"},"email":{"type":"string","title":"Email"},"name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Name"},"is_admin":{"type":"boolean","title":"Is Admin"},"subscription_tier":{"type":"string","title":"Subscription Tier"},"api_keys_count":{"type":"integer","title":"Api Keys Count"},"total_api_calls":{"type":"integer","title":"Total Api Calls","default":0},"created_at":{"type":"string","format":"date-time","title":"Created At"},"deleted_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Deleted At"},"usage_status":{"type":"string","title":"Usage Status","default":"normal"},"billing_status":{"type":"string","title":"Billing Status","default":"free"},"billing_date":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Billing Date"}},"type":"object","required":["id","email","name","is_admin","subscription_tier","api_keys_count","created_at"],"title":"UserListItem"},"UserLogin":{"properties":{"email":{"type":"string","format":"email","title":"Email"},"password":{"type":"string","title":"Password"}},"type":"object","required":["email","password"],"title":"UserLogin"},"UserPriceSetCreate":{"properties":{"name":{"type":"string","title":"Name"},"prices":{"additionalProperties":{"additionalProperties":{"type":"integer"},"type":"object"},"type":"object","title":"Prices"},"activate":{"type":"boolean","title":"Activate","default":false}},"type":"object","required":["name","prices"],"title":"UserPriceSetCreate","description":"Request to create a new user price set."},"UserPriceSetResponse":{"properties":{"id":{"type":"string","title":"Id"},"name":{"type":"string","title":"Name"},"is_active":{"type":"boolean","title":"Is Active"},"created_at":{"type":"string","format":"date-time","title":"Created At"},"activated_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Activated At"},"deactivated_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Deactivated At"},"created_by":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Created By"},"prices":{"additionalProperties":{"$ref":"#/components/schemas/UserTierPrices"},"type":"object","title":"Prices"}},"type":"object","required":["id","name","is_active","created_at","prices"],"title":"UserPriceSetResponse","description":"Response with user price set data."},"UserPriceSetsListResponse":{"properties":{"price_sets":{"items":{"$ref":"#/components/schemas/UserPriceSetResponse"},"type":"array","title":"Price Sets"}},"type":"object","required":["price_sets"],"title":"UserPriceSetsListResponse","description":"Response with list of user price sets."},"UserReportItem":{"properties":{"id":{"type":"string","title":"Id"},"name":{"type":"string","title":"Name"},"status":{"type":"string","title":"Status"},"estimated_count":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Estimated Count"},"row_count":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Row Count"},"download_url":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Download Url"},"error_message":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Error Message"},"created_at":{"type":"string","format":"date-time","title":"Created At"},"completed_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Completed At"}},"type":"object","required":["id","name","status","created_at"],"title":"UserReportItem","description":"A report request belonging to a user."},"UserReportPurchaseItem":{"properties":{"id":{"type":"string","title":"Id"},"product":{"type":"string","title":"Product"},"target":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Target"},"amount_dkk_ore":{"type":"integer","title":"Amount Dkk Ore"},"source":{"type":"string","title":"Source"},"credits":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Credits"},"purchased_at":{"type":"string","format":"date-time","title":"Purchased At"},"expires_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Expires At"}},"type":"object","required":["id","product","amount_dkk_ore","source","purchased_at"],"title":"UserReportPurchaseItem","description":"A one-off report purchase (kreditrapport, baggrundstjek, branche- or\nejendomsrapport) or a prepaid rapport-pakke belonging to a user."},"UserReportPurchasesResponse":{"properties":{"purchases":{"items":{"$ref":"#/components/schemas/UserReportPurchaseItem"},"type":"array","title":"Purchases"},"credit_balance":{"type":"integer","title":"Credit Balance"}},"type":"object","required":["purchases","credit_balance"],"title":"UserReportPurchasesResponse"},"UserResponse":{"properties":{"email":{"type":"string","format":"email","title":"Email"},"name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Name"},"company":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Company"},"locale":{"type":"string","title":"Locale","default":"da"},"email_verified":{"type":"boolean","title":"Email Verified","default":false},"is_admin":{"type":"boolean","title":"Is Admin","default":false},"auth_provider":{"type":"string","title":"Auth Provider","default":"email"},"has_password":{"type":"boolean","title":"Has Password","default":true},"subscription":{"$ref":"#/components/schemas/app__models__user__UserSubscription"},"notification_preferences":{"$ref":"#/components/schemas/NotificationPreferences"},"created_at":{"type":"string","format":"date-time","title":"Created At"},"marketing_consent":{"type":"boolean","title":"Marketing Consent","default":false},"needs_marketing_consent_prompt":{"type":"boolean","title":"Needs Marketing Consent Prompt","default":false},"first_action_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"First Action At"},"last_login_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Last Login At"},"login_count":{"type":"integer","title":"Login Count","default":0}},"type":"object","required":["email","subscription","created_at"],"title":"UserResponse"},"UserTierPrices":{"properties":{"monthly":{"$ref":"#/components/schemas/StripePrice"},"yearly":{"$ref":"#/components/schemas/StripePrice"}},"type":"object","required":["monthly","yearly"],"title":"UserTierPrices","description":"Prices for a single user tier (monthly and yearly)."},"UserUsage":{"properties":{"current_month":{"type":"integer","title":"Current Month","default":0},"monthly_limit":{"type":"integer","title":"Monthly Limit","default":300000},"credit_balance":{"type":"integer","title":"Credit Balance","default":0},"usage_percentage":{"type":"integer","title":"Usage Percentage","default":0},"in_overage":{"type":"boolean","title":"In Overage","default":false},"last_request_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Last Request At"},"rate_limit_per_minute":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Rate Limit Per Minute"},"mcp_current_month":{"type":"integer","title":"Mcp Current Month","default":0},"mcp_monthly_limit":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Mcp Monthly Limit"},"mcp_unified_with_rest":{"type":"boolean","title":"Mcp Unified With Rest","default":false}},"type":"object","title":"UserUsage","description":"User-level usage statistics (shared across all API keys)."},"UsersListResponse":{"properties":{"data":{"items":{"$ref":"#/components/schemas/UserListItem"},"type":"array","title":"Data"},"total":{"type":"integer","title":"Total"},"page":{"type":"integer","title":"Page","default":1},"page_size":{"type":"integer","title":"Page Size","default":50}},"type":"object","required":["data","total"],"title":"UsersListResponse"},"UtilityPrivacyOverrideRequest":{"properties":{"target_type":{"type":"string","enum":["company","participant","property"],"title":"Target Type"},"target_id":{"type":"string","title":"Target Id","description":"CVR for companies, unit number for participants, BFE number for properties"},"active":{"type":"boolean","title":"Active","description":"True to enable the override, False to clear it"},"reason":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Reason","description":"Free-text reason (e.g. email reference) — required when activating"},"operator":{"type":"string","minLength":1,"title":"Operator","description":"Human responsible for the action — goes in the audit trail"},"hide_person":{"type":"boolean","title":"Hide Person","description":"Participants only: fully suppress the person from all public surfaces (profile 404s, removed from search and from company pages). Implies active.","default":false}},"type":"object","required":["target_type","target_id","active","operator"],"title":"UtilityPrivacyOverrideRequest"},"UtilityPrivacyOverrideStatus":{"properties":{"target_type":{"type":"string","title":"Target Type"},"target_id":{"type":"string","title":"Target Id"},"name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Name"},"current":{"anyOf":[{"$ref":"#/components/schemas/PrivacyEvent"},{"type":"null"}]},"history":{"items":{"$ref":"#/components/schemas/PrivacyEvent"},"type":"array","title":"History"}},"type":"object","required":["target_type","target_id","name","current","history"],"title":"UtilityPrivacyOverrideStatus"},"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"},"VerificationMethod":{"type":"string","enum":["email_domain","cvr_email","admin_email","manual"],"title":"VerificationMethod","description":"How the claim was verified."},"VerifyEmailRequest":{"properties":{"token":{"type":"string","title":"Token"}},"type":"object","required":["token"],"title":"VerifyEmailRequest","description":"Request to verify claim via email token."},"WatcherDelivery":{"properties":{"webhook_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Webhook Id"},"email":{"type":"boolean","title":"Email","default":false},"email_frequency":{"anyOf":[{"$ref":"#/components/schemas/NotificationFrequency"},{"type":"null"}]}},"type":"object","title":"WatcherDelivery","description":"How matching events should be delivered for this Watcher.\n\nAt least one channel must be set (webhook_id, email, or both)."},"WatcherResponse":{"properties":{"id":{"type":"string","title":"Id"},"name":{"type":"string","title":"Name"},"cvrs":{"items":{"type":"string"},"type":"array","title":"Cvrs"},"rules":{"anyOf":[{"$ref":"#/components/schemas/WatcherRules"},{"type":"null"}]},"connection_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Connection Id"},"mne_numbers":{"items":{"type":"string"},"type":"array","title":"Mne Numbers"},"unit_numbers":{"items":{"type":"integer"},"type":"array","title":"Unit Numbers"},"event_types":{"items":{"$ref":"#/components/schemas/EventType"},"type":"array","title":"Event Types"},"delivery":{"$ref":"#/components/schemas/WatcherDelivery"},"source":{"$ref":"#/components/schemas/WatcherSource"},"active":{"type":"boolean","title":"Active"},"created_at":{"type":"string","format":"date-time","title":"Created At"},"updated_at":{"type":"string","format":"date-time","title":"Updated At"},"company_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Company Name"},"person_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Person Name"},"provider_display_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Provider Display Name"},"matched_count":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Matched Count"},"list_memberships":{"items":{"additionalProperties":true,"type":"object"},"type":"array","title":"List Memberships"}},"type":"object","required":["id","name","cvrs","event_types","delivery","source","active","created_at","updated_at"],"title":"WatcherResponse","description":"Response shape for Watcher endpoints."},"WatcherRules":{"properties":{"industry_codes":{"items":{"type":"string"},"type":"array","title":"Industry Codes"},"municipality_codes":{"items":{"type":"string"},"type":"array","title":"Municipality Codes"},"postal_codes":{"items":{"type":"string"},"type":"array","title":"Postal Codes"},"company_types":{"items":{"type":"string"},"type":"array","title":"Company Types"}},"type":"object","title":"WatcherRules","description":"Rule-based discriminator: match any company whose attributes match.\n\nWithin a field, values are OR'd. Between fields, AND.\nExample: industry_codes=[\"561010\",\"561020\"] AND municipality_codes=[\"101\"]\nmatches restaurants in Copenhagen."},"WatcherSource":{"type":"string","enum":["user","api","zapier"],"title":"WatcherSource","description":"How a Watcher came into existence."},"WebhookDeliveriesResponse":{"properties":{"data":{"items":{"$ref":"#/components/schemas/WebhookDeliveryItem"},"type":"array","title":"Data"},"total":{"type":"integer","title":"Total"},"limit":{"type":"integer","title":"Limit"},"offset":{"type":"integer","title":"Offset"}},"type":"object","required":["data","total","limit","offset"],"title":"WebhookDeliveriesResponse","description":"Response for webhook deliveries."},"WebhookDeliveryItem":{"properties":{"delivery_id":{"type":"string","title":"Delivery Id","description":"Unique delivery ID (also sent in `X-Companydata-Delivery`)."},"event_id":{"type":"string","title":"Event Id","description":"The change event this delivery was for."},"event_type":{"$ref":"#/components/schemas/EventType","description":"The type of change event."},"cvr":{"type":"string","title":"Cvr","description":"The CVR number of the company that changed."},"company_name":{"type":"string","title":"Company Name","description":"Company name at the time the event was generated."},"status":{"$ref":"#/components/schemas/DeliveryStatus","description":"`pending` (queued/retrying), `sent` (delivered), `failed` (gave up after retries)."},"response_code":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Response Code","description":"HTTP status code returned by your endpoint, if a response was received."},"error_message":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Error Message","description":"Error description if delivery failed (timeout, connection error, non-2xx)."},"created_at":{"type":"string","format":"date-time","title":"Created At","description":"When this delivery was queued."},"sent_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Sent At","description":"When the final attempt was made (set on success or final failure)."}},"type":"object","required":["delivery_id","event_id","event_type","cvr","company_name","status","created_at"],"title":"WebhookDeliveryItem","description":"One delivery attempt in a webhook's history."},"WebhookResponse":{"properties":{"webhook_id":{"type":"string","title":"Webhook Id","description":"Unique identifier for this webhook."},"name":{"type":"string","title":"Name","description":"Human-readable label."},"url":{"type":"string","title":"Url","description":"HTTPS endpoint that receives deliveries."},"active":{"type":"boolean","title":"Active","description":"Whether this webhook is currently delivering events."},"event_types":{"items":{"$ref":"#/components/schemas/EventType"},"type":"array","title":"Event Types","description":"Event types this webhook receives."},"headers":{"additionalProperties":{"type":"string"},"type":"object","title":"Headers","description":"Custom headers added to every delivery."},"last_success_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Last Success At","description":"Timestamp of the most recent successful (2xx) delivery."},"last_failure_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Last Failure At","description":"Timestamp of the most recent failed delivery attempt."},"consecutive_failures":{"type":"integer","title":"Consecutive Failures","description":"Number of consecutive failed deliveries. Reset to 0 on the next 2xx response. Reaching 10 auto-disables the webhook.","default":0},"disabled_reason":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Disabled Reason","description":"Set when the webhook is auto-disabled. `null` otherwise."},"created_at":{"type":"string","format":"date-time","title":"Created At","description":"When the webhook was created."}},"type":"object","required":["webhook_id","name","url","active","event_types","headers","created_at"],"title":"WebhookResponse","description":"A webhook configuration. The secret is never returned after creation."},"WebhookWithSecret":{"properties":{"webhook_id":{"type":"string","title":"Webhook Id","description":"Unique identifier for this webhook."},"name":{"type":"string","title":"Name","description":"Human-readable label."},"url":{"type":"string","title":"Url","description":"HTTPS endpoint that receives deliveries."},"active":{"type":"boolean","title":"Active","description":"Whether this webhook is currently delivering events."},"event_types":{"items":{"$ref":"#/components/schemas/EventType"},"type":"array","title":"Event Types","description":"Event types this webhook receives."},"headers":{"additionalProperties":{"type":"string"},"type":"object","title":"Headers","description":"Custom headers added to every delivery."},"last_success_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Last Success At","description":"Timestamp of the most recent successful (2xx) delivery."},"last_failure_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Last Failure At","description":"Timestamp of the most recent failed delivery attempt."},"consecutive_failures":{"type":"integer","title":"Consecutive Failures","description":"Number of consecutive failed deliveries. Reset to 0 on the next 2xx response. Reaching 10 auto-disables the webhook.","default":0},"disabled_reason":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Disabled Reason","description":"Set when the webhook is auto-disabled. `null` otherwise."},"created_at":{"type":"string","format":"date-time","title":"Created At","description":"When the webhook was created."},"secret":{"type":"string","title":"Secret","description":"HMAC-SHA256 signing secret. Used to verify the `X-Companydata-Signature` header on every incoming delivery. **Store this immediately — it is never returned again.**"}},"type":"object","required":["webhook_id","name","url","active","event_types","headers","created_at","secret"],"title":"WebhookWithSecret","description":"A webhook configuration including the secret. Only returned on creation."},"WebhooksListResponse":{"properties":{"data":{"items":{"$ref":"#/components/schemas/WebhookResponse"},"type":"array","title":"Data"},"meta":{"additionalProperties":true,"type":"object","title":"Meta"}},"type":"object","required":["data","meta"],"title":"WebhooksListResponse","description":"Response for listing webhooks."},"WonTender":{"properties":{"source":{"type":"string","title":"Source"},"source_id":{"type":"string","title":"Source Id"},"title":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Title"},"buyer_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Buyer Name"},"url":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Url"},"notice_type":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Notice Type"},"publication_date":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Publication Date"},"contract_conclusion_date":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Contract Conclusion Date"},"award":{"anyOf":[{"$ref":"#/components/schemas/WonTenderAward"},{"type":"null"}]},"udbudsscanner_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Udbudsscanner Id"}},"type":"object","required":["source","source_id"],"title":"WonTender"},"WonTenderAward":{"properties":{"value_amount":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Value Amount"},"value_currency":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Value Currency"},"bids_count":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Bids Count"}},"type":"object","title":"WonTenderAward","description":"The award details relevant to the requested company."},"ZapierSampleEvent":{"properties":{"id":{"type":"string","title":"Id"},"event_type":{"type":"string","title":"Event Type"},"cvr":{"type":"string","title":"Cvr"},"company_name":{"type":"string","title":"Company Name"},"summary_da":{"type":"string","title":"Summary Da"},"summary_en":{"type":"string","title":"Summary En"},"detected_at":{"type":"string","format":"date-time","title":"Detected At"},"changes":{"items":{"additionalProperties":true,"type":"object"},"type":"array","title":"Changes"}},"type":"object","required":["id","event_type","cvr","company_name","summary_da","summary_en","detected_at","changes"],"title":"ZapierSampleEvent","description":"A sample change event for Zapier field mapping."},"ZapierSubscribeRequest":{"properties":{"hook_url":{"type":"string","title":"Hook Url"},"event_types":{"items":{"$ref":"#/components/schemas/EventType"},"type":"array","title":"Event Types"},"cvrs":{"items":{"type":"string"},"type":"array","title":"Cvrs"},"industry_codes":{"items":{"type":"string"},"type":"array","title":"Industry Codes"},"municipality_codes":{"items":{"type":"string"},"type":"array","title":"Municipality Codes"},"postal_codes":{"items":{"type":"string"},"type":"array","title":"Postal Codes"}},"type":"object","required":["hook_url"],"title":"ZapierSubscribeRequest","description":"Request from Zapier to subscribe a REST hook."},"ZapierSubscribeResponse":{"properties":{"id":{"type":"string","title":"Id"}},"type":"object","required":["id"],"title":"ZapierSubscribeResponse","description":"Response to a Zapier subscribe request."},"app__models__claimed_profile__ProfileUpdateRequest":{"properties":{"description":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Description"},"description_en":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Description En"},"social_links":{"anyOf":[{"$ref":"#/components/schemas/SocialLinks"},{"type":"null"}]},"contact_override":{"anyOf":[{"$ref":"#/components/schemas/ContactOverride"},{"type":"null"}]},"hide_similar_companies":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Hide Similar Companies"},"contact_form_enabled":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Contact Form Enabled"},"banner_ad":{"anyOf":[{"$ref":"#/components/schemas/BannerAd"},{"type":"null"}]}},"type":"object","title":"ProfileUpdateRequest","description":"Request to update profile content."},"app__models__company__CompanySearchResponse":{"properties":{"data":{"items":{"$ref":"#/components/schemas/app__models__company__CompanySearchResult"},"type":"array","title":"Data","description":"List of matching companies"},"participants":{"anyOf":[{"items":{"$ref":"#/components/schemas/app__models__company__ParticipantSearchResult"},"type":"array"},{"type":"null"}],"title":"Participants","description":"Matching participants (shown when few company results)"},"meta":{"additionalProperties":true,"type":"object","title":"Meta","description":"Response metadata including radius_meters for location searches"},"pagination":{"additionalProperties":true,"type":"object","title":"Pagination","description":"Pagination info: page, limit, total, pages, total_is_exact. When total_is_exact is false, total and pages are lower bounds. Filter-only browsing can return data beyond pages; name searches have a ranked window of at most 1,000 results. See the endpoint pagination documentation."}},"type":"object","required":["data"],"title":"CompanySearchResponse","description":"Response for company search endpoint."},"app__models__company__CompanySearchResult":{"properties":{"cvr":{"type":"string","title":"Cvr","description":"8-digit CVR number","examples":["12345678"]},"name":{"type":"string","title":"Name","description":"Company name"},"status":{"type":"string","title":"Status","description":"Company status","examples":["active","dissolved"]},"company_type":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Company Type","description":"Company type code","examples":["A/S","ApS"]},"address":{"anyOf":[{"$ref":"#/components/schemas/CompanyAddress"},{"type":"null"}],"description":"Company address"},"industry":{"anyOf":[{"$ref":"#/components/schemas/CompanyIndustry"},{"type":"null"}],"description":"Industry classification"},"employees":{"anyOf":[{"$ref":"#/components/schemas/CompanyEmployees"},{"type":"null"}],"description":"Employee information"},"latest_financials":{"anyOf":[{"$ref":"#/components/schemas/LatestFinancials"},{"type":"null"}],"description":"Most recent financial figures"},"location":{"anyOf":[{"$ref":"#/components/schemas/app__models__company__GeoLocation"},{"type":"null"}],"description":"Geocoded coordinates"},"founded_date":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Founded Date","description":"Date company was founded/registered"},"distance_meters":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Distance Meters","description":"Distance from search point in meters (only for location searches)"},"logo_url":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Logo Url","description":"Company logo URL if available"},"phone":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Phone","description":"Public phone number: the owner-provided number when the profile is claimed, otherwise the CVR-registered number","examples":["70277383"]},"phone_source":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Phone Source","description":"Where `phone` comes from: `company` (provided by the company through a verified claim) or `cvr` (the CVR register)","examples":["cvr"]}},"type":"object","required":["cvr","name","status"],"title":"CompanySearchResult","description":"Simplified company data for search results."},"app__models__company__GeoLocation":{"properties":{"type":{"type":"string","title":"Type","description":"GeoJSON type (always 'Point')","default":"Point"},"coordinates":{"items":{"type":"number"},"type":"array","title":"Coordinates","description":"Coordinates as [longitude, latitude]","examples":[[12.5683,55.6761]]}},"type":"object","required":["coordinates"],"title":"GeoLocation","description":"GeoJSON Point for geographic coordinates."},"app__models__company__ParticipantSearchResult":{"properties":{"unit_number":{"type":"integer","title":"Unit Number","description":"CVR unit number for participant lookups"},"name":{"type":"string","title":"Name","description":"Participant name"},"unit_type":{"type":"string","title":"Unit Type","description":"Type: PERSON or VIRKSOMHED"},"cvr":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Cvr","description":"CVR number (only for company participants)"},"company_relations":{"items":{"additionalProperties":true,"type":"object"},"type":"array","title":"Company Relations","description":"Companies this participant is associated with"}},"type":"object","required":["unit_number","name","unit_type"],"title":"ParticipantSearchResult","description":"Participant/person found in search results."},"app__models__participant__ParticipantSearchResult":{"properties":{"unit_number":{"type":"integer","title":"Unit Number","description":"CVR unit number for lookups"},"unit_type":{"type":"string","title":"Unit Type","description":"Type — always PERSON (participants are individuals)"},"name":{"type":"string","title":"Name","description":"Participant name"},"cvr":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Cvr","description":"Unused — participants are individuals (kept for response-shape stability)"},"company_relations":{"items":{"$ref":"#/components/schemas/ParticipantSearchResultRelation"},"type":"array","title":"Company Relations","description":"Active roles (max 5). A company may appear more than once if the participant holds several roles there (e.g. owner + director)."},"company_count":{"type":"integer","title":"Company Count","description":"Number of distinct companies the participant is or has been related to (matches what the portfolio expands to).","default":0},"active_company_count":{"type":"integer","title":"Active Company Count","description":"Distinct companies where the participant currently holds an active role.","default":0}},"type":"object","required":["unit_number","unit_type","name"],"title":"ParticipantSearchResult","description":"Simplified participant for search results."},"app__models__property__GeoLocation":{"properties":{"type":{"type":"string","title":"Type","default":"Point"},"coordinates":{"items":{"type":"number"},"type":"array","title":"Coordinates"}},"type":"object","required":["coordinates"],"title":"GeoLocation","description":"GeoJSON Point."},"app__models__user__UserSubscription":{"properties":{"tier":{"type":"string","title":"Tier","default":"basic"},"started_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Started At"},"expires_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Expires At"},"stripe_customer_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Stripe Customer Id"},"stripe_subscription_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Stripe Subscription Id"},"extra_seats":{"type":"integer","title":"Extra Seats","default":0},"stripe_flat_item_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Stripe Flat Item Id"},"stripe_seat_item_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Stripe Seat Item Id"},"billing_interval":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Billing Interval"},"locked_price_dkk":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Locked Price Dkk"},"locked_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Locked At"},"price_override_dkk":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Price Override Dkk"},"price_override_reason":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Price Override Reason"},"price_override_set_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Price Override Set At"},"price_override_set_by":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Price Override Set By"},"is_granted_trial":{"type":"boolean","title":"Is Granted Trial","default":false},"granted_trial_ends_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Granted Trial Ends At"},"granted_trial_reason":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Granted Trial Reason"},"granted_trial_by":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Granted Trial By"},"credit_balance":{"type":"integer","title":"Credit Balance","default":0},"cancel_at_period_end":{"type":"boolean","title":"Cancel At Period End","default":false},"cancelled_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Cancelled At"},"paused":{"type":"boolean","title":"Paused","default":false},"paused_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Paused At"},"pause_resumes_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Pause Resumes At"},"paused_tier":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Paused Tier"},"status":{"type":"string","title":"Status","default":"active"},"past_due_since":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Past Due Since"},"payment_failure_count":{"type":"integer","title":"Payment Failure Count","default":0},"last_payment_failed_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Last Payment Failed At"},"dunning_stage":{"type":"integer","title":"Dunning Stage","default":0},"last_decline_code":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Last Decline Code"}},"type":"object","title":"UserSubscription"},"app__routers__account__UsageResponse":{"properties":{"data":{"$ref":"#/components/schemas/UsageStats","description":"Usage statistics"},"meta":{"additionalProperties":true,"type":"object","title":"Meta","description":"Response metadata"}},"type":"object","required":["data"],"title":"UsageResponse"},"app__routers__admin__admin_profiles__CompanySearchResponse":{"properties":{"results":{"items":{"$ref":"#/components/schemas/app__routers__admin__admin_profiles__CompanySearchResult"},"type":"array","title":"Results"}},"type":"object","required":["results"],"title":"CompanySearchResponse","description":"Response for company search."},"app__routers__admin__admin_profiles__CompanySearchResult":{"properties":{"cvr":{"type":"string","title":"Cvr"},"name":{"type":"string","title":"Name"},"has_claim":{"type":"boolean","title":"Has Claim"},"has_admin_profile":{"type":"boolean","title":"Has Admin Profile"}},"type":"object","required":["cvr","name","has_claim","has_admin_profile"],"title":"CompanySearchResult","description":"Company search result for admin profile creation."},"app__routers__admin__models__UsageResponse":{"properties":{"data":{"items":{"$ref":"#/components/schemas/UsageEntry"},"type":"array","title":"Data"}},"type":"object","required":["data"],"title":"UsageResponse"},"app__routers__admin__models__UserSubscription":{"properties":{"tier":{"type":"string","title":"Tier"},"started_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Started At"},"expires_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Expires At"},"status":{"type":"string","title":"Status","default":"active"},"billing_interval":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Billing Interval"},"cancel_at_period_end":{"type":"boolean","title":"Cancel At Period End","default":false},"cancelled_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Cancelled At"},"past_due_since":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Past Due Since"},"payment_failure_count":{"type":"integer","title":"Payment Failure Count","default":0},"last_payment_failed_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Last Payment Failed At"},"dunning_stage":{"type":"integer","title":"Dunning Stage","default":0},"last_decline_code":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Last Decline Code"},"is_granted_trial":{"type":"boolean","title":"Is Granted Trial","default":false},"granted_trial_ends_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Granted Trial Ends At"},"granted_trial_reason":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Granted Trial Reason"},"granted_trial_by":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Granted Trial By"},"price_override_dkk":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Price Override Dkk"},"price_override_reason":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Price Override Reason"},"price_override_set_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Price Override Set At"},"price_override_set_by":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Price Override Set By"},"stripe_customer_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Stripe Customer Id"},"stripe_subscription_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Stripe Subscription Id"},"paused":{"type":"boolean","title":"Paused","default":false},"pause_resumes_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Pause Resumes At"},"paused_tier":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Paused Tier"}},"type":"object","required":["tier","started_at","expires_at"],"title":"UserSubscription"},"app__routers__auth__ProfileUpdateRequest":{"properties":{"name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Name"},"company":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Company"},"locale":{"anyOf":[{"type":"string","pattern":"^(da|en)$"},{"type":"null"}],"title":"Locale"},"notification_frequency":{"anyOf":[{"$ref":"#/components/schemas/NotificationFrequency"},{"type":"null"}]},"marketing_consent":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Marketing Consent"}},"type":"object","title":"ProfileUpdateRequest","description":"Request to update user profile."},"app__routers__auth__ResendVerificationRequest":{"properties":{"email":{"type":"string","format":"email","title":"Email"},"locale":{"type":"string","title":"Locale","default":"da"}},"type":"object","required":["email"],"title":"ResendVerificationRequest"},"app__routers__auth__VerifyEmailResponse":{"properties":{"success":{"type":"boolean","title":"Success"},"message":{"type":"string","title":"Message"},"access_token":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Access Token"}},"type":"object","required":["success","message"],"title":"VerifyEmailResponse"},"app__routers__billing__BillingPortalRequest":{"properties":{"return_url":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Return Url"}},"type":"object","title":"BillingPortalRequest","description":"Request to create billing portal session."},"app__routers__billing__BillingPortalResponse":{"properties":{"url":{"type":"string","title":"Url"}},"type":"object","required":["url"],"title":"BillingPortalResponse","description":"Response with billing portal URL."},"app__routers__claims__BillingPortalRequest":{"properties":{"return_url":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Return Url"}},"type":"object","title":"BillingPortalRequest","description":"Request to create a billing portal session."},"app__routers__claims__BillingPortalResponse":{"properties":{"portal_url":{"type":"string","title":"Portal Url"}},"type":"object","required":["portal_url"],"title":"BillingPortalResponse","description":"Response with billing portal URL."},"app__routers__claims__ResendVerificationRequest":{"properties":{"token":{"type":"string","title":"Token"}},"type":"object","required":["token"],"title":"ResendVerificationRequest","description":"Request to re-send an admin-initiated verification email.\n\nIdentified by the (possibly expired) token from the original email."},"app__routers__claims__VerifyEmailResponse":{"properties":{"success":{"type":"boolean","title":"Success"},"message":{"type":"string","title":"Message"},"claim_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Claim Id"},"cvr":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Cvr"},"company_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Company Name"}},"type":"object","required":["success","message"],"title":"VerifyEmailResponse","description":"Response from email verification."},"app__routers__public__TopIndustry":{"properties":{"code":{"type":"string","title":"Code"},"name":{"type":"string","title":"Name"},"name_en":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Name En"},"count":{"type":"integer","title":"Count"}},"type":"object","required":["code","name","count"],"title":"TopIndustry","description":"Top industry by company count."},"app__routers__reference__IndustryListResponse":{"properties":{"data":{"items":{"$ref":"#/components/schemas/Industry"},"type":"array","title":"Data","description":"List of industries"},"meta":{"additionalProperties":true,"type":"object","title":"Meta","description":"Response metadata"}},"type":"object","required":["data","meta"],"title":"IndustryListResponse","description":"Response with list of industries."},"app__routers__reference__MunicipalityListResponse":{"properties":{"data":{"items":{"$ref":"#/components/schemas/Municipality"},"type":"array","title":"Data","description":"List of municipalities"},"meta":{"additionalProperties":true,"type":"object","title":"Meta","description":"Response metadata"}},"type":"object","required":["data","meta"],"title":"MunicipalityListResponse","description":"Response with list of municipalities."},"app__routers__reference__PostalCodeListResponse":{"properties":{"data":{"items":{"$ref":"#/components/schemas/PostalCode"},"type":"array","title":"Data","description":"List of postal codes"},"meta":{"additionalProperties":true,"type":"object","title":"Meta","description":"Response metadata"}},"type":"object","required":["data","meta"],"title":"PostalCodeListResponse","description":"Response with list of postal codes."},"app__routers__reports__IndustryListResponse":{"properties":{"data":{"items":{"$ref":"#/components/schemas/IndustrySummary"},"type":"array","title":"Data"},"count":{"type":"integer","title":"Count"}},"type":"object","required":["data","count"],"title":"IndustryListResponse"},"app__routers__reports__MunicipalityListResponse":{"properties":{"data":{"items":{"$ref":"#/components/schemas/MunicipalitySummary"},"type":"array","title":"Data"},"count":{"type":"integer","title":"Count"}},"type":"object","required":["data","count"],"title":"MunicipalityListResponse"},"app__routers__reports__PostalCodeListResponse":{"properties":{"data":{"items":{"$ref":"#/components/schemas/PostalCodeSummary"},"type":"array","title":"Data"},"count":{"type":"integer","title":"Count"}},"type":"object","required":["data","count"],"title":"PostalCodeListResponse"},"app__routers__reports__TopIndustry":{"properties":{"code":{"type":"string","title":"Code"},"text":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Text"},"count":{"type":"integer","title":"Count"}},"type":"object","required":["code","text","count"],"title":"TopIndustry"}},"securitySchemes":{"HTTPBearer":{"type":"http","scheme":"bearer"}}},"tags":[{"name":"Account"},{"name":"Auditors"},{"name":"Companies"},{"name":"cvrapi.dk compatibility","description":"A drop-in replacement for the cvrapi.dk API (version 6): same parameters, same response format, same error bodies. Replace `cvrapi.dk` with `api.companydata.dk/cvrapi` in your base URL. Everyone gets 50 lookups a day (per IP without a key, per account with one); a companydata.dk API key (`token=`) adds its monthly API quota on top."},{"name":"E-invoicing","description":"EAN (GLN) numbers and Peppol endpoints of Danish companies and public institutions: who receives invoices on an EAN, and in which formats (OIOUBL, Peppol BIS Billing 3.0). Refreshed daily from the Peppol Directory."},{"name":"Legal notices","description":"Statstidende notices about companies (bankruptcy, reconstruction, forced auctions, liquidation, general meetings, capital changes, mergers) with history since March 2026, filters and a polling cursor. Pro and Team."},{"name":"Participants"},{"name":"Production Units"},{"name":"Properties"},{"name":"Reference Data"},{"name":"Screening"},{"name":"Webhooks","description":"\nWebhooks let your application receive real-time notifications when company data changes\nin the CVR registry. Useful for monitoring a portfolio of clients, prospects, suppliers,\nor any list of CVRs you care about.\n\n**Pro subscription required**, except `GET /v1/webhooks/event-types` which is open to any API key.\nPro accounts can register up to **5 webhooks**, each monitoring up to **50,000 CVRs**.\n\n## Authenticating to this API\n\nAll `/v1/webhooks/*` requests authenticate the same way as the rest of the companydata.dk API:\na Bearer token in the `Authorization` header.\n\n```\nAuthorization: Bearer sk_live_your_api_key\n```\n\n## Setup in three steps\n\n**1. Create an HTTPS endpoint** on your server that accepts `POST` with a JSON body. Return any\n`2xx` status code to acknowledge receipt. Anything outside `2xx` is treated as a failed delivery.\n\n**2. Register the webhook** with `POST /v1/webhooks`. The response includes a `secret` —\n**store it immediately**, it is only returned once and is required to verify incoming payloads.\nUntil step 3 is completed, a freshly created webhook receives **no events**.\n\n**3. Tell us which CVRs to monitor** with `PUT /v1/webhooks/{webhook_id}/cvr-filter`.\nSend the full list of 8-digit CVR numbers you care about (up to 50,000 per webhook).\nRe-send the full list any time you want to change which companies are tracked.\n\n## Payload\n\nEvery event POSTs a JSON body matching the `WebhookPayload` schema to your URL:\n\n```json\n{\n  \"event_id\": \"9c1f7e64-3b8a-4f0d-9a25-1d6c8a4e7f10\",\n  \"event_type\": \"ownership\",\n  \"cvr\": \"12345678\",\n  \"company_name\": \"Example ApS\",\n  \"changes\": [\n    {\"field\": \"ownership_percent\", \"old_value\": \"25.0\", \"new_value\": \"51.0\"}\n  ],\n  \"summary\": {\n    \"da\": \"Ejerandel ændret fra 25% til 51%\",\n    \"en\": \"Ownership percent changed from 25% to 51%\"\n  },\n  \"detected_at\": \"2026-04-28T09:14:22Z\",\n  \"timestamp\": \"2026-04-28T09:14:23Z\"\n}\n```\n\n`event_id` is a UUIDv4, globally unique, and **stable across retries** — use it as the key\nfor de-duplication. The `changes` array contains field-level diffs and may be empty for some\nevent types; values are always strings (or `null`). The human-readable `summary` is always populated.\n\nDiscover the full list of event types with `GET /v1/webhooks/event-types`.\n\n## Delivery semantics\n\n- **Latency.** Most events are delivered within a few minutes of detection. Annual report\n  (`financial`) events are batch-processed and may take **up to 24 hours** because XBRL parsing\n  is queued.\n- **At-least-once.** Network errors and retries can cause the same event to be delivered more\n  than once. De-duplicate on `event_id` (a 7-day cache window is more than sufficient).\n- **Ordering.** Events are not strictly ordered. Use `detected_at` to sequence changes for a\n  given company on your side.\n- **No replay or backfill.** Events that exhaust their retry budget are not re-attempted.\n  If your consumer is down longer than the retry window, reconcile by re-fetching the affected\n  companies from `GET /v1/companies/{cvr}` once you're back up.\n\n## Headers\n\nEvery delivery includes:\n\n| Header | Description |\n|---|---|\n| `Content-Type` | Always `application/json` |\n| `X-Companydata-Signature` | `sha256=<hex>` — HMAC-SHA256 of the raw request body using your webhook secret |\n| `X-Companydata-Event` | The event type (matches `event_type` in the body) |\n| `X-Companydata-Delivery` | Unique delivery ID — changes on each retry. Useful for support |\n\nAny custom headers you set when creating the webhook are added to every delivery.\n\n## Verifying the signature\n\nCompute HMAC-SHA256 of the raw request body using your webhook `secret` and compare it to the\nhex value after `sha256=` in `X-Companydata-Signature`. **Always use a constant-time comparison.**\n\n```python\nimport hmac, hashlib\n\ndef verify(raw_body: bytes, signature_header: str, secret: str) -> bool:\n    expected = \"sha256=\" + hmac.new(secret.encode(), raw_body, hashlib.sha256).hexdigest()\n    return hmac.compare_digest(expected, signature_header)\n```\n\n```javascript\nimport { createHmac, timingSafeEqual } from \"crypto\";\n\nfunction verify(rawBody, signatureHeader, secret) {\n  const expected = \"sha256=\" + createHmac(\"sha256\", secret).update(rawBody).digest(\"hex\");\n  return timingSafeEqual(Buffer.from(expected), Buffer.from(signatureHeader));\n}\n```\n\n## Retries and auto-disable\n\n- Each delivery is attempted **up to 3 times**. Anything outside `2xx` (including timeouts after 10s)\n  is retried automatically. Retries are spaced roughly **2 minutes apart**, so a delivery either\n  succeeds or is permanently failed within ~5 minutes of the first attempt.\n- Your endpoint should respond quickly — ideally enqueue the payload and return `200` immediately.\n- After **10 consecutive failures** across deliveries, the webhook is **auto-disabled** and `active`\n  is set to `false`. Re-enable it with `PUT /v1/webhooks/{webhook_id}` and `{\"active\": true}` once\n  the underlying issue is fixed; this also resets the failure counter.\n\n## Inspecting deliveries\n\n`GET /v1/webhooks/{webhook_id}/deliveries` lists recent delivery attempts (HTTP status,\ntruncated response body, error messages, timestamps) with `limit` and `offset` for pagination.\n\n`POST /v1/webhooks/{webhook_id}/test` sends a synthetic event to your URL — use this to verify\nyour endpoint accepts the payload and signature before going live.\n"}]}