API de consulta de alícuotas
Consultá las alícuotas de percepción y retención de Ingresos Brutos de un CUIT en todas las jurisdicciones disponibles. El endpoint es público y no requiere autenticación.
Consultar alícuotas por CUIT
GET
http://padron.service.blueorange.com.ar/padron/cuit/{cuit}
Parámetros de ruta
| Parámetro | Tipo | Descripción |
|---|---|---|
cuit |
string | CUIT a consultar. Se aceptan guiones y espacios; el servicio extrae los dígitos y valida que sean exactamente 11. |
Parámetros de query (opcionales)
| Parámetro | Tipo | Descripción |
|---|---|---|
state | string | Filtra por código de jurisdicción (ver tabla más abajo). |
regime | string | Filtra por código de régimen (P o R). |
Ejemplo de request
curl http://padron.service.blueorange.com.ar/padron/cuit/30-12345678-9
curl "http://padron.service.blueorange.com.ar/padron/cuit/30123456789?state=B®ime=P"
Caché: la respuesta incluye un header ETag. Si reenviás
ese valor en If-None-Match y los datos no cambiaron, el servicio
responde 304 Not Modified sin cuerpo.
Rate limit: este endpoint está limitado por IP (la descarga del
padrón completo no tiene límite). Al excederlo responde 429 Too Many Requests.
Ejemplo de respuesta (200 OK)
{
"cuit": "30123456789",
"results": [
{
"state": "B",
"cuit": "30123456789",
"date_from": "2025-01-01",
"date_to": "2025-12-31",
"regime": "P",
"aliquot": 1.5,
"state_name": "Buenos Aires",
"regime_name": "Percepción",
"last_update": "2026-06-16T21:00:00"
},
{
"state": "B",
"cuit": "30123456789",
"date_from": "2025-01-01",
"date_to": "2025-12-31",
"regime": "R",
"aliquot": 2.0,
"state_name": "Buenos Aires",
"regime_name": "Retención"
}
]
}
Si el CUIT no tiene alícuotas cargadas, results es una lista vacía.
Campos de cada resultado
| Campo | Tipo | Descripción |
|---|---|---|
state | string | Código de jurisdicción (1 caracter). |
state_name | string | Nombre legible de la jurisdicción. |
cuit | string | CUIT normalizado (11 dígitos). |
regime | string | Código de régimen (1 caracter). |
regime_name | string | Nombre legible del régimen. |
aliquot | number | Alícuota expresada en porcentaje. |
date_from | string | null | Inicio de vigencia (YYYY-MM-DD). |
date_to | string | null | Fin de vigencia (YYYY-MM-DD). |
last_update | string | null | Fecha/hora de la última carga del padrón de esa jurisdicción. |
Códigos de jurisdicción
| Código | Jurisdicción |
|---|---|
C | CABA |
B | Buenos Aires |
T | Tucumán |
E | Entre Ríos |
S | Santa Fe |
A | Salta |
X | Córdoba |
Códigos de régimen
| Código | Régimen |
|---|---|
P | Percepción |
R | Retención |
Errores
| Código HTTP | Motivo |
|---|---|
400 Bad Request |
El CUIT no tiene 11 dígitos numéricos, o el filtro state/regime es inválido. |
429 Too Many Requests |
Se excedió el límite de consultas por IP. |
Consultar alícuotas de varios CUITs (batch)
POST
http://padron.service.blueorange.com.ar/padron/cuits
Devuelve las alícuotas de varios CUITs en una sola llamada (hasta 500 por request). Pensado para integraciones que resuelven muchos CUITs de una (ej. Odoo al validar comprobantes).
Body (JSON)
{
"cuits": ["30-12345678-9", "27999888777"],
"state": "B", // opcional
"regime": "P" // opcional
}
Ejemplo de request
curl -X POST http://padron.service.blueorange.com.ar/padron/cuits \
-H "Content-Type: application/json" \
-d '{"cuits": ["30123456789", "27999888777"]}'
Ejemplo de respuesta (200 OK)
{
"results": {
"30123456789": [ { "state": "B", "regime": "P", "aliquot": 1.5, ... } ],
"27999888777": [ ]
},
"invalid": ["123"]
}
results tiene una entrada por cada CUIT pedido (lista vacía si no
tiene alícuotas). Los CUITs con formato inválido se devuelven en
invalid. Mismo rate limit por IP que la consulta individual.
También podés explorar la especificación interactiva (OpenAPI / Swagger) en
http://padron.service.blueorange.com.ar/docs.