{"openapi":"3.1.0","info":{"title":"BORME Events API","description":"Spain's commercial registry gazette (BORME) as typed English JSON. Every act since 2009-01-02, straight from the official BOE source.\n\n**Get a key** at https://bormeapi.com/account — sign in with a link sent to your email; a free tier is available. Send the key in the `X-API-Key` header:\n\n```\ncurl -H \"X-API-Key: YOUR_KEY\" \"https://api.bormeapi.com/v1/events?limit=5\"\n```\n\n**MCP server** for AI assistants: https://mcp.bormeapi.com/mcp (streamable HTTP). Without a key it answers at free-tier limits (the last 7 days of history, no tax-ID or brand lookups); send the same `X-API-Key` header to use your plan.\n\nContains public-sector information from the Agencia Estatal Boletín Oficial del Estado (BORME); not affiliated with or endorsed by BOE.","version":"1.0"},"servers":[{"url":"https://api.bormeapi.com","description":"Production"}],"paths":{"/v1/events":{"get":{"summary":"Search events","description":"Registry events, newest first. `format=csv` returns a flat table\n(one row per event; structured fields as columns) for non-developers.","operationId":"events_v1_events_get","parameters":[{"name":"date_from","in":"query","required":false,"schema":{"type":"string","description":"YYYY-MM-DD (clamped by tier lookback)","title":"Date From"},"description":"YYYY-MM-DD (clamped by tier lookback)"},{"name":"date_to","in":"query","required":false,"schema":{"type":"string","title":"Date To"}},{"name":"province","in":"query","required":false,"schema":{"type":"string","description":"accent-insensitive, e.g. CADIZ","title":"Province"},"description":"accent-insensitive, e.g. CADIZ"},{"name":"act_type","in":"query","required":false,"schema":{"type":"string","description":"enum, e.g. INCORPORATION (see /v1/act-types)","title":"Act Type"},"description":"enum, e.g. INCORPORATION (see /v1/act-types)"},{"name":"company_name_contains","in":"query","required":false,"schema":{"type":"string","minLength":3,"description":"substring of the company name, case-insensitive. Three characters minimum: the trigram index needs three to work, so shorter fragments fall back to rechecking tens of thousands of rows and match so many companies that the answer is truncated anyway","title":"Company Name Contains"},"description":"substring of the company name, case-insensitive. Three characters minimum: the trigram index needs three to work, so shorter fragments fall back to rechecking tens of thousands of rows and match so many companies that the answer is truncated anyway"},{"name":"capital_min","in":"query","required":false,"schema":{"type":"number","minimum":0,"description":"events with stated capital >= X EUR","title":"Capital Min"},"description":"events with stated capital >= X EUR"},{"name":"capital_max","in":"query","required":false,"schema":{"type":"number","minimum":0,"title":"Capital Max"}},{"name":"municipality","in":"query","required":false,"schema":{"type":"string","description":"accent-insensitive, e.g. ELCHE","title":"Municipality"},"description":"accent-insensitive, e.g. ELCHE"},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":200,"minimum":1,"default":50,"title":"Limit"}},{"name":"offset","in":"query","required":false,"schema":{"type":"integer","maximum":10000,"minimum":0,"default":0,"title":"Offset"}},{"name":"format","in":"query","required":false,"schema":{"type":"string","pattern":"^(json|csv)$","description":"csv = flat table for spreadsheets","default":"json","title":"Format"},"description":"csv = flat table for spreadsheets"},{"name":"x-api-key","in":"header","required":false,"schema":{"type":"string","description":"Your API key","title":"X-Api-Key"},"description":"Your API key"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{},"example":{"tier":"risk","date_from_effective":"2009-01-01","count":2,"events":[{"event_id":"sha1:003ffbb965665d68ecc6434c2681413033ab99b4","date":"2026-08-26","borme_id":"BORME-A-2026-164-28","province":"MADRID","company_name":"HOLDING FT-GIBALBIN SL.","company_slug":"holding-ft-gibalbin-sl","acts":[{"roles":[{"role":"PROXY_HOLDER","names":["FUENZALIDA SALAME EMILIO IGNACIO","PERUJO FARIÑA JORGE"],"role_raw":"Apoderado"}],"fields":{},"act_type":"APPOINTMENTS","payload_raw":"Apoderado: FUENZALIDA SALAME EMILIO IGNACIO;PERUJO FARIÑA JORGE;CARRILLO CANO ALFONSO ANTONIO.","act_type_raw":"Nombramientos","unparsed_tail":""}],"registral":{"raw":"S 8 , H M 758199, I/A 6 (19.08.26).","hoja":"M 758199","tomo":null,"folio":null,"libro":null,"seccion":8,"reg_date":"2026-08-19","inscription":"6"},"source":"parser","act_number":392986,"company_flags":[],"source_pdf_url":"https://www.boe.es/borme/dias/2026/08/26/pdfs/BORME-A-2026-164-28.pdf"},{"event_id":"sha1:0067e7c7ad46fd54cb1138d31885b1d878fe2896","date":"2026-08-26","borme_id":"BORME-A-2026-164-28","province":"MADRID","company_name":"IVORY OPCO 16 SL.","company_slug":"ivory-opco-16-sl","acts":[{"roles":[],"fields":{"text":"Comienzo de operaciones: 30.07.26. Objeto social: 1.- La realización de toda clase de actividades relacionadas con la prestación de servicios de odontología, ortodoncia, protésicos y estomatológicos, así como actividades relacionadas con...","objeto":"1.- La realización de toda clase de actividades relacionadas con la prestación de servicios de odontología, ortodoncia, protésicos y estomatológicos, así como actividades relacionadas con la odontológica en general, incluida la explotaci...","address":"PASEO DEL CLUB DEPORTIVO 1 2º - EDIFICIO 3","start_date":"2026-07-30","capital_eur":3012.0,"municipality":"POZUELO DE ALARCON","cnae_inferred":"86","capital_currency_raw":"Euros"},"act_type":"INCORPORATION","payload_raw":"Comienzo de operaciones: 30.07.26. Objeto social: 1.- La realización de toda clase de actividades relacionadas con la prestación de servicios de odontología, ortodoncia, protésicos y estomatológicos, así como actividades relacionadas con...","act_type_raw":"Constitución","unparsed_tail":""},{"roles":[],"fields":{"text":"Socio único: FAIRY INVESTMENTS BIDCO SL."},"act_type":"SOLE_SHAREHOLDER_DECLARATION","payload_raw":"Socio único: FAIRY INVESTMENTS BIDCO SL.","act_type_raw":"Declaración de unipersonalidad","unparsed_tail":""}],"registral":{"raw":"S 8 , H M 894003, I/A 1 (19.08.26).","hoja":"M 894003","tomo":null,"folio":null,"libro":null,"seccion":8,"reg_date":"2026-08-19","inscription":"1"},"source":"parser","act_number":393039,"company_flags":[],"source_pdf_url":"https://www.boe.es/borme/dias/2026/08/26/pdfs/BORME-A-2026-164-28.pdf"}]}}}},"422":{"description":"The request cannot be answered as sent; the message says what to fix","content":{"application/json":{"schema":{"oneOf":[{"$ref":"#/components/schemas/HTTPValidationError"},{"$ref":"#/components/schemas/ErrorMessage"}]},"examples":{"request_validation":{"summary":"request validation","value":{"detail":[{"type":"greater_than_equal","loc":["query","limit"],"msg":"Input should be greater than or equal to 1","input":"0","ctx":{"ge":1}}]}},"date_that_does_not_exist":{"summary":"date that does not exist","value":{"detail":"'2026-02-30' is not a date. Use YYYY-MM-DD, and a day that exists on the calendar."}},"cnae_filter_disabled":{"summary":"cnae filter disabled","value":{"detail":"cnae filter temporarily disabled: the sector codes in our data are being re-extracted and are not reliable enough to filter on. Filter by act_type, province, municipality or company_name_contains instead."}}}}}},"401":{"description":"Missing, invalid, disabled or expired API key","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorMessage"},"examples":{"no_key_unknown_key_or_revoked_key":{"summary":"no key, unknown key or revoked key","value":{"detail":"invalid or disabled API key"}},"trial_key_expired":{"summary":"trial key expired","value":{"detail":"this trial key has expired — get a fresh one at https://bormeapi.com"}}}}}},"429":{"description":"A daily limit is used up; quotas reset at 00:00 UTC","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorMessage"},"example":{"detail":"daily quota exceeded (50 requests/day on 'free' tier)"}}}},"503":{"description":"A temporary problem on our side; retry the same request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorMessage"},"examples":{"key_could_not_be_checked":{"summary":"key could not be checked","value":{"detail":"could not verify the API key right now — this is a temporary problem on our side, not with your key or your request; retry in a few seconds"}},"key_s_owner_changed_mid_request":{"summary":"key's owner changed mid-request","value":{"detail":"please retry in a moment"}}}}}}},"security":[{"ApiKeyHeader":[]}]}},"/v1/exports/subscriptions":{"post":{"summary":"Create CSV subscription","description":"Daily CSV digest by email: saved /v1/events filter, rendered every\nbusiness morning as an attached CSV. Body: {\"email\": ..., \"filters\":\n{province?, act_type?, municipality?, capital_min?, capital_max?,\ncompany_name_contains?}}.","operationId":"create_csv_subscription_v1_exports_subscriptions_post","parameters":[{"name":"x-api-key","in":"header","required":false,"schema":{"type":"string","description":"Your API key","title":"X-Api-Key"},"description":"Your API key"}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Payload"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"The request cannot be answered as sent; the message says what to fix","content":{"application/json":{"schema":{"oneOf":[{"$ref":"#/components/schemas/HTTPValidationError"},{"$ref":"#/components/schemas/ErrorMessage"}]},"examples":{"request_validation":{"summary":"request validation","value":{"detail":[{"type":"greater_than_equal","loc":["query","limit"],"msg":"Input should be greater than or equal to 1","input":"0","ctx":{"ge":1}}]}},"missing_email":{"summary":"missing email","value":{"detail":"valid email required"}},"cnae_filter_disabled":{"summary":"cnae filter disabled","value":{"detail":"cnae filter temporarily disabled: the sector codes in our data are being re-extracted and are not reliable enough to filter on. Filter by act_type, province, municipality or company_name_contains instead."}}}}}},"401":{"description":"Missing, invalid, disabled or expired API key","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorMessage"},"examples":{"no_key_unknown_key_or_revoked_key":{"summary":"no key, unknown key or revoked key","value":{"detail":"invalid or disabled API key"}},"trial_key_expired":{"summary":"trial key expired","value":{"detail":"this trial key has expired — get a fresh one at https://bormeapi.com"}},"key_revoked_while_the_request_ran":{"summary":"key revoked while the request ran","value":{"detail":"invalid API key"}}}}}},"403":{"description":"The key's plan does not cover this request; the message names the tier that does, or the limit that was reached","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorMessage"},"example":{"detail":"subscription limit reached (1 on 'free' tier)"}}}},"429":{"description":"A daily limit is used up; quotas reset at 00:00 UTC","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorMessage"},"example":{"detail":"daily quota exceeded (50 requests/day on 'free' tier)"}}}},"503":{"description":"A temporary problem on our side; retry the same request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorMessage"},"examples":{"key_could_not_be_checked":{"summary":"key could not be checked","value":{"detail":"could not verify the API key right now — this is a temporary problem on our side, not with your key or your request; retry in a few seconds"}},"key_s_owner_changed_mid_request":{"summary":"key's owner changed mid-request","value":{"detail":"please retry in a moment"}}}}}}},"security":[{"ApiKeyHeader":[]}]},"get":{"summary":"List CSV subscriptions","operationId":"list_csv_subscriptions_v1_exports_subscriptions_get","parameters":[{"name":"x-api-key","in":"header","required":false,"schema":{"type":"string","description":"Your API key","title":"X-Api-Key"},"description":"Your API key"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"401":{"description":"Missing, invalid, disabled or expired API key","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorMessage"},"examples":{"no_key_unknown_key_or_revoked_key":{"summary":"no key, unknown key or revoked key","value":{"detail":"invalid or disabled API key"}},"trial_key_expired":{"summary":"trial key expired","value":{"detail":"this trial key has expired — get a fresh one at https://bormeapi.com"}},"key_revoked_while_the_request_ran":{"summary":"key revoked while the request ran","value":{"detail":"invalid API key"}}}}}},"429":{"description":"A daily limit is used up; quotas reset at 00:00 UTC","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorMessage"},"example":{"detail":"daily quota exceeded (50 requests/day on 'free' tier)"}}}},"503":{"description":"A temporary problem on our side; retry the same request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorMessage"},"examples":{"key_could_not_be_checked":{"summary":"key could not be checked","value":{"detail":"could not verify the API key right now — this is a temporary problem on our side, not with your key or your request; retry in a few seconds"}},"key_s_owner_changed_mid_request":{"summary":"key's owner changed mid-request","value":{"detail":"please retry in a moment"}}}}}}},"security":[{"ApiKeyHeader":[]}]}},"/v1/exports/subscriptions/{sub_id}":{"delete":{"summary":"Delete CSV subscription","operationId":"delete_csv_subscription_v1_exports_subscriptions__sub_id__delete","parameters":[{"name":"sub_id","in":"path","required":true,"schema":{"type":"string","title":"Sub Id"}},{"name":"x-api-key","in":"header","required":false,"schema":{"type":"string","description":"Your API key","title":"X-Api-Key"},"description":"Your API key"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"401":{"description":"Missing, invalid, disabled or expired API key","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorMessage"},"examples":{"no_key_unknown_key_or_revoked_key":{"summary":"no key, unknown key or revoked key","value":{"detail":"invalid or disabled API key"}},"trial_key_expired":{"summary":"trial key expired","value":{"detail":"this trial key has expired — get a fresh one at https://bormeapi.com"}},"key_revoked_while_the_request_ran":{"summary":"key revoked while the request ran","value":{"detail":"invalid API key"}}}}}},"404":{"description":"Nothing on record for what was asked","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorMessage"},"example":{"detail":"subscription not found"}}}},"429":{"description":"A daily limit is used up; quotas reset at 00:00 UTC","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorMessage"},"example":{"detail":"daily quota exceeded (50 requests/day on 'free' tier)"}}}},"503":{"description":"A temporary problem on our side; retry the same request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorMessage"},"examples":{"key_could_not_be_checked":{"summary":"key could not be checked","value":{"detail":"could not verify the API key right now — this is a temporary problem on our side, not with your key or your request; retry in a few seconds"}},"key_s_owner_changed_mid_request":{"summary":"key's owner changed mid-request","value":{"detail":"please retry in a moment"}}}}}}},"security":[{"ApiKeyHeader":[]}]}},"/v1/exports/unsubscribe":{"get":{"summary":"Unsubscribe from a CSV digest","description":"One-click unsubscribe from email links — no key needed.","operationId":"unsubscribe_csv_v1_exports_unsubscribe_get","parameters":[{"name":"token","in":"query","required":true,"schema":{"type":"string","title":"Token"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/signals":{"get":{"summary":"List risk signals","description":"Analyst-grade derived signals (accordion recaps, mass exits, ownership\nchanges, distress combos, insolvency filings). Risk tier.","operationId":"signals_v1_signals_get","parameters":[{"name":"signal_type","in":"query","required":false,"schema":{"type":"string","description":"ACCORDION | MASS_EXIT | OWNERSHIP_CHANGE | DISTRESS_COMBO | INSOLVENCY_FILED | AEAT_DEBTOR (large-debtors list) | PHOENIX (directorship taken after prior companies died; covers 2009 onward, with the first two years under-reported because the 24-month lookback runs off the start of the archive) | PUBLIC_CONTRACT_AWARD (a public body awarded this company a contract) | ADDRESS_CLUSTER (mass domiciliation)","title":"Signal Type"},"description":"ACCORDION | MASS_EXIT | OWNERSHIP_CHANGE | DISTRESS_COMBO | INSOLVENCY_FILED | AEAT_DEBTOR (large-debtors list) | PHOENIX (directorship taken after prior companies died; covers 2009 onward, with the first two years under-reported because the 24-month lookback runs off the start of the archive) | PUBLIC_CONTRACT_AWARD (a public body awarded this company a contract) | ADDRESS_CLUSTER (mass domiciliation)"},{"name":"date_from","in":"query","required":false,"schema":{"type":"string","title":"Date From"}},{"name":"date_to","in":"query","required":false,"schema":{"type":"string","title":"Date To"}},{"name":"province","in":"query","required":false,"schema":{"type":"string","title":"Province"}},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":200,"minimum":1,"default":50,"title":"Limit"}},{"name":"offset","in":"query","required":false,"schema":{"type":"integer","maximum":10000,"minimum":0,"default":0,"title":"Offset"}},{"name":"x-api-key","in":"header","required":false,"schema":{"type":"string","description":"Your API key","title":"X-Api-Key"},"description":"Your API key"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{},"example":{"count":2,"signals":[{"event_id":"placsp:B71195887:2026-08","signal_type":"PUBLIC_CONTRACT_AWARD","date":"2026-08-27","company_slug":"iruna-medioambiente-sl","company_name":"IRUÑA MEDIOAMBIENTE SL.","province":"NAVARRA","details":{"nif":"B71195887","month":"2026-08","awards":1,"buyers":["Alcaldía"],"total_eur":87043.28,"largest_eur":87043.28,"largest_object":"Obras de renovación sostenible de infraestructuras viales y espacios públicos"}},{"event_id":"placsp:A29155421:2026-08","signal_type":"PUBLIC_CONTRACT_AWARD","date":"2026-08-26","company_slug":"guamar-sa","company_name":"GUAMAR SA.","province":"MÁLAGA","details":{"nif":"A29155421","month":"2026-08","awards":11,"buyers":["Agencia Pública Andaluza de Educación","Presidencia de la Diputación Provincial de Málaga"],"total_eur":67992386.94,"largest_eur":9586500,"largest_object":"078/ise/2024/sc acuerdo marco de obras"}}]}}}},"422":{"description":"The request cannot be answered as sent; the message says what to fix","content":{"application/json":{"schema":{"oneOf":[{"$ref":"#/components/schemas/HTTPValidationError"},{"$ref":"#/components/schemas/ErrorMessage"}]},"examples":{"request_validation":{"summary":"request validation","value":{"detail":[{"type":"greater_than_equal","loc":["query","limit"],"msg":"Input should be greater than or equal to 1","input":"0","ctx":{"ge":1}}]}},"unknown_signal_type":{"summary":"unknown signal type","value":{"detail":"'MERGER' is not a signal type. Valid: ACCORDION, ADDRESS_CLUSTER, AEAT_DEBTOR, DISTRESS_COMBO, INSOLVENCY_FILED, MASS_EXIT, OWNERSHIP_CHANGE, PHOENIX, PUBLIC_CONTRACT_AWARD"}},"date_that_does_not_exist":{"summary":"date that does not exist","value":{"detail":"'2026-02-30' is not a date. Use YYYY-MM-DD, and a day that exists on the calendar."}}}}}},"401":{"description":"Missing, invalid, disabled or expired API key","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorMessage"},"examples":{"no_key_unknown_key_or_revoked_key":{"summary":"no key, unknown key or revoked key","value":{"detail":"invalid or disabled API key"}},"trial_key_expired":{"summary":"trial key expired","value":{"detail":"this trial key has expired — get a fresh one at https://bormeapi.com"}}}}}},"403":{"description":"The key's plan does not cover this request; the message names the tier that does, or the limit that was reached","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorMessage"},"examples":{"risk_tier_needed_bormeapi_com_key":{"summary":"risk tier needed (bormeapi.com key)","value":{"detail":"signals need the Risk tier — https://bormeapi.com/account"}},"risk_tier_needed_rapidapi":{"summary":"risk tier needed (RapidAPI)","value":{"detail":"signals need the Risk tier — upgrade to the MEGA plan on RapidAPI"}}}}}},"429":{"description":"A daily limit is used up; quotas reset at 00:00 UTC","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorMessage"},"example":{"detail":"daily quota exceeded (50 requests/day on 'free' tier)"}}}},"503":{"description":"A temporary problem on our side; retry the same request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorMessage"},"examples":{"key_could_not_be_checked":{"summary":"key could not be checked","value":{"detail":"could not verify the API key right now — this is a temporary problem on our side, not with your key or your request; retry in a few seconds"}},"key_s_owner_changed_mid_request":{"summary":"key's owner changed mid-request","value":{"detail":"please retry in a moment"}}}}}}},"security":[{"ApiKeyHeader":[]}]}},"/v1/companies/by-nif/{nif}":{"get":{"summary":"Company by NIF","description":"Company snapshot looked up by NIF/CIF. BORME prints no tax IDs — our\nNIF mapping is cross-referenced from open official sources (GLEIF, BDNS,\nAEAT) and covers a subset of companies; a 404 here means \"not matched\",\nnot \"does not exist\". A malformed identifier gets 422, never 404, so the\ntwo are never confused — as does one whose control character fails the\nOrden EHA/451/2008 arithmetic, which comes back as\n`nif_check_character_failed` with the corrected identifier and, where we\nhold them, the companies one character away. `nif_caveat` is non-null on the ~0.15% of\nmappings whose tax-ID letter disagrees with the company's legal form,\nand says what explains it — a rename, a transformation, or a manual\ncheck. Basic tier and up.","operationId":"company_by_nif_v1_companies_by_nif__nif__get","parameters":[{"name":"nif","in":"path","required":true,"schema":{"type":"string","title":"Nif"}},{"name":"x-api-key","in":"header","required":false,"schema":{"type":"string","description":"Your API key","title":"X-Api-Key"},"description":"Your API key"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{},"example":{"company_slug":"mercadona-sa","company_name":"MERCADONA SA.","current_name":"MERCADONA SA.","name_changed_on":null,"status":"active","in_insolvency":false,"sole_shareholder":null,"officers":{"AUDITOR":["DELOITTE SL","ERNST & YOUNG SL"],"SECRETARY":["LANZADERA EMPRENDEDORES SL"],"CHAIRPERSON":["INMO ALAMEDA SL"],"BOARD_MEMBER":["ANGELS CAPITAL SL","FINOP SOCIEDAD LIMITADA"],"PROXY_HOLDER":["ARIZA RUIZ JOSE","ARMENTIA GARCIA LUIS"],"VICE_CHAIRPERSON":["HERRERO CHACON HORTENSIA MARIA"],"SOLE_PROXY_HOLDER":["AFONSO CABRERA FATIMA","ALBARAÑEZ MARTINEZ SILVIA"],"AUDIT_COMMITTEE_CHAIR":["GOMEZ GOMEZ RAFAEL"],"MANAGING_BOARD_MEMBER":["INMO ALAMEDA SL"],"AUDIT_COMMITTEE_MEMBER":["FORNS VALENCIANS FORVA SA","GOMEZ GOMEZ RAFAEL"],"AUDIT_COMMITTEE_SECRETARY":["LANZADERA EMPRENDEDORES SL"]},"capital_eur":null,"address":"C/ ALFONSO ROIG ALFONSO S/N","municipality":"ALBALAT DELS SORELLS","province":"VALENCIA/VALÈNCIA","cnae":null,"registral_hoja":"V 5581","first_seen":"2009-01-23","last_event":"2026-09-28","events_count":328,"as_of":"2026-10-06T19:01:17.222477+00:00","nif":"A46103834","nif_source":"bdns","nif_confidence":"exact","nif_caveat":null,"public_contracts":887,"size_hint":{"band":"large","basis":["public_contracts","registry_activity"],"note":"estimate from public proxies (capital, subsidies, contracts, activity); BORME has no employee/revenue data"},"derived_from_events":true,"sources":["bdns","borme","placsp"]}}}},"422":{"description":"The request cannot be answered as sent; the message says what to fix","content":{"application/json":{"schema":{"oneOf":[{"$ref":"#/components/schemas/ErrorMessage"},{"$ref":"#/components/schemas/ErrorObject"}]},"examples":{"not_a_nif_at_all":{"summary":"not a NIF at all","value":{"detail":"'GC-49576-8' is not a valid NIF/CIF: expected 9 characters (letter+7 digits+control, e.g. A46103834). This is a malformed identifier, not a gap in our coverage — a well-formed NIF we cannot map is reported as unmatched. That looks like a Registro Mercantil sheet number (hoja GC 49576), not a tax ID — try GET /v1/companies/by-hoja/GC-49576-8"}},"check_character_does_not_add_up":{"summary":"check character does not add up","value":{"detail":{"error":"nif_check_character_failed","nif":"A46103835","format_valid":true,"check_character_valid":false,"note":"The control character does not check out: the last character of a Spanish tax ID is computed from the eight before it (Orden EHA/451/2008), and for A4610383 it is 4, not 5. So this identifier cannot have been issued to anyone — it is a typo or a fabrication, not a gap in our coverage, and no source anywhere will hold it. How the check character is formed: https://www.boe.es/buscar/act.php?id=BOE-A-2008-3018","corrected_check_character":"A46103834","reference":{"rule":"https://www.boe.es/buscar/act.php?id=BOE-A-2008-3018","aeat":"https://sede.agenciatributaria.gob.es/Sede/censos-nif-domicilio-fiscal/solicitar-nif/nif-juridica.html"},"did_you_mean":[]}}}}}}},"401":{"description":"Missing, invalid, disabled or expired API key","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorMessage"},"examples":{"no_key_unknown_key_or_revoked_key":{"summary":"no key, unknown key or revoked key","value":{"detail":"invalid or disabled API key"}},"trial_key_expired":{"summary":"trial key expired","value":{"detail":"this trial key has expired — get a fresh one at https://bormeapi.com"}}}}}},"403":{"description":"The key's plan does not cover this request; the message names the tier that does, or the limit that was reached","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorMessage"},"examples":{"basic_tier_needed_bormeapi_com_key":{"summary":"basic tier needed (bormeapi.com key)","value":{"detail":"company snapshots need the basic tier — https://bormeapi.com/account"}},"basic_tier_needed_rapidapi":{"summary":"basic tier needed (RapidAPI)","value":{"detail":"company snapshots need the basic tier — upgrade to the PRO plan on RapidAPI"}}}}}},"404":{"description":"Nothing on record for what was asked","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorObject"},"example":{"detail":{"error":"nif_unmapped","nif":"B12345674","format_valid":true,"message":"We hold no company under this NIF. BORME prints no tax IDs, so the mapping is cross-referenced from separate open sources (GLEIF, BDNS, AEAT, PLACSP, BORME's own free text) and covers a minority of the companies we hold. This is very likely a gap in that mapping rather than a company missing from the registry, and it is not a statement that the NIF was never issued.","recorded":true,"next":{"by_name":"/v1/events?company_name_contains=...","by_sheet":"/v1/companies/by-hoja/{hoja}","note":"This identifier was recorded. Unmatched NIFs are re-checked against every source we load, and misses have closed within hours; the same request is worth repeating later."}}}}}},"409":{"description":"The request is ambiguous; the body lists the candidates","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorObject"},"example":{"detail":{"error":"B00000000 is mapped to 2 companies, so we cannot say which one it identifies. Our NIF mapping is cross-referenced from open sources, not printed by BORME, and these two sources disagree. Resolve it with the company name or the Registro Mercantil sheet.","candidates":[{"company_slug":"empresa-a-sl","company_name":"EMPRESA A SL","nif_source":"bdns","nif_confidence":"exact","nif_caveat":null},{"company_slug":"empresa-b-sl","company_name":"EMPRESA B SL","nif_source":"gleif","nif_confidence":"exact","nif_caveat":null}]}}}}},"429":{"description":"A daily limit is used up; quotas reset at 00:00 UTC","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorMessage"},"example":{"detail":"daily quota exceeded (50 requests/day on 'free' tier)"}}}},"503":{"description":"A temporary problem on our side; retry the same request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorMessage"},"examples":{"key_could_not_be_checked":{"summary":"key could not be checked","value":{"detail":"could not verify the API key right now — this is a temporary problem on our side, not with your key or your request; retry in a few seconds"}},"key_s_owner_changed_mid_request":{"summary":"key's owner changed mid-request","value":{"detail":"please retry in a moment"}}}}}}},"security":[{"ApiKeyHeader":[]}]}},"/v1/companies/by-hoja/{hoja}":{"get":{"summary":"Company by registry sheet","description":"Companies by Registro Mercantil sheet number (\"hoja registral\").\n\nAccepts the forms the registry and its consumers print: \"GC 49576\",\n\"GC-49576\", \"GC49576\", and a trailing folio/tomo element as in\n\"GC-49576-8\", which is ignored because we do not store it.\n\nReturns a LIST. A sheet number is not unique in our data — 123802\nwell-formed values are shared by more than one company, up to eight — so\nthis cannot pretend to be a single-company lookup the way by-nif can.\nBasic tier and up.","operationId":"company_by_hoja_v1_companies_by_hoja__hoja__get","parameters":[{"name":"hoja","in":"path","required":true,"schema":{"type":"string","title":"Hoja"}},{"name":"x-api-key","in":"header","required":false,"schema":{"type":"string","description":"Your API key","title":"X-Api-Key"},"description":"Your API key"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"The request cannot be answered as sent; the message says what to fix","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorMessage"},"example":{"detail":"'49576' is not a hoja registral: expected a registry code and a sheet number, e.g. 'GC 49576', 'M-198300' or 'B123456'."}}}},"401":{"description":"Missing, invalid, disabled or expired API key","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorMessage"},"examples":{"no_key_unknown_key_or_revoked_key":{"summary":"no key, unknown key or revoked key","value":{"detail":"invalid or disabled API key"}},"trial_key_expired":{"summary":"trial key expired","value":{"detail":"this trial key has expired — get a fresh one at https://bormeapi.com"}}}}}},"403":{"description":"The key's plan does not cover this request; the message names the tier that does, or the limit that was reached","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorMessage"},"examples":{"basic_tier_needed_bormeapi_com_key":{"summary":"basic tier needed (bormeapi.com key)","value":{"detail":"company lookups need the basic tier — https://bormeapi.com/account"}},"basic_tier_needed_rapidapi":{"summary":"basic tier needed (RapidAPI)","value":{"detail":"company lookups need the basic tier — upgrade to the PRO plan on RapidAPI"}}}}}},"404":{"description":"Nothing on record for what was asked","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorMessage"},"example":{"detail":"no company on hoja 'GC 495768' (parsed from 'GC495768'). Registry codes are the province abbreviations the Registro Mercantil uses, e.g. GC Las Palmas, M Madrid, B Barcelona."}}}},"429":{"description":"A daily limit is used up; quotas reset at 00:00 UTC","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorMessage"},"example":{"detail":"daily quota exceeded (50 requests/day on 'free' tier)"}}}},"503":{"description":"A temporary problem on our side; retry the same request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorMessage"},"examples":{"key_could_not_be_checked":{"summary":"key could not be checked","value":{"detail":"could not verify the API key right now — this is a temporary problem on our side, not with your key or your request; retry in a few seconds"}},"key_s_owner_changed_mid_request":{"summary":"key's owner changed mid-request","value":{"detail":"please retry in a moment"}}}}}}},"security":[{"ApiKeyHeader":[]}]}},"/v1/companies/by-nif":{"post":{"summary":"Companies by NIF (batch)","description":"Bulk NIF → snapshot lookup for onboarding a list at once. Body:\n{\"nifs\": [\"A46103834\", ...]} (max 100). Returns matched snapshots plus the\nNIFs we couldn't map, so a KYB flow makes one call instead of N. Entries\nthat are not tax IDs at all come back under \"invalid\", kept apart from\n\"unmatched\" so the caller can tell a data gap from a dirty input. Each\nsnapshot carries `nif_caveat`, non-null where the tax-ID letter\ndisagrees with the legal form in the name. Pro tier.","operationId":"company_by_nif_batch_v1_companies_by_nif_post","parameters":[{"name":"x-api-key","in":"header","required":false,"schema":{"type":"string","description":"Your API key","title":"X-Api-Key"},"description":"Your API key"}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Body"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"The request cannot be answered as sent; the message says what to fix","content":{"application/json":{"schema":{"oneOf":[{"$ref":"#/components/schemas/HTTPValidationError"},{"$ref":"#/components/schemas/ErrorMessage"}]},"examples":{"request_validation":{"summary":"request validation","value":{"detail":[{"type":"greater_than_equal","loc":["query","limit"],"msg":"Input should be greater than or equal to 1","input":"0","ctx":{"ge":1}}]}},"body_is_not_a_nif_list":{"summary":"body is not a NIF list","value":{"detail":"body must be {\"nifs\": [\"A46103834\", ...]}"}}}}}},"401":{"description":"Missing, invalid, disabled or expired API key","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorMessage"},"examples":{"no_key_unknown_key_or_revoked_key":{"summary":"no key, unknown key or revoked key","value":{"detail":"invalid or disabled API key"}},"trial_key_expired":{"summary":"trial key expired","value":{"detail":"this trial key has expired — get a fresh one at https://bormeapi.com"}}}}}},"403":{"description":"The key's plan does not cover this request; the message names the tier that does, or the limit that was reached","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorMessage"},"examples":{"pro_tier_needed_bormeapi_com_key":{"summary":"pro tier needed (bormeapi.com key)","value":{"detail":"batch lookup needs the pro tier — https://bormeapi.com/account"}},"pro_tier_needed_rapidapi":{"summary":"pro tier needed (RapidAPI)","value":{"detail":"batch lookup needs the pro tier — upgrade to the ULTRA plan on RapidAPI"}}}}}},"429":{"description":"A daily limit is used up; quotas reset at 00:00 UTC","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorMessage"},"example":{"detail":"daily quota exceeded (50 requests/day on 'free' tier)"}}}},"503":{"description":"A temporary problem on our side; retry the same request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorMessage"},"examples":{"key_could_not_be_checked":{"summary":"key could not be checked","value":{"detail":"could not verify the API key right now — this is a temporary problem on our side, not with your key or your request; retry in a few seconds"}},"key_s_owner_changed_mid_request":{"summary":"key's owner changed mid-request","value":{"detail":"please retry in a moment"}}}}}}},"security":[{"ApiKeyHeader":[]}]}},"/v1/companies/{slug}":{"get":{"summary":"Company snapshot","description":"Current derived state of a company: status, officers as of the latest\ngazette event, capital, address. With `as_of=YYYY-MM-DD`, returns the state\nthe registry knew on that date (point-in-time, pro tier) — built by folding\nthe event history up to that day. Basic tier and up.","operationId":"company_snapshot_v1_companies__slug__get","parameters":[{"name":"slug","in":"path","required":true,"schema":{"type":"string","title":"Slug"}},{"name":"as_of","in":"query","required":false,"schema":{"type":"string","description":"YYYY-MM-DD — state as of this date (point-in-time; pro tier)","title":"As Of"},"description":"YYYY-MM-DD — state as of this date (point-in-time; pro tier)"},{"name":"x-api-key","in":"header","required":false,"schema":{"type":"string","description":"Your API key","title":"X-Api-Key"},"description":"Your API key"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{},"example":{"company_slug":"mercadona-sa","company_name":"MERCADONA SA.","current_name":"MERCADONA SA.","name_changed_on":null,"status":"active","in_insolvency":false,"sole_shareholder":null,"officers":{"AUDITOR":["DELOITTE SL","ERNST & YOUNG SL"],"SECRETARY":["LANZADERA EMPRENDEDORES SL"],"CHAIRPERSON":["INMO ALAMEDA SL"],"BOARD_MEMBER":["ANGELS CAPITAL SL","FINOP SOCIEDAD LIMITADA"],"PROXY_HOLDER":["ARIZA RUIZ JOSE","ARMENTIA GARCIA LUIS"],"VICE_CHAIRPERSON":["HERRERO CHACON HORTENSIA MARIA"],"SOLE_PROXY_HOLDER":["AFONSO CABRERA FATIMA","ALBARAÑEZ MARTINEZ SILVIA"],"AUDIT_COMMITTEE_CHAIR":["GOMEZ GOMEZ RAFAEL"],"MANAGING_BOARD_MEMBER":["INMO ALAMEDA SL"],"AUDIT_COMMITTEE_MEMBER":["FORNS VALENCIANS FORVA SA","GOMEZ GOMEZ RAFAEL"],"AUDIT_COMMITTEE_SECRETARY":["LANZADERA EMPRENDEDORES SL"]},"capital_eur":null,"address":"C/ ALFONSO ROIG ALFONSO S/N","municipality":"ALBALAT DELS SORELLS","province":"VALENCIA/VALÈNCIA","cnae":null,"registral_hoja":"V 5581","first_seen":"2009-01-23","last_event":"2026-09-28","events_count":328,"as_of":"2026-10-06T19:01:17.222477+00:00","nif":"A46103834","nif_source":"bdns","nif_confidence":"exact","nif_caveat":null,"public_contracts":887,"size_hint":{"band":"large","basis":["public_contracts","registry_activity"],"note":"estimate from public proxies (capital, subsidies, contracts, activity); BORME has no employee/revenue data"},"derived_from_events":true,"sources":["bdns","borme","placsp"]}}}},"422":{"description":"The request cannot be answered as sent; the message says what to fix","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorMessage"},"example":{"detail":"as_of must be YYYY-MM-DD and a real calendar day (got '2026-02-30')"}}}},"401":{"description":"Missing, invalid, disabled or expired API key","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorMessage"},"examples":{"no_key_unknown_key_or_revoked_key":{"summary":"no key, unknown key or revoked key","value":{"detail":"invalid or disabled API key"}},"trial_key_expired":{"summary":"trial key expired","value":{"detail":"this trial key has expired — get a fresh one at https://bormeapi.com"}}}}}},"403":{"description":"The key's plan does not cover this request; the message names the tier that does, or the limit that was reached","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorMessage"},"examples":{"basic_tier_needed_bormeapi_com_key":{"summary":"basic tier needed (bormeapi.com key)","value":{"detail":"company snapshots need the basic tier — https://bormeapi.com/account"}},"basic_tier_needed_rapidapi":{"summary":"basic tier needed (RapidAPI)","value":{"detail":"company snapshots need the basic tier — upgrade to the PRO plan on RapidAPI"}},"pro_tier_needed_bormeapi_com_key":{"summary":"pro tier needed (bormeapi.com key)","value":{"detail":"point-in-time (as_of) needs the pro tier — https://bormeapi.com/account"}},"pro_tier_needed_rapidapi":{"summary":"pro tier needed (RapidAPI)","value":{"detail":"point-in-time (as_of) needs the pro tier — upgrade to the ULTRA plan on RapidAPI"}}}}}},"404":{"description":"Nothing on record for what was asked","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorMessage"},"examples":{"unknown_slug":{"summary":"unknown slug","value":{"detail":"no state for 'mercadona-sl' — company may predate coverage or slug is misspelled"}},"nothing_on_record_by_that_date":{"summary":"nothing on record by that date","value":{"detail":"no events for 'mercadona-sa' on or before 2008-12-31"}}}}}},"429":{"description":"A daily limit is used up; quotas reset at 00:00 UTC","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorMessage"},"example":{"detail":"daily quota exceeded (50 requests/day on 'free' tier)"}}}},"503":{"description":"A temporary problem on our side; retry the same request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorMessage"},"examples":{"key_could_not_be_checked":{"summary":"key could not be checked","value":{"detail":"could not verify the API key right now — this is a temporary problem on our side, not with your key or your request; retry in a few seconds"}},"key_s_owner_changed_mid_request":{"summary":"key's owner changed mid-request","value":{"detail":"please retry in a moment"}}}}}}},"security":[{"ApiKeyHeader":[]}]}},"/v1/people/{name}/roles":{"get":{"summary":"Person roles","description":"All companies/roles for a person, accent- and word-order-insensitive.\n\nBORME prints officers surname-first (\"ROIG HERRERO CAROLINA\"), so both that\nand \"CAROLINA ROIG HERRERO\" find the same person; until 2026-08-19 only the\nregistry order did, and the natural order returned an empty list that read\nas \"no data on this person\".\n\nBORME prints no personal IDs — same-name individuals are indistinguishable;\nresponses carry homonym_warning for short names. Basic tier and up.","operationId":"person_roles_v1_people__name__roles_get","parameters":[{"name":"name","in":"path","required":true,"schema":{"type":"string","title":"Name"}},{"name":"x-api-key","in":"header","required":false,"schema":{"type":"string","description":"Your API key","title":"X-Api-Key"},"description":"Your API key"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"The request cannot be answered as sent; the message says what to fix","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorMessage"},"example":{"detail":"name must not be empty"}}}},"401":{"description":"Missing, invalid, disabled or expired API key","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorMessage"},"examples":{"no_key_unknown_key_or_revoked_key":{"summary":"no key, unknown key or revoked key","value":{"detail":"invalid or disabled API key"}},"trial_key_expired":{"summary":"trial key expired","value":{"detail":"this trial key has expired — get a fresh one at https://bormeapi.com"}}}}}},"403":{"description":"The key's plan does not cover this request; the message names the tier that does, or the limit that was reached","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorMessage"},"examples":{"basic_tier_needed_bormeapi_com_key":{"summary":"basic tier needed (bormeapi.com key)","value":{"detail":"person lookups need the basic tier — https://bormeapi.com/account"}},"basic_tier_needed_rapidapi":{"summary":"basic tier needed (RapidAPI)","value":{"detail":"person lookups need the basic tier — upgrade to the PRO plan on RapidAPI"}}}}}},"429":{"description":"A daily limit is used up; quotas reset at 00:00 UTC","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorMessage"},"example":{"detail":"daily quota exceeded (50 requests/day on 'free' tier)"}}}},"503":{"description":"A temporary problem on our side; retry the same request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorMessage"},"examples":{"key_could_not_be_checked":{"summary":"key could not be checked","value":{"detail":"could not verify the API key right now — this is a temporary problem on our side, not with your key or your request; retry in a few seconds"}},"key_s_owner_changed_mid_request":{"summary":"key's owner changed mid-request","value":{"detail":"please retry in a moment"}}}}}}},"security":[{"ApiKeyHeader":[]}]}},"/v1/dumps/companies":{"get":{"summary":"Companies bulk dump","description":"Full companies snapshot as a gzipped CSV stream (3.3M rows, ~15 cols,\nNIF included where mapped). Heavy: limited to one download per key per\nday. Pro tier and up.","operationId":"dump_companies_v1_dumps_companies_get","parameters":[{"name":"x-api-key","in":"header","required":false,"schema":{"type":"string","description":"Your API key","title":"X-Api-Key"},"description":"Your API key"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"401":{"description":"Missing, invalid, disabled or expired API key","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorMessage"},"examples":{"no_key_unknown_key_or_revoked_key":{"summary":"no key, unknown key or revoked key","value":{"detail":"invalid or disabled API key"}},"trial_key_expired":{"summary":"trial key expired","value":{"detail":"this trial key has expired — get a fresh one at https://bormeapi.com"}},"key_revoked_while_the_request_ran":{"summary":"key revoked while the request ran","value":{"detail":"invalid API key"}}}}}},"403":{"description":"The key's plan does not cover this request; the message names the tier that does, or the limit that was reached","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorMessage"},"examples":{"pro_tier_needed_bormeapi_com_key":{"summary":"pro tier needed (bormeapi.com key)","value":{"detail":"bulk dumps need the pro tier — https://bormeapi.com/account"}},"pro_tier_needed_rapidapi":{"summary":"pro tier needed (RapidAPI)","value":{"detail":"bulk dumps need the pro tier — upgrade to the ULTRA plan on RapidAPI"}}}}}},"429":{"description":"A daily limit is used up; quotas reset at 00:00 UTC","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorMessage"},"examples":{"daily_quota_used_up":{"summary":"daily quota used up","value":{"detail":"daily quota exceeded (50 requests/day on 'free' tier)"}},"today_s_dump_already_taken":{"summary":"today's dump already taken","value":{"detail":"one dump per day per owner — try again tomorrow (the snapshot regenerates nightly)"}}}}}},"503":{"description":"A temporary problem on our side; retry the same request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorMessage"},"examples":{"key_could_not_be_checked":{"summary":"key could not be checked","value":{"detail":"could not verify the API key right now — this is a temporary problem on our side, not with your key or your request; retry in a few seconds"}},"key_s_owner_changed_mid_request":{"summary":"key's owner changed mid-request","value":{"detail":"please retry in a moment"}}}}}}},"security":[{"ApiKeyHeader":[]}]}},"/v1/companies/{slug}/risk":{"get":{"summary":"Company risk profile","description":"One-call risk profile: deterministic, rule-based score (0-100) built\nfrom gazette facts and cross-referenced open sources. Every point is\nitemized in factors[] — this is an explainable checklist, NOT a\nprobability-of-default model. Risk tier.","operationId":"company_risk_v1_companies__slug__risk_get","parameters":[{"name":"slug","in":"path","required":true,"schema":{"type":"string","title":"Slug"}},{"name":"x-api-key","in":"header","required":false,"schema":{"type":"string","description":"Your API key","title":"X-Api-Key"},"description":"Your API key"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"401":{"description":"Missing, invalid, disabled or expired API key","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorMessage"},"examples":{"no_key_unknown_key_or_revoked_key":{"summary":"no key, unknown key or revoked key","value":{"detail":"invalid or disabled API key"}},"trial_key_expired":{"summary":"trial key expired","value":{"detail":"this trial key has expired — get a fresh one at https://bormeapi.com"}}}}}},"403":{"description":"The key's plan does not cover this request; the message names the tier that does, or the limit that was reached","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorMessage"},"examples":{"risk_tier_needed_bormeapi_com_key":{"summary":"risk tier needed (bormeapi.com key)","value":{"detail":"risk profiles need the risk tier — https://bormeapi.com/account"}},"risk_tier_needed_rapidapi":{"summary":"risk tier needed (RapidAPI)","value":{"detail":"risk profiles need the risk tier — upgrade to the MEGA plan on RapidAPI"}}}}}},"404":{"description":"Nothing on record for what was asked","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorMessage"},"example":{"detail":"no state for 'mercadona-sl'"}}}},"429":{"description":"A daily limit is used up; quotas reset at 00:00 UTC","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorMessage"},"example":{"detail":"daily quota exceeded (50 requests/day on 'free' tier)"}}}},"503":{"description":"A temporary problem on our side; retry the same request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorMessage"},"examples":{"key_could_not_be_checked":{"summary":"key could not be checked","value":{"detail":"could not verify the API key right now — this is a temporary problem on our side, not with your key or your request; retry in a few seconds"}},"key_s_owner_changed_mid_request":{"summary":"key's owner changed mid-request","value":{"detail":"please retry in a moment"}}}}}}},"security":[{"ApiKeyHeader":[]}]}},"/v1/companies/{slug}/network":{"get":{"summary":"Company network","description":"Companies connected to this one through shared officers (directors,\nproxy holders, liquidators). BORME prints no personal IDs — links are by\nexact full name; entries carry homonym_warning for short names, so treat\nthose links as leads, not proof. Pro tier and up.","operationId":"company_network_v1_companies__slug__network_get","parameters":[{"name":"slug","in":"path","required":true,"schema":{"type":"string","title":"Slug"}},{"name":"active_only","in":"query","required":false,"schema":{"type":"boolean","default":false,"title":"Active Only"}},{"name":"include_auditors","in":"query","required":false,"schema":{"type":"boolean","default":false,"title":"Include Auditors"}},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":200,"minimum":1,"default":50,"title":"Limit"}},{"name":"x-api-key","in":"header","required":false,"schema":{"type":"string","description":"Your API key","title":"X-Api-Key"},"description":"Your API key"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"The request cannot be answered as sent; the message says what to fix","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"},"example":{"detail":[{"type":"greater_than_equal","loc":["query","limit"],"msg":"Input should be greater than or equal to 1","input":"0","ctx":{"ge":1}}]}}}},"401":{"description":"Missing, invalid, disabled or expired API key","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorMessage"},"examples":{"no_key_unknown_key_or_revoked_key":{"summary":"no key, unknown key or revoked key","value":{"detail":"invalid or disabled API key"}},"trial_key_expired":{"summary":"trial key expired","value":{"detail":"this trial key has expired — get a fresh one at https://bormeapi.com"}}}}}},"403":{"description":"The key's plan does not cover this request; the message names the tier that does, or the limit that was reached","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorMessage"},"examples":{"pro_tier_needed_bormeapi_com_key":{"summary":"pro tier needed (bormeapi.com key)","value":{"detail":"network graphs need the pro tier — https://bormeapi.com/account"}},"pro_tier_needed_rapidapi":{"summary":"pro tier needed (RapidAPI)","value":{"detail":"network graphs need the pro tier — upgrade to the ULTRA plan on RapidAPI"}}}}}},"404":{"description":"Nothing on record for what was asked","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorMessage"},"example":{"detail":"no state for 'mercadona-sl' — company may predate coverage or slug is misspelled"}}}},"429":{"description":"A daily limit is used up; quotas reset at 00:00 UTC","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorMessage"},"example":{"detail":"daily quota exceeded (50 requests/day on 'free' tier)"}}}},"503":{"description":"A temporary problem on our side; retry the same request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorMessage"},"examples":{"key_could_not_be_checked":{"summary":"key could not be checked","value":{"detail":"could not verify the API key right now — this is a temporary problem on our side, not with your key or your request; retry in a few seconds"}},"key_s_owner_changed_mid_request":{"summary":"key's owner changed mid-request","value":{"detail":"please retry in a moment"}}}}}}},"security":[{"ApiKeyHeader":[]}]}},"/v1/companies/{slug}/brands":{"get":{"summary":"Company brands","description":"Trading names and trademarks held by this company, from the patent office.\n\nBORME prints the registered name and nothing else, so a company known to\nits customers as GC TERMINAL TURÍSTICA cannot be reached from it at all.\nOEPM publishes that link and has since 1987. Commercial names and\ntrademarks are returned separately: the first identifies the business, the\nsecond identifies a product, and only the first is another way of naming\nthe company. Links are by name — OEPM publishes no tax IDs. Basic tier.","operationId":"company_brands_v1_companies__slug__brands_get","parameters":[{"name":"slug","in":"path","required":true,"schema":{"type":"string","title":"Slug"}},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":1000,"minimum":1,"default":200,"title":"Limit"}},{"name":"x-api-key","in":"header","required":false,"schema":{"type":"string","description":"Your API key","title":"X-Api-Key"},"description":"Your API key"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"The request cannot be answered as sent; the message says what to fix","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"},"example":{"detail":[{"type":"greater_than_equal","loc":["query","limit"],"msg":"Input should be greater than or equal to 1","input":"0","ctx":{"ge":1}}]}}}},"401":{"description":"Missing, invalid, disabled or expired API key","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorMessage"},"examples":{"no_key_unknown_key_or_revoked_key":{"summary":"no key, unknown key or revoked key","value":{"detail":"invalid or disabled API key"}},"trial_key_expired":{"summary":"trial key expired","value":{"detail":"this trial key has expired — get a fresh one at https://bormeapi.com"}}}}}},"403":{"description":"The key's plan does not cover this request; the message names the tier that does, or the limit that was reached","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorMessage"},"examples":{"basic_tier_needed_bormeapi_com_key":{"summary":"basic tier needed (bormeapi.com key)","value":{"detail":"brand data needs the basic tier — https://bormeapi.com/account"}},"basic_tier_needed_rapidapi":{"summary":"basic tier needed (RapidAPI)","value":{"detail":"brand data needs the basic tier — upgrade to the PRO plan on RapidAPI"}}}}}},"404":{"description":"Nothing on record for what was asked","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorMessage"},"example":{"detail":"no state for 'mercadona-sl' — company may predate coverage or slug is misspelled"}}}},"429":{"description":"A daily limit is used up; quotas reset at 00:00 UTC","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorMessage"},"example":{"detail":"daily quota exceeded (50 requests/day on 'free' tier)"}}}},"503":{"description":"A temporary problem on our side; retry the same request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorMessage"},"examples":{"key_could_not_be_checked":{"summary":"key could not be checked","value":{"detail":"could not verify the API key right now — this is a temporary problem on our side, not with your key or your request; retry in a few seconds"}},"key_s_owner_changed_mid_request":{"summary":"key's owner changed mid-request","value":{"detail":"please retry in a moment"}}}}}}},"security":[{"ApiKeyHeader":[]}]}},"/v1/brands":{"get":{"summary":"Search brands","description":"Which company trades under a name — the question BORME cannot answer.\n\nSearches commercial names and trademarks, case- and accent-insensitively,\nand returns the company each is held by. A product name can be held by a\ncompany with an unrelated legal name, which is the point: `type` says\nwhether the hit identifies the business or one of its products. Basic tier.","operationId":"brand_search_v1_brands_get","parameters":[{"name":"q","in":"query","required":true,"schema":{"type":"string","minLength":3,"description":"brand or trading name","title":"Q"},"description":"brand or trading name"},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":200,"minimum":1,"default":50,"title":"Limit"}},{"name":"x-api-key","in":"header","required":false,"schema":{"type":"string","description":"Your API key","title":"X-Api-Key"},"description":"Your API key"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"The request cannot be answered as sent; the message says what to fix","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"},"example":{"detail":[{"type":"greater_than_equal","loc":["query","limit"],"msg":"Input should be greater than or equal to 1","input":"0","ctx":{"ge":1}}]}}}},"401":{"description":"Missing, invalid, disabled or expired API key","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorMessage"},"examples":{"no_key_unknown_key_or_revoked_key":{"summary":"no key, unknown key or revoked key","value":{"detail":"invalid or disabled API key"}},"trial_key_expired":{"summary":"trial key expired","value":{"detail":"this trial key has expired — get a fresh one at https://bormeapi.com"}}}}}},"403":{"description":"The key's plan does not cover this request; the message names the tier that does, or the limit that was reached","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorMessage"},"examples":{"basic_tier_needed_bormeapi_com_key":{"summary":"basic tier needed (bormeapi.com key)","value":{"detail":"brand search needs the basic tier — https://bormeapi.com/account"}},"basic_tier_needed_rapidapi":{"summary":"basic tier needed (RapidAPI)","value":{"detail":"brand search needs the basic tier — upgrade to the PRO plan on RapidAPI"}}}}}},"429":{"description":"A daily limit is used up; quotas reset at 00:00 UTC","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorMessage"},"example":{"detail":"daily quota exceeded (50 requests/day on 'free' tier)"}}}},"503":{"description":"A temporary problem on our side; retry the same request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorMessage"},"examples":{"key_could_not_be_checked":{"summary":"key could not be checked","value":{"detail":"could not verify the API key right now — this is a temporary problem on our side, not with your key or your request; retry in a few seconds"}},"key_s_owner_changed_mid_request":{"summary":"key's owner changed mid-request","value":{"detail":"please retry in a moment"}}}}}}},"security":[{"ApiKeyHeader":[]}]}},"/v1/companies/{slug}/events":{"get":{"summary":"Company events","description":"Timeline of one company (slug from any event). `total` is how many\nevents the plan's window holds for it; page through them with\n`offset`, or pass `order=desc` for the newest first.\nLookback clamping applies per tier.","operationId":"company_events_v1_companies__slug__events_get","parameters":[{"name":"slug","in":"path","required":true,"schema":{"type":"string","title":"Slug"}},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":200,"minimum":1,"default":100,"title":"Limit"}},{"name":"offset","in":"query","required":false,"schema":{"type":"integer","maximum":10000,"minimum":0,"description":"skip this many events, in the chosen order; page with offset += limit until offset >= total","default":0,"title":"Offset"},"description":"skip this many events, in the chosen order; page with offset += limit until offset >= total"},{"name":"order","in":"query","required":false,"schema":{"type":"string","pattern":"^(asc|desc)$","description":"asc = oldest first (default), desc = newest first — use desc to get a large company's latest events in one call","default":"asc","title":"Order"},"description":"asc = oldest first (default), desc = newest first — use desc to get a large company's latest events in one call"},{"name":"x-api-key","in":"header","required":false,"schema":{"type":"string","description":"Your API key","title":"X-Api-Key"},"description":"Your API key"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{},"example":{"company_slug":"mercadona-sa","count":2,"total":325,"offset":0,"order":"asc","events":[{"event_id":"sha1:9ebcef6236ebce87e58f06bfa6743922b728fa1e","date":"2009-01-23","borme_id":"BORME-A-2009-15-46","province":"VALENCIA/VALÈNCIA","company_name":"MERCADONA SA.","company_slug":"mercadona-sa","acts":[{"roles":[{"role":"PROXY_HOLDER","names":["GARCIA CLAVIJO JESUS MANUEL"],"role_raw":"Apoderado"}],"fields":{},"act_type":"APPOINTMENTS","payload_raw":"Apoderado: GARCIA CLAVIJO JESUS MANUEL.","act_type_raw":"Nombramientos","unparsed_tail":""}],"registral":{"raw":"T 3073, L 389, F 221, S 8, H V 5581, I/A 171 (14.01.09).","hoja":"V 5581","tomo":3073,"folio":221,"libro":389,"seccion":8,"reg_date":"2009-01-14","inscription":"171"},"source":"parser","act_number":39996,"company_flags":[],"source_pdf_url":"https://www.boe.es/borme/dias/2009/01/23/pdfs/BORME-A-2009-15-46.pdf"},{"event_id":"sha1:17948b023529f4566717cee10fc241273da67bff","date":"2009-04-24","borme_id":"BORME-A-2009-77-46","province":"VALENCIA/VALÈNCIA","company_name":"MERCADONA SA.","company_slug":"mercadona-sa","acts":[{"roles":[{"role":"PROXY_HOLDER","names":["ARAGON SANCHEZ RAFAEL ANGEL"],"role_raw":"Apoderado"}],"fields":{},"act_type":"REVOCATIONS","payload_raw":"Apoderado: ARAGON SANCHEZ RAFAEL ANGEL.","act_type_raw":"Revocaciones","unparsed_tail":""}],"registral":{"raw":"T 3073, L 389, F 221, S 8, H V 5581, I/A 172 (15.04.09).","hoja":"V 5581","tomo":3073,"folio":221,"libro":389,"seccion":8,"reg_date":"2009-04-15","inscription":"172"},"source":"parser","act_number":193961,"company_flags":[],"source_pdf_url":"https://www.boe.es/borme/dias/2009/04/24/pdfs/BORME-A-2009-77-46.pdf"}]}}}},"422":{"description":"The request cannot be answered as sent; the message says what to fix","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"},"example":{"detail":[{"type":"greater_than_equal","loc":["query","limit"],"msg":"Input should be greater than or equal to 1","input":"0","ctx":{"ge":1}}]}}}},"401":{"description":"Missing, invalid, disabled or expired API key","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorMessage"},"examples":{"no_key_unknown_key_or_revoked_key":{"summary":"no key, unknown key or revoked key","value":{"detail":"invalid or disabled API key"}},"trial_key_expired":{"summary":"trial key expired","value":{"detail":"this trial key has expired — get a fresh one at https://bormeapi.com"}}}}}},"403":{"description":"The key's plan does not cover this request; the message names the tier that does, or the limit that was reached","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorMessage"},"example":{"detail":"'mercadona-sa' has 324 events on record, from 2009-01-23 to 2026-08-12, but your free plan covers only the last 7 days and none of them fall inside that window. This is a plan limit, not a gap in our data — the pro tier returns full history back to 2009. https://bormeapi.com/account"}}}},"404":{"description":"Nothing on record for what was asked","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorMessage"},"example":{"detail":"no events on record for company 'mercadona-sl' — the slug may be misspelled, or the company predates our 2009 coverage"}}}},"429":{"description":"A daily limit is used up; quotas reset at 00:00 UTC","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorMessage"},"example":{"detail":"daily quota exceeded (50 requests/day on 'free' tier)"}}}},"503":{"description":"A temporary problem on our side; retry the same request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorMessage"},"examples":{"key_could_not_be_checked":{"summary":"key could not be checked","value":{"detail":"could not verify the API key right now — this is a temporary problem on our side, not with your key or your request; retry in a few seconds"}},"key_s_owner_changed_mid_request":{"summary":"key's owner changed mid-request","value":{"detail":"please retry in a moment"}}}}}}},"security":[{"ApiKeyHeader":[]}]}},"/v1/stats/daily":{"get":{"summary":"Daily statistics","description":"Events per publication day with parse completeness (pipeline health).","operationId":"stats_daily_v1_stats_daily_get","parameters":[{"name":"date_from","in":"query","required":false,"schema":{"type":"string","title":"Date From"}},{"name":"date_to","in":"query","required":false,"schema":{"type":"string","title":"Date To"}},{"name":"x-api-key","in":"header","required":false,"schema":{"type":"string","description":"Your API key","title":"X-Api-Key"},"description":"Your API key"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"The request cannot be answered as sent; the message says what to fix","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorMessage"},"example":{"detail":"'2026-02-30' is not a date. Use YYYY-MM-DD, and a day that exists on the calendar."}}}},"401":{"description":"Missing, invalid, disabled or expired API key","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorMessage"},"examples":{"no_key_unknown_key_or_revoked_key":{"summary":"no key, unknown key or revoked key","value":{"detail":"invalid or disabled API key"}},"trial_key_expired":{"summary":"trial key expired","value":{"detail":"this trial key has expired — get a fresh one at https://bormeapi.com"}}}}}},"429":{"description":"A daily limit is used up; quotas reset at 00:00 UTC","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorMessage"},"example":{"detail":"daily quota exceeded (50 requests/day on 'free' tier)"}}}},"503":{"description":"A temporary problem on our side; retry the same request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorMessage"},"examples":{"key_could_not_be_checked":{"summary":"key could not be checked","value":{"detail":"could not verify the API key right now — this is a temporary problem on our side, not with your key or your request; retry in a few seconds"}},"key_s_owner_changed_mid_request":{"summary":"key's owner changed mid-request","value":{"detail":"please retry in a moment"}}}}}}},"security":[{"ApiKeyHeader":[]}]}},"/v1/provinces":{"get":{"summary":"List provinces","description":"The 52 province values BORME prints, exactly as stored.\n\nBilingual provinces are published with both names (\"VALENCIA/VALÈNCIA\");\nthe province filter accepts either half, with or without accents.","operationId":"provinces_v1_provinces_get","parameters":[{"name":"x-api-key","in":"header","required":false,"schema":{"type":"string","description":"Your API key","title":"X-Api-Key"},"description":"Your API key"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"401":{"description":"Missing, invalid, disabled or expired API key","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorMessage"},"examples":{"no_key_unknown_key_or_revoked_key":{"summary":"no key, unknown key or revoked key","value":{"detail":"invalid or disabled API key"}},"trial_key_expired":{"summary":"trial key expired","value":{"detail":"this trial key has expired — get a fresh one at https://bormeapi.com"}}}}}},"429":{"description":"A daily limit is used up; quotas reset at 00:00 UTC","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorMessage"},"example":{"detail":"daily quota exceeded (50 requests/day on 'free' tier)"}}}},"503":{"description":"A temporary problem on our side; retry the same request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorMessage"},"examples":{"key_could_not_be_checked":{"summary":"key could not be checked","value":{"detail":"could not verify the API key right now — this is a temporary problem on our side, not with your key or your request; retry in a few seconds"}},"key_s_owner_changed_mid_request":{"summary":"key's owner changed mid-request","value":{"detail":"please retry in a moment"}}}}}}},"security":[{"ApiKeyHeader":[]}]}},"/v1/watchlists":{"post":{"summary":"Create watchlist","description":"Create a watchlist. Body: {company_slug? | name_contains?, act_types?,\nwebhook_url (https)}. New matches are POSTed after each daily ingest with\nan X-Borme-Signature HMAC header; the response returns your signing secret\nONCE.","operationId":"create_watchlist_v1_watchlists_post","parameters":[{"name":"x-api-key","in":"header","required":false,"schema":{"type":"string","description":"Your API key","title":"X-Api-Key"},"description":"Your API key"}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Body"}}}},"responses":{"201":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"The request cannot be answered as sent; the message says what to fix","content":{"application/json":{"schema":{"oneOf":[{"$ref":"#/components/schemas/HTTPValidationError"},{"$ref":"#/components/schemas/ErrorMessage"}]},"examples":{"request_validation":{"summary":"request validation","value":{"detail":[{"type":"greater_than_equal","loc":["query","limit"],"msg":"Input should be greater than or equal to 1","input":"0","ctx":{"ge":1}}]}},"nothing_to_watch":{"summary":"nothing to watch","value":{"detail":"company_slug or name_contains is required"}}}}}},"401":{"description":"Missing, invalid, disabled or expired API key","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorMessage"},"examples":{"no_key_unknown_key_or_revoked_key":{"summary":"no key, unknown key or revoked key","value":{"detail":"invalid or disabled API key"}},"trial_key_expired":{"summary":"trial key expired","value":{"detail":"this trial key has expired — get a fresh one at https://bormeapi.com"}},"key_revoked_while_the_request_ran":{"summary":"key revoked while the request ran","value":{"detail":"invalid API key"}}}}}},"403":{"description":"The key's plan does not cover this request; the message names the tier that does, or the limit that was reached","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorMessage"},"example":{"detail":"watchlist limit reached (2 on 'free' tier)"}}}},"429":{"description":"A daily limit is used up; quotas reset at 00:00 UTC","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorMessage"},"example":{"detail":"daily quota exceeded (50 requests/day on 'free' tier)"}}}},"503":{"description":"A temporary problem on our side; retry the same request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorMessage"},"examples":{"key_could_not_be_checked":{"summary":"key could not be checked","value":{"detail":"could not verify the API key right now — this is a temporary problem on our side, not with your key or your request; retry in a few seconds"}},"key_s_owner_changed_mid_request":{"summary":"key's owner changed mid-request","value":{"detail":"please retry in a moment"}}}}}}},"security":[{"ApiKeyHeader":[]}]},"get":{"summary":"List watchlists","operationId":"list_watchlists_v1_watchlists_get","parameters":[{"name":"x-api-key","in":"header","required":false,"schema":{"type":"string","description":"Your API key","title":"X-Api-Key"},"description":"Your API key"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"401":{"description":"Missing, invalid, disabled or expired API key","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorMessage"},"examples":{"no_key_unknown_key_or_revoked_key":{"summary":"no key, unknown key or revoked key","value":{"detail":"invalid or disabled API key"}},"trial_key_expired":{"summary":"trial key expired","value":{"detail":"this trial key has expired — get a fresh one at https://bormeapi.com"}},"key_revoked_while_the_request_ran":{"summary":"key revoked while the request ran","value":{"detail":"invalid API key"}}}}}},"429":{"description":"A daily limit is used up; quotas reset at 00:00 UTC","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorMessage"},"example":{"detail":"daily quota exceeded (50 requests/day on 'free' tier)"}}}},"503":{"description":"A temporary problem on our side; retry the same request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorMessage"},"examples":{"key_could_not_be_checked":{"summary":"key could not be checked","value":{"detail":"could not verify the API key right now — this is a temporary problem on our side, not with your key or your request; retry in a few seconds"}},"key_s_owner_changed_mid_request":{"summary":"key's owner changed mid-request","value":{"detail":"please retry in a moment"}}}}}}},"security":[{"ApiKeyHeader":[]}]}},"/v1/watchlists/{wl_id}":{"delete":{"summary":"Delete watchlist","operationId":"delete_watchlist_v1_watchlists__wl_id__delete","parameters":[{"name":"wl_id","in":"path","required":true,"schema":{"type":"integer","title":"Wl Id"}},{"name":"x-api-key","in":"header","required":false,"schema":{"type":"string","description":"Your API key","title":"X-Api-Key"},"description":"Your API key"}],"responses":{"204":{"description":"Successful Response"},"422":{"description":"The request cannot be answered as sent; the message says what to fix","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"},"example":{"detail":[{"type":"greater_than_equal","loc":["query","limit"],"msg":"Input should be greater than or equal to 1","input":"0","ctx":{"ge":1}}]}}}},"401":{"description":"Missing, invalid, disabled or expired API key","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorMessage"},"examples":{"no_key_unknown_key_or_revoked_key":{"summary":"no key, unknown key or revoked key","value":{"detail":"invalid or disabled API key"}},"trial_key_expired":{"summary":"trial key expired","value":{"detail":"this trial key has expired — get a fresh one at https://bormeapi.com"}},"key_revoked_while_the_request_ran":{"summary":"key revoked while the request ran","value":{"detail":"invalid API key"}}}}}},"404":{"description":"Nothing on record for what was asked","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorMessage"},"example":{"detail":"no such watchlist on this key"}}}},"429":{"description":"A daily limit is used up; quotas reset at 00:00 UTC","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorMessage"},"example":{"detail":"daily quota exceeded (50 requests/day on 'free' tier)"}}}},"503":{"description":"A temporary problem on our side; retry the same request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorMessage"},"examples":{"key_could_not_be_checked":{"summary":"key could not be checked","value":{"detail":"could not verify the API key right now — this is a temporary problem on our side, not with your key or your request; retry in a few seconds"}},"key_s_owner_changed_mid_request":{"summary":"key's owner changed mid-request","value":{"detail":"please retry in a moment"}}}}}}},"security":[{"ApiKeyHeader":[]}]}},"/v1/act-types":{"get":{"summary":"List act types","description":"All normalized event types (no key required).","operationId":"act_types_v1_act_types_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{},"example":{"act_types":[{"act_type":"ACCOUNTS_NON_APPROVAL_JUSTIFICATION","spanish":"Articulo 378.5 del Reglamento del Registro Mercantil"},{"act_type":"ADDRESS_CHANGE","spanish":"Cambio de domicilio social"}]}}}}}}},"/v1/sources":{"get":{"summary":"Data sources","description":"Who published the data behind this API, and how they must be cited.\n\nNo key required: a citation that only paying callers can read is not a\ncitation. The `sources` array on a company payload holds slugs from here,\nso a reuser can resolve exactly the publishers that company owes.\n\n`terms_confirmed: false` means we have named the publisher but have not\nread their reuse terms yet — cite the publisher and check with them before\nredistributing that field further.","operationId":"data_sources_v1_sources_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{},"example":{"count":32,"sources":[{"source":"borme","name":"Boletín Oficial del Registro Mercantil","publisher":"Agencia Estatal Boletín Oficial del Estado","url":"https://www.boe.es/datosabiertos/","licence":"Ley 18/2015 / RD 1495/2011","cite_as":"Origen de los datos: Agencia Estatal Boletín Oficial del Estado","cite_update_date":false,"terms_basis":"publisher","terms_confirmed":true},{"source":"placsp","name":"Plataforma de Contratación del Sector Público","publisher":"Ministerio de Hacienda","url":"https://datos.gob.es/es/catalogo/e05250001-licitaciones-publicadas-en-los-perfiles-del-contratante-ubicados-en-la-plataforma-de-contratacion-del-sector-publico-excluyendo-los-contratos-menores","licence":"Ley 37/2007 / RD 1495/2011, condiciones generales del Ministerio de Hacienda (reutilización comercial permitida)","cite_as":"Origen de los datos: Ministerio de Hacienda","cite_update_date":true,"terms_basis":"publisher","terms_confirmed":true,"data_as_of":"2026-09-01"},{"source":"cnmv","name":"Registros oficiales de entidades","publisher":"Comisión Nacional del Mercado de Valores","url":"https://www.cnmv.es/portal/Utilidades/NotaLegal.aspx","licence":"Nota legal CNMV (reuse authorised, conditions apply)","cite_as":"Origen de los datos: Comisión Nacional del Mercado de Valores","cite_update_date":false,"free_at":"https://www.cnmv.es","free_notice":"This information can be obtained free of charge from Comisión Nacional del Mercado de Valores at https://www.cnmv.es.","terms_basis":"publisher","terms_confirmed":true}],"unconfirmed":["aeat","bde","bdns","cdti","cnmc","dgsfp","oepm","regcon","rii"]}}}}}}},"/v1/health":{"get":{"summary":"Health check","operationId":"health_v1_health_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}}},"components":{"schemas":{"HTTPValidationError":{"properties":{"detail":{"items":{"$ref":"#/components/schemas/ValidationError"},"type":"array","title":"Detail"}},"type":"object","title":"HTTPValidationError"},"ValidationError":{"properties":{"loc":{"items":{"anyOf":[{"type":"string"},{"type":"integer"}]},"type":"array","title":"Location"},"msg":{"type":"string","title":"Message"},"type":{"type":"string","title":"Error Type"},"input":{"title":"Input"},"ctx":{"type":"object","title":"Context"}},"type":"object","required":["loc","msg","type"],"title":"ValidationError"},"ErrorMessage":{"type":"object","properties":{"detail":{"type":"string"}},"required":["detail"],"description":"An error explained in one English sentence."},"ErrorObject":{"type":"object","properties":{"detail":{"type":"object","properties":{"error":{"type":"string"}},"required":["error"],"additionalProperties":true}},"required":["detail"],"description":"A structured error: detail.error names the reason, the other fields say what to do next."}},"securitySchemes":{"ApiKeyHeader":{"type":"apiKey","in":"header","name":"X-API-Key","description":"Your API key. Get one at https://bormeapi.com/account"}}}}