Getting started
How to use
How to look up a CNPJ, search companies and check that the server is up.
Examples use the domain you are reading this page on. Responses are always application/json.
CNPJ lookup
/{cnpj}v2Returns the company data as JSON. The source that answered comes in the X-Source header (minhareceita or receitaws). The CNPJ can be sent with or without punctuation.
curl "https://cnpj.juk.re/06.990.590/0001-23"const res = await fetch("https://cnpj.juk.re/06.990.590/0001-23");
if (!res.ok) throw new Error((await res.json()).error);
const empresa = await res.json();
console.log(empresa.razao_social);import requests
res = requests.get("https://cnpj.juk.re/06.990.590/0001-23", timeout=15)
res.raise_for_status()
print(res.json()["razao_social"])<?php
$empresa = json_decode(file_get_contents("https://cnpj.juk.re/06.990.590/0001-23"), true);
echo $empresa["razao_social"];package main
import (
"encoding/json"
"fmt"
"net/http"
)
func main() {
res, err := http.Get("https://cnpj.juk.re/06.990.590/0001-23")
if err != nil {
panic(err)
}
defer res.Body.Close()
var empresa map[string]any
json.NewDecoder(res.Body).Decode(&empresa)
fmt.Println(empresa["razao_social"])
}using var http = new HttpClient();
var json = await http.GetStringAsync("https://cnpj.juk.re/06.990.590/0001-23");
Console.WriteLine(json);$empresa = Invoke-RestMethod "https://cnpj.juk.re/06.990.590/0001-23"
$empresa.razao_social{
"cnpj": "06990590000123",
"razao_social": "GOOGLE BRASIL INTERNET LTDA.",
"uf": "SP",
"municipio": "SAO PAULO",
"descricao_situacao_cadastral": "ATIVA",
"qsa": [ … ]
}| Status | When |
|---|---|
200 | Lookup succeeded. |
400 | CNPJ with invalid format or check digits. |
404 | Valid CNPJ, but not in the database. |
502 | No provider answered. |
Accepted formats
| Type | Example |
|---|---|
| Numeric | /06990590000123 |
| Numeric with mask | /06.990.590/0001-23 |
| Alphanumeric | /00000000E08G12 |
| Alphanumeric with mask | /00.000.000/E08G-12 |
We strip ., /, - and spaces, uppercase the letters and verify the format and check digits. The slash of a masked CNPJ can go straight in the URL or as %2F. See Alphanumeric CNPJ.
Registration certificate
/cartao/{cnpj}Opens a page with the data in the layout of the registration and status certificate, with a QR code and a barcode, ready to print or save as PDF. It does not replace the official certificate from the Receita Federal.
Paginated search
/?uf=DF&natureza_juridica=1015&limit=10experimentalLists companies from filters. The search is forwarded to Minha Receita, with no plan B, and may answer 429 when the server limit is reached. With no filters, the / route shows the test page.
| Parameter | Description |
|---|---|
cnae_fiscal | Main fiscal CNAE of the establishment. |
cnae | Main or secondary CNAE. |
cnpf | CPF or CNPJ of a partner. |
municipio | Municipality code (IBGE or SIAFI). |
natureza_juridica | Legal nature code. |
uf | State abbreviation. |
limit | Items per page, at most 1024. |
cursor | Cursor returned by the previous page. |
- For several values, repeat the parameter or separate with commas:
uf=DF,GO. - Partner CPFs are masked, so search with
*on the first three and last two digits:*456789. - Searching only by partner CPF or CNPJ may time out; combine it with
uf. - An invalid
limitorcursorreturns400.
The response carries data (the list) and cursor. Pass the cursor in the next call to move on; when it is missing, that was the last page.
{
"data": [ { "cnpj": "01690511000145", "razao_social": "…" } ],
"cursor": "…"
}Auxiliary endpoints
| Route | Description |
|---|---|
GET /updated | Reference month of the Receita Federal data, as { "message": "2026-10" }. |
GET or HEAD /healthz | The server is up. |
GET or HEAD /readyz | The server is ready to answer lookups. |
GET /openapi.json | OpenAPI 3.1 specification. |
They all answer 200 when everything is fine. Minha Receita’s /metrics is not offered here.