Ruta, método, esquema con tipos y un ejemplo real del JSON de entrada y de la respuesta. El contrato es el mismo para cualquier lenguaje: solo cambia el cliente HTTP.
int, string, bool, decimal); el bloque ejemplo es un payload real listo para copiar. La respuesta se muestra con el sobre completo { "ok", "data" }.ok; si es false, el detalle está en data.error / data.detail (forma única en Errores). Tras el login la API cachea el token y lo renueva sola: el cliente no maneja token ni sign.{
"cuit": int,
"servicio": string,
"certificadoPath": string,
"certificadoPassword": string,
"produccion": bool
}{
"cuit": 20238233195,
"servicio": "wsfe",
"certificadoPath": "C:\\Certificados\\cert.pfx",
"certificadoPassword": "clave",
"produccion": false
}{
"ok": bool,
"data": {
"token": string,
"sign": string,
"expiration": string
}
}{
"ok": true,
"data": {
"token": "abc123",
"sign": "xyz456",
"expiration": "2026-03-20T12:00:00"
}
}cuit (int) y produccion (bool). Sin cuerpo.{
"ok": bool,
"data": {
"cuit": int,
"tokenActivo": bool,
"certificadoRegistrado": bool,
"expira": string,
"minutosRestantes": int
}
}{
"ok": true,
"data": {
"cuit": 20238233195,
"tokenActivo": true,
"certificadoRegistrado": true,
"expira": "2026-03-20T12:00:00",
"minutosRestantes": 120
}
}{
"ok": bool,
"data": {
"api": { "estado": string, "fecha": string },
"afip": { "AppServer": string, "DbServer": string, "AuthServer": string },
"cache": { "cuitsRegistrados": int, "tokensActivos": int }
}
}{
"ok": true,
"data": {
"api": { "estado": "OK", "fecha": "2026-03-18T10:00:00" },
"afip": { "AppServer": "OK", "DbServer": "OK", "AuthServer": "OK" },
"cache": { "cuitsRegistrados": 2, "tokensActivos": 2 }
}
}/api/afip/ping?produccion=false devuelve solo los webservices de ARCA (WSAA + WSFE), servidos de cache. Sin cuerpo. El POST agrega destinos propios.{
"produccion": bool,
"incluirAfip": bool, // opcional (default true): incluye WSAA + WSFE
"destinos": [
{
"nombre": string, // opcional (etiqueta)
"host": string,
"puerto": int,
"tipo": string // "tcp" (default) | "mysql"
// sin tipo y puerto 3306 ⇒ mysql
}
]
}{
"produccion": false,
"destinos": [
{ "nombre": "MySQL", "host": "10.0.0.5", "puerto": 3306, "tipo": "mysql" }
]
}{
"ok": bool,
"data": {
"fecha": string,
"produccion": bool,
"afipAccesible": bool, // agregado WSAA + WSFE
"objetivos": [
{
"nombre": string,
"grupo": string, // "afip" | "custom"
"host": string,
"puerto": int,
"tipo": string, // "tcp" | "mysql"
"accesible": bool,
"latenciaMs": int, // null si no accesible
"servidor": string, // extra (ej. versión MySQL); null si no aplica
"error": string, // motivo si no accesible; null si ok
"fechaChequeo": string,
"edadSegundos": int // antigüedad del dato cacheado
}
]
}
}{
"ok": true,
"data": {
"fecha": "2026-07-23T10:15:03",
"produccion": false,
"afipAccesible": true,
"objetivos": [
{ "nombre": "WSAA", "grupo": "afip", "host": "wsaahomo.afip.gov.ar", "puerto": 443,
"tipo": "tcp", "accesible": true, "latenciaMs": 84, "servidor": null,
"error": null, "fechaChequeo": "2026-07-23T10:14:51", "edadSegundos": 12 },
{ "nombre": "MySQL", "grupo": "custom", "host": "10.0.0.5", "puerto": 3306,
"tipo": "mysql", "accesible": true, "latenciaMs": 3, "servidor": "MySQL 8.0.36",
"error": null, "fechaChequeo": "2026-07-23T10:14:51", "edadSegundos": 12 }
]
}
}afipAccesible o el accesible / latenciaMs de cada objetivo.{
"ok": bool,
"data": {
"total": int,
"data": [
{ "cuit": int, "ambiente": string, "tokenActivo": bool }
]
}
}{
"ok": true,
"data": {
"total": 2,
"data": [
{ "cuit": 20238233195, "ambiente": "Homologacion", "tokenActivo": true }
]
}
}{
"cuit": int,
"puntoVenta": int,
"tipoComprobante": int,
"produccion": bool
}{
"cuit": 20238233195,
"puntoVenta": 1,
"tipoComprobante": 6,
"produccion": false
}{
"ok": bool,
"data": {
"puntoVenta": int,
"tipoComprobante": int,
"ultimoNumero": int
}
}{
"ok": true,
"data": {
"puntoVenta": 1,
"tipoComprobante": 6,
"ultimoNumero": 152
}
}ok:false.{
"cuit": int,
"produccion": bool,
"puntoVenta": int,
"tipoComprobante": int,
"numero": int
}{
"cuit": 20238233195,
"produccion": false,
"puntoVenta": 1,
"tipoComprobante": 6,
"numero": 152
}{
"ok": bool,
"data": {
"puntoVenta": int,
"tipoComprobante": int,
"numeroComprobante": int,
"documentoTipo": string,
"documentoNumero": string,
"fechaComprobante": string,
"importeTotal": decimal,
"moneda": string,
"cotizacion": decimal,
"resultado": string,
"CAE": string,
"fechaVencimientoCAE": string
}
}{
"ok": true,
"data": {
"puntoVenta": 1,
"tipoComprobante": 6,
"numeroComprobante": 152,
"documentoTipo": "80",
"documentoNumero": "20111111112",
"fechaComprobante": "20260318",
"importeTotal": 121,
"moneda": "PES",
"cotizacion": 1,
"resultado": "A",
"CAE": "74328954736291",
"fechaVencimientoCAE": "20260328"
}
}{
"cuit": int,
"produccion": bool,
"puntoVenta": int,
"tipoComprobante": int,
"desde": int, // opcional — sin "desde" arranca en 1
"hasta": int // opcional — sin "hasta" usa el último autorizado
}{
"cuit": 20238233195,
"produccion": false,
"puntoVenta": 1,
"tipoComprobante": 6,
"desde": 1,
"hasta": 50
}{
"ok": bool,
"data": {
"puntoVenta": int,
"tipoComprobante": int,
"desde": int,
"hasta": int,
"cantidad": int,
"autorizados": int,
"conError": int,
"importeTotal": decimal,
"comprobantes": [ object ]
// cada item con la forma de /consultar;
// los fallidos: { "numeroComprobante": int, "error": string }
}
}{
"ok": true,
"data": {
"puntoVenta": 1,
"tipoComprobante": 6,
"desde": 1,
"hasta": 50,
"cantidad": 50,
"autorizados": 48,
"conError": 2,
"importeTotal": 152340.50,
"comprobantes": [ /* ...48 ok + 2 con error... */ ]
}
}{
"cuit": int,
"produccion": bool,
"puntoVenta": int,
"tipoComprobante": int,
"concepto": int,
"documentoTipo": int,
"documentoNumero": int,
"importeTotal": decimal,
"importeNoGravado": decimal,
"importeExento": decimal,
"importeGravado": decimal,
"importeIva": decimal,
"moneda": string,
"cotizacion": decimal,
"condicionIvaReceptorId": int,
"alicuotaIvaId": int
// concepto 2/3: fechaServicioDesde, fechaServicioHasta,
// fechaVencimientoPago (string, yyyyMMdd)
// NC/ND: "cbteAsoc": { "tipo": int, "puntoVenta": int, "numero": int,
// "cuit": int (opc), "cbteFch": string (opc) }
}{
"cuit": 20238233195,
"produccion": false,
"puntoVenta": 1,
"tipoComprobante": 6,
"concepto": 1,
"documentoTipo": 80,
"documentoNumero": 20111111112,
"importeTotal": 121,
"importeNoGravado": 0,
"importeExento": 0,
"importeGravado": 100,
"importeIva": 21,
"moneda": "PES",
"cotizacion": 1,
"condicionIvaReceptorId": 1,
"alicuotaIvaId": 5
}{
"ok": bool,
"data": {
"resultado": string,
"CAE": string,
"fechaVencimientoCAE": string,
"numeroComprobante": int
}
}{
"ok": true,
"data": {
"resultado": "A",
"CAE": "74328954736291",
"fechaVencimientoCAE": "20260321",
"numeroComprobante": 153
}
}/emitir admite una sola alícuota de IVA y no envía tributos. Para concepto 2 o 3 (servicios) son obligatorias las tres fechas en formato yyyyMMdd.cuit = emisor con certificado; cuitConsultado = CUIT a buscar.{ "cuit": int, "cuitConsultado": int, "produccion": bool }{ "cuit": 20238233195, "cuitConsultado": 20111111112, "produccion": false }{
"ok": bool,
"data": {
"cuitConsultado": int,
"denominacion": string,
"tipoPersona": string,
"estadoClave": string,
"domicilioFiscal": { "direccion": string, "localidad": string, "codigoPostal": string, "provincia": string },
"esMonotributista": bool,
"inscriptoIva": bool,
"condicionFiscal": "MONOTRIBUTO | RESPONSABLE_INSCRIPTO | NO_INSCRIPTO_IVA",
"puedeEmitirFacturaA": bool,
"motivo": string,
"impuestos": [ { "id": int, "descripcion": string, "estado": string } ]
}
}{
"ok": true,
"data": {
"cuitConsultado": 20111111112,
"denominacion": "PEREZ JUAN",
"tipoPersona": "FISICA",
"estadoClave": "ACTIVO",
"esMonotributista": true,
"inscriptoIva": false,
"condicionFiscal": "MONOTRIBUTO",
"puedeEmitirFacturaA": false,
"motivo": "Monotributista: emite Factura C, no Factura A.",
"impuestos": []
}
}/emitir. Requiere que el CUIT tenga habilitado el WS de padrón (ws_sr_padron_a5) en el Administrador de Relaciones de ARCA.Las 10 comparten el mismo request { cuit, produccion } y devuelven una lista { Id, Descripcion }. Las marcadas nuevo se agregaron en la última versión.
| Ruta (POST) | Devuelve | |
|---|---|---|
| /puntos-venta | Puntos de venta habilitados | |
| /tipos-comprobante | Tipos de comprobante | |
| /tipos-documento | Tipos de documento | |
| /tipos-concepto | Conceptos (prod/serv/ambos) | |
| /tipos-iva | Alícuotas de IVA | |
| /tipos-moneda | Monedas habilitadas | nuevo |
| /tipos-tributo | Tipos de tributo | nuevo |
| /tipos-opcional | Campos opcionales | nuevo |
| /condiciones-iva-receptor | Condiciones IVA del receptor (RG 5616) | nuevo |
| /actividades | Actividades económicas del emisor | nuevo |
{ "cuit": int, "produccion": bool }{ "cuit": 20238233195, "produccion": false }{
"ok": bool,
"data": [
{ "Id": string, "Descripcion": string }
]
}{
"ok": true,
"data": [
{ "Id": "5", "Descripcion": "21%" },
{ "Id": "4", "Descripcion": "10.5%" }
]
}{ "cuit": int, "moneda": string, "produccion": bool }{ "cuit": 20238233195, "moneda": "DOL", "produccion": false }{
"ok": bool,
"data": { "moneda": string, "cotizacion": decimal, "fechaCotizacion": string }
}{
"ok": true,
"data": { "moneda": "DOL", "cotizacion": 1045.50, "fechaCotizacion": "20260318" }
}Valores más usados en /emitir y /ultimo. La lista oficial completa se puede traer dinámicamente con los endpoints de tablas.
tipoComprobante| Id | Descripción |
|---|---|
| 1 | Factura A |
| 2 | Nota de Débito A |
| 3 | Nota de Crédito A |
| 6 | Factura B |
| 7 | Nota de Débito B |
| 8 | Nota de Crédito B |
| 11 | Factura C |
| 12 | Nota de Débito C |
| 13 | Nota de Crédito C |
documentoTipo| Id | Descripción |
|---|---|
| 80 | CUIT |
| 86 | CUIL |
| 96 | DNI |
| 99 | Consumidor Final (sin identificar) |
documentoTipo: 99 y documentoNumero: 0. La lista completa y actualizada se obtiene con POST /tipos-comprobante y POST /tipos-documento.alicuotaIvaId| Id | Alícuota |
|---|---|
| 3 | 0% |
| 4 | 10.5% |
| 5 | 21% |
| 6 | 27% |
| 8 | 5% |
| 9 | 2.5% |
POST /tipos-iva.condicionIvaReceptorId (RG 5616)| Id | Descripción |
|---|---|
| 1 | Responsable Inscripto |
| 4 | Sujeto Exento |
| 5 | Consumidor Final |
| 6 | Monotributo |
| 13 | Monotributo Social |
| 15 | No Alcanzado |
/emitir desde la RG 5616. Lista oficial completa con POST /condiciones-iva-receptor.Cualquier endpoint puede responder con ok:false. La forma es siempre la misma — no se repite arriba por endpoint.
{
"ok": bool,
"data": {
"error": string,
"detail": string,
"status": int
}
}{
"ok": false,
"data": {
"error": "Certificado no registrado para el CUIT",
"detail": "Ejecutá /login antes de operar.",
"status": 500
}
}