{
  "openapi": "3.1.0",
  "info": {
    "title": "FöretagsAPI",
    "version": "1.0.0",
    "description": "Ett enkelt API för svensk företagsdata.\n\nAnvänd detta API för att söka på företagsnamn, organisationsnummer, och branschkoder (SNI).\nAll data kommer från officiella svenska register.\n",
    "contact": {
      "name": "FöretagsAPI Support",
      "url": "https://foretagsapi.se",
      "email": "support@foretagsapi.se"
    },
    "license": {
      "name": "Proprietary",
      "url": "https://foretagsapi.se/terms-of-service"
    }
  },
  "servers": [
    {
      "url": "https://data.foretagsapi.se",
      "description": "Production API"
    }
  ],
  "security": [
    {
      "bearerAuth": []
    }
  ],
  "tags": [
    {
      "name": "Search",
      "description": "Sök efter företag på namn eller organisationsnummer"
    },
    {
      "name": "Bulk",
      "description": "Slå upp flera företag samtidigt"
    },
    {
      "name": "SNI",
      "description": "Sök och slå upp SNI-koder (branschkoder)"
    },
    {
      "name": "Health",
      "description": "Kontrollera tjänstens status"
    },
    {
      "name": "AnnualReports",
      "description": "Lista och hämta digitala årsredovisningar (Källa Bolagsverket)"
    }
  ],
  "paths": {
    "/v1/search": {
      "post": {
        "tags": [
          "Search"
        ],
        "summary": "Sök företag",
        "description": "Sök efter företag på namn (fuzzy-sökning) eller exakt organisationsnummer.\n\n**Kreditförbrukning:** 1 kredit per sökning (autentiserade användare)\n\n**Gästläge:** Max 5 resultat utan API-nyckel\n",
        "operationId": "searchCompany",
        "security": [
          {
            "bearerAuth": []
          },
          {}
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "oneOf": [
                  {
                    "$ref": "#/components/schemas/SearchByNameRequest"
                  },
                  {
                    "$ref": "#/components/schemas/SearchByOrgNumberRequest"
                  }
                ]
              },
              "examples": {
                "searchByName": {
                  "summary": "Sök på företagsnamn",
                  "value": {
                    "q": "Spotify AB",
                    "limit": 10
                  }
                },
                "searchByOrgNumber": {
                  "summary": "Sök på organisationsnummer",
                  "value": {
                    "org_number": "5567037485"
                  }
                }
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Lyckad sökning",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/SearchResponse"
                },
                "example": {
                  "companies": [
                    {
                      "id": 521294,
                      "name": "Spotify AB",
                      "orgNumber": "5567037485",
                      "legalForm": "AB",
                      "postalAddress": {
                        "street": "Regeringsgatan 19",
                        "postalCode": "11153",
                        "city": "STOCKHOLM"
                      },
                      "registrationDate": "2006-05-10",
                      "deregistrationDate": null,
                      "deregistrationReason": null,
                      "businessDescription": "Bolaget har till föremål för sin verksamhet att bedriva Internetrelaterade tjänster inom digitala medier som musik, spel och TV...",
                      "ongoingRestructuring": null,
                      "ftgstat": 1,
                      "jestat": 1,
                      "jurform": 49,
                      "reklamsparr": 1,
                      "sniCodes": {
                        "sni1": "63100",
                        "sni2": null,
                        "sni3": null,
                        "sni4": null,
                        "sni5": null,
                        "sni1_name": null,
                        "sni2_name": null,
                        "sni3_name": null,
                        "sni4_name": null,
                        "sni5_name": null
                      },
                      "score": 1,
                      "hasDigitalAnnualReport": true,
                      "financials": {
                        "year": 2023,
                        "taxonomy": "k3",
                        "currency": "SEK",
                        "revenue": 14504000000,
                        "operatingResult": 1230000000,
                        "netResult": 890000000,
                        "totalAssets": 18200000000,
                        "equity": 7650000000,
                        "solidity": 0.421,
                        "employees": 9428
                      }
                    }
                  ],
                  "metadata": {
                    "searchTerm": "Spotify AB",
                    "searchType": "name",
                    "resultCount": 1,
                    "processingTimeMs": 245,
                    "timestamp": "2026-01-15T10:30:00.000Z",
                    "mode": "api"
                  }
                }
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/BadRequest"
          },
          "401": {
            "$ref": "#/components/responses/Unauthorized"
          },
          "402": {
            "$ref": "#/components/responses/PaymentRequired"
          },
          "429": {
            "$ref": "#/components/responses/TooManyRequests"
          },
          "500": {
            "$ref": "#/components/responses/InternalServerError"
          }
        }
      }
    },
    "/v1/bulk": {
      "post": {
        "tags": [
          "Bulk"
        ],
        "summary": "Bulkuppslag av företag",
        "description": "Slå upp flera företag samtidigt — antingen på namn (`names`, fuzzy-matchning) eller direkt på organisationsnummer (`org_numbers`, exakt slagning).\n\n**Gränser per förfrågan:**\n- `names` — Gäst: 10, API: 100\n- `org_numbers` — Gäst: 50, Free: 500, Starter/Pro: 5 000\n\n**Kreditförbrukning:**\n- `names`: 1 kredit per lyckad matchning\n- `org_numbers`: **10 företag = 1 kredit** (rundas uppåt). Returneras 7 företag dras 1 kredit; 23 företag = 3 krediter.\n- Gästläge förbrukar inga krediter.\n",
        "operationId": "bulkLookup",
        "security": [
          {
            "bearerAuth": []
          },
          {}
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/BulkRequest"
              },
              "example": {
                "names": [
                  "Spotify AB",
                  "Ericsson AB",
                  "Skanska AB"
                ]
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Lyckad bulkuppslag",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/BulkResponse"
                }
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/BadRequest"
          },
          "401": {
            "$ref": "#/components/responses/Unauthorized"
          },
          "402": {
            "$ref": "#/components/responses/PaymentRequired"
          },
          "429": {
            "$ref": "#/components/responses/TooManyRequests"
          },
          "500": {
            "$ref": "#/components/responses/InternalServerError"
          }
        }
      }
    },
    "/v1/sni/lookup": {
      "post": {
        "tags": [
          "SNI"
        ],
        "summary": "SNI-uppslag",
        "description": "Slå upp SNI-koder (branschkoder) på kod eller sök på beskrivning.\nAnvändbart för autocomplete i formulär.\n\n**Kreditförbrukning:** 1 kredit (autentiserade användare), gratis för gäster\n",
        "operationId": "sniLookup",
        "security": [
          {
            "bearerAuth": []
          },
          {}
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/SNILookupRequest"
              },
              "examples": {
                "searchByDescription": {
                  "summary": "Sök på beskrivning",
                  "value": {
                    "q": "frisör",
                    "limit": 10
                  }
                },
                "lookupByCode": {
                  "summary": "Slå upp exakt kod",
                  "value": {
                    "code": "96210"
                  }
                }
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Lyckad SNI-uppslag",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/SNILookupResponse"
                },
                "example": {
                  "sniCodes": [
                    {
                      "code": "96210",
                      "description": "Frisörer och barberare"
                    }
                  ],
                  "metadata": {
                    "searchTerm": "frisör",
                    "resultCount": 1,
                    "creditsCharged": 1,
                    "processingTimeMs": 45,
                    "timestamp": "2026-01-15T10:30:00.000Z",
                    "mode": "api"
                  }
                }
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/BadRequest"
          },
          "402": {
            "$ref": "#/components/responses/PaymentRequired"
          },
          "500": {
            "$ref": "#/components/responses/InternalServerError"
          }
        }
      }
    },
    "/v1/sni/search": {
      "post": {
        "tags": [
          "SNI"
        ],
        "summary": "Sök företag på SNI-kod",
        "description": "Sök efter företag som har en specifik SNI-kod (branschkod).\nStöder filtrering på stad och paginering.\n\n**OBS:** Endast 5-siffriga subklasskoder fungerar (t.ex. 62010, inte 6201).\n\n**Kreditförbrukning:** 1 kredit per returnerat företag\n\n**Gästläge:** Max 5 resultat utan API-nyckel\n",
        "operationId": "sniSearch",
        "security": [
          {
            "bearerAuth": []
          },
          {}
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/SNISearchRequest"
              },
              "example": {
                "sni_code": "70200",
                "city": "Stockholm",
                "limit": 10,
                "offset": 0,
                "active_only": true
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Lyckad SNI-sökning",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/SNISearchResponse"
                }
              }
            }
          },
          "400": {
            "description": "Felaktig förfrågan eller för många resultat",
            "content": {
              "application/json": {
                "schema": {
                  "oneOf": [
                    {
                      "$ref": "#/components/schemas/ErrorResponse"
                    },
                    {
                      "$ref": "#/components/schemas/ThresholdExceededResponse"
                    }
                  ]
                }
              }
            }
          },
          "402": {
            "$ref": "#/components/responses/PaymentRequired"
          },
          "500": {
            "$ref": "#/components/responses/InternalServerError"
          }
        }
      }
    },
    "/health": {
      "get": {
        "tags": [
          "Health"
        ],
        "summary": "Hälsokontroll",
        "description": "Kontrollera om API:et är tillgängligt. Kräver ingen autentisering.",
        "operationId": "healthCheck",
        "security": [],
        "responses": {
          "200": {
            "description": "Tjänsten är tillgänglig",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HealthResponse"
                },
                "example": {
                  "status": "ok",
                  "timestamp": "2025-01-15T10:30:00.000Z"
                }
              }
            }
          }
        }
      }
    },
    "/v1/annual-reports": {
      "get": {
        "tags": [
          "AnnualReports"
        ],
        "summary": "Lista årsredovisningar",
        "description": "Lista ett företags tillgängliga digitala årsredovisningar (en rad per räkenskapsår).\n\n**Kreditförbrukning:** Gratis (0 krediter). Ingen API-nyckel krävs.\n\nOm företaget inte har någon digital årsredovisning returneras en tom `filings`-lista (inget fel).\n\n**Källa:** Bolagsverket",
        "operationId": "listAnnualReports",
        "security": [
          {
            "bearerAuth": []
          },
          {}
        ],
        "parameters": [
          {
            "name": "org_number",
            "in": "query",
            "required": true,
            "schema": {
              "type": "string",
              "pattern": "^[0-9]{10}$"
            },
            "description": "Det 10-siffriga organisationsnumret (utan bindestreck)",
            "example": "5593386872"
          }
        ],
        "responses": {
          "200": {
            "description": "Lista över tillgängliga årsredovisningar",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/AnnualReportsResponse"
                }
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/BadRequest"
          },
          "500": {
            "$ref": "#/components/responses/InternalServerError"
          }
        }
      }
    },
    "/v1/annual-report": {
      "get": {
        "tags": [
          "AnnualReports"
        ],
        "summary": "Hämta årsredovisning",
        "description": "Hämta en digital årsredovisning som iXBRL eller PDF för ett visst räkenskapsår.\n\n**Kreditförbrukning:** 1 kredit per årsredovisning (oavsett format). Krediten dras först när det finns ett dokument att leverera.\n\n**API-nyckel krävs:** Anrop utan giltig nyckel returnerar 401.\n\nLägg till `share=1` för att i stället få en publik, signerad delningslänk (JSON) som är giltig i 24 timmar. Delning drar samma 1 kredit.\n\nEn PDF renderas vid första hämtningen för ett räkenskapsår och cachas sedan, så det första PDF-anropet kan ta några sekunder. iXBRL levereras direkt.\n\n**Källa:** Bolagsverket",
        "operationId": "getAnnualReport",
        "security": [
          {
            "bearerAuth": []
          }
        ],
        "parameters": [
          {
            "name": "org_number",
            "in": "query",
            "required": true,
            "schema": {
              "type": "string",
              "pattern": "^[0-9]{10}$"
            },
            "description": "Det 10-siffriga organisationsnumret (utan bindestreck)",
            "example": "5593386872"
          },
          {
            "name": "fiscal_end",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string",
              "format": "date"
            },
            "description": "Räkenskapsårets slutdatum (YYYY-MM-DD), från list-endpointens fiscalEnd. Utelämnas parametern hämtas den senaste tillgängliga årsredovisningen. Alternativt kan fiscal_year anges, då väljs den senaste årsredovisningen för det året.",
            "example": "2024-12-31"
          },
          {
            "name": "format",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string",
              "enum": [
                "ixbrl",
                "pdf"
              ],
              "default": "ixbrl"
            },
            "description": "Dokumentformat. Standard är ixbrl."
          },
          {
            "name": "share",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string",
              "enum": [
                "1"
              ]
            },
            "description": "Sätt share=1 för att i stället få en publik delningslänk (giltig i 24 timmar). Drar samma 1 kredit."
          }
        ],
        "responses": {
          "200": {
            "description": "Dokumentet (iXBRL eller PDF) som bytes. Om share=1 angavs returneras i stället JSON med en delningslänk.",
            "content": {
              "application/xhtml+xml": {
                "schema": {
                  "type": "string",
                  "format": "binary"
                }
              },
              "application/pdf": {
                "schema": {
                  "type": "string",
                  "format": "binary"
                }
              },
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/AnnualReportShareResponse"
                }
              }
            }
          },
          "401": {
            "$ref": "#/components/responses/Unauthorized"
          },
          "402": {
            "$ref": "#/components/responses/PaymentRequired"
          },
          "404": {
            "description": "Ingen årsredovisning hittades för angivet räkenskapsår",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                },
                "example": {
                  "error": "No annual report found for the given org_number and fiscal_end."
                }
              }
            }
          },
          "500": {
            "$ref": "#/components/responses/InternalServerError"
          }
        }
      }
    }
  },
  "components": {
    "securitySchemes": {
      "bearerAuth": {
        "type": "http",
        "scheme": "bearer",
        "description": "Använd din API-nyckel med `fapi_` prefix.\n\nExempel: `Authorization: Bearer fapi_abc123...`\n\nSkapa din API-nyckel på https://foretagsapi.se/dashboard\n"
      }
    },
    "schemas": {
      "SearchByNameRequest": {
        "type": "object",
        "required": [
          "q"
        ],
        "properties": {
          "q": {
            "type": "string",
            "description": "Företagsnamn att söka på (fuzzy-matchning)",
            "example": "Spotify AB"
          },
          "limit": {
            "type": "integer",
            "minimum": 1,
            "maximum": 10,
            "default": 10,
            "description": "Max antal resultat (gäster max 5, API max 10)"
          },
          "has_annual_report": {
            "type": "boolean",
            "description": "Filtrera namnsökning på digital årsredovisning. true = enbart företag med\ndigital årsredovisning, false = enbart utan. Utelämnas = alla företag matchas.\n"
          },
          "include": {
            "type": "array",
            "items": {
              "type": "string"
            },
            "description": "Opt-in-väljare för berikad data. Stödjer \"trademarks\" — lägger till fälten\ntrademarks och trademarkCount per företag. Okända värden ignoreras.\n",
            "example": [
              "trademarks"
            ]
          }
        }
      },
      "SearchByOrgNumberRequest": {
        "type": "object",
        "required": [
          "org_number"
        ],
        "properties": {
          "org_number": {
            "type": "string",
            "pattern": "^\\d{10}$",
            "description": "10-siffrigt organisationsnummer utan bindestreck",
            "example": "5567037485"
          },
          "include": {
            "type": "array",
            "items": {
              "type": "string"
            },
            "description": "Opt-in-väljare för berikad data. Stödjer \"trademarks\" — lägger till fälten\ntrademarks och trademarkCount per företag. Okända värden ignoreras.\n",
            "example": [
              "trademarks"
            ]
          }
        }
      },
      "BulkRequest": {
        "type": "object",
        "properties": {
          "names": {
            "type": "array",
            "items": {
              "type": "string"
            },
            "minItems": 1,
            "maxItems": 100,
            "description": "Lista med företagsnamn att slå upp (gäster max 10, API max 100)",
            "example": [
              "Spotify AB",
              "Ericsson AB"
            ]
          },
          "org_numbers": {
            "type": "array",
            "items": {
              "type": "string"
            },
            "minItems": 1,
            "maxItems": 5000,
            "description": "Lista med organisationsnummer (10 siffror, bindestreck OK) för exakt uppslag. Per-request-cap: Gäst 50, Free 500, Starter/Pro 5 000. Kreditrabatt: 10 företag = 1 kredit (rundas uppåt).",
            "example": [
              "5567037485",
              "556036-0793"
            ]
          },
          "has_annual_report": {
            "type": "boolean",
            "description": "Filtrera namnuppslag på digital årsredovisning. Gäller endast names-uppslag.\n"
          },
          "include": {
            "type": "array",
            "items": {
              "type": "string"
            },
            "description": "Opt-in-väljare för berikad data. Stödjer \"trademarks\" — lägger till fälten\ntrademarks och trademarkCount per matchat företag. Okända värden ignoreras.\n",
            "example": [
              "trademarks"
            ]
          }
        }
      },
      "SNILookupRequest": {
        "type": "object",
        "properties": {
          "q": {
            "type": "string",
            "description": "Sökterm för beskrivning eller kodprefix",
            "example": "frisör"
          },
          "code": {
            "type": "string",
            "pattern": "^\\d{5}$",
            "description": "Exakt 5-siffrig SNI-kod",
            "example": "96210"
          },
          "limit": {
            "type": "integer",
            "minimum": 1,
            "maximum": 50,
            "default": 20,
            "description": "Max antal resultat"
          }
        }
      },
      "SNISearchRequest": {
        "type": "object",
        "required": [
          "sni_code"
        ],
        "properties": {
          "sni_code": {
            "type": "string",
            "pattern": "^\\d{5}$",
            "description": "5-siffrig SNI-kod",
            "example": "70200"
          },
          "city": {
            "type": "string",
            "description": "Filtrera på stad",
            "example": "Stockholm"
          },
          "limit": {
            "type": "integer",
            "minimum": 1,
            "maximum": 100,
            "default": 100,
            "description": "Max antal resultat (gäster max 5)"
          },
          "offset": {
            "type": "integer",
            "minimum": 0,
            "default": 0,
            "description": "Offset för paginering (endast API-läge)"
          },
          "active_only": {
            "type": "boolean",
            "default": true,
            "description": "Endast aktiva företag (ej avregistrerade)"
          },
          "exact_only": {
            "type": "boolean",
            "default": false,
            "description": "Smala av till bolag med exakta nyckeltal från digital årsredovisning (~60 %). Standard false = inkludera även bolag med SCB-storleksklass-intervall (~85 % totalt). Påverkar både filter (min/max_revenue) och sortering på revenue."
          },
          "has_annual_report": {
            "type": "boolean",
            "nullable": true,
            "description": "Explicit filter på digital årsredovisning. true / false / utelämnad (= inget filter). För 'endast exakta nyckeltal' använd hellre exact_only."
          },
          "min_revenue": {
            "type": "integer",
            "nullable": true,
            "description": "Lägsta omsättning i hela SEK. Matchar exakt nettoomsättning ELLER SCB-intervall som överlappar gränsvärdet (om exact_only = false)."
          },
          "max_revenue": {
            "type": "integer",
            "nullable": true,
            "description": "Högsta omsättning i hela SEK. Matchar exakt nettoomsättning ELLER SCB-intervall som överlappar gränsvärdet (om exact_only = false)."
          },
          "sort": {
            "type": "string",
            "enum": [
              "revenue_desc",
              "revenue_asc",
              "name"
            ],
            "default": "revenue_desc",
            "description": "Sortering. revenue_desc coalescar exakt nettoomsättning med SCB-bandets representativa värde när exact_only = false."
          }
        }
      },
      "SearchResponse": {
        "type": "object",
        "properties": {
          "companies": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/Company"
            }
          },
          "metadata": {
            "$ref": "#/components/schemas/SearchMetadata"
          }
        }
      },
      "BulkResponse": {
        "type": "object",
        "properties": {
          "results": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/BulkResultItem"
            }
          },
          "metadata": {
            "$ref": "#/components/schemas/BulkMetadata"
          }
        }
      },
      "BulkResultItem": {
        "type": "object",
        "properties": {
          "searchTerm": {
            "type": "string",
            "description": "Det sökta företagsnamnet"
          },
          "company": {
            "oneOf": [
              {
                "$ref": "#/components/schemas/Company"
              },
              {
                "type": "null"
              }
            ],
            "description": "Matchande företag eller null"
          },
          "success": {
            "type": "boolean",
            "description": "Om en matchning hittades"
          },
          "error": {
            "type": "string",
            "description": "Felmeddelande om success är false"
          }
        }
      },
      "SNILookupResponse": {
        "type": "object",
        "properties": {
          "sniCodes": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/SNICode"
            }
          },
          "metadata": {
            "$ref": "#/components/schemas/SNILookupMetadata"
          }
        }
      },
      "SNISearchResponse": {
        "type": "object",
        "properties": {
          "companies": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/Company"
            }
          },
          "metadata": {
            "$ref": "#/components/schemas/SNISearchMetadata"
          }
        }
      },
      "Company": {
        "type": "object",
        "description": "Företagsobjekt med all tillgänglig information",
        "properties": {
          "id": {
            "type": "integer",
            "description": "Internt databas-ID"
          },
          "name": {
            "type": "string",
            "description": "Officiellt registrerat företagsnamn"
          },
          "orgNumber": {
            "type": "string",
            "description": "10-siffrigt organisationsnummer utan bindestreck"
          },
          "legalForm": {
            "type": "string",
            "description": "Juridisk form som textkod (kortform). Vanliga värden: AB (Aktiebolag), EF (Enskild firma), HB (Handelsbolag), KB (Kommanditbolag), BRF (Bostadsrättsförening), EK (Ekonomisk förening). Formatet är kortform; rådata på Bolagsverket använder \"-ORGFO\"-suffix som vi tar bort innan svar."
          },
          "postalAddress": {
            "$ref": "#/components/schemas/PostalAddress"
          },
          "registrationDate": {
            "type": "string",
            "format": "date",
            "description": "Registreringsdatum (ISO-format)"
          },
          "deregistrationDate": {
            "type": [
              "string",
              "null"
            ],
            "format": "date",
            "description": "Avregistreringsdatum om avregistrerat"
          },
          "deregistrationReason": {
            "type": [
              "string",
              "null"
            ],
            "description": "Orsakskod vid avregistrering. Vanliga: KKAV-AVORG (konkursavslut), FUAV-AVORG (fusion), LIAV-AVORG (likvidation), AKEJH-AVORG (avförd ej registreringspliktig)"
          },
          "businessDescription": {
            "type": "string",
            "description": "Registrerad verksamhetsbeskrivning"
          },
          "ongoingRestructuring": {
            "type": [
              "string",
              "null"
            ],
            "description": "Kod för pågående avvecklings- eller rekonstruktionsförfarande. Vanliga prefix: LI=likvidation, KK=konkurs, FR=företagsrekonstruktion, FUOL/FUOT=fusion. Format: |KOD-AVOMFO$datum. Null om inget pågår."
          },
          "ftgstat": {
            "type": [
              "integer",
              "null"
            ],
            "description": "F-skattestatus. 0=aldrig registrerad, 1=aktiv, 9=inaktiv"
          },
          "jestat": {
            "type": [
              "integer",
              "null"
            ],
            "description": "Status för juridisk enhet (1=aktiv, null=ej tillgänglig)"
          },
          "jurform": {
            "type": [
              "integer",
              "null"
            ],
            "description": "Juridisk formkod (numerisk). Vanliga värden: 10=Enskild firma, 31=Handelsbolag, 49=Aktiebolag, 51=Ekonomisk förening. Se även legalForm för textkod."
          },
          "reklamsparr": {
            "type": [
              "integer",
              "null"
            ],
            "description": "Reklamspärr (0=okänd, 1=ingen spärr, 2=spärrad). Värdet 2 betyder att mottagaren har avsagt sig direktreklam via post, telefon eller en kombination. Gäller ej e-post. Boolean härleds från Bolagsverkets reklamspärr-flagga och SCB:s reklamsparr-kod (12/13/21/22/23 → spärrad)."
          },
          "sniCodes": {
            "$ref": "#/components/schemas/SniCodes"
          },
          "score": {
            "type": "number",
            "format": "float",
            "minimum": 0,
            "maximum": 1,
            "description": "Matchningspoäng (endast vid sökning)"
          },
          "hasDigitalAnnualReport": {
            "type": "boolean",
            "description": "Sant när företaget lämnat in en digital årsredovisning och finansiell data\nfinns i systemet. Alltid med i svaret — aldrig utelämnat.\n"
          },
          "financials": {
            "$ref": "#/components/schemas/FinancialMetrics"
          },
          "revenue_estimate": {
            "$ref": "#/components/schemas/SizeEnvelope",
            "description": "Källmedveten omsättnings-envelope. `type: \"exact\"` med `value` i SEK när vi har\ndigital årsredovisning. `type: \"interval\"` med `interval_low`/`interval_high`\n(och en representativ `value`) när vi bara har en SCB-baserad omsättningsklass.\n`type: \"none\"` när inget av detta finns. För bolag med exakt årsredovisning är\n`value` samma som `financials.revenue`.\n"
          },
          "employees_estimate": {
            "$ref": "#/components/schemas/SizeEnvelope",
            "description": "Källmedveten anställda-envelope. Samma struktur som `revenue_estimate`. För bolag\nmed exakt årsredovisning är `value` samma som `financials.employees`. Bostadsrätts-\nföreningar, handels- och kommanditbolag samt ekonomiska föreningar får ofta ett\nSCB-intervall även när `financials` är null.\n"
          },
          "trademarks": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/Trademark"
            },
            "description": "Registrerade varumärken (PRV) som företaget äger. Opt-in: med endast när\ninclude innehåller \"trademarks\" — annars utelämnat (inte null). Tom array\nbetyder att företaget saknar registrerade varumärken. Sorteras med senaste\nregistreringsdatum först.\n"
          },
          "trademarkCount": {
            "type": "integer",
            "description": "Antal poster i trademarks. Opt-in: med endast när include innehåller\n\"trademarks\". 0 om företaget saknar registrerade varumärken.\n",
            "example": 2
          }
        }
      },
      "FinancialMetrics": {
        "type": "object",
        "nullable": true,
        "description": "Finansiell data från företagets senaste årsredovisning (årsredovisning).\nNull när ingen digital årsredovisning finns. Detaljerad finansiell data finns för\ncirka 60 % av aktiva aktiebolag som lämnat in digital årsredovisning. SCB-intervall\nför omsättning och anställda täcker ytterligare bolag, totalt cirka 85 %.\nAlla belopp i hela SEK. Negativa värden är legitima.\n",
        "properties": {
          "year": {
            "type": [
              "integer",
              "null"
            ],
            "description": "Räkenskapsår",
            "example": 2023
          },
          "taxonomy": {
            "type": "string",
            "description": "Redovisningstaxonomi. Ett av 'k2', 'k3' eller 'ifrs'.",
            "example": "k3"
          },
          "currency": {
            "type": "string",
            "description": "Valuta. Alltid 'SEK'.",
            "example": "SEK"
          },
          "fiscalYearStart": {
            "type": [
              "string",
              "null"
            ],
            "format": "date",
            "description": "Räkenskapsårets början"
          },
          "fiscalYearEnd": {
            "type": [
              "string",
              "null"
            ],
            "format": "date",
            "description": "Räkenskapsårets slut"
          },
          "revenue": {
            "type": [
              "integer",
              "null"
            ],
            "description": "Nettoomsättning i SEK. Null för IFRS-bolag i finanssektorn.",
            "example": 14504000000
          },
          "operatingResult": {
            "type": [
              "integer",
              "null"
            ],
            "description": "Rörelseresultat i SEK"
          },
          "netResult": {
            "type": [
              "integer",
              "null"
            ],
            "description": "Årets resultat i SEK"
          },
          "totalAssets": {
            "type": [
              "integer",
              "null"
            ],
            "description": "Balansomslutning i SEK"
          },
          "equity": {
            "type": [
              "integer",
              "null"
            ],
            "description": "Eget kapital i SEK. Kan vara negativt."
          },
          "currentAssets": {
            "type": [
              "integer",
              "null"
            ],
            "description": "Omsättningstillgångar i SEK"
          },
          "currentLiabilities": {
            "type": [
              "integer",
              "null"
            ],
            "description": "Kortfristiga skulder i SEK"
          },
          "cashAndBank": {
            "type": [
              "integer",
              "null"
            ],
            "description": "Likvida medel i SEK"
          },
          "longTermLiabilities": {
            "type": [
              "integer",
              "null"
            ],
            "description": "Långfristiga skulder i SEK"
          },
          "fixedAssets": {
            "type": [
              "integer",
              "null"
            ],
            "description": "Anläggningstillgångar i SEK"
          },
          "restrictedEquity": {
            "type": [
              "integer",
              "null"
            ],
            "description": "Bundet eget kapital i SEK"
          },
          "unrestrictedEquity": {
            "type": [
              "integer",
              "null"
            ],
            "description": "Fritt eget kapital i SEK"
          },
          "untaxedReserves": {
            "type": [
              "integer",
              "null"
            ],
            "description": "Obeskattade reserver i SEK"
          },
          "resultAfterFinancialItems": {
            "type": [
              "integer",
              "null"
            ],
            "description": "Resultat efter finansiella poster i SEK"
          },
          "profitBeforeTax": {
            "type": [
              "integer",
              "null"
            ],
            "description": "Resultat före skatt — approximativt värde, inte exakt granskad rad."
          },
          "proposedDividend": {
            "type": [
              "integer",
              "null"
            ],
            "description": "Föreslagen utdelning i SEK (null om ingen utdelning föreslagits)"
          },
          "employees": {
            "type": [
              "number",
              "null"
            ],
            "description": "Antal anställda",
            "example": 9428
          },
          "solidity": {
            "type": [
              "number",
              "null"
            ],
            "description": "Soliditet enligt svensk formel. En kvot, t.ex. 0.421 = 42,1 %.",
            "example": 0.421
          },
          "operatingMargin": {
            "type": [
              "number",
              "null"
            ],
            "description": "Rörelsemarginal: operatingResult / revenue. Beräknas endast när revenue ≥ 1 000 000.\n"
          }
        }
      },
      "Trademark": {
        "type": "object",
        "description": "Ett enskilt registrerat varumärke från PRV (Patent- och registreringsverket).\n",
        "properties": {
          "prvId": {
            "type": "string",
            "description": "PRV:s interna identifierare för varumärket",
            "example": "2015-01234"
          },
          "registrationNumber": {
            "type": [
              "string",
              "null"
            ],
            "description": "Officiellt registreringsnummer hos PRV",
            "example": "543210"
          },
          "markText": {
            "type": [
              "string",
              "null"
            ],
            "description": "Varumärkets ordtext. Null för rent figurativa varumärken.",
            "example": "SPOTIFY"
          },
          "markFeature": {
            "type": [
              "string",
              "null"
            ],
            "description": "Varumärkestyp. Vanliga värden Word, Figurative, Combined.",
            "example": "Word"
          },
          "markStatus": {
            "type": [
              "string",
              "null"
            ],
            "description": "Varumärkets status, t.ex. Registered.",
            "example": "Registered"
          },
          "applicationDate": {
            "type": [
              "string",
              "null"
            ],
            "format": "date",
            "description": "ISO-datum för ansökan"
          },
          "registrationDate": {
            "type": [
              "string",
              "null"
            ],
            "format": "date",
            "description": "ISO-datum för registrering"
          },
          "expiryDate": {
            "type": [
              "string",
              "null"
            ],
            "format": "date",
            "description": "ISO-datum då registreringen löper ut"
          },
          "niceClasses": {
            "type": "array",
            "items": {
              "type": "integer"
            },
            "description": "Nice-klassificering — varu- och tjänsteklasser (1–45). Tom array om okänt.",
            "example": [
              9,
              38,
              41
            ]
          }
        }
      },
      "PostalAddress": {
        "type": "object",
        "properties": {
          "street": {
            "type": "string",
            "description": "Gatuadress"
          },
          "postalCode": {
            "type": "string",
            "description": "Postnummer"
          },
          "city": {
            "type": "string",
            "description": "Ort"
          }
        }
      },
      "SniCodes": {
        "type": "object",
        "description": "SNI-koder (branschkoder) med beskrivningar",
        "properties": {
          "sni1": {
            "type": [
              "string",
              "null"
            ],
            "description": "Primär SNI-kod"
          },
          "sni2": {
            "type": [
              "string",
              "null"
            ],
            "description": "Sekundär SNI-kod"
          },
          "sni3": {
            "type": [
              "string",
              "null"
            ]
          },
          "sni4": {
            "type": [
              "string",
              "null"
            ]
          },
          "sni5": {
            "type": [
              "string",
              "null"
            ]
          },
          "sni1_name": {
            "type": [
              "string",
              "null"
            ],
            "description": "Beskrivning av primär SNI-kod"
          },
          "sni2_name": {
            "type": [
              "string",
              "null"
            ]
          },
          "sni3_name": {
            "type": [
              "string",
              "null"
            ]
          },
          "sni4_name": {
            "type": [
              "string",
              "null"
            ]
          },
          "sni5_name": {
            "type": [
              "string",
              "null"
            ]
          }
        }
      },
      "SNICode": {
        "type": "object",
        "properties": {
          "code": {
            "type": "string",
            "description": "5-siffrig SNI-kod"
          },
          "description": {
            "type": "string",
            "description": "Beskrivning av branschkoden"
          }
        }
      },
      "SearchMetadata": {
        "type": "object",
        "properties": {
          "searchTerm": {
            "type": "string"
          },
          "searchType": {
            "type": "string",
            "enum": [
              "name",
              "org_number"
            ]
          },
          "resultCount": {
            "type": "integer"
          },
          "processingTimeMs": {
            "type": "integer"
          },
          "timestamp": {
            "type": "string",
            "format": "date-time"
          },
          "mode": {
            "type": "string",
            "enum": [
              "guest",
              "api"
            ]
          }
        }
      },
      "BulkMetadata": {
        "type": "object",
        "properties": {
          "processingTimeMs": {
            "type": "integer"
          },
          "totalSearches": {
            "type": "integer"
          },
          "successfulSearches": {
            "type": "integer"
          },
          "timestamp": {
            "type": "string",
            "format": "date-time"
          },
          "mode": {
            "type": "string",
            "enum": [
              "guest",
              "api"
            ]
          },
          "companiesReturned": {
            "type": "integer",
            "description": "Antal företag som faktiskt returnerades i `results[]`. Lika med `successfulSearches` på names-pathen."
          },
          "creditsCharged": {
            "type": "integer",
            "description": "Antal krediter som debiterades. Names-path: `successfulSearches`. Org_numbers-path: `Math.ceil(companiesReturned / 10)` (10-for-1 discount)."
          },
          "creditDiscount": {
            "type": [
              "string",
              "null"
            ],
            "description": "Förklarande text om credit-rabatten när org_numbers-pathen användes (t.ex. '10 företag = 1 credit'). Null på names-pathen."
          }
        }
      },
      "SNILookupMetadata": {
        "type": "object",
        "properties": {
          "searchTerm": {
            "type": "string"
          },
          "resultCount": {
            "type": "integer"
          },
          "creditsCharged": {
            "type": "integer"
          },
          "processingTimeMs": {
            "type": "integer"
          },
          "timestamp": {
            "type": "string",
            "format": "date-time"
          },
          "mode": {
            "type": "string",
            "enum": [
              "guest",
              "api"
            ]
          }
        }
      },
      "SNISearchMetadata": {
        "type": "object",
        "properties": {
          "sniCode": {
            "type": "string"
          },
          "sniDescription": {
            "type": [
              "string",
              "null"
            ]
          },
          "city": {
            "type": [
              "string",
              "null"
            ]
          },
          "resultCount": {
            "type": "integer"
          },
          "totalCount": {
            "type": "integer"
          },
          "offset": {
            "type": "integer"
          },
          "limit": {
            "type": "integer"
          },
          "hasMore": {
            "type": "boolean"
          },
          "creditsCharged": {
            "type": "integer"
          },
          "processingTimeMs": {
            "type": "integer"
          },
          "timestamp": {
            "type": "string",
            "format": "date-time"
          },
          "mode": {
            "type": "string",
            "enum": [
              "guest",
              "api"
            ]
          },
          "filters": {
            "type": "object",
            "description": "Eko av de filter som faktiskt applicerades. Hjälper integratörer verifiera att deras request tolkades som förväntat.",
            "properties": {
              "hasAnnualReport": {
                "type": [
                  "boolean",
                  "null"
                ]
              },
              "exactOnly": {
                "type": "boolean"
              },
              "minRevenue": {
                "type": [
                  "integer",
                  "null"
                ]
              },
              "maxRevenue": {
                "type": [
                  "integer",
                  "null"
                ]
              },
              "sort": {
                "type": "string",
                "enum": [
                  "revenue_desc",
                  "revenue_asc",
                  "name"
                ]
              }
            }
          }
        }
      },
      "ErrorResponse": {
        "type": "object",
        "properties": {
          "error": {
            "type": "string",
            "description": "Felmeddelande"
          },
          "message": {
            "type": [
              "string",
              "null"
            ],
            "description": "Längre svensk förklaring som kan visas i UI. Närvarande på 401, 429, 402 och vissa 400-fall."
          },
          "retryAfter": {
            "type": [
              "integer",
              "null"
            ],
            "description": "Antal sekunder att vänta innan nästa försök. Endast närvarande på 429 (rate-limit)."
          }
        }
      },
      "ThresholdExceededResponse": {
        "type": "object",
        "description": "Returneras när SNI-sökning ger för många resultat",
        "properties": {
          "error": {
            "type": "string",
            "example": "Threshold exceeded"
          },
          "message": {
            "type": "string",
            "example": "SNI-koden 70200 har 85 393 företag. Lägg till ett stadsfilter för att begränsa resultaten."
          },
          "requiresCity": {
            "type": "boolean",
            "example": true
          },
          "totalCount": {
            "type": "integer"
          },
          "sniCode": {
            "type": "string"
          }
        }
      },
      "HealthResponse": {
        "type": "object",
        "properties": {
          "status": {
            "type": "string",
            "enum": [
              "ok"
            ]
          },
          "timestamp": {
            "type": "string",
            "format": "date-time"
          }
        }
      },
      "AnnualReportFiling": {
        "type": "object",
        "properties": {
          "fiscalYear": {
            "type": "integer",
            "description": "Räkenskapsårets år",
            "example": 2024
          },
          "fiscalEnd": {
            "type": "string",
            "format": "date",
            "description": "Räkenskapsårets slutdatum (kanonisk identifierare för hämtning)",
            "example": "2024-12-31"
          },
          "documents": {
            "type": "integer",
            "description": "Antal dokument för räkenskapsåret",
            "example": 1
          },
          "sizeKb": {
            "type": "integer",
            "description": "Ungefärlig filstorlek i kilobyte",
            "example": 412
          },
          "formats": {
            "type": "array",
            "description": "Tillgängliga format. Innehåller alltid \"ixbrl\"; \"pdf\" visas när PDF:en redan renderats.",
            "items": {
              "type": "string",
              "enum": [
                "ixbrl",
                "pdf"
              ]
            },
            "example": [
              "ixbrl",
              "pdf"
            ]
          },
          "ixbrlUrl": {
            "type": "string",
            "format": "uri",
            "description": "Färdig länk till hämtnings-endpointen (iXBRL). Kräver API-nyckel och drar 1 kredit."
          },
          "pdfUrl": {
            "type": "string",
            "format": "uri",
            "description": "Färdig länk till hämtnings-endpointen (PDF). Kräver API-nyckel och drar 1 kredit."
          }
        }
      },
      "AnnualReportsResponse": {
        "type": "object",
        "properties": {
          "orgNumber": {
            "type": "string",
            "example": "5567037485"
          },
          "filingCount": {
            "type": "integer",
            "example": 2
          },
          "filings": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/AnnualReportFiling"
            }
          },
          "metadata": {
            "type": "object",
            "properties": {
              "source": {
                "type": "string",
                "example": "Bolagsverket"
              },
              "timestamp": {
                "type": "string",
                "format": "date-time"
              }
            }
          }
        }
      },
      "AnnualReportShareResponse": {
        "type": "object",
        "description": "Returneras när share=1 anges. En publik signerad delningslänk giltig i 24 timmar.",
        "properties": {
          "shareUrl": {
            "type": "string",
            "format": "uri",
            "description": "Publik, signerad länk som öppnas utan API-nyckel",
            "example": "https://data.foretagsapi.se/v1/shared/9f3c2a1b8d7e6f5a4c3b2a1908d7e6f5"
          },
          "expiresAt": {
            "type": "string",
            "format": "date-time",
            "description": "Tidpunkt då länken upphör att gälla (24 timmar efter mint)"
          },
          "format": {
            "type": "string",
            "enum": [
              "ixbrl",
              "pdf"
            ]
          }
        }
      },
      "SizeEnvelope": {
        "type": "object",
        "description": "Källmedveten storleks-envelope för omsättning och anställda. När type är\n\"exact\" kommer värdet från en digital årsredovisning. När type är\n\"interval\" är värdet en SCB-baserad intervallklass; intervallets gränser\nfinns i interval_low/interval_high. När type är \"none\" finns ingen\nstorleksinformation alls.\n",
        "properties": {
          "value": {
            "type": [
              "number",
              "null"
            ],
            "description": "Exakt värde när type=\"exact\"; representativ punkt (oftast bandets\nmittpunkt) när type=\"interval\"; null när type=\"none\".\n"
          },
          "type": {
            "type": "string",
            "enum": [
              "exact",
              "interval",
              "none"
            ],
            "description": "Typ av storleksuppgift."
          },
          "interval_low": {
            "type": [
              "number",
              "null"
            ],
            "description": "Intervallets nedre gräns (endast när type=\"interval\")."
          },
          "interval_high": {
            "type": [
              "number",
              "null"
            ],
            "description": "Intervallets övre gräns (endast när type=\"interval\"). Det översta SCB-bandet är öppet uppåt, så interval_high kan vara null även när type=\"interval\" (tolka det som \"ingen övre gräns\")."
          },
          "reference_year": {
            "type": [
              "integer",
              "null"
            ],
            "description": "Referensår för uppgiften."
          },
          "source": {
            "type": [
              "string",
              "null"
            ],
            "enum": [
              "annual_report",
              "scb",
              null
            ],
            "description": "annual_report = digital årsredovisning (exakt), scb = SCB:s\nFöretagsregister (intervall), null = ingen uppgift.\n"
          },
          "scb_class": {
            "type": [
              "string",
              "null"
            ],
            "description": "SCB-klasskod (omsättning eller anställda) när type=\"interval\"."
          },
          "label_sv": {
            "type": [
              "string",
              "null"
            ],
            "description": "Färdigformaterad svensk etikett. Exempel: \"1-5 Mkr\", \"≥ 10 mdkr\",\n\"5-9 anställda\".\n"
          }
        }
      }
    },
    "responses": {
      "BadRequest": {
        "description": "Felaktig förfrågan",
        "content": {
          "application/json": {
            "schema": {
              "$ref": "#/components/schemas/ErrorResponse"
            },
            "example": {
              "error": "Missing required parameter: q (company name) or org_number"
            }
          }
        }
      },
      "Unauthorized": {
        "description": "Ogiltig eller saknad API-nyckel",
        "content": {
          "application/json": {
            "schema": {
              "$ref": "#/components/schemas/ErrorResponse"
            },
            "example": {
              "error": "Invalid API key",
              "message": "API-nyckeln är ogiltig eller felaktigt formaterad."
            }
          }
        }
      },
      "PaymentRequired": {
        "description": "Krediter slut",
        "content": {
          "application/json": {
            "schema": {
              "$ref": "#/components/schemas/ErrorResponse"
            },
            "example": {
              "error": "Krediterna är slut. Uppgradera din plan eller köp fler krediter."
            }
          }
        }
      },
      "TooManyRequests": {
        "description": "För många förfrågningar (rate limit)",
        "headers": {
          "X-RateLimit-Tier": {
            "schema": {
              "type": "string"
            },
            "description": "Din rate limit-nivå (Guest, Free, Starter, Pro)"
          },
          "X-RateLimit-Limit": {
            "schema": {
              "type": "integer"
            },
            "description": "Max förfrågningar per minut"
          },
          "X-RateLimit-Remaining": {
            "schema": {
              "type": "integer"
            },
            "description": "Återstående förfrågningar denna minut"
          },
          "X-Quota-Remaining": {
            "schema": {
              "type": "integer"
            },
            "description": "Återstående månadskrediter"
          }
        },
        "content": {
          "application/json": {
            "schema": {
              "$ref": "#/components/schemas/ErrorResponse"
            },
            "example": {
              "error": "För många förfrågningar. Vänta en minut."
            }
          }
        }
      },
      "InternalServerError": {
        "description": "Serverfel",
        "content": {
          "application/json": {
            "schema": {
              "$ref": "#/components/schemas/ErrorResponse"
            },
            "example": {
              "error": "Internal server error"
            }
          }
        }
      }
    }
  }
}