Español

Reference

Companies API reference

Everything the Jurilia Companies website and app do, as an API with a key: find a company from anything, read every section of its profile, walk the relationship graph, download a verifiable dossier and get webhooks when the gazette publishes. Every endpoint below lists what it is for, its parameters, what it costs, its errors and how to solve them, and examples.

No generative AI is involved in this block: every answer is built with fixed rules from published data.

Get started in 5 minutes

  1. 1. Create a test key in the console (API keys, "Test key"). It starts with `iuris_test_`: it returns fictitious data with the exact shape of the real one and is never charged.

    export JURILIA_API_KEY=iuris_test_xxxxxxxxxxxxxxxx
  2. 2. Find a company from whatever you have: a name, a tax ID, a registry sheet or the address of its page.

    curl "https://api.jurilia.com/v1/dev/empresas/resolver?q=Panader%C3%ADa%20L%C3%B3pez%20S.L." \
      -H "Authorization: Bearer $JURILIA_API_KEY"
  3. 3. Get the profile and several parts in one call, and only the fields you need.

    curl "https://api.jurilia.com/v1/dev/empresas/12345?incluir=red,cronologia,licitaciones&campos=denominacion,incluidos" \
      -H "Authorization: Bearer $JURILIA_API_KEY"
  4. 4. Before spending, see what it would cost (nothing is executed or charged).

    curl "https://api.jurilia.com/v1/dev/empresas/12345/dossier?estimar=1" \
      -H "Authorization: Bearer $JURILIA_API_KEY"
  5. 5. Be told instead of polling: create a subscription, watch a company and test your server.

    curl -X POST https://api.jurilia.com/v1/dev/avisos/suscripciones \
      -H "Authorization: Bearer $JURILIA_API_KEY" -H "Content-Type: application/json" \
      -H "Idempotency-Key: $(uuidgen)" \
      -d '{"url":"https://hooks.mycompany.com/jurilia","grupos":["nombramientos","ceses"]}'

When it works, create a real key in the console, buy balance and swap the key: nothing else changes. Test keys are never charged and write nothing; they do not validate the request content in as much detail as a real key.

Headers and conventions

Header / parameterWhat it does
X-Request-IdOn every response. If you send one (8 to 100 characters) we return it unchanged, so you can correlate with your logs. It is also id_peticion in errors.
Content-Type: application/problem+jsonEvery error (RFC 9457): type, title, status, detail, instance, plus codigo, mensaje, sugerencia, documentacion and id_peticion.
RateLimit-Limit, RateLimit-Remaining, RateLimit-ResetYour per-minute limit, what is left and the seconds until it resets (IETF draft). The classic X-RateLimit-* remain, with the reset in Unix seconds. A 429 carries Retry-After.
ETag / If-None-MatchEvery JSON read carries an ETag. Repeat the call with If-None-Match and a 304 has no body and is NOT charged.
X-Coste-Centimos, X-Saldo-Restante-CentimosWhat the call cost and what is left (also as X-Jurilia-*).
?estimar=1What the call would cost, without executing or charging it.
?campos=a,b.cOnly those fields of a read (up to 20 and 5 levels); on a list, of each item. A field that does not exist is ignored.
?cursor= and ?limite=Pagination: ask for the next page with siguienteCursor (or the X-Jurilia-Siguiente-Cursor header). pagina still works.
Idempotency-KeyWhen creating a notice subscription: repeating the request with the same key returns the same subscription (200, Idempotent-Replayed: true, no secret, not charged).
Deprecation, SunsetIf a route is going to be retired: since when it is deprecated and when it is removed, with a Link to the migration guide. None today.
X-Jurilia-Modo: pruebaThe response comes from a test key: fictitious data, nothing charged or written.

What each call costs

You pay for each call that is served (a 2xx, or a 404 for something that is not loaded). A call that fails validation, hits your rate limit, or fails on our side is never charged. The response carries X-Jurilia-Coste-Centimos and X-Jurilia-Saldo-Centimos. Prices are in euro cents, net of VAT.

ClassWhat it coversPrice
simpleOne indexed read: a profile section, a datum from a source, a trademark, a cached exploration page.3 euro cents
cruceA cross of several sources or a graph expansion: ties, public money, timeline, combined advanced search.8 euro cents
grafoA walk of the relationship graph between companies or people, or a prospecting list.15 euro cents
avanceThe dossier progress: the totals of the twenty profile sections.15 euro cents
dossierThe professional dossier as a PDF: every section, the map, rendering, encryption and a verification code.250 euro cents
alta_vigiladaCreating a notice subscription, or putting a company on a watch list.15 euro cents
descargaDownloading a prospecting list as Excel or CSV.200 euro cents
biblioteca_articuloAn article of the legal library by its reference (or its versions, or its wording on the date of the facts).2 euro cents
biblioteca_busquedaA search for articles in the legal library.3 euro cents
calculadoraOne calculation of any of the legal calculators, with its legal basis.5 euro cents
plazoThe computation of a deadline (working days and public holidays in the four jurisdictions).10 euro cents
prueba_avisoThe test notice of a subscription.1 euro cent
avisoEach notice your server confirms with a 2xx (a failure or a retry is not charged).5 euro cents

Lists with pages accept `pagina` or an opaque `cursor`, and return `siguienteCursor` and the headers `X-Jurilia-Siguiente-Cursor` and `Link: rel="next"`. Every datum carries its `fuente` (the gazette, with the link to the official PDF and its publication date): if there is no source, there is no datum.

Every error is JSON with a stable `codigo`, a `mensaje`, a `sugerencia` that tells you what to do and a `documentacion` link. Branch on `codigo`, never on the message. Messages are in Spanish.

Versioning policy

  • The major version is in the address: everything is in `/v1` today. Inside a major version we only make non-breaking changes: new endpoints, new response fields, new optional parameters and new error codes. Your integration must ignore fields it does not know.
  • Breaking changes (removing or renaming a field or an endpoint, changing a type or the meaning of a value) only arrive in a new major version (`/v2`), which runs alongside the previous one.
  • Before removing anything we give at least six months notice: the route response carries `Deprecation` (since when, RFC 9745) and `Sunset` (when it goes, RFC 8594) with a `Link` to the migration guide, and it is noted in the changelog.
  • Stable identifiers are the `codigo` of errors and the documented field names. The text of `mensaje`, `sugerencia` and `detail` may improve without notice: do not branch on it.
  • Prices are never changed retroactively: a tariff change is announced before it applies.

Changelog · 22 October 2026

  • Companies, complete: everything the Jurilia Companies website and app do, with an API key. More than seventy new endpoints: find a company from anything, every profile section, the timeline, objective facts, the relationship graph, trademarks, public money, VIES, the PDF dossier and its verification, and exploring provinces, sectors, rankings, news and reports. Each is charged by class (1, 2, 5, 25 or 50 euro cents).
  • Automatic notices (webhooks): register an https URL and the companies you watch, and we send a signed POST (HMAC-SHA256) when the gazette publishes an act of them. Filter by act type, one notice per act or a daily digest, a stable idempotency key, retries with growing delay, a delivery log in the console, and recovery of missed notices. A delivered notice costs 2 euro cents; there is no monthly fee.
  • Everything in one call: `?incluir=red,cronologia,licitaciones` on the basic profile returns those parts with the profile, at a 10 % discount on the sum.
  • Errors as `application/problem+json` (RFC 9457); every response carries `X-Request-Id`.
  • `RateLimit-*` headers, `ETag` with 304 (not charged), `X-Coste-Centimos` and `X-Saldo-Restante-Centimos`, `Idempotency-Key`, `campos=`, `?estimar=1` and cursor pagination.
  • Test mode: create a test key (`iuris_test_…`) and get fictitious data with the exact shape of the real one, never charged.

Authentication

Send your key in the Authorization header. Keys are created in the console. Responses are JSON unless stated otherwise.

Base URL: https://api.jurilia.com/v1/dev

Find a company

Anything a person can paste about a company, understood.

GET/v1/dev/empresas/resolver

Find a company from anything: name, tax ID, registry sheet, id or a company page address

Use it when: Put it in front of any form field where a person pastes "something about a company": it detects the type, tolerates typos and legal forms, and tells you how sure it is.

Price

8 euro cents per call served · 120 calls per minute per key (all routes).

Parameters

FieldTypeRequiredValues, limits and default
qtextoyesWhat to look for.. al menos 1 caracteres; hasta 300 caracteres
provinciatextonoProvince name or slug.. al menos 1 caracteres; hasta 60 caracteres

Errors

  • 400 validacion — A field of the request is not valid; `campos` says which. Fix the fields listed in `campos` and call again. An invalid request is never charged.
  • 401 no_autenticado — The Authorization header with the API key is missing. Send the key as `Authorization: Bearer <key>`. You create it in the developer console.
  • 401 clave_invalida — The key does not exist or was revoked. Check you copied the whole key and did not revoke it. Create another one in the console if needed.
  • 401 clave_no_es_de_desarrollador — The key belongs to a law firm, not to a developer account. This API only accepts developer-account keys.
  • 402 saldo_insuficiente — There is not enough balance for this call. It was neither served nor charged. Top up your balance in the console (Billing).
  • 403 clave_ip_no_permitida — The key has an IP allow-list and this address is not on it. Add your server address to the allow-list in the console, or remove the restriction.
  • 403 identidad_sin_verificar — The account identity is not verified yet; balance cannot be spent without it. Verify the account identity in the console Settings.
  • 404 no_encontrado — It is not in the loaded gazette data, or it is a person who exercised the right to object or erasure. Check the id. If you only have a name use `GET /v1/dev/empresas/resolver?q=`.
  • 429 demasiadas_peticiones — Too many calls in a row with this key (120 per minute). Wait the seconds in the `Retry-After` header and retry with growing delay. The limit is per key.
  • 500 error_interno — A failure on our side. Nothing is charged. Retry in a few seconds; if it persists, write to us with the time.

Example request

curl

curl "https://api.jurilia.com/v1/dev/empresas/resolver?q=Panader%C3%ADa+L%C3%B3pez+S.L." \
  -H "Authorization: Bearer $JURILIA_API_KEY"

Python

import os
import requests

r = requests.get(
    "https://api.jurilia.com/v1/dev/empresas/resolver",
    headers={"Authorization": f"Bearer {os.environ['JURILIA_API_KEY']}"},
    params={"q":"Panadería López S.L."},
    timeout=30,
)
r.raise_for_status()
print(r.json())

JavaScript

const url = new URL("https://api.jurilia.com/v1/dev/empresas/resolver");
url.search = new URLSearchParams({"q":"Panadería López S.L."});
const r = await fetch(url, {
  headers: { Authorization: `Bearer ${process.env.JURILIA_API_KEY}` },
});
if (!r.ok) throw new Error(`HTTP ${r.status}`);
console.log(await r.json());

Example response

Show the full example response
{
  "entrada": {
    "texto": "texto",
    "tipoDetectado": "url",
    "normalizada": "normalizada"
  },
  "mejor": {
    "empresa": {
      "id": "12345",
      "denominacion": "ACME SERVICIOS SL",
      "provincia": "MADRID",
      "hoja": "M-123456",
      "titular": "sociedad",
      "ultimaPublicacion": "ultimaPublicacion"
    },
    "confianza": 0,
    "motivo": "motivo",
    "motivoCodigo": "url_exacta"
  },
  "alternativas": [
    {
      "empresa": {
        "id": "12345",
        "denominacion": "ACME SERVICIOS SL",
        "provincia": "MADRID",
        "hoja": "M-123456",
        "titular": "sociedad",
        "ultimaPublicacion": "ultimaPublicacion"
      },
      "confianza": 0,
      "motivo": "motivo",
      "motivoCodigo": "url_exacta"
    }
  ],
  "quizaQuisisteDecir": [
    "quizaQuisisteDecir"
  ]
}

Company profile, section by section

The profile of empresas.jurilia.com, one endpoint per section, every datum cited to its gazette.

GET/v1/dev/empresas/{empresaId}/nif

The company tax ID and where it comes from

Use it when: To check or complete a tax ID, knowing whether it comes from the gazette or from public procurement.

Price

3 euro cents per call served · 120 calls per minute per key (all routes).

Parameters

FieldTypeRequiredValues, limits and default
empresaIdtextoyesCompany id, as returned by the search.. patrón ^\d{1,18}$
idiomatextonoLanguage of the texts the server writes (es, en, fr, de, pt, it). Names and figures are never translated.. uno de: es, en, fr, de, pt, it. default: es

Errors

  • 400 validacion — A field of the request is not valid; `campos` says which. Fix the fields listed in `campos` and call again. An invalid request is never charged.
  • 401 no_autenticado — The Authorization header with the API key is missing. Send the key as `Authorization: Bearer <key>`. You create it in the developer console.
  • 401 clave_invalida — The key does not exist or was revoked. Check you copied the whole key and did not revoke it. Create another one in the console if needed.
  • 401 clave_no_es_de_desarrollador — The key belongs to a law firm, not to a developer account. This API only accepts developer-account keys.
  • 402 saldo_insuficiente — There is not enough balance for this call. It was neither served nor charged. Top up your balance in the console (Billing).
  • 403 clave_ip_no_permitida — The key has an IP allow-list and this address is not on it. Add your server address to the allow-list in the console, or remove the restriction.
  • 403 identidad_sin_verificar — The account identity is not verified yet; balance cannot be spent without it. Verify the account identity in the console Settings.
  • 404 no_encontrado — It is not in the loaded gazette data, or it is a person who exercised the right to object or erasure. Check the id. If you only have a name use `GET /v1/dev/empresas/resolver?q=`.
  • 429 demasiadas_peticiones — Too many calls in a row with this key (120 per minute). Wait the seconds in the `Retry-After` header and retry with growing delay. The limit is per key.
  • 500 error_interno — A failure on our side. Nothing is charged. Retry in a few seconds; if it persists, write to us with the time.

Example request

curl

curl "https://api.jurilia.com/v1/dev/empresas/12345/nif" \
  -H "Authorization: Bearer $JURILIA_API_KEY"

Python

import os
import requests

r = requests.get(
    "https://api.jurilia.com/v1/dev/empresas/12345/nif",
    headers={"Authorization": f"Bearer {os.environ['JURILIA_API_KEY']}"},
    timeout=30,
)
r.raise_for_status()
print(r.json())

JavaScript

const url = new URL("https://api.jurilia.com/v1/dev/empresas/12345/nif");
const r = await fetch(url, {
  headers: { Authorization: `Bearer ${process.env.JURILIA_API_KEY}` },
});
if (!r.ok) throw new Error(`HTTP ${r.status}`);
console.log(await r.json());

Example response

Show the full example response
{
  "tipo": "consta",
  "nif": "A58818501",
  "fuente": "borme",
  "fuentes": [
    "borme"
  ],
  "procedencia": "procedencia",
  "citaBorme": {
    "cve": "cve",
    "fecha": "2026-10-22",
    "urlPdf": "https://www.boe.es/borme/dias/2026/10/22/pdfs/BORME-A-2026-200-28.pdf",
    "fragmento": "fragmento"
  },
  "citaBdns": {
    "codConcesion": "codConcesion",
    "fechaConcesion": "2026-10-22",
    "urlConvocatoria": "https://empresas.jurilia.com/"
  },
  "citasRegistros": [
    {
      "conjuntoId": "conjuntoId",
      "registro": "registro",
      "organismo": "organismo",
      "licencia": "licencia",
      "urlLicencia": "https://empresas.jurilia.com/",
      "urlConjunto": "https://empresas.jurilia.com/",
      "fechaDatos": "2026-10-22"
    }
  ]
}
GET/v1/dev/empresas/{empresaId}/senales

Objective signals published about the company

Use it when: To feed a monitoring screen with the facts the gazette published (mass dismissals, repeated changes, insolvency).

Price

3 euro cents per call served · 120 calls per minute per key (all routes).

Parameters

FieldTypeRequiredValues, limits and default
empresaIdtextoyesCompany id, as returned by the search.. patrón ^\d{1,18}$
paginaenteronoPage number, starting at 1. Alternatively use cursor.. mínimo 1; máximo 10000. default: 1
cursortextonoOpaque cursor of the next page (from siguienteCursor or the X-Jurilia-Siguiente-Cursor header). Replaces pagina.. hasta 100 caracteres

Errors

  • 400 validacion — A field of the request is not valid; `campos` says which. Fix the fields listed in `campos` and call again. An invalid request is never charged.
  • 400 cursor_no_valido — The cursor is not valid or has expired. Use `siguienteCursor` or the `X-Jurilia-Siguiente-Cursor` header exactly as received.
  • 401 no_autenticado — The Authorization header with the API key is missing. Send the key as `Authorization: Bearer <key>`. You create it in the developer console.
  • 401 clave_invalida — The key does not exist or was revoked. Check you copied the whole key and did not revoke it. Create another one in the console if needed.
  • 401 clave_no_es_de_desarrollador — The key belongs to a law firm, not to a developer account. This API only accepts developer-account keys.
  • 402 saldo_insuficiente — There is not enough balance for this call. It was neither served nor charged. Top up your balance in the console (Billing).
  • 403 clave_ip_no_permitida — The key has an IP allow-list and this address is not on it. Add your server address to the allow-list in the console, or remove the restriction.
  • 403 identidad_sin_verificar — The account identity is not verified yet; balance cannot be spent without it. Verify the account identity in the console Settings.
  • 404 no_encontrado — It is not in the loaded gazette data, or it is a person who exercised the right to object or erasure. Check the id. If you only have a name use `GET /v1/dev/empresas/resolver?q=`.
  • 429 demasiadas_peticiones — Too many calls in a row with this key (120 per minute). Wait the seconds in the `Retry-After` header and retry with growing delay. The limit is per key.
  • 500 error_interno — A failure on our side. Nothing is charged. Retry in a few seconds; if it persists, write to us with the time.

Example request

curl

curl "https://api.jurilia.com/v1/dev/empresas/12345/senales" \
  -H "Authorization: Bearer $JURILIA_API_KEY"

Python

import os
import requests

r = requests.get(
    "https://api.jurilia.com/v1/dev/empresas/12345/senales",
    headers={"Authorization": f"Bearer {os.environ['JURILIA_API_KEY']}"},
    timeout=30,
)
r.raise_for_status()
print(r.json())

JavaScript

const url = new URL("https://api.jurilia.com/v1/dev/empresas/12345/senales");
const r = await fetch(url, {
  headers: { Authorization: `Bearer ${process.env.JURILIA_API_KEY}` },
});
if (!r.ok) throw new Error(`HTTP ${r.status}`);
console.log(await r.json());

Example response

Show the full example response
{
  "paginacion": {
    "pagina": 1,
    "paginas": 1,
    "total": 1,
    "porPagina": 20
  },
  "senales": [
    {
      "tipo": "tipo",
      "fecha": "2026-10-22",
      "desde": "2026-10-22",
      "cuantos": 0,
      "actos": [
        {
          "fecha": "2026-10-22",
          "tipo": "tipo",
          "fuente": {
            "identificador": "BORME-A-2026-200-28",
            "urlPdf": "https://www.boe.es/borme/dias/2026/10/22/pdfs/BORME-A-2026-200-28.pdf",
            "numero": 7,
            "fecha": "2026-10-22"
          }
        }
      ]
    }
  ],
  "siguienteCursor": "siguienteCursor"
}
GET/v1/dev/empresas/{empresaId}/datos-objetivos

Measurable facts worth checking, with their calculation

Use it when: For a due-diligence checklist: each fact comes with its number, how it is calculated and its source, never with a verdict.

Price

3 euro cents per call served · 120 calls per minute per key (all routes).

Parameters

FieldTypeRequiredValues, limits and default
empresaIdtextoyesCompany id, as returned by the search.. patrón ^\d{1,18}$
idiomatextonoLanguage of the texts the server writes (es, en, fr, de, pt, it). Names and figures are never translated.. uno de: es, en, fr, de, pt, it. default: es

Errors

  • 400 validacion — A field of the request is not valid; `campos` says which. Fix the fields listed in `campos` and call again. An invalid request is never charged.
  • 401 no_autenticado — The Authorization header with the API key is missing. Send the key as `Authorization: Bearer <key>`. You create it in the developer console.
  • 401 clave_invalida — The key does not exist or was revoked. Check you copied the whole key and did not revoke it. Create another one in the console if needed.
  • 401 clave_no_es_de_desarrollador — The key belongs to a law firm, not to a developer account. This API only accepts developer-account keys.
  • 402 saldo_insuficiente — There is not enough balance for this call. It was neither served nor charged. Top up your balance in the console (Billing).
  • 403 clave_ip_no_permitida — The key has an IP allow-list and this address is not on it. Add your server address to the allow-list in the console, or remove the restriction.
  • 403 identidad_sin_verificar — The account identity is not verified yet; balance cannot be spent without it. Verify the account identity in the console Settings.
  • 404 no_encontrado — It is not in the loaded gazette data, or it is a person who exercised the right to object or erasure. Check the id. If you only have a name use `GET /v1/dev/empresas/resolver?q=`.
  • 429 demasiadas_peticiones — Too many calls in a row with this key (120 per minute). Wait the seconds in the `Retry-After` header and retry with growing delay. The limit is per key.
  • 500 error_interno — A failure on our side. Nothing is charged. Retry in a few seconds; if it persists, write to us with the time.

Example request

curl

curl "https://api.jurilia.com/v1/dev/empresas/12345/datos-objetivos" \
  -H "Authorization: Bearer $JURILIA_API_KEY"

Python

import os
import requests

r = requests.get(
    "https://api.jurilia.com/v1/dev/empresas/12345/datos-objetivos",
    headers={"Authorization": f"Bearer {os.environ['JURILIA_API_KEY']}"},
    timeout=30,
)
r.raise_for_status()
print(r.json())

JavaScript

const url = new URL("https://api.jurilia.com/v1/dev/empresas/12345/datos-objetivos");
const r = await fetch(url, {
  headers: { Authorization: `Bearer ${process.env.JURILIA_API_KEY}` },
});
if (!r.ok) throw new Error(`HTTP ${r.status}`);
console.log(await r.json());

Example response

Show the full example response
{
  "resultado": "empresario_individual"
}
GET/v1/dev/empresas/{empresaId}/hechos

Published facts to review before contracting with the company

Use it when: Before signing with a company: insolvency, dissolution, mergers, address and name changes, auditor dismissal.

Price

3 euro cents per call served · 120 calls per minute per key (all routes).

Parameters

FieldTypeRequiredValues, limits and default
empresaIdtextoyesCompany id, as returned by the search.. patrón ^\d{1,18}$
paginaenteronoPage number, starting at 1. Alternatively use cursor.. mínimo 1; máximo 10000. default: 1
cursortextonoOpaque cursor of the next page (from siguienteCursor or the X-Jurilia-Siguiente-Cursor header). Replaces pagina.. hasta 100 caracteres

Errors

  • 400 validacion — A field of the request is not valid; `campos` says which. Fix the fields listed in `campos` and call again. An invalid request is never charged.
  • 400 cursor_no_valido — The cursor is not valid or has expired. Use `siguienteCursor` or the `X-Jurilia-Siguiente-Cursor` header exactly as received.
  • 401 no_autenticado — The Authorization header with the API key is missing. Send the key as `Authorization: Bearer <key>`. You create it in the developer console.
  • 401 clave_invalida — The key does not exist or was revoked. Check you copied the whole key and did not revoke it. Create another one in the console if needed.
  • 401 clave_no_es_de_desarrollador — The key belongs to a law firm, not to a developer account. This API only accepts developer-account keys.
  • 402 saldo_insuficiente — There is not enough balance for this call. It was neither served nor charged. Top up your balance in the console (Billing).
  • 403 clave_ip_no_permitida — The key has an IP allow-list and this address is not on it. Add your server address to the allow-list in the console, or remove the restriction.
  • 403 identidad_sin_verificar — The account identity is not verified yet; balance cannot be spent without it. Verify the account identity in the console Settings.
  • 404 no_encontrado — It is not in the loaded gazette data, or it is a person who exercised the right to object or erasure. Check the id. If you only have a name use `GET /v1/dev/empresas/resolver?q=`.
  • 429 demasiadas_peticiones — Too many calls in a row with this key (120 per minute). Wait the seconds in the `Retry-After` header and retry with growing delay. The limit is per key.
  • 500 error_interno — A failure on our side. Nothing is charged. Retry in a few seconds; if it persists, write to us with the time.

Example request

curl

curl "https://api.jurilia.com/v1/dev/empresas/12345/hechos" \
  -H "Authorization: Bearer $JURILIA_API_KEY"

Python

import os
import requests

r = requests.get(
    "https://api.jurilia.com/v1/dev/empresas/12345/hechos",
    headers={"Authorization": f"Bearer {os.environ['JURILIA_API_KEY']}"},
    timeout=30,
)
r.raise_for_status()
print(r.json())

JavaScript

const url = new URL("https://api.jurilia.com/v1/dev/empresas/12345/hechos");
const r = await fetch(url, {
  headers: { Authorization: `Bearer ${process.env.JURILIA_API_KEY}` },
});
if (!r.ok) throw new Error(`HTTP ${r.status}`);
console.log(await r.json());

Example response

Show the full example response
{
  "paginacion": {
    "pagina": 1,
    "paginas": 1,
    "total": 1,
    "porPagina": 20
  },
  "hechos": [
    {
      "tipo": "tipo",
      "fecha": "2026-10-22",
      "desde": "2026-10-22",
      "cuantos": 0,
      "administracion": {
        "nombramientos": 0,
        "ceses": 0
      },
      "actos": [
        {
          "fecha": "2026-10-22",
          "tipo": "tipo",
          "fuente": {
            "identificador": "BORME-A-2026-200-28",
            "urlPdf": "https://www.boe.es/borme/dias/2026/10/22/pdfs/BORME-A-2026-200-28.pdf",
            "numero": 7,
            "fecha": "2026-10-22"
          }
        }
      ]
    }
  ],
  "constitucion": {
    "fecha": "2026-10-22",
    "comienzoOperaciones": "2026-10-22",
    "fuente": {
      "identificador": "BORME-A-2026-200-28",
      "urlPdf": "https://www.boe.es/borme/dias/2026/10/22/pdfs/BORME-A-2026-200-28.pdf",
      "numero": 7,
      "fecha": "2026-10-22"
    }
  },
  "cobertura": {
    "desde": "2026-10-22",
    "hasta": "2026-10-22",
    "anios": 0,
    "ventanaDeAdministradores": {
      "desde": "2026-10-22",
      "hasta": "2026-10-22"
    }
  },
  "siguienteCursor": "siguienteCursor"
}
GET/v1/dev/empresas/{empresaId}/linea-de-tiempo

Registry timeline: incorporation, officers, capital, address

Use it when: To draw the life of a company.

Price

3 euro cents per call served · 120 calls per minute per key (all routes).

Parameters

FieldTypeRequiredValues, limits and default
empresaIdtextoyesCompany id, as returned by the search.. patrón ^\d{1,18}$
paginaenteronoPage number, starting at 1. Alternatively use cursor.. mínimo 1; máximo 10000. default: 1
cursortextonoOpaque cursor of the next page (from siguienteCursor or the X-Jurilia-Siguiente-Cursor header). Replaces pagina.. hasta 100 caracteres

Errors

  • 400 validacion — A field of the request is not valid; `campos` says which. Fix the fields listed in `campos` and call again. An invalid request is never charged.
  • 400 cursor_no_valido — The cursor is not valid or has expired. Use `siguienteCursor` or the `X-Jurilia-Siguiente-Cursor` header exactly as received.
  • 401 no_autenticado — The Authorization header with the API key is missing. Send the key as `Authorization: Bearer <key>`. You create it in the developer console.
  • 401 clave_invalida — The key does not exist or was revoked. Check you copied the whole key and did not revoke it. Create another one in the console if needed.
  • 401 clave_no_es_de_desarrollador — The key belongs to a law firm, not to a developer account. This API only accepts developer-account keys.
  • 402 saldo_insuficiente — There is not enough balance for this call. It was neither served nor charged. Top up your balance in the console (Billing).
  • 403 clave_ip_no_permitida — The key has an IP allow-list and this address is not on it. Add your server address to the allow-list in the console, or remove the restriction.
  • 403 identidad_sin_verificar — The account identity is not verified yet; balance cannot be spent without it. Verify the account identity in the console Settings.
  • 404 no_encontrado — It is not in the loaded gazette data, or it is a person who exercised the right to object or erasure. Check the id. If you only have a name use `GET /v1/dev/empresas/resolver?q=`.
  • 429 demasiadas_peticiones — Too many calls in a row with this key (120 per minute). Wait the seconds in the `Retry-After` header and retry with growing delay. The limit is per key.
  • 500 error_interno — A failure on our side. Nothing is charged. Retry in a few seconds; if it persists, write to us with the time.

Example request

curl

curl "https://api.jurilia.com/v1/dev/empresas/12345/linea-de-tiempo" \
  -H "Authorization: Bearer $JURILIA_API_KEY"

Python

import os
import requests

r = requests.get(
    "https://api.jurilia.com/v1/dev/empresas/12345/linea-de-tiempo",
    headers={"Authorization": f"Bearer {os.environ['JURILIA_API_KEY']}"},
    timeout=30,
)
r.raise_for_status()
print(r.json())

JavaScript

const url = new URL("https://api.jurilia.com/v1/dev/empresas/12345/linea-de-tiempo");
const r = await fetch(url, {
  headers: { Authorization: `Bearer ${process.env.JURILIA_API_KEY}` },
});
if (!r.ok) throw new Error(`HTTP ${r.status}`);
console.log(await r.json());

Example response

Show the full example response
{
  "paginacion": {
    "pagina": 1,
    "paginas": 1,
    "total": 1,
    "porPagina": 20
  },
  "recortada": true,
  "hitos": [
    {
      "fecha": "2026-10-22",
      "numero": 7,
      "boletin": "BORME-A-2026-200-28",
      "urlPdf": "https://www.boe.es/borme/dias/2026/10/22/pdfs/BORME-A-2026-200-28.pdf",
      "clases": [
        "clase"
      ],
      "capitalResultanteCentimos": 0,
      "domicilio": "domicilio",
      "denominacion": "ACME SERVICIOS SL"
    }
  ],
  "siguienteCursor": "siguienteCursor"
}
GET/v1/dev/empresas/{empresaId}/anuncios

Section B and C announcements of the gazette

Use it when: To read what the gazette published beyond the registry acts (meetings, accounts).

Price

3 euro cents per call served · 120 calls per minute per key (all routes).

Parameters

FieldTypeRequiredValues, limits and default
empresaIdtextoyesCompany id, as returned by the search.. patrón ^\d{1,18}$
paginaenteronoPage number, starting at 1. Alternatively use cursor.. mínimo 1; máximo 10000. default: 1
cursortextonoOpaque cursor of the next page (from siguienteCursor or the X-Jurilia-Siguiente-Cursor header). Replaces pagina.. hasta 100 caracteres

Errors

  • 400 validacion — A field of the request is not valid; `campos` says which. Fix the fields listed in `campos` and call again. An invalid request is never charged.
  • 400 cursor_no_valido — The cursor is not valid or has expired. Use `siguienteCursor` or the `X-Jurilia-Siguiente-Cursor` header exactly as received.
  • 401 no_autenticado — The Authorization header with the API key is missing. Send the key as `Authorization: Bearer <key>`. You create it in the developer console.
  • 401 clave_invalida — The key does not exist or was revoked. Check you copied the whole key and did not revoke it. Create another one in the console if needed.
  • 401 clave_no_es_de_desarrollador — The key belongs to a law firm, not to a developer account. This API only accepts developer-account keys.
  • 402 saldo_insuficiente — There is not enough balance for this call. It was neither served nor charged. Top up your balance in the console (Billing).
  • 403 clave_ip_no_permitida — The key has an IP allow-list and this address is not on it. Add your server address to the allow-list in the console, or remove the restriction.
  • 403 identidad_sin_verificar — The account identity is not verified yet; balance cannot be spent without it. Verify the account identity in the console Settings.
  • 404 no_encontrado — It is not in the loaded gazette data, or it is a person who exercised the right to object or erasure. Check the id. If you only have a name use `GET /v1/dev/empresas/resolver?q=`.
  • 429 demasiadas_peticiones — Too many calls in a row with this key (120 per minute). Wait the seconds in the `Retry-After` header and retry with growing delay. The limit is per key.
  • 500 error_interno — A failure on our side. Nothing is charged. Retry in a few seconds; if it persists, write to us with the time.

Example request

curl

curl "https://api.jurilia.com/v1/dev/empresas/12345/anuncios" \
  -H "Authorization: Bearer $JURILIA_API_KEY"

Python

import os
import requests

r = requests.get(
    "https://api.jurilia.com/v1/dev/empresas/12345/anuncios",
    headers={"Authorization": f"Bearer {os.environ['JURILIA_API_KEY']}"},
    timeout=30,
)
r.raise_for_status()
print(r.json())

JavaScript

const url = new URL("https://api.jurilia.com/v1/dev/empresas/12345/anuncios");
const r = await fetch(url, {
  headers: { Authorization: `Bearer ${process.env.JURILIA_API_KEY}` },
});
if (!r.ok) throw new Error(`HTTP ${r.status}`);
console.log(await r.json());

Example response

Show the full example response
{
  "actosB": {
    "filas": [
      {
        "identificador": "BORME-A-2026-200-28",
        "provincia": "MADRID",
        "urlPdf": "https://www.boe.es/borme/dias/2026/10/22/pdfs/BORME-A-2026-200-28.pdf",
        "fecha": "2026-10-22",
        "numero": 7,
        "tipo": "tipo",
        "epigrafe": "epigrafe",
        "denominacion": "ACME SERVICIOS SL",
        "denominacionLegible": "Acme Servicios, S.L.",
        "ejercicio": 0,
        "fechaIndicada": "fechaIndicada",
        "detalle": "detalle"
      }
    ],
    "total": 1,
    "pagina": 1
  },
  "anunciosC": {
    "filas": [
      {
        "cve": "cve",
        "fecha": "2026-10-22",
        "tipo": "tipo",
        "departamento": "departamento",
        "titulo": "titulo",
        "urlPdf": "https://www.boe.es/borme/dias/2026/10/22/pdfs/BORME-A-2026-200-28.pdf",
        "paginaInicial": 0,
        "conTexto": true
      }
    ],
    "total": 1,
    "pagina": 1
  },
  "nifsEnAnuncios": [
    {
      "nif": "A58818501",
      "cve": "cve",
      "fecha": "2026-10-22",
      "fragmento": "fragmento",
      "estado": "propuesto",
      "urlPdf": "https://www.boe.es/borme/dias/2026/10/22/pdfs/BORME-A-2026-200-28.pdf"
    }
  ],
  "siguienteCursor": "siguienteCursor"
}
GET/v1/dev/empresas/{empresaId}/marcas

Trademarks held by the company (Spanish Patent and Trademark Office)

Use it when: To know the brands a company owns.

Price

3 euro cents per call served · 120 calls per minute per key (all routes).

Parameters

FieldTypeRequiredValues, limits and default
empresaIdtextoyesCompany id, as returned by the search.. patrón ^\d{1,18}$
paginaenteronoPage number, starting at 1. Alternatively use cursor.. mínimo 1; máximo 10000. default: 1
cursortextonoOpaque cursor of the next page (from siguienteCursor or the X-Jurilia-Siguiente-Cursor header). Replaces pagina.. hasta 100 caracteres

Errors

  • 400 validacion — A field of the request is not valid; `campos` says which. Fix the fields listed in `campos` and call again. An invalid request is never charged.
  • 400 cursor_no_valido — The cursor is not valid or has expired. Use `siguienteCursor` or the `X-Jurilia-Siguiente-Cursor` header exactly as received.
  • 401 no_autenticado — The Authorization header with the API key is missing. Send the key as `Authorization: Bearer <key>`. You create it in the developer console.
  • 401 clave_invalida — The key does not exist or was revoked. Check you copied the whole key and did not revoke it. Create another one in the console if needed.
  • 401 clave_no_es_de_desarrollador — The key belongs to a law firm, not to a developer account. This API only accepts developer-account keys.
  • 402 saldo_insuficiente — There is not enough balance for this call. It was neither served nor charged. Top up your balance in the console (Billing).
  • 403 clave_ip_no_permitida — The key has an IP allow-list and this address is not on it. Add your server address to the allow-list in the console, or remove the restriction.
  • 403 identidad_sin_verificar — The account identity is not verified yet; balance cannot be spent without it. Verify the account identity in the console Settings.
  • 404 no_encontrado — It is not in the loaded gazette data, or it is a person who exercised the right to object or erasure. Check the id. If you only have a name use `GET /v1/dev/empresas/resolver?q=`.
  • 429 demasiadas_peticiones — Too many calls in a row with this key (120 per minute). Wait the seconds in the `Retry-After` header and retry with growing delay. The limit is per key.
  • 500 error_interno — A failure on our side. Nothing is charged. Retry in a few seconds; if it persists, write to us with the time.

Example request

curl

curl "https://api.jurilia.com/v1/dev/empresas/12345/marcas" \
  -H "Authorization: Bearer $JURILIA_API_KEY"

Python

import os
import requests

r = requests.get(
    "https://api.jurilia.com/v1/dev/empresas/12345/marcas",
    headers={"Authorization": f"Bearer {os.environ['JURILIA_API_KEY']}"},
    timeout=30,
)
r.raise_for_status()
print(r.json())

JavaScript

const url = new URL("https://api.jurilia.com/v1/dev/empresas/12345/marcas");
const r = await fetch(url, {
  headers: { Authorization: `Bearer ${process.env.JURILIA_API_KEY}` },
});
if (!r.ok) throw new Error(`HTTP ${r.status}`);
console.log(await r.json());

Example response

Show the full example response
{
  "marcas": [
    {
      "signo": "signo",
      "numero": "numero",
      "urlOficial": "https://consultas2.oepm.es/ceo/jsp/busqueda/consultaAvanzada.xhtml",
      "modalidad": "M",
      "clases": [
        1
      ],
      "estado": "solicitada",
      "estadoPublicado": "estadoPublicado",
      "fechaEstado": "2026-10-22",
      "fechaSolicitud": "2026-10-22",
      "fechaRegistro": "2026-10-22"
    }
  ],
  "total": 1,
  "pagina": 1,
  "paginas": 1,
  "porPagina": 20,
  "porEstado": {
    "solicitada": 0,
    "concedida": 0,
    "caducada": 0,
    "otro": 0
  },
  "actualizadoEn": "2026-10-22T00:00:00.000Z",
  "siguienteCursor": "siguienteCursor"
}
GET/v1/dev/empresas/{empresaId}/boe

Official gazette announcements that mention the company

Use it when: To find official announcements, collective agreements and public grants that mention the company.

Price

3 euro cents per call served · 120 calls per minute per key (all routes).

Parameters

FieldTypeRequiredValues, limits and default
empresaIdtextoyesCompany id, as returned by the search.. patrón ^\d{1,18}$
paginaenteronoPage number, starting at 1. Alternatively use cursor.. mínimo 1; máximo 10000. default: 1
cursortextonoOpaque cursor of the next page (from siguienteCursor or the X-Jurilia-Siguiente-Cursor header). Replaces pagina.. hasta 100 caracteres

Errors

  • 400 validacion — A field of the request is not valid; `campos` says which. Fix the fields listed in `campos` and call again. An invalid request is never charged.
  • 400 cursor_no_valido — The cursor is not valid or has expired. Use `siguienteCursor` or the `X-Jurilia-Siguiente-Cursor` header exactly as received.
  • 401 no_autenticado — The Authorization header with the API key is missing. Send the key as `Authorization: Bearer <key>`. You create it in the developer console.
  • 401 clave_invalida — The key does not exist or was revoked. Check you copied the whole key and did not revoke it. Create another one in the console if needed.
  • 401 clave_no_es_de_desarrollador — The key belongs to a law firm, not to a developer account. This API only accepts developer-account keys.
  • 402 saldo_insuficiente — There is not enough balance for this call. It was neither served nor charged. Top up your balance in the console (Billing).
  • 403 clave_ip_no_permitida — The key has an IP allow-list and this address is not on it. Add your server address to the allow-list in the console, or remove the restriction.
  • 403 identidad_sin_verificar — The account identity is not verified yet; balance cannot be spent without it. Verify the account identity in the console Settings.
  • 404 no_encontrado — It is not in the loaded gazette data, or it is a person who exercised the right to object or erasure. Check the id. If you only have a name use `GET /v1/dev/empresas/resolver?q=`.
  • 429 demasiadas_peticiones — Too many calls in a row with this key (120 per minute). Wait the seconds in the `Retry-After` header and retry with growing delay. The limit is per key.
  • 500 error_interno — A failure on our side. Nothing is charged. Retry in a few seconds; if it persists, write to us with the time.

Example request

curl

curl "https://api.jurilia.com/v1/dev/empresas/12345/boe" \
  -H "Authorization: Bearer $JURILIA_API_KEY"

Python

import os
import requests

r = requests.get(
    "https://api.jurilia.com/v1/dev/empresas/12345/boe",
    headers={"Authorization": f"Bearer {os.environ['JURILIA_API_KEY']}"},
    timeout=30,
)
r.raise_for_status()
print(r.json())

JavaScript

const url = new URL("https://api.jurilia.com/v1/dev/empresas/12345/boe");
const r = await fetch(url, {
  headers: { Authorization: `Bearer ${process.env.JURILIA_API_KEY}` },
});
if (!r.ok) throw new Error(`HTTP ${r.status}`);
console.log(await r.json());

Example response

Show the full example response
{
  "paginacion": {
    "pagina": 1,
    "paginas": 1,
    "total": 1,
    "porPagina": 20
  },
  "filas": [
    {
      "identificador": "BORME-A-2026-200-28",
      "fecha": "2026-10-22",
      "seccion": "III",
      "organo": "organo",
      "titulo": "titulo",
      "tipo": "concurso",
      "urlHtml": "https://www.boe.es/diario_boe/txt.php?id=BOE-B-2026-12345",
      "urlPdf": "https://www.boe.es/borme/dias/2026/10/22/pdfs/BORME-A-2026-200-28.pdf"
    }
  ],
  "cobertura": [
    {
      "seccion": "III",
      "desde": "2026-10-22",
      "hasta": "2026-10-22"
    }
  ],
  "siguienteCursor": "siguienteCursor"
}
GET/v1/dev/empresas/{empresaId}/emisiones

Industrial installations and declared emissions (PRTR)

Use it when: For environmental due diligence.

Price

3 euro cents per call served · 120 calls per minute per key (all routes).

Parameters

FieldTypeRequiredValues, limits and default
empresaIdtextoyesCompany id, as returned by the search.. patrón ^\d{1,18}$
paginaenteronoPage number, starting at 1. Alternatively use cursor.. mínimo 1; máximo 10000. default: 1
cursortextonoOpaque cursor of the next page (from siguienteCursor or the X-Jurilia-Siguiente-Cursor header). Replaces pagina.. hasta 100 caracteres

Errors

  • 400 validacion — A field of the request is not valid; `campos` says which. Fix the fields listed in `campos` and call again. An invalid request is never charged.
  • 400 cursor_no_valido — The cursor is not valid or has expired. Use `siguienteCursor` or the `X-Jurilia-Siguiente-Cursor` header exactly as received.
  • 401 no_autenticado — The Authorization header with the API key is missing. Send the key as `Authorization: Bearer <key>`. You create it in the developer console.
  • 401 clave_invalida — The key does not exist or was revoked. Check you copied the whole key and did not revoke it. Create another one in the console if needed.
  • 401 clave_no_es_de_desarrollador — The key belongs to a law firm, not to a developer account. This API only accepts developer-account keys.
  • 402 saldo_insuficiente — There is not enough balance for this call. It was neither served nor charged. Top up your balance in the console (Billing).
  • 403 clave_ip_no_permitida — The key has an IP allow-list and this address is not on it. Add your server address to the allow-list in the console, or remove the restriction.
  • 403 identidad_sin_verificar — The account identity is not verified yet; balance cannot be spent without it. Verify the account identity in the console Settings.
  • 404 no_encontrado — It is not in the loaded gazette data, or it is a person who exercised the right to object or erasure. Check the id. If you only have a name use `GET /v1/dev/empresas/resolver?q=`.
  • 429 demasiadas_peticiones — Too many calls in a row with this key (120 per minute). Wait the seconds in the `Retry-After` header and retry with growing delay. The limit is per key.
  • 500 error_interno — A failure on our side. Nothing is charged. Retry in a few seconds; if it persists, write to us with the time.

Example request

curl

curl "https://api.jurilia.com/v1/dev/empresas/12345/emisiones" \
  -H "Authorization: Bearer $JURILIA_API_KEY"

Python

import os
import requests

r = requests.get(
    "https://api.jurilia.com/v1/dev/empresas/12345/emisiones",
    headers={"Authorization": f"Bearer {os.environ['JURILIA_API_KEY']}"},
    timeout=30,
)
r.raise_for_status()
print(r.json())

JavaScript

const url = new URL("https://api.jurilia.com/v1/dev/empresas/12345/emisiones");
const r = await fetch(url, {
  headers: { Authorization: `Bearer ${process.env.JURILIA_API_KEY}` },
});
if (!r.ok) throw new Error(`HTTP ${r.status}`);
console.log(await r.json());

Example response

Show the full example response
{
  "paginacion": {
    "pagina": 1,
    "paginas": 1,
    "total": 1,
    "porPagina": 20
  },
  "bloques": [
    {
      "codigoPrtr": 1,
      "nombre": "ANA GARCIA LOPEZ",
      "municipio": "municipio",
      "provincia": "MADRID",
      "anyo": 2001,
      "emisiones": [
        {
          "contaminante": "contaminante",
          "medio": "aire",
          "receptor": "receptor",
          "cantidadKg": "cantidadKg",
          "metodo": "M"
        }
      ]
    }
  ],
  "complejos": [
    {
      "codigoPrtr": 1,
      "nombre": "ANA GARCIA LOPEZ",
      "municipio": "municipio",
      "provincia": "MADRID",
      "actividad": "actividad",
      "anyos": {
        "desde": 0,
        "hasta": 0
      }
    }
  ],
  "totalComplejos": 0,
  "cobertura": {
    "desde": 0,
    "hasta": 0,
    "actualizadoEl": "2026-10-22"
  },
  "siguienteCursor": "siguienteCursor"
}
GET/v1/dev/empresas/{empresaId}/ted

EU public contracts (TED) won by the company

Use it when: To see which European contracts a company has won.

Price

3 euro cents per call served · 120 calls per minute per key (all routes).

Parameters

FieldTypeRequiredValues, limits and default
empresaIdtextoyesCompany id, as returned by the search.. patrón ^\d{1,18}$
paginaenteronoPage number, starting at 1. Alternatively use cursor.. mínimo 1; máximo 10000. default: 1
cursortextonoOpaque cursor of the next page (from siguienteCursor or the X-Jurilia-Siguiente-Cursor header). Replaces pagina.. hasta 100 caracteres

Errors

  • 400 validacion — A field of the request is not valid; `campos` says which. Fix the fields listed in `campos` and call again. An invalid request is never charged.
  • 400 cursor_no_valido — The cursor is not valid or has expired. Use `siguienteCursor` or the `X-Jurilia-Siguiente-Cursor` header exactly as received.
  • 401 no_autenticado — The Authorization header with the API key is missing. Send the key as `Authorization: Bearer <key>`. You create it in the developer console.
  • 401 clave_invalida — The key does not exist or was revoked. Check you copied the whole key and did not revoke it. Create another one in the console if needed.
  • 401 clave_no_es_de_desarrollador — The key belongs to a law firm, not to a developer account. This API only accepts developer-account keys.
  • 402 saldo_insuficiente — There is not enough balance for this call. It was neither served nor charged. Top up your balance in the console (Billing).
  • 403 clave_ip_no_permitida — The key has an IP allow-list and this address is not on it. Add your server address to the allow-list in the console, or remove the restriction.
  • 403 identidad_sin_verificar — The account identity is not verified yet; balance cannot be spent without it. Verify the account identity in the console Settings.
  • 404 no_encontrado — It is not in the loaded gazette data, or it is a person who exercised the right to object or erasure. Check the id. If you only have a name use `GET /v1/dev/empresas/resolver?q=`.
  • 429 demasiadas_peticiones — Too many calls in a row with this key (120 per minute). Wait the seconds in the `Retry-After` header and retry with growing delay. The limit is per key.
  • 500 error_interno — A failure on our side. Nothing is charged. Retry in a few seconds; if it persists, write to us with the time.

Example request

curl

curl "https://api.jurilia.com/v1/dev/empresas/12345/ted" \
  -H "Authorization: Bearer $JURILIA_API_KEY"

Python

import os
import requests

r = requests.get(
    "https://api.jurilia.com/v1/dev/empresas/12345/ted",
    headers={"Authorization": f"Bearer {os.environ['JURILIA_API_KEY']}"},
    timeout=30,
)
r.raise_for_status()
print(r.json())

JavaScript

const url = new URL("https://api.jurilia.com/v1/dev/empresas/12345/ted");
const r = await fetch(url, {
  headers: { Authorization: `Bearer ${process.env.JURILIA_API_KEY}` },
});
if (!r.ok) throw new Error(`HTTP ${r.status}`);
console.log(await r.json());

Example response

Show the full example response
{
  "paginacion": {
    "pagina": 1,
    "paginas": 1,
    "total": 1,
    "porPagina": 20
  },
  "filas": [
    {
      "publicacion": "publicacion",
      "fecha": "2026-10-22",
      "comprador": "comprador",
      "compradorPais": "compradorPais",
      "compradores": 1,
      "objeto": "objeto",
      "cpv": "cpv",
      "importeCentimos": 1250000,
      "moneda": "moneda",
      "adjudicatarios": 1,
      "tamano": "pyme",
      "urlOficial": "https://consultas2.oepm.es/ceo/jsp/busqueda/consultaAvanzada.xhtml"
    }
  ],
  "cobertura": {
    "desde": "2026-10-22",
    "hasta": "2026-10-22"
  },
  "siguienteCursor": "siguienteCursor"
}
GET/v1/dev/empresas/{empresaId}/cargos-en-fecha

Who held office on a given date

Use it when: To know who could sign for the company on the date of a contract.

Price

3 euro cents per call served · 120 calls per minute per key (all routes).

Parameters

FieldTypeRequiredValues, limits and default
empresaIdtextoyesCompany id, as returned by the search.. patrón ^\d{1,18}$
fechafecha (AAAA-MM-DD)yesCalendar date, YYYY-MM-DD.

Errors

  • 400 validacion — A field of the request is not valid; `campos` says which. Fix the fields listed in `campos` and call again. An invalid request is never charged.
  • 401 no_autenticado — The Authorization header with the API key is missing. Send the key as `Authorization: Bearer <key>`. You create it in the developer console.
  • 401 clave_invalida — The key does not exist or was revoked. Check you copied the whole key and did not revoke it. Create another one in the console if needed.
  • 401 clave_no_es_de_desarrollador — The key belongs to a law firm, not to a developer account. This API only accepts developer-account keys.
  • 402 saldo_insuficiente — There is not enough balance for this call. It was neither served nor charged. Top up your balance in the console (Billing).
  • 403 clave_ip_no_permitida — The key has an IP allow-list and this address is not on it. Add your server address to the allow-list in the console, or remove the restriction.
  • 403 identidad_sin_verificar — The account identity is not verified yet; balance cannot be spent without it. Verify the account identity in the console Settings.
  • 404 no_encontrado — It is not in the loaded gazette data, or it is a person who exercised the right to object or erasure. Check the id. If you only have a name use `GET /v1/dev/empresas/resolver?q=`.
  • 429 demasiadas_peticiones — Too many calls in a row with this key (120 per minute). Wait the seconds in the `Retry-After` header and retry with growing delay. The limit is per key.
  • 500 error_interno — A failure on our side. Nothing is charged. Retry in a few seconds; if it persists, write to us with the time.

Example request

curl

curl "https://api.jurilia.com/v1/dev/empresas/12345/cargos-en-fecha?fecha=2026-06-30" \
  -H "Authorization: Bearer $JURILIA_API_KEY"

Python

import os
import requests

r = requests.get(
    "https://api.jurilia.com/v1/dev/empresas/12345/cargos-en-fecha",
    headers={"Authorization": f"Bearer {os.environ['JURILIA_API_KEY']}"},
    params={"fecha":"2026-06-30"},
    timeout=30,
)
r.raise_for_status()
print(r.json())

JavaScript

const url = new URL("https://api.jurilia.com/v1/dev/empresas/12345/cargos-en-fecha");
url.search = new URLSearchParams({"fecha":"2026-06-30"});
const r = await fetch(url, {
  headers: { Authorization: `Bearer ${process.env.JURILIA_API_KEY}` },
});
if (!r.ok) throw new Error(`HTTP ${r.status}`);
console.log(await r.json());

Example response

Show the full example response
{
  "fecha": "2026-10-22",
  "enLaFecha": [
    {
      "cargo": "Adm. Unico",
      "nombre": "ANA GARCIA LOPEZ",
      "nombreLegible": "Ana García López",
      "desde": {
        "fecha": "2026-10-22",
        "fuente": {
          "identificador": "BORME-A-2026-200-28",
          "urlPdf": "https://www.boe.es/borme/dias/2026/10/22/pdfs/BORME-A-2026-200-28.pdf",
          "numero": 7,
          "fecha": "2026-10-22"
        }
      },
      "hasta": {
        "fecha": "2026-10-22",
        "fuente": {
          "identificador": "BORME-A-2026-200-28",
          "urlPdf": "https://www.boe.es/borme/dias/2026/10/22/pdfs/BORME-A-2026-200-28.pdf",
          "numero": 7,
          "fecha": "2026-10-22"
        }
      },
      "finPor": "extincion",
      "enLiquidacion": true
    }
  ],
  "soloCese": [
    {
      "cargo": "Adm. Unico",
      "nombre": "ANA GARCIA LOPEZ",
      "nombreLegible": "Ana García López",
      "desde": {
        "fecha": "2026-10-22",
        "fuente": {
          "identificador": "BORME-A-2026-200-28",
          "urlPdf": "https://www.boe.es/borme/dias/2026/10/22/pdfs/BORME-A-2026-200-28.pdf",
          "numero": 7,
          "fecha": "2026-10-22"
        }
      },
      "hasta": {
        "fecha": "2026-10-22",
        "fuente": {
          "identificador": "BORME-A-2026-200-28",
          "urlPdf": "https://www.boe.es/borme/dias/2026/10/22/pdfs/BORME-A-2026-200-28.pdf",
          "numero": 7,
          "fecha": "2026-10-22"
        }
      },
      "finPor": "extincion",
      "enLiquidacion": true
    }
  ],
  "anteriorALoCargado": true,
  "incompleto": true,
  "cobertura": {
    "desde": "2026-10-22",
    "hasta": "2026-10-22",
    "diasConBoletin": 0,
    "continua": true
  }
}
GET/v1/dev/empresas/{empresaId}/lei

Legal Entity Identifier (LEI) and parent companies

Use it when: For KYC systems that need the LEI and the group structure.

Price

3 euro cents per call served · 120 calls per minute per key (all routes).

Parameters

FieldTypeRequiredValues, limits and default
empresaIdtextoyesCompany id, as returned by the search.. patrón ^\d{1,18}$

Errors

  • 400 validacion — A field of the request is not valid; `campos` says which. Fix the fields listed in `campos` and call again. An invalid request is never charged.
  • 401 no_autenticado — The Authorization header with the API key is missing. Send the key as `Authorization: Bearer <key>`. You create it in the developer console.
  • 401 clave_invalida — The key does not exist or was revoked. Check you copied the whole key and did not revoke it. Create another one in the console if needed.
  • 401 clave_no_es_de_desarrollador — The key belongs to a law firm, not to a developer account. This API only accepts developer-account keys.
  • 402 saldo_insuficiente — There is not enough balance for this call. It was neither served nor charged. Top up your balance in the console (Billing).
  • 403 clave_ip_no_permitida — The key has an IP allow-list and this address is not on it. Add your server address to the allow-list in the console, or remove the restriction.
  • 403 identidad_sin_verificar — The account identity is not verified yet; balance cannot be spent without it. Verify the account identity in the console Settings.
  • 404 no_encontrado — It is not in the loaded gazette data, or it is a person who exercised the right to object or erasure. Check the id. If you only have a name use `GET /v1/dev/empresas/resolver?q=`.
  • 429 demasiadas_peticiones — Too many calls in a row with this key (120 per minute). Wait the seconds in the `Retry-After` header and retry with growing delay. The limit is per key.
  • 500 error_interno — A failure on our side. Nothing is charged. Retry in a few seconds; if it persists, write to us with the time.

Example request

curl

curl "https://api.jurilia.com/v1/dev/empresas/12345/lei" \
  -H "Authorization: Bearer $JURILIA_API_KEY"

Python

import os
import requests

r = requests.get(
    "https://api.jurilia.com/v1/dev/empresas/12345/lei",
    headers={"Authorization": f"Bearer {os.environ['JURILIA_API_KEY']}"},
    timeout=30,
)
r.raise_for_status()
print(r.json())

JavaScript

const url = new URL("https://api.jurilia.com/v1/dev/empresas/12345/lei");
const r = await fetch(url, {
  headers: { Authorization: `Bearer ${process.env.JURILIA_API_KEY}` },
});
if (!r.ok) throw new Error(`HTTP ${r.status}`);
console.log(await r.json());

Example response

Show the full example response
{
  "lei": {
    "lei": "lei",
    "denominacion": "ACME SERVICIOS SL",
    "estadoLei": "estadoLei",
    "estadoEntidad": "estadoEntidad",
    "autoridadRegistro": "autoridadRegistro",
    "identificadorEnRegistro": "identificadorEnRegistro",
    "fechaActualizacion": "2026-10-22",
    "fechaDatos": "2026-10-22",
    "urlOficial": "https://consultas2.oepm.es/ceo/jsp/busqueda/consultaAvanzada.xhtml",
    "matrizDirecta": {
      "lei": "lei",
      "denominacion": "ACME SERVICIOS SL",
      "pais": "pais",
      "empresaId": "12345"
    },
    "matrizUltima": {
      "lei": "lei",
      "denominacion": "ACME SERVICIOS SL",
      "pais": "pais",
      "empresaId": "12345"
    }
  },
  "fuente": {
    "nombre": "ANA GARCIA LOPEZ",
    "licencia": "licencia",
    "urlLicencia": "https://empresas.jurilia.com/",
    "url": "https://www.boe.es/borme/dias/2026/10/22/pdfs/BORME-A-2026-200-28.pdf"
  }
}
GET/v1/dev/empresas/{empresaId}/fondos-ue

EU direct-management funds received

Use it when: To see EU money received since 2007.

Price

3 euro cents per call served · 120 calls per minute per key (all routes).

Parameters

FieldTypeRequiredValues, limits and default
empresaIdtextoyesCompany id, as returned by the search.. patrón ^\d{1,18}$

Errors

  • 400 validacion — A field of the request is not valid; `campos` says which. Fix the fields listed in `campos` and call again. An invalid request is never charged.
  • 401 no_autenticado — The Authorization header with the API key is missing. Send the key as `Authorization: Bearer <key>`. You create it in the developer console.
  • 401 clave_invalida — The key does not exist or was revoked. Check you copied the whole key and did not revoke it. Create another one in the console if needed.
  • 401 clave_no_es_de_desarrollador — The key belongs to a law firm, not to a developer account. This API only accepts developer-account keys.
  • 402 saldo_insuficiente — There is not enough balance for this call. It was neither served nor charged. Top up your balance in the console (Billing).
  • 403 clave_ip_no_permitida — The key has an IP allow-list and this address is not on it. Add your server address to the allow-list in the console, or remove the restriction.
  • 403 identidad_sin_verificar — The account identity is not verified yet; balance cannot be spent without it. Verify the account identity in the console Settings.
  • 404 no_encontrado — It is not in the loaded gazette data, or it is a person who exercised the right to object or erasure. Check the id. If you only have a name use `GET /v1/dev/empresas/resolver?q=`.
  • 429 demasiadas_peticiones — Too many calls in a row with this key (120 per minute). Wait the seconds in the `Retry-After` header and retry with growing delay. The limit is per key.
  • 500 error_interno — A failure on our side. Nothing is charged. Retry in a few seconds; if it persists, write to us with the time.

Example request

curl

curl "https://api.jurilia.com/v1/dev/empresas/12345/fondos-ue" \
  -H "Authorization: Bearer $JURILIA_API_KEY"

Python

import os
import requests

r = requests.get(
    "https://api.jurilia.com/v1/dev/empresas/12345/fondos-ue",
    headers={"Authorization": f"Bearer {os.environ['JURILIA_API_KEY']}"},
    timeout=30,
)
r.raise_for_status()
print(r.json())

JavaScript

const url = new URL("https://api.jurilia.com/v1/dev/empresas/12345/fondos-ue");
const r = await fetch(url, {
  headers: { Authorization: `Bearer ${process.env.JURILIA_API_KEY}` },
});
if (!r.ok) throw new Error(`HTTP ${r.status}`);
console.log(await r.json());

Example response

Show the full example response
{
  "fondos": {
    "filas": [
      {
        "anio": 2007,
        "programa": "programa",
        "centimos": 0,
        "compromisos": 1
      }
    ],
    "totalFilas": 1,
    "totalCentimos": 0,
    "anioDesde": 0,
    "anioHasta": 0,
    "ultimoAnioCargado": 0,
    "fechaDatos": "2026-10-22"
  },
  "fuente": {
    "nombre": "ANA GARCIA LOPEZ",
    "licencia": "licencia",
    "urlLicencia": "https://empresas.jurilia.com/",
    "url": "https://www.boe.es/borme/dias/2026/10/22/pdfs/BORME-A-2026-200-28.pdf"
  }
}
GET/v1/dev/empresas/{empresaId}/registros-cataluna

Entries in the Catalan government registers

Use it when: To check cooperatives, special employment centres, private security and similar registers.

Price

3 euro cents per call served · 120 calls per minute per key (all routes).

Parameters

FieldTypeRequiredValues, limits and default
empresaIdtextoyesCompany id, as returned by the search.. patrón ^\d{1,18}$

Errors

  • 400 validacion — A field of the request is not valid; `campos` says which. Fix the fields listed in `campos` and call again. An invalid request is never charged.
  • 401 no_autenticado — The Authorization header with the API key is missing. Send the key as `Authorization: Bearer <key>`. You create it in the developer console.
  • 401 clave_invalida — The key does not exist or was revoked. Check you copied the whole key and did not revoke it. Create another one in the console if needed.
  • 401 clave_no_es_de_desarrollador — The key belongs to a law firm, not to a developer account. This API only accepts developer-account keys.
  • 402 saldo_insuficiente — There is not enough balance for this call. It was neither served nor charged. Top up your balance in the console (Billing).
  • 403 clave_ip_no_permitida — The key has an IP allow-list and this address is not on it. Add your server address to the allow-list in the console, or remove the restriction.
  • 403 identidad_sin_verificar — The account identity is not verified yet; balance cannot be spent without it. Verify the account identity in the console Settings.
  • 404 no_encontrado — It is not in the loaded gazette data, or it is a person who exercised the right to object or erasure. Check the id. If you only have a name use `GET /v1/dev/empresas/resolver?q=`.
  • 429 demasiadas_peticiones — Too many calls in a row with this key (120 per minute). Wait the seconds in the `Retry-After` header and retry with growing delay. The limit is per key.
  • 500 error_interno — A failure on our side. Nothing is charged. Retry in a few seconds; if it persists, write to us with the time.

Example request

curl

curl "https://api.jurilia.com/v1/dev/empresas/12345/registros-cataluna" \
  -H "Authorization: Bearer $JURILIA_API_KEY"

Python

import os
import requests

r = requests.get(
    "https://api.jurilia.com/v1/dev/empresas/12345/registros-cataluna",
    headers={"Authorization": f"Bearer {os.environ['JURILIA_API_KEY']}"},
    timeout=30,
)
r.raise_for_status()
print(r.json())

JavaScript

const url = new URL("https://api.jurilia.com/v1/dev/empresas/12345/registros-cataluna");
const r = await fetch(url, {
  headers: { Authorization: `Bearer ${process.env.JURILIA_API_KEY}` },
});
if (!r.ok) throw new Error(`HTTP ${r.status}`);
console.log(await r.json());

Example response

Show the full example response
{
  "inscripciones": [
    {
      "registro": "cooperatives",
      "nombreDelRegistro": "nombreDelRegistro",
      "organismo": "organismo",
      "numero": "numero",
      "fecha": "2026-10-22",
      "denominacionPublicada": "denominacionPublicada",
      "urlConjunto": "https://empresas.jurilia.com/",
      "fechaDatos": "2026-10-22"
    }
  ],
  "fuente": {
    "nombre": "ANA GARCIA LOPEZ",
    "licencia": "licencia",
    "urlLicencia": "https://empresas.jurilia.com/",
    "url": "https://www.boe.es/borme/dias/2026/10/22/pdfs/BORME-A-2026-200-28.pdf"
  }
}
GET/v1/dev/empresas/{empresaId}/registro-transparencia-ue

Entries in the EU Transparency Register

Use it when: To check whether the company lobbies the EU institutions.

Price

3 euro cents per call served · 120 calls per minute per key (all routes).

Parameters

FieldTypeRequiredValues, limits and default
empresaIdtextoyesCompany id, as returned by the search.. patrón ^\d{1,18}$

Errors

  • 400 validacion — A field of the request is not valid; `campos` says which. Fix the fields listed in `campos` and call again. An invalid request is never charged.
  • 401 no_autenticado — The Authorization header with the API key is missing. Send the key as `Authorization: Bearer <key>`. You create it in the developer console.
  • 401 clave_invalida — The key does not exist or was revoked. Check you copied the whole key and did not revoke it. Create another one in the console if needed.
  • 401 clave_no_es_de_desarrollador — The key belongs to a law firm, not to a developer account. This API only accepts developer-account keys.
  • 402 saldo_insuficiente — There is not enough balance for this call. It was neither served nor charged. Top up your balance in the console (Billing).
  • 403 clave_ip_no_permitida — The key has an IP allow-list and this address is not on it. Add your server address to the allow-list in the console, or remove the restriction.
  • 403 identidad_sin_verificar — The account identity is not verified yet; balance cannot be spent without it. Verify the account identity in the console Settings.
  • 404 no_encontrado — It is not in the loaded gazette data, or it is a person who exercised the right to object or erasure. Check the id. If you only have a name use `GET /v1/dev/empresas/resolver?q=`.
  • 429 demasiadas_peticiones — Too many calls in a row with this key (120 per minute). Wait the seconds in the `Retry-After` header and retry with growing delay. The limit is per key.
  • 500 error_interno — A failure on our side. Nothing is charged. Retry in a few seconds; if it persists, write to us with the time.

Example request

curl

curl "https://api.jurilia.com/v1/dev/empresas/12345/registro-transparencia-ue" \
  -H "Authorization: Bearer $JURILIA_API_KEY"

Python

import os
import requests

r = requests.get(
    "https://api.jurilia.com/v1/dev/empresas/12345/registro-transparencia-ue",
    headers={"Authorization": f"Bearer {os.environ['JURILIA_API_KEY']}"},
    timeout=30,
)
r.raise_for_status()
print(r.json())

JavaScript

const url = new URL("https://api.jurilia.com/v1/dev/empresas/12345/registro-transparencia-ue");
const r = await fetch(url, {
  headers: { Authorization: `Bearer ${process.env.JURILIA_API_KEY}` },
});
if (!r.ok) throw new Error(`HTTP ${r.status}`);
console.log(await r.json());

Example response

Show the full example response
{
  "registros": [
    {
      "codigo": "ABCD-1234",
      "denominacionPublicada": "denominacionPublicada",
      "categoria": "categoria",
      "fechaRegistro": "2026-10-22",
      "fechaActualizacion": "2026-10-22",
      "costes": {
        "desde": "2026-10-22",
        "hasta": "2026-10-22",
        "minCentimos": 0,
        "maxCentimos": 0
      },
      "acreditados": 0,
      "fechaDatos": "2026-10-22"
    }
  ],
  "fuente": {
    "nombre": "ANA GARCIA LOPEZ",
    "licencia": "licencia",
    "urlLicencia": "https://empresas.jurilia.com/",
    "url": "https://www.boe.es/borme/dias/2026/10/22/pdfs/BORME-A-2026-200-28.pdf"
  }
}
GET/v1/dev/empresas/{empresaId}/vinculos

Companies that share officers with this one

Use it when: To find related companies through shared officers (names are not identities: homonyms are possible).

Price

8 euro cents per call served · 120 calls per minute per key (all routes).

Parameters

FieldTypeRequiredValues, limits and default
empresaIdtextoyesCompany id, as returned by the search.. patrón ^\d{1,18}$
paginaenteronoPage number, starting at 1. Alternatively use cursor.. mínimo 1; máximo 10000. default: 1
cursortextonoOpaque cursor of the next page (from siguienteCursor or the X-Jurilia-Siguiente-Cursor header). Replaces pagina.. hasta 100 caracteres

Errors

  • 400 validacion — A field of the request is not valid; `campos` says which. Fix the fields listed in `campos` and call again. An invalid request is never charged.
  • 400 cursor_no_valido — The cursor is not valid or has expired. Use `siguienteCursor` or the `X-Jurilia-Siguiente-Cursor` header exactly as received.
  • 401 no_autenticado — The Authorization header with the API key is missing. Send the key as `Authorization: Bearer <key>`. You create it in the developer console.
  • 401 clave_invalida — The key does not exist or was revoked. Check you copied the whole key and did not revoke it. Create another one in the console if needed.
  • 401 clave_no_es_de_desarrollador — The key belongs to a law firm, not to a developer account. This API only accepts developer-account keys.
  • 402 saldo_insuficiente — There is not enough balance for this call. It was neither served nor charged. Top up your balance in the console (Billing).
  • 403 clave_ip_no_permitida — The key has an IP allow-list and this address is not on it. Add your server address to the allow-list in the console, or remove the restriction.
  • 403 identidad_sin_verificar — The account identity is not verified yet; balance cannot be spent without it. Verify the account identity in the console Settings.
  • 404 no_encontrado — It is not in the loaded gazette data, or it is a person who exercised the right to object or erasure. Check the id. If you only have a name use `GET /v1/dev/empresas/resolver?q=`.
  • 429 demasiadas_peticiones — Too many calls in a row with this key (120 per minute). Wait the seconds in the `Retry-After` header and retry with growing delay. The limit is per key.
  • 500 error_interno — A failure on our side. Nothing is charged. Retry in a few seconds; if it persists, write to us with the time.

Example request

curl

curl "https://api.jurilia.com/v1/dev/empresas/12345/vinculos" \
  -H "Authorization: Bearer $JURILIA_API_KEY"

Python

import os
import requests

r = requests.get(
    "https://api.jurilia.com/v1/dev/empresas/12345/vinculos",
    headers={"Authorization": f"Bearer {os.environ['JURILIA_API_KEY']}"},
    timeout=30,
)
r.raise_for_status()
print(r.json())

JavaScript

const url = new URL("https://api.jurilia.com/v1/dev/empresas/12345/vinculos");
const r = await fetch(url, {
  headers: { Authorization: `Bearer ${process.env.JURILIA_API_KEY}` },
});
if (!r.ok) throw new Error(`HTTP ${r.status}`);
console.log(await r.json());

Example response

Show the full example response
{
  "pagina": 1,
  "hayMas": true,
  "homonimos": "posibles",
  "filas": [
    {
      "id": "12345",
      "denominacion": "ACME SERVICIOS SL",
      "denominacionLegible": "Acme Servicios, S.L.",
      "provincia": "MADRID",
      "provinciaLegible": "Madrid",
      "personasEnComun": 0,
      "personas": [
        {
          "clave": "clave",
          "slug": "ana-garcia-lopez"
        }
      ],
      "rutaWeb": "rutaWeb"
    }
  ],
  "siguienteCursor": "siguienteCursor"
}
GET/v1/dev/empresas/{empresaId}/genealogia

Transfers, mergers and succession of the company

Use it when: To follow a company through mergers and moves.

Price

8 euro cents per call served · 120 calls per minute per key (all routes).

Parameters

FieldTypeRequiredValues, limits and default
empresaIdtextoyesCompany id, as returned by the search.. patrón ^\d{1,18}$
paginaenteronoPage number, starting at 1. Alternatively use cursor.. mínimo 1; máximo 10000. default: 1
cursortextonoOpaque cursor of the next page (from siguienteCursor or the X-Jurilia-Siguiente-Cursor header). Replaces pagina.. hasta 100 caracteres

Errors

  • 400 validacion — A field of the request is not valid; `campos` says which. Fix the fields listed in `campos` and call again. An invalid request is never charged.
  • 400 cursor_no_valido — The cursor is not valid or has expired. Use `siguienteCursor` or the `X-Jurilia-Siguiente-Cursor` header exactly as received.
  • 401 no_autenticado — The Authorization header with the API key is missing. Send the key as `Authorization: Bearer <key>`. You create it in the developer console.
  • 401 clave_invalida — The key does not exist or was revoked. Check you copied the whole key and did not revoke it. Create another one in the console if needed.
  • 401 clave_no_es_de_desarrollador — The key belongs to a law firm, not to a developer account. This API only accepts developer-account keys.
  • 402 saldo_insuficiente — There is not enough balance for this call. It was neither served nor charged. Top up your balance in the console (Billing).
  • 403 clave_ip_no_permitida — The key has an IP allow-list and this address is not on it. Add your server address to the allow-list in the console, or remove the restriction.
  • 403 identidad_sin_verificar — The account identity is not verified yet; balance cannot be spent without it. Verify the account identity in the console Settings.
  • 404 no_encontrado — It is not in the loaded gazette data, or it is a person who exercised the right to object or erasure. Check the id. If you only have a name use `GET /v1/dev/empresas/resolver?q=`.
  • 429 demasiadas_peticiones — Too many calls in a row with this key (120 per minute). Wait the seconds in the `Retry-After` header and retry with growing delay. The limit is per key.
  • 500 error_interno — A failure on our side. Nothing is charged. Retry in a few seconds; if it persists, write to us with the time.

Example request

curl

curl "https://api.jurilia.com/v1/dev/empresas/12345/genealogia" \
  -H "Authorization: Bearer $JURILIA_API_KEY"

Python

import os
import requests

r = requests.get(
    "https://api.jurilia.com/v1/dev/empresas/12345/genealogia",
    headers={"Authorization": f"Bearer {os.environ['JURILIA_API_KEY']}"},
    timeout=30,
)
r.raise_for_status()
print(r.json())

JavaScript

const url = new URL("https://api.jurilia.com/v1/dev/empresas/12345/genealogia");
const r = await fetch(url, {
  headers: { Authorization: `Bearer ${process.env.JURILIA_API_KEY}` },
});
if (!r.ok) throw new Error(`HTTP ${r.status}`);
console.log(await r.json());

Example response

Show the full example response
{
  "paginacion": {
    "pagina": 1,
    "paginas": 1,
    "total": 1,
    "porPagina": 20
  },
  "procedeDe": {
    "empresaId": "12345",
    "denominacion": "ACME SERVICIOS SL",
    "denominacionLegible": "Acme Servicios, S.L.",
    "provincia": "MADRID",
    "cambioDeDomicilio": {
      "identificador": "BORME-A-2026-200-28",
      "urlPdf": "https://www.boe.es/borme/dias/2026/10/22/pdfs/BORME-A-2026-200-28.pdf",
      "numero": 7,
      "fecha": "2026-10-22",
      "domicilio": "domicilio"
    },
    "ultimaEnElAnterior": "2026-10-22",
    "primeraEnElNuevo": "2026-10-22",
    "mismoNif": true,
    "rutaWeb": "rutaWeb"
  },
  "trasladadaA": {
    "empresaId": "12345",
    "denominacion": "ACME SERVICIOS SL",
    "denominacionLegible": "Acme Servicios, S.L.",
    "provincia": "MADRID",
    "cambioDeDomicilio": {
      "identificador": "BORME-A-2026-200-28",
      "urlPdf": "https://www.boe.es/borme/dias/2026/10/22/pdfs/BORME-A-2026-200-28.pdf",
      "numero": 7,
      "fecha": "2026-10-22",
      "domicilio": "domicilio"
    },
    "ultimaEnElAnterior": "2026-10-22",
    "primeraEnElNuevo": "2026-10-22",
    "mismoNif": true,
    "rutaWeb": "rutaWeb"
  },
  "absorbidaPor": [
    {
      "identificador": "BORME-A-2026-200-28",
      "urlPdf": "https://www.boe.es/borme/dias/2026/10/22/pdfs/BORME-A-2026-200-28.pdf",
      "numero": 7,
      "fecha": "2026-10-22",
      "empresaId": "12345",
      "denominacion": "ACME SERVICIOS SL",
      "denominacionLegible": "Acme Servicios, S.L.",
      "rutaWeb": "rutaWeb"
    }
  ],
  "actos": [
    {
      "identificador": "BORME-A-2026-200-28",
      "urlPdf": "https://www.boe.es/borme/dias/2026/10/22/pdfs/BORME-A-2026-200-28.pdf",
      "numero": 7,
      "fecha": "2026-10-22",
      "tipo": "tipo",
      "detalle": "detalle"
    }
  ],
  "siguienteCursor": "siguienteCursor"
}
GET/v1/dev/empresas/{empresaId}/dinero-publico

Public money: contracts, grants and EU sanctions

Use it when: To see how much public money a company handles, by instrument and never mixed.

Price

8 euro cents per call served · 120 calls per minute per key (all routes).

Parameters

FieldTypeRequiredValues, limits and default
empresaIdtextoyesCompany id, as returned by the search.. patrón ^\d{1,18}$

Errors

  • 400 validacion — A field of the request is not valid; `campos` says which. Fix the fields listed in `campos` and call again. An invalid request is never charged.
  • 401 no_autenticado — The Authorization header with the API key is missing. Send the key as `Authorization: Bearer <key>`. You create it in the developer console.
  • 401 clave_invalida — The key does not exist or was revoked. Check you copied the whole key and did not revoke it. Create another one in the console if needed.
  • 401 clave_no_es_de_desarrollador — The key belongs to a law firm, not to a developer account. This API only accepts developer-account keys.
  • 402 saldo_insuficiente — There is not enough balance for this call. It was neither served nor charged. Top up your balance in the console (Billing).
  • 403 clave_ip_no_permitida — The key has an IP allow-list and this address is not on it. Add your server address to the allow-list in the console, or remove the restriction.
  • 403 identidad_sin_verificar — The account identity is not verified yet; balance cannot be spent without it. Verify the account identity in the console Settings.
  • 404 no_encontrado — It is not in the loaded gazette data, or it is a person who exercised the right to object or erasure. Check the id. If you only have a name use `GET /v1/dev/empresas/resolver?q=`.
  • 429 demasiadas_peticiones — Too many calls in a row with this key (120 per minute). Wait the seconds in the `Retry-After` header and retry with growing delay. The limit is per key.
  • 500 error_interno — A failure on our side. Nothing is charged. Retry in a few seconds; if it persists, write to us with the time.

Example request

curl

curl "https://api.jurilia.com/v1/dev/empresas/12345/dinero-publico" \
  -H "Authorization: Bearer $JURILIA_API_KEY"

Python

import os
import requests

r = requests.get(
    "https://api.jurilia.com/v1/dev/empresas/12345/dinero-publico",
    headers={"Authorization": f"Bearer {os.environ['JURILIA_API_KEY']}"},
    timeout=30,
)
r.raise_for_status()
print(r.json())

JavaScript

const url = new URL("https://api.jurilia.com/v1/dev/empresas/12345/dinero-publico");
const r = await fetch(url, {
  headers: { Authorization: `Bearer ${process.env.JURILIA_API_KEY}` },
});
if (!r.ok) throw new Error(`HTTP ${r.status}`);
console.log(await r.json());

Example response

Show the full example response
{
  "contratos": {
    "filas": [
      {
        "id": "12345",
        "fichero": "perfiles",
        "fecha": "2026-10-22",
        "organo": "organo",
        "objeto": "objeto",
        "importeCentimos": 1250000,
        "urlAnuncio": "https://empresas.jurilia.com/"
      }
    ],
    "menores": {
      "filas": [
        {
          "id": "12345",
          "fichero": "perfiles",
          "fecha": "2026-10-22",
          "organo": "organo",
          "objeto": "objeto",
          "importeCentimos": 1250000,
          "urlAnuncio": "https://empresas.jurilia.com/"
        }
      ],
      "total": 1,
      "sinImporte": 0,
      "sumaCentimosConocidos": 0
    },
    "total": 1,
    "sinImporte": 0,
    "sumaCentimosConocidos": 0,
    "actualizadoEn": "2026-10-22T00:00:00.000Z"
  },
  "subvenciones": {
    "filas": [
      {
        "id": "12345",
        "codigoConcesion": "codigoConcesion",
        "fecha": "2026-10-22",
        "organo": [
          "organo"
        ],
        "convocatoria": "convocatoria",
        "numeroConvocatoria": "numeroConvocatoria",
        "urlConvocatoria": "https://empresas.jurilia.com/",
        "instrumento": "instrumento",
        "importeCentimos": 1250000,
        "ayudaEquivalenteCentimos": 0,
        "urlBasesReguladoras": "https://empresas.jurilia.com/"
      }
    ],
    "total": 1,
    "totalesPorInstrumento": [
      {
        "instrumento": "instrumento",
        "concesiones": 0,
        "importeCentimos": 1250000,
        "ayudaEquivalenteCentimos": 0
      }
    ],
    "desde": "2026-10-22",
    "actualizadoEn": "2026-10-22T00:00:00.000Z"
  },
  "sancionesUe": [
    {
      "denominacionEnLaLista": "denominacionEnLaLista",
      "acto": "acto",
      "fechaDelActo": "2026-10-22",
      "urlDelActo": "https://empresas.jurilia.com/",
      "fechaDeLaLista": "2026-10-22",
      "revisadaEn": "2026-10-22"
    }
  ]
}
GET/v1/dev/empresas/{empresaId}/comparativa

How the company compares with its province and sector

Use it when: To place a company within its province and sector.

Price

8 euro cents per call served · 120 calls per minute per key (all routes).

Parameters

FieldTypeRequiredValues, limits and default
empresaIdtextoyesCompany id, as returned by the search.. patrón ^\d{1,18}$

Errors

  • 400 validacion — A field of the request is not valid; `campos` says which. Fix the fields listed in `campos` and call again. An invalid request is never charged.
  • 401 no_autenticado — The Authorization header with the API key is missing. Send the key as `Authorization: Bearer <key>`. You create it in the developer console.
  • 401 clave_invalida — The key does not exist or was revoked. Check you copied the whole key and did not revoke it. Create another one in the console if needed.
  • 401 clave_no_es_de_desarrollador — The key belongs to a law firm, not to a developer account. This API only accepts developer-account keys.
  • 402 saldo_insuficiente — There is not enough balance for this call. It was neither served nor charged. Top up your balance in the console (Billing).
  • 403 clave_ip_no_permitida — The key has an IP allow-list and this address is not on it. Add your server address to the allow-list in the console, or remove the restriction.
  • 403 identidad_sin_verificar — The account identity is not verified yet; balance cannot be spent without it. Verify the account identity in the console Settings.
  • 404 no_encontrado — It is not in the loaded gazette data, or it is a person who exercised the right to object or erasure. Check the id. If you only have a name use `GET /v1/dev/empresas/resolver?q=`.
  • 429 demasiadas_peticiones — Too many calls in a row with this key (120 per minute). Wait the seconds in the `Retry-After` header and retry with growing delay. The limit is per key.
  • 500 error_interno — A failure on our side. Nothing is charged. Retry in a few seconds; if it persists, write to us with the time.

Example request

curl

curl "https://api.jurilia.com/v1/dev/empresas/12345/comparativa" \
  -H "Authorization: Bearer $JURILIA_API_KEY"

Python

import os
import requests

r = requests.get(
    "https://api.jurilia.com/v1/dev/empresas/12345/comparativa",
    headers={"Authorization": f"Bearer {os.environ['JURILIA_API_KEY']}"},
    timeout=30,
)
r.raise_for_status()
print(r.json())

JavaScript

const url = new URL("https://api.jurilia.com/v1/dev/empresas/12345/comparativa");
const r = await fetch(url, {
  headers: { Authorization: `Bearer ${process.env.JURILIA_API_KEY}` },
});
if (!r.ok) throw new Error(`HTTP ${r.status}`);
console.log(await r.json());

Example response

Show the full example response
{
  "provincia": "MADRID",
  "provinciaLegible": "Madrid",
  "forma": "forma",
  "sector": {
    "codigo": "ABCD-1234",
    "titulo": "titulo"
  },
  "calculadoEn": "2026-10-22",
  "actividadDesde": "2026-10-22",
  "filas": [
    {
      "metrica": "antiguedad",
      "ambito": "provincia",
      "valor": 0,
      "lectura": {
        "metrica": "antiguedad",
        "modo": "mas",
        "porcentaje": 0
      },
      "sociedades": 0
    }
  ]
}
GET/v1/dev/empresas/{empresaId}/parecidas

Similar companies, by objective facts in common

Use it when: To find comparable companies.

Price

8 euro cents per call served · 120 calls per minute per key (all routes).

Parameters

FieldTypeRequiredValues, limits and default
empresaIdtextoyesCompany id, as returned by the search.. patrón ^\d{1,18}$

Errors

  • 400 validacion — A field of the request is not valid; `campos` says which. Fix the fields listed in `campos` and call again. An invalid request is never charged.
  • 401 no_autenticado — The Authorization header with the API key is missing. Send the key as `Authorization: Bearer <key>`. You create it in the developer console.
  • 401 clave_invalida — The key does not exist or was revoked. Check you copied the whole key and did not revoke it. Create another one in the console if needed.
  • 401 clave_no_es_de_desarrollador — The key belongs to a law firm, not to a developer account. This API only accepts developer-account keys.
  • 402 saldo_insuficiente — There is not enough balance for this call. It was neither served nor charged. Top up your balance in the console (Billing).
  • 403 clave_ip_no_permitida — The key has an IP allow-list and this address is not on it. Add your server address to the allow-list in the console, or remove the restriction.
  • 403 identidad_sin_verificar — The account identity is not verified yet; balance cannot be spent without it. Verify the account identity in the console Settings.
  • 404 no_encontrado — It is not in the loaded gazette data, or it is a person who exercised the right to object or erasure. Check the id. If you only have a name use `GET /v1/dev/empresas/resolver?q=`.
  • 429 demasiadas_peticiones — Too many calls in a row with this key (120 per minute). Wait the seconds in the `Retry-After` header and retry with growing delay. The limit is per key.
  • 500 error_interno — A failure on our side. Nothing is charged. Retry in a few seconds; if it persists, write to us with the time.

Example request

curl

curl "https://api.jurilia.com/v1/dev/empresas/12345/parecidas" \
  -H "Authorization: Bearer $JURILIA_API_KEY"

Python

import os
import requests

r = requests.get(
    "https://api.jurilia.com/v1/dev/empresas/12345/parecidas",
    headers={"Authorization": f"Bearer {os.environ['JURILIA_API_KEY']}"},
    timeout=30,
)
r.raise_for_status()
print(r.json())

JavaScript

const url = new URL("https://api.jurilia.com/v1/dev/empresas/12345/parecidas");
const r = await fetch(url, {
  headers: { Authorization: `Bearer ${process.env.JURILIA_API_KEY}` },
});
if (!r.ok) throw new Error(`HTTP ${r.status}`);
console.log(await r.json());

Example response

Show the full example response
{
  "parecidas": [
    {
      "id": "12345",
      "denominacion": "ACME SERVICIOS SL",
      "denominacionLegible": "Acme Servicios, S.L.",
      "provincia": "MADRID",
      "provinciaLegible": "Madrid",
      "rutaWeb": "rutaWeb",
      "razones": [
        {
          "tipo": "domicilio",
          "domicilioPublicadoEn": "2026-10-22"
        }
      ]
    }
  ]
}
GET/v1/dev/empresas/{empresaId}/cronologia

Everything known about the company on a single timeline

Use it when: One timeline with registry acts, contracts, grants, sanctions and gazette announcements.

Price

8 euro cents per call served · 120 calls per minute per key (all routes).

Parameters

FieldTypeRequiredValues, limits and default
empresaIdtextoyesCompany id, as returned by the search.. patrón ^\d{1,18}$
tipotextonoType filter, comma separated.. hasta 400 caracteres
aniotextonoYear (YYYY).. hasta 4 caracteres
ordentextonoreciente (default) or antiguo.. hasta 10 caracteres. default: reciente
paginatextonoPage number, starting at 1. Alternatively use cursor.. hasta 6 caracteres. default: 1
cursortextonoOpaque cursor of the next page (from siguienteCursor or the X-Jurilia-Siguiente-Cursor header). Replaces pagina.. hasta 100 caracteres

Errors

  • 400 validacion — A field of the request is not valid; `campos` says which. Fix the fields listed in `campos` and call again. An invalid request is never charged.
  • 400 cursor_no_valido — The cursor is not valid or has expired. Use `siguienteCursor` or the `X-Jurilia-Siguiente-Cursor` header exactly as received.
  • 401 no_autenticado — The Authorization header with the API key is missing. Send the key as `Authorization: Bearer <key>`. You create it in the developer console.
  • 401 clave_invalida — The key does not exist or was revoked. Check you copied the whole key and did not revoke it. Create another one in the console if needed.
  • 401 clave_no_es_de_desarrollador — The key belongs to a law firm, not to a developer account. This API only accepts developer-account keys.
  • 402 saldo_insuficiente — There is not enough balance for this call. It was neither served nor charged. Top up your balance in the console (Billing).
  • 403 clave_ip_no_permitida — The key has an IP allow-list and this address is not on it. Add your server address to the allow-list in the console, or remove the restriction.
  • 403 identidad_sin_verificar — The account identity is not verified yet; balance cannot be spent without it. Verify the account identity in the console Settings.
  • 404 no_encontrado — It is not in the loaded gazette data, or it is a person who exercised the right to object or erasure. Check the id. If you only have a name use `GET /v1/dev/empresas/resolver?q=`.
  • 429 demasiadas_peticiones — Too many calls in a row with this key (120 per minute). Wait the seconds in the `Retry-After` header and retry with growing delay. The limit is per key.
  • 500 error_interno — A failure on our side. Nothing is charged. Retry in a few seconds; if it persists, write to us with the time.

Example request

curl

curl "https://api.jurilia.com/v1/dev/empresas/12345/cronologia" \
  -H "Authorization: Bearer $JURILIA_API_KEY"

Python

import os
import requests

r = requests.get(
    "https://api.jurilia.com/v1/dev/empresas/12345/cronologia",
    headers={"Authorization": f"Bearer {os.environ['JURILIA_API_KEY']}"},
    timeout=30,
)
r.raise_for_status()
print(r.json())

JavaScript

const url = new URL("https://api.jurilia.com/v1/dev/empresas/12345/cronologia");
const r = await fetch(url, {
  headers: { Authorization: `Bearer ${process.env.JURILIA_API_KEY}` },
});
if (!r.ok) throw new Error(`HTTP ${r.status}`);
console.log(await r.json());

Example response

Show the full example response
{
  "resultado": "empresario_individual"
}
GET/v1/dev/empresas/{empresaId}/ficha

Full company profile with every datum cited to its gazette

Use it when: The whole profile in one call when you want every field; for a lighter call use the sections or `incluir=` on the basic profile.

Price

8 euro cents per call served · 120 calls per minute per key (all routes).

Parameters

FieldTypeRequiredValues, limits and default
empresaIdtextoyesCompany id, as returned by the search.. patrón ^\d{1,18}$
idiomatextonoLanguage of the texts the server writes (es, en, fr, de, pt, it). Names and figures are never translated.. uno de: es, en, fr, de, pt, it. default: es
paginaenteronoPage number, starting at 1. Alternatively use cursor.. mínimo 1; máximo 10000. default: 1
paginaCargosVigentesenteronoPage of the current officers list (20 per page).. mínimo 1; máximo 10000. default: 1
paginaCargosCesadosenteronoPage of the former officers list (20 per page).. mínimo 1; máximo 10000. default: 1
paginaCapitalenteronoPage of the capital history (10 per page).. mínimo 1; máximo 10000. default: 1
paginaDomiciliosenteronoPage of the address history (10 per page).. mínimo 1; máximo 10000. default: 1

Errors

  • 400 validacion — A field of the request is not valid; `campos` says which. Fix the fields listed in `campos` and call again. An invalid request is never charged.
  • 401 no_autenticado — The Authorization header with the API key is missing. Send the key as `Authorization: Bearer <key>`. You create it in the developer console.
  • 401 clave_invalida — The key does not exist or was revoked. Check you copied the whole key and did not revoke it. Create another one in the console if needed.
  • 401 clave_no_es_de_desarrollador — The key belongs to a law firm, not to a developer account. This API only accepts developer-account keys.
  • 402 saldo_insuficiente — There is not enough balance for this call. It was neither served nor charged. Top up your balance in the console (Billing).
  • 403 clave_ip_no_permitida — The key has an IP allow-list and this address is not on it. Add your server address to the allow-list in the console, or remove the restriction.
  • 403 identidad_sin_verificar — The account identity is not verified yet; balance cannot be spent without it. Verify the account identity in the console Settings.
  • 404 no_encontrado — It is not in the loaded gazette data, or it is a person who exercised the right to object or erasure. Check the id. If you only have a name use `GET /v1/dev/empresas/resolver?q=`.
  • 429 demasiadas_peticiones — Too many calls in a row with this key (120 per minute). Wait the seconds in the `Retry-After` header and retry with growing delay. The limit is per key.
  • 500 error_interno — A failure on our side. Nothing is charged. Retry in a few seconds; if it persists, write to us with the time.

Example request

curl

curl "https://api.jurilia.com/v1/dev/empresas/12345/ficha" \
  -H "Authorization: Bearer $JURILIA_API_KEY"

Python

import os
import requests

r = requests.get(
    "https://api.jurilia.com/v1/dev/empresas/12345/ficha",
    headers={"Authorization": f"Bearer {os.environ['JURILIA_API_KEY']}"},
    timeout=30,
)
r.raise_for_status()
print(r.json())

JavaScript

const url = new URL("https://api.jurilia.com/v1/dev/empresas/12345/ficha");
const r = await fetch(url, {
  headers: { Authorization: `Bearer ${process.env.JURILIA_API_KEY}` },
});
if (!r.ok) throw new Error(`HTTP ${r.status}`);
console.log(await r.json());

Example response

Show the full example response
{
  "empresa": {
    "id": "12345",
    "denominacion": "ACME SERVICIOS SL",
    "denominacionLegible": "Acme Servicios, S.L.",
    "provincia": "MADRID",
    "provinciaLegible": "Madrid",
    "provinciaSlug": "madrid",
    "hoja": "M-123456",
    "titular": "sociedad",
    "primeraPublicacion": "2026-10-22",
    "ultimaPublicacion": "2026-10-22",
    "concursalPublicadoEn": "2026-10-22",
    "disolucionPublicadaEn": "2026-10-22",
    "extincionPublicadaEn": "2026-10-22",
    "rutaWeb": "rutaWeb"
  },
  "situacion": {
    "situacion": "activa",
    "hito": {
      "tipo": "tipo",
      "fecha": "2026-10-22",
      "numero": 7,
      "fuente": {
        "identificador": "BORME-A-2026-200-28",
        "urlPdf": "https://www.boe.es/borme/dias/2026/10/22/pdfs/BORME-A-2026-200-28.pdf",
        "numero": 7,
        "fecha": "2026-10-22"
      }
    },
    "concursal": {
      "tipo": "tipo",
      "fecha": "2026-10-22",
      "numero": 7,
      "fuente": {
        "identificador": "BORME-A-2026-200-28",
        "urlPdf": "https://www.boe.es/borme/dias/2026/10/22/pdfs/BORME-A-2026-200-28.pdf",
        "numero": 7,
        "fecha": "2026-10-22"
      }
    }
  },
  "constitucion": {
    "identificador": "BORME-A-2026-200-28",
    "urlPdf": "https://www.boe.es/borme/dias/2026/10/22/pdfs/BORME-A-2026-200-28.pdf",
    "numero": 7,
    "fecha": "2026-10-22",
    "comienzoOperaciones": "comienzoOperaciones",
    "fechaInscripcion": "2026-10-22"
  },
  "objetoSocial": {
    "identificador": "BORME-A-2026-200-28",
    "urlPdf": "https://www.boe.es/borme/dias/2026/10/22/pdfs/BORME-A-2026-200-28.pdf",
    "numero": 7,
    "fecha": "2026-10-22",
    "objeto": "objeto"
  },
  "datosRegistrales": {
    "identificador": "BORME-A-2026-200-28",
    "urlPdf": "https://www.boe.es/borme/dias/2026/10/22/pdfs/BORME-A-2026-200-28.pdf",
    "numero": 7,
    "fecha": "2026-10-22",
    "texto": "texto"
  },
  "capitalActual": {
    "identificador": "BORME-A-2026-200-28",
    "urlPdf": "https://www.boe.es/borme/dias/2026/10/22/pdfs/BORME-A-2026-200-28.pdf",
    "numero": 7,
    "fecha": "2026-10-22",
    "centimos": 0
  },
  "denominaciones": [
    {
      "denominacion": "ACME SERVICIOS SL",
      "denominacionLegible": "Acme Servicios, S.L.",
      "primera": "2026-10-22",
      "ultima": "2026-10-22",
      "cambio": {
        "nueva": "nueva",
        "fecha": "2026-10-22",
        "fuente": {
          "identificador": "BORME-A-2026-200-28",
          "urlPdf": "https://www.boe.es/borme/dias/2026/10/22/pdfs/BORME-A-2026-200-28.pdf",
          "numero": 7,
          "fecha": "2026-10-22"
        }
      }
    }
  ],
  "hechos": [
    {
      "identificador": "BORME-A-2026-200-28",
      "urlPdf": "https://www.boe.es/borme/dias/2026/10/22/pdfs/BORME-A-2026-200-28.pdf",
      "numero": 7,
      "fecha": "2026-10-22",
      "tipo": "tipo",
      "detalle": "detalle"
    }
  ],
  "cargos": {
    "vigentes": [
      {
        "cargo": "Adm. Unico",
        "nombre": "ANA GARCIA LOPEZ",
        "nombreLegible": "Ana García López",
        "desde": {
          "fecha": "2026-10-22",
          "fuente": {
            "identificador": "BORME-A-2026-200-28",
            "urlPdf": "https://www.boe.es/borme/dias/2026/10/22/pdfs/BORME-A-2026-200-28.pdf",
            "numero": 7,
            "fecha": "2026-10-22"
          }
        },
        "hasta": {
          "fecha": "2026-10-22",
          "fuente": {
            "identificador": "BORME-A-2026-200-28",
            "urlPdf": "https://www.boe.es/borme/dias/2026/10/22/pdfs/BORME-A-2026-200-28.pdf",
            "numero": 7,
            "fecha": "2026-10-22"
          }
        },
        "finPor": "extincion",
        "enLiquidacion": true
      }
    ],
    "cesados": [
      {
        "cargo": "Adm. Unico",
        "nombre": "ANA GARCIA LOPEZ",
        "nombreLegible": "Ana García López",
        "desde": {
          "fecha": "2026-10-22",
          "fuente": {
            "identificador": "BORME-A-2026-200-28",
            "urlPdf": "https://www.boe.es/borme/dias/2026/10/22/pdfs/BORME-A-2026-200-28.pdf",
            "numero": 7,
            "fecha": "2026-10-22"
          }
        },
        "hasta": {
          "fecha": "2026-10-22",
          "fuente": {
            "identificador": "BORME-A-2026-200-28",
            "urlPdf": "https://www.boe.es/borme/dias/2026/10/22/pdfs/BORME-A-2026-200-28.pdf",
            "numero": 7,
            "fecha": "2026-10-22"
          }
        },
        "finPor": "extincion",
        "enLiquidacion": true
      }
    ],
    "recortados": true
  },
  "capital": [
    {
      "identificador": "BORME-A-2026-200-28",
      "urlPdf": "https://www.boe.es/borme/dias/2026/10/22/pdfs/BORME-A-2026-200-28.pdf",
      "numero": 7,
      "fecha": "2026-10-22",
      "tipo": "tipo",
      "importeCentimos": 1250000,
      "resultanteCentimos": 0
    }
  ],
  "domicilios": [
    {
      "identificador": "BORME-A-2026-200-28",
      "urlPdf": "https://www.boe.es/borme/dias/2026/10/22/pdfs/BORME-A-2026-200-28.pdf",
      "numero": 7,
      "fecha": "2026-10-22",
      "tipo": "tipo",
      "domicilio": "domicilio"
    }
  ],
  "domicilioActual": {
    "identificador": "BORME-A-2026-200-28",
    "urlPdf": "https://www.boe.es/borme/dias/2026/10/22/pdfs/BORME-A-2026-200-28.pdf",
    "numero": 7,
    "fecha": "2026-10-22",
    "domicilio": "domicilio"
  },
  "inscripciones": [
    {
      "identificador": "BORME-A-2026-200-28",
      "urlPdf": "https://www.boe.es/borme/dias/2026/10/22/pdfs/BORME-A-2026-200-28.pdf",
      "numero": 7,
      "fecha": "2026-10-22",
      "provincia": "MADRID",
      "datosRegistrales": "datosRegistrales",
      "fechaInscripcion": "2026-10-22",
      "actos": [
        {
          "tipo": "tipo",
          "etiqueta": "etiqueta",
          "capitalCentimos": 300000,
          "capitalResultanteCentimos": 0,
          "domicilio": "domicilio",
          "objeto": "objeto",
          "comienzoOperaciones": "comienzoOperaciones",
          "detalle": "detalle",
          "cargos": [
            {
              "cargo": "Adm. Unico",
              "nombre": "ANA GARCIA LOPEZ"
            }
          ]
        }
      ]
    }
  ],
  "paginacion": {
    "pagina": 1,
    "paginas": 1,
    "total": 1
  },
  "ultimaInscripcion": {
    "identificador": "BORME-A-2026-200-28",
    "urlPdf": "https://www.boe.es/borme/dias/2026/10/22/pdfs/BORME-A-2026-200-28.pdf",
    "numero": 7,
    "fecha": "2026-10-22",
    "actos": [
      {
        "tipo": "tipo",
        "etiqueta": "etiqueta"
      }
    ]
  },
  "listas": {
    "cargosVigentes": {
      "pagina": 1,
      "paginas": 1,
      "total": 1,
      "porPagina": 20
    },
    "cargosCesados": {
      "pagina": 1,
      "paginas": 1,
      "total": 1,
      "porPagina": 20
    },
    "capital": {
      "pagina": 1,
      "paginas": 1,
      "total": 1,
      "porPagina": 20
    },
    "domicilios": {
      "pagina": 1,
      "paginas": 1,
      "total": 1,
      "porPagina": 20
    }
  },
  "enlaceDeudoresAeat": {
    "url": "https://www.boe.es/borme/dias/2026/10/22/pdfs/BORME-A-2026-200-28.pdf",
    "publicadoEl": "2026-10-22",
    "disponibleHasta": "2026-10-22"
  },
  "textos": {
    "idioma": "es",
    "resumen": "resumen",
    "respuestaDirecta": {
      "actividad": {
        "texto": "texto",
        "fuente": {
          "identificador": "BORME-A-2026-200-28",
          "urlPdf": "https://www.boe.es/borme/dias/2026/10/22/pdfs/BORME-A-2026-200-28.pdf",
          "numero": 7,
          "fecha": "2026-10-22"
        }
      },
      "administracion": {
        "texto": "texto",
        "cargos": [
          {
            "cargo": "Adm. Unico",
            "nombre": "ANA GARCIA LOPEZ",
            "fuente": {
              "identificador": "BORME-A-2026-200-28",
              "urlPdf": "https://www.boe.es/borme/dias/2026/10/22/pdfs/BORME-A-2026-200-28.pdf",
              "numero": 7,
              "fecha": "2026-10-22"
            }
          }
        ]
      },
      "constitucion": {
        "texto": "texto",
        "fuente": {
          "identificador": "BORME-A-2026-200-28",
          "urlPdf": "https://www.boe.es/borme/dias/2026/10/22/pdfs/BORME-A-2026-200-28.pdf",
          "numero": 7,
          "fecha": "2026-10-22"
        }
      },
      "domicilio": {
        "texto": "texto",
        "fuente": {
          "identificador": "BORME-A-2026-200-28",
          "urlPdf": "https://www.boe.es/borme/dias/2026/10/22/pdfs/BORME-A-2026-200-28.pdf",
          "numero": 7,
          "fecha": "2026-10-22"
        }
      },
      "capital": {
        "texto": "texto",
        "fuente": {
          "identificador": "BORME-A-2026-200-28",
          "urlPdf": "https://www.boe.es/borme/dias/2026/10/22/pdfs/BORME-A-2026-200-28.pdf",
          "numero": 7,
          "fecha": "2026-10-22"
        }
      }
    },
    "preguntas": [
      {
        "clave": "administra",
        "pregunta": "pregunta",
        "respuesta": "respuesta",
        "fuentes": [
          {
            "identificador": "BORME-A-2026-200-28",
            "urlPdf": "https://www.boe.es/borme/dias/2026/10/22/pdfs/BORME-A-2026-200-28.pdf",
            "numero": 7,
            "fecha": "2026-10-22"
          }
        ]
      }
    ],
    "dineroPublico": {
      "nif": "A58818501",
      "subvenciones": "subvenciones",
      "contratos": "contratos"
    }
  }
}
GET/v1/dev/empresas/{empresaId}/resumen

Plain-language summary of a company, facts only

Use it when: A paragraph you can show to a user as is; it is built from published facts only and never labels anyone.

Price

8 euro cents per call served · 120 calls per minute per key (all routes).

Parameters

FieldTypeRequiredValues, limits and default
empresaIdtextoyesCompany id, as returned by the search.. patrón ^\d{1,18}$
idiomatextonoLanguage of the texts the server writes (es, en, fr, de, pt, it). Names and figures are never translated.. uno de: es, en, fr, de, pt, it. default: es

Errors

  • 400 validacion — A field of the request is not valid; `campos` says which. Fix the fields listed in `campos` and call again. An invalid request is never charged.
  • 401 no_autenticado — The Authorization header with the API key is missing. Send the key as `Authorization: Bearer <key>`. You create it in the developer console.
  • 401 clave_invalida — The key does not exist or was revoked. Check you copied the whole key and did not revoke it. Create another one in the console if needed.
  • 401 clave_no_es_de_desarrollador — The key belongs to a law firm, not to a developer account. This API only accepts developer-account keys.
  • 402 saldo_insuficiente — There is not enough balance for this call. It was neither served nor charged. Top up your balance in the console (Billing).
  • 403 clave_ip_no_permitida — The key has an IP allow-list and this address is not on it. Add your server address to the allow-list in the console, or remove the restriction.
  • 403 identidad_sin_verificar — The account identity is not verified yet; balance cannot be spent without it. Verify the account identity in the console Settings.
  • 404 no_encontrado — It is not in the loaded gazette data, or it is a person who exercised the right to object or erasure. Check the id. If you only have a name use `GET /v1/dev/empresas/resolver?q=`.
  • 429 demasiadas_peticiones — Too many calls in a row with this key (120 per minute). Wait the seconds in the `Retry-After` header and retry with growing delay. The limit is per key.
  • 500 error_interno — A failure on our side. Nothing is charged. Retry in a few seconds; if it persists, write to us with the time.

Example request

curl

curl "https://api.jurilia.com/v1/dev/empresas/12345/resumen" \
  -H "Authorization: Bearer $JURILIA_API_KEY"

Python

import os
import requests

r = requests.get(
    "https://api.jurilia.com/v1/dev/empresas/12345/resumen",
    headers={"Authorization": f"Bearer {os.environ['JURILIA_API_KEY']}"},
    timeout=30,
)
r.raise_for_status()
print(r.json())

JavaScript

const url = new URL("https://api.jurilia.com/v1/dev/empresas/12345/resumen");
const r = await fetch(url, {
  headers: { Authorization: `Bearer ${process.env.JURILIA_API_KEY}` },
});
if (!r.ok) throw new Error(`HTTP ${r.status}`);
console.log(await r.json());

Example response

Show the full example response
{
  "empresaId": "12345",
  "denominacion": "ACME SERVICIOS SL",
  "idioma": "es",
  "resumen": "resumen",
  "respuestaDirecta": {
    "actividad": {
      "texto": "texto",
      "fuente": {
        "identificador": "BORME-A-2026-200-28",
        "urlPdf": "https://www.boe.es/borme/dias/2026/10/22/pdfs/BORME-A-2026-200-28.pdf",
        "numero": 7,
        "fecha": "2026-10-22"
      }
    },
    "administracion": {
      "texto": "texto",
      "cargos": [
        {
          "cargo": "Adm. Unico",
          "nombre": "ANA GARCIA LOPEZ",
          "fuente": {
            "identificador": "BORME-A-2026-200-28",
            "urlPdf": "https://www.boe.es/borme/dias/2026/10/22/pdfs/BORME-A-2026-200-28.pdf",
            "numero": 7,
            "fecha": "2026-10-22"
          }
        }
      ]
    },
    "constitucion": {
      "texto": "texto",
      "fuente": {
        "identificador": "BORME-A-2026-200-28",
        "urlPdf": "https://www.boe.es/borme/dias/2026/10/22/pdfs/BORME-A-2026-200-28.pdf",
        "numero": 7,
        "fecha": "2026-10-22"
      }
    },
    "domicilio": {
      "texto": "texto",
      "fuente": {
        "identificador": "BORME-A-2026-200-28",
        "urlPdf": "https://www.boe.es/borme/dias/2026/10/22/pdfs/BORME-A-2026-200-28.pdf",
        "numero": 7,
        "fecha": "2026-10-22"
      }
    },
    "capital": {
      "texto": "texto",
      "fuente": {
        "identificador": "BORME-A-2026-200-28",
        "urlPdf": "https://www.boe.es/borme/dias/2026/10/22/pdfs/BORME-A-2026-200-28.pdf",
        "numero": 7,
        "fecha": "2026-10-22"
      }
    }
  },
  "ultimaInscripcion": {
    "identificador": "BORME-A-2026-200-28",
    "urlPdf": "https://www.boe.es/borme/dias/2026/10/22/pdfs/BORME-A-2026-200-28.pdf",
    "numero": 7,
    "fecha": "2026-10-22",
    "actos": [
      {
        "tipo": "tipo",
        "etiqueta": "etiqueta"
      }
    ]
  },
  "soloHechosPublicados": true
}
POST/v1/dev/empresas/{empresaId}/vies

Is the company registered for intra-EU trade (VIES)?

Use it when: Before invoicing a company in another EU country.

Price

8 euro cents per call served · 120 calls per minute per key (all routes).

Parameters

FieldTypeRequiredValues, limits and default
empresaIdtextoyesCompany id, as returned by the search.. patrón ^\d{1,18}$

Errors

  • 400 validacion — A field of the request is not valid; `campos` says which. Fix the fields listed in `campos` and call again. An invalid request is never charged.
  • 401 no_autenticado — The Authorization header with the API key is missing. Send the key as `Authorization: Bearer <key>`. You create it in the developer console.
  • 401 clave_invalida — The key does not exist or was revoked. Check you copied the whole key and did not revoke it. Create another one in the console if needed.
  • 401 clave_no_es_de_desarrollador — The key belongs to a law firm, not to a developer account. This API only accepts developer-account keys.
  • 402 saldo_insuficiente — There is not enough balance for this call. It was neither served nor charged. Top up your balance in the console (Billing).
  • 403 clave_ip_no_permitida — The key has an IP allow-list and this address is not on it. Add your server address to the allow-list in the console, or remove the restriction.
  • 403 identidad_sin_verificar — The account identity is not verified yet; balance cannot be spent without it. Verify the account identity in the console Settings.
  • 404 no_encontrado — It is not in the loaded gazette data, or it is a person who exercised the right to object or erasure. Check the id. If you only have a name use `GET /v1/dev/empresas/resolver?q=`.
  • 429 demasiadas_peticiones — Too many calls in a row with this key (120 per minute). Wait the seconds in the `Retry-After` header and retry with growing delay. The limit is per key.
  • 500 error_interno — A failure on our side. Nothing is charged. Retry in a few seconds; if it persists, write to us with the time.

Example request

curl

curl -X POST "https://api.jurilia.com/v1/dev/empresas/12345/vies" \
  -H "Authorization: Bearer $JURILIA_API_KEY"

Python

import os
import requests

r = requests.post(
    "https://api.jurilia.com/v1/dev/empresas/12345/vies",
    headers={"Authorization": f"Bearer {os.environ['JURILIA_API_KEY']}"},
    timeout=30,
)
r.raise_for_status()
print(r.json())

JavaScript

const url = new URL("https://api.jurilia.com/v1/dev/empresas/12345/vies");
const r = await fetch(url, {
  method: "POST",
  headers: { Authorization: `Bearer ${process.env.JURILIA_API_KEY}` },
});
if (!r.ok) throw new Error(`HTTP ${r.status}`);
console.log(await r.json());

Example response

Show the full example response
{
  "tipo": "alta",
  "numero": "numero",
  "consultadoEn": "2026-10-22T08:00:00.000Z",
  "nombre": "ANA GARCIA LOPEZ",
  "direccion": "direccion",
  "urlConsulta": "https://empresas.jurilia.com/"
}
GET/v1/dev/empresas/{empresaId}/noticias

News published about the company

Use it when: To show the news written about the company.

Price

3 euro cents per call served · 120 calls per minute per key (all routes).

Parameters

FieldTypeRequiredValues, limits and default
empresaIdtextoyesCompany id, as returned by the search.. patrón ^\d{1,18}$
idiomatextonoLanguage of the texts the server writes (es, en, fr, de, pt, it). Names and figures are never translated.. uno de: es, en, fr, de, pt, it. default: es

Errors

  • 400 validacion — A field of the request is not valid; `campos` says which. Fix the fields listed in `campos` and call again. An invalid request is never charged.
  • 401 no_autenticado — The Authorization header with the API key is missing. Send the key as `Authorization: Bearer <key>`. You create it in the developer console.
  • 401 clave_invalida — The key does not exist or was revoked. Check you copied the whole key and did not revoke it. Create another one in the console if needed.
  • 401 clave_no_es_de_desarrollador — The key belongs to a law firm, not to a developer account. This API only accepts developer-account keys.
  • 402 saldo_insuficiente — There is not enough balance for this call. It was neither served nor charged. Top up your balance in the console (Billing).
  • 403 clave_ip_no_permitida — The key has an IP allow-list and this address is not on it. Add your server address to the allow-list in the console, or remove the restriction.
  • 403 identidad_sin_verificar — The account identity is not verified yet; balance cannot be spent without it. Verify the account identity in the console Settings.
  • 429 demasiadas_peticiones — Too many calls in a row with this key (120 per minute). Wait the seconds in the `Retry-After` header and retry with growing delay. The limit is per key.
  • 500 error_interno — A failure on our side. Nothing is charged. Retry in a few seconds; if it persists, write to us with the time.

Example request

curl

curl "https://api.jurilia.com/v1/dev/empresas/12345/noticias" \
  -H "Authorization: Bearer $JURILIA_API_KEY"

Python

import os
import requests

r = requests.get(
    "https://api.jurilia.com/v1/dev/empresas/12345/noticias",
    headers={"Authorization": f"Bearer {os.environ['JURILIA_API_KEY']}"},
    timeout=30,
)
r.raise_for_status()
print(r.json())

JavaScript

const url = new URL("https://api.jurilia.com/v1/dev/empresas/12345/noticias");
const r = await fetch(url, {
  headers: { Authorization: `Bearer ${process.env.JURILIA_API_KEY}` },
});
if (!r.ok) throw new Error(`HTTP ${r.status}`);
console.log(await r.json());

Example response

Show the full example response
{
  "idioma": "es",
  "noticias": [
    {
      "slug": "ana-garcia-lopez",
      "titulo": "titulo",
      "plantilla": "semana-provincia",
      "publicadaEn": "publicadaEn",
      "rutaWeb": "rutaWeb"
    }
  ]
}

People (names in the gazette)

Only the published fact, with its citation. The gazette does not publish tax IDs: a name can be several people, and every answer says so. Never a label.

GET/v1/dev/personas/{slug}/cronologia

Timeline of a person name in the gazette

Use it when: To see where a name appears and when.

Price

8 euro cents per call served · 120 calls per minute per key (all routes).

Parameters

FieldTypeRequiredValues, limits and default
slugtextoyesSlug of a person name or of a news article / address, as returned by the API.. al menos 1 caracteres; hasta 240 caracteres
tipotextonoType filter, comma separated.. hasta 400 caracteres
aniotextonoYear (YYYY).. hasta 4 caracteres
ordentextonoreciente (default) or antiguo.. hasta 10 caracteres. default: reciente
paginatextonoPage number, starting at 1. Alternatively use cursor.. hasta 6 caracteres. default: 1

Errors

  • 400 validacion — A field of the request is not valid; `campos` says which. Fix the fields listed in `campos` and call again. An invalid request is never charged.
  • 401 no_autenticado — The Authorization header with the API key is missing. Send the key as `Authorization: Bearer <key>`. You create it in the developer console.
  • 401 clave_invalida — The key does not exist or was revoked. Check you copied the whole key and did not revoke it. Create another one in the console if needed.
  • 401 clave_no_es_de_desarrollador — The key belongs to a law firm, not to a developer account. This API only accepts developer-account keys.
  • 402 saldo_insuficiente — There is not enough balance for this call. It was neither served nor charged. Top up your balance in the console (Billing).
  • 403 clave_ip_no_permitida — The key has an IP allow-list and this address is not on it. Add your server address to the allow-list in the console, or remove the restriction.
  • 403 identidad_sin_verificar — The account identity is not verified yet; balance cannot be spent without it. Verify the account identity in the console Settings.
  • 404 no_encontrado — It is not in the loaded gazette data, or it is a person who exercised the right to object or erasure. Check the id. If you only have a name use `GET /v1/dev/empresas/resolver?q=`.
  • 429 demasiadas_peticiones — Too many calls in a row with this key (120 per minute). Wait the seconds in the `Retry-After` header and retry with growing delay. The limit is per key.
  • 500 error_interno — A failure on our side. Nothing is charged. Retry in a few seconds; if it persists, write to us with the time.

Example request

curl

curl "https://api.jurilia.com/v1/dev/personas/ana-garcia-lopez/cronologia" \
  -H "Authorization: Bearer $JURILIA_API_KEY"

Python

import os
import requests

r = requests.get(
    "https://api.jurilia.com/v1/dev/personas/ana-garcia-lopez/cronologia",
    headers={"Authorization": f"Bearer {os.environ['JURILIA_API_KEY']}"},
    timeout=30,
)
r.raise_for_status()
print(r.json())

JavaScript

const url = new URL("https://api.jurilia.com/v1/dev/personas/ana-garcia-lopez/cronologia");
const r = await fetch(url, {
  headers: { Authorization: `Bearer ${process.env.JURILIA_API_KEY}` },
});
if (!r.ok) throw new Error(`HTTP ${r.status}`);
console.log(await r.json());

Example response

Show the full example response
{
  "slug": "ana-garcia-lopez",
  "nombre": "ANA GARCIA LOPEZ",
  "nombreLegible": "Ana García López",
  "variantes": [
    "variante"
  ],
  "sociedades": 0,
  "homonimos": "posibles",
  "recortada": true,
  "filtro": {
    "tipos": [
      "constitucion"
    ],
    "anio": 0,
    "orden": "reciente"
  },
  "total": 1,
  "pagina": 1,
  "paginas": 1,
  "porPagina": 20,
  "porTipo": [
    {
      "tipo": "constitucion",
      "n": 0
    }
  ],
  "porAnio": [
    {
      "anio": 0,
      "n": 0
    }
  ],
  "hechos": [
    {
      "clave": "clave",
      "fecha": "2026-10-22",
      "tipo": "constitucion",
      "origen": "borme",
      "acto": "acto",
      "etiquetaPublicada": "etiquetaPublicada",
      "cargo": "Adm. Unico",
      "nombre": "ANA GARCIA LOPEZ",
      "nombreLegible": "Ana García López",
      "sociedad": {
        "id": "12345",
        "denominacion": "ACME SERVICIOS SL",
        "denominacionLegible": "Acme Servicios, S.L.",
        "provincia": "MADRID",
        "provinciaLegible": "Madrid",
        "rutaWeb": "rutaWeb"
      },
      "cita": {
        "identificador": "BORME-A-2026-200-28",
        "urlPdf": "https://www.boe.es/borme/dias/2026/10/22/pdfs/BORME-A-2026-200-28.pdf",
        "numero": 7,
        "fecha": "2026-10-22",
        "provincia": "MADRID",
        "provinciaLegible": "Madrid"
      }
    }
  ],
  "soloHechos": true
}
GET/v1/dev/personas/{slug}/coincidencias

Who a name coincides with across its companies

Use it when: To see who shares companies with a name and whether they overlapped in time.

Price

8 euro cents per call served · 120 calls per minute per key (all routes).

Parameters

FieldTypeRequiredValues, limits and default
slugtextoyesSlug of a person name or of a news article / address, as returned by the API.. al menos 1 caracteres; hasta 240 caracteres
paginaenteronoPage number, starting at 1. Alternatively use cursor.. mínimo 1; máximo 10000. default: 1
contextonoSlug of one of the coinciding people: opens only that person with the shared companies.. al menos 1 caracteres; hasta 240 caracteres
paginaSociedadesenteronoPage of the shared companies (10 per page).. mínimo 1; máximo 10000. default: 1

Errors

  • 400 validacion — A field of the request is not valid; `campos` says which. Fix the fields listed in `campos` and call again. An invalid request is never charged.
  • 401 no_autenticado — The Authorization header with the API key is missing. Send the key as `Authorization: Bearer <key>`. You create it in the developer console.
  • 401 clave_invalida — The key does not exist or was revoked. Check you copied the whole key and did not revoke it. Create another one in the console if needed.
  • 401 clave_no_es_de_desarrollador — The key belongs to a law firm, not to a developer account. This API only accepts developer-account keys.
  • 402 saldo_insuficiente — There is not enough balance for this call. It was neither served nor charged. Top up your balance in the console (Billing).
  • 403 clave_ip_no_permitida — The key has an IP allow-list and this address is not on it. Add your server address to the allow-list in the console, or remove the restriction.
  • 403 identidad_sin_verificar — The account identity is not verified yet; balance cannot be spent without it. Verify the account identity in the console Settings.
  • 404 no_encontrado — It is not in the loaded gazette data, or it is a person who exercised the right to object or erasure. Check the id. If you only have a name use `GET /v1/dev/empresas/resolver?q=`.
  • 429 demasiadas_peticiones — Too many calls in a row with this key (120 per minute). Wait the seconds in the `Retry-After` header and retry with growing delay. The limit is per key.
  • 500 error_interno — A failure on our side. Nothing is charged. Retry in a few seconds; if it persists, write to us with the time.

Example request

curl

curl "https://api.jurilia.com/v1/dev/personas/ana-garcia-lopez/coincidencias" \
  -H "Authorization: Bearer $JURILIA_API_KEY"

Python

import os
import requests

r = requests.get(
    "https://api.jurilia.com/v1/dev/personas/ana-garcia-lopez/coincidencias",
    headers={"Authorization": f"Bearer {os.environ['JURILIA_API_KEY']}"},
    timeout=30,
)
r.raise_for_status()
print(r.json())

JavaScript

const url = new URL("https://api.jurilia.com/v1/dev/personas/ana-garcia-lopez/coincidencias");
const r = await fetch(url, {
  headers: { Authorization: `Bearer ${process.env.JURILIA_API_KEY}` },
});
if (!r.ok) throw new Error(`HTTP ${r.status}`);
console.log(await r.json());

Example response

Show the full example response
{
  "coincidencias": [
    {
      "slug": "ana-garcia-lopez",
      "nombre": "ANA GARCIA LOPEZ",
      "nombreLegible": "Ana García López",
      "sociedadesEnComun": 0,
      "sociedadesConSolape": 0,
      "ultima": "2026-10-22",
      "rutaWeb": "rutaWeb",
      "sociedades": [
        {
          "empresaId": "12345",
          "denominacion": "ACME SERVICIOS SL",
          "tipo": "solapan",
          "tramos": [
            {
              "desde": "2026-10-22",
              "hasta": "2026-10-22"
            }
          ],
          "ultimaFecha": "2026-10-22",
          "cargosDeLaPersona": [
            "cargosDeLaPersona"
          ],
          "cargosDelOtro": [
            "cargosDelOtro"
          ],
          "anuncios": [
            {
              "fecha": "2026-10-22",
              "numero": 7,
              "fuente": {
                "identificador": "BORME-A-2026-200-28",
                "urlPdf": "https://www.boe.es/borme/dias/2026/10/22/pdfs/BORME-A-2026-200-28.pdf",
                "numero": 7,
                "fecha": "2026-10-22"
              }
            }
          ]
        }
      ]
    }
  ],
  "totalDePersonas": 0,
  "paginacion": {
    "pagina": 1,
    "paginas": 1,
    "total": 1,
    "porPagina": 20
  },
  "abierta": "abierta",
  "paginacionSociedades": {
    "pagina": 1,
    "paginas": 1,
    "total": 1,
    "porPagina": 20
  },
  "sociedadesMiradas": 0,
  "recortadaPorSociedades": true,
  "lecturaParcial": true,
  "agotada": true,
  "homonimos": "posibles"
}
GET/v1/dev/personas/{slug}/vinculos

Names that appear in the same companies

Use it when: To list names in the same companies.

Price

8 euro cents per call served · 120 calls per minute per key (all routes).

Parameters

FieldTypeRequiredValues, limits and default
slugtextoyesSlug of a person name or of a news article / address, as returned by the API.. al menos 1 caracteres; hasta 240 caracteres
paginaenteronoPage number, starting at 1. Alternatively use cursor.. mínimo 1; máximo 10000. default: 1

Errors

  • 400 validacion — A field of the request is not valid; `campos` says which. Fix the fields listed in `campos` and call again. An invalid request is never charged.
  • 401 no_autenticado — The Authorization header with the API key is missing. Send the key as `Authorization: Bearer <key>`. You create it in the developer console.
  • 401 clave_invalida — The key does not exist or was revoked. Check you copied the whole key and did not revoke it. Create another one in the console if needed.
  • 401 clave_no_es_de_desarrollador — The key belongs to a law firm, not to a developer account. This API only accepts developer-account keys.
  • 402 saldo_insuficiente — There is not enough balance for this call. It was neither served nor charged. Top up your balance in the console (Billing).
  • 403 clave_ip_no_permitida — The key has an IP allow-list and this address is not on it. Add your server address to the allow-list in the console, or remove the restriction.
  • 403 identidad_sin_verificar — The account identity is not verified yet; balance cannot be spent without it. Verify the account identity in the console Settings.
  • 404 no_encontrado — It is not in the loaded gazette data, or it is a person who exercised the right to object or erasure. Check the id. If you only have a name use `GET /v1/dev/empresas/resolver?q=`.
  • 429 demasiadas_peticiones — Too many calls in a row with this key (120 per minute). Wait the seconds in the `Retry-After` header and retry with growing delay. The limit is per key.
  • 500 error_interno — A failure on our side. Nothing is charged. Retry in a few seconds; if it persists, write to us with the time.

Example request

curl

curl "https://api.jurilia.com/v1/dev/personas/ana-garcia-lopez/vinculos" \
  -H "Authorization: Bearer $JURILIA_API_KEY"

Python

import os
import requests

r = requests.get(
    "https://api.jurilia.com/v1/dev/personas/ana-garcia-lopez/vinculos",
    headers={"Authorization": f"Bearer {os.environ['JURILIA_API_KEY']}"},
    timeout=30,
)
r.raise_for_status()
print(r.json())

JavaScript

const url = new URL("https://api.jurilia.com/v1/dev/personas/ana-garcia-lopez/vinculos");
const r = await fetch(url, {
  headers: { Authorization: `Bearer ${process.env.JURILIA_API_KEY}` },
});
if (!r.ok) throw new Error(`HTTP ${r.status}`);
console.log(await r.json());

Example response

Show the full example response
{
  "pagina": 1,
  "hayMas": true,
  "homonimos": "posibles",
  "filas": [
    {
      "slug": "ana-garcia-lopez",
      "nombre": "ANA GARCIA LOPEZ",
      "nombreLegible": "Ana García López",
      "empresasEnComun": 0,
      "empresas": [
        {
          "id": "12345",
          "denominacion": "ACME SERVICIOS SL",
          "rutaWeb": "rutaWeb"
        }
      ],
      "rutaWeb": "rutaWeb"
    }
  ]
}
GET/v1/dev/personas/{slug}/datos-objetivos

Measurable facts about a name, with its homonym warning

Use it when: Counts of appointments, companies and years of a name.

Price

3 euro cents per call served · 120 calls per minute per key (all routes).

Parameters

FieldTypeRequiredValues, limits and default
slugtextoyesSlug of a person name or of a news article / address, as returned by the API.. al menos 1 caracteres; hasta 240 caracteres
idiomatextonoLanguage of the texts the server writes (es, en, fr, de, pt, it). Names and figures are never translated.. uno de: es, en, fr, de, pt, it. default: es

Errors

  • 400 validacion — A field of the request is not valid; `campos` says which. Fix the fields listed in `campos` and call again. An invalid request is never charged.
  • 401 no_autenticado — The Authorization header with the API key is missing. Send the key as `Authorization: Bearer <key>`. You create it in the developer console.
  • 401 clave_invalida — The key does not exist or was revoked. Check you copied the whole key and did not revoke it. Create another one in the console if needed.
  • 401 clave_no_es_de_desarrollador — The key belongs to a law firm, not to a developer account. This API only accepts developer-account keys.
  • 402 saldo_insuficiente — There is not enough balance for this call. It was neither served nor charged. Top up your balance in the console (Billing).
  • 403 clave_ip_no_permitida — The key has an IP allow-list and this address is not on it. Add your server address to the allow-list in the console, or remove the restriction.
  • 403 identidad_sin_verificar — The account identity is not verified yet; balance cannot be spent without it. Verify the account identity in the console Settings.
  • 404 no_encontrado — It is not in the loaded gazette data, or it is a person who exercised the right to object or erasure. Check the id. If you only have a name use `GET /v1/dev/empresas/resolver?q=`.
  • 429 demasiadas_peticiones — Too many calls in a row with this key (120 per minute). Wait the seconds in the `Retry-After` header and retry with growing delay. The limit is per key.
  • 500 error_interno — A failure on our side. Nothing is charged. Retry in a few seconds; if it persists, write to us with the time.

Example request

curl

curl "https://api.jurilia.com/v1/dev/personas/ana-garcia-lopez/datos-objetivos" \
  -H "Authorization: Bearer $JURILIA_API_KEY"

Python

import os
import requests

r = requests.get(
    "https://api.jurilia.com/v1/dev/personas/ana-garcia-lopez/datos-objetivos",
    headers={"Authorization": f"Bearer {os.environ['JURILIA_API_KEY']}"},
    timeout=30,
)
r.raise_for_status()
print(r.json())

JavaScript

const url = new URL("https://api.jurilia.com/v1/dev/personas/ana-garcia-lopez/datos-objetivos");
const r = await fetch(url, {
  headers: { Authorization: `Bearer ${process.env.JURILIA_API_KEY}` },
});
if (!r.ok) throw new Error(`HTTP ${r.status}`);
console.log(await r.json());

Example response

Show the full example response
{
  "senales": [
    {
      "clave": "domicilio_compartido",
      "cifra": 0,
      "fecha": "2026-10-22",
      "datos": {
        "desde": "2026-10-22",
        "hasta": "2026-10-22",
        "primera": "2026-10-22",
        "nombramientos": 0,
        "ceses": 0,
        "sociedades": 0,
        "anios": 0,
        "alMenos": 0,
        "forma": "forma"
      },
      "frase": "frase",
      "comoSeCalcula": "comoSeCalcula",
      "fuentes": [
        {
          "identificador": "BORME-A-2026-200-28",
          "urlPdf": "https://www.boe.es/borme/dias/2026/10/22/pdfs/BORME-A-2026-200-28.pdf",
          "numero": 7,
          "fecha": "2026-10-22"
        }
      ],
      "norma": {
        "norma": "norma",
        "articulo": "articulo",
        "apartado": "apartado",
        "version": "version",
        "url": "https://www.boe.es/borme/dias/2026/10/22/pdfs/BORME-A-2026-200-28.pdf",
        "textoLiteral": "textoLiteral"
      },
      "enlace": {
        "rutaWeb": "rutaWeb",
        "texto": "texto"
      }
    }
  ],
  "datosHasta": "2026-10-22",
  "aviso": "aviso",
  "soloHechos": true,
  "resultado": "persona",
  "slug": "ana-garcia-lopez",
  "homonimos": "posibles",
  "avisoHomonimos": "avisoHomonimos"
}

Relationship graph

Company–person–company connections with the act that proves each hop.

GET/v1/dev/red

Neighbours of a node in the relationship graph

Use it when: To build an interactive graph one node at a time.

Price

8 euro cents per call served · 120 calls per minute per key (all routes).

Parameters

FieldTypeRequiredValues, limits and default
nodotextoyesGraph node: e:<id> company, p:<slug> person name, d:<key> address.. al menos 3 caracteres; hasta 320 caracteres

Errors

  • 400 validacion — A field of the request is not valid; `campos` says which. Fix the fields listed in `campos` and call again. An invalid request is never charged.
  • 401 no_autenticado — The Authorization header with the API key is missing. Send the key as `Authorization: Bearer <key>`. You create it in the developer console.
  • 401 clave_invalida — The key does not exist or was revoked. Check you copied the whole key and did not revoke it. Create another one in the console if needed.
  • 401 clave_no_es_de_desarrollador — The key belongs to a law firm, not to a developer account. This API only accepts developer-account keys.
  • 402 saldo_insuficiente — There is not enough balance for this call. It was neither served nor charged. Top up your balance in the console (Billing).
  • 403 clave_ip_no_permitida — The key has an IP allow-list and this address is not on it. Add your server address to the allow-list in the console, or remove the restriction.
  • 403 identidad_sin_verificar — The account identity is not verified yet; balance cannot be spent without it. Verify the account identity in the console Settings.
  • 404 no_encontrado — It is not in the loaded gazette data, or it is a person who exercised the right to object or erasure. Check the id. If you only have a name use `GET /v1/dev/empresas/resolver?q=`.
  • 429 demasiadas_peticiones — Too many calls in a row with this key (120 per minute). Wait the seconds in the `Retry-After` header and retry with growing delay. The limit is per key.
  • 500 error_interno — A failure on our side. Nothing is charged. Retry in a few seconds; if it persists, write to us with the time.

Example request

curl

curl "https://api.jurilia.com/v1/dev/red?nodo=e%3A12345" \
  -H "Authorization: Bearer $JURILIA_API_KEY"

Python

import os
import requests

r = requests.get(
    "https://api.jurilia.com/v1/dev/red",
    headers={"Authorization": f"Bearer {os.environ['JURILIA_API_KEY']}"},
    params={"nodo":"e:12345"},
    timeout=30,
)
r.raise_for_status()
print(r.json())

JavaScript

const url = new URL("https://api.jurilia.com/v1/dev/red");
url.search = new URLSearchParams({"nodo":"e:12345"});
const r = await fetch(url, {
  headers: { Authorization: `Bearer ${process.env.JURILIA_API_KEY}` },
});
if (!r.ok) throw new Error(`HTTP ${r.status}`);
console.log(await r.json());

Example response

Show the full example response
{
  "nodo": {
    "valor": "valor",
    "tipo": "empresa",
    "nombre": "ANA GARCIA LOPEZ",
    "nombreLegible": "Ana García López",
    "provincia": "MADRID",
    "provinciaLegible": "Madrid",
    "extinguida": true,
    "sociedades": 0,
    "sociedadesAcotadas": true,
    "grado": 0,
    "comun": true,
    "rutaWeb": "rutaWeb"
  },
  "vecinos": [
    {
      "valor": "valor",
      "tipo": "empresa",
      "nombre": "ANA GARCIA LOPEZ",
      "nombreLegible": "Ana García López",
      "provincia": "MADRID",
      "provinciaLegible": "Madrid",
      "extinguida": true,
      "sociedades": 0,
      "sociedadesAcotadas": true,
      "grado": 0,
      "comun": true,
      "rutaWeb": "rutaWeb",
      "union": {
        "tipo": "cargo",
        "cargo": "Adm. Unico"
      },
      "relaciones": [
        {
          "familia": "administracion",
          "tipo": "tipo",
          "vigente": true,
          "desde": "2026-10-22",
          "hasta": "2026-10-22",
          "cita": {
            "origen": "borme",
            "etiqueta": "etiqueta",
            "url": "https://www.boe.es/borme/dias/2026/10/22/pdfs/BORME-A-2026-200-28.pdf",
            "fecha": "2026-10-22",
            "numero": 7
          }
        }
      ],
      "sentido": "entrante"
    }
  ],
  "total": 1
}
GET/v1/dev/rastro

Shortest path between two companies or names

Use it when: To answer "are these two related?" with the shortest proven path.

Price

15 euro cents per call served · 120 calls per minute per key (all routes).

Parameters

FieldTypeRequiredValues, limits and default
atextoyesFirst end: e:<id> or p:<slug>.. al menos 3 caracteres; hasta 320 caracteres
btextoyesSecond end: e:<id> or p:<slug>.. al menos 3 caracteres; hasta 320 caracteres

Errors

  • 400 validacion — A field of the request is not valid; `campos` says which. Fix the fields listed in `campos` and call again. An invalid request is never charged.
  • 401 no_autenticado — The Authorization header with the API key is missing. Send the key as `Authorization: Bearer <key>`. You create it in the developer console.
  • 401 clave_invalida — The key does not exist or was revoked. Check you copied the whole key and did not revoke it. Create another one in the console if needed.
  • 401 clave_no_es_de_desarrollador — The key belongs to a law firm, not to a developer account. This API only accepts developer-account keys.
  • 402 saldo_insuficiente — There is not enough balance for this call. It was neither served nor charged. Top up your balance in the console (Billing).
  • 403 clave_ip_no_permitida — The key has an IP allow-list and this address is not on it. Add your server address to the allow-list in the console, or remove the restriction.
  • 403 identidad_sin_verificar — The account identity is not verified yet; balance cannot be spent without it. Verify the account identity in the console Settings.
  • 404 no_encontrado — It is not in the loaded gazette data, or it is a person who exercised the right to object or erasure. Check the id. If you only have a name use `GET /v1/dev/empresas/resolver?q=`.
  • 429 demasiadas_peticiones — Too many calls in a row with this key (120 per minute). Wait the seconds in the `Retry-After` header and retry with growing delay. The limit is per key.
  • 500 error_interno — A failure on our side. Nothing is charged. Retry in a few seconds; if it persists, write to us with the time.

Example request

curl

curl "https://api.jurilia.com/v1/dev/rastro?a=e%3A12345&b=e%3A67890" \
  -H "Authorization: Bearer $JURILIA_API_KEY"

Python

import os
import requests

r = requests.get(
    "https://api.jurilia.com/v1/dev/rastro",
    headers={"Authorization": f"Bearer {os.environ['JURILIA_API_KEY']}"},
    params={"a":"e:12345","b":"e:67890"},
    timeout=30,
)
r.raise_for_status()
print(r.json())

JavaScript

const url = new URL("https://api.jurilia.com/v1/dev/rastro");
url.search = new URLSearchParams({"a":"e:12345","b":"e:67890"});
const r = await fetch(url, {
  headers: { Authorization: `Bearer ${process.env.JURILIA_API_KEY}` },
});
if (!r.ok) throw new Error(`HTTP ${r.status}`);
console.log(await r.json());

Example response

Show the full example response
{
  "resultado": "no_valido"
}
GET/v1/dev/conexion

How are they connected? Up to three independent paths with proof

Use it when: To answer "how are they connected?" with up to three independent paths and the act that proves each hop.

Price

15 euro cents per call served · 120 calls per minute per key (all routes).

Parameters

FieldTypeRequiredValues, limits and default
atextoyesFirst end: e:<id> or p:<slug>.. al menos 3 caracteres; hasta 320 caracteres
btextoyesSecond end: e:<id> or p:<slug>.. al menos 3 caracteres; hasta 320 caracteres
nodosGrandestextono1 to allow crossing very common nodes (marked in the answer).. uno de: 0, 1. default: 0

Errors

  • 400 validacion — A field of the request is not valid; `campos` says which. Fix the fields listed in `campos` and call again. An invalid request is never charged.
  • 401 no_autenticado — The Authorization header with the API key is missing. Send the key as `Authorization: Bearer <key>`. You create it in the developer console.
  • 401 clave_invalida — The key does not exist or was revoked. Check you copied the whole key and did not revoke it. Create another one in the console if needed.
  • 401 clave_no_es_de_desarrollador — The key belongs to a law firm, not to a developer account. This API only accepts developer-account keys.
  • 402 saldo_insuficiente — There is not enough balance for this call. It was neither served nor charged. Top up your balance in the console (Billing).
  • 403 clave_ip_no_permitida — The key has an IP allow-list and this address is not on it. Add your server address to the allow-list in the console, or remove the restriction.
  • 403 identidad_sin_verificar — The account identity is not verified yet; balance cannot be spent without it. Verify the account identity in the console Settings.
  • 404 no_encontrado — It is not in the loaded gazette data, or it is a person who exercised the right to object or erasure. Check the id. If you only have a name use `GET /v1/dev/empresas/resolver?q=`.
  • 429 demasiadas_peticiones — Too many calls in a row with this key (120 per minute). Wait the seconds in the `Retry-After` header and retry with growing delay. The limit is per key.
  • 500 error_interno — A failure on our side. Nothing is charged. Retry in a few seconds; if it persists, write to us with the time.

Example request

curl

curl "https://api.jurilia.com/v1/dev/conexion?a=e%3A12345&b=e%3A67890" \
  -H "Authorization: Bearer $JURILIA_API_KEY"

Python

import os
import requests

r = requests.get(
    "https://api.jurilia.com/v1/dev/conexion",
    headers={"Authorization": f"Bearer {os.environ['JURILIA_API_KEY']}"},
    params={"a":"e:12345","b":"e:67890"},
    timeout=30,
)
r.raise_for_status()
print(r.json())

JavaScript

const url = new URL("https://api.jurilia.com/v1/dev/conexion");
url.search = new URLSearchParams({"a":"e:12345","b":"e:67890"});
const r = await fetch(url, {
  headers: { Authorization: `Bearer ${process.env.JURILIA_API_KEY}` },
});
if (!r.ok) throw new Error(`HTTP ${r.status}`);
console.log(await r.json());

Example response

Show the full example response
{
  "resultado": "no_valido"
}
GET/v1/dev/comparar

Compare two to eight companies side by side

Use it when: For comparison tables.

Price

8 euro cents per call served · 120 calls per minute per key (all routes).

Parameters

FieldTypeRequiredValues, limits and default
idstextoyesCompany ids separated by commas (2 to 8).. patrón ^\d{1,18}(,\d{1,18}){0,7}$

Errors

  • 400 validacion — A field of the request is not valid; `campos` says which. Fix the fields listed in `campos` and call again. An invalid request is never charged.
  • 401 no_autenticado — The Authorization header with the API key is missing. Send the key as `Authorization: Bearer <key>`. You create it in the developer console.
  • 401 clave_invalida — The key does not exist or was revoked. Check you copied the whole key and did not revoke it. Create another one in the console if needed.
  • 401 clave_no_es_de_desarrollador — The key belongs to a law firm, not to a developer account. This API only accepts developer-account keys.
  • 402 saldo_insuficiente — There is not enough balance for this call. It was neither served nor charged. Top up your balance in the console (Billing).
  • 403 clave_ip_no_permitida — The key has an IP allow-list and this address is not on it. Add your server address to the allow-list in the console, or remove the restriction.
  • 403 identidad_sin_verificar — The account identity is not verified yet; balance cannot be spent without it. Verify the account identity in the console Settings.
  • 404 no_encontrado — It is not in the loaded gazette data, or it is a person who exercised the right to object or erasure. Check the id. If you only have a name use `GET /v1/dev/empresas/resolver?q=`.
  • 429 demasiadas_peticiones — Too many calls in a row with this key (120 per minute). Wait the seconds in the `Retry-After` header and retry with growing delay. The limit is per key.
  • 500 error_interno — A failure on our side. Nothing is charged. Retry in a few seconds; if it persists, write to us with the time.

Example request

curl

curl "https://api.jurilia.com/v1/dev/comparar?ids=12345%2C67890" \
  -H "Authorization: Bearer $JURILIA_API_KEY"

Python

import os
import requests

r = requests.get(
    "https://api.jurilia.com/v1/dev/comparar",
    headers={"Authorization": f"Bearer {os.environ['JURILIA_API_KEY']}"},
    params={"ids":"12345,67890"},
    timeout=30,
)
r.raise_for_status()
print(r.json())

JavaScript

const url = new URL("https://api.jurilia.com/v1/dev/comparar");
url.search = new URLSearchParams({"ids":"12345,67890"});
const r = await fetch(url, {
  headers: { Authorization: `Bearer ${process.env.JURILIA_API_KEY}` },
});
if (!r.ok) throw new Error(`HTTP ${r.status}`);
console.log(await r.json());

Example response

Show the full example response
{
  "sociedades": [
    {
      "empresaId": "12345",
      "denominacion": "ACME SERVICIOS SL",
      "denominacionLegible": "Acme Servicios, S.L.",
      "provincia": "MADRID",
      "provinciaLegible": "Madrid",
      "hoja": "M-123456",
      "situacion": "activa",
      "capital": {
        "centimos": 0,
        "fuente": {
          "identificador": "BORME-A-2026-200-28",
          "urlPdf": "https://www.boe.es/borme/dias/2026/10/22/pdfs/BORME-A-2026-200-28.pdf",
          "numero": 7,
          "fecha": "2026-10-22"
        }
      },
      "constitucion": {
        "fecha": "2026-10-22",
        "fuente": {
          "identificador": "BORME-A-2026-200-28",
          "urlPdf": "https://www.boe.es/borme/dias/2026/10/22/pdfs/BORME-A-2026-200-28.pdf",
          "numero": 7,
          "fecha": "2026-10-22"
        }
      },
      "domicilio": {
        "domicilio": "domicilio",
        "fuente": {
          "identificador": "BORME-A-2026-200-28",
          "urlPdf": "https://www.boe.es/borme/dias/2026/10/22/pdfs/BORME-A-2026-200-28.pdf",
          "numero": 7,
          "fecha": "2026-10-22"
        }
      },
      "administradoresVigentes": 0,
      "ultimoActo": {
        "tipo": "tipo",
        "etiqueta": "etiqueta",
        "fuente": {
          "identificador": "BORME-A-2026-200-28",
          "urlPdf": "https://www.boe.es/borme/dias/2026/10/22/pdfs/BORME-A-2026-200-28.pdf",
          "numero": 7,
          "fecha": "2026-10-22"
        }
      },
      "senales": [
        {
          "tipo": "tipo",
          "fecha": "2026-10-22",
          "desde": "2026-10-22",
          "cuantos": 0,
          "actos": [
            {
              "fecha": "2026-10-22",
              "tipo": "tipo",
              "fuente": {
                "identificador": "BORME-A-2026-200-28",
                "urlPdf": "https://www.boe.es/borme/dias/2026/10/22/pdfs/BORME-A-2026-200-28.pdf",
                "numero": 7,
                "fecha": "2026-10-22"
              }
            }
          ]
        }
      ],
      "rutaWeb": "rutaWeb"
    }
  ],
  "minimo": 0,
  "maximo": 0
}
GET/v1/dev/comparar/cronologia

Compared timelines of two to four companies

Use it when: To see simultaneous events across companies.

Price

15 euro cents per call served · 120 calls per minute per key (all routes).

Parameters

FieldTypeRequiredValues, limits and default
etextonoCompanies as e:<id> separated by commas.. hasta 1000 caracteres
idstextonoCompany ids separated by commas (2 to 8).. hasta 1000 caracteres
tipotextonoType filter, comma separated.. hasta 400 caracteres
aniotextonoYear (YYYY).. hasta 4 caracteres
ordentextonoreciente (default) or antiguo.. hasta 10 caracteres. default: reciente
paginatextonoPage number, starting at 1. Alternatively use cursor.. hasta 6 caracteres. default: 1

Errors

  • 400 validacion — A field of the request is not valid; `campos` says which. Fix the fields listed in `campos` and call again. An invalid request is never charged.
  • 401 no_autenticado — The Authorization header with the API key is missing. Send the key as `Authorization: Bearer <key>`. You create it in the developer console.
  • 401 clave_invalida — The key does not exist or was revoked. Check you copied the whole key and did not revoke it. Create another one in the console if needed.
  • 401 clave_no_es_de_desarrollador — The key belongs to a law firm, not to a developer account. This API only accepts developer-account keys.
  • 402 saldo_insuficiente — There is not enough balance for this call. It was neither served nor charged. Top up your balance in the console (Billing).
  • 403 clave_ip_no_permitida — The key has an IP allow-list and this address is not on it. Add your server address to the allow-list in the console, or remove the restriction.
  • 403 identidad_sin_verificar — The account identity is not verified yet; balance cannot be spent without it. Verify the account identity in the console Settings.
  • 404 no_encontrado — It is not in the loaded gazette data, or it is a person who exercised the right to object or erasure. Check the id. If you only have a name use `GET /v1/dev/empresas/resolver?q=`.
  • 429 demasiadas_peticiones — Too many calls in a row with this key (120 per minute). Wait the seconds in the `Retry-After` header and retry with growing delay. The limit is per key.
  • 500 error_interno — A failure on our side. Nothing is charged. Retry in a few seconds; if it persists, write to us with the time.

Example request

curl

curl "https://api.jurilia.com/v1/dev/comparar/cronologia" \
  -H "Authorization: Bearer $JURILIA_API_KEY"

Python

import os
import requests

r = requests.get(
    "https://api.jurilia.com/v1/dev/comparar/cronologia",
    headers={"Authorization": f"Bearer {os.environ['JURILIA_API_KEY']}"},
    timeout=30,
)
r.raise_for_status()
print(r.json())

JavaScript

const url = new URL("https://api.jurilia.com/v1/dev/comparar/cronologia");
const r = await fetch(url, {
  headers: { Authorization: `Bearer ${process.env.JURILIA_API_KEY}` },
});
if (!r.ok) throw new Error(`HTTP ${r.status}`);
console.log(await r.json());

Example response

Show the full example response
{
  "sociedades": [
    {
      "id": "12345",
      "denominacion": "ACME SERVICIOS SL",
      "denominacionLegible": "Acme Servicios, S.L.",
      "provincia": "MADRID",
      "provinciaLegible": "Madrid",
      "rutaWeb": "rutaWeb",
      "total": 1,
      "conNif": true,
      "sinFecha": {
        "placsp": 0,
        "sanciones_ue": 0
      },
      "recortadas": [
        "borme"
      ]
    }
  ],
  "filtro": {
    "tipos": [
      "constitucion"
    ],
    "anio": 0,
    "orden": "reciente"
  },
  "total": 1,
  "pagina": 1,
  "paginas": 1,
  "aniosPorPagina": 1,
  "porTipo": [
    {
      "tipo": "constitucion",
      "n": 0
    }
  ],
  "porAnio": [
    {
      "anio": 0,
      "n": 0
    }
  ],
  "anios": [
    {
      "anio": 0,
      "celdas": [
        {
          "sociedadId": "sociedadId",
          "total": 1,
          "restantes": 0,
          "hechos": [
            {
              "clave": "clave",
              "fecha": "2026-10-22",
              "tipo": "constitucion",
              "origen": "borme",
              "acto": "acto",
              "etiquetaPublicada": "etiquetaPublicada",
              "capitalCentimos": 300000,
              "capitalResultanteCentimos": 0,
              "domicilio": "domicilio",
              "objeto": "objeto",
              "comienzoOperaciones": "comienzoOperaciones",
              "detalle": "detalle",
              "cargos": [],
              "cargosOmitidos": 0,
              "datosRegistrales": "datosRegistrales",
              "fechaInscripcion": "2026-10-22",
              "cita": {
                "identificador": "BORME-A-2026-200-28",
                "urlPdf": "https://www.boe.es/borme/dias/2026/10/22/pdfs/BORME-A-2026-200-28.pdf",
                "numero": 7,
                "fecha": "2026-10-22",
                "provincia": "MADRID",
                "provinciaLegible": "Madrid"
              }
            }
          ]
        }
      ]
    }
  ],
  "coincidencias": {
    "boletin": {
      "total": 1,
      "lista": [
        {
          "identificador": "BORME-A-2026-200-28",
          "fecha": "2026-10-22",
          "urlPdf": "https://www.boe.es/borme/dias/2026/10/22/pdfs/BORME-A-2026-200-28.pdf",
          "provincia": "MADRID",
          "provinciaLegible": "Madrid",
          "sociedades": [
            {
              "sociedadId": "sociedadId",
              "numero": 7
            }
          ]
        }
      ]
    },
    "domicilio": {
      "total": 1,
      "lista": [
        {
          "clave": "clave",
          "rutaWeb": "rutaWeb",
          "sociedades": [
            {
              "sociedadId": "sociedadId",
              "texto": "texto",
              "cita": {
                "identificador": "BORME-A-2026-200-28",
                "urlPdf": "https://www.boe.es/borme/dias/2026/10/22/pdfs/BORME-A-2026-200-28.pdf",
                "numero": 7,
                "fecha": "2026-10-22",
                "provincia": "MADRID",
                "provinciaLegible": "Madrid"
              }
            }
          ]
        }
      ]
    },
    "nombres": {
      "total": 1,
      "lista": [
        {
          "slug": "ana-garcia-lopez",
          "nombre": "ANA GARCIA LOPEZ",
          "homonimos": "posibles",
          "rutaWeb": "rutaWeb",
          "sociedades": [
            {
              "sociedadId": "sociedadId",
              "cargo": "Adm. Unico",
              "cita": {
                "identificador": "BORME-A-2026-200-28",
                "urlPdf": "https://www.boe.es/borme/dias/2026/10/22/pdfs/BORME-A-2026-200-28.pdf",
                "numero": 7,
                "fecha": "2026-10-22",
                "provincia": "MADRID",
                "provinciaLegible": "Madrid"
              }
            }
          ],
          "sociedadesEnElBorme": 0,
          "sociedadesAcotadas": true,
          "frecuente": true
        }
      ]
    }
  },
  "excluidas": [
    {
      "id": "12345",
      "motivo": "no_encontrada"
    }
  ],
  "conexiones": [
    {
      "a": "a",
      "b": "b",
      "rutaWeb": "rutaWeb"
    }
  ],
  "soloHechos": true
}

Trademarks

Spanish trademarks, by name, class, status and holder.

GET/v1/dev/marcas

Search Spanish trademarks by name, Nice class, status and type

Use it when: For trademark watch or clearance support (the Registry is the authority).

Price

3 euro cents per call served · 120 calls per minute per key (all routes).

Parameters

FieldTypeRequiredValues, limits and default
qtextonoWhat to look for.. hasta 300 caracteres
modotextonoMatch mode or search mode.. hasta 300 caracteres. default: contiene / empresa (según la ruta)
clasetextonoNice class (1 to 45).. hasta 300 caracteres
estadotextonoStatus filter.. hasta 300 caracteres
tipotextonoType filter, comma separated.. hasta 300 caracteres
paginatextonoPage number, starting at 1. Alternatively use cursor.. hasta 300 caracteres. default: 1

Errors

  • 400 validacion — A field of the request is not valid; `campos` says which. Fix the fields listed in `campos` and call again. An invalid request is never charged.
  • 401 no_autenticado — The Authorization header with the API key is missing. Send the key as `Authorization: Bearer <key>`. You create it in the developer console.
  • 401 clave_invalida — The key does not exist or was revoked. Check you copied the whole key and did not revoke it. Create another one in the console if needed.
  • 401 clave_no_es_de_desarrollador — The key belongs to a law firm, not to a developer account. This API only accepts developer-account keys.
  • 402 saldo_insuficiente — There is not enough balance for this call. It was neither served nor charged. Top up your balance in the console (Billing).
  • 403 clave_ip_no_permitida — The key has an IP allow-list and this address is not on it. Add your server address to the allow-list in the console, or remove the restriction.
  • 403 identidad_sin_verificar — The account identity is not verified yet; balance cannot be spent without it. Verify the account identity in the console Settings.
  • 404 no_encontrado — It is not in the loaded gazette data, or it is a person who exercised the right to object or erasure. Check the id. If you only have a name use `GET /v1/dev/empresas/resolver?q=`.
  • 429 demasiadas_peticiones — Too many calls in a row with this key (120 per minute). Wait the seconds in the `Retry-After` header and retry with growing delay. The limit is per key.
  • 500 error_interno — A failure on our side. Nothing is charged. Retry in a few seconds; if it persists, write to us with the time.

Example request

curl

curl "https://api.jurilia.com/v1/dev/marcas" \
  -H "Authorization: Bearer $JURILIA_API_KEY"

Python

import os
import requests

r = requests.get(
    "https://api.jurilia.com/v1/dev/marcas",
    headers={"Authorization": f"Bearer {os.environ['JURILIA_API_KEY']}"},
    timeout=30,
)
r.raise_for_status()
print(r.json())

JavaScript

const url = new URL("https://api.jurilia.com/v1/dev/marcas");
const r = await fetch(url, {
  headers: { Authorization: `Bearer ${process.env.JURILIA_API_KEY}` },
});
if (!r.ok) throw new Error(`HTTP ${r.status}`);
console.log(await r.json());

Example response

Show the full example response
{
  "resultado": "ok",
  "minimo": 0,
  "ignorados": [
    "ignorado"
  ],
  "total": 1,
  "acotado": true,
  "pagina": 1,
  "paginas": 1,
  "porPagina": 20,
  "actualizadoEn": "2026-10-22T00:00:00.000Z",
  "marcas": [
    {
      "signo": "signo",
      "numero": "numero",
      "urlOficial": "https://consultas2.oepm.es/ceo/jsp/busqueda/consultaAvanzada.xhtml",
      "modalidad": "M",
      "clases": [
        1
      ],
      "estado": "solicitada",
      "estadoPublicado": "estadoPublicado",
      "fechaEstado": "2026-10-22",
      "titular": {
        "tipo": "sociedad",
        "empresaId": "12345",
        "denominacion": "ACME SERVICIOS SL",
        "denominacionLegible": "Acme Servicios, S.L.",
        "provincia": "MADRID",
        "rutaWeb": "rutaWeb"
      }
    }
  ]
}
GET/v1/dev/marcas/{numero}

A trademark by its application number

Use it when: To open one trademark with its holder and similar signs.

Price

3 euro cents per call served · 120 calls per minute per key (all routes).

Parameters

FieldTypeRequiredValues, limits and default
numerotextoyesApplication number of the trademark, for example M1167553.. patrón ^[A-Za-z][0-9]{5,10}[A-Za-z0-9]{0,6}$

Errors

  • 400 validacion — A field of the request is not valid; `campos` says which. Fix the fields listed in `campos` and call again. An invalid request is never charged.
  • 401 no_autenticado — The Authorization header with the API key is missing. Send the key as `Authorization: Bearer <key>`. You create it in the developer console.
  • 401 clave_invalida — The key does not exist or was revoked. Check you copied the whole key and did not revoke it. Create another one in the console if needed.
  • 401 clave_no_es_de_desarrollador — The key belongs to a law firm, not to a developer account. This API only accepts developer-account keys.
  • 402 saldo_insuficiente — There is not enough balance for this call. It was neither served nor charged. Top up your balance in the console (Billing).
  • 403 clave_ip_no_permitida — The key has an IP allow-list and this address is not on it. Add your server address to the allow-list in the console, or remove the restriction.
  • 403 identidad_sin_verificar — The account identity is not verified yet; balance cannot be spent without it. Verify the account identity in the console Settings.
  • 404 no_encontrado — It is not in the loaded gazette data, or it is a person who exercised the right to object or erasure. Check the id. If you only have a name use `GET /v1/dev/empresas/resolver?q=`.
  • 429 demasiadas_peticiones — Too many calls in a row with this key (120 per minute). Wait the seconds in the `Retry-After` header and retry with growing delay. The limit is per key.
  • 500 error_interno — A failure on our side. Nothing is charged. Retry in a few seconds; if it persists, write to us with the time.

Example request

curl

curl "https://api.jurilia.com/v1/dev/marcas/M1167553" \
  -H "Authorization: Bearer $JURILIA_API_KEY"

Python

import os
import requests

r = requests.get(
    "https://api.jurilia.com/v1/dev/marcas/M1167553",
    headers={"Authorization": f"Bearer {os.environ['JURILIA_API_KEY']}"},
    timeout=30,
)
r.raise_for_status()
print(r.json())

JavaScript

const url = new URL("https://api.jurilia.com/v1/dev/marcas/M1167553");
const r = await fetch(url, {
  headers: { Authorization: `Bearer ${process.env.JURILIA_API_KEY}` },
});
if (!r.ok) throw new Error(`HTTP ${r.status}`);
console.log(await r.json());

Example response

Show the full example response
{
  "signo": "signo",
  "numero": "numero",
  "rutaWeb": "rutaWeb",
  "urlOficial": "https://consultas2.oepm.es/ceo/jsp/busqueda/consultaAvanzada.xhtml",
  "modalidad": "M",
  "clases": [
    1
  ],
  "estado": "solicitada",
  "estadoPublicado": "estadoPublicado",
  "fechaEstado": "2026-10-22",
  "fechaSolicitud": "2026-10-22",
  "fechaRegistro": "2026-10-22",
  "personaFisica": true,
  "titulares": [
    {
      "tipo": "sociedad",
      "empresaId": "12345",
      "denominacion": "ACME SERVICIOS SL",
      "denominacionLegible": "Acme Servicios, S.L.",
      "provincia": "MADRID",
      "rutaWeb": "rutaWeb"
    }
  ],
  "actualizadoEn": "2026-10-22T00:00:00.000Z",
  "delMismoTitular": {
    "marcas": [
      {
        "signo": "signo",
        "numero": "numero",
        "rutaWeb": "rutaWeb",
        "modalidad": "M",
        "clases": [
          1
        ],
        "estado": "solicitada",
        "estadoPublicado": "estadoPublicado",
        "fechaEstado": "2026-10-22"
      }
    ],
    "total": 1
  },
  "parecidas": [
    {
      "signo": "signo",
      "numero": "numero",
      "rutaWeb": "rutaWeb",
      "modalidad": "M",
      "clases": [
        1
      ],
      "estado": "solicitada",
      "estadoPublicado": "estadoPublicado",
      "fechaEstado": "2026-10-22"
    }
  ]
}

Dossier (PDF) and verification

The professional dossier and the check that a PDF is authentic.

GET/v1/dev/empresas/{empresaId}/dossier/avance

How much data the company has in each dossier section

Use it when: To let a user choose which dossier sections are worth buying.

Price

15 euro cents per call served · 120 calls per minute per key (all routes).

Parameters

FieldTypeRequiredValues, limits and default
empresaIdtextoyesCompany id, as returned by the search.. patrón ^\d{1,18}$
idiomatextonoLanguage of the texts the server writes (es, en, fr, de, pt, it). Names and figures are never translated.. uno de: es, en, fr, de, pt, it. default: es

Errors

  • 400 validacion — A field of the request is not valid; `campos` says which. Fix the fields listed in `campos` and call again. An invalid request is never charged.
  • 401 no_autenticado — The Authorization header with the API key is missing. Send the key as `Authorization: Bearer <key>`. You create it in the developer console.
  • 401 clave_invalida — The key does not exist or was revoked. Check you copied the whole key and did not revoke it. Create another one in the console if needed.
  • 401 clave_no_es_de_desarrollador — The key belongs to a law firm, not to a developer account. This API only accepts developer-account keys.
  • 402 saldo_insuficiente — There is not enough balance for this call. It was neither served nor charged. Top up your balance in the console (Billing).
  • 403 clave_ip_no_permitida — The key has an IP allow-list and this address is not on it. Add your server address to the allow-list in the console, or remove the restriction.
  • 403 identidad_sin_verificar — The account identity is not verified yet; balance cannot be spent without it. Verify the account identity in the console Settings.
  • 404 no_encontrado — It is not in the loaded gazette data, or it is a person who exercised the right to object or erasure. Check the id. If you only have a name use `GET /v1/dev/empresas/resolver?q=`.
  • 429 demasiadas_peticiones — Too many calls in a row with this key (120 per minute). Wait the seconds in the `Retry-After` header and retry with growing delay. The limit is per key.
  • 500 error_interno — A failure on our side. Nothing is charged. Retry in a few seconds; if it persists, write to us with the time.

Example request

curl

curl "https://api.jurilia.com/v1/dev/empresas/12345/dossier/avance" \
  -H "Authorization: Bearer $JURILIA_API_KEY"

Python

import os
import requests

r = requests.get(
    "https://api.jurilia.com/v1/dev/empresas/12345/dossier/avance",
    headers={"Authorization": f"Bearer {os.environ['JURILIA_API_KEY']}"},
    timeout=30,
)
r.raise_for_status()
print(r.json())

JavaScript

const url = new URL("https://api.jurilia.com/v1/dev/empresas/12345/dossier/avance");
const r = await fetch(url, {
  headers: { Authorization: `Bearer ${process.env.JURILIA_API_KEY}` },
});
if (!r.ok) throw new Error(`HTTP ${r.status}`);
console.log(await r.json());

Example response

Show the full example response
{
  "empresaId": "12345",
  "idioma": "es",
  "titulo": "titulo",
  "intro": "intro",
  "resumen": "resumen",
  "sinDatos": "sinDatos",
  "conDatos": 0,
  "total": 1,
  "secciones": [
    {
      "seccion": "seccion",
      "etiqueta": "etiqueta",
      "estado": "con-datos",
      "recuento": "recuento",
      "incluye": "incluye"
    }
  ],
  "mapaNiveles": [
    {
      "nivel": "1",
      "etiqueta": "etiqueta",
      "recuento": "recuento"
    }
  ],
  "grupos": [
    {
      "grupo": "registro",
      "titulo": "titulo",
      "intro": "intro",
      "cierre": "cierre",
      "secciones": [
        "seccione"
      ]
    }
  ]
}
GET/v1/dev/empresas/{empresaId}/dossier

Professional due-diligence dossier as a PDF

Use it when: The deliverable: a signed, verifiable PDF for a file or a client.

Price

250 euro cents per call served · 120 calls per minute per key (all routes).

Parameters

FieldTypeRequiredValues, limits and default
empresaIdtextoyesCompany id, as returned by the search.. patrón ^\d{1,18}$
idiomatextonoLanguage of the texts the server writes (es, en, fr, de, pt, it). Names and figures are never translated.. uno de: es, en, fr, de, pt, it. default: es
seccionestextonoDossier sections, comma separated, or todas (default).. hasta 300 caracteres. default: todas
redtextonoHow far the dossier connection map goes: 1, 2, 3 or completo.. uno de: 1, 2, 3, completo. default: 1

Errors

  • 400 validacion — A field of the request is not valid; `campos` says which. Fix the fields listed in `campos` and call again. An invalid request is never charged.
  • 401 no_autenticado — The Authorization header with the API key is missing. Send the key as `Authorization: Bearer <key>`. You create it in the developer console.
  • 401 clave_invalida — The key does not exist or was revoked. Check you copied the whole key and did not revoke it. Create another one in the console if needed.
  • 401 clave_no_es_de_desarrollador — The key belongs to a law firm, not to a developer account. This API only accepts developer-account keys.
  • 402 saldo_insuficiente — There is not enough balance for this call. It was neither served nor charged. Top up your balance in the console (Billing).
  • 403 clave_ip_no_permitida — The key has an IP allow-list and this address is not on it. Add your server address to the allow-list in the console, or remove the restriction.
  • 403 identidad_sin_verificar — The account identity is not verified yet; balance cannot be spent without it. Verify the account identity in the console Settings.
  • 404 no_encontrado — It is not in the loaded gazette data, or it is a person who exercised the right to object or erasure. Check the id. If you only have a name use `GET /v1/dev/empresas/resolver?q=`.
  • 429 demasiadas_peticiones — Too many calls in a row with this key (120 per minute). Wait the seconds in the `Retry-After` header and retry with growing delay. The limit is per key.
  • 500 error_interno — A failure on our side. Nothing is charged. Retry in a few seconds; if it persists, write to us with the time.

Example request

curl

curl -o salida.pdf "https://api.jurilia.com/v1/dev/empresas/12345/dossier" \
  -H "Authorization: Bearer $JURILIA_API_KEY"

Python

import os
import requests

r = requests.get(
    "https://api.jurilia.com/v1/dev/empresas/12345/dossier",
    headers={"Authorization": f"Bearer {os.environ['JURILIA_API_KEY']}"},
    timeout=30,
)
r.raise_for_status()
open("salida.pdf", "wb").write(r.content)

JavaScript

const url = new URL("https://api.jurilia.com/v1/dev/empresas/12345/dossier");
const r = await fetch(url, {
  headers: { Authorization: `Bearer ${process.env.JURILIA_API_KEY}` },
});
if (!r.ok) throw new Error(`HTTP ${r.status}`);
await require("node:fs/promises").writeFile("salida.pdf", Buffer.from(await r.arrayBuffer()));

Example response

This route returns a file (PDF, Excel or CSV), not JSON.

GET/v1/dev/verificar-dossier/{codigo}

Verify a dossier from its code and SHA-256 fingerprint

Use it when: To prove that a PDF is exactly the one Jurilia generated.

Price

3 euro cents per call served · 120 calls per minute per key (all routes).

Parameters

FieldTypeRequiredValues, limits and default
codigotextoyesVerification code printed on the PDF.. al menos 1 caracteres; hasta 40 caracteres

Errors

  • 400 validacion — A field of the request is not valid; `campos` says which. Fix the fields listed in `campos` and call again. An invalid request is never charged.
  • 401 no_autenticado — The Authorization header with the API key is missing. Send the key as `Authorization: Bearer <key>`. You create it in the developer console.
  • 401 clave_invalida — The key does not exist or was revoked. Check you copied the whole key and did not revoke it. Create another one in the console if needed.
  • 401 clave_no_es_de_desarrollador — The key belongs to a law firm, not to a developer account. This API only accepts developer-account keys.
  • 402 saldo_insuficiente — There is not enough balance for this call. It was neither served nor charged. Top up your balance in the console (Billing).
  • 403 clave_ip_no_permitida — The key has an IP allow-list and this address is not on it. Add your server address to the allow-list in the console, or remove the restriction.
  • 403 identidad_sin_verificar — The account identity is not verified yet; balance cannot be spent without it. Verify the account identity in the console Settings.
  • 404 no_encontrado — It is not in the loaded gazette data, or it is a person who exercised the right to object or erasure. Check the id. If you only have a name use `GET /v1/dev/empresas/resolver?q=`.
  • 429 demasiadas_peticiones — Too many calls in a row with this key (120 per minute). Wait the seconds in the `Retry-After` header and retry with growing delay. The limit is per key.
  • 500 error_interno — A failure on our side. Nothing is charged. Retry in a few seconds; if it persists, write to us with the time.

Example request

curl

curl "https://api.jurilia.com/v1/dev/verificar-dossier/ABCD-1234" \
  -H "Authorization: Bearer $JURILIA_API_KEY"

Python

import os
import requests

r = requests.get(
    "https://api.jurilia.com/v1/dev/verificar-dossier/ABCD-1234",
    headers={"Authorization": f"Bearer {os.environ['JURILIA_API_KEY']}"},
    timeout=30,
)
r.raise_for_status()
print(r.json())

JavaScript

const url = new URL("https://api.jurilia.com/v1/dev/verificar-dossier/ABCD-1234");
const r = await fetch(url, {
  headers: { Authorization: `Bearer ${process.env.JURILIA_API_KEY}` },
});
if (!r.ok) throw new Error(`HTTP ${r.status}`);
console.log(await r.json());

Example response

Show the full example response
{
  "codigo": "ABCD-1234",
  "empresaId": "12345",
  "denominacion": "ACME SERVICIOS SL",
  "denominacionLegible": "Acme Servicios, S.L.",
  "idioma": "es",
  "secciones": [
    "seccione"
  ],
  "generadoEn": "2026-10-22T08:00:00.000Z",
  "sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855",
  "tamanoEnBytes": 0
}

Explore: provinces, sectors, rankings, news and reports

The same routes as the public site, with a key instead of a daily quota.

GET/v1/dev/empresas/portada

Coverage figures, latest filings and provinces: the front page of the data

Use it when: To show how fresh and how large the loaded data is.

Price

3 euro cents per call served · 120 calls per minute per key (all routes).

Parameters

No parameters.

Errors

  • 401 no_autenticado — The Authorization header with the API key is missing. Send the key as `Authorization: Bearer <key>`. You create it in the developer console.
  • 401 clave_invalida — The key does not exist or was revoked. Check you copied the whole key and did not revoke it. Create another one in the console if needed.
  • 401 clave_no_es_de_desarrollador — The key belongs to a law firm, not to a developer account. This API only accepts developer-account keys.
  • 402 saldo_insuficiente — There is not enough balance for this call. It was neither served nor charged. Top up your balance in the console (Billing).
  • 403 clave_ip_no_permitida — The key has an IP allow-list and this address is not on it. Add your server address to the allow-list in the console, or remove the restriction.
  • 403 identidad_sin_verificar — The account identity is not verified yet; balance cannot be spent without it. Verify the account identity in the console Settings.
  • 429 demasiadas_peticiones — Too many calls in a row with this key (120 per minute). Wait the seconds in the `Retry-After` header and retry with growing delay. The limit is per key.
  • 500 error_interno — A failure on our side. Nothing is charged. Retry in a few seconds; if it persists, write to us with the time.

Example request

curl

curl "https://api.jurilia.com/v1/dev/empresas/portada" \
  -H "Authorization: Bearer $JURILIA_API_KEY"

Python

import os
import requests

r = requests.get(
    "https://api.jurilia.com/v1/dev/empresas/portada",
    headers={"Authorization": f"Bearer {os.environ['JURILIA_API_KEY']}"},
    timeout=30,
)
r.raise_for_status()
print(r.json())

JavaScript

const url = new URL("https://api.jurilia.com/v1/dev/empresas/portada");
const r = await fetch(url, {
  headers: { Authorization: `Bearer ${process.env.JURILIA_API_KEY}` },
});
if (!r.ok) throw new Error(`HTTP ${r.status}`);
console.log(await r.json());

Example response

Show the full example response
{
  "cifras": {
    "sociedades": 0,
    "cargos": 0,
    "inscripciones": 0,
    "dias": 0,
    "ultimoDia": "2026-10-22"
  },
  "novedades": {
    "constitucion": [
      {
        "identificador": "BORME-A-2026-200-28",
        "urlPdf": "https://www.boe.es/borme/dias/2026/10/22/pdfs/BORME-A-2026-200-28.pdf",
        "numero": 7,
        "fecha": "2026-10-22",
        "empresaId": "12345",
        "denominacion": "ACME SERVICIOS SL",
        "denominacionLegible": "Acme Servicios, S.L.",
        "provincia": "MADRID",
        "provinciaLegible": "Madrid",
        "tipo": "tipo",
        "capitalCentimos": 300000,
        "rutaWeb": "rutaWeb"
      }
    ],
    "situacion_concursal": [
      {
        "identificador": "BORME-A-2026-200-28",
        "urlPdf": "https://www.boe.es/borme/dias/2026/10/22/pdfs/BORME-A-2026-200-28.pdf",
        "numero": 7,
        "fecha": "2026-10-22",
        "empresaId": "12345",
        "denominacion": "ACME SERVICIOS SL",
        "denominacionLegible": "Acme Servicios, S.L.",
        "provincia": "MADRID",
        "provinciaLegible": "Madrid",
        "tipo": "tipo",
        "capitalCentimos": 300000,
        "rutaWeb": "rutaWeb"
      }
    ],
    "disolucion": [
      {
        "identificador": "BORME-A-2026-200-28",
        "urlPdf": "https://www.boe.es/borme/dias/2026/10/22/pdfs/BORME-A-2026-200-28.pdf",
        "numero": 7,
        "fecha": "2026-10-22",
        "empresaId": "12345",
        "denominacion": "ACME SERVICIOS SL",
        "denominacionLegible": "Acme Servicios, S.L.",
        "provincia": "MADRID",
        "provinciaLegible": "Madrid",
        "tipo": "tipo",
        "capitalCentimos": 300000,
        "rutaWeb": "rutaWeb"
      }
    ]
  },
  "provincias": [
    {
      "provincia": "MADRID",
      "provinciaLegible": "Madrid",
      "provinciaSlug": "madrid",
      "empresas": 0
    }
  ],
  "tiposDestacados": [
    "tiposDestacado"
  ]
}
GET/v1/dev/empresas/buscar

Search companies (or people) with every option of the public search

Use it when: When you need the filters of the public search (people mode, province, holder type, status) or the corrected spelling suggestion.

Price

3 euro cents per call served · 120 calls per minute per key (all routes).

Parameters

FieldTypeRequiredValues, limits and default
qtextoyesWhat to look for.. al menos 1 caracteres; hasta 120 caracteres
modotextonoMatch mode or search mode.. uno de: empresa, persona. default: contiene / empresa (según la ruta)
provinciatextonoProvince name or slug.. al menos 1 caracteres; hasta 60 caracteres
titulartextonoHolder type: sociedad (company) or empresario_individual (sole trader).. uno de: sociedad, empresario_individual
estadotextonoStatus filter.. uno de: concurso, disolucion, extincion
limiteenteronoMaximum results.. mínimo 1; máximo 50. default: 50 (avisos: entregas) · 100 (eventos) · 20 (búsquedas)

Errors

  • 400 validacion — A field of the request is not valid; `campos` says which. Fix the fields listed in `campos` and call again. An invalid request is never charged.
  • 401 no_autenticado — The Authorization header with the API key is missing. Send the key as `Authorization: Bearer <key>`. You create it in the developer console.
  • 401 clave_invalida — The key does not exist or was revoked. Check you copied the whole key and did not revoke it. Create another one in the console if needed.
  • 401 clave_no_es_de_desarrollador — The key belongs to a law firm, not to a developer account. This API only accepts developer-account keys.
  • 402 saldo_insuficiente — There is not enough balance for this call. It was neither served nor charged. Top up your balance in the console (Billing).
  • 403 clave_ip_no_permitida — The key has an IP allow-list and this address is not on it. Add your server address to the allow-list in the console, or remove the restriction.
  • 403 identidad_sin_verificar — The account identity is not verified yet; balance cannot be spent without it. Verify the account identity in the console Settings.
  • 429 demasiadas_peticiones — Too many calls in a row with this key (120 per minute). Wait the seconds in the `Retry-After` header and retry with growing delay. The limit is per key.
  • 500 error_interno — A failure on our side. Nothing is charged. Retry in a few seconds; if it persists, write to us with the time.

Example request

curl

curl "https://api.jurilia.com/v1/dev/empresas/buscar?q=Panader%C3%ADa+L%C3%B3pez+S.L." \
  -H "Authorization: Bearer $JURILIA_API_KEY"

Python

import os
import requests

r = requests.get(
    "https://api.jurilia.com/v1/dev/empresas/buscar",
    headers={"Authorization": f"Bearer {os.environ['JURILIA_API_KEY']}"},
    params={"q":"Panadería López S.L."},
    timeout=30,
)
r.raise_for_status()
print(r.json())

JavaScript

const url = new URL("https://api.jurilia.com/v1/dev/empresas/buscar");
url.search = new URLSearchParams({"q":"Panadería López S.L."});
const r = await fetch(url, {
  headers: { Authorization: `Bearer ${process.env.JURILIA_API_KEY}` },
});
if (!r.ok) throw new Error(`HTTP ${r.status}`);
console.log(await r.json());

Example response

Show the full example response
{
  "modo": "empresa",
  "tipo": "nombre",
  "sugerencia": "sugerencia",
  "empresas": [
    {
      "id": "12345",
      "denominacion": "ACME SERVICIOS SL",
      "denominacionLegible": "Acme Servicios, S.L.",
      "provincia": "MADRID",
      "provinciaLegible": "Madrid",
      "provinciaSlug": "madrid",
      "hoja": "M-123456",
      "titular": "sociedad",
      "primeraPublicacion": "2026-10-22",
      "ultimaPublicacion": "2026-10-22",
      "concursalPublicadoEn": "2026-10-22",
      "disolucionPublicadaEn": "2026-10-22",
      "extincionPublicadaEn": "2026-10-22",
      "nombreQueCasa": "nombreQueCasa",
      "cambioDeNombre": {
        "nombreAnterior": "nombreAnterior",
        "fecha": "2026-10-22",
        "fuente": {
          "identificador": "BORME-A-2026-200-28",
          "urlPdf": "https://www.boe.es/borme/dias/2026/10/22/pdfs/BORME-A-2026-200-28.pdf",
          "numero": 7,
          "fecha": "2026-10-22"
        }
      },
      "rutaWeb": "rutaWeb"
    }
  ],
  "personas": [
    {
      "slug": "ana-garcia-lopez",
      "nombre": "ANA GARCIA LOPEZ",
      "nombreLegible": "Ana García López",
      "empresas": 0,
      "ultimaAparicion": "2026-10-22",
      "homonimos": "posibles",
      "casa": "exacto",
      "rutaWeb": "rutaWeb"
    }
  ],
  "tambienPuedeBuscar": [
    {
      "clase": "municipio",
      "id": "12345",
      "nombre": "ANA GARCIA LOPEZ",
      "provincia": "MADRID",
      "sociedades": 0,
      "rutaWeb": "rutaWeb",
      "extinguida": true,
      "denominacion": "ACME SERVICIOS SL",
      "denominacionLegible": "Acme Servicios, S.L."
    }
  ]
}
GET/v1/dev/empresas/sugerencias

Type-ahead suggestions for companies, people, towns, sectors and addresses

Use it when: For a search-as-you-type box.

Price

3 euro cents per call served · 120 calls per minute per key (all routes).

Parameters

FieldTypeRequiredValues, limits and default
qtextoyesWhat to look for.. al menos 1 caracteres; hasta 120 caracteres
personastextonotrue to suggest people only (up to five); without it, companies, towns, sectors and addresses.. uno de: true, false

Errors

  • 400 validacion — A field of the request is not valid; `campos` says which. Fix the fields listed in `campos` and call again. An invalid request is never charged.
  • 401 no_autenticado — The Authorization header with the API key is missing. Send the key as `Authorization: Bearer <key>`. You create it in the developer console.
  • 401 clave_invalida — The key does not exist or was revoked. Check you copied the whole key and did not revoke it. Create another one in the console if needed.
  • 401 clave_no_es_de_desarrollador — The key belongs to a law firm, not to a developer account. This API only accepts developer-account keys.
  • 402 saldo_insuficiente — There is not enough balance for this call. It was neither served nor charged. Top up your balance in the console (Billing).
  • 403 clave_ip_no_permitida — The key has an IP allow-list and this address is not on it. Add your server address to the allow-list in the console, or remove the restriction.
  • 403 identidad_sin_verificar — The account identity is not verified yet; balance cannot be spent without it. Verify the account identity in the console Settings.
  • 429 demasiadas_peticiones — Too many calls in a row with this key (120 per minute). Wait the seconds in the `Retry-After` header and retry with growing delay. The limit is per key.
  • 500 error_interno — A failure on our side. Nothing is charged. Retry in a few seconds; if it persists, write to us with the time.

Example request

curl

curl "https://api.jurilia.com/v1/dev/empresas/sugerencias?q=Panader%C3%ADa+L%C3%B3pez+S.L." \
  -H "Authorization: Bearer $JURILIA_API_KEY"

Python

import os
import requests

r = requests.get(
    "https://api.jurilia.com/v1/dev/empresas/sugerencias",
    headers={"Authorization": f"Bearer {os.environ['JURILIA_API_KEY']}"},
    params={"q":"Panadería López S.L."},
    timeout=30,
)
r.raise_for_status()
print(r.json())

JavaScript

const url = new URL("https://api.jurilia.com/v1/dev/empresas/sugerencias");
url.search = new URLSearchParams({"q":"Panadería López S.L."});
const r = await fetch(url, {
  headers: { Authorization: `Bearer ${process.env.JURILIA_API_KEY}` },
});
if (!r.ok) throw new Error(`HTTP ${r.status}`);
console.log(await r.json());

Example response

Show the full example response
{
  "sugerencias": [
    {
      "tipo": "empresa",
      "id": "12345",
      "nombre": "ANA GARCIA LOPEZ",
      "nombreLegible": "Ana García López",
      "denominacion": "ACME SERVICIOS SL",
      "denominacionLegible": "Acme Servicios, S.L.",
      "provincia": "MADRID",
      "sociedades": 0,
      "rutaWeb": "rutaWeb",
      "extinguida": true,
      "valor": "valor",
      "fuenteNif": "borme"
    }
  ]
}
GET/v1/dev/empresas/provincias

Provinces with their number of companies

Use it when: To list provinces.

Price

3 euro cents per call served · 120 calls per minute per key (all routes).

Parameters

No parameters.

Errors

  • 400 validacion — A field of the request is not valid; `campos` says which. Fix the fields listed in `campos` and call again. An invalid request is never charged.
  • 401 no_autenticado — The Authorization header with the API key is missing. Send the key as `Authorization: Bearer <key>`. You create it in the developer console.
  • 401 clave_invalida — The key does not exist or was revoked. Check you copied the whole key and did not revoke it. Create another one in the console if needed.
  • 401 clave_no_es_de_desarrollador — The key belongs to a law firm, not to a developer account. This API only accepts developer-account keys.
  • 402 saldo_insuficiente — There is not enough balance for this call. It was neither served nor charged. Top up your balance in the console (Billing).
  • 403 clave_ip_no_permitida — The key has an IP allow-list and this address is not on it. Add your server address to the allow-list in the console, or remove the restriction.
  • 403 identidad_sin_verificar — The account identity is not verified yet; balance cannot be spent without it. Verify the account identity in the console Settings.
  • 429 demasiadas_peticiones — Too many calls in a row with this key (120 per minute). Wait the seconds in the `Retry-After` header and retry with growing delay. The limit is per key.
  • 500 error_interno — A failure on our side. Nothing is charged. Retry in a few seconds; if it persists, write to us with the time.

Example request

curl

curl "https://api.jurilia.com/v1/dev/empresas/provincias" \
  -H "Authorization: Bearer $JURILIA_API_KEY"

Python

import os
import requests

r = requests.get(
    "https://api.jurilia.com/v1/dev/empresas/provincias",
    headers={"Authorization": f"Bearer {os.environ['JURILIA_API_KEY']}"},
    timeout=30,
)
r.raise_for_status()
print(r.json())

JavaScript

const url = new URL("https://api.jurilia.com/v1/dev/empresas/provincias");
const r = await fetch(url, {
  headers: { Authorization: `Bearer ${process.env.JURILIA_API_KEY}` },
});
if (!r.ok) throw new Error(`HTTP ${r.status}`);
console.log(await r.json());

Example response

Show the full example response
{
  "provincias": [
    {
      "provincia": "MADRID",
      "provinciaLegible": "Madrid",
      "provinciaSlug": "madrid",
      "empresas": 0
    }
  ]
}
GET/v1/dev/empresas/provincias/{provincia}

A province: companies, towns, sectors and initials

Use it when: To explore a province.

Price

3 euro cents per call served · 120 calls per minute per key (all routes).

Parameters

FieldTypeRequiredValues, limits and default
provinciatextoyesProvince name or slug.. al menos 1 caracteres; hasta 120 caracteres
estadotextonoStatus filter.. uno de: concurso, disolucion, extincion
paginaenteronoPage number, starting at 1. Alternatively use cursor.. mínimo 1; máximo 10000. default: 1

Errors

  • 400 validacion — A field of the request is not valid; `campos` says which. Fix the fields listed in `campos` and call again. An invalid request is never charged.
  • 401 no_autenticado — The Authorization header with the API key is missing. Send the key as `Authorization: Bearer <key>`. You create it in the developer console.
  • 401 clave_invalida — The key does not exist or was revoked. Check you copied the whole key and did not revoke it. Create another one in the console if needed.
  • 401 clave_no_es_de_desarrollador — The key belongs to a law firm, not to a developer account. This API only accepts developer-account keys.
  • 402 saldo_insuficiente — There is not enough balance for this call. It was neither served nor charged. Top up your balance in the console (Billing).
  • 403 clave_ip_no_permitida — The key has an IP allow-list and this address is not on it. Add your server address to the allow-list in the console, or remove the restriction.
  • 403 identidad_sin_verificar — The account identity is not verified yet; balance cannot be spent without it. Verify the account identity in the console Settings.
  • 404 no_encontrado — It is not in the loaded gazette data, or it is a person who exercised the right to object or erasure. Check the id. If you only have a name use `GET /v1/dev/empresas/resolver?q=`.
  • 429 demasiadas_peticiones — Too many calls in a row with this key (120 per minute). Wait the seconds in the `Retry-After` header and retry with growing delay. The limit is per key.
  • 500 error_interno — A failure on our side. Nothing is charged. Retry in a few seconds; if it persists, write to us with the time.

Example request

curl

curl "https://api.jurilia.com/v1/dev/empresas/provincias/madrid" \
  -H "Authorization: Bearer $JURILIA_API_KEY"

Python

import os
import requests

r = requests.get(
    "https://api.jurilia.com/v1/dev/empresas/provincias/madrid",
    headers={"Authorization": f"Bearer {os.environ['JURILIA_API_KEY']}"},
    timeout=30,
)
r.raise_for_status()
print(r.json())

JavaScript

const url = new URL("https://api.jurilia.com/v1/dev/empresas/provincias/madrid");
const r = await fetch(url, {
  headers: { Authorization: `Bearer ${process.env.JURILIA_API_KEY}` },
});
if (!r.ok) throw new Error(`HTTP ${r.status}`);
console.log(await r.json());

Example response

Show the full example response
{
  "provincia": {
    "provincia": "MADRID",
    "provinciaLegible": "Madrid",
    "provinciaSlug": "madrid"
  },
  "empresas": [
    {
      "id": "12345",
      "denominacion": "ACME SERVICIOS SL",
      "denominacionLegible": "Acme Servicios, S.L.",
      "provincia": "MADRID",
      "provinciaLegible": "Madrid",
      "titular": "sociedad",
      "primeraPublicacion": "2026-10-22",
      "ultimaPublicacion": "2026-10-22",
      "concursalPublicadoEn": "2026-10-22",
      "disolucionPublicadaEn": "2026-10-22",
      "extincionPublicadaEn": "2026-10-22",
      "rutaWeb": "rutaWeb"
    }
  ],
  "pagina": 1,
  "hayMas": true,
  "total": 1,
  "municipios": [
    {
      "slug": "ana-garcia-lopez",
      "nombre": "ANA GARCIA LOPEZ",
      "empresas": 0,
      "ultimaPublicacion": "2026-10-22",
      "rutaWeb": "rutaWeb",
      "codigo": "ABCD-1234"
    }
  ],
  "sectores": [
    {
      "slug": "ana-garcia-lopez",
      "nombre": "ANA GARCIA LOPEZ",
      "empresas": 0,
      "ultimaPublicacion": "2026-10-22",
      "rutaWeb": "rutaWeb",
      "division": {
        "codigo": "ABCD-1234",
        "titulo": "titulo"
      }
    }
  ],
  "iniciales": [
    {
      "letra": "letra",
      "slug": "ana-garcia-lopez",
      "fichas": 0
    }
  ]
}
GET/v1/dev/empresas/provincias/{provincia}/municipios/{municipio}

A town: its companies and figures

Use it when: To explore a town.

Price

3 euro cents per call served · 120 calls per minute per key (all routes).

Parameters

FieldTypeRequiredValues, limits and default
provinciatextoyesProvince name or slug.. al menos 1 caracteres; hasta 120 caracteres
municipiotextoyesTown name or slug.. al menos 1 caracteres; hasta 120 caracteres
paginaenteronoPage number, starting at 1. Alternatively use cursor.. mínimo 1; máximo 10000. default: 1

Errors

  • 400 validacion — A field of the request is not valid; `campos` says which. Fix the fields listed in `campos` and call again. An invalid request is never charged.
  • 401 no_autenticado — The Authorization header with the API key is missing. Send the key as `Authorization: Bearer <key>`. You create it in the developer console.
  • 401 clave_invalida — The key does not exist or was revoked. Check you copied the whole key and did not revoke it. Create another one in the console if needed.
  • 401 clave_no_es_de_desarrollador — The key belongs to a law firm, not to a developer account. This API only accepts developer-account keys.
  • 402 saldo_insuficiente — There is not enough balance for this call. It was neither served nor charged. Top up your balance in the console (Billing).
  • 403 clave_ip_no_permitida — The key has an IP allow-list and this address is not on it. Add your server address to the allow-list in the console, or remove the restriction.
  • 403 identidad_sin_verificar — The account identity is not verified yet; balance cannot be spent without it. Verify the account identity in the console Settings.
  • 404 no_encontrado — It is not in the loaded gazette data, or it is a person who exercised the right to object or erasure. Check the id. If you only have a name use `GET /v1/dev/empresas/resolver?q=`.
  • 429 demasiadas_peticiones — Too many calls in a row with this key (120 per minute). Wait the seconds in the `Retry-After` header and retry with growing delay. The limit is per key.
  • 500 error_interno — A failure on our side. Nothing is charged. Retry in a few seconds; if it persists, write to us with the time.

Example request

curl

curl "https://api.jurilia.com/v1/dev/empresas/provincias/madrid/municipios/madrid" \
  -H "Authorization: Bearer $JURILIA_API_KEY"

Python

import os
import requests

r = requests.get(
    "https://api.jurilia.com/v1/dev/empresas/provincias/madrid/municipios/madrid",
    headers={"Authorization": f"Bearer {os.environ['JURILIA_API_KEY']}"},
    timeout=30,
)
r.raise_for_status()
print(r.json())

JavaScript

const url = new URL("https://api.jurilia.com/v1/dev/empresas/provincias/madrid/municipios/madrid");
const r = await fetch(url, {
  headers: { Authorization: `Bearer ${process.env.JURILIA_API_KEY}` },
});
if (!r.ok) throw new Error(`HTTP ${r.status}`);
console.log(await r.json());

Example response

Show the full example response
{
  "provincia": {
    "provincia": "MADRID",
    "provinciaLegible": "Madrid",
    "provinciaSlug": "madrid"
  },
  "titulo": "titulo",
  "fichas": 0,
  "pagina": 1,
  "paginas": 1,
  "empresas": [
    {
      "id": "12345",
      "denominacion": "ACME SERVICIOS SL",
      "denominacionLegible": "Acme Servicios, S.L.",
      "provincia": "MADRID",
      "provinciaLegible": "Madrid",
      "titular": "sociedad",
      "primeraPublicacion": "2026-10-22",
      "ultimaPublicacion": "2026-10-22",
      "concursalPublicadoEn": "2026-10-22",
      "disolucionPublicadaEn": "2026-10-22",
      "extincionPublicadaEn": "2026-10-22",
      "rutaWeb": "rutaWeb"
    }
  ]
}
GET/v1/dev/empresas/provincias/{provincia}/sectores/{sector}

A sector within a province

Use it when: To explore a sector.

Price

3 euro cents per call served · 120 calls per minute per key (all routes).

Parameters

FieldTypeRequiredValues, limits and default
provinciatextoyesProvince name or slug.. al menos 1 caracteres; hasta 120 caracteres
sectortextoyesSector: two-digit CNAE division, or its slug.. al menos 1 caracteres; hasta 120 caracteres
paginaenteronoPage number, starting at 1. Alternatively use cursor.. mínimo 1; máximo 10000. default: 1

Errors

  • 400 validacion — A field of the request is not valid; `campos` says which. Fix the fields listed in `campos` and call again. An invalid request is never charged.
  • 401 no_autenticado — The Authorization header with the API key is missing. Send the key as `Authorization: Bearer <key>`. You create it in the developer console.
  • 401 clave_invalida — The key does not exist or was revoked. Check you copied the whole key and did not revoke it. Create another one in the console if needed.
  • 401 clave_no_es_de_desarrollador — The key belongs to a law firm, not to a developer account. This API only accepts developer-account keys.
  • 402 saldo_insuficiente — There is not enough balance for this call. It was neither served nor charged. Top up your balance in the console (Billing).
  • 403 clave_ip_no_permitida — The key has an IP allow-list and this address is not on it. Add your server address to the allow-list in the console, or remove the restriction.
  • 403 identidad_sin_verificar — The account identity is not verified yet; balance cannot be spent without it. Verify the account identity in the console Settings.
  • 404 no_encontrado — It is not in the loaded gazette data, or it is a person who exercised the right to object or erasure. Check the id. If you only have a name use `GET /v1/dev/empresas/resolver?q=`.
  • 429 demasiadas_peticiones — Too many calls in a row with this key (120 per minute). Wait the seconds in the `Retry-After` header and retry with growing delay. The limit is per key.
  • 500 error_interno — A failure on our side. Nothing is charged. Retry in a few seconds; if it persists, write to us with the time.

Example request

curl

curl "https://api.jurilia.com/v1/dev/empresas/provincias/madrid/sectores/comercio" \
  -H "Authorization: Bearer $JURILIA_API_KEY"

Python

import os
import requests

r = requests.get(
    "https://api.jurilia.com/v1/dev/empresas/provincias/madrid/sectores/comercio",
    headers={"Authorization": f"Bearer {os.environ['JURILIA_API_KEY']}"},
    timeout=30,
)
r.raise_for_status()
print(r.json())

JavaScript

const url = new URL("https://api.jurilia.com/v1/dev/empresas/provincias/madrid/sectores/comercio");
const r = await fetch(url, {
  headers: { Authorization: `Bearer ${process.env.JURILIA_API_KEY}` },
});
if (!r.ok) throw new Error(`HTTP ${r.status}`);
console.log(await r.json());

Example response

Show the full example response
{
  "provincia": {
    "provincia": "MADRID",
    "provinciaLegible": "Madrid",
    "provinciaSlug": "madrid"
  },
  "titulo": "titulo",
  "fichas": 0,
  "pagina": 1,
  "paginas": 1,
  "empresas": [
    {
      "id": "12345",
      "denominacion": "ACME SERVICIOS SL",
      "denominacionLegible": "Acme Servicios, S.L.",
      "provincia": "MADRID",
      "provinciaLegible": "Madrid",
      "titular": "sociedad",
      "primeraPublicacion": "2026-10-22",
      "ultimaPublicacion": "2026-10-22",
      "concursalPublicadoEn": "2026-10-22",
      "disolucionPublicadaEn": "2026-10-22",
      "extincionPublicadaEn": "2026-10-22",
      "rutaWeb": "rutaWeb"
    }
  ]
}
GET/v1/dev/empresas/provincias/{provincia}/letras/{letra}

Companies of a province by initial letter

Use it when: To page through companies alphabetically.

Price

3 euro cents per call served · 120 calls per minute per key (all routes).

Parameters

FieldTypeRequiredValues, limits and default
provinciatextoyesProvince name or slug.. al menos 1 caracteres; hasta 120 caracteres
letratextoyesInitial letter.. al menos 1 caracteres; hasta 10 caracteres
paginaenteronoPage number, starting at 1. Alternatively use cursor.. mínimo 1; máximo 10000. default: 1

Errors

  • 400 validacion — A field of the request is not valid; `campos` says which. Fix the fields listed in `campos` and call again. An invalid request is never charged.
  • 401 no_autenticado — The Authorization header with the API key is missing. Send the key as `Authorization: Bearer <key>`. You create it in the developer console.
  • 401 clave_invalida — The key does not exist or was revoked. Check you copied the whole key and did not revoke it. Create another one in the console if needed.
  • 401 clave_no_es_de_desarrollador — The key belongs to a law firm, not to a developer account. This API only accepts developer-account keys.
  • 402 saldo_insuficiente — There is not enough balance for this call. It was neither served nor charged. Top up your balance in the console (Billing).
  • 403 clave_ip_no_permitida — The key has an IP allow-list and this address is not on it. Add your server address to the allow-list in the console, or remove the restriction.
  • 403 identidad_sin_verificar — The account identity is not verified yet; balance cannot be spent without it. Verify the account identity in the console Settings.
  • 404 no_encontrado — It is not in the loaded gazette data, or it is a person who exercised the right to object or erasure. Check the id. If you only have a name use `GET /v1/dev/empresas/resolver?q=`.
  • 429 demasiadas_peticiones — Too many calls in a row with this key (120 per minute). Wait the seconds in the `Retry-After` header and retry with growing delay. The limit is per key.
  • 500 error_interno — A failure on our side. Nothing is charged. Retry in a few seconds; if it persists, write to us with the time.

Example request

curl

curl "https://api.jurilia.com/v1/dev/empresas/provincias/madrid/letras/a" \
  -H "Authorization: Bearer $JURILIA_API_KEY"

Python

import os
import requests

r = requests.get(
    "https://api.jurilia.com/v1/dev/empresas/provincias/madrid/letras/a",
    headers={"Authorization": f"Bearer {os.environ['JURILIA_API_KEY']}"},
    timeout=30,
)
r.raise_for_status()
print(r.json())

JavaScript

const url = new URL("https://api.jurilia.com/v1/dev/empresas/provincias/madrid/letras/a");
const r = await fetch(url, {
  headers: { Authorization: `Bearer ${process.env.JURILIA_API_KEY}` },
});
if (!r.ok) throw new Error(`HTTP ${r.status}`);
console.log(await r.json());

Example response

Show the full example response
{
  "provincia": {
    "provincia": "MADRID",
    "provinciaLegible": "Madrid",
    "provinciaSlug": "madrid"
  },
  "titulo": "titulo",
  "fichas": 0,
  "pagina": 1,
  "paginas": 1,
  "empresas": [
    {
      "id": "12345",
      "denominacion": "ACME SERVICIOS SL",
      "denominacionLegible": "Acme Servicios, S.L.",
      "provincia": "MADRID",
      "provinciaLegible": "Madrid",
      "titular": "sociedad",
      "primeraPublicacion": "2026-10-22",
      "ultimaPublicacion": "2026-10-22",
      "concursalPublicadoEn": "2026-10-22",
      "disolucionPublicadaEn": "2026-10-22",
      "extincionPublicadaEn": "2026-10-22",
      "rutaWeb": "rutaWeb"
    }
  ]
}
GET/v1/dev/empresas/provincias/{provincia}/observatorio

Monthly observatory of a province

Use it when: For regional dashboards.

Price

3 euro cents per call served · 120 calls per minute per key (all routes).

Parameters

FieldTypeRequiredValues, limits and default
provinciatextoyesProvince name or slug.. al menos 1 caracteres; hasta 120 caracteres

Errors

  • 400 validacion — A field of the request is not valid; `campos` says which. Fix the fields listed in `campos` and call again. An invalid request is never charged.
  • 401 no_autenticado — The Authorization header with the API key is missing. Send the key as `Authorization: Bearer <key>`. You create it in the developer console.
  • 401 clave_invalida — The key does not exist or was revoked. Check you copied the whole key and did not revoke it. Create another one in the console if needed.
  • 401 clave_no_es_de_desarrollador — The key belongs to a law firm, not to a developer account. This API only accepts developer-account keys.
  • 402 saldo_insuficiente — There is not enough balance for this call. It was neither served nor charged. Top up your balance in the console (Billing).
  • 403 clave_ip_no_permitida — The key has an IP allow-list and this address is not on it. Add your server address to the allow-list in the console, or remove the restriction.
  • 403 identidad_sin_verificar — The account identity is not verified yet; balance cannot be spent without it. Verify the account identity in the console Settings.
  • 404 no_encontrado — It is not in the loaded gazette data, or it is a person who exercised the right to object or erasure. Check the id. If you only have a name use `GET /v1/dev/empresas/resolver?q=`.
  • 429 demasiadas_peticiones — Too many calls in a row with this key (120 per minute). Wait the seconds in the `Retry-After` header and retry with growing delay. The limit is per key.
  • 500 error_interno — A failure on our side. Nothing is charged. Retry in a few seconds; if it persists, write to us with the time.

Example request

curl

curl "https://api.jurilia.com/v1/dev/empresas/provincias/madrid/observatorio" \
  -H "Authorization: Bearer $JURILIA_API_KEY"

Python

import os
import requests

r = requests.get(
    "https://api.jurilia.com/v1/dev/empresas/provincias/madrid/observatorio",
    headers={"Authorization": f"Bearer {os.environ['JURILIA_API_KEY']}"},
    timeout=30,
)
r.raise_for_status()
print(r.json())

JavaScript

const url = new URL("https://api.jurilia.com/v1/dev/empresas/provincias/madrid/observatorio");
const r = await fetch(url, {
  headers: { Authorization: `Bearer ${process.env.JURILIA_API_KEY}` },
});
if (!r.ok) throw new Error(`HTTP ${r.status}`);
console.log(await r.json());

Example response

Show the full example response
{
  "provincia": {
    "provincia": "MADRID",
    "provinciaLegible": "Madrid",
    "provinciaSlug": "madrid"
  },
  "meses": [
    {
      "mes": "mes",
      "cobertura": {
        "estado": "completo",
        "diasCargados": 0,
        "diasDelMes": 0
      },
      "cifras": [
        {
          "acto": "constitucion",
          "actos": 0,
          "frenteAlAnterior": {
            "diferencia": 0,
            "porcentaje": 0
          },
          "frenteAlAnioAnterior": {
            "diferencia": 0,
            "porcentaje": 0
          }
        }
      ]
    }
  ]
}
GET/v1/dev/empresas/provincias/{provincia}/actos/{acto}/{mes}

Acts of one type published in a province in a month

Use it when: For monthly lists, for example incorporations.

Price

3 euro cents per call served · 120 calls per minute per key (all routes).

Parameters

FieldTypeRequiredValues, limits and default
provinciatextoyesProvince name or slug.. al menos 1 caracteres; hasta 120 caracteres
actotextoyesBORME act type (for example constitucion, nombramientos, disolucion).. al menos 1 caracteres; hasta 40 caracteres
mestextoyesMonth, YYYY-MM.. patrón ^\d{4}-(0[1-9]|1[0-2])$
paginaenteronoPage number, starting at 1. Alternatively use cursor.. mínimo 1; máximo 10000. default: 1

Errors

  • 400 validacion — A field of the request is not valid; `campos` says which. Fix the fields listed in `campos` and call again. An invalid request is never charged.
  • 401 no_autenticado — The Authorization header with the API key is missing. Send the key as `Authorization: Bearer <key>`. You create it in the developer console.
  • 401 clave_invalida — The key does not exist or was revoked. Check you copied the whole key and did not revoke it. Create another one in the console if needed.
  • 401 clave_no_es_de_desarrollador — The key belongs to a law firm, not to a developer account. This API only accepts developer-account keys.
  • 402 saldo_insuficiente — There is not enough balance for this call. It was neither served nor charged. Top up your balance in the console (Billing).
  • 403 clave_ip_no_permitida — The key has an IP allow-list and this address is not on it. Add your server address to the allow-list in the console, or remove the restriction.
  • 403 identidad_sin_verificar — The account identity is not verified yet; balance cannot be spent without it. Verify the account identity in the console Settings.
  • 404 no_encontrado — It is not in the loaded gazette data, or it is a person who exercised the right to object or erasure. Check the id. If you only have a name use `GET /v1/dev/empresas/resolver?q=`.
  • 429 demasiadas_peticiones — Too many calls in a row with this key (120 per minute). Wait the seconds in the `Retry-After` header and retry with growing delay. The limit is per key.
  • 500 error_interno — A failure on our side. Nothing is charged. Retry in a few seconds; if it persists, write to us with the time.

Example request

curl

curl "https://api.jurilia.com/v1/dev/empresas/provincias/madrid/actos/nombramientos/2026-09" \
  -H "Authorization: Bearer $JURILIA_API_KEY"

Python

import os
import requests

r = requests.get(
    "https://api.jurilia.com/v1/dev/empresas/provincias/madrid/actos/nombramientos/2026-09",
    headers={"Authorization": f"Bearer {os.environ['JURILIA_API_KEY']}"},
    timeout=30,
)
r.raise_for_status()
print(r.json())

JavaScript

const url = new URL("https://api.jurilia.com/v1/dev/empresas/provincias/madrid/actos/nombramientos/2026-09");
const r = await fetch(url, {
  headers: { Authorization: `Bearer ${process.env.JURILIA_API_KEY}` },
});
if (!r.ok) throw new Error(`HTTP ${r.status}`);
console.log(await r.json());

Example response

Show the full example response
{
  "provincia": {
    "provincia": "MADRID",
    "provinciaLegible": "Madrid",
    "provinciaSlug": "madrid"
  },
  "acto": "constitucion",
  "mes": "mes",
  "total": 1,
  "cobertura": {
    "estado": "completo",
    "diasCargados": 0,
    "diasDelMes": 0
  },
  "pagina": 1,
  "hayMas": true,
  "actos": [
    {
      "empresaId": "12345",
      "denominacion": "ACME SERVICIOS SL",
      "denominacionLegible": "Acme Servicios, S.L.",
      "fecha": "2026-10-22",
      "numero": 7,
      "identificador": "BORME-A-2026-200-28",
      "urlPdf": "https://www.boe.es/borme/dias/2026/10/22/pdfs/BORME-A-2026-200-28.pdf",
      "rutaWeb": "rutaWeb"
    }
  ]
}
GET/v1/dev/empresas/actos/{tipo}

Companies with an act of a given type

Use it when: For lists by act type.

Price

3 euro cents per call served · 120 calls per minute per key (all routes).

Parameters

FieldTypeRequiredValues, limits and default
tipotextoyesType filter, comma separated.. al menos 1 caracteres; hasta 120 caracteres
provinciatextonoProvince name or slug.. al menos 1 caracteres; hasta 60 caracteres
paginaenteronoPage number, starting at 1. Alternatively use cursor.. mínimo 1; máximo 10000. default: 1

Errors

  • 400 validacion — A field of the request is not valid; `campos` says which. Fix the fields listed in `campos` and call again. An invalid request is never charged.
  • 401 no_autenticado — The Authorization header with the API key is missing. Send the key as `Authorization: Bearer <key>`. You create it in the developer console.
  • 401 clave_invalida — The key does not exist or was revoked. Check you copied the whole key and did not revoke it. Create another one in the console if needed.
  • 401 clave_no_es_de_desarrollador — The key belongs to a law firm, not to a developer account. This API only accepts developer-account keys.
  • 402 saldo_insuficiente — There is not enough balance for this call. It was neither served nor charged. Top up your balance in the console (Billing).
  • 403 clave_ip_no_permitida — The key has an IP allow-list and this address is not on it. Add your server address to the allow-list in the console, or remove the restriction.
  • 403 identidad_sin_verificar — The account identity is not verified yet; balance cannot be spent without it. Verify the account identity in the console Settings.
  • 404 no_encontrado — It is not in the loaded gazette data, or it is a person who exercised the right to object or erasure. Check the id. If you only have a name use `GET /v1/dev/empresas/resolver?q=`.
  • 429 demasiadas_peticiones — Too many calls in a row with this key (120 per minute). Wait the seconds in the `Retry-After` header and retry with growing delay. The limit is per key.
  • 500 error_interno — A failure on our side. Nothing is charged. Retry in a few seconds; if it persists, write to us with the time.

Example request

curl

curl "https://api.jurilia.com/v1/dev/empresas/actos/constitucion" \
  -H "Authorization: Bearer $JURILIA_API_KEY"

Python

import os
import requests

r = requests.get(
    "https://api.jurilia.com/v1/dev/empresas/actos/constitucion",
    headers={"Authorization": f"Bearer {os.environ['JURILIA_API_KEY']}"},
    timeout=30,
)
r.raise_for_status()
print(r.json())

JavaScript

const url = new URL("https://api.jurilia.com/v1/dev/empresas/actos/constitucion");
const r = await fetch(url, {
  headers: { Authorization: `Bearer ${process.env.JURILIA_API_KEY}` },
});
if (!r.ok) throw new Error(`HTTP ${r.status}`);
console.log(await r.json());

Example response

Show the full example response
{
  "tipo": "tipo",
  "desde": "2026-10-22",
  "hasta": "2026-10-22",
  "recortado": true,
  "pagina": 1,
  "hayMas": true,
  "actos": [
    {
      "fecha": "2026-10-22",
      "numero": 7,
      "identificador": "BORME-A-2026-200-28",
      "urlPdf": "https://www.boe.es/borme/dias/2026/10/22/pdfs/BORME-A-2026-200-28.pdf",
      "provincia": "MADRID",
      "empresaId": "12345",
      "denominacion": "ACME SERVICIOS SL",
      "denominacionLegible": "Acme Servicios, S.L.",
      "tipo": "tipo",
      "etiqueta": "etiqueta",
      "capitalCentimos": 300000,
      "capitalResultanteCentimos": 0,
      "domicilio": "domicilio",
      "detalle": "detalle",
      "rutaWeb": "rutaWeb"
    }
  ]
}
GET/v1/dev/empresas/rankings

Rankings: age and capital by sector and region

Use it when: For rankings.

Price

3 euro cents per call served · 120 calls per minute per key (all routes).

Parameters

FieldTypeRequiredValues, limits and default
criteriotextonoWhat is ranked: capital, antiguedad (age) or recientes (latest incorporations; nationwide only). Default capital.. uno de: capital, antiguedad, recientes
ambitotextonoWhere: nacional (default), comunidad (region), provincia or sector.. uno de: nacional, comunidad, provincia, sector
valortextonoThe specific scope: the two-letter region code (MD), or the province or sector URL slug.. al menos 1 caracteres; hasta 120 caracteres

Errors

  • 400 validacion — A field of the request is not valid; `campos` says which. Fix the fields listed in `campos` and call again. An invalid request is never charged.
  • 401 no_autenticado — The Authorization header with the API key is missing. Send the key as `Authorization: Bearer <key>`. You create it in the developer console.
  • 401 clave_invalida — The key does not exist or was revoked. Check you copied the whole key and did not revoke it. Create another one in the console if needed.
  • 401 clave_no_es_de_desarrollador — The key belongs to a law firm, not to a developer account. This API only accepts developer-account keys.
  • 402 saldo_insuficiente — There is not enough balance for this call. It was neither served nor charged. Top up your balance in the console (Billing).
  • 403 clave_ip_no_permitida — The key has an IP allow-list and this address is not on it. Add your server address to the allow-list in the console, or remove the restriction.
  • 403 identidad_sin_verificar — The account identity is not verified yet; balance cannot be spent without it. Verify the account identity in the console Settings.
  • 404 no_encontrado — It is not in the loaded gazette data, or it is a person who exercised the right to object or erasure. Check the id. If you only have a name use `GET /v1/dev/empresas/resolver?q=`.
  • 429 demasiadas_peticiones — Too many calls in a row with this key (120 per minute). Wait the seconds in the `Retry-After` header and retry with growing delay. The limit is per key.
  • 500 error_interno — A failure on our side. Nothing is charged. Retry in a few seconds; if it persists, write to us with the time.

Example request

curl

curl "https://api.jurilia.com/v1/dev/empresas/rankings" \
  -H "Authorization: Bearer $JURILIA_API_KEY"

Python

import os
import requests

r = requests.get(
    "https://api.jurilia.com/v1/dev/empresas/rankings",
    headers={"Authorization": f"Bearer {os.environ['JURILIA_API_KEY']}"},
    timeout=30,
)
r.raise_for_status()
print(r.json())

JavaScript

const url = new URL("https://api.jurilia.com/v1/dev/empresas/rankings");
const r = await fetch(url, {
  headers: { Authorization: `Bearer ${process.env.JURILIA_API_KEY}` },
});
if (!r.ok) throw new Error(`HTTP ${r.status}`);
console.log(await r.json());

Example response

Show the full example response
{
  "criterio": "capital",
  "ambito": "nacional",
  "valor": "valor",
  "disponible": true,
  "filas": [
    {
      "posicion": 0,
      "id": "12345",
      "denominacion": "ACME SERVICIOS SL",
      "denominacionLegible": "Acme Servicios, S.L.",
      "provincia": "MADRID",
      "provinciaLegible": "Madrid",
      "valor": 0,
      "fuente": {
        "identificador": "BORME-A-2026-200-28",
        "urlPdf": "https://www.boe.es/borme/dias/2026/10/22/pdfs/BORME-A-2026-200-28.pdf",
        "numero": 7,
        "fecha": "2026-10-22"
      },
      "rutaWeb": "rutaWeb"
    }
  ]
}
GET/v1/dev/empresas/indice/{letra}

Alphabetical index of companies

Use it when: For an alphabetical directory.

Price

3 euro cents per call served · 120 calls per minute per key (all routes).

Parameters

FieldTypeRequiredValues, limits and default
letratextoyesInitial letter.. al menos 1 caracteres; hasta 10 caracteres

Errors

  • 400 validacion — A field of the request is not valid; `campos` says which. Fix the fields listed in `campos` and call again. An invalid request is never charged.
  • 401 no_autenticado — The Authorization header with the API key is missing. Send the key as `Authorization: Bearer <key>`. You create it in the developer console.
  • 401 clave_invalida — The key does not exist or was revoked. Check you copied the whole key and did not revoke it. Create another one in the console if needed.
  • 401 clave_no_es_de_desarrollador — The key belongs to a law firm, not to a developer account. This API only accepts developer-account keys.
  • 402 saldo_insuficiente — There is not enough balance for this call. It was neither served nor charged. Top up your balance in the console (Billing).
  • 403 clave_ip_no_permitida — The key has an IP allow-list and this address is not on it. Add your server address to the allow-list in the console, or remove the restriction.
  • 403 identidad_sin_verificar — The account identity is not verified yet; balance cannot be spent without it. Verify the account identity in the console Settings.
  • 404 no_encontrado — It is not in the loaded gazette data, or it is a person who exercised the right to object or erasure. Check the id. If you only have a name use `GET /v1/dev/empresas/resolver?q=`.
  • 429 demasiadas_peticiones — Too many calls in a row with this key (120 per minute). Wait the seconds in the `Retry-After` header and retry with growing delay. The limit is per key.
  • 500 error_interno — A failure on our side. Nothing is charged. Retry in a few seconds; if it persists, write to us with the time.

Example request

curl

curl "https://api.jurilia.com/v1/dev/empresas/indice/a" \
  -H "Authorization: Bearer $JURILIA_API_KEY"

Python

import os
import requests

r = requests.get(
    "https://api.jurilia.com/v1/dev/empresas/indice/a",
    headers={"Authorization": f"Bearer {os.environ['JURILIA_API_KEY']}"},
    timeout=30,
)
r.raise_for_status()
print(r.json())

JavaScript

const url = new URL("https://api.jurilia.com/v1/dev/empresas/indice/a");
const r = await fetch(url, {
  headers: { Authorization: `Bearer ${process.env.JURILIA_API_KEY}` },
});
if (!r.ok) throw new Error(`HTTP ${r.status}`);
console.log(await r.json());

Example response

Show the full example response
{
  "letra": "letra",
  "provincias": [
    {
      "provincia": "MADRID",
      "provinciaLegible": "Madrid",
      "provinciaSlug": "madrid",
      "fichas": 0
    }
  ]
}
GET/v1/dev/empresas/barometro

Barometer of incorporations, dissolutions and insolvencies

Use it when: For economic barometers.

Price

3 euro cents per call served · 120 calls per minute per key (all routes).

Parameters

FieldTypeRequiredValues, limits and default
granularidadtextonodia (day), semana (week, default) or mes (month).. uno de: dia, semana, mes
clavetextonoThe period of the breakdown (default the last completed one, never the current one).. al menos 1 caracteres; hasta 20 caracteres

Errors

  • 400 validacion — A field of the request is not valid; `campos` says which. Fix the fields listed in `campos` and call again. An invalid request is never charged.
  • 401 no_autenticado — The Authorization header with the API key is missing. Send the key as `Authorization: Bearer <key>`. You create it in the developer console.
  • 401 clave_invalida — The key does not exist or was revoked. Check you copied the whole key and did not revoke it. Create another one in the console if needed.
  • 401 clave_no_es_de_desarrollador — The key belongs to a law firm, not to a developer account. This API only accepts developer-account keys.
  • 402 saldo_insuficiente — There is not enough balance for this call. It was neither served nor charged. Top up your balance in the console (Billing).
  • 403 clave_ip_no_permitida — The key has an IP allow-list and this address is not on it. Add your server address to the allow-list in the console, or remove the restriction.
  • 403 identidad_sin_verificar — The account identity is not verified yet; balance cannot be spent without it. Verify the account identity in the console Settings.
  • 404 no_encontrado — It is not in the loaded gazette data, or it is a person who exercised the right to object or erasure. Check the id. If you only have a name use `GET /v1/dev/empresas/resolver?q=`.
  • 429 demasiadas_peticiones — Too many calls in a row with this key (120 per minute). Wait the seconds in the `Retry-After` header and retry with growing delay. The limit is per key.
  • 500 error_interno — A failure on our side. Nothing is charged. Retry in a few seconds; if it persists, write to us with the time.

Example request

curl

curl "https://api.jurilia.com/v1/dev/empresas/barometro" \
  -H "Authorization: Bearer $JURILIA_API_KEY"

Python

import os
import requests

r = requests.get(
    "https://api.jurilia.com/v1/dev/empresas/barometro",
    headers={"Authorization": f"Bearer {os.environ['JURILIA_API_KEY']}"},
    timeout=30,
)
r.raise_for_status()
print(r.json())

JavaScript

const url = new URL("https://api.jurilia.com/v1/dev/empresas/barometro");
const r = await fetch(url, {
  headers: { Authorization: `Bearer ${process.env.JURILIA_API_KEY}` },
});
if (!r.ok) throw new Error(`HTTP ${r.status}`);
console.log(await r.json());

Example response

Show the full example response
{
  "granularidad": "dia",
  "hoy": "2026-10-22",
  "actos": [
    "constitucion"
  ],
  "periodos": [
    {
      "clave": "clave",
      "etiqueta": "etiqueta",
      "etiquetaCorta": "etiquetaCorta",
      "completo": true,
      "porActo": {
        "constitucion": {
          "actos": 0,
          "comparacion": {
            "diferencia": 0,
            "porcentaje": 0
          }
        },
        "disolucion": {
          "actos": 0,
          "comparacion": {
            "diferencia": 0,
            "porcentaje": 0
          }
        },
        "extincion": {
          "actos": 0,
          "comparacion": {
            "diferencia": 0,
            "porcentaje": 0
          }
        },
        "ampliacion_de_capital": {
          "actos": 0,
          "comparacion": {
            "diferencia": 0,
            "porcentaje": 0
          }
        },
        "reduccion_de_capital": {
          "actos": 0,
          "comparacion": {
            "diferencia": 0,
            "porcentaje": 0
          }
        },
        "cambio_de_domicilio": {
          "actos": 0,
          "comparacion": {
            "diferencia": 0,
            "porcentaje": 0
          }
        }
      }
    }
  ],
  "desglose": {
    "clave": "clave",
    "etiqueta": "etiqueta",
    "completo": true,
    "porProvincia": [
      {
        "provincia": "MADRID",
        "provinciaLegible": "Madrid",
        "comunidad": "comunidad",
        "comunidadNombre": "comunidadNombre",
        "porActo": {
          "constitucion": 0,
          "disolucion": 0,
          "extincion": 0,
          "ampliacion_de_capital": 0,
          "reduccion_de_capital": 0,
          "cambio_de_domicilio": 0
        },
        "total": 1
      }
    ],
    "porComunidad": [
      {
        "comunidad": "comunidad",
        "comunidadNombre": "comunidadNombre",
        "porActo": {
          "constitucion": 0,
          "disolucion": 0,
          "extincion": 0,
          "ampliacion_de_capital": 0,
          "reduccion_de_capital": 0,
          "cambio_de_domicilio": 0
        },
        "total": 1
      }
    ]
  },
  "constitucionesPorSector": {
    "clave": "clave",
    "etiqueta": "etiqueta",
    "completo": true,
    "constituciones": 0,
    "conSector": 0,
    "sectores": [
      {
        "codigo": "ABCD-1234",
        "titulo": "titulo",
        "constituciones": 0
      }
    ]
  }
}
GET/v1/dev/empresas/mapa

Map data: companies by province or town

Use it when: To draw maps.

Price

3 euro cents per call served · 120 calls per minute per key (all routes).

Parameters

FieldTypeRequiredValues, limits and default
qtextonoWhat to look for.. hasta 120 caracteres
municipiotextonoTown name or slug.. al menos 1 caracteres; hasta 120 caracteres
provinciatextonoProvince name or slug.. al menos 1 caracteres; hasta 60 caracteres

Errors

  • 400 validacion — A field of the request is not valid; `campos` says which. Fix the fields listed in `campos` and call again. An invalid request is never charged.
  • 401 no_autenticado — The Authorization header with the API key is missing. Send the key as `Authorization: Bearer <key>`. You create it in the developer console.
  • 401 clave_invalida — The key does not exist or was revoked. Check you copied the whole key and did not revoke it. Create another one in the console if needed.
  • 401 clave_no_es_de_desarrollador — The key belongs to a law firm, not to a developer account. This API only accepts developer-account keys.
  • 402 saldo_insuficiente — There is not enough balance for this call. It was neither served nor charged. Top up your balance in the console (Billing).
  • 403 clave_ip_no_permitida — The key has an IP allow-list and this address is not on it. Add your server address to the allow-list in the console, or remove the restriction.
  • 403 identidad_sin_verificar — The account identity is not verified yet; balance cannot be spent without it. Verify the account identity in the console Settings.
  • 429 demasiadas_peticiones — Too many calls in a row with this key (120 per minute). Wait the seconds in the `Retry-After` header and retry with growing delay. The limit is per key.
  • 500 error_interno — A failure on our side. Nothing is charged. Retry in a few seconds; if it persists, write to us with the time.

Example request

curl

curl "https://api.jurilia.com/v1/dev/empresas/mapa" \
  -H "Authorization: Bearer $JURILIA_API_KEY"

Python

import os
import requests

r = requests.get(
    "https://api.jurilia.com/v1/dev/empresas/mapa",
    headers={"Authorization": f"Bearer {os.environ['JURILIA_API_KEY']}"},
    timeout=30,
)
r.raise_for_status()
print(r.json())

JavaScript

const url = new URL("https://api.jurilia.com/v1/dev/empresas/mapa");
const r = await fetch(url, {
  headers: { Authorization: `Bearer ${process.env.JURILIA_API_KEY}` },
});
if (!r.ok) throw new Error(`HTTP ${r.status}`);
console.log(await r.json());

Example response

Show the full example response
{
  "municipios": [
    {
      "codigo": "ABCD-1234",
      "nombre": "ANA GARCIA LOPEZ",
      "provincia": "MADRID",
      "provinciaLegible": "Madrid"
    }
  ],
  "constituciones": {
    "municipio": "municipio",
    "desde": "2026-10-22",
    "hasta": "2026-10-22",
    "hayMas": true,
    "filas": [
      {
        "identificador": "BORME-A-2026-200-28",
        "urlPdf": "https://www.boe.es/borme/dias/2026/10/22/pdfs/BORME-A-2026-200-28.pdf",
        "numero": 7,
        "fecha": "2026-10-22",
        "empresaId": "12345",
        "denominacion": "ACME SERVICIOS SL",
        "denominacionLegible": "Acme Servicios, S.L.",
        "provincia": "MADRID",
        "domicilio": "domicilio",
        "geocodificado": true,
        "rutaWeb": "rutaWeb"
      }
    ]
  }
}
GET/v1/dev/empresas/domicilios/{slug}

Companies registered at the same address

Use it when: To see who shares an address.

Price

3 euro cents per call served · 120 calls per minute per key (all routes).

Parameters

FieldTypeRequiredValues, limits and default
slugtextoyesSlug of a person name or of a news article / address, as returned by the API.. al menos 1 caracteres; hasta 240 caracteres
paginaenteronoPage number, starting at 1. Alternatively use cursor.. mínimo 1; máximo 10000. default: 1

Errors

  • 400 validacion — A field of the request is not valid; `campos` says which. Fix the fields listed in `campos` and call again. An invalid request is never charged.
  • 401 no_autenticado — The Authorization header with the API key is missing. Send the key as `Authorization: Bearer <key>`. You create it in the developer console.
  • 401 clave_invalida — The key does not exist or was revoked. Check you copied the whole key and did not revoke it. Create another one in the console if needed.
  • 401 clave_no_es_de_desarrollador — The key belongs to a law firm, not to a developer account. This API only accepts developer-account keys.
  • 402 saldo_insuficiente — There is not enough balance for this call. It was neither served nor charged. Top up your balance in the console (Billing).
  • 403 clave_ip_no_permitida — The key has an IP allow-list and this address is not on it. Add your server address to the allow-list in the console, or remove the restriction.
  • 403 identidad_sin_verificar — The account identity is not verified yet; balance cannot be spent without it. Verify the account identity in the console Settings.
  • 404 no_encontrado — It is not in the loaded gazette data, or it is a person who exercised the right to object or erasure. Check the id. If you only have a name use `GET /v1/dev/empresas/resolver?q=`.
  • 429 demasiadas_peticiones — Too many calls in a row with this key (120 per minute). Wait the seconds in the `Retry-After` header and retry with growing delay. The limit is per key.
  • 500 error_interno — A failure on our side. Nothing is charged. Retry in a few seconds; if it persists, write to us with the time.

Example request

curl

curl "https://api.jurilia.com/v1/dev/empresas/domicilios/ana-garcia-lopez" \
  -H "Authorization: Bearer $JURILIA_API_KEY"

Python

import os
import requests

r = requests.get(
    "https://api.jurilia.com/v1/dev/empresas/domicilios/ana-garcia-lopez",
    headers={"Authorization": f"Bearer {os.environ['JURILIA_API_KEY']}"},
    timeout=30,
)
r.raise_for_status()
print(r.json())

JavaScript

const url = new URL("https://api.jurilia.com/v1/dev/empresas/domicilios/ana-garcia-lopez");
const r = await fetch(url, {
  headers: { Authorization: `Bearer ${process.env.JURILIA_API_KEY}` },
});
if (!r.ok) throw new Error(`HTTP ${r.status}`);
console.log(await r.json());

Example response

Show the full example response
{
  "slug": "ana-garcia-lopez",
  "domicilio": "domicilio",
  "provincia": "MADRID",
  "provinciaLegible": "Madrid",
  "total": 1,
  "vigentes": 0,
  "recortado": true,
  "pagina": 1,
  "hayMas": true,
  "sociedades": [
    {
      "empresa": {
        "id": "12345",
        "denominacion": "ACME SERVICIOS SL",
        "denominacionLegible": "Acme Servicios, S.L.",
        "provincia": "MADRID",
        "concursalPublicadoEn": "2026-10-22",
        "disolucionPublicadaEn": "2026-10-22",
        "extincionPublicadaEn": "2026-10-22",
        "rutaWeb": "rutaWeb"
      },
      "vigente": true,
      "tramos": [
        {
          "altaPor": "constitucion",
          "desde": {
            "fecha": "2026-10-22",
            "identificador": "BORME-A-2026-200-28",
            "urlPdf": "https://www.boe.es/borme/dias/2026/10/22/pdfs/BORME-A-2026-200-28.pdf",
            "numero": 7
          },
          "hasta": {
            "fecha": "2026-10-22",
            "identificador": "BORME-A-2026-200-28",
            "urlPdf": "https://www.boe.es/borme/dias/2026/10/22/pdfs/BORME-A-2026-200-28.pdf",
            "numero": 7
          }
        }
      ]
    }
  ],
  "cronologia": [
    {
      "tipo": "alta",
      "fecha": "2026-10-22",
      "empresa": {
        "id": "12345",
        "denominacion": "ACME SERVICIOS SL",
        "denominacionLegible": "Acme Servicios, S.L.",
        "provincia": "MADRID",
        "concursalPublicadoEn": "2026-10-22",
        "disolucionPublicadaEn": "2026-10-22",
        "extincionPublicadaEn": "2026-10-22",
        "rutaWeb": "rutaWeb"
      },
      "cita": {
        "fecha": "2026-10-22",
        "identificador": "BORME-A-2026-200-28",
        "urlPdf": "https://www.boe.es/borme/dias/2026/10/22/pdfs/BORME-A-2026-200-28.pdf",
        "numero": 7
      },
      "altaPor": "constitucion"
    }
  ],
  "eventosTotales": 0
}
GET/v1/dev/empresas/avanzada

Combined advanced search with objective criteria

Use it when: To combine criteria such as incorporated in 2024, in Málaga, with minimum capital.

Price

8 euro cents per call served · 120 calls per minute per key (all routes).

Parameters

FieldTypeRequiredValues, limits and default
provinciatextonoProvince name or slug.. hasta 300 caracteres
municipiotextonoTown name or slug.. hasta 300 caracteres
formatextonoLegal-form acronym: SL, SA, SLU, SAU, SLP, SLL, SCOOP…. hasta 300 caracteres
sectortextonoSector: two-digit CNAE division, or its slug.. hasta 300 caracteres
situaciontexto o lista de textonoStatus: activa, concurso, disuelta or extinguida. May be repeated (any of them).
const_desdetextonoIncorporated since this date (YYYY-MM-DD).. hasta 300 caracteres
const_hastatextonoIncorporated up to this date (YYYY-MM-DD).. hasta 300 caracteres
fin_desdetextonoDissolution or extinction published since this date (the first of the two).. hasta 300 caracteres
fin_hastatextonoDissolution or extinction published up to this date.. hasta 300 caracteres
vida_maxtextonoPublished lifetime (incorporation to dissolution or extinction) of at most this many months (max 1,200).. hasta 300 caracteres
cap_mintextonoMinimum capital, in euros.. hasta 300 caracteres
cap_maxtextonoMaximum capital, in euros.. hasta 300 caracteres
cambios_mintextonoAt least this many published changes of administration (within the period, if given).. hasta 300 caracteres
traslados_mintextonoAt least this many published address moves (within the period, if given).. hasta 300 caracteres
organotextonoAdministration body: sole administrator, joint, several, board…. hasta 300 caracteres
niftextono1 for companies with a known, unambiguous tax ID only.. hasta 300 caracteres
contratostextono1 for companies with awarded public contracts only.. hasta 300 caracteres
subvencionestextono1 for companies with granted subsidies only.. hasta 300 caracteres
personatextonoName of a person holding office, first name and surname as published. A name is not an identity.. hasta 300 caracteres
vigentetextono1 for companies where that person holds office with no published cessation.. hasta 300 caracteres
domiciliotextonoThe whole address as published («C/ MAYOR 12 (MADRID)»).. hasta 300 caracteres
const_aniotextonoYear of incorporation.. hasta 300 caracteres
comparte_mintextonoShares the last published address with at least this many companies, itself included (2 to 5,000).. hasta 300 caracteres
periodo_desdetextonoYear from which the minimum changes and moves count (only with cambios_min or traslados_min).. hasta 300 caracteres
periodo_hastatextonoYear up to which they count, both included.. hasta 300 caracteres
ordentextonoreciente (default) or antiguo.. hasta 300 caracteres. default: reciente
paginatextonoPage number, starting at 1. Alternatively use cursor.. hasta 300 caracteres. default: 1

Errors

  • 400 validacion — A field of the request is not valid; `campos` says which. Fix the fields listed in `campos` and call again. An invalid request is never charged.
  • 401 no_autenticado — The Authorization header with the API key is missing. Send the key as `Authorization: Bearer <key>`. You create it in the developer console.
  • 401 clave_invalida — The key does not exist or was revoked. Check you copied the whole key and did not revoke it. Create another one in the console if needed.
  • 401 clave_no_es_de_desarrollador — The key belongs to a law firm, not to a developer account. This API only accepts developer-account keys.
  • 402 saldo_insuficiente — There is not enough balance for this call. It was neither served nor charged. Top up your balance in the console (Billing).
  • 403 clave_ip_no_permitida — The key has an IP allow-list and this address is not on it. Add your server address to the allow-list in the console, or remove the restriction.
  • 403 identidad_sin_verificar — The account identity is not verified yet; balance cannot be spent without it. Verify the account identity in the console Settings.
  • 429 demasiadas_peticiones — Too many calls in a row with this key (120 per minute). Wait the seconds in the `Retry-After` header and retry with growing delay. The limit is per key.
  • 500 error_interno — A failure on our side. Nothing is charged. Retry in a few seconds; if it persists, write to us with the time.

Example request

curl

curl "https://api.jurilia.com/v1/dev/empresas/avanzada" \
  -H "Authorization: Bearer $JURILIA_API_KEY"

Python

import os
import requests

r = requests.get(
    "https://api.jurilia.com/v1/dev/empresas/avanzada",
    headers={"Authorization": f"Bearer {os.environ['JURILIA_API_KEY']}"},
    timeout=30,
)
r.raise_for_status()
print(r.json())

JavaScript

const url = new URL("https://api.jurilia.com/v1/dev/empresas/avanzada");
const r = await fetch(url, {
  headers: { Authorization: `Bearer ${process.env.JURILIA_API_KEY}` },
});
if (!r.ok) throw new Error(`HTTP ${r.status}`);
console.log(await r.json());

Example response

Show the full example response
{
  "resultado": "ok",
  "ignorados": [
    "ignorado"
  ],
  "total": 1,
  "acotado": true,
  "pagina": 1,
  "paginas": 1,
  "municipioNoReconocido": true,
  "alDia": "2026-10-22",
  "filas": [
    {
      "id": "12345",
      "denominacion": "ACME SERVICIOS SL",
      "denominacionLegible": "Acme Servicios, S.L.",
      "provincia": "MADRID",
      "provinciaLegible": "Madrid",
      "constitucion": "2026-10-22",
      "disolucion": "2026-10-22",
      "extincion": "2026-10-22",
      "concursal": "2026-10-22",
      "capitalCentimos": 300000,
      "cambiosAdministracion": 0,
      "traslados": 0,
      "pruebas": [
        {
          "criterio": "constitucion",
          "fuente": "borme",
          "fecha": "2026-10-22",
          "cantidad": 0,
          "importeCentimos": 1250000,
          "texto": "texto",
          "periodo": {
            "desde": 0,
            "hasta": 0
          },
          "cita": {
            "identificador": "BORME-A-2026-200-28",
            "urlPdf": "https://www.boe.es/borme/dias/2026/10/22/pdfs/BORME-A-2026-200-28.pdf",
            "numero": 7,
            "fecha": "2026-10-22"
          }
        }
      ],
      "rutaWeb": "rutaWeb"
    }
  ]
}
GET/v1/dev/empresas/prospeccion

Prospecting lists: companies filtered for outreach

Use it when: To build lead lists.

Price

15 euro cents per call served · 120 calls per minute per key (all routes).

Parameters

FieldTypeRequiredValues, limits and default
actotextonoBORME act type (for example constitucion, nombramientos, disolucion).. hasta 300 caracteres
periodotextonoList period: semana (week), mes (month, default), mes_anterior, treinta_dias or rango (with desde and hasta; at most 93 days).. hasta 300 caracteres
desdetextonoStart date, YYYY-MM-DD.. hasta 300 caracteres
hastatextonoEnd date of the range (YYYY-MM-DD), with periodo=rango.. hasta 300 caracteres
provinciatextonoProvince name or slug.. hasta 300 caracteres
municipiotextonoTown name or slug.. hasta 300 caracteres
formatextonoLegal-form acronym: SL, SA, SLU, SAU, SLP, SLL, SCOOP…. hasta 300 caracteres
sectortextonoSector: two-digit CNAE division, or its slug.. hasta 300 caracteres
cap_mintextonoMinimum capital, in euros.. hasta 300 caracteres
paginatextonoPage number, starting at 1. Alternatively use cursor.. hasta 300 caracteres. default: 1

Errors

  • 400 validacion — A field of the request is not valid; `campos` says which. Fix the fields listed in `campos` and call again. An invalid request is never charged.
  • 401 no_autenticado — The Authorization header with the API key is missing. Send the key as `Authorization: Bearer <key>`. You create it in the developer console.
  • 401 clave_invalida — The key does not exist or was revoked. Check you copied the whole key and did not revoke it. Create another one in the console if needed.
  • 401 clave_no_es_de_desarrollador — The key belongs to a law firm, not to a developer account. This API only accepts developer-account keys.
  • 402 saldo_insuficiente — There is not enough balance for this call. It was neither served nor charged. Top up your balance in the console (Billing).
  • 403 clave_ip_no_permitida — The key has an IP allow-list and this address is not on it. Add your server address to the allow-list in the console, or remove the restriction.
  • 403 identidad_sin_verificar — The account identity is not verified yet; balance cannot be spent without it. Verify the account identity in the console Settings.
  • 429 demasiadas_peticiones — Too many calls in a row with this key (120 per minute). Wait the seconds in the `Retry-After` header and retry with growing delay. The limit is per key.
  • 500 error_interno — A failure on our side. Nothing is charged. Retry in a few seconds; if it persists, write to us with the time.

Example request

curl

curl "https://api.jurilia.com/v1/dev/empresas/prospeccion" \
  -H "Authorization: Bearer $JURILIA_API_KEY"

Python

import os
import requests

r = requests.get(
    "https://api.jurilia.com/v1/dev/empresas/prospeccion",
    headers={"Authorization": f"Bearer {os.environ['JURILIA_API_KEY']}"},
    timeout=30,
)
r.raise_for_status()
print(r.json())

JavaScript

const url = new URL("https://api.jurilia.com/v1/dev/empresas/prospeccion");
const r = await fetch(url, {
  headers: { Authorization: `Bearer ${process.env.JURILIA_API_KEY}` },
});
if (!r.ok) throw new Error(`HTTP ${r.status}`);
console.log(await r.json());

Example response

Show the full example response
{
  "resultado": "ok",
  "motivo": "rango_incompleto",
  "ignorados": [
    "ignorado"
  ],
  "desde": "2026-10-22",
  "hasta": "2026-10-22",
  "total": 1,
  "acotado": true,
  "pagina": 1,
  "paginas": 1,
  "municipioNoReconocido": true,
  "alDia": "2026-10-22",
  "filas": [
    {
      "id": "12345",
      "denominacion": "ACME SERVICIOS SL",
      "formaSocial": "formaSocial",
      "provincia": "MADRID",
      "provinciaLegible": "Madrid",
      "sector": "sector",
      "acto": "constitucion",
      "fechaDelActo": "2026-10-22",
      "capitalCentimos": 300000,
      "domicilio": "domicilio",
      "boletin": "BORME-A-2026-200-28",
      "urlPdf": "https://www.boe.es/borme/dias/2026/10/22/pdfs/BORME-A-2026-200-28.pdf",
      "numeroDeAnuncio": 0,
      "rutaWeb": "rutaWeb"
    }
  ]
}
GET/v1/dev/empresas/prospeccion/descarga

Download a prospecting list as Excel or CSV

Use it when: To get the list as a file.

Price

200 euro cents per call served · 120 calls per minute per key (all routes).

Parameters

FieldTypeRequiredValues, limits and default
actotextonoBORME act type (for example constitucion, nombramientos, disolucion).. hasta 300 caracteres
periodotextonoList period: semana (week), mes (month, default), mes_anterior, treinta_dias or rango (with desde and hasta; at most 93 days).. hasta 300 caracteres
desdetextonoStart date, YYYY-MM-DD.. hasta 300 caracteres
hastatextonoEnd date of the range (YYYY-MM-DD), with periodo=rango.. hasta 300 caracteres
provinciatextonoProvince name or slug.. hasta 300 caracteres
municipiotextonoTown name or slug.. hasta 300 caracteres
formatextonoLegal-form acronym: SL, SA, SLU, SAU, SLP, SLL, SCOOP…. hasta 300 caracteres
sectortextonoSector: two-digit CNAE division, or its slug.. hasta 300 caracteres
cap_mintextonoMinimum capital, in euros.. hasta 300 caracteres
formatotextonoxlsx (default) or csv.. uno de: xlsx, csv. default: xlsx
idiomatextonoLanguage of the texts the server writes (es, en, fr, de, pt, it). Names and figures are never translated.. uno de: es, en, fr, de, pt, it. default: es

Errors

  • 400 validacion — A field of the request is not valid; `campos` says which. Fix the fields listed in `campos` and call again. An invalid request is never charged.
  • 401 no_autenticado — The Authorization header with the API key is missing. Send the key as `Authorization: Bearer <key>`. You create it in the developer console.
  • 401 clave_invalida — The key does not exist or was revoked. Check you copied the whole key and did not revoke it. Create another one in the console if needed.
  • 401 clave_no_es_de_desarrollador — The key belongs to a law firm, not to a developer account. This API only accepts developer-account keys.
  • 402 saldo_insuficiente — There is not enough balance for this call. It was neither served nor charged. Top up your balance in the console (Billing).
  • 403 clave_ip_no_permitida — The key has an IP allow-list and this address is not on it. Add your server address to the allow-list in the console, or remove the restriction.
  • 403 identidad_sin_verificar — The account identity is not verified yet; balance cannot be spent without it. Verify the account identity in the console Settings.
  • 422 empresa_no_vigilable — The company is not loaded, or it is a sole trader (a natural person, who is not watched). Find its id with `GET /v1/dev/empresas/resolver?q=`.
  • 429 demasiadas_peticiones — Too many calls in a row with this key (120 per minute). Wait the seconds in the `Retry-After` header and retry with growing delay. The limit is per key.
  • 500 error_interno — A failure on our side. Nothing is charged. Retry in a few seconds; if it persists, write to us with the time.

Example request

curl

curl -o salida.pdf "https://api.jurilia.com/v1/dev/empresas/prospeccion/descarga" \
  -H "Authorization: Bearer $JURILIA_API_KEY"

Python

import os
import requests

r = requests.get(
    "https://api.jurilia.com/v1/dev/empresas/prospeccion/descarga",
    headers={"Authorization": f"Bearer {os.environ['JURILIA_API_KEY']}"},
    timeout=30,
)
r.raise_for_status()
open("salida.pdf", "wb").write(r.content)

JavaScript

const url = new URL("https://api.jurilia.com/v1/dev/empresas/prospeccion/descarga");
const r = await fetch(url, {
  headers: { Authorization: `Bearer ${process.env.JURILIA_API_KEY}` },
});
if (!r.ok) throw new Error(`HTTP ${r.status}`);
await require("node:fs/promises").writeFile("salida.pdf", Buffer.from(await r.arrayBuffer()));

Example response

This route returns a file (PDF, Excel or CSV), not JSON.

GET/v1/dev/empresas/noticias

Companies news: the latest articles

Use it when: To embed company news.

Price

3 euro cents per call served · 120 calls per minute per key (all routes).

Parameters

FieldTypeRequiredValues, limits and default
idiomatextonoLanguage of the texts the server writes (es, en, fr, de, pt, it). Names and figures are never translated.. uno de: es, en, fr, de, pt, it. default: es
paginaenteronoPage number, starting at 1. Alternatively use cursor.. mínimo 1; máximo 10000. default: 1
tematextonoTopic URL slug: semana-en-la-provincia, ampliaciones-de-capital, sectores or actualidad.. al menos 1 caracteres; hasta 120 caracteres
provinciatextonoProvince name or slug.. al menos 1 caracteres; hasta 120 caracteres

Errors

  • 400 validacion — A field of the request is not valid; `campos` says which. Fix the fields listed in `campos` and call again. An invalid request is never charged.
  • 401 no_autenticado — The Authorization header with the API key is missing. Send the key as `Authorization: Bearer <key>`. You create it in the developer console.
  • 401 clave_invalida — The key does not exist or was revoked. Check you copied the whole key and did not revoke it. Create another one in the console if needed.
  • 401 clave_no_es_de_desarrollador — The key belongs to a law firm, not to a developer account. This API only accepts developer-account keys.
  • 402 saldo_insuficiente — There is not enough balance for this call. It was neither served nor charged. Top up your balance in the console (Billing).
  • 403 clave_ip_no_permitida — The key has an IP allow-list and this address is not on it. Add your server address to the allow-list in the console, or remove the restriction.
  • 403 identidad_sin_verificar — The account identity is not verified yet; balance cannot be spent without it. Verify the account identity in the console Settings.
  • 404 no_encontrado — It is not in the loaded gazette data, or it is a person who exercised the right to object or erasure. Check the id. If you only have a name use `GET /v1/dev/empresas/resolver?q=`.
  • 429 demasiadas_peticiones — Too many calls in a row with this key (120 per minute). Wait the seconds in the `Retry-After` header and retry with growing delay. The limit is per key.
  • 500 error_interno — A failure on our side. Nothing is charged. Retry in a few seconds; if it persists, write to us with the time.

Example request

curl

curl "https://api.jurilia.com/v1/dev/empresas/noticias" \
  -H "Authorization: Bearer $JURILIA_API_KEY"

Python

import os
import requests

r = requests.get(
    "https://api.jurilia.com/v1/dev/empresas/noticias",
    headers={"Authorization": f"Bearer {os.environ['JURILIA_API_KEY']}"},
    timeout=30,
)
r.raise_for_status()
print(r.json())

JavaScript

const url = new URL("https://api.jurilia.com/v1/dev/empresas/noticias");
const r = await fetch(url, {
  headers: { Authorization: `Bearer ${process.env.JURILIA_API_KEY}` },
});
if (!r.ok) throw new Error(`HTTP ${r.status}`);
console.log(await r.json());

Example response

Show the full example response
{
  "idioma": "es",
  "noticias": [
    {
      "slug": "ana-garcia-lopez",
      "titulo": "titulo",
      "entradilla": "entradilla",
      "plantilla": "semana-provincia",
      "provincia": "MADRID",
      "provinciaLegible": "Madrid",
      "periodoDesde": "2026-10-22",
      "periodoHasta": "2026-10-22",
      "publicadaEn": "publicadaEn",
      "actualizadaEn": "actualizadaEn",
      "autorNombre": "autorNombre",
      "autorSlug": "autorSlug",
      "rutaWeb": "rutaWeb"
    }
  ],
  "total": 1,
  "pagina": 1,
  "porPagina": 20,
  "temas": [
    {
      "slug": "ana-garcia-lopez",
      "plantilla": "semana-provincia",
      "n": 0
    }
  ],
  "provincias": [
    {
      "provincia": "MADRID",
      "provinciaLegible": "Madrid",
      "provinciaSlug": "madrid",
      "n": 0
    }
  ]
}
GET/v1/dev/empresas/noticias/{slug}

One news article

Use it when: To read one article.

Price

3 euro cents per call served · 120 calls per minute per key (all routes).

Parameters

FieldTypeRequiredValues, limits and default
slugtextoyesSlug of a person name or of a news article / address, as returned by the API.. al menos 1 caracteres; hasta 240 caracteres
idiomatextonoLanguage of the texts the server writes (es, en, fr, de, pt, it). Names and figures are never translated.. uno de: es, en, fr, de, pt, it. default: es

Errors

  • 400 validacion — A field of the request is not valid; `campos` says which. Fix the fields listed in `campos` and call again. An invalid request is never charged.
  • 401 no_autenticado — The Authorization header with the API key is missing. Send the key as `Authorization: Bearer <key>`. You create it in the developer console.
  • 401 clave_invalida — The key does not exist or was revoked. Check you copied the whole key and did not revoke it. Create another one in the console if needed.
  • 401 clave_no_es_de_desarrollador — The key belongs to a law firm, not to a developer account. This API only accepts developer-account keys.
  • 402 saldo_insuficiente — There is not enough balance for this call. It was neither served nor charged. Top up your balance in the console (Billing).
  • 403 clave_ip_no_permitida — The key has an IP allow-list and this address is not on it. Add your server address to the allow-list in the console, or remove the restriction.
  • 403 identidad_sin_verificar — The account identity is not verified yet; balance cannot be spent without it. Verify the account identity in the console Settings.
  • 404 no_encontrado — It is not in the loaded gazette data, or it is a person who exercised the right to object or erasure. Check the id. If you only have a name use `GET /v1/dev/empresas/resolver?q=`.
  • 429 demasiadas_peticiones — Too many calls in a row with this key (120 per minute). Wait the seconds in the `Retry-After` header and retry with growing delay. The limit is per key.
  • 500 error_interno — A failure on our side. Nothing is charged. Retry in a few seconds; if it persists, write to us with the time.

Example request

curl

curl "https://api.jurilia.com/v1/dev/empresas/noticias/ana-garcia-lopez" \
  -H "Authorization: Bearer $JURILIA_API_KEY"

Python

import os
import requests

r = requests.get(
    "https://api.jurilia.com/v1/dev/empresas/noticias/ana-garcia-lopez",
    headers={"Authorization": f"Bearer {os.environ['JURILIA_API_KEY']}"},
    timeout=30,
)
r.raise_for_status()
print(r.json())

JavaScript

const url = new URL("https://api.jurilia.com/v1/dev/empresas/noticias/ana-garcia-lopez");
const r = await fetch(url, {
  headers: { Authorization: `Bearer ${process.env.JURILIA_API_KEY}` },
});
if (!r.ok) throw new Error(`HTTP ${r.status}`);
console.log(await r.json());

Example response

Show the full example response
{
  "slug": "ana-garcia-lopez",
  "titulo": "titulo",
  "entradilla": "entradilla",
  "plantilla": "semana-provincia",
  "provincia": "MADRID",
  "provinciaLegible": "Madrid",
  "periodoDesde": "2026-10-22",
  "periodoHasta": "2026-10-22",
  "publicadaEn": "publicadaEn",
  "actualizadaEn": "actualizadaEn",
  "autorNombre": "autorNombre",
  "autorSlug": "autorSlug",
  "rutaWeb": "rutaWeb",
  "idioma": "es",
  "idiomas": [
    "es"
  ],
  "cuerpo": "cuerpo",
  "metaTitulo": "metaTitulo",
  "metaDescripcion": "metaDescripcion",
  "comunidad": "comunidad",
  "cifras": [
    {
      "id": "12345",
      "etiqueta": "etiqueta",
      "valor": 0,
      "texto": "texto",
      "origen": "origen"
    }
  ],
  "autorBio": "autorBio",
  "autorCredenciales": "autorCredenciales",
  "empresas": [
    {
      "empresaId": "12345",
      "denominacion": "ACME SERVICIOS SL",
      "denominacionLegible": "Acme Servicios, S.L.",
      "rutaWeb": "rutaWeb"
    }
  ]
}
GET/v1/dev/empresas/informes

Monthly reports index

Use it when: To list available monthly reports.

Price

3 euro cents per call served · 120 calls per minute per key (all routes).

Parameters

No parameters.

Errors

  • 400 validacion — A field of the request is not valid; `campos` says which. Fix the fields listed in `campos` and call again. An invalid request is never charged.
  • 401 no_autenticado — The Authorization header with the API key is missing. Send the key as `Authorization: Bearer <key>`. You create it in the developer console.
  • 401 clave_invalida — The key does not exist or was revoked. Check you copied the whole key and did not revoke it. Create another one in the console if needed.
  • 401 clave_no_es_de_desarrollador — The key belongs to a law firm, not to a developer account. This API only accepts developer-account keys.
  • 402 saldo_insuficiente — There is not enough balance for this call. It was neither served nor charged. Top up your balance in the console (Billing).
  • 403 clave_ip_no_permitida — The key has an IP allow-list and this address is not on it. Add your server address to the allow-list in the console, or remove the restriction.
  • 403 identidad_sin_verificar — The account identity is not verified yet; balance cannot be spent without it. Verify the account identity in the console Settings.
  • 429 demasiadas_peticiones — Too many calls in a row with this key (120 per minute). Wait the seconds in the `Retry-After` header and retry with growing delay. The limit is per key.
  • 500 error_interno — A failure on our side. Nothing is charged. Retry in a few seconds; if it persists, write to us with the time.

Example request

curl

curl "https://api.jurilia.com/v1/dev/empresas/informes" \
  -H "Authorization: Bearer $JURILIA_API_KEY"

Python

import os
import requests

r = requests.get(
    "https://api.jurilia.com/v1/dev/empresas/informes",
    headers={"Authorization": f"Bearer {os.environ['JURILIA_API_KEY']}"},
    timeout=30,
)
r.raise_for_status()
print(r.json())

JavaScript

const url = new URL("https://api.jurilia.com/v1/dev/empresas/informes");
const r = await fetch(url, {
  headers: { Authorization: `Bearer ${process.env.JURILIA_API_KEY}` },
});
if (!r.ok) throw new Error(`HTTP ${r.status}`);
console.log(await r.json());

Example response

Show the full example response
{
  "informes": [
    {
      "mes": "mes",
      "version": 0,
      "extraidoEn": "extraidoEn",
      "publicadoEn": "publicadoEn",
      "huella": "huella"
    }
  ]
}
GET/v1/dev/empresas/informes/{mes}

The monthly report of a month

Use it when: To read a monthly report.

Price

3 euro cents per call served · 120 calls per minute per key (all routes).

Parameters

FieldTypeRequiredValues, limits and default
mestextoyesMonth, YYYY-MM.. patrón ^\d{4}-(0[1-9]|1[0-2])$

Errors

  • 400 validacion — A field of the request is not valid; `campos` says which. Fix the fields listed in `campos` and call again. An invalid request is never charged.
  • 401 no_autenticado — The Authorization header with the API key is missing. Send the key as `Authorization: Bearer <key>`. You create it in the developer console.
  • 401 clave_invalida — The key does not exist or was revoked. Check you copied the whole key and did not revoke it. Create another one in the console if needed.
  • 401 clave_no_es_de_desarrollador — The key belongs to a law firm, not to a developer account. This API only accepts developer-account keys.
  • 402 saldo_insuficiente — There is not enough balance for this call. It was neither served nor charged. Top up your balance in the console (Billing).
  • 403 clave_ip_no_permitida — The key has an IP allow-list and this address is not on it. Add your server address to the allow-list in the console, or remove the restriction.
  • 403 identidad_sin_verificar — The account identity is not verified yet; balance cannot be spent without it. Verify the account identity in the console Settings.
  • 404 no_encontrado — It is not in the loaded gazette data, or it is a person who exercised the right to object or erasure. Check the id. If you only have a name use `GET /v1/dev/empresas/resolver?q=`.
  • 429 demasiadas_peticiones — Too many calls in a row with this key (120 per minute). Wait the seconds in the `Retry-After` header and retry with growing delay. The limit is per key.
  • 500 error_interno — A failure on our side. Nothing is charged. Retry in a few seconds; if it persists, write to us with the time.

Example request

curl

curl "https://api.jurilia.com/v1/dev/empresas/informes/2026-09" \
  -H "Authorization: Bearer $JURILIA_API_KEY"

Python

import os
import requests

r = requests.get(
    "https://api.jurilia.com/v1/dev/empresas/informes/2026-09",
    headers={"Authorization": f"Bearer {os.environ['JURILIA_API_KEY']}"},
    timeout=30,
)
r.raise_for_status()
print(r.json())

JavaScript

const url = new URL("https://api.jurilia.com/v1/dev/empresas/informes/2026-09");
const r = await fetch(url, {
  headers: { Authorization: `Bearer ${process.env.JURILIA_API_KEY}` },
});
if (!r.ok) throw new Error(`HTTP ${r.status}`);
console.log(await r.json());

Example response

Show the full example response
{
  "mes": "mes",
  "version": 0,
  "extraidoEn": "extraidoEn",
  "publicadoEn": "publicadoEn",
  "huella": "huella",
  "huellaCoincide": true,
  "mesAnterior": "mesAnterior",
  "mesAnioAnterior": "mesAnioAnterior",
  "ultimoDiaCargado": "2026-10-22",
  "coberturas": {
    "actual": {
      "estado": "completo",
      "diasCargados": 0,
      "diasDelMes": 0
    },
    "anterior": {
      "estado": "completo",
      "diasCargados": 0,
      "diasDelMes": 0
    },
    "anioAnterior": {
      "estado": "completo",
      "diasCargados": 0,
      "diasDelMes": 0
    }
  },
  "nacional": {
    "actual": {
      "constituciones": 0,
      "disoluciones": 0,
      "extinciones": 0,
      "concursos": 0,
      "ampliaciones_de_capital": 0,
      "reducciones_de_capital": 0,
      "nombramientos_de_administracion": 0,
      "ceses_de_administracion": 0
    },
    "anterior": {
      "constituciones": 0,
      "disoluciones": 0,
      "extinciones": 0,
      "concursos": 0,
      "ampliaciones_de_capital": 0,
      "reducciones_de_capital": 0,
      "nombramientos_de_administracion": 0,
      "ceses_de_administracion": 0
    },
    "anioAnterior": {
      "constituciones": 0,
      "disoluciones": 0,
      "extinciones": 0,
      "concursos": 0,
      "ampliaciones_de_capital": 0,
      "reducciones_de_capital": 0,
      "nombramientos_de_administracion": 0,
      "ceses_de_administracion": 0
    }
  },
  "comunidades": [
    {
      "comunidad": "comunidad",
      "provincias": 0,
      "valores": {
        "actual": {
          "constituciones": 0,
          "disoluciones": 0,
          "extinciones": 0,
          "concursos": 0,
          "ampliaciones_de_capital": 0,
          "reducciones_de_capital": 0,
          "nombramientos_de_administracion": 0,
          "ceses_de_administracion": 0
        },
        "anterior": {
          "constituciones": 0,
          "disoluciones": 0,
          "extinciones": 0,
          "concursos": 0,
          "ampliaciones_de_capital": 0,
          "reducciones_de_capital": 0,
          "nombramientos_de_administracion": 0,
          "ceses_de_administracion": 0
        },
        "anioAnterior": {
          "constituciones": 0,
          "disoluciones": 0,
          "extinciones": 0,
          "concursos": 0,
          "ampliaciones_de_capital": 0,
          "reducciones_de_capital": 0,
          "nombramientos_de_administracion": 0,
          "ceses_de_administracion": 0
        }
      }
    }
  ],
  "provincias": [
    {
      "provincia": "MADRID",
      "provinciaLegible": "Madrid",
      "provinciaSlug": "madrid",
      "codigo": "ABCD-1234",
      "comunidad": "comunidad",
      "valores": {
        "actual": {
          "constituciones": 0,
          "disoluciones": 0,
          "extinciones": 0,
          "concursos": 0,
          "ampliaciones_de_capital": 0,
          "reducciones_de_capital": 0,
          "nombramientos_de_administracion": 0,
          "ceses_de_administracion": 0
        },
        "anterior": {
          "constituciones": 0,
          "disoluciones": 0,
          "extinciones": 0,
          "concursos": 0,
          "ampliaciones_de_capital": 0,
          "reducciones_de_capital": 0,
          "nombramientos_de_administracion": 0,
          "ceses_de_administracion": 0
        },
        "anioAnterior": {
          "constituciones": 0,
          "disoluciones": 0,
          "extinciones": 0,
          "concursos": 0,
          "ampliaciones_de_capital": 0,
          "reducciones_de_capital": 0,
          "nombramientos_de_administracion": 0,
          "ceses_de_administracion": 0
        }
      }
    }
  ],
  "provinciasSinComunidad": 0,
  "descargas": {
    "pdf": "pdf",
    "csv": "csv",
    "imagen": "imagen",
    "graficos": [
      {
        "metrica": "constituciones",
        "ruta": "ruta"
      }
    ]
  }
}
GET/v1/dev/empresas/informes/{mes}/{provincia}

The monthly report of a month for one province

Use it when: To read a provincial report.

Price

3 euro cents per call served · 120 calls per minute per key (all routes).

Parameters

FieldTypeRequiredValues, limits and default
mestextoyesMonth, YYYY-MM.. patrón ^\d{4}-(0[1-9]|1[0-2])$
provinciatextoyesProvince name or slug.. al menos 1 caracteres; hasta 120 caracteres

Errors

  • 400 validacion — A field of the request is not valid; `campos` says which. Fix the fields listed in `campos` and call again. An invalid request is never charged.
  • 401 no_autenticado — The Authorization header with the API key is missing. Send the key as `Authorization: Bearer <key>`. You create it in the developer console.
  • 401 clave_invalida — The key does not exist or was revoked. Check you copied the whole key and did not revoke it. Create another one in the console if needed.
  • 401 clave_no_es_de_desarrollador — The key belongs to a law firm, not to a developer account. This API only accepts developer-account keys.
  • 402 saldo_insuficiente — There is not enough balance for this call. It was neither served nor charged. Top up your balance in the console (Billing).
  • 403 clave_ip_no_permitida — The key has an IP allow-list and this address is not on it. Add your server address to the allow-list in the console, or remove the restriction.
  • 403 identidad_sin_verificar — The account identity is not verified yet; balance cannot be spent without it. Verify the account identity in the console Settings.
  • 404 no_encontrado — It is not in the loaded gazette data, or it is a person who exercised the right to object or erasure. Check the id. If you only have a name use `GET /v1/dev/empresas/resolver?q=`.
  • 429 demasiadas_peticiones — Too many calls in a row with this key (120 per minute). Wait the seconds in the `Retry-After` header and retry with growing delay. The limit is per key.
  • 500 error_interno — A failure on our side. Nothing is charged. Retry in a few seconds; if it persists, write to us with the time.

Example request

curl

curl "https://api.jurilia.com/v1/dev/empresas/informes/2026-09/madrid" \
  -H "Authorization: Bearer $JURILIA_API_KEY"

Python

import os
import requests

r = requests.get(
    "https://api.jurilia.com/v1/dev/empresas/informes/2026-09/madrid",
    headers={"Authorization": f"Bearer {os.environ['JURILIA_API_KEY']}"},
    timeout=30,
)
r.raise_for_status()
print(r.json())

JavaScript

const url = new URL("https://api.jurilia.com/v1/dev/empresas/informes/2026-09/madrid");
const r = await fetch(url, {
  headers: { Authorization: `Bearer ${process.env.JURILIA_API_KEY}` },
});
if (!r.ok) throw new Error(`HTTP ${r.status}`);
console.log(await r.json());

Example response

Show the full example response
{
  "mes": "mes",
  "version": 0,
  "extraidoEn": "extraidoEn",
  "publicadoEn": "publicadoEn",
  "huella": "huella",
  "huellaCoincide": true,
  "mesAnterior": "mesAnterior",
  "mesAnioAnterior": "mesAnioAnterior",
  "ultimoDiaCargado": "2026-10-22",
  "coberturas": {
    "actual": {
      "estado": "completo",
      "diasCargados": 0,
      "diasDelMes": 0
    },
    "anterior": {
      "estado": "completo",
      "diasCargados": 0,
      "diasDelMes": 0
    },
    "anioAnterior": {
      "estado": "completo",
      "diasCargados": 0,
      "diasDelMes": 0
    }
  },
  "provincia": {
    "provincia": "MADRID",
    "provinciaLegible": "Madrid",
    "provinciaSlug": "madrid",
    "codigo": "ABCD-1234",
    "comunidad": "comunidad",
    "valores": {
      "actual": {
        "constituciones": 0,
        "disoluciones": 0,
        "extinciones": 0,
        "concursos": 0,
        "ampliaciones_de_capital": 0,
        "reducciones_de_capital": 0,
        "nombramientos_de_administracion": 0,
        "ceses_de_administracion": 0
      },
      "anterior": {
        "constituciones": 0,
        "disoluciones": 0,
        "extinciones": 0,
        "concursos": 0,
        "ampliaciones_de_capital": 0,
        "reducciones_de_capital": 0,
        "nombramientos_de_administracion": 0,
        "ceses_de_administracion": 0
      },
      "anioAnterior": {
        "constituciones": 0,
        "disoluciones": 0,
        "extinciones": 0,
        "concursos": 0,
        "ampliaciones_de_capital": 0,
        "reducciones_de_capital": 0,
        "nombramientos_de_administracion": 0,
        "ceses_de_administracion": 0
      }
    }
  },
  "descargas": {
    "csv": "csv"
  }
}
GET/v1/dev/empresas/verificar-informe/{huella}

Verify a monthly report from its fingerprint

Use it when: To prove a report was not modified.

Price

3 euro cents per call served · 120 calls per minute per key (all routes).

Parameters

FieldTypeRequiredValues, limits and default
huellatextoyesSHA-256 fingerprint of the report.. patrón ^[0-9a-fA-F]{64}$

Errors

  • 400 validacion — A field of the request is not valid; `campos` says which. Fix the fields listed in `campos` and call again. An invalid request is never charged.
  • 401 no_autenticado — The Authorization header with the API key is missing. Send the key as `Authorization: Bearer <key>`. You create it in the developer console.
  • 401 clave_invalida — The key does not exist or was revoked. Check you copied the whole key and did not revoke it. Create another one in the console if needed.
  • 401 clave_no_es_de_desarrollador — The key belongs to a law firm, not to a developer account. This API only accepts developer-account keys.
  • 402 saldo_insuficiente — There is not enough balance for this call. It was neither served nor charged. Top up your balance in the console (Billing).
  • 403 clave_ip_no_permitida — The key has an IP allow-list and this address is not on it. Add your server address to the allow-list in the console, or remove the restriction.
  • 403 identidad_sin_verificar — The account identity is not verified yet; balance cannot be spent without it. Verify the account identity in the console Settings.
  • 404 no_encontrado — It is not in the loaded gazette data, or it is a person who exercised the right to object or erasure. Check the id. If you only have a name use `GET /v1/dev/empresas/resolver?q=`.
  • 429 demasiadas_peticiones — Too many calls in a row with this key (120 per minute). Wait the seconds in the `Retry-After` header and retry with growing delay. The limit is per key.
  • 500 error_interno — A failure on our side. Nothing is charged. Retry in a few seconds; if it persists, write to us with the time.

Example request

curl

curl "https://api.jurilia.com/v1/dev/empresas/verificar-informe/e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" \
  -H "Authorization: Bearer $JURILIA_API_KEY"

Python

import os
import requests

r = requests.get(
    "https://api.jurilia.com/v1/dev/empresas/verificar-informe/e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855",
    headers={"Authorization": f"Bearer {os.environ['JURILIA_API_KEY']}"},
    timeout=30,
)
r.raise_for_status()
print(r.json())

JavaScript

const url = new URL("https://api.jurilia.com/v1/dev/empresas/verificar-informe/e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855");
const r = await fetch(url, {
  headers: { Authorization: `Bearer ${process.env.JURILIA_API_KEY}` },
});
if (!r.ok) throw new Error(`HTTP ${r.status}`);
console.log(await r.json());

Example response

Show the full example response
{
  "coincideCon": "contenido",
  "generadoEn": "2026-10-22T08:00:00.000Z",
  "paginas": 1
}
POST/v1/dev/citas/verificar

Check every statutory and case-law citation in a text against the library, with a link to the source

Use it when: Run it on a draft, a judgment or an AI-written answer before relying on it: each citation comes back verified or not found, with the text of the source. Not found means "we could not confirm it", never "it is false".

Price

3 euro cents per call served · 120 calls per minute per key (all routes).

Parameters

No parameters.

JSON body

FieldTypeRequiredValues, limits and default
textotextoyesThe text whose citations are checked (a brief, a judgment, an AI-written answer…).. al menos 1 caracteres; hasta 100000 caracteres
fechafecha (AAAA-MM-DD)noCalendar date, YYYY-MM-DD.
ordenJurisdiccionaltextonoJurisdictional order (civil, penal, social or contencioso), to disambiguate abbreviations shared between orders.. uno de: civil, penal, social, contencioso

Errors

  • 400 validacion — A field of the request is not valid; `campos` says which. Fix the fields listed in `campos` and call again. An invalid request is never charged.
  • 401 no_autenticado — The Authorization header with the API key is missing. Send the key as `Authorization: Bearer <key>`. You create it in the developer console.
  • 401 clave_invalida — The key does not exist or was revoked. Check you copied the whole key and did not revoke it. Create another one in the console if needed.
  • 401 clave_no_es_de_desarrollador — The key belongs to a law firm, not to a developer account. This API only accepts developer-account keys.
  • 402 saldo_insuficiente — There is not enough balance for this call. It was neither served nor charged. Top up your balance in the console (Billing).
  • 403 clave_ip_no_permitida — The key has an IP allow-list and this address is not on it. Add your server address to the allow-list in the console, or remove the restriction.
  • 403 identidad_sin_verificar — The account identity is not verified yet; balance cannot be spent without it. Verify the account identity in the console Settings.
  • 422 empresa_no_vigilable — The company is not loaded, or it is a sole trader (a natural person, who is not watched). Find its id with `GET /v1/dev/empresas/resolver?q=`.
  • 429 demasiadas_peticiones — Too many calls in a row with this key (120 per minute). Wait the seconds in the `Retry-After` header and retry with growing delay. The limit is per key.
  • 500 error_interno — A failure on our side. Nothing is charged. Retry in a few seconds; if it persists, write to us with the time.

Example request

curl

curl -X POST "https://api.jurilia.com/v1/dev/citas/verificar" \
  -H "Authorization: Bearer $JURILIA_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"texto":"texto"}'

Python

import os
import requests

r = requests.post(
    "https://api.jurilia.com/v1/dev/citas/verificar",
    headers={"Authorization": f"Bearer {os.environ['JURILIA_API_KEY']}"},
    json={"texto":"texto"},
    timeout=30,
)
r.raise_for_status()
print(r.json())

JavaScript

const url = new URL("https://api.jurilia.com/v1/dev/citas/verificar");
const r = await fetch(url, {
  method: "POST",
  headers: {
    Authorization: `Bearer ${process.env.JURILIA_API_KEY}`,
    "Content-Type": "application/json",
  },
  body: JSON.stringify({"texto":"texto"}),
});
if (!r.ok) throw new Error(`HTTP ${r.status}`);
console.log(await r.json());

Example response

Show the full example response
{
  "resultado": "verde",
  "fecha": "2026-10-22",
  "resumen": {
    "total": 1,
    "verificadas": 0,
    "noEncontradas": 0,
    "verdes": 0,
    "ambares": 0,
    "rojas": 0
  },
  "citas": [
    {
      "tipo": "articulo",
      "texto": "texto",
      "posicion": {
        "inicio": 0,
        "fin": 0
      },
      "estado": "verificada",
      "semaforo": "verde",
      "motivo": "motivo",
      "fuente": {
        "url": "https://www.boe.es/borme/dias/2026/10/22/pdfs/BORME-A-2026-200-28.pdf",
        "fragmento": "fragmento"
      },
      "sugerencia": "sugerencia"
    }
  ]
}

Automatic notices (webhooks)

Be told when the gazette publishes an act of a company you watch.

Verifying a webhook signature

Each notice is a POST with the header `Jurilia-Firma: t=<unix seconds>,v1=<hex>`, where hex = HMAC-SHA256(secret, "<t>.<raw body>"). Compute it over the raw body exactly as received, compare in constant time, and reject timestamps more than five minutes old. `Jurilia-Idempotency-Key` is the same for every retry or replay of a notice: store it and ignore repeats.

Limits: 5 subscriptions per account, 500 watched companies per subscription, answer within 5 seconds. Retries: five more attempts after 1 min, 5 min, 30 min, 2 h and 6 h; a 410 disables the subscription at once, as do five failed deliveries in a row.

JavaScript (Node)

import { createHmac, timingSafeEqual } from 'node:crypto';

// `cuerpoCrudo` es el Buffer/texto EXACTO que llegó (no lo vuelvas a serializar).
export function firmaValida(secreto, cabecera, cuerpoCrudo, tolerancia = 300) {
  const partes = Object.fromEntries(cabecera.split(',').map((p) => p.trim().split('=')));
  const t = Number(partes.t);
  if (!Number.isInteger(t) || Math.abs(Date.now() / 1000 - t) > tolerancia) return false;
  const esperada = createHmac('sha256', secreto).update(`${t}.${cuerpoCrudo}`).digest();
  const recibida = Buffer.from(partes.v1 ?? '', 'hex');
  return recibida.length === esperada.length && timingSafeEqual(recibida, esperada);
}

// Express: app.post('/jurilia', express.raw({ type: '*/*' }), (req, res) => {
//   if (!firmaValida(process.env.JURILIA_SECRETO, req.get('Jurilia-Firma') ?? '', req.body)) return res.sendStatus(400);
//   const clave = req.get('Jurilia-Idempotency-Key'); // guárdala: ignora las repetidas
//   res.sendStatus(204); // cuanto antes; procesa después
// });

Python

import hashlib, hmac, time

# `cuerpo_crudo` son los bytes EXACTOS que llegaron (no los vuelvas a serializar).
def firma_valida(secreto: str, cabecera: str, cuerpo_crudo: bytes, tolerancia: int = 300) -> bool:
    partes = dict(p.strip().split("=", 1) for p in cabecera.split(","))
    try:
        t = int(partes["t"])
    except (KeyError, ValueError):
        return False
    if abs(time.time() - t) > tolerancia:
        return False
    esperada = hmac.new(secreto.encode(), f"{t}.".encode() + cuerpo_crudo, hashlib.sha256).hexdigest()
    return hmac.compare_digest(esperada, partes.get("v1", ""))

# Flask:
# @app.post("/jurilia")
# def jurilia():
#     if not firma_valida(SECRETO, request.headers.get("Jurilia-Firma", ""), request.get_data()):
#         return "", 400
#     clave = request.headers["Jurilia-Idempotency-Key"]  # guárdala: ignora las repetidas
#     return "", 204  # cuanto antes; procesa después
GET/v1/dev/avisos/filtros

Act groups you can filter notices by

Use it when: To build the filter picker of your subscription form.

Price

Free (account management) · 120 calls per minute per key (all routes).

Parameters

No parameters.

Errors

  • 401 no_autenticado — The Authorization header with the API key is missing. Send the key as `Authorization: Bearer <key>`. You create it in the developer console.
  • 401 clave_invalida — The key does not exist or was revoked. Check you copied the whole key and did not revoke it. Create another one in the console if needed.
  • 401 clave_no_es_de_desarrollador — The key belongs to a law firm, not to a developer account. This API only accepts developer-account keys.
  • 403 clave_ip_no_permitida — The key has an IP allow-list and this address is not on it. Add your server address to the allow-list in the console, or remove the restriction.
  • 403 identidad_sin_verificar — The account identity is not verified yet; balance cannot be spent without it. Verify the account identity in the console Settings.
  • 429 demasiadas_peticiones — Too many calls in a row with this key (120 per minute). Wait the seconds in the `Retry-After` header and retry with growing delay. The limit is per key.
  • 500 error_interno — A failure on our side. Nothing is charged. Retry in a few seconds; if it persists, write to us with the time.

Example request

curl

curl "https://api.jurilia.com/v1/dev/avisos/filtros" \
  -H "Authorization: Bearer $JURILIA_API_KEY"

Python

import os
import requests

r = requests.get(
    "https://api.jurilia.com/v1/dev/avisos/filtros",
    headers={"Authorization": f"Bearer {os.environ['JURILIA_API_KEY']}"},
    timeout=30,
)
r.raise_for_status()
print(r.json())

JavaScript

const url = new URL("https://api.jurilia.com/v1/dev/avisos/filtros");
const r = await fetch(url, {
  headers: { Authorization: `Bearer ${process.env.JURILIA_API_KEY}` },
});
if (!r.ok) throw new Error(`HTTP ${r.status}`);
console.log(await r.json());

Example response

Show the full example response
{
  "grupos": [
    {
      "grupo": "grupo",
      "tipos": [
        "tipo"
      ]
    }
  ],
  "agrupaciones": [
    "inmediato"
  ]
}
POST/v1/dev/avisos/suscripciones

Create a notice subscription (webhook)

Use it when: The first step of any integration that wants to be told instead of polling.

Price

15 euro cents per call served · 120 calls per minute per key (all routes).

After that, every notice your server confirms with a 2xx costs 5 euro cents; a failure or a retry is not charged. There is no monthly fee.

Parameters

FieldTypeRequiredValues, limits and default
idempotency-keytextonoA string of 8 to 100 characters, different for each creation. Repeating the request with the same key returns the same subscription (200, no secret, not charged).

JSON body

FieldTypeRequiredValues, limits and default
urltextoyesHTTPS address that will receive the notices (public domain name, port 443).. hasta 500 caracteres
descripciontextonoFree label for your own reference.. hasta 120 caracteres
gruposlista de textonoAct groups to be notified about (see GET /v1/dev/avisos/filtros). Empty = every act.
agrupaciontextonoinmediato (one notice per act, default) or diaria (one summary a day).. uno de: inmediato, diaria. default: inmediato

Errors

  • 400 validacion — A field of the request is not valid; `campos` says which. Fix the fields listed in `campos` and call again. An invalid request is never charged.
  • 400 url_de_aviso_no_valida — The notice address breaks the rules. It must be https, a public domain name (not an IP), port 443, no user or password, and resolve to public addresses.
  • 400 destino_de_aviso_no_seguro — The destination is not public or cannot be resolved. Use a public domain with a valid certificate.
  • 400 filtro_de_actos_no_valido — A group of the act filter does not exist. Get the valid groups with `GET /v1/dev/avisos/filtros`.
  • 401 no_autenticado — The Authorization header with the API key is missing. Send the key as `Authorization: Bearer <key>`. You create it in the developer console.
  • 401 clave_invalida — The key does not exist or was revoked. Check you copied the whole key and did not revoke it. Create another one in the console if needed.
  • 401 clave_no_es_de_desarrollador — The key belongs to a law firm, not to a developer account. This API only accepts developer-account keys.
  • 402 saldo_insuficiente — There is not enough balance for this call. It was neither served nor charged. Top up your balance in the console (Billing).
  • 403 clave_ip_no_permitida — The key has an IP allow-list and this address is not on it. Add your server address to the allow-list in the console, or remove the restriction.
  • 403 identidad_sin_verificar — The account identity is not verified yet; balance cannot be spent without it. Verify the account identity in the console Settings.
  • 404 suscripcion_de_avisos_no_encontrada — That notice subscription is not in your account. List them with `GET /v1/dev/avisos/suscripciones` and use the returned `id`.
  • 409 limite_de_avisos — A limit was reached: five subscriptions per account or 500 watched companies per subscription. Delete a subscription or a watched company you no longer use.
  • 422 empresa_no_vigilable — The company is not loaded, or it is a sole trader (a natural person, who is not watched). Find its id with `GET /v1/dev/empresas/resolver?q=`.
  • 429 demasiadas_peticiones — Too many calls in a row with this key (120 per minute). Wait the seconds in the `Retry-After` header and retry with growing delay. The limit is per key.
  • 500 error_interno — A failure on our side. Nothing is charged. Retry in a few seconds; if it persists, write to us with the time.

Example request

curl

curl -X POST "https://api.jurilia.com/v1/dev/avisos/suscripciones" \
  -H "Authorization: Bearer $JURILIA_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"url":"https://hooks.miempresa.es/jurilia","descripcion":"Integración con el CRM","grupos":["nombramientos","ceses","concurso"],"agrupacion":"inmediato"}'

Python

import os
import requests

r = requests.post(
    "https://api.jurilia.com/v1/dev/avisos/suscripciones",
    headers={"Authorization": f"Bearer {os.environ['JURILIA_API_KEY']}"},
    json={"url":"https://hooks.miempresa.es/jurilia","descripcion":"Integración con el CRM","grupos":["nombramientos","ceses","concurso"],"agrupacion":"inmediato"},
    timeout=30,
)
r.raise_for_status()
print(r.json())

JavaScript

const url = new URL("https://api.jurilia.com/v1/dev/avisos/suscripciones");
const r = await fetch(url, {
  method: "POST",
  headers: {
    Authorization: `Bearer ${process.env.JURILIA_API_KEY}`,
    "Content-Type": "application/json",
  },
  body: JSON.stringify({"url":"https://hooks.miempresa.es/jurilia","descripcion":"Integración con el CRM","grupos":["nombramientos","ceses","concurso"],"agrupacion":"inmediato"}),
});
if (!r.ok) throw new Error(`HTTP ${r.status}`);
console.log(await r.json());

Example response

Show the full example response
{
  "suscripcion": {
    "id": "12345",
    "url": "https://www.boe.es/borme/dias/2026/10/22/pdfs/BORME-A-2026-200-28.pdf",
    "descripcion": "Integración con el CRM",
    "gruposDeActo": [
      "gruposDeActo"
    ],
    "agrupacion": "inmediato",
    "estado": "activa",
    "motivoDesactivacion": "motivoDesactivacion",
    "fallosSeguidos": 0,
    "ultimaEntregaEn": "2026-10-22T08:00:03.000Z",
    "creadaEn": "2026-10-22T08:00:00.000Z",
    "secretoPista": "xxxx",
    "empresasVigiladas": 0
  },
  "secreto": "whsec_xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx",
  "repetida": true
}
GET/v1/dev/avisos/suscripciones

List your notice subscriptions

Use it when: To audit what you have registered.

Price

Free (account management) · 120 calls per minute per key (all routes).

Parameters

No parameters.

Errors

  • 400 validacion — A field of the request is not valid; `campos` says which. Fix the fields listed in `campos` and call again. An invalid request is never charged.
  • 401 no_autenticado — The Authorization header with the API key is missing. Send the key as `Authorization: Bearer <key>`. You create it in the developer console.
  • 401 clave_invalida — The key does not exist or was revoked. Check you copied the whole key and did not revoke it. Create another one in the console if needed.
  • 401 clave_no_es_de_desarrollador — The key belongs to a law firm, not to a developer account. This API only accepts developer-account keys.
  • 402 saldo_insuficiente — There is not enough balance for this call. It was neither served nor charged. Top up your balance in the console (Billing).
  • 403 clave_ip_no_permitida — The key has an IP allow-list and this address is not on it. Add your server address to the allow-list in the console, or remove the restriction.
  • 403 identidad_sin_verificar — The account identity is not verified yet; balance cannot be spent without it. Verify the account identity in the console Settings.
  • 404 suscripcion_de_avisos_no_encontrada — That notice subscription is not in your account. List them with `GET /v1/dev/avisos/suscripciones` and use the returned `id`.
  • 409 limite_de_avisos — A limit was reached: five subscriptions per account or 500 watched companies per subscription. Delete a subscription or a watched company you no longer use.
  • 422 empresa_no_vigilable — The company is not loaded, or it is a sole trader (a natural person, who is not watched). Find its id with `GET /v1/dev/empresas/resolver?q=`.
  • 429 demasiadas_peticiones — Too many calls in a row with this key (120 per minute). Wait the seconds in the `Retry-After` header and retry with growing delay. The limit is per key.
  • 500 error_interno — A failure on our side. Nothing is charged. Retry in a few seconds; if it persists, write to us with the time.

Example request

curl

curl "https://api.jurilia.com/v1/dev/avisos/suscripciones" \
  -H "Authorization: Bearer $JURILIA_API_KEY"

Python

import os
import requests

r = requests.get(
    "https://api.jurilia.com/v1/dev/avisos/suscripciones",
    headers={"Authorization": f"Bearer {os.environ['JURILIA_API_KEY']}"},
    timeout=30,
)
r.raise_for_status()
print(r.json())

JavaScript

const url = new URL("https://api.jurilia.com/v1/dev/avisos/suscripciones");
const r = await fetch(url, {
  headers: { Authorization: `Bearer ${process.env.JURILIA_API_KEY}` },
});
if (!r.ok) throw new Error(`HTTP ${r.status}`);
console.log(await r.json());

Example response

Show the full example response
{
  "suscripciones": [
    {
      "id": "12345",
      "url": "https://www.boe.es/borme/dias/2026/10/22/pdfs/BORME-A-2026-200-28.pdf",
      "descripcion": "Integración con el CRM",
      "gruposDeActo": [
        "gruposDeActo"
      ],
      "agrupacion": "inmediato",
      "estado": "activa",
      "motivoDesactivacion": "motivoDesactivacion",
      "fallosSeguidos": 0,
      "ultimaEntregaEn": "2026-10-22T08:00:03.000Z",
      "creadaEn": "2026-10-22T08:00:00.000Z",
      "secretoPista": "xxxx",
      "empresasVigiladas": 0
    }
  ]
}
GET/v1/dev/avisos/suscripciones/{id}

View a notice subscription

Use it when: To see the state of one subscription and why it was paused or disabled.

Price

Free (account management) · 120 calls per minute per key (all routes).

Parameters

FieldTypeRequiredValues, limits and default
idtextoyesSubscription id.

Errors

  • 400 validacion — A field of the request is not valid; `campos` says which. Fix the fields listed in `campos` and call again. An invalid request is never charged.
  • 401 no_autenticado — The Authorization header with the API key is missing. Send the key as `Authorization: Bearer <key>`. You create it in the developer console.
  • 401 clave_invalida — The key does not exist or was revoked. Check you copied the whole key and did not revoke it. Create another one in the console if needed.
  • 401 clave_no_es_de_desarrollador — The key belongs to a law firm, not to a developer account. This API only accepts developer-account keys.
  • 402 saldo_insuficiente — There is not enough balance for this call. It was neither served nor charged. Top up your balance in the console (Billing).
  • 403 clave_ip_no_permitida — The key has an IP allow-list and this address is not on it. Add your server address to the allow-list in the console, or remove the restriction.
  • 403 identidad_sin_verificar — The account identity is not verified yet; balance cannot be spent without it. Verify the account identity in the console Settings.
  • 404 suscripcion_de_avisos_no_encontrada — That notice subscription is not in your account. List them with `GET /v1/dev/avisos/suscripciones` and use the returned `id`.
  • 409 limite_de_avisos — A limit was reached: five subscriptions per account or 500 watched companies per subscription. Delete a subscription or a watched company you no longer use.
  • 422 empresa_no_vigilable — The company is not loaded, or it is a sole trader (a natural person, who is not watched). Find its id with `GET /v1/dev/empresas/resolver?q=`.
  • 429 demasiadas_peticiones — Too many calls in a row with this key (120 per minute). Wait the seconds in the `Retry-After` header and retry with growing delay. The limit is per key.
  • 500 error_interno — A failure on our side. Nothing is charged. Retry in a few seconds; if it persists, write to us with the time.

Example request

curl

curl "https://api.jurilia.com/v1/dev/avisos/suscripciones/3f2b8c1e-5d4a-4b7e-9a10-2c6d8e0f1a34" \
  -H "Authorization: Bearer $JURILIA_API_KEY"

Python

import os
import requests

r = requests.get(
    "https://api.jurilia.com/v1/dev/avisos/suscripciones/3f2b8c1e-5d4a-4b7e-9a10-2c6d8e0f1a34",
    headers={"Authorization": f"Bearer {os.environ['JURILIA_API_KEY']}"},
    timeout=30,
)
r.raise_for_status()
print(r.json())

JavaScript

const url = new URL("https://api.jurilia.com/v1/dev/avisos/suscripciones/3f2b8c1e-5d4a-4b7e-9a10-2c6d8e0f1a34");
const r = await fetch(url, {
  headers: { Authorization: `Bearer ${process.env.JURILIA_API_KEY}` },
});
if (!r.ok) throw new Error(`HTTP ${r.status}`);
console.log(await r.json());

Example response

Show the full example response
{
  "id": "12345",
  "url": "https://www.boe.es/borme/dias/2026/10/22/pdfs/BORME-A-2026-200-28.pdf",
  "descripcion": "Integración con el CRM",
  "gruposDeActo": [
    "gruposDeActo"
  ],
  "agrupacion": "inmediato",
  "estado": "activa",
  "motivoDesactivacion": "motivoDesactivacion",
  "fallosSeguidos": 0,
  "ultimaEntregaEn": "2026-10-22T08:00:03.000Z",
  "creadaEn": "2026-10-22T08:00:00.000Z",
  "secretoPista": "xxxx",
  "empresasVigiladas": 0
}
DELETE/v1/dev/avisos/suscripciones/{id}

Delete a notice subscription

Use it when: To stop everything from one subscription.

Price

Free (account management) · 120 calls per minute per key (all routes).

Parameters

FieldTypeRequiredValues, limits and default
idtextoyesSubscription id.

Errors

  • 400 validacion — A field of the request is not valid; `campos` says which. Fix the fields listed in `campos` and call again. An invalid request is never charged.
  • 401 no_autenticado — The Authorization header with the API key is missing. Send the key as `Authorization: Bearer <key>`. You create it in the developer console.
  • 401 clave_invalida — The key does not exist or was revoked. Check you copied the whole key and did not revoke it. Create another one in the console if needed.
  • 401 clave_no_es_de_desarrollador — The key belongs to a law firm, not to a developer account. This API only accepts developer-account keys.
  • 402 saldo_insuficiente — There is not enough balance for this call. It was neither served nor charged. Top up your balance in the console (Billing).
  • 403 clave_ip_no_permitida — The key has an IP allow-list and this address is not on it. Add your server address to the allow-list in the console, or remove the restriction.
  • 403 identidad_sin_verificar — The account identity is not verified yet; balance cannot be spent without it. Verify the account identity in the console Settings.
  • 404 suscripcion_de_avisos_no_encontrada — That notice subscription is not in your account. List them with `GET /v1/dev/avisos/suscripciones` and use the returned `id`.
  • 409 limite_de_avisos — A limit was reached: five subscriptions per account or 500 watched companies per subscription. Delete a subscription or a watched company you no longer use.
  • 422 empresa_no_vigilable — The company is not loaded, or it is a sole trader (a natural person, who is not watched). Find its id with `GET /v1/dev/empresas/resolver?q=`.
  • 429 demasiadas_peticiones — Too many calls in a row with this key (120 per minute). Wait the seconds in the `Retry-After` header and retry with growing delay. The limit is per key.
  • 500 error_interno — A failure on our side. Nothing is charged. Retry in a few seconds; if it persists, write to us with the time.

Example request

curl

curl -X DELETE "https://api.jurilia.com/v1/dev/avisos/suscripciones/3f2b8c1e-5d4a-4b7e-9a10-2c6d8e0f1a34" \
  -H "Authorization: Bearer $JURILIA_API_KEY"

Python

import os
import requests

r = requests.delete(
    "https://api.jurilia.com/v1/dev/avisos/suscripciones/3f2b8c1e-5d4a-4b7e-9a10-2c6d8e0f1a34",
    headers={"Authorization": f"Bearer {os.environ['JURILIA_API_KEY']}"},
    timeout=30,
)
r.raise_for_status()
print(r.json())

JavaScript

const url = new URL("https://api.jurilia.com/v1/dev/avisos/suscripciones/3f2b8c1e-5d4a-4b7e-9a10-2c6d8e0f1a34");
const r = await fetch(url, {
  method: "DELETE",
  headers: { Authorization: `Bearer ${process.env.JURILIA_API_KEY}` },
});
if (!r.ok) throw new Error(`HTTP ${r.status}`);
console.log(await r.json());

Example response

Show the full example response
{
  "borrada": true
}
POST/v1/dev/avisos/suscripciones/{id}/reactivar

Reactivate a paused or disabled subscription

Use it when: After fixing your endpoint or topping up the balance.

Price

Free (account management) · 120 calls per minute per key (all routes).

Parameters

FieldTypeRequiredValues, limits and default
idtextoyesSubscription id.

Errors

  • 400 validacion — A field of the request is not valid; `campos` says which. Fix the fields listed in `campos` and call again. An invalid request is never charged.
  • 401 no_autenticado — The Authorization header with the API key is missing. Send the key as `Authorization: Bearer <key>`. You create it in the developer console.
  • 401 clave_invalida — The key does not exist or was revoked. Check you copied the whole key and did not revoke it. Create another one in the console if needed.
  • 401 clave_no_es_de_desarrollador — The key belongs to a law firm, not to a developer account. This API only accepts developer-account keys.
  • 402 saldo_insuficiente — There is not enough balance for this call. It was neither served nor charged. Top up your balance in the console (Billing).
  • 403 clave_ip_no_permitida — The key has an IP allow-list and this address is not on it. Add your server address to the allow-list in the console, or remove the restriction.
  • 403 identidad_sin_verificar — The account identity is not verified yet; balance cannot be spent without it. Verify the account identity in the console Settings.
  • 404 suscripcion_de_avisos_no_encontrada — That notice subscription is not in your account. List them with `GET /v1/dev/avisos/suscripciones` and use the returned `id`.
  • 409 limite_de_avisos — A limit was reached: five subscriptions per account or 500 watched companies per subscription. Delete a subscription or a watched company you no longer use.
  • 422 empresa_no_vigilable — The company is not loaded, or it is a sole trader (a natural person, who is not watched). Find its id with `GET /v1/dev/empresas/resolver?q=`.
  • 429 demasiadas_peticiones — Too many calls in a row with this key (120 per minute). Wait the seconds in the `Retry-After` header and retry with growing delay. The limit is per key.
  • 500 error_interno — A failure on our side. Nothing is charged. Retry in a few seconds; if it persists, write to us with the time.

Example request

curl

curl -X POST "https://api.jurilia.com/v1/dev/avisos/suscripciones/3f2b8c1e-5d4a-4b7e-9a10-2c6d8e0f1a34/reactivar" \
  -H "Authorization: Bearer $JURILIA_API_KEY"

Python

import os
import requests

r = requests.post(
    "https://api.jurilia.com/v1/dev/avisos/suscripciones/3f2b8c1e-5d4a-4b7e-9a10-2c6d8e0f1a34/reactivar",
    headers={"Authorization": f"Bearer {os.environ['JURILIA_API_KEY']}"},
    timeout=30,
)
r.raise_for_status()
print(r.json())

JavaScript

const url = new URL("https://api.jurilia.com/v1/dev/avisos/suscripciones/3f2b8c1e-5d4a-4b7e-9a10-2c6d8e0f1a34/reactivar");
const r = await fetch(url, {
  method: "POST",
  headers: { Authorization: `Bearer ${process.env.JURILIA_API_KEY}` },
});
if (!r.ok) throw new Error(`HTTP ${r.status}`);
console.log(await r.json());

Example response

Show the full example response
{
  "id": "12345",
  "url": "https://www.boe.es/borme/dias/2026/10/22/pdfs/BORME-A-2026-200-28.pdf",
  "descripcion": "Integración con el CRM",
  "gruposDeActo": [
    "gruposDeActo"
  ],
  "agrupacion": "inmediato",
  "estado": "activa",
  "motivoDesactivacion": "motivoDesactivacion",
  "fallosSeguidos": 0,
  "ultimaEntregaEn": "2026-10-22T08:00:03.000Z",
  "creadaEn": "2026-10-22T08:00:00.000Z",
  "secretoPista": "xxxx",
  "empresasVigiladas": 0
}
POST/v1/dev/avisos/suscripciones/{id}/secreto

Rotate the signing secret

Use it when: If the secret leaked or on a schedule; the old one stops working at once.

Price

Free (account management) · 120 calls per minute per key (all routes).

Parameters

FieldTypeRequiredValues, limits and default
idtextoyesSubscription id.

Errors

  • 400 validacion — A field of the request is not valid; `campos` says which. Fix the fields listed in `campos` and call again. An invalid request is never charged.
  • 401 no_autenticado — The Authorization header with the API key is missing. Send the key as `Authorization: Bearer <key>`. You create it in the developer console.
  • 401 clave_invalida — The key does not exist or was revoked. Check you copied the whole key and did not revoke it. Create another one in the console if needed.
  • 401 clave_no_es_de_desarrollador — The key belongs to a law firm, not to a developer account. This API only accepts developer-account keys.
  • 402 saldo_insuficiente — There is not enough balance for this call. It was neither served nor charged. Top up your balance in the console (Billing).
  • 403 clave_ip_no_permitida — The key has an IP allow-list and this address is not on it. Add your server address to the allow-list in the console, or remove the restriction.
  • 403 identidad_sin_verificar — The account identity is not verified yet; balance cannot be spent without it. Verify the account identity in the console Settings.
  • 404 suscripcion_de_avisos_no_encontrada — That notice subscription is not in your account. List them with `GET /v1/dev/avisos/suscripciones` and use the returned `id`.
  • 409 limite_de_avisos — A limit was reached: five subscriptions per account or 500 watched companies per subscription. Delete a subscription or a watched company you no longer use.
  • 422 empresa_no_vigilable — The company is not loaded, or it is a sole trader (a natural person, who is not watched). Find its id with `GET /v1/dev/empresas/resolver?q=`.
  • 429 demasiadas_peticiones — Too many calls in a row with this key (120 per minute). Wait the seconds in the `Retry-After` header and retry with growing delay. The limit is per key.
  • 500 error_interno — A failure on our side. Nothing is charged. Retry in a few seconds; if it persists, write to us with the time.

Example request

curl

curl -X POST "https://api.jurilia.com/v1/dev/avisos/suscripciones/3f2b8c1e-5d4a-4b7e-9a10-2c6d8e0f1a34/secreto" \
  -H "Authorization: Bearer $JURILIA_API_KEY"

Python

import os
import requests

r = requests.post(
    "https://api.jurilia.com/v1/dev/avisos/suscripciones/3f2b8c1e-5d4a-4b7e-9a10-2c6d8e0f1a34/secreto",
    headers={"Authorization": f"Bearer {os.environ['JURILIA_API_KEY']}"},
    timeout=30,
)
r.raise_for_status()
print(r.json())

JavaScript

const url = new URL("https://api.jurilia.com/v1/dev/avisos/suscripciones/3f2b8c1e-5d4a-4b7e-9a10-2c6d8e0f1a34/secreto");
const r = await fetch(url, {
  method: "POST",
  headers: { Authorization: `Bearer ${process.env.JURILIA_API_KEY}` },
});
if (!r.ok) throw new Error(`HTTP ${r.status}`);
console.log(await r.json());

Example response

Show the full example response
{
  "secreto": "whsec_xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"
}
POST/v1/dev/avisos/suscripciones/{id}/probar

Send a test notice right now

Use it when: To check your endpoint and your signature verification.

Price

1 euro cent per call served · 120 calls per minute per key (all routes).

Parameters

FieldTypeRequiredValues, limits and default
idtextoyesSubscription id.

Errors

  • 400 validacion — A field of the request is not valid; `campos` says which. Fix the fields listed in `campos` and call again. An invalid request is never charged.
  • 401 no_autenticado — The Authorization header with the API key is missing. Send the key as `Authorization: Bearer <key>`. You create it in the developer console.
  • 401 clave_invalida — The key does not exist or was revoked. Check you copied the whole key and did not revoke it. Create another one in the console if needed.
  • 401 clave_no_es_de_desarrollador — The key belongs to a law firm, not to a developer account. This API only accepts developer-account keys.
  • 402 saldo_insuficiente — There is not enough balance for this call. It was neither served nor charged. Top up your balance in the console (Billing).
  • 403 clave_ip_no_permitida — The key has an IP allow-list and this address is not on it. Add your server address to the allow-list in the console, or remove the restriction.
  • 403 identidad_sin_verificar — The account identity is not verified yet; balance cannot be spent without it. Verify the account identity in the console Settings.
  • 404 suscripcion_de_avisos_no_encontrada — That notice subscription is not in your account. List them with `GET /v1/dev/avisos/suscripciones` and use the returned `id`.
  • 409 limite_de_avisos — A limit was reached: five subscriptions per account or 500 watched companies per subscription. Delete a subscription or a watched company you no longer use.
  • 422 empresa_no_vigilable — The company is not loaded, or it is a sole trader (a natural person, who is not watched). Find its id with `GET /v1/dev/empresas/resolver?q=`.
  • 429 demasiadas_peticiones — Too many calls in a row with this key (120 per minute). Wait the seconds in the `Retry-After` header and retry with growing delay. The limit is per key.
  • 500 error_interno — A failure on our side. Nothing is charged. Retry in a few seconds; if it persists, write to us with the time.

Example request

curl

curl -X POST "https://api.jurilia.com/v1/dev/avisos/suscripciones/3f2b8c1e-5d4a-4b7e-9a10-2c6d8e0f1a34/probar" \
  -H "Authorization: Bearer $JURILIA_API_KEY"

Python

import os
import requests

r = requests.post(
    "https://api.jurilia.com/v1/dev/avisos/suscripciones/3f2b8c1e-5d4a-4b7e-9a10-2c6d8e0f1a34/probar",
    headers={"Authorization": f"Bearer {os.environ['JURILIA_API_KEY']}"},
    timeout=30,
)
r.raise_for_status()
print(r.json())

JavaScript

const url = new URL("https://api.jurilia.com/v1/dev/avisos/suscripciones/3f2b8c1e-5d4a-4b7e-9a10-2c6d8e0f1a34/probar");
const r = await fetch(url, {
  method: "POST",
  headers: { Authorization: `Bearer ${process.env.JURILIA_API_KEY}` },
});
if (!r.ok) throw new Error(`HTTP ${r.status}`);
console.log(await r.json());

Example response

Show the full example response
{
  "entregaId": "entregaId",
  "entregada": true,
  "codigo": 0,
  "error": "error"
}
PUT/v1/dev/avisos/suscripciones/{id}/empresas/{empresaId}

Put a company on the watch list

Use it when: To start watching a company. Only what is published from today is notified.

Price

15 euro cents per call served · 120 calls per minute per key (all routes).

Parameters

FieldTypeRequiredValues, limits and default
idtextoyesSubscription id.
empresaIdtextoyesCompany id, as returned by the search.. patrón ^\d{1,18}$

Errors

  • 400 validacion — A field of the request is not valid; `campos` says which. Fix the fields listed in `campos` and call again. An invalid request is never charged.
  • 401 no_autenticado — The Authorization header with the API key is missing. Send the key as `Authorization: Bearer <key>`. You create it in the developer console.
  • 401 clave_invalida — The key does not exist or was revoked. Check you copied the whole key and did not revoke it. Create another one in the console if needed.
  • 401 clave_no_es_de_desarrollador — The key belongs to a law firm, not to a developer account. This API only accepts developer-account keys.
  • 402 saldo_insuficiente — There is not enough balance for this call. It was neither served nor charged. Top up your balance in the console (Billing).
  • 403 clave_ip_no_permitida — The key has an IP allow-list and this address is not on it. Add your server address to the allow-list in the console, or remove the restriction.
  • 403 identidad_sin_verificar — The account identity is not verified yet; balance cannot be spent without it. Verify the account identity in the console Settings.
  • 404 suscripcion_de_avisos_no_encontrada — That notice subscription is not in your account. List them with `GET /v1/dev/avisos/suscripciones` and use the returned `id`.
  • 409 limite_de_avisos — A limit was reached: five subscriptions per account or 500 watched companies per subscription. Delete a subscription or a watched company you no longer use.
  • 422 empresa_no_vigilable — The company is not loaded, or it is a sole trader (a natural person, who is not watched). Find its id with `GET /v1/dev/empresas/resolver?q=`.
  • 429 demasiadas_peticiones — Too many calls in a row with this key (120 per minute). Wait the seconds in the `Retry-After` header and retry with growing delay. The limit is per key.
  • 500 error_interno — A failure on our side. Nothing is charged. Retry in a few seconds; if it persists, write to us with the time.

Example request

curl

curl -X PUT "https://api.jurilia.com/v1/dev/avisos/suscripciones/3f2b8c1e-5d4a-4b7e-9a10-2c6d8e0f1a34/empresas/12345" \
  -H "Authorization: Bearer $JURILIA_API_KEY"

Python

import os
import requests

r = requests.put(
    "https://api.jurilia.com/v1/dev/avisos/suscripciones/3f2b8c1e-5d4a-4b7e-9a10-2c6d8e0f1a34/empresas/12345",
    headers={"Authorization": f"Bearer {os.environ['JURILIA_API_KEY']}"},
    timeout=30,
)
r.raise_for_status()
print(r.json())

JavaScript

const url = new URL("https://api.jurilia.com/v1/dev/avisos/suscripciones/3f2b8c1e-5d4a-4b7e-9a10-2c6d8e0f1a34/empresas/12345");
const r = await fetch(url, {
  method: "PUT",
  headers: { Authorization: `Bearer ${process.env.JURILIA_API_KEY}` },
});
if (!r.ok) throw new Error(`HTTP ${r.status}`);
console.log(await r.json());

Example response

Show the full example response
{
  "nueva": true,
  "total": 1
}
DELETE/v1/dev/avisos/suscripciones/{id}/empresas/{empresaId}

Remove a company from the watch list

Use it when: To stop watching a company.

Price

Free (account management) · 120 calls per minute per key (all routes).

Parameters

FieldTypeRequiredValues, limits and default
idtextoyesSubscription id.
empresaIdtextoyesCompany id, as returned by the search.. patrón ^\d{1,18}$

Errors

  • 400 validacion — A field of the request is not valid; `campos` says which. Fix the fields listed in `campos` and call again. An invalid request is never charged.
  • 401 no_autenticado — The Authorization header with the API key is missing. Send the key as `Authorization: Bearer <key>`. You create it in the developer console.
  • 401 clave_invalida — The key does not exist or was revoked. Check you copied the whole key and did not revoke it. Create another one in the console if needed.
  • 401 clave_no_es_de_desarrollador — The key belongs to a law firm, not to a developer account. This API only accepts developer-account keys.
  • 402 saldo_insuficiente — There is not enough balance for this call. It was neither served nor charged. Top up your balance in the console (Billing).
  • 403 clave_ip_no_permitida — The key has an IP allow-list and this address is not on it. Add your server address to the allow-list in the console, or remove the restriction.
  • 403 identidad_sin_verificar — The account identity is not verified yet; balance cannot be spent without it. Verify the account identity in the console Settings.
  • 404 suscripcion_de_avisos_no_encontrada — That notice subscription is not in your account. List them with `GET /v1/dev/avisos/suscripciones` and use the returned `id`.
  • 409 limite_de_avisos — A limit was reached: five subscriptions per account or 500 watched companies per subscription. Delete a subscription or a watched company you no longer use.
  • 422 empresa_no_vigilable — The company is not loaded, or it is a sole trader (a natural person, who is not watched). Find its id with `GET /v1/dev/empresas/resolver?q=`.
  • 429 demasiadas_peticiones — Too many calls in a row with this key (120 per minute). Wait the seconds in the `Retry-After` header and retry with growing delay. The limit is per key.
  • 500 error_interno — A failure on our side. Nothing is charged. Retry in a few seconds; if it persists, write to us with the time.

Example request

curl

curl -X DELETE "https://api.jurilia.com/v1/dev/avisos/suscripciones/3f2b8c1e-5d4a-4b7e-9a10-2c6d8e0f1a34/empresas/12345" \
  -H "Authorization: Bearer $JURILIA_API_KEY"

Python

import os
import requests

r = requests.delete(
    "https://api.jurilia.com/v1/dev/avisos/suscripciones/3f2b8c1e-5d4a-4b7e-9a10-2c6d8e0f1a34/empresas/12345",
    headers={"Authorization": f"Bearer {os.environ['JURILIA_API_KEY']}"},
    timeout=30,
)
r.raise_for_status()
print(r.json())

JavaScript

const url = new URL("https://api.jurilia.com/v1/dev/avisos/suscripciones/3f2b8c1e-5d4a-4b7e-9a10-2c6d8e0f1a34/empresas/12345");
const r = await fetch(url, {
  method: "DELETE",
  headers: { Authorization: `Bearer ${process.env.JURILIA_API_KEY}` },
});
if (!r.ok) throw new Error(`HTTP ${r.status}`);
console.log(await r.json());

Example response

Show the full example response
{
  "quitada": true
}
GET/v1/dev/avisos/suscripciones/{id}/empresas

The watched companies of a subscription

Use it when: To list what you watch.

Price

Free (account management) · 120 calls per minute per key (all routes).

Parameters

FieldTypeRequiredValues, limits and default
idtextoyesSubscription id.

Errors

  • 400 validacion — A field of the request is not valid; `campos` says which. Fix the fields listed in `campos` and call again. An invalid request is never charged.
  • 401 no_autenticado — The Authorization header with the API key is missing. Send the key as `Authorization: Bearer <key>`. You create it in the developer console.
  • 401 clave_invalida — The key does not exist or was revoked. Check you copied the whole key and did not revoke it. Create another one in the console if needed.
  • 401 clave_no_es_de_desarrollador — The key belongs to a law firm, not to a developer account. This API only accepts developer-account keys.
  • 402 saldo_insuficiente — There is not enough balance for this call. It was neither served nor charged. Top up your balance in the console (Billing).
  • 403 clave_ip_no_permitida — The key has an IP allow-list and this address is not on it. Add your server address to the allow-list in the console, or remove the restriction.
  • 403 identidad_sin_verificar — The account identity is not verified yet; balance cannot be spent without it. Verify the account identity in the console Settings.
  • 404 suscripcion_de_avisos_no_encontrada — That notice subscription is not in your account. List them with `GET /v1/dev/avisos/suscripciones` and use the returned `id`.
  • 409 limite_de_avisos — A limit was reached: five subscriptions per account or 500 watched companies per subscription. Delete a subscription or a watched company you no longer use.
  • 422 empresa_no_vigilable — The company is not loaded, or it is a sole trader (a natural person, who is not watched). Find its id with `GET /v1/dev/empresas/resolver?q=`.
  • 429 demasiadas_peticiones — Too many calls in a row with this key (120 per minute). Wait the seconds in the `Retry-After` header and retry with growing delay. The limit is per key.
  • 500 error_interno — A failure on our side. Nothing is charged. Retry in a few seconds; if it persists, write to us with the time.

Example request

curl

curl "https://api.jurilia.com/v1/dev/avisos/suscripciones/3f2b8c1e-5d4a-4b7e-9a10-2c6d8e0f1a34/empresas" \
  -H "Authorization: Bearer $JURILIA_API_KEY"

Python

import os
import requests

r = requests.get(
    "https://api.jurilia.com/v1/dev/avisos/suscripciones/3f2b8c1e-5d4a-4b7e-9a10-2c6d8e0f1a34/empresas",
    headers={"Authorization": f"Bearer {os.environ['JURILIA_API_KEY']}"},
    timeout=30,
)
r.raise_for_status()
print(r.json())

JavaScript

const url = new URL("https://api.jurilia.com/v1/dev/avisos/suscripciones/3f2b8c1e-5d4a-4b7e-9a10-2c6d8e0f1a34/empresas");
const r = await fetch(url, {
  headers: { Authorization: `Bearer ${process.env.JURILIA_API_KEY}` },
});
if (!r.ok) throw new Error(`HTTP ${r.status}`);
console.log(await r.json());

Example response

Show the full example response
{
  "empresas": [
    {
      "empresaId": "12345",
      "denominacion": "ACME SERVICIOS SL",
      "vigiladaDesde": "vigiladaDesde"
    }
  ]
}
GET/v1/dev/avisos/suscripciones/{id}/entregas

Delivery log: what was sent, the result and the next retry

Use it when: To debug deliveries: it is the same log you see in the console.

Price

Free (account management) · 120 calls per minute per key (all routes).

Parameters

FieldTypeRequiredValues, limits and default
idtextoyesSubscription id.
limiteenteronoMaximum results.. mínimo 1; máximo 200. default: 50 (avisos: entregas) · 100 (eventos) · 20 (búsquedas)
antestextonoISO date-time: only entries older than this (pagination).. hasta 40 caracteres

Errors

  • 400 validacion — A field of the request is not valid; `campos` says which. Fix the fields listed in `campos` and call again. An invalid request is never charged.
  • 401 no_autenticado — The Authorization header with the API key is missing. Send the key as `Authorization: Bearer <key>`. You create it in the developer console.
  • 401 clave_invalida — The key does not exist or was revoked. Check you copied the whole key and did not revoke it. Create another one in the console if needed.
  • 401 clave_no_es_de_desarrollador — The key belongs to a law firm, not to a developer account. This API only accepts developer-account keys.
  • 402 saldo_insuficiente — There is not enough balance for this call. It was neither served nor charged. Top up your balance in the console (Billing).
  • 403 clave_ip_no_permitida — The key has an IP allow-list and this address is not on it. Add your server address to the allow-list in the console, or remove the restriction.
  • 403 identidad_sin_verificar — The account identity is not verified yet; balance cannot be spent without it. Verify the account identity in the console Settings.
  • 404 suscripcion_de_avisos_no_encontrada — That notice subscription is not in your account. List them with `GET /v1/dev/avisos/suscripciones` and use the returned `id`.
  • 409 limite_de_avisos — A limit was reached: five subscriptions per account or 500 watched companies per subscription. Delete a subscription or a watched company you no longer use.
  • 422 empresa_no_vigilable — The company is not loaded, or it is a sole trader (a natural person, who is not watched). Find its id with `GET /v1/dev/empresas/resolver?q=`.
  • 429 demasiadas_peticiones — Too many calls in a row with this key (120 per minute). Wait the seconds in the `Retry-After` header and retry with growing delay. The limit is per key.
  • 500 error_interno — A failure on our side. Nothing is charged. Retry in a few seconds; if it persists, write to us with the time.

Example request

curl

curl "https://api.jurilia.com/v1/dev/avisos/suscripciones/3f2b8c1e-5d4a-4b7e-9a10-2c6d8e0f1a34/entregas" \
  -H "Authorization: Bearer $JURILIA_API_KEY"

Python

import os
import requests

r = requests.get(
    "https://api.jurilia.com/v1/dev/avisos/suscripciones/3f2b8c1e-5d4a-4b7e-9a10-2c6d8e0f1a34/entregas",
    headers={"Authorization": f"Bearer {os.environ['JURILIA_API_KEY']}"},
    timeout=30,
)
r.raise_for_status()
print(r.json())

JavaScript

const url = new URL("https://api.jurilia.com/v1/dev/avisos/suscripciones/3f2b8c1e-5d4a-4b7e-9a10-2c6d8e0f1a34/entregas");
const r = await fetch(url, {
  headers: { Authorization: `Bearer ${process.env.JURILIA_API_KEY}` },
});
if (!r.ok) throw new Error(`HTTP ${r.status}`);
console.log(await r.json());

Example response

Show the full example response
{
  "entregas": [
    {
      "id": "12345",
      "tipo": "evento",
      "estado": "pendiente",
      "intentos": 0,
      "proximoIntentoEn": "proximoIntentoEn",
      "ultimoCodigo": 0,
      "ultimoError": "ultimoError",
      "costeCentimos": 0,
      "creadaEn": "2026-10-22T08:00:00.000Z",
      "entregadaEn": "2026-10-22T08:00:03.000Z",
      "idDelAviso": "idDelAviso"
    }
  ],
  "siguienteAntes": "siguienteAntes"
}
GET/v1/dev/avisos/suscripciones/{id}/eventos

Events since a date, to recover missed notices

Use it when: To reconcile after an outage: pull the events and drop the ones you already have by `id`.

Price

3 euro cents per call served · 120 calls per minute per key (all routes).

Parameters

FieldTypeRequiredValues, limits and default
idtextoyesSubscription id.
desdefecha (AAAA-MM-DD)yesStart date, YYYY-MM-DD.
cursortextonoOpaque cursor of the next page (from siguienteCursor or the X-Jurilia-Siguiente-Cursor header). Replaces pagina.. hasta 100 caracteres
limiteenteronoMaximum results.. mínimo 1; máximo 500. default: 50 (avisos: entregas) · 100 (eventos) · 20 (búsquedas)

Errors

  • 400 validacion — A field of the request is not valid; `campos` says which. Fix the fields listed in `campos` and call again. An invalid request is never charged.
  • 400 cursor_no_valido — The cursor is not valid or has expired. Use `siguienteCursor` or the `X-Jurilia-Siguiente-Cursor` header exactly as received.
  • 401 no_autenticado — The Authorization header with the API key is missing. Send the key as `Authorization: Bearer <key>`. You create it in the developer console.
  • 401 clave_invalida — The key does not exist or was revoked. Check you copied the whole key and did not revoke it. Create another one in the console if needed.
  • 401 clave_no_es_de_desarrollador — The key belongs to a law firm, not to a developer account. This API only accepts developer-account keys.
  • 402 saldo_insuficiente — There is not enough balance for this call. It was neither served nor charged. Top up your balance in the console (Billing).
  • 403 clave_ip_no_permitida — The key has an IP allow-list and this address is not on it. Add your server address to the allow-list in the console, or remove the restriction.
  • 403 identidad_sin_verificar — The account identity is not verified yet; balance cannot be spent without it. Verify the account identity in the console Settings.
  • 404 suscripcion_de_avisos_no_encontrada — That notice subscription is not in your account. List them with `GET /v1/dev/avisos/suscripciones` and use the returned `id`.
  • 409 limite_de_avisos — A limit was reached: five subscriptions per account or 500 watched companies per subscription. Delete a subscription or a watched company you no longer use.
  • 422 empresa_no_vigilable — The company is not loaded, or it is a sole trader (a natural person, who is not watched). Find its id with `GET /v1/dev/empresas/resolver?q=`.
  • 429 demasiadas_peticiones — Too many calls in a row with this key (120 per minute). Wait the seconds in the `Retry-After` header and retry with growing delay. The limit is per key.
  • 500 error_interno — A failure on our side. Nothing is charged. Retry in a few seconds; if it persists, write to us with the time.

Example request

curl

curl "https://api.jurilia.com/v1/dev/avisos/suscripciones/3f2b8c1e-5d4a-4b7e-9a10-2c6d8e0f1a34/eventos?desde=2026-10-01" \
  -H "Authorization: Bearer $JURILIA_API_KEY"

Python

import os
import requests

r = requests.get(
    "https://api.jurilia.com/v1/dev/avisos/suscripciones/3f2b8c1e-5d4a-4b7e-9a10-2c6d8e0f1a34/eventos",
    headers={"Authorization": f"Bearer {os.environ['JURILIA_API_KEY']}"},
    params={"desde":"2026-10-01"},
    timeout=30,
)
r.raise_for_status()
print(r.json())

JavaScript

const url = new URL("https://api.jurilia.com/v1/dev/avisos/suscripciones/3f2b8c1e-5d4a-4b7e-9a10-2c6d8e0f1a34/eventos");
url.search = new URLSearchParams({"desde":"2026-10-01"});
const r = await fetch(url, {
  headers: { Authorization: `Bearer ${process.env.JURILIA_API_KEY}` },
});
if (!r.ok) throw new Error(`HTTP ${r.status}`);
console.log(await r.json());

Example response

Show the full example response
{
  "eventos": [
    {
      "id": "12345",
      "empresaId": "12345",
      "denominacion": "ACME SERVICIOS SL",
      "fecha": "2026-10-22",
      "numero": 7,
      "boletin": "BORME-A-2026-200-28",
      "urlPdf": "https://www.boe.es/borme/dias/2026/10/22/pdfs/BORME-A-2026-200-28.pdf",
      "tipos": [
        "tipo"
      ],
      "cargos": [
        "Adm. Unico"
      ]
    }
  ],
  "siguienteCursor": "siguienteCursor"
}
POST/v1/dev/avisos/suscripciones/{id}/reenviar

Ask for the notices to be sent again from a date

Use it when: To have the lost notices pushed again, with the same `id`.

Price

Free (account management) · 120 calls per minute per key (all routes).

Parameters

FieldTypeRequiredValues, limits and default
idtextoyesSubscription id.

JSON body

FieldTypeRequiredValues, limits and default
desdefecha (AAAA-MM-DD)yesStart date, YYYY-MM-DD.

Errors

  • 400 validacion — A field of the request is not valid; `campos` says which. Fix the fields listed in `campos` and call again. An invalid request is never charged.
  • 400 reenvio_no_valido — The replay date is in the future or older than 30 days. Ask for a date within the last 30 days, as YYYY-MM-DD.
  • 401 no_autenticado — The Authorization header with the API key is missing. Send the key as `Authorization: Bearer <key>`. You create it in the developer console.
  • 401 clave_invalida — The key does not exist or was revoked. Check you copied the whole key and did not revoke it. Create another one in the console if needed.
  • 401 clave_no_es_de_desarrollador — The key belongs to a law firm, not to a developer account. This API only accepts developer-account keys.
  • 402 saldo_insuficiente — There is not enough balance for this call. It was neither served nor charged. Top up your balance in the console (Billing).
  • 403 clave_ip_no_permitida — The key has an IP allow-list and this address is not on it. Add your server address to the allow-list in the console, or remove the restriction.
  • 403 identidad_sin_verificar — The account identity is not verified yet; balance cannot be spent without it. Verify the account identity in the console Settings.
  • 404 suscripcion_de_avisos_no_encontrada — That notice subscription is not in your account. List them with `GET /v1/dev/avisos/suscripciones` and use the returned `id`.
  • 409 limite_de_avisos — A limit was reached: five subscriptions per account or 500 watched companies per subscription. Delete a subscription or a watched company you no longer use.
  • 422 empresa_no_vigilable — The company is not loaded, or it is a sole trader (a natural person, who is not watched). Find its id with `GET /v1/dev/empresas/resolver?q=`.
  • 429 demasiadas_peticiones — Too many calls in a row with this key (120 per minute). Wait the seconds in the `Retry-After` header and retry with growing delay. The limit is per key.
  • 500 error_interno — A failure on our side. Nothing is charged. Retry in a few seconds; if it persists, write to us with the time.

Example request

curl

curl -X POST "https://api.jurilia.com/v1/dev/avisos/suscripciones/3f2b8c1e-5d4a-4b7e-9a10-2c6d8e0f1a34/reenviar" \
  -H "Authorization: Bearer $JURILIA_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"desde":"2026-10-20"}'

Python

import os
import requests

r = requests.post(
    "https://api.jurilia.com/v1/dev/avisos/suscripciones/3f2b8c1e-5d4a-4b7e-9a10-2c6d8e0f1a34/reenviar",
    headers={"Authorization": f"Bearer {os.environ['JURILIA_API_KEY']}"},
    json={"desde":"2026-10-20"},
    timeout=30,
)
r.raise_for_status()
print(r.json())

JavaScript

const url = new URL("https://api.jurilia.com/v1/dev/avisos/suscripciones/3f2b8c1e-5d4a-4b7e-9a10-2c6d8e0f1a34/reenviar");
const r = await fetch(url, {
  method: "POST",
  headers: {
    Authorization: `Bearer ${process.env.JURILIA_API_KEY}`,
    "Content-Type": "application/json",
  },
  body: JSON.stringify({"desde":"2026-10-20"}),
});
if (!r.ok) throw new Error(`HTTP ${r.status}`);
console.log(await r.json());

Example response

Show the full example response
{
  "encolados": 0
}

Errors

Every error is JSON with a stable `codigo`, a `mensaje`, a `sugerencia` that tells you what to do and a `documentacion` link. Branch on `codigo`, never on the message. Messages are in Spanish.

401no_autenticado

The Authorization header with the API key is missing.

Send the key as `Authorization: Bearer <key>`. You create it in the developer console.

401clave_invalida

The key does not exist or was revoked.

Check you copied the whole key and did not revoke it. Create another one in the console if needed.

401clave_no_es_de_desarrollador

The key belongs to a law firm, not to a developer account.

This API only accepts developer-account keys.

403clave_ip_no_permitida

The key has an IP allow-list and this address is not on it.

Add your server address to the allow-list in the console, or remove the restriction.

403identidad_sin_verificar

The account identity is not verified yet; balance cannot be spent without it.

Verify the account identity in the console Settings.

402saldo_insuficiente

There is not enough balance for this call. It was neither served nor charged.

Top up your balance in the console (Billing).

429demasiadas_peticiones

Too many calls in a row with this key (120 per minute).

Wait the seconds in the `Retry-After` header and retry with growing delay. The limit is per key.

400validacion

A field of the request is not valid; `campos` says which.

Fix the fields listed in `campos` and call again. An invalid request is never charged.

404no_encontrado

It is not in the loaded gazette data, or it is a person who exercised the right to object or erasure.

Check the id. If you only have a name use `GET /v1/dev/empresas/resolver?q=`.

400cursor_no_valido

The cursor is not valid or has expired.

Use `siguienteCursor` or the `X-Jurilia-Siguiente-Cursor` header exactly as received.

400campos_no_validos

The `campos` parameter is not valid.

Use field names separated by commas, dots for nested ones (`campos=denominacion,cargos.nombre`): up to 20 fields and 5 levels.

400idempotency_key_no_valida

The Idempotency-Key header is not valid.

Send a string of 8 to 100 characters (letters, digits, hyphens or dots), different for each creation; a UUID works.

400partes_no_validas

A part of `incluir` does not exist, or there are more than eight.

The message says which part is unknown and, if it looks like one, which you probably meant.

400url_de_aviso_no_valida

The notice address breaks the rules.

It must be https, a public domain name (not an IP), port 443, no user or password, and resolve to public addresses.

400destino_de_aviso_no_seguro

The destination is not public or cannot be resolved.

Use a public domain with a valid certificate.

400filtro_de_actos_no_valido

A group of the act filter does not exist.

Get the valid groups with `GET /v1/dev/avisos/filtros`.

404suscripcion_de_avisos_no_encontrada

That notice subscription is not in your account.

List them with `GET /v1/dev/avisos/suscripciones` and use the returned `id`.

409limite_de_avisos

A limit was reached: five subscriptions per account or 500 watched companies per subscription.

Delete a subscription or a watched company you no longer use.

422empresa_no_vigilable

The company is not loaded, or it is a sole trader (a natural person, who is not watched).

Find its id with `GET /v1/dev/empresas/resolver?q=`.

400reenvio_no_valido

The replay date is in the future or older than 30 days.

Ask for a date within the last 30 days, as YYYY-MM-DD.

500error_interno

A failure on our side. Nothing is charged.

Retry in a few seconds; if it persists, write to us with the time.