curl --request GET \
--url https://api.emissa.com.ar/v1/arca/padron/{cuit} \
--header 'X-API-Key: <api-key>'import requests
url = "https://api.emissa.com.ar/v1/arca/padron/{cuit}"
headers = {"X-API-Key": "<api-key>"}
response = requests.get(url, headers=headers)
print(response.text)const options = {method: 'GET', headers: {'X-API-Key': '<api-key>'}};
fetch('https://api.emissa.com.ar/v1/arca/padron/{cuit}', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://api.emissa.com.ar/v1/arca/padron/{cuit}",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "GET",
CURLOPT_HTTPHEADER => [
"X-API-Key: <api-key>"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"net/http"
"io"
)
func main() {
url := "https://api.emissa.com.ar/v1/arca/padron/{cuit}"
req, _ := http.NewRequest("GET", url, nil)
req.Header.Add("X-API-Key", "<api-key>")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.get("https://api.emissa.com.ar/v1/arca/padron/{cuit}")
.header("X-API-Key", "<api-key>")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.emissa.com.ar/v1/arca/padron/{cuit}")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Get.new(url)
request["X-API-Key"] = '<api-key>'
response = http.request(request)
puts response.read_body{
"cuit": "30000000007",
"legalName": "ESTUDIO CONTABLE SRL",
"vatStatus": "Responsable Inscripto",
"inscripcionActiva": true,
"condicionIvaId": 1,
"estadoClave": "ACTIVO",
"padronStatus": "VALIDATED",
"padronMessage": null,
"consultadoEn": "2026-08-22T07:51:16.940Z"
}{
"statusCode": 401,
"errorCode": "UNAUTHORIZED",
"message": "No autorizado",
"timestamp": "2026-07-26T18:30:00.000Z",
"path": "/v1/invoices/authorize",
"details": "<string>",
"retryable": false,
"retryAfterSeconds": 43200,
"requestId": "0f2c1a5e-1d9b-4c7a-9a55-7f1a2b3c4d5e"
}{
"statusCode": 401,
"errorCode": "UNAUTHORIZED",
"message": "No autorizado",
"timestamp": "2026-07-26T18:30:00.000Z",
"path": "/v1/invoices/authorize",
"details": "<string>",
"retryable": false,
"retryAfterSeconds": 43200,
"requestId": "0f2c1a5e-1d9b-4c7a-9a55-7f1a2b3c4d5e"
}{
"statusCode": 401,
"errorCode": "UNAUTHORIZED",
"message": "No autorizado",
"timestamp": "2026-07-26T18:30:00.000Z",
"path": "/v1/invoices/authorize",
"details": "<string>",
"retryable": false,
"retryAfterSeconds": 43200,
"requestId": "0f2c1a5e-1d9b-4c7a-9a55-7f1a2b3c4d5e"
}{
"statusCode": 401,
"errorCode": "UNAUTHORIZED",
"message": "No autorizado",
"timestamp": "2026-07-26T18:30:00.000Z",
"path": "/v1/invoices/authorize",
"details": "<string>",
"retryable": false,
"retryAfterSeconds": 43200,
"requestId": "0f2c1a5e-1d9b-4c7a-9a55-7f1a2b3c4d5e"
}{
"statusCode": 401,
"errorCode": "UNAUTHORIZED",
"message": "No autorizado",
"timestamp": "2026-07-26T18:30:00.000Z",
"path": "/v1/invoices/authorize",
"details": "<string>",
"retryable": false,
"retryAfterSeconds": 43200,
"requestId": "0f2c1a5e-1d9b-4c7a-9a55-7f1a2b3c4d5e"
}Consultar el padrón de ARCA por CUIT
Devuelve la razón social y la condición frente al IVA que ARCA tiene registradas, sin guardar nada y sin necesidad de que ese CUIT sea contribuyente de Emissa. Es una lectura.
Está pensada para la pantalla de alta: se pide el CUIT, se muestra lo que contesta ARCA, y los mismos valores se mandan a POST /v1/taxpayers como legalName y vatStatus. Los campos se llaman igual que allá justamente para eso.
No hace falta usarla para dar de alta. POST /v1/taxpayers ya completa los dos campos desde el padrón cuando no se mandan. Esta operación sirve para mostrarlos antes de crear, que es lo que permite frenar un CUIT mal tipeado que pase la validación de módulo 11.
Nunca falla por culpa del padrón: si ARCA no contesta, la respuesta es 200 con padronStatus distinto de VALIDATED y los datos en null. Quien integra cae a que el dato se tipee, como hoy.
El ambiente sale del modo de la key —emi_live_ consulta el padrón de producción y emi_test_ el de homologación— y se puede forzar con ?environment=. En homologación ARCA puede no resolver un CUIT real (padronStatus: NOT_FOUND), y eso es esperable: no es un error del pedido.
Scope de API key: taxpayer:read. Una key sin ese scope recibe 403 API_KEY_INSUFFICIENT_SCOPE, aunque el rol de quien la creó lo permita: el permiso efectivo es la intersección de los dos.
curl --request GET \
--url https://api.emissa.com.ar/v1/arca/padron/{cuit} \
--header 'X-API-Key: <api-key>'import requests
url = "https://api.emissa.com.ar/v1/arca/padron/{cuit}"
headers = {"X-API-Key": "<api-key>"}
response = requests.get(url, headers=headers)
print(response.text)const options = {method: 'GET', headers: {'X-API-Key': '<api-key>'}};
fetch('https://api.emissa.com.ar/v1/arca/padron/{cuit}', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://api.emissa.com.ar/v1/arca/padron/{cuit}",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "GET",
CURLOPT_HTTPHEADER => [
"X-API-Key: <api-key>"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"net/http"
"io"
)
func main() {
url := "https://api.emissa.com.ar/v1/arca/padron/{cuit}"
req, _ := http.NewRequest("GET", url, nil)
req.Header.Add("X-API-Key", "<api-key>")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.get("https://api.emissa.com.ar/v1/arca/padron/{cuit}")
.header("X-API-Key", "<api-key>")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.emissa.com.ar/v1/arca/padron/{cuit}")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Get.new(url)
request["X-API-Key"] = '<api-key>'
response = http.request(request)
puts response.read_body{
"cuit": "30000000007",
"legalName": "ESTUDIO CONTABLE SRL",
"vatStatus": "Responsable Inscripto",
"inscripcionActiva": true,
"condicionIvaId": 1,
"estadoClave": "ACTIVO",
"padronStatus": "VALIDATED",
"padronMessage": null,
"consultadoEn": "2026-08-22T07:51:16.940Z"
}{
"statusCode": 401,
"errorCode": "UNAUTHORIZED",
"message": "No autorizado",
"timestamp": "2026-07-26T18:30:00.000Z",
"path": "/v1/invoices/authorize",
"details": "<string>",
"retryable": false,
"retryAfterSeconds": 43200,
"requestId": "0f2c1a5e-1d9b-4c7a-9a55-7f1a2b3c4d5e"
}{
"statusCode": 401,
"errorCode": "UNAUTHORIZED",
"message": "No autorizado",
"timestamp": "2026-07-26T18:30:00.000Z",
"path": "/v1/invoices/authorize",
"details": "<string>",
"retryable": false,
"retryAfterSeconds": 43200,
"requestId": "0f2c1a5e-1d9b-4c7a-9a55-7f1a2b3c4d5e"
}{
"statusCode": 401,
"errorCode": "UNAUTHORIZED",
"message": "No autorizado",
"timestamp": "2026-07-26T18:30:00.000Z",
"path": "/v1/invoices/authorize",
"details": "<string>",
"retryable": false,
"retryAfterSeconds": 43200,
"requestId": "0f2c1a5e-1d9b-4c7a-9a55-7f1a2b3c4d5e"
}{
"statusCode": 401,
"errorCode": "UNAUTHORIZED",
"message": "No autorizado",
"timestamp": "2026-07-26T18:30:00.000Z",
"path": "/v1/invoices/authorize",
"details": "<string>",
"retryable": false,
"retryAfterSeconds": 43200,
"requestId": "0f2c1a5e-1d9b-4c7a-9a55-7f1a2b3c4d5e"
}{
"statusCode": 401,
"errorCode": "UNAUTHORIZED",
"message": "No autorizado",
"timestamp": "2026-07-26T18:30:00.000Z",
"path": "/v1/invoices/authorize",
"details": "<string>",
"retryable": false,
"retryAfterSeconds": 43200,
"requestId": "0f2c1a5e-1d9b-4c7a-9a55-7f1a2b3c4d5e"
}Authorizations
API key de integración. El modo va en el prefijo: emi_test_ opera contra homologación, emi_live_ contra producción. Después, 64 hexadecimales.
Headers
El producto que origina el pedido (inmos, por ejemplo). Opcional, sólo con API key. Formato ^[a-z0-9-]{1,32}$; otro valor da 400 INVALID_INPUT. Queda en el comprobante, en el consumo y en el registro de pedidos.
Con una key sin producto es sólo atribución: no autoriza ni restringe nada. Con una key atada a un producto el pedido se etiqueta con el de la key aunque no mandes la cabecera, y si mandás otro valor la respuesta es 403 API_KEY_PRODUCTO_DISTINTO.
^[a-z0-9-]{1,32}$"inmos"
Path Parameters
Query Parameters
Contra qué padrón consultar.
Con API key no hace falta: sale del modo de la key, emi_live_ a producción y emi_test_ a homologación. Está para la sesión de panel, que no tiene modo porque opera sobre contribuyentes de los dos ambientes. Por omisión, PRODUCCION.
En homologación ARCA puede no resolver la persona, y eso es esperable: la respuesta sale con padronStatus distinto de VALIDATED.
HOMOLOGACION, PRODUCCION "PRODUCCION"
Response
Lo que el padrón tiene registrado. Un padronStatus distinto de VALIDATED no es un error: es que no se pudo saber.
El CUIT consultado, tal como se pidió.
"20437136697"
La razón social según ARCA, lista para mandar como legalName. null si el padrón no la resolvió: no se inventa un nombre.
"LIOTTA CAMILO"
La condición frente al IVA como emisor, lista para mandar como vatStatus. Es el vocabulario de POST /v1/taxpayers, no el de ReceptorValidadoDto.vatCondition, que es el del receptor.
null cuando el padrón no permite deducirla, y ahí no se adivina: suponer una condición decide la letra del comprobante, que es un error fiscal y no un detalle de presentación.
"Responsable Inscripto"
true si el padrón le registra IVA o monotributo activos, o sea si está en condiciones de emitir. Es el mismo criterio que el estado SIN_INSCRIPCION_ACTIVA del diagnóstico de conexión.
true
El código de CONDICION_IVA_RECEPTOR — el que viaja en un comprobante como receiverVatConditionId. 1 responsable inscripto, 4 exento, 5 consumidor final, 6 monotributo, y así.
No es lo mismo que vatStatus, que describe a la persona como emisor y tiene tres valores. Para llenar el receptor de un comprobante el que sirve es éste.
null si el padrón no permitió deducirla.
1, 4, 5, 6, 7, 8, 9, 10, 13, 15, 16 1
Estado de la clave fiscal según el padrón. Un CUIT INACTIVO no puede recibir un comprobante A, así que conviene mirarlo antes de emitir uno.
"ACTIVO"
Cómo salió la consulta.
VALIDATED— el padrón resolvió la persona.NOT_FOUND— ARCA no reconoce ese CUIT.UNAVAILABLE— no se pudo consultar. No quiere decir que el CUIT esté mal: quiere decir que no se sabe.WARNING— no corresponde consultar.
Nunca es un error HTTP. Un padrón que no contesta no puede tumbar un alta, así que la respuesta es 200 con el estado adentro y legalName/vatStatus en null.
VALIDATED, NOT_FOUND, UNAVAILABLE, WARNING "VALIDATED"
El detalle cuando padronStatus no es VALIDATED.
Cuándo se consultó. Siempre es ahora: esta consulta no usa cache, porque el cache del padrón vive colgado de una fila de cliente y acá todavía no hay ninguna.
"2026-08-22T04:31:00.000Z"