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. 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_xxxxxxxxxxxxxxxx2. 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. 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. 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. 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 / parameter | What it does |
|---|---|
X-Request-Id | On 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+json | Every error (RFC 9457): type, title, status, detail, instance, plus codigo, mensaje, sugerencia, documentacion and id_peticion. |
RateLimit-Limit, RateLimit-Remaining, RateLimit-Reset | Your 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-Match | Every 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-Centimos | What the call cost and what is left (also as X-Jurilia-*). |
?estimar=1 | What the call would cost, without executing or charging it. |
?campos=a,b.c | Only 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-Key | When creating a notice subscription: repeating the request with the same key returns the same subscription (200, Idempotent-Replayed: true, no secret, not charged). |
Deprecation, Sunset | If 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: prueba | The 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.
| Class | What it covers | Price |
|---|---|---|
simple | One indexed read: a profile section, a datum from a source, a trademark, a cached exploration page. | 3 euro cents |
cruce | A cross of several sources or a graph expansion: ties, public money, timeline, combined advanced search. | 8 euro cents |
grafo | A walk of the relationship graph between companies or people, or a prospecting list. | 15 euro cents |
avance | The dossier progress: the totals of the twenty profile sections. | 15 euro cents |
dossier | The professional dossier as a PDF: every section, the map, rendering, encryption and a verification code. | 250 euro cents |
alta_vigilada | Creating a notice subscription, or putting a company on a watch list. | 15 euro cents |
descarga | Downloading a prospecting list as Excel or CSV. | 200 euro cents |
biblioteca_articulo | An article of the legal library by its reference (or its versions, or its wording on the date of the facts). | 2 euro cents |
biblioteca_busqueda | A search for articles in the legal library. | 3 euro cents |
calculadora | One calculation of any of the legal calculators, with its legal basis. | 5 euro cents |
plazo | The computation of a deadline (working days and public holidays in the four jurisdictions). | 10 euro cents |
prueba_aviso | The test notice of a subscription. | 1 euro cent |
aviso | Each 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.
/v1/dev/empresas/resolverFind 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
| Field | Type | Required | Values, limits and default |
|---|---|---|---|
q | texto | yes | What to look for.. al menos 1 caracteres; hasta 300 caracteres |
provincia | texto | no | Province name or slug.. al menos 1 caracteres; hasta 60 caracteres |
Errors
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.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.402saldo_insuficiente — There is not enough balance for this call. It was neither served nor charged. Top up your balance in the console (Billing).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.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=`.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.500error_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=,
)
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": ,
"motivo": "motivo",
"motivoCodigo": "url_exacta"
},
"alternativas": [
{
"empresa": {
"id": "12345",
"denominacion": "ACME SERVICIOS SL",
"provincia": "MADRID",
"hoja": "M-123456",
"titular": "sociedad",
"ultimaPublicacion": "ultimaPublicacion"
},
"confianza": ,
"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.
/v1/dev/empresas/{empresaId}/nifThe 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
| Field | Type | Required | Values, limits and default |
|---|---|---|---|
empresaId | texto | yes | Company id, as returned by the search.. patrón ^\d{1,18}$ |
idioma | texto | no | Language 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
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.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.402saldo_insuficiente — There is not enough balance for this call. It was neither served nor charged. Top up your balance in the console (Billing).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.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=`.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.500error_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=,
)
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"
}
]
}/v1/dev/empresas/{empresaId}/senalesObjective 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
| Field | Type | Required | Values, limits and default |
|---|---|---|---|
empresaId | texto | yes | Company id, as returned by the search.. patrón ^\d{1,18}$ |
pagina | entero | no | Page number, starting at 1. Alternatively use cursor.. mínimo 1; máximo 10000. default: 1 |
cursor | texto | no | Opaque cursor of the next page (from siguienteCursor or the X-Jurilia-Siguiente-Cursor header). Replaces pagina.. hasta 100 caracteres |
Errors
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.400cursor_no_valido — The cursor is not valid or has expired. Use `siguienteCursor` or the `X-Jurilia-Siguiente-Cursor` header exactly as received.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.402saldo_insuficiente — There is not enough balance for this call. It was neither served nor charged. Top up your balance in the console (Billing).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.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=`.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.500error_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=,
)
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": ,
"paginas": ,
"total": ,
"porPagina":
},
"senales": [
{
"tipo": "tipo",
"fecha": "2026-10-22",
"desde": "2026-10-22",
"cuantos": ,
"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": ,
"fecha": "2026-10-22"
}
}
]
}
],
"siguienteCursor": "siguienteCursor"
}/v1/dev/empresas/{empresaId}/datos-objetivosMeasurable 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
| Field | Type | Required | Values, limits and default |
|---|---|---|---|
empresaId | texto | yes | Company id, as returned by the search.. patrón ^\d{1,18}$ |
idioma | texto | no | Language 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
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.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.402saldo_insuficiente — There is not enough balance for this call. It was neither served nor charged. Top up your balance in the console (Billing).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.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=`.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.500error_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=,
)
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"
}/v1/dev/empresas/{empresaId}/hechosPublished 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
| Field | Type | Required | Values, limits and default |
|---|---|---|---|
empresaId | texto | yes | Company id, as returned by the search.. patrón ^\d{1,18}$ |
pagina | entero | no | Page number, starting at 1. Alternatively use cursor.. mínimo 1; máximo 10000. default: 1 |
cursor | texto | no | Opaque cursor of the next page (from siguienteCursor or the X-Jurilia-Siguiente-Cursor header). Replaces pagina.. hasta 100 caracteres |
Errors
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.400cursor_no_valido — The cursor is not valid or has expired. Use `siguienteCursor` or the `X-Jurilia-Siguiente-Cursor` header exactly as received.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.402saldo_insuficiente — There is not enough balance for this call. It was neither served nor charged. Top up your balance in the console (Billing).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.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=`.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.500error_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=,
)
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": ,
"paginas": ,
"total": ,
"porPagina":
},
"hechos": [
{
"tipo": "tipo",
"fecha": "2026-10-22",
"desde": "2026-10-22",
"cuantos": ,
"administracion": {
"nombramientos": ,
"ceses":
},
"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": ,
"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": ,
"fecha": "2026-10-22"
}
},
"cobertura": {
"desde": "2026-10-22",
"hasta": "2026-10-22",
"anios": ,
"ventanaDeAdministradores": {
"desde": "2026-10-22",
"hasta": "2026-10-22"
}
},
"siguienteCursor": "siguienteCursor"
}/v1/dev/empresas/{empresaId}/linea-de-tiempoRegistry 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
| Field | Type | Required | Values, limits and default |
|---|---|---|---|
empresaId | texto | yes | Company id, as returned by the search.. patrón ^\d{1,18}$ |
pagina | entero | no | Page number, starting at 1. Alternatively use cursor.. mínimo 1; máximo 10000. default: 1 |
cursor | texto | no | Opaque cursor of the next page (from siguienteCursor or the X-Jurilia-Siguiente-Cursor header). Replaces pagina.. hasta 100 caracteres |
Errors
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.400cursor_no_valido — The cursor is not valid or has expired. Use `siguienteCursor` or the `X-Jurilia-Siguiente-Cursor` header exactly as received.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.402saldo_insuficiente — There is not enough balance for this call. It was neither served nor charged. Top up your balance in the console (Billing).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.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=`.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.500error_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=,
)
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": ,
"paginas": ,
"total": ,
"porPagina":
},
"recortada": true,
"hitos": [
{
"fecha": "2026-10-22",
"numero": ,
"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": ,
"domicilio": "domicilio",
"denominacion": "ACME SERVICIOS SL"
}
],
"siguienteCursor": "siguienteCursor"
}/v1/dev/empresas/{empresaId}/anunciosSection 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
| Field | Type | Required | Values, limits and default |
|---|---|---|---|
empresaId | texto | yes | Company id, as returned by the search.. patrón ^\d{1,18}$ |
pagina | entero | no | Page number, starting at 1. Alternatively use cursor.. mínimo 1; máximo 10000. default: 1 |
cursor | texto | no | Opaque cursor of the next page (from siguienteCursor or the X-Jurilia-Siguiente-Cursor header). Replaces pagina.. hasta 100 caracteres |
Errors
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.400cursor_no_valido — The cursor is not valid or has expired. Use `siguienteCursor` or the `X-Jurilia-Siguiente-Cursor` header exactly as received.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.402saldo_insuficiente — There is not enough balance for this call. It was neither served nor charged. Top up your balance in the console (Billing).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.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=`.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.500error_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=,
)
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": ,
"tipo": "tipo",
"epigrafe": "epigrafe",
"denominacion": "ACME SERVICIOS SL",
"denominacionLegible": "Acme Servicios, S.L.",
"ejercicio": ,
"fechaIndicada": "fechaIndicada",
"detalle": "detalle"
}
],
"total": ,
"pagina":
},
"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": ,
"conTexto": true
}
],
"total": ,
"pagina":
},
"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"
}/v1/dev/empresas/{empresaId}/marcasTrademarks 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
| Field | Type | Required | Values, limits and default |
|---|---|---|---|
empresaId | texto | yes | Company id, as returned by the search.. patrón ^\d{1,18}$ |
pagina | entero | no | Page number, starting at 1. Alternatively use cursor.. mínimo 1; máximo 10000. default: 1 |
cursor | texto | no | Opaque cursor of the next page (from siguienteCursor or the X-Jurilia-Siguiente-Cursor header). Replaces pagina.. hasta 100 caracteres |
Errors
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.400cursor_no_valido — The cursor is not valid or has expired. Use `siguienteCursor` or the `X-Jurilia-Siguiente-Cursor` header exactly as received.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.402saldo_insuficiente — There is not enough balance for this call. It was neither served nor charged. Top up your balance in the console (Billing).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.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=`.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.500error_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=,
)
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": [
],
"estado": "solicitada",
"estadoPublicado": "estadoPublicado",
"fechaEstado": "2026-10-22",
"fechaSolicitud": "2026-10-22",
"fechaRegistro": "2026-10-22"
}
],
"total": ,
"pagina": ,
"paginas": ,
"porPagina": ,
"porEstado": {
"solicitada": ,
"concedida": ,
"caducada": ,
"otro":
},
"actualizadoEn": "2026-10-22T00:00:00.000Z",
"siguienteCursor": "siguienteCursor"
}/v1/dev/empresas/{empresaId}/boeOfficial 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
| Field | Type | Required | Values, limits and default |
|---|---|---|---|
empresaId | texto | yes | Company id, as returned by the search.. patrón ^\d{1,18}$ |
pagina | entero | no | Page number, starting at 1. Alternatively use cursor.. mínimo 1; máximo 10000. default: 1 |
cursor | texto | no | Opaque cursor of the next page (from siguienteCursor or the X-Jurilia-Siguiente-Cursor header). Replaces pagina.. hasta 100 caracteres |
Errors
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.400cursor_no_valido — The cursor is not valid or has expired. Use `siguienteCursor` or the `X-Jurilia-Siguiente-Cursor` header exactly as received.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.402saldo_insuficiente — There is not enough balance for this call. It was neither served nor charged. Top up your balance in the console (Billing).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.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=`.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.500error_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=,
)
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": ,
"paginas": ,
"total": ,
"porPagina":
},
"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"
}/v1/dev/empresas/{empresaId}/emisionesIndustrial 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
| Field | Type | Required | Values, limits and default |
|---|---|---|---|
empresaId | texto | yes | Company id, as returned by the search.. patrón ^\d{1,18}$ |
pagina | entero | no | Page number, starting at 1. Alternatively use cursor.. mínimo 1; máximo 10000. default: 1 |
cursor | texto | no | Opaque cursor of the next page (from siguienteCursor or the X-Jurilia-Siguiente-Cursor header). Replaces pagina.. hasta 100 caracteres |
Errors
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.400cursor_no_valido — The cursor is not valid or has expired. Use `siguienteCursor` or the `X-Jurilia-Siguiente-Cursor` header exactly as received.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.402saldo_insuficiente — There is not enough balance for this call. It was neither served nor charged. Top up your balance in the console (Billing).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.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=`.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.500error_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=,
)
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": ,
"paginas": ,
"total": ,
"porPagina":
},
"bloques": [
{
"codigoPrtr": ,
"nombre": "ANA GARCIA LOPEZ",
"municipio": "municipio",
"provincia": "MADRID",
"anyo": ,
"emisiones": [
{
"contaminante": "contaminante",
"medio": "aire",
"receptor": "receptor",
"cantidadKg": "cantidadKg",
"metodo": "M"
}
]
}
],
"complejos": [
{
"codigoPrtr": ,
"nombre": "ANA GARCIA LOPEZ",
"municipio": "municipio",
"provincia": "MADRID",
"actividad": "actividad",
"anyos": {
"desde": ,
"hasta":
}
}
],
"totalComplejos": ,
"cobertura": {
"desde": ,
"hasta": ,
"actualizadoEl": "2026-10-22"
},
"siguienteCursor": "siguienteCursor"
}/v1/dev/empresas/{empresaId}/tedEU 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
| Field | Type | Required | Values, limits and default |
|---|---|---|---|
empresaId | texto | yes | Company id, as returned by the search.. patrón ^\d{1,18}$ |
pagina | entero | no | Page number, starting at 1. Alternatively use cursor.. mínimo 1; máximo 10000. default: 1 |
cursor | texto | no | Opaque cursor of the next page (from siguienteCursor or the X-Jurilia-Siguiente-Cursor header). Replaces pagina.. hasta 100 caracteres |
Errors
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.400cursor_no_valido — The cursor is not valid or has expired. Use `siguienteCursor` or the `X-Jurilia-Siguiente-Cursor` header exactly as received.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.402saldo_insuficiente — There is not enough balance for this call. It was neither served nor charged. Top up your balance in the console (Billing).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.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=`.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.500error_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=,
)
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": ,
"paginas": ,
"total": ,
"porPagina":
},
"filas": [
{
"publicacion": "publicacion",
"fecha": "2026-10-22",
"comprador": "comprador",
"compradorPais": "compradorPais",
"compradores": ,
"objeto": "objeto",
"cpv": "cpv",
"importeCentimos": ,
"moneda": "moneda",
"adjudicatarios": ,
"tamano": "pyme",
"urlOficial": "https://consultas2.oepm.es/ceo/jsp/busqueda/consultaAvanzada.xhtml"
}
],
"cobertura": {
"desde": "2026-10-22",
"hasta": "2026-10-22"
},
"siguienteCursor": "siguienteCursor"
}/v1/dev/empresas/{empresaId}/cargos-en-fechaWho 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
| Field | Type | Required | Values, limits and default |
|---|---|---|---|
empresaId | texto | yes | Company id, as returned by the search.. patrón ^\d{1,18}$ |
fecha | fecha (AAAA-MM-DD) | yes | Calendar date, YYYY-MM-DD. |
Errors
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.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.402saldo_insuficiente — There is not enough balance for this call. It was neither served nor charged. Top up your balance in the console (Billing).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.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=`.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.500error_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=,
)
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": ,
"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": ,
"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": ,
"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": ,
"fecha": "2026-10-22"
}
},
"finPor": "extincion",
"enLiquidacion": true
}
],
"anteriorALoCargado": true,
"incompleto": true,
"cobertura": {
"desde": "2026-10-22",
"hasta": "2026-10-22",
"diasConBoletin": ,
"continua": true
}
}/v1/dev/empresas/{empresaId}/leiLegal 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
| Field | Type | Required | Values, limits and default |
|---|---|---|---|
empresaId | texto | yes | Company id, as returned by the search.. patrón ^\d{1,18}$ |
Errors
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.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.402saldo_insuficiente — There is not enough balance for this call. It was neither served nor charged. Top up your balance in the console (Billing).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.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=`.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.500error_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=,
)
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"
}
}/v1/dev/empresas/{empresaId}/fondos-ueEU 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
| Field | Type | Required | Values, limits and default |
|---|---|---|---|
empresaId | texto | yes | Company id, as returned by the search.. patrón ^\d{1,18}$ |
Errors
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.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.402saldo_insuficiente — There is not enough balance for this call. It was neither served nor charged. Top up your balance in the console (Billing).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.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=`.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.500error_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=,
)
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": ,
"programa": "programa",
"centimos": ,
"compromisos":
}
],
"totalFilas": ,
"totalCentimos": ,
"anioDesde": ,
"anioHasta": ,
"ultimoAnioCargado": ,
"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"
}
}/v1/dev/empresas/{empresaId}/registros-catalunaEntries 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
| Field | Type | Required | Values, limits and default |
|---|---|---|---|
empresaId | texto | yes | Company id, as returned by the search.. patrón ^\d{1,18}$ |
Errors
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.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.402saldo_insuficiente — There is not enough balance for this call. It was neither served nor charged. Top up your balance in the console (Billing).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.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=`.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.500error_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=,
)
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"
}
}/v1/dev/empresas/{empresaId}/registro-transparencia-ueEntries 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
| Field | Type | Required | Values, limits and default |
|---|---|---|---|
empresaId | texto | yes | Company id, as returned by the search.. patrón ^\d{1,18}$ |
Errors
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.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.402saldo_insuficiente — There is not enough balance for this call. It was neither served nor charged. Top up your balance in the console (Billing).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.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=`.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.500error_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=,
)
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": ,
"maxCentimos":
},
"acreditados": ,
"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"
}
}/v1/dev/empresas/{empresaId}/vinculosCompanies 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
| Field | Type | Required | Values, limits and default |
|---|---|---|---|
empresaId | texto | yes | Company id, as returned by the search.. patrón ^\d{1,18}$ |
pagina | entero | no | Page number, starting at 1. Alternatively use cursor.. mínimo 1; máximo 10000. default: 1 |
cursor | texto | no | Opaque cursor of the next page (from siguienteCursor or the X-Jurilia-Siguiente-Cursor header). Replaces pagina.. hasta 100 caracteres |
Errors
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.400cursor_no_valido — The cursor is not valid or has expired. Use `siguienteCursor` or the `X-Jurilia-Siguiente-Cursor` header exactly as received.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.402saldo_insuficiente — There is not enough balance for this call. It was neither served nor charged. Top up your balance in the console (Billing).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.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=`.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.500error_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=,
)
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": ,
"hayMas": true,
"homonimos": "posibles",
"filas": [
{
"id": "12345",
"denominacion": "ACME SERVICIOS SL",
"denominacionLegible": "Acme Servicios, S.L.",
"provincia": "MADRID",
"provinciaLegible": "Madrid",
"personasEnComun": ,
"personas": [
{
"clave": "clave",
"slug": "ana-garcia-lopez"
}
],
"rutaWeb": "rutaWeb"
}
],
"siguienteCursor": "siguienteCursor"
}/v1/dev/empresas/{empresaId}/genealogiaTransfers, 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
| Field | Type | Required | Values, limits and default |
|---|---|---|---|
empresaId | texto | yes | Company id, as returned by the search.. patrón ^\d{1,18}$ |
pagina | entero | no | Page number, starting at 1. Alternatively use cursor.. mínimo 1; máximo 10000. default: 1 |
cursor | texto | no | Opaque cursor of the next page (from siguienteCursor or the X-Jurilia-Siguiente-Cursor header). Replaces pagina.. hasta 100 caracteres |
Errors
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.400cursor_no_valido — The cursor is not valid or has expired. Use `siguienteCursor` or the `X-Jurilia-Siguiente-Cursor` header exactly as received.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.402saldo_insuficiente — There is not enough balance for this call. It was neither served nor charged. Top up your balance in the console (Billing).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.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=`.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.500error_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=,
)
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": ,
"paginas": ,
"total": ,
"porPagina":
},
"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": ,
"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": ,
"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": ,
"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": ,
"fecha": "2026-10-22",
"tipo": "tipo",
"detalle": "detalle"
}
],
"siguienteCursor": "siguienteCursor"
}/v1/dev/empresas/{empresaId}/dinero-publicoPublic 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
| Field | Type | Required | Values, limits and default |
|---|---|---|---|
empresaId | texto | yes | Company id, as returned by the search.. patrón ^\d{1,18}$ |
Errors
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.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.402saldo_insuficiente — There is not enough balance for this call. It was neither served nor charged. Top up your balance in the console (Billing).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.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=`.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.500error_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=,
)
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": ,
"urlAnuncio": "https://empresas.jurilia.com/"
}
],
"menores": {
"filas": [
{
"id": "12345",
"fichero": "perfiles",
"fecha": "2026-10-22",
"organo": "organo",
"objeto": "objeto",
"importeCentimos": ,
"urlAnuncio": "https://empresas.jurilia.com/"
}
],
"total": ,
"sinImporte": ,
"sumaCentimosConocidos":
},
"total": ,
"sinImporte": ,
"sumaCentimosConocidos": ,
"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": ,
"ayudaEquivalenteCentimos": ,
"urlBasesReguladoras": "https://empresas.jurilia.com/"
}
],
"total": ,
"totalesPorInstrumento": [
{
"instrumento": "instrumento",
"concesiones": ,
"importeCentimos": ,
"ayudaEquivalenteCentimos":
}
],
"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"
}
]
}/v1/dev/empresas/{empresaId}/comparativaHow 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
| Field | Type | Required | Values, limits and default |
|---|---|---|---|
empresaId | texto | yes | Company id, as returned by the search.. patrón ^\d{1,18}$ |
Errors
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.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.402saldo_insuficiente — There is not enough balance for this call. It was neither served nor charged. Top up your balance in the console (Billing).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.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=`.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.500error_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=,
)
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": ,
"lectura": {
"metrica": "antiguedad",
"modo": "mas",
"porcentaje":
},
"sociedades":
}
]
}/v1/dev/empresas/{empresaId}/parecidasSimilar 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
| Field | Type | Required | Values, limits and default |
|---|---|---|---|
empresaId | texto | yes | Company id, as returned by the search.. patrón ^\d{1,18}$ |
Errors
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.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.402saldo_insuficiente — There is not enough balance for this call. It was neither served nor charged. Top up your balance in the console (Billing).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.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=`.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.500error_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=,
)
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"
}
]
}
]
}/v1/dev/empresas/{empresaId}/cronologiaEverything 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
| Field | Type | Required | Values, limits and default |
|---|---|---|---|
empresaId | texto | yes | Company id, as returned by the search.. patrón ^\d{1,18}$ |
tipo | texto | no | Type filter, comma separated.. hasta 400 caracteres |
anio | texto | no | Year (YYYY).. hasta 4 caracteres |
orden | texto | no | reciente (default) or antiguo.. hasta 10 caracteres. default: reciente |
pagina | texto | no | Page number, starting at 1. Alternatively use cursor.. hasta 6 caracteres. default: 1 |
cursor | texto | no | Opaque cursor of the next page (from siguienteCursor or the X-Jurilia-Siguiente-Cursor header). Replaces pagina.. hasta 100 caracteres |
Errors
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.400cursor_no_valido — The cursor is not valid or has expired. Use `siguienteCursor` or the `X-Jurilia-Siguiente-Cursor` header exactly as received.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.402saldo_insuficiente — There is not enough balance for this call. It was neither served nor charged. Top up your balance in the console (Billing).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.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=`.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.500error_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=,
)
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"
}/v1/dev/empresas/{empresaId}/fichaFull 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
| Field | Type | Required | Values, limits and default |
|---|---|---|---|
empresaId | texto | yes | Company id, as returned by the search.. patrón ^\d{1,18}$ |
idioma | texto | no | Language 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 |
pagina | entero | no | Page number, starting at 1. Alternatively use cursor.. mínimo 1; máximo 10000. default: 1 |
paginaCargosVigentes | entero | no | Page of the current officers list (20 per page).. mínimo 1; máximo 10000. default: 1 |
paginaCargosCesados | entero | no | Page of the former officers list (20 per page).. mínimo 1; máximo 10000. default: 1 |
paginaCapital | entero | no | Page of the capital history (10 per page).. mínimo 1; máximo 10000. default: 1 |
paginaDomicilios | entero | no | Page of the address history (10 per page).. mínimo 1; máximo 10000. default: 1 |
Errors
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.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.402saldo_insuficiente — There is not enough balance for this call. It was neither served nor charged. Top up your balance in the console (Billing).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.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=`.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.500error_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=,
)
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": ,
"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": ,
"fecha": "2026-10-22"
}
},
"concursal": {
"tipo": "tipo",
"fecha": "2026-10-22",
"numero": ,
"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": ,
"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": ,
"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": ,
"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": ,
"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": ,
"fecha": "2026-10-22",
"centimos":
},
"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": ,
"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": ,
"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": ,
"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": ,
"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": ,
"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": ,
"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": ,
"fecha": "2026-10-22",
"tipo": "tipo",
"importeCentimos": ,
"resultanteCentimos":
}
],
"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": ,
"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": ,
"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": ,
"fecha": "2026-10-22",
"provincia": "MADRID",
"datosRegistrales": "datosRegistrales",
"fechaInscripcion": "2026-10-22",
"actos": [
{
"tipo": "tipo",
"etiqueta": "etiqueta",
"capitalCentimos": ,
"capitalResultanteCentimos": ,
"domicilio": "domicilio",
"objeto": "objeto",
"comienzoOperaciones": "comienzoOperaciones",
"detalle": "detalle",
"cargos": [
{
"cargo": "Adm. Unico",
"nombre": "ANA GARCIA LOPEZ"
}
]
}
]
}
],
"paginacion": {
"pagina": ,
"paginas": ,
"total":
},
"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": ,
"fecha": "2026-10-22",
"actos": [
{
"tipo": "tipo",
"etiqueta": "etiqueta"
}
]
},
"listas": {
"cargosVigentes": {
"pagina": ,
"paginas": ,
"total": ,
"porPagina":
},
"cargosCesados": {
"pagina": ,
"paginas": ,
"total": ,
"porPagina":
},
"capital": {
"pagina": ,
"paginas": ,
"total": ,
"porPagina":
},
"domicilios": {
"pagina": ,
"paginas": ,
"total": ,
"porPagina":
}
},
"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": ,
"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": ,
"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": ,
"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": ,
"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": ,
"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": ,
"fecha": "2026-10-22"
}
]
}
],
"dineroPublico": {
"nif": "A58818501",
"subvenciones": "subvenciones",
"contratos": "contratos"
}
}
}/v1/dev/empresas/{empresaId}/resumenPlain-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
| Field | Type | Required | Values, limits and default |
|---|---|---|---|
empresaId | texto | yes | Company id, as returned by the search.. patrón ^\d{1,18}$ |
idioma | texto | no | Language 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
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.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.402saldo_insuficiente — There is not enough balance for this call. It was neither served nor charged. Top up your balance in the console (Billing).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.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=`.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.500error_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=,
)
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": ,
"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": ,
"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": ,
"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": ,
"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": ,
"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": ,
"fecha": "2026-10-22",
"actos": [
{
"tipo": "tipo",
"etiqueta": "etiqueta"
}
]
},
"soloHechosPublicados": true
}/v1/dev/empresas/{empresaId}/viesIs 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
| Field | Type | Required | Values, limits and default |
|---|---|---|---|
empresaId | texto | yes | Company id, as returned by the search.. patrón ^\d{1,18}$ |
Errors
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.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.402saldo_insuficiente — There is not enough balance for this call. It was neither served nor charged. Top up your balance in the console (Billing).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.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=`.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.500error_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=,
)
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/"
}/v1/dev/empresas/{empresaId}/noticiasNews 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
| Field | Type | Required | Values, limits and default |
|---|---|---|---|
empresaId | texto | yes | Company id, as returned by the search.. patrón ^\d{1,18}$ |
idioma | texto | no | Language 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
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.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.402saldo_insuficiente — There is not enough balance for this call. It was neither served nor charged. Top up your balance in the console (Billing).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.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.500error_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=,
)
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.
/v1/dev/personas/{slug}/cronologiaTimeline 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
| Field | Type | Required | Values, limits and default |
|---|---|---|---|
slug | texto | yes | Slug of a person name or of a news article / address, as returned by the API.. al menos 1 caracteres; hasta 240 caracteres |
tipo | texto | no | Type filter, comma separated.. hasta 400 caracteres |
anio | texto | no | Year (YYYY).. hasta 4 caracteres |
orden | texto | no | reciente (default) or antiguo.. hasta 10 caracteres. default: reciente |
pagina | texto | no | Page number, starting at 1. Alternatively use cursor.. hasta 6 caracteres. default: 1 |
Errors
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.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.402saldo_insuficiente — There is not enough balance for this call. It was neither served nor charged. Top up your balance in the console (Billing).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.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=`.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.500error_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=,
)
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": ,
"homonimos": "posibles",
"recortada": true,
"filtro": {
"tipos": [
"constitucion"
],
"anio": ,
"orden": "reciente"
},
"total": ,
"pagina": ,
"paginas": ,
"porPagina": ,
"porTipo": [
{
"tipo": "constitucion",
"n":
}
],
"porAnio": [
{
"anio": ,
"n":
}
],
"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": ,
"fecha": "2026-10-22",
"provincia": "MADRID",
"provinciaLegible": "Madrid"
}
}
],
"soloHechos": true
}/v1/dev/personas/{slug}/coincidenciasWho 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
| Field | Type | Required | Values, limits and default |
|---|---|---|---|
slug | texto | yes | Slug of a person name or of a news article / address, as returned by the API.. al menos 1 caracteres; hasta 240 caracteres |
pagina | entero | no | Page number, starting at 1. Alternatively use cursor.. mínimo 1; máximo 10000. default: 1 |
con | texto | no | Slug of one of the coinciding people: opens only that person with the shared companies.. al menos 1 caracteres; hasta 240 caracteres |
paginaSociedades | entero | no | Page of the shared companies (10 per page).. mínimo 1; máximo 10000. default: 1 |
Errors
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.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.402saldo_insuficiente — There is not enough balance for this call. It was neither served nor charged. Top up your balance in the console (Billing).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.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=`.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.500error_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=,
)
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": ,
"sociedadesConSolape": ,
"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": ,
"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": ,
"fecha": "2026-10-22"
}
}
]
}
]
}
],
"totalDePersonas": ,
"paginacion": {
"pagina": ,
"paginas": ,
"total": ,
"porPagina":
},
"abierta": "abierta",
"paginacionSociedades": {
"pagina": ,
"paginas": ,
"total": ,
"porPagina":
},
"sociedadesMiradas": ,
"recortadaPorSociedades": true,
"lecturaParcial": true,
"agotada": true,
"homonimos": "posibles"
}/v1/dev/personas/{slug}/vinculosNames 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
| Field | Type | Required | Values, limits and default |
|---|---|---|---|
slug | texto | yes | Slug of a person name or of a news article / address, as returned by the API.. al menos 1 caracteres; hasta 240 caracteres |
pagina | entero | no | Page number, starting at 1. Alternatively use cursor.. mínimo 1; máximo 10000. default: 1 |
Errors
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.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.402saldo_insuficiente — There is not enough balance for this call. It was neither served nor charged. Top up your balance in the console (Billing).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.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=`.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.500error_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=,
)
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": ,
"hayMas": true,
"homonimos": "posibles",
"filas": [
{
"slug": "ana-garcia-lopez",
"nombre": "ANA GARCIA LOPEZ",
"nombreLegible": "Ana García López",
"empresasEnComun": ,
"empresas": [
{
"id": "12345",
"denominacion": "ACME SERVICIOS SL",
"rutaWeb": "rutaWeb"
}
],
"rutaWeb": "rutaWeb"
}
]
}/v1/dev/personas/{slug}/datos-objetivosMeasurable 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
| Field | Type | Required | Values, limits and default |
|---|---|---|---|
slug | texto | yes | Slug of a person name or of a news article / address, as returned by the API.. al menos 1 caracteres; hasta 240 caracteres |
idioma | texto | no | Language 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
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.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.402saldo_insuficiente — There is not enough balance for this call. It was neither served nor charged. Top up your balance in the console (Billing).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.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=`.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.500error_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=,
)
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": ,
"fecha": "2026-10-22",
"datos": {
"desde": "2026-10-22",
"hasta": "2026-10-22",
"primera": "2026-10-22",
"nombramientos": ,
"ceses": ,
"sociedades": ,
"anios": ,
"alMenos": ,
"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": ,
"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.
/v1/dev/redNeighbours 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
| Field | Type | Required | Values, limits and default |
|---|---|---|---|
nodo | texto | yes | Graph node: e:<id> company, p:<slug> person name, d:<key> address.. al menos 3 caracteres; hasta 320 caracteres |
Errors
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.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.402saldo_insuficiente — There is not enough balance for this call. It was neither served nor charged. Top up your balance in the console (Billing).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.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=`.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.500error_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=,
)
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": ,
"sociedadesAcotadas": true,
"grado": ,
"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": ,
"sociedadesAcotadas": true,
"grado": ,
"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":
}
}
],
"sentido": "entrante"
}
],
"total":
}/v1/dev/rastroShortest 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
| Field | Type | Required | Values, limits and default |
|---|---|---|---|
a | texto | yes | First end: e:<id> or p:<slug>.. al menos 3 caracteres; hasta 320 caracteres |
b | texto | yes | Second end: e:<id> or p:<slug>.. al menos 3 caracteres; hasta 320 caracteres |
Errors
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.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.402saldo_insuficiente — There is not enough balance for this call. It was neither served nor charged. Top up your balance in the console (Billing).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.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=`.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.500error_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=,
)
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"
}/v1/dev/conexionHow 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
| Field | Type | Required | Values, limits and default |
|---|---|---|---|
a | texto | yes | First end: e:<id> or p:<slug>.. al menos 3 caracteres; hasta 320 caracteres |
b | texto | yes | Second end: e:<id> or p:<slug>.. al menos 3 caracteres; hasta 320 caracteres |
nodosGrandes | texto | no | 1 to allow crossing very common nodes (marked in the answer).. uno de: 0, 1. default: 0 |
Errors
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.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.402saldo_insuficiente — There is not enough balance for this call. It was neither served nor charged. Top up your balance in the console (Billing).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.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=`.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.500error_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=,
)
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"
}/v1/dev/compararCompare 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
| Field | Type | Required | Values, limits and default |
|---|---|---|---|
ids | texto | yes | Company ids separated by commas (2 to 8).. patrón ^\d{1,18}(,\d{1,18}){0,7}$ |
Errors
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.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.402saldo_insuficiente — There is not enough balance for this call. It was neither served nor charged. Top up your balance in the console (Billing).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.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=`.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.500error_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=,
)
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": ,
"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": ,
"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": ,
"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": ,
"fecha": "2026-10-22"
}
},
"administradoresVigentes": ,
"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": ,
"fecha": "2026-10-22"
}
},
"senales": [
{
"tipo": "tipo",
"fecha": "2026-10-22",
"desde": "2026-10-22",
"cuantos": ,
"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": ,
"fecha": "2026-10-22"
}
}
]
}
],
"rutaWeb": "rutaWeb"
}
],
"minimo": ,
"maximo":
}/v1/dev/comparar/cronologiaCompared 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
| Field | Type | Required | Values, limits and default |
|---|---|---|---|
e | texto | no | Companies as e:<id> separated by commas.. hasta 1000 caracteres |
ids | texto | no | Company ids separated by commas (2 to 8).. hasta 1000 caracteres |
tipo | texto | no | Type filter, comma separated.. hasta 400 caracteres |
anio | texto | no | Year (YYYY).. hasta 4 caracteres |
orden | texto | no | reciente (default) or antiguo.. hasta 10 caracteres. default: reciente |
pagina | texto | no | Page number, starting at 1. Alternatively use cursor.. hasta 6 caracteres. default: 1 |
Errors
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.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.402saldo_insuficiente — There is not enough balance for this call. It was neither served nor charged. Top up your balance in the console (Billing).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.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=`.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.500error_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=,
)
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": ,
"conNif": true,
"sinFecha": {
"placsp": ,
"sanciones_ue":
},
"recortadas": [
"borme"
]
}
],
"filtro": {
"tipos": [
"constitucion"
],
"anio": ,
"orden": "reciente"
},
"total": ,
"pagina": ,
"paginas": ,
"aniosPorPagina": ,
"porTipo": [
{
"tipo": "constitucion",
"n":
}
],
"porAnio": [
{
"anio": ,
"n":
}
],
"anios": [
{
"anio": ,
"celdas": [
{
"sociedadId": "sociedadId",
"total": ,
"restantes": ,
"hechos": [
{
"clave": "clave",
"fecha": "2026-10-22",
"tipo": "constitucion",
"origen": "borme",
"acto": "acto",
"etiquetaPublicada": "etiquetaPublicada",
"capitalCentimos": ,
"capitalResultanteCentimos": ,
"domicilio": "domicilio",
"objeto": "objeto",
"comienzoOperaciones": "comienzoOperaciones",
"detalle": "detalle",
"cargos": [],
"cargosOmitidos": ,
"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": ,
"fecha": "2026-10-22",
"provincia": "MADRID",
"provinciaLegible": "Madrid"
}
}
]
}
]
}
],
"coincidencias": {
"boletin": {
"total": ,
"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":
}
]
}
]
},
"domicilio": {
"total": ,
"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": ,
"fecha": "2026-10-22",
"provincia": "MADRID",
"provinciaLegible": "Madrid"
}
}
]
}
]
},
"nombres": {
"total": ,
"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": ,
"fecha": "2026-10-22",
"provincia": "MADRID",
"provinciaLegible": "Madrid"
}
}
],
"sociedadesEnElBorme": ,
"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.
/v1/dev/marcasSearch 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
| Field | Type | Required | Values, limits and default |
|---|---|---|---|
q | texto | no | What to look for.. hasta 300 caracteres |
modo | texto | no | Match mode or search mode.. hasta 300 caracteres. default: contiene / empresa (según la ruta) |
clase | texto | no | Nice class (1 to 45).. hasta 300 caracteres |
estado | texto | no | Status filter.. hasta 300 caracteres |
tipo | texto | no | Type filter, comma separated.. hasta 300 caracteres |
pagina | texto | no | Page number, starting at 1. Alternatively use cursor.. hasta 300 caracteres. default: 1 |
Errors
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.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.402saldo_insuficiente — There is not enough balance for this call. It was neither served nor charged. Top up your balance in the console (Billing).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.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=`.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.500error_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=,
)
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": ,
"ignorados": [
"ignorado"
],
"total": ,
"acotado": true,
"pagina": ,
"paginas": ,
"porPagina": ,
"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": [
],
"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"
}
}
]
}/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
| Field | Type | Required | Values, limits and default |
|---|---|---|---|
numero | texto | yes | Application number of the trademark, for example M1167553.. patrón ^[A-Za-z][0-9]{5,10}[A-Za-z0-9]{0,6}$ |
Errors
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.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.402saldo_insuficiente — There is not enough balance for this call. It was neither served nor charged. Top up your balance in the console (Billing).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.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=`.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.500error_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=,
)
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": [
],
"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": [
],
"estado": "solicitada",
"estadoPublicado": "estadoPublicado",
"fechaEstado": "2026-10-22"
}
],
"total":
},
"parecidas": [
{
"signo": "signo",
"numero": "numero",
"rutaWeb": "rutaWeb",
"modalidad": "M",
"clases": [
],
"estado": "solicitada",
"estadoPublicado": "estadoPublicado",
"fechaEstado": "2026-10-22"
}
]
}Dossier (PDF) and verification
The professional dossier and the check that a PDF is authentic.
/v1/dev/empresas/{empresaId}/dossier/avanceHow 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
| Field | Type | Required | Values, limits and default |
|---|---|---|---|
empresaId | texto | yes | Company id, as returned by the search.. patrón ^\d{1,18}$ |
idioma | texto | no | Language 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
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.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.402saldo_insuficiente — There is not enough balance for this call. It was neither served nor charged. Top up your balance in the console (Billing).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.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=`.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.500error_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=,
)
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": ,
"total": ,
"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"
]
}
]
}/v1/dev/empresas/{empresaId}/dossierProfessional 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
| Field | Type | Required | Values, limits and default |
|---|---|---|---|
empresaId | texto | yes | Company id, as returned by the search.. patrón ^\d{1,18}$ |
idioma | texto | no | Language 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 |
secciones | texto | no | Dossier sections, comma separated, or todas (default).. hasta 300 caracteres. default: todas |
red | texto | no | How far the dossier connection map goes: 1, 2, 3 or completo.. uno de: 1, 2, 3, completo. default: 1 |
Errors
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.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.402saldo_insuficiente — There is not enough balance for this call. It was neither served nor charged. Top up your balance in the console (Billing).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.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=`.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.500error_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=,
)
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.
/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
| Field | Type | Required | Values, limits and default |
|---|---|---|---|
codigo | texto | yes | Verification code printed on the PDF.. al menos 1 caracteres; hasta 40 caracteres |
Errors
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.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.402saldo_insuficiente — There is not enough balance for this call. It was neither served nor charged. Top up your balance in the console (Billing).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.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=`.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.500error_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=,
)
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":
}Explore: provinces, sectors, rankings, news and reports
The same routes as the public site, with a key instead of a daily quota.
/v1/dev/empresas/portadaCoverage 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
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.402saldo_insuficiente — There is not enough balance for this call. It was neither served nor charged. Top up your balance in the console (Billing).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.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.500error_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=,
)
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": ,
"cargos": ,
"inscripciones": ,
"dias": ,
"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": ,
"fecha": "2026-10-22",
"empresaId": "12345",
"denominacion": "ACME SERVICIOS SL",
"denominacionLegible": "Acme Servicios, S.L.",
"provincia": "MADRID",
"provinciaLegible": "Madrid",
"tipo": "tipo",
"capitalCentimos": ,
"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": ,
"fecha": "2026-10-22",
"empresaId": "12345",
"denominacion": "ACME SERVICIOS SL",
"denominacionLegible": "Acme Servicios, S.L.",
"provincia": "MADRID",
"provinciaLegible": "Madrid",
"tipo": "tipo",
"capitalCentimos": ,
"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": ,
"fecha": "2026-10-22",
"empresaId": "12345",
"denominacion": "ACME SERVICIOS SL",
"denominacionLegible": "Acme Servicios, S.L.",
"provincia": "MADRID",
"provinciaLegible": "Madrid",
"tipo": "tipo",
"capitalCentimos": ,
"rutaWeb": "rutaWeb"
}
]
},
"provincias": [
{
"provincia": "MADRID",
"provinciaLegible": "Madrid",
"provinciaSlug": "madrid",
"empresas":
}
],
"tiposDestacados": [
"tiposDestacado"
]
}/v1/dev/empresas/buscarSearch 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
| Field | Type | Required | Values, limits and default |
|---|---|---|---|
q | texto | yes | What to look for.. al menos 1 caracteres; hasta 120 caracteres |
modo | texto | no | Match mode or search mode.. uno de: empresa, persona. default: contiene / empresa (según la ruta) |
provincia | texto | no | Province name or slug.. al menos 1 caracteres; hasta 60 caracteres |
titular | texto | no | Holder type: sociedad (company) or empresario_individual (sole trader).. uno de: sociedad, empresario_individual |
estado | texto | no | Status filter.. uno de: concurso, disolucion, extincion |
limite | entero | no | Maximum results.. mínimo 1; máximo 50. default: 50 (avisos: entregas) · 100 (eventos) · 20 (búsquedas) |
Errors
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.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.402saldo_insuficiente — There is not enough balance for this call. It was neither served nor charged. Top up your balance in the console (Billing).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.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.500error_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=,
)
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": ,
"fecha": "2026-10-22"
}
},
"rutaWeb": "rutaWeb"
}
],
"personas": [
{
"slug": "ana-garcia-lopez",
"nombre": "ANA GARCIA LOPEZ",
"nombreLegible": "Ana García López",
"empresas": ,
"ultimaAparicion": "2026-10-22",
"homonimos": "posibles",
"casa": "exacto",
"rutaWeb": "rutaWeb"
}
],
"tambienPuedeBuscar": [
{
"clase": "municipio",
"id": "12345",
"nombre": "ANA GARCIA LOPEZ",
"provincia": "MADRID",
"sociedades": ,
"rutaWeb": "rutaWeb",
"extinguida": true,
"denominacion": "ACME SERVICIOS SL",
"denominacionLegible": "Acme Servicios, S.L."
}
]
}/v1/dev/empresas/sugerenciasType-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
| Field | Type | Required | Values, limits and default |
|---|---|---|---|
q | texto | yes | What to look for.. al menos 1 caracteres; hasta 120 caracteres |
personas | texto | no | true to suggest people only (up to five); without it, companies, towns, sectors and addresses.. uno de: true, false |
Errors
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.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.402saldo_insuficiente — There is not enough balance for this call. It was neither served nor charged. Top up your balance in the console (Billing).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.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.500error_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=,
)
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": ,
"rutaWeb": "rutaWeb",
"extinguida": true,
"valor": "valor",
"fuenteNif": "borme"
}
]
}/v1/dev/empresas/provinciasProvinces 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
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.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.402saldo_insuficiente — There is not enough balance for this call. It was neither served nor charged. Top up your balance in the console (Billing).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.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.500error_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=,
)
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":
}
]
}/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
| Field | Type | Required | Values, limits and default |
|---|---|---|---|
provincia | texto | yes | Province name or slug.. al menos 1 caracteres; hasta 120 caracteres |
estado | texto | no | Status filter.. uno de: concurso, disolucion, extincion |
pagina | entero | no | Page number, starting at 1. Alternatively use cursor.. mínimo 1; máximo 10000. default: 1 |
Errors
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.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.402saldo_insuficiente — There is not enough balance for this call. It was neither served nor charged. Top up your balance in the console (Billing).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.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=`.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.500error_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=,
)
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": ,
"hayMas": true,
"total": ,
"municipios": [
{
"slug": "ana-garcia-lopez",
"nombre": "ANA GARCIA LOPEZ",
"empresas": ,
"ultimaPublicacion": "2026-10-22",
"rutaWeb": "rutaWeb",
"codigo": "ABCD-1234"
}
],
"sectores": [
{
"slug": "ana-garcia-lopez",
"nombre": "ANA GARCIA LOPEZ",
"empresas": ,
"ultimaPublicacion": "2026-10-22",
"rutaWeb": "rutaWeb",
"division": {
"codigo": "ABCD-1234",
"titulo": "titulo"
}
}
],
"iniciales": [
{
"letra": "letra",
"slug": "ana-garcia-lopez",
"fichas":
}
]
}/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
| Field | Type | Required | Values, limits and default |
|---|---|---|---|
provincia | texto | yes | Province name or slug.. al menos 1 caracteres; hasta 120 caracteres |
municipio | texto | yes | Town name or slug.. al menos 1 caracteres; hasta 120 caracteres |
pagina | entero | no | Page number, starting at 1. Alternatively use cursor.. mínimo 1; máximo 10000. default: 1 |
Errors
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.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.402saldo_insuficiente — There is not enough balance for this call. It was neither served nor charged. Top up your balance in the console (Billing).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.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=`.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.500error_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=,
)
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": ,
"pagina": ,
"paginas": ,
"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"
}
]
}/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
| Field | Type | Required | Values, limits and default |
|---|---|---|---|
provincia | texto | yes | Province name or slug.. al menos 1 caracteres; hasta 120 caracteres |
sector | texto | yes | Sector: two-digit CNAE division, or its slug.. al menos 1 caracteres; hasta 120 caracteres |
pagina | entero | no | Page number, starting at 1. Alternatively use cursor.. mínimo 1; máximo 10000. default: 1 |
Errors
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.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.402saldo_insuficiente — There is not enough balance for this call. It was neither served nor charged. Top up your balance in the console (Billing).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.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=`.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.500error_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=,
)
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": ,
"pagina": ,
"paginas": ,
"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"
}
]
}/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
| Field | Type | Required | Values, limits and default |
|---|---|---|---|
provincia | texto | yes | Province name or slug.. al menos 1 caracteres; hasta 120 caracteres |
letra | texto | yes | Initial letter.. al menos 1 caracteres; hasta 10 caracteres |
pagina | entero | no | Page number, starting at 1. Alternatively use cursor.. mínimo 1; máximo 10000. default: 1 |
Errors
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.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.402saldo_insuficiente — There is not enough balance for this call. It was neither served nor charged. Top up your balance in the console (Billing).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.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=`.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.500error_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=,
)
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": ,
"pagina": ,
"paginas": ,
"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"
}
]
}/v1/dev/empresas/provincias/{provincia}/observatorioMonthly 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
| Field | Type | Required | Values, limits and default |
|---|---|---|---|
provincia | texto | yes | Province name or slug.. al menos 1 caracteres; hasta 120 caracteres |
Errors
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.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.402saldo_insuficiente — There is not enough balance for this call. It was neither served nor charged. Top up your balance in the console (Billing).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.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=`.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.500error_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=,
)
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": ,
"diasDelMes":
},
"cifras": [
{
"acto": "constitucion",
"actos": ,
"frenteAlAnterior": {
"diferencia": ,
"porcentaje":
},
"frenteAlAnioAnterior": {
"diferencia": ,
"porcentaje":
}
}
]
}
]
}/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
| Field | Type | Required | Values, limits and default |
|---|---|---|---|
provincia | texto | yes | Province name or slug.. al menos 1 caracteres; hasta 120 caracteres |
acto | texto | yes | BORME act type (for example constitucion, nombramientos, disolucion).. al menos 1 caracteres; hasta 40 caracteres |
mes | texto | yes | Month, YYYY-MM.. patrón ^\d{4}-(0[1-9]|1[0-2])$ |
pagina | entero | no | Page number, starting at 1. Alternatively use cursor.. mínimo 1; máximo 10000. default: 1 |
Errors
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.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.402saldo_insuficiente — There is not enough balance for this call. It was neither served nor charged. Top up your balance in the console (Billing).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.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=`.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.500error_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=,
)
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": ,
"cobertura": {
"estado": "completo",
"diasCargados": ,
"diasDelMes":
},
"pagina": ,
"hayMas": true,
"actos": [
{
"empresaId": "12345",
"denominacion": "ACME SERVICIOS SL",
"denominacionLegible": "Acme Servicios, S.L.",
"fecha": "2026-10-22",
"numero": ,
"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"
}
]
}/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
| Field | Type | Required | Values, limits and default |
|---|---|---|---|
tipo | texto | yes | Type filter, comma separated.. al menos 1 caracteres; hasta 120 caracteres |
provincia | texto | no | Province name or slug.. al menos 1 caracteres; hasta 60 caracteres |
pagina | entero | no | Page number, starting at 1. Alternatively use cursor.. mínimo 1; máximo 10000. default: 1 |
Errors
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.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.402saldo_insuficiente — There is not enough balance for this call. It was neither served nor charged. Top up your balance in the console (Billing).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.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=`.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.500error_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=,
)
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": ,
"hayMas": true,
"actos": [
{
"fecha": "2026-10-22",
"numero": ,
"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": ,
"capitalResultanteCentimos": ,
"domicilio": "domicilio",
"detalle": "detalle",
"rutaWeb": "rutaWeb"
}
]
}/v1/dev/empresas/rankingsRankings: 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
| Field | Type | Required | Values, limits and default |
|---|---|---|---|
criterio | texto | no | What is ranked: capital, antiguedad (age) or recientes (latest incorporations; nationwide only). Default capital.. uno de: capital, antiguedad, recientes |
ambito | texto | no | Where: nacional (default), comunidad (region), provincia or sector.. uno de: nacional, comunidad, provincia, sector |
valor | texto | no | The specific scope: the two-letter region code (MD), or the province or sector URL slug.. al menos 1 caracteres; hasta 120 caracteres |
Errors
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.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.402saldo_insuficiente — There is not enough balance for this call. It was neither served nor charged. Top up your balance in the console (Billing).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.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=`.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.500error_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=,
)
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": ,
"id": "12345",
"denominacion": "ACME SERVICIOS SL",
"denominacionLegible": "Acme Servicios, S.L.",
"provincia": "MADRID",
"provinciaLegible": "Madrid",
"valor": ,
"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": ,
"fecha": "2026-10-22"
},
"rutaWeb": "rutaWeb"
}
]
}/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
| Field | Type | Required | Values, limits and default |
|---|---|---|---|
letra | texto | yes | Initial letter.. al menos 1 caracteres; hasta 10 caracteres |
Errors
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.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.402saldo_insuficiente — There is not enough balance for this call. It was neither served nor charged. Top up your balance in the console (Billing).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.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=`.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.500error_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=,
)
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":
}
]
}/v1/dev/empresas/barometroBarometer 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
| Field | Type | Required | Values, limits and default |
|---|---|---|---|
granularidad | texto | no | dia (day), semana (week, default) or mes (month).. uno de: dia, semana, mes |
clave | texto | no | The period of the breakdown (default the last completed one, never the current one).. al menos 1 caracteres; hasta 20 caracteres |
Errors
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.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.402saldo_insuficiente — There is not enough balance for this call. It was neither served nor charged. Top up your balance in the console (Billing).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.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=`.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.500error_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=,
)
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": ,
"comparacion": {
"diferencia": ,
"porcentaje":
}
},
"disolucion": {
"actos": ,
"comparacion": {
"diferencia": ,
"porcentaje":
}
},
"extincion": {
"actos": ,
"comparacion": {
"diferencia": ,
"porcentaje":
}
},
"ampliacion_de_capital": {
"actos": ,
"comparacion": {
"diferencia": ,
"porcentaje":
}
},
"reduccion_de_capital": {
"actos": ,
"comparacion": {
"diferencia": ,
"porcentaje":
}
},
"cambio_de_domicilio": {
"actos": ,
"comparacion": {
"diferencia": ,
"porcentaje":
}
}
}
}
],
"desglose": {
"clave": "clave",
"etiqueta": "etiqueta",
"completo": true,
"porProvincia": [
{
"provincia": "MADRID",
"provinciaLegible": "Madrid",
"comunidad": "comunidad",
"comunidadNombre": "comunidadNombre",
"porActo": {
"constitucion": ,
"disolucion": ,
"extincion": ,
"ampliacion_de_capital": ,
"reduccion_de_capital": ,
"cambio_de_domicilio":
},
"total":
}
],
"porComunidad": [
{
"comunidad": "comunidad",
"comunidadNombre": "comunidadNombre",
"porActo": {
"constitucion": ,
"disolucion": ,
"extincion": ,
"ampliacion_de_capital": ,
"reduccion_de_capital": ,
"cambio_de_domicilio":
},
"total":
}
]
},
"constitucionesPorSector": {
"clave": "clave",
"etiqueta": "etiqueta",
"completo": true,
"constituciones": ,
"conSector": ,
"sectores": [
{
"codigo": "ABCD-1234",
"titulo": "titulo",
"constituciones":
}
]
}
}/v1/dev/empresas/mapaMap 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
| Field | Type | Required | Values, limits and default |
|---|---|---|---|
q | texto | no | What to look for.. hasta 120 caracteres |
municipio | texto | no | Town name or slug.. al menos 1 caracteres; hasta 120 caracteres |
provincia | texto | no | Province name or slug.. al menos 1 caracteres; hasta 60 caracteres |
Errors
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.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.402saldo_insuficiente — There is not enough balance for this call. It was neither served nor charged. Top up your balance in the console (Billing).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.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.500error_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=,
)
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": ,
"fecha": "2026-10-22",
"empresaId": "12345",
"denominacion": "ACME SERVICIOS SL",
"denominacionLegible": "Acme Servicios, S.L.",
"provincia": "MADRID",
"domicilio": "domicilio",
"geocodificado": true,
"rutaWeb": "rutaWeb"
}
]
}
}/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
| Field | Type | Required | Values, limits and default |
|---|---|---|---|
slug | texto | yes | Slug of a person name or of a news article / address, as returned by the API.. al menos 1 caracteres; hasta 240 caracteres |
pagina | entero | no | Page number, starting at 1. Alternatively use cursor.. mínimo 1; máximo 10000. default: 1 |
Errors
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.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.402saldo_insuficiente — There is not enough balance for this call. It was neither served nor charged. Top up your balance in the console (Billing).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.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=`.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.500error_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=,
)
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": ,
"vigentes": ,
"recortado": true,
"pagina": ,
"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":
},
"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":
}
}
]
}
],
"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":
},
"altaPor": "constitucion"
}
],
"eventosTotales":
}/v1/dev/empresas/avanzadaCombined 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
| Field | Type | Required | Values, limits and default |
|---|---|---|---|
provincia | texto | no | Province name or slug.. hasta 300 caracteres |
municipio | texto | no | Town name or slug.. hasta 300 caracteres |
forma | texto | no | Legal-form acronym: SL, SA, SLU, SAU, SLP, SLL, SCOOP…. hasta 300 caracteres |
sector | texto | no | Sector: two-digit CNAE division, or its slug.. hasta 300 caracteres |
situacion | texto o lista de texto | no | Status: activa, concurso, disuelta or extinguida. May be repeated (any of them). |
const_desde | texto | no | Incorporated since this date (YYYY-MM-DD).. hasta 300 caracteres |
const_hasta | texto | no | Incorporated up to this date (YYYY-MM-DD).. hasta 300 caracteres |
fin_desde | texto | no | Dissolution or extinction published since this date (the first of the two).. hasta 300 caracteres |
fin_hasta | texto | no | Dissolution or extinction published up to this date.. hasta 300 caracteres |
vida_max | texto | no | Published lifetime (incorporation to dissolution or extinction) of at most this many months (max 1,200).. hasta 300 caracteres |
cap_min | texto | no | Minimum capital, in euros.. hasta 300 caracteres |
cap_max | texto | no | Maximum capital, in euros.. hasta 300 caracteres |
cambios_min | texto | no | At least this many published changes of administration (within the period, if given).. hasta 300 caracteres |
traslados_min | texto | no | At least this many published address moves (within the period, if given).. hasta 300 caracteres |
organo | texto | no | Administration body: sole administrator, joint, several, board…. hasta 300 caracteres |
nif | texto | no | 1 for companies with a known, unambiguous tax ID only.. hasta 300 caracteres |
contratos | texto | no | 1 for companies with awarded public contracts only.. hasta 300 caracteres |
subvenciones | texto | no | 1 for companies with granted subsidies only.. hasta 300 caracteres |
persona | texto | no | Name of a person holding office, first name and surname as published. A name is not an identity.. hasta 300 caracteres |
vigente | texto | no | 1 for companies where that person holds office with no published cessation.. hasta 300 caracteres |
domicilio | texto | no | The whole address as published («C/ MAYOR 12 (MADRID)»).. hasta 300 caracteres |
const_anio | texto | no | Year of incorporation.. hasta 300 caracteres |
comparte_min | texto | no | Shares the last published address with at least this many companies, itself included (2 to 5,000).. hasta 300 caracteres |
periodo_desde | texto | no | Year from which the minimum changes and moves count (only with cambios_min or traslados_min).. hasta 300 caracteres |
periodo_hasta | texto | no | Year up to which they count, both included.. hasta 300 caracteres |
orden | texto | no | reciente (default) or antiguo.. hasta 300 caracteres. default: reciente |
pagina | texto | no | Page number, starting at 1. Alternatively use cursor.. hasta 300 caracteres. default: 1 |
Errors
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.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.402saldo_insuficiente — There is not enough balance for this call. It was neither served nor charged. Top up your balance in the console (Billing).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.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.500error_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=,
)
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": ,
"acotado": true,
"pagina": ,
"paginas": ,
"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": ,
"cambiosAdministracion": ,
"traslados": ,
"pruebas": [
{
"criterio": "constitucion",
"fuente": "borme",
"fecha": "2026-10-22",
"cantidad": ,
"importeCentimos": ,
"texto": "texto",
"periodo": {
"desde": ,
"hasta":
},
"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": ,
"fecha": "2026-10-22"
}
}
],
"rutaWeb": "rutaWeb"
}
]
}/v1/dev/empresas/prospeccionProspecting 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
| Field | Type | Required | Values, limits and default |
|---|---|---|---|
acto | texto | no | BORME act type (for example constitucion, nombramientos, disolucion).. hasta 300 caracteres |
periodo | texto | no | List period: semana (week), mes (month, default), mes_anterior, treinta_dias or rango (with desde and hasta; at most 93 days).. hasta 300 caracteres |
desde | texto | no | Start date, YYYY-MM-DD.. hasta 300 caracteres |
hasta | texto | no | End date of the range (YYYY-MM-DD), with periodo=rango.. hasta 300 caracteres |
provincia | texto | no | Province name or slug.. hasta 300 caracteres |
municipio | texto | no | Town name or slug.. hasta 300 caracteres |
forma | texto | no | Legal-form acronym: SL, SA, SLU, SAU, SLP, SLL, SCOOP…. hasta 300 caracteres |
sector | texto | no | Sector: two-digit CNAE division, or its slug.. hasta 300 caracteres |
cap_min | texto | no | Minimum capital, in euros.. hasta 300 caracteres |
pagina | texto | no | Page number, starting at 1. Alternatively use cursor.. hasta 300 caracteres. default: 1 |
Errors
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.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.402saldo_insuficiente — There is not enough balance for this call. It was neither served nor charged. Top up your balance in the console (Billing).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.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.500error_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=,
)
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": ,
"acotado": true,
"pagina": ,
"paginas": ,
"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": ,
"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": ,
"rutaWeb": "rutaWeb"
}
]
}/v1/dev/empresas/prospeccion/descargaDownload 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
| Field | Type | Required | Values, limits and default |
|---|---|---|---|
acto | texto | no | BORME act type (for example constitucion, nombramientos, disolucion).. hasta 300 caracteres |
periodo | texto | no | List period: semana (week), mes (month, default), mes_anterior, treinta_dias or rango (with desde and hasta; at most 93 days).. hasta 300 caracteres |
desde | texto | no | Start date, YYYY-MM-DD.. hasta 300 caracteres |
hasta | texto | no | End date of the range (YYYY-MM-DD), with periodo=rango.. hasta 300 caracteres |
provincia | texto | no | Province name or slug.. hasta 300 caracteres |
municipio | texto | no | Town name or slug.. hasta 300 caracteres |
forma | texto | no | Legal-form acronym: SL, SA, SLU, SAU, SLP, SLL, SCOOP…. hasta 300 caracteres |
sector | texto | no | Sector: two-digit CNAE division, or its slug.. hasta 300 caracteres |
cap_min | texto | no | Minimum capital, in euros.. hasta 300 caracteres |
formato | texto | no | xlsx (default) or csv.. uno de: xlsx, csv. default: xlsx |
idioma | texto | no | Language 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
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.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.402saldo_insuficiente — There is not enough balance for this call. It was neither served nor charged. Top up your balance in the console (Billing).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.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=`.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.500error_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=,
)
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.
/v1/dev/empresas/noticiasCompanies 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
| Field | Type | Required | Values, limits and default |
|---|---|---|---|
idioma | texto | no | Language 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 |
pagina | entero | no | Page number, starting at 1. Alternatively use cursor.. mínimo 1; máximo 10000. default: 1 |
tema | texto | no | Topic URL slug: semana-en-la-provincia, ampliaciones-de-capital, sectores or actualidad.. al menos 1 caracteres; hasta 120 caracteres |
provincia | texto | no | Province name or slug.. al menos 1 caracteres; hasta 120 caracteres |
Errors
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.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.402saldo_insuficiente — There is not enough balance for this call. It was neither served nor charged. Top up your balance in the console (Billing).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.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=`.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.500error_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=,
)
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": ,
"pagina": ,
"porPagina": ,
"temas": [
{
"slug": "ana-garcia-lopez",
"plantilla": "semana-provincia",
"n":
}
],
"provincias": [
{
"provincia": "MADRID",
"provinciaLegible": "Madrid",
"provinciaSlug": "madrid",
"n":
}
]
}/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
| Field | Type | Required | Values, limits and default |
|---|---|---|---|
slug | texto | yes | Slug of a person name or of a news article / address, as returned by the API.. al menos 1 caracteres; hasta 240 caracteres |
idioma | texto | no | Language 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
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.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.402saldo_insuficiente — There is not enough balance for this call. It was neither served nor charged. Top up your balance in the console (Billing).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.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=`.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.500error_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=,
)
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": ,
"texto": "texto",
"origen": "origen"
}
],
"autorBio": "autorBio",
"autorCredenciales": "autorCredenciales",
"empresas": [
{
"empresaId": "12345",
"denominacion": "ACME SERVICIOS SL",
"denominacionLegible": "Acme Servicios, S.L.",
"rutaWeb": "rutaWeb"
}
]
}/v1/dev/empresas/informesMonthly 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
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.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.402saldo_insuficiente — There is not enough balance for this call. It was neither served nor charged. Top up your balance in the console (Billing).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.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.500error_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=,
)
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": ,
"extraidoEn": "extraidoEn",
"publicadoEn": "publicadoEn",
"huella": "huella"
}
]
}/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
| Field | Type | Required | Values, limits and default |
|---|---|---|---|
mes | texto | yes | Month, YYYY-MM.. patrón ^\d{4}-(0[1-9]|1[0-2])$ |
Errors
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.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.402saldo_insuficiente — There is not enough balance for this call. It was neither served nor charged. Top up your balance in the console (Billing).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.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=`.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.500error_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=,
)
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": ,
"extraidoEn": "extraidoEn",
"publicadoEn": "publicadoEn",
"huella": "huella",
"huellaCoincide": true,
"mesAnterior": "mesAnterior",
"mesAnioAnterior": "mesAnioAnterior",
"ultimoDiaCargado": "2026-10-22",
"coberturas": {
"actual": {
"estado": "completo",
"diasCargados": ,
"diasDelMes":
},
"anterior": {
"estado": "completo",
"diasCargados": ,
"diasDelMes":
},
"anioAnterior": {
"estado": "completo",
"diasCargados": ,
"diasDelMes":
}
},
"nacional": {
"actual": {
"constituciones": ,
"disoluciones": ,
"extinciones": ,
"concursos": ,
"ampliaciones_de_capital": ,
"reducciones_de_capital": ,
"nombramientos_de_administracion": ,
"ceses_de_administracion":
},
"anterior": {
"constituciones": ,
"disoluciones": ,
"extinciones": ,
"concursos": ,
"ampliaciones_de_capital": ,
"reducciones_de_capital": ,
"nombramientos_de_administracion": ,
"ceses_de_administracion":
},
"anioAnterior": {
"constituciones": ,
"disoluciones": ,
"extinciones": ,
"concursos": ,
"ampliaciones_de_capital": ,
"reducciones_de_capital": ,
"nombramientos_de_administracion": ,
"ceses_de_administracion":
}
},
"comunidades": [
{
"comunidad": "comunidad",
"provincias": ,
"valores": {
"actual": {
"constituciones": ,
"disoluciones": ,
"extinciones": ,
"concursos": ,
"ampliaciones_de_capital": ,
"reducciones_de_capital": ,
"nombramientos_de_administracion": ,
"ceses_de_administracion":
},
"anterior": {
"constituciones": ,
"disoluciones": ,
"extinciones": ,
"concursos": ,
"ampliaciones_de_capital": ,
"reducciones_de_capital": ,
"nombramientos_de_administracion": ,
"ceses_de_administracion":
},
"anioAnterior": {
"constituciones": ,
"disoluciones": ,
"extinciones": ,
"concursos": ,
"ampliaciones_de_capital": ,
"reducciones_de_capital": ,
"nombramientos_de_administracion": ,
"ceses_de_administracion":
}
}
}
],
"provincias": [
{
"provincia": "MADRID",
"provinciaLegible": "Madrid",
"provinciaSlug": "madrid",
"codigo": "ABCD-1234",
"comunidad": "comunidad",
"valores": {
"actual": {
"constituciones": ,
"disoluciones": ,
"extinciones": ,
"concursos": ,
"ampliaciones_de_capital": ,
"reducciones_de_capital": ,
"nombramientos_de_administracion": ,
"ceses_de_administracion":
},
"anterior": {
"constituciones": ,
"disoluciones": ,
"extinciones": ,
"concursos": ,
"ampliaciones_de_capital": ,
"reducciones_de_capital": ,
"nombramientos_de_administracion": ,
"ceses_de_administracion":
},
"anioAnterior": {
"constituciones": ,
"disoluciones": ,
"extinciones": ,
"concursos": ,
"ampliaciones_de_capital": ,
"reducciones_de_capital": ,
"nombramientos_de_administracion": ,
"ceses_de_administracion":
}
}
}
],
"provinciasSinComunidad": ,
"descargas": {
"pdf": "pdf",
"csv": "csv",
"imagen": "imagen",
"graficos": [
{
"metrica": "constituciones",
"ruta": "ruta"
}
]
}
}/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
| Field | Type | Required | Values, limits and default |
|---|---|---|---|
mes | texto | yes | Month, YYYY-MM.. patrón ^\d{4}-(0[1-9]|1[0-2])$ |
provincia | texto | yes | Province name or slug.. al menos 1 caracteres; hasta 120 caracteres |
Errors
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.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.402saldo_insuficiente — There is not enough balance for this call. It was neither served nor charged. Top up your balance in the console (Billing).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.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=`.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.500error_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=,
)
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": ,
"extraidoEn": "extraidoEn",
"publicadoEn": "publicadoEn",
"huella": "huella",
"huellaCoincide": true,
"mesAnterior": "mesAnterior",
"mesAnioAnterior": "mesAnioAnterior",
"ultimoDiaCargado": "2026-10-22",
"coberturas": {
"actual": {
"estado": "completo",
"diasCargados": ,
"diasDelMes":
},
"anterior": {
"estado": "completo",
"diasCargados": ,
"diasDelMes":
},
"anioAnterior": {
"estado": "completo",
"diasCargados": ,
"diasDelMes":
}
},
"provincia": {
"provincia": "MADRID",
"provinciaLegible": "Madrid",
"provinciaSlug": "madrid",
"codigo": "ABCD-1234",
"comunidad": "comunidad",
"valores": {
"actual": {
"constituciones": ,
"disoluciones": ,
"extinciones": ,
"concursos": ,
"ampliaciones_de_capital": ,
"reducciones_de_capital": ,
"nombramientos_de_administracion": ,
"ceses_de_administracion":
},
"anterior": {
"constituciones": ,
"disoluciones": ,
"extinciones": ,
"concursos": ,
"ampliaciones_de_capital": ,
"reducciones_de_capital": ,
"nombramientos_de_administracion": ,
"ceses_de_administracion":
},
"anioAnterior": {
"constituciones": ,
"disoluciones": ,
"extinciones": ,
"concursos": ,
"ampliaciones_de_capital": ,
"reducciones_de_capital": ,
"nombramientos_de_administracion": ,
"ceses_de_administracion":
}
}
},
"descargas": {
"csv": "csv"
}
}/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
| Field | Type | Required | Values, limits and default |
|---|---|---|---|
huella | texto | yes | SHA-256 fingerprint of the report.. patrón ^[0-9a-fA-F]{64}$ |
Errors
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.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.402saldo_insuficiente — There is not enough balance for this call. It was neither served nor charged. Top up your balance in the console (Billing).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.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=`.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.500error_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=,
)
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":
}/v1/dev/citas/verificarCheck 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
| Field | Type | Required | Values, limits and default |
|---|---|---|---|
texto | texto | yes | The text whose citations are checked (a brief, a judgment, an AI-written answer…).. al menos 1 caracteres; hasta 100000 caracteres |
fecha | fecha (AAAA-MM-DD) | no | Calendar date, YYYY-MM-DD. |
ordenJurisdiccional | texto | no | Jurisdictional order (civil, penal, social or contencioso), to disambiguate abbreviations shared between orders.. uno de: civil, penal, social, contencioso |
Errors
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.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.402saldo_insuficiente — There is not enough balance for this call. It was neither served nor charged. Top up your balance in the console (Billing).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.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=`.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.500error_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=,
)
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": ,
"verificadas": ,
"noEncontradas": ,
"verdes": ,
"ambares": ,
"rojas":
},
"citas": [
{
"tipo": "articulo",
"texto": "texto",
"posicion": {
"inicio": ,
"fin":
},
"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 = ) {
const partes = Object.fromEntries(cabecera.split(',').map((p) => p.trim().split('=')));
const t = Number(partes.t);
if (!Number.isInteger(t) || Math.abs(Date.now() / - 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 = ) -> bool:
partes = dict(p.strip().split("=", ) 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/v1/dev/avisos/filtrosAct 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
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.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.500error_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=,
)
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"
]
}/v1/dev/avisos/suscripcionesCreate 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
| Field | Type | Required | Values, limits and default |
|---|---|---|---|
idempotency-key | texto | no | A 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
| Field | Type | Required | Values, limits and default |
|---|---|---|---|
url | texto | yes | HTTPS address that will receive the notices (public domain name, port 443).. hasta 500 caracteres |
descripcion | texto | no | Free label for your own reference.. hasta 120 caracteres |
grupos | lista de texto | no | Act groups to be notified about (see GET /v1/dev/avisos/filtros). Empty = every act. |
agrupacion | texto | no | inmediato (one notice per act, default) or diaria (one summary a day).. uno de: inmediato, diaria. default: inmediato |
Errors
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.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`.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.402saldo_insuficiente — There is not enough balance for this call. It was neither served nor charged. Top up your balance in the console (Billing).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.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=`.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.500error_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=,
)
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": ,
"ultimaEntregaEn": "2026-10-22T08:00:03.000Z",
"creadaEn": "2026-10-22T08:00:00.000Z",
"secretoPista": "xxxx",
"empresasVigiladas":
},
"secreto": "whsec_xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx",
"repetida": true
}/v1/dev/avisos/suscripcionesList 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
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.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.402saldo_insuficiente — There is not enough balance for this call. It was neither served nor charged. Top up your balance in the console (Billing).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.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=`.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.500error_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=,
)
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": ,
"ultimaEntregaEn": "2026-10-22T08:00:03.000Z",
"creadaEn": "2026-10-22T08:00:00.000Z",
"secretoPista": "xxxx",
"empresasVigiladas":
}
]
}/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
| Field | Type | Required | Values, limits and default |
|---|---|---|---|
id | texto | yes | Subscription id. |
Errors
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.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.402saldo_insuficiente — There is not enough balance for this call. It was neither served nor charged. Top up your balance in the console (Billing).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.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=`.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.500error_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=,
)
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": ,
"ultimaEntregaEn": "2026-10-22T08:00:03.000Z",
"creadaEn": "2026-10-22T08:00:00.000Z",
"secretoPista": "xxxx",
"empresasVigiladas":
}/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
| Field | Type | Required | Values, limits and default |
|---|---|---|---|
id | texto | yes | Subscription id. |
Errors
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.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.402saldo_insuficiente — There is not enough balance for this call. It was neither served nor charged. Top up your balance in the console (Billing).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.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=`.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.500error_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=,
)
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
}/v1/dev/avisos/suscripciones/{id}/reactivarReactivate 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
| Field | Type | Required | Values, limits and default |
|---|---|---|---|
id | texto | yes | Subscription id. |
Errors
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.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.402saldo_insuficiente — There is not enough balance for this call. It was neither served nor charged. Top up your balance in the console (Billing).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.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=`.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.500error_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=,
)
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": ,
"ultimaEntregaEn": "2026-10-22T08:00:03.000Z",
"creadaEn": "2026-10-22T08:00:00.000Z",
"secretoPista": "xxxx",
"empresasVigiladas":
}/v1/dev/avisos/suscripciones/{id}/secretoRotate 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
| Field | Type | Required | Values, limits and default |
|---|---|---|---|
id | texto | yes | Subscription id. |
Errors
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.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.402saldo_insuficiente — There is not enough balance for this call. It was neither served nor charged. Top up your balance in the console (Billing).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.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=`.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.500error_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=,
)
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"
}/v1/dev/avisos/suscripciones/{id}/probarSend 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
| Field | Type | Required | Values, limits and default |
|---|---|---|---|
id | texto | yes | Subscription id. |
Errors
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.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.402saldo_insuficiente — There is not enough balance for this call. It was neither served nor charged. Top up your balance in the console (Billing).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.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=`.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.500error_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=,
)
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": ,
"error": "error"
}/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
| Field | Type | Required | Values, limits and default |
|---|---|---|---|
id | texto | yes | Subscription id. |
empresaId | texto | yes | Company id, as returned by the search.. patrón ^\d{1,18}$ |
Errors
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.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.402saldo_insuficiente — There is not enough balance for this call. It was neither served nor charged. Top up your balance in the console (Billing).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.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=`.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.500error_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=,
)
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":
}/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
| Field | Type | Required | Values, limits and default |
|---|---|---|---|
id | texto | yes | Subscription id. |
empresaId | texto | yes | Company id, as returned by the search.. patrón ^\d{1,18}$ |
Errors
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.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.402saldo_insuficiente — There is not enough balance for this call. It was neither served nor charged. Top up your balance in the console (Billing).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.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=`.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.500error_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=,
)
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
}/v1/dev/avisos/suscripciones/{id}/empresasThe 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
| Field | Type | Required | Values, limits and default |
|---|---|---|---|
id | texto | yes | Subscription id. |
Errors
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.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.402saldo_insuficiente — There is not enough balance for this call. It was neither served nor charged. Top up your balance in the console (Billing).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.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=`.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.500error_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=,
)
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"
}
]
}/v1/dev/avisos/suscripciones/{id}/entregasDelivery 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
| Field | Type | Required | Values, limits and default |
|---|---|---|---|
id | texto | yes | Subscription id. |
limite | entero | no | Maximum results.. mínimo 1; máximo 200. default: 50 (avisos: entregas) · 100 (eventos) · 20 (búsquedas) |
antes | texto | no | ISO date-time: only entries older than this (pagination).. hasta 40 caracteres |
Errors
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.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.402saldo_insuficiente — There is not enough balance for this call. It was neither served nor charged. Top up your balance in the console (Billing).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.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=`.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.500error_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=,
)
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": ,
"proximoIntentoEn": "proximoIntentoEn",
"ultimoCodigo": ,
"ultimoError": "ultimoError",
"costeCentimos": ,
"creadaEn": "2026-10-22T08:00:00.000Z",
"entregadaEn": "2026-10-22T08:00:03.000Z",
"idDelAviso": "idDelAviso"
}
],
"siguienteAntes": "siguienteAntes"
}/v1/dev/avisos/suscripciones/{id}/eventosEvents 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
| Field | Type | Required | Values, limits and default |
|---|---|---|---|
id | texto | yes | Subscription id. |
desde | fecha (AAAA-MM-DD) | yes | Start date, YYYY-MM-DD. |
cursor | texto | no | Opaque cursor of the next page (from siguienteCursor or the X-Jurilia-Siguiente-Cursor header). Replaces pagina.. hasta 100 caracteres |
limite | entero | no | Maximum results.. mínimo 1; máximo 500. default: 50 (avisos: entregas) · 100 (eventos) · 20 (búsquedas) |
Errors
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.400cursor_no_valido — The cursor is not valid or has expired. Use `siguienteCursor` or the `X-Jurilia-Siguiente-Cursor` header exactly as received.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.402saldo_insuficiente — There is not enough balance for this call. It was neither served nor charged. Top up your balance in the console (Billing).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.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=`.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.500error_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=,
)
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": ,
"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"
}/v1/dev/avisos/suscripciones/{id}/reenviarAsk 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
| Field | Type | Required | Values, limits and default |
|---|---|---|---|
id | texto | yes | Subscription id. |
JSON body
| Field | Type | Required | Values, limits and default |
|---|---|---|---|
desde | fecha (AAAA-MM-DD) | yes | Start date, YYYY-MM-DD. |
Errors
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.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.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.402saldo_insuficiente — There is not enough balance for this call. It was neither served nor charged. Top up your balance in the console (Billing).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.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=`.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.500error_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=,
)
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":
}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_autenticadoThe Authorization header with the API key is missing.
Send the key as `Authorization: Bearer <key>`. You create it in the developer console.
401clave_invalidaThe 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_desarrolladorThe key belongs to a law firm, not to a developer account.
This API only accepts developer-account keys.
403clave_ip_no_permitidaThe 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_verificarThe account identity is not verified yet; balance cannot be spent without it.
Verify the account identity in the console Settings.
402saldo_insuficienteThere is not enough balance for this call. It was neither served nor charged.
Top up your balance in the console (Billing).
429demasiadas_peticionesToo 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.
400validacionA 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_encontradoIt 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_validoThe cursor is not valid or has expired.
Use `siguienteCursor` or the `X-Jurilia-Siguiente-Cursor` header exactly as received.
400campos_no_validosThe `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_validaThe 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_validasA 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_validaThe 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_seguroThe destination is not public or cannot be resolved.
Use a public domain with a valid certificate.
400filtro_de_actos_no_validoA group of the act filter does not exist.
Get the valid groups with `GET /v1/dev/avisos/filtros`.
404suscripcion_de_avisos_no_encontradaThat notice subscription is not in your account.
List them with `GET /v1/dev/avisos/suscripciones` and use the returned `id`.
409limite_de_avisosA 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_vigilableThe 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_validoThe 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_internoA failure on our side. Nothing is charged.
Retry in a few seconds; if it persists, write to us with the time.