{
  "producto": "PanDaaS",
  "version": "3.3.0",
  "descripcion": "Data as a Service. Catálogos argentinos limpios, versionados y servidos por HTTP: marcas y modelos de vehículos, y los nomencladores de ARCA que necesita un sistema de facturación.",
  "baseUrl": "https://api.pandaas.com.ar",
  "autenticacion": {
    "tipo": "Bearer",
    "encabezado": "Authorization: Bearer <token>",
    "formato": "32 caracteres hexadecimales",
    "dondeObtenerlo": "https://admin.pandaas.com.ar",
    "siFalta": "401 Unauthorized",
    "siSePasaDelCupo": "429 Too Many Requests"
  },
  "datasets": [
    {
      "nombre": "AutoBase",
      "descripcion": "Marcas, modelos y segmentos de vehículos del mercado argentino. Es el catálogo que usan las aseguradoras, las concesionarias y los talleres para no mantener cada uno su propia lista.",
      "endpoints": [
        {
          "metodo": "GET",
          "ruta": "/autobase/makes",
          "descripcion": "Lista las marcas ordenadas por nombre.",
          "requiereToken": true,
          "devuelve": "Make[]",
          "parametros": [
            {
              "nombre": "onlyValidated",
              "en": "query",
              "tipo": "boolean",
              "requerido": false,
              "porDefecto": "true",
              "descripcion": "Dejalo en true para recibir solo las marcas revisadas. En false vienen también las provisionales, que son fichas cargadas automáticamente y todavía sin revisión editorial."
            }
          ],
          "ejemplo": "curl -H \"Authorization: Bearer $PANDAAS_TOKEN\" https://api.pandaas.com.ar/autobase/makes"
        },
        {
          "metodo": "GET",
          "ruta": "/autobase/makes/{id}",
          "descripcion": "Devuelve una marca por su identificador.",
          "requiereToken": true,
          "devuelve": "Make",
          "parametros": [
            {
              "nombre": "id",
              "en": "ruta",
              "tipo": "integer",
              "requerido": true,
              "descripcion": "Identificador de la marca."
            }
          ],
          "ejemplo": "curl -H \"Authorization: Bearer $PANDAAS_TOKEN\" https://api.pandaas.com.ar/autobase/makes/1"
        },
        {
          "metodo": "GET",
          "ruta": "/autobase/makes/{id}/models",
          "descripcion": "Modelos de una marca. Es un atajo de /autobase/models?makeId={id}, para no tener que armar la query desde el cliente.",
          "requiereToken": true,
          "devuelve": "Model[]",
          "parametros": [
            {
              "nombre": "id",
              "en": "ruta",
              "tipo": "integer",
              "requerido": true,
              "descripcion": "Identificador de la marca."
            },
            {
              "nombre": "onlyValidated",
              "en": "query",
              "tipo": "boolean",
              "requerido": false,
              "porDefecto": "true",
              "descripcion": "Excluye los modelos pendientes de revisión."
            }
          ],
          "ejemplo": "curl -H \"Authorization: Bearer $PANDAAS_TOKEN\" https://api.pandaas.com.ar/autobase/makes/1/models"
        },
        {
          "metodo": "GET",
          "ruta": "/autobase/models",
          "descripcion": "Lista modelos. Sin filtros devuelve el catálogo completo, que son más de 6.600 fichas: para un combo encadenado conviene filtrar siempre por marca.",
          "requiereToken": true,
          "devuelve": "Model[]",
          "parametros": [
            {
              "nombre": "makeId",
              "en": "query",
              "tipo": "integer?",
              "requerido": false,
              "descripcion": "Restringe a una marca."
            },
            {
              "nombre": "segmentId",
              "en": "query",
              "tipo": "integer?",
              "requerido": false,
              "descripcion": "Restringe a un segmento."
            },
            {
              "nombre": "onlyValidated",
              "en": "query",
              "tipo": "boolean",
              "requerido": false,
              "porDefecto": "true",
              "descripcion": "Excluye los modelos pendientes de revisión."
            }
          ],
          "ejemplo": "curl -H \"Authorization: Bearer $PANDAAS_TOKEN\" https://api.pandaas.com.ar/autobase/models"
        },
        {
          "metodo": "GET",
          "ruta": "/autobase/models/{id}",
          "descripcion": "Devuelve un modelo por su identificador.\n\nLos Ids no se rompen. Si el que pedís correspondía a un modelo duplicado que se fusionó con otro, recibís el modelo que quedó, con su propio Id: si el id de la respuesta no es el que pediste, guardá el nuevo.",
          "requiereToken": true,
          "devuelve": "Model",
          "parametros": [
            {
              "nombre": "id",
              "en": "ruta",
              "tipo": "integer",
              "requerido": true,
              "descripcion": "Identificador del modelo."
            }
          ],
          "ejemplo": "curl -H \"Authorization: Bearer $PANDAAS_TOKEN\" https://api.pandaas.com.ar/autobase/models/1"
        },
        {
          "metodo": "GET",
          "ruta": "/autobase/segments",
          "descripcion": "Lista todos los segmentos.",
          "requiereToken": true,
          "devuelve": "Segment[]",
          "parametros": [],
          "ejemplo": "curl -H \"Authorization: Bearer $PANDAAS_TOKEN\" https://api.pandaas.com.ar/autobase/segments"
        },
        {
          "metodo": "GET",
          "ruta": "/autobase/segments/{id}",
          "descripcion": "Devuelve un segmento por su identificador.",
          "requiereToken": true,
          "devuelve": "Segment",
          "parametros": [
            {
              "nombre": "id",
              "en": "ruta",
              "tipo": "integer",
              "requerido": true,
              "descripcion": "Identificador del segmento."
            }
          ],
          "ejemplo": "curl -H \"Authorization: Bearer $PANDAAS_TOKEN\" https://api.pandaas.com.ar/autobase/segments/1"
        }
      ]
    },
    {
      "nombre": "ARCABase",
      "endpoints": [
        {
          "metodo": "GET",
          "ruta": "/arcabase/cities",
          "descripcion": "Lista localidades. Sin filtros son 2.372 filas: para un autocompletado usá search, y para un combo encadenado, provinceId.",
          "requiereToken": true,
          "devuelve": "City[]",
          "parametros": [
            {
              "nombre": "provinceId",
              "en": "query",
              "tipo": "integer?",
              "requerido": false,
              "descripcion": "Restringe a una provincia."
            },
            {
              "nombre": "search",
              "en": "query",
              "tipo": "string",
              "requerido": false,
              "descripcion": "Devuelve solo las localidades cuyo nombre empieza con este texto. No distingue mayúsculas ni acentos."
            }
          ],
          "ejemplo": "curl -H \"Authorization: Bearer $PANDAAS_TOKEN\" https://api.pandaas.com.ar/arcabase/cities"
        },
        {
          "metodo": "GET",
          "ruta": "/arcabase/cities/{id}",
          "descripcion": "Devuelve una localidad por su identificador.",
          "requiereToken": true,
          "devuelve": "City",
          "parametros": [
            {
              "nombre": "id",
              "en": "ruta",
              "tipo": "integer",
              "requerido": true,
              "descripcion": "Identificador de la localidad."
            }
          ],
          "ejemplo": "curl -H \"Authorization: Bearer $PANDAAS_TOKEN\" https://api.pandaas.com.ar/arcabase/cities/1"
        },
        {
          "metodo": "GET",
          "ruta": "/arcabase/concepts",
          "descripcion": "Conceptos: producto, servicios o ambos. Define si ARCA va a exigir las fechas de servicio en el comprobante.",
          "requiereToken": true,
          "devuelve": "Concept[]",
          "parametros": [],
          "ejemplo": "curl -H \"Authorization: Bearer $PANDAAS_TOKEN\" https://api.pandaas.com.ar/arcabase/concepts"
        },
        {
          "metodo": "GET",
          "ruta": "/arcabase/countries",
          "descripcion": "Países del nomenclador de ARCA, para los comprobantes de exportación.",
          "requiereToken": true,
          "devuelve": "Country[]",
          "parametros": [],
          "ejemplo": "curl -H \"Authorization: Bearer $PANDAAS_TOKEN\" https://api.pandaas.com.ar/arcabase/countries"
        },
        {
          "metodo": "GET",
          "ruta": "/arcabase/currencies",
          "descripcion": "Monedas admitidas, ordenadas por nombre. \"PES\" son pesos argentinos.",
          "requiereToken": true,
          "devuelve": "Currency[]",
          "parametros": [],
          "ejemplo": "curl -H \"Authorization: Bearer $PANDAAS_TOKEN\" https://api.pandaas.com.ar/arcabase/currencies"
        },
        {
          "metodo": "GET",
          "ruta": "/arcabase/identity-document-types",
          "descripcion": "Lista todos los tipos de documento.",
          "requiereToken": true,
          "devuelve": "IdentityDocumentType[]",
          "parametros": [],
          "ejemplo": "curl -H \"Authorization: Bearer $PANDAAS_TOKEN\" https://api.pandaas.com.ar/arcabase/identity-document-types"
        },
        {
          "metodo": "GET",
          "ruta": "/arcabase/identity-document-types/{id}",
          "descripcion": "Devuelve un tipo de documento por su código.",
          "requiereToken": true,
          "devuelve": "IdentityDocumentType",
          "parametros": [
            {
              "nombre": "id",
              "en": "ruta",
              "tipo": "integer",
              "requerido": true,
              "descripcion": "Código oficial del tipo de documento (DocTipo)."
            }
          ],
          "ejemplo": "curl -H \"Authorization: Bearer $PANDAAS_TOKEN\" https://api.pandaas.com.ar/arcabase/identity-document-types/1"
        },
        {
          "metodo": "GET",
          "ruta": "/arcabase/invoice-type-rules",
          "descripcion": "Lista las combinaciones habilitadas.\n\nCubre a los cinco emisores de la facturación electrónica: Responsable Inscripto (clases A, B, M y E), Exento y los tres monotributos (C y E). Por cada clase trae factura, nota de débito y nota de crédito. Las demás condiciones —consumidor final, no categorizado, del exterior— no emiten, así que no aparecen como emisoras.\n\nLa M aparece como posible para el Responsable Inscripto porque la emite en lugar de la A cuando ARCA se la asigna; si no te la asignaron, emití A. La E es exportación y va al cliente del exterior.\n\nSe arma con dos fuentes: qué clase emite cada condición (RG 1415) y qué receptores admite cada clase según la tabla de ARCA (FEParamGetCondicionIvaReceptor). Un responsable inscripto le emite Factura A a un monotributista desde la RG 5.003.",
          "requiereToken": true,
          "devuelve": "InvoiceTypeRule[]",
          "parametros": [
            {
              "nombre": "emitterId",
              "en": "query",
              "tipo": "integer?",
              "requerido": false,
              "descripcion": "Condición frente al IVA de quien emite."
            },
            {
              "nombre": "recieverId",
              "en": "query",
              "tipo": "integer?",
              "requerido": false,
              "descripcion": "Condición frente al IVA de quien recibe."
            }
          ],
          "ejemplo": "curl -H \"Authorization: Bearer $PANDAAS_TOKEN\" https://api.pandaas.com.ar/arcabase/invoice-type-rules"
        },
        {
          "metodo": "GET",
          "ruta": "/arcabase/invoice-types",
          "descripcion": "Lista los tipos de comprobante.",
          "requiereToken": true,
          "devuelve": "InvoiceType[]",
          "parametros": [
            {
              "nombre": "letter",
              "en": "query",
              "tipo": "string",
              "requerido": false,
              "descripcion": "Filtra por letra del comprobante (A, B, C, M, E, R). Sin filtro devuelve los 96, incluidos los 20 cuya denominación oficial no nombra ninguna letra."
            },
            {
              "nombre": "onlyElectronic",
              "en": "query",
              "tipo": "boolean",
              "requerido": false,
              "porDefecto": "false",
              "descripcion": "Deja solo los 36 que se pueden emitir por el web service de facturación electrónica. La tabla completa es el nomenclador de ARCA e incluye comprobantes en papel y de regímenes especiales: si estás armando el combo de un sistema que factura, querés esto en true."
            }
          ],
          "ejemplo": "curl -H \"Authorization: Bearer $PANDAAS_TOKEN\" https://api.pandaas.com.ar/arcabase/invoice-types"
        },
        {
          "metodo": "GET",
          "ruta": "/arcabase/invoice-types/{id}",
          "descripcion": "Devuelve un tipo de comprobante por su código de ARCA.",
          "requiereToken": true,
          "devuelve": "InvoiceType",
          "parametros": [
            {
              "nombre": "id",
              "en": "ruta",
              "tipo": "integer",
              "requerido": true,
              "descripcion": "Código oficial del comprobante (CbteTipo)."
            }
          ],
          "ejemplo": "curl -H \"Authorization: Bearer $PANDAAS_TOKEN\" https://api.pandaas.com.ar/arcabase/invoice-types/1"
        },
        {
          "metodo": "GET",
          "ruta": "/arcabase/iva-rates",
          "descripcion": "Alícuotas de IVA. El id va en cada ítem del array de IVA del comprobante; el campo percent trae el mismo valor como número, para no tener que parsear \"10.5%\".",
          "requiereToken": true,
          "devuelve": "IvaRate[]",
          "parametros": [],
          "ejemplo": "curl -H \"Authorization: Bearer $PANDAAS_TOKEN\" https://api.pandaas.com.ar/arcabase/iva-rates"
        },
        {
          "metodo": "GET",
          "ruta": "/arcabase/provinces",
          "descripcion": "Lista las 25 provincias.",
          "requiereToken": true,
          "devuelve": "Province[]",
          "parametros": [],
          "ejemplo": "curl -H \"Authorization: Bearer $PANDAAS_TOKEN\" https://api.pandaas.com.ar/arcabase/provinces"
        },
        {
          "metodo": "GET",
          "ruta": "/arcabase/provinces/{id}",
          "descripcion": "Devuelve una provincia por su código.",
          "requiereToken": true,
          "devuelve": "Province",
          "parametros": [
            {
              "nombre": "id",
              "en": "ruta",
              "tipo": "integer",
              "requerido": true,
              "descripcion": "Código de provincia de PanDaaS (1 a 25)."
            }
          ],
          "ejemplo": "curl -H \"Authorization: Bearer $PANDAAS_TOKEN\" https://api.pandaas.com.ar/arcabase/provinces/1"
        },
        {
          "metodo": "GET",
          "ruta": "/arcabase/provinces/{id}/cities",
          "descripcion": "Localidades de una provincia. Atajo de /arcabase/cities?provinceId={id}.",
          "requiereToken": true,
          "devuelve": "City[]",
          "parametros": [
            {
              "nombre": "id",
              "en": "ruta",
              "tipo": "integer",
              "requerido": true,
              "descripcion": "Código de la provincia."
            }
          ],
          "ejemplo": "curl -H \"Authorization: Bearer $PANDAAS_TOKEN\" https://api.pandaas.com.ar/arcabase/provinces/1/cities"
        },
        {
          "metodo": "GET",
          "ruta": "/arcabase/responsable-types",
          "descripcion": "Lista las condiciones frente al IVA.\n\nPara armar el combo del receptor en un sistema que factura, pedí invoiceClass con la letra del comprobante que vas a emitir: vuelven solo las condiciones que ARCA acepta para esa letra, y el error de informar una incompatible (el 10242) no puede ocurrir.",
          "requiereToken": true,
          "devuelve": "ResponsableType[]",
          "parametros": [
            {
              "nombre": "onlyCurrent",
              "en": "query",
              "tipo": "boolean",
              "requerido": false,
              "porDefecto": "true",
              "descripcion": "Dejalo en true para recibir solo las 11 condiciones que ARCA acepta hoy. En false vienen también las derogadas —\"IVA Responsable no Inscripto\", \"Pequeño Contribuyente Eventual\"—, marcadas con isCurrent en false y con currentEquivalentId apuntando a su reemplazo. Sirven para migrar datos viejos, no para facturar."
            },
            {
              "nombre": "invoiceClass",
              "en": "query",
              "tipo": "string",
              "requerido": false,
              "descripcion": "Letra del comprobante: A, B, C o M. Filtra a las condiciones que ARCA admite como receptor de esa clase."
            }
          ],
          "ejemplo": "curl -H \"Authorization: Bearer $PANDAAS_TOKEN\" https://api.pandaas.com.ar/arcabase/responsable-types"
        },
        {
          "metodo": "GET",
          "ruta": "/arcabase/responsable-types/{id}",
          "descripcion": "Devuelve una condición por su código, vigente o derogada.",
          "requiereToken": true,
          "devuelve": "ResponsableType",
          "parametros": [
            {
              "nombre": "id",
              "en": "ruta",
              "tipo": "integer",
              "requerido": true,
              "descripcion": "Código de la condición. En las vigentes es el código de ARCA."
            }
          ],
          "ejemplo": "curl -H \"Authorization: Bearer $PANDAAS_TOKEN\" https://api.pandaas.com.ar/arcabase/responsable-types/1"
        },
        {
          "metodo": "GET",
          "ruta": "/arcabase/tax-types",
          "descripcion": "Tipos de tributo que pueden sumarse a un comprobante: percepciones, ingresos brutos, impuestos provinciales y municipales.",
          "requiereToken": true,
          "devuelve": "TaxType[]",
          "parametros": [],
          "ejemplo": "curl -H \"Authorization: Bearer $PANDAAS_TOKEN\" https://api.pandaas.com.ar/arcabase/tax-types"
        }
      ]
    },
    {
      "nombre": "Sistema",
      "endpoints": [
        {
          "metodo": "GET",
          "ruta": "/",
          "descripcion": "Documentación de la API en HTML.",
          "requiereToken": false,
          "parametros": [],
          "ejemplo": "curl https://api.pandaas.com.ar/"
        },
        {
          "metodo": "GET",
          "ruta": "/help",
          "descripcion": "Catálogo completo de la API: datasets, endpoints, parámetros, modelos de respuesta y códigos de error.\n\nSe arma por reflexión sobre las rutas que la aplicación tiene registradas, no de una lista escrita a mano, así que nunca queda desfasado del código que efectivamente está corriendo.",
          "requiereToken": false,
          "devuelve": "CatalogoApi",
          "parametros": [],
          "ejemplo": "curl https://api.pandaas.com.ar/help"
        },
        {
          "metodo": "GET",
          "ruta": "/help/{dataset}",
          "descripcion": "Los endpoints de un dataset, para no traerse el catálogo entero.",
          "requiereToken": false,
          "devuelve": "GrupoDoc",
          "parametros": [
            {
              "nombre": "dataset",
              "en": "ruta",
              "tipo": "string",
              "requerido": true,
              "descripcion": "Nombre del dataset: AutoBase, ARCABase o Sistema."
            }
          ],
          "ejemplo": "curl https://api.pandaas.com.ar/help/1"
        },
        {
          "metodo": "GET",
          "ruta": "/openapi",
          "descripcion": "Devuelve la API descrita en OpenAPI 3.0.3.\n\nSale del mismo catálogo que /help, así que las tres vistas —la página HTML, el JSON de /help y esta especificación— no pueden contradecirse entre sí.",
          "requiereToken": false,
          "parametros": [],
          "ejemplo": "curl https://api.pandaas.com.ar/openapi"
        },
        {
          "metodo": "GET",
          "ruta": "/openapi.json",
          "descripcion": "Alias con extensión, que es lo que esperan algunas herramientas. Necesita el handler declarado en el Web.config: si no, IIS trata el .json como archivo estático y responde 404 sin llegar acá.",
          "requiereToken": false,
          "parametros": [],
          "ejemplo": "curl https://api.pandaas.com.ar/openapi.json"
        },
        {
          "metodo": "GET",
          "ruta": "/status",
          "descripcion": "Dice si la API está viva y si llega a la base.\n\nExiste por un motivo concreto: entre enero y agosto de 2026 la API respondió 500 en todos sus endpoints porque el binario publicado consultaba tablas que habían sido renombradas, y nadie se enteró. Este endpoint es lo que hace que eso se note el mismo día.",
          "requiereToken": false,
          "parametros": [],
          "ejemplo": "curl https://api.pandaas.com.ar/status"
        }
      ]
    }
  ],
  "modelos": {
    "autenticacionDoc": {
      "nombre": "AutenticacionDoc",
      "propiedades": [
        {
          "nombre": "tipo",
          "tipo": "string",
          "puedeSerNulo": true
        },
        {
          "nombre": "encabezado",
          "tipo": "string",
          "puedeSerNulo": true
        },
        {
          "nombre": "formato",
          "tipo": "string",
          "puedeSerNulo": true
        },
        {
          "nombre": "dondeObtenerlo",
          "tipo": "string",
          "puedeSerNulo": true
        },
        {
          "nombre": "siFalta",
          "tipo": "string",
          "puedeSerNulo": true
        },
        {
          "nombre": "siSePasaDelCupo",
          "tipo": "string",
          "puedeSerNulo": true
        }
      ]
    },
    "catalogoApi": {
      "nombre": "CatalogoApi",
      "descripcion": "El catálogo que sirve /help.\n\nNo hay una lista de endpoints escrita a mano en ningún lado: esto recorre las rutas que Web API tiene registradas de verdad y les pega encima los comentarios /// del código. Un controller nuevo aparece en la documentación por el solo hecho de existir, y un endpoint que se borra desaparece. Es la única forma de que la documentación de un producto que se vende como API no se atrase.",
      "propiedades": [
        {
          "nombre": "producto",
          "tipo": "string",
          "puedeSerNulo": true
        },
        {
          "nombre": "version",
          "tipo": "string",
          "puedeSerNulo": true
        },
        {
          "nombre": "descripcion",
          "tipo": "string",
          "puedeSerNulo": true
        },
        {
          "nombre": "baseUrl",
          "tipo": "string",
          "puedeSerNulo": true
        },
        {
          "nombre": "autenticacion",
          "tipo": "AutenticacionDoc",
          "puedeSerNulo": true
        },
        {
          "nombre": "datasets",
          "tipo": "GrupoDoc[]",
          "puedeSerNulo": true
        },
        {
          "nombre": "modelos",
          "tipo": "string[]",
          "puedeSerNulo": true
        },
        {
          "nombre": "errores",
          "tipo": "ErrorDoc[]",
          "puedeSerNulo": true
        },
        {
          "nombre": "todosLosEndpoints",
          "tipo": "EndpointDoc[]",
          "puedeSerNulo": true,
          "descripcion": "Todos los endpoints en una sola lista, sin agrupar. Es una comodidad para el código que consume el catálogo dentro de la aplicación, no parte de la respuesta: serializarla repetiría entero el contenido de Datasets y duplicaría el tamaño de /help."
        }
      ]
    },
    "city": {
      "nombre": "City",
      "descripcion": "Localidad, con la provincia a la que pertenece embebida.",
      "propiedades": [
        {
          "nombre": "id",
          "tipo": "integer",
          "puedeSerNulo": false,
          "descripcion": "Identificador estable de la localidad."
        },
        {
          "nombre": "name",
          "tipo": "string",
          "puedeSerNulo": true,
          "descripcion": "Nombre de la localidad."
        },
        {
          "nombre": "province",
          "tipo": "Province",
          "puedeSerNulo": true,
          "descripcion": "Provincia a la que pertenece. Nunca es null."
        }
      ]
    },
    "concept": {
      "nombre": "Concept",
      "descripcion": "Concepto del comprobante: si lo que se factura son productos, servicios o ambos. Va en el campo Concepto, y determina si ARCA exige las fechas de servicio.",
      "propiedades": [
        {
          "nombre": "id",
          "tipo": "integer",
          "puedeSerNulo": false,
          "descripcion": "Código oficial del concepto."
        },
        {
          "nombre": "name",
          "tipo": "string",
          "puedeSerNulo": true,
          "descripcion": "Denominación."
        }
      ]
    },
    "country": {
      "nombre": "Country",
      "descripcion": "País, del nomenclador de ARCA. Se usa en los comprobantes de exportación.",
      "propiedades": [
        {
          "nombre": "id",
          "tipo": "integer",
          "puedeSerNulo": false,
          "descripcion": "Código oficial del país."
        },
        {
          "nombre": "name",
          "tipo": "string",
          "puedeSerNulo": true,
          "descripcion": "Nombre del país."
        }
      ]
    },
    "currency": {
      "nombre": "Currency",
      "descripcion": "Moneda del comprobante. El va en el campo MonId.",
      "propiedades": [
        {
          "nombre": "id",
          "tipo": "string",
          "puedeSerNulo": true,
          "descripcion": "Código de ARCA: \"PES\" para pesos, \"DOL\" para dólar estadounidense."
        },
        {
          "nombre": "name",
          "tipo": "string",
          "puedeSerNulo": true,
          "descripcion": "Denominación de la moneda."
        }
      ]
    },
    "endpointDoc": {
      "nombre": "EndpointDoc",
      "propiedades": [
        {
          "nombre": "metodo",
          "tipo": "string",
          "puedeSerNulo": true
        },
        {
          "nombre": "ruta",
          "tipo": "string",
          "puedeSerNulo": true
        },
        {
          "nombre": "descripcion",
          "tipo": "string",
          "puedeSerNulo": true
        },
        {
          "nombre": "requiereToken",
          "tipo": "boolean",
          "puedeSerNulo": false
        },
        {
          "nombre": "devuelve",
          "tipo": "string",
          "puedeSerNulo": true
        },
        {
          "nombre": "parametros",
          "tipo": "ParametroDoc[]",
          "puedeSerNulo": true
        },
        {
          "nombre": "ejemplo",
          "tipo": "string",
          "puedeSerNulo": true
        }
      ]
    },
    "errorDoc": {
      "nombre": "ErrorDoc",
      "propiedades": [
        {
          "nombre": "codigo",
          "tipo": "integer",
          "puedeSerNulo": false
        },
        {
          "nombre": "significado",
          "tipo": "string",
          "puedeSerNulo": true
        },
        {
          "nombre": "queHacer",
          "tipo": "string",
          "puedeSerNulo": true
        }
      ]
    },
    "grupoDoc": {
      "nombre": "GrupoDoc",
      "propiedades": [
        {
          "nombre": "nombre",
          "tipo": "string",
          "puedeSerNulo": true
        },
        {
          "nombre": "descripcion",
          "tipo": "string",
          "puedeSerNulo": true
        },
        {
          "nombre": "endpoints",
          "tipo": "EndpointDoc[]",
          "puedeSerNulo": true
        }
      ]
    },
    "identityDocumentType": {
      "nombre": "IdentityDocumentType",
      "descripcion": "Tipo de documento de identidad del nomenclador de ARCA (CUIT, CUIL, DNI, pasaporte, etc.). El es el código oficial que viaja en el campo DocTipo de la facturación electrónica.",
      "propiedades": [
        {
          "nombre": "id",
          "tipo": "integer",
          "puedeSerNulo": false,
          "descripcion": "Código oficial de ARCA (DocTipo)."
        },
        {
          "nombre": "name",
          "tipo": "string",
          "puedeSerNulo": true,
          "descripcion": "Denominación del tipo de documento."
        }
      ]
    },
    "invoiceType": {
      "nombre": "InvoiceType",
      "descripcion": "Tipo de comprobante del nomenclador de ARCA (ex AFIP): factura, nota de crédito, recibo, etc. El es el código oficial que viaja en el campo CbteTipo de los web services de facturación electrónica.",
      "propiedades": [
        {
          "nombre": "id",
          "tipo": "integer",
          "puedeSerNulo": false,
          "descripcion": "Código oficial de ARCA (CbteTipo)."
        },
        {
          "nombre": "name",
          "tipo": "string",
          "puedeSerNulo": true,
          "descripcion": "Denominación completa, por ejemplo \"NOTAS DE CREDITO A\"."
        },
        {
          "nombre": "abreviation",
          "tipo": "string",
          "puedeSerNulo": true,
          "descripcion": "Abreviatura de uso corriente (\"NC A\"), o null si no tiene."
        },
        {
          "nombre": "letter",
          "tipo": "string",
          "puedeSerNulo": true,
          "descripcion": "Letra del comprobante (A, B, C, M, E, R), o null si su denominación oficial no nombra ninguna."
        },
        {
          "nombre": "wsfeEnabled",
          "tipo": "boolean",
          "puedeSerNulo": false,
          "descripcion": "true si se puede emitir por el web service de facturación electrónica. La tabla es el nomenclador completo de ARCA e incluye comprobantes en papel y de regímenes especiales: de los 96, 36 son electrónicos."
        }
      ]
    },
    "invoiceTypeRule": {
      "nombre": "InvoiceTypeRule",
      "descripcion": "Una combinación válida emisor / receptor / tipo de comprobante.\n\nEs la regla que responde la pregunta que se hace cualquier sistema de facturación antes de emitir: \"siendo yo responsable inscripto y mi cliente consumidor final, ¿qué comprobantes puedo emitirle?\".",
      "propiedades": [
        {
          "nombre": "emitter",
          "tipo": "ResponsableType",
          "puedeSerNulo": true,
          "descripcion": "Condición frente al IVA de quien emite."
        },
        {
          "nombre": "reciever",
          "tipo": "ResponsableType",
          "puedeSerNulo": true,
          "descripcion": "Condición frente al IVA de quien recibe."
        },
        {
          "nombre": "invoiceType",
          "tipo": "InvoiceType",
          "puedeSerNulo": true,
          "descripcion": "Comprobante habilitado para esa combinación."
        }
      ]
    },
    "ivaRate": {
      "nombre": "IvaRate",
      "descripcion": "Alícuota de IVA. El es el código que viaja en el campo Id de cada ítem del array Iva de la facturación electrónica.",
      "propiedades": [
        {
          "nombre": "id",
          "tipo": "integer",
          "puedeSerNulo": false,
          "descripcion": "Código oficial de la alícuota."
        },
        {
          "nombre": "name",
          "tipo": "string",
          "puedeSerNulo": true,
          "descripcion": "Como la nombra ARCA: \"21%\", \"10.5%\"."
        },
        {
          "nombre": "percent",
          "tipo": "number?",
          "puedeSerNulo": true,
          "descripcion": "El mismo valor como número, para calcular sin parsear el nombre."
        }
      ]
    },
    "make": {
      "nombre": "Make",
      "descripcion": "Marca de vehículo.",
      "propiedades": [
        {
          "nombre": "id",
          "tipo": "integer",
          "puedeSerNulo": false,
          "descripcion": "Identificador estable de la marca."
        },
        {
          "nombre": "name",
          "tipo": "string",
          "puedeSerNulo": true,
          "descripcion": "Nombre comercial, tal como lo usa la terminal."
        },
        {
          "nombre": "isProvisional",
          "tipo": "boolean",
          "puedeSerNulo": false,
          "descripcion": "true cuando la ficha se cargó de forma provisional y todavía no pasó por la revisión editorial. Por defecto la API no las devuelve."
        },
        {
          "nombre": "logoUrl",
          "tipo": "string",
          "puedeSerNulo": true,
          "descripcion": "URL absoluta del logo, o null si la marca no tiene logo cargado."
        }
      ]
    },
    "model": {
      "nombre": "Model",
      "descripcion": "Modelo de vehículo, con su marca y su segmento embebidos.",
      "propiedades": [
        {
          "nombre": "id",
          "tipo": "integer",
          "puedeSerNulo": false,
          "descripcion": "Identificador estable del modelo."
        },
        {
          "nombre": "name",
          "tipo": "string",
          "puedeSerNulo": true,
          "descripcion": "Denominación del modelo, sin la marca adelante."
        },
        {
          "nombre": "make",
          "tipo": "Make",
          "puedeSerNulo": true,
          "descripcion": "Marca a la que pertenece. Nunca es null."
        },
        {
          "nombre": "segment",
          "tipo": "Segment",
          "puedeSerNulo": true,
          "descripcion": "Segmento asignado, o null si todavía no se clasificó."
        },
        {
          "nombre": "isProvisional",
          "tipo": "boolean",
          "puedeSerNulo": false,
          "descripcion": "true si la ficha está pendiente de revisión editorial."
        }
      ]
    },
    "parametroDoc": {
      "nombre": "ParametroDoc",
      "propiedades": [
        {
          "nombre": "nombre",
          "tipo": "string",
          "puedeSerNulo": true
        },
        {
          "nombre": "en",
          "tipo": "string",
          "puedeSerNulo": true
        },
        {
          "nombre": "tipo",
          "tipo": "string",
          "puedeSerNulo": true
        },
        {
          "nombre": "requerido",
          "tipo": "boolean",
          "puedeSerNulo": false
        },
        {
          "nombre": "porDefecto",
          "tipo": "string",
          "puedeSerNulo": true
        },
        {
          "nombre": "descripcion",
          "tipo": "string",
          "puedeSerNulo": true
        }
      ]
    },
    "province": {
      "nombre": "Province",
      "descripcion": "Provincia argentina.\n\nAtención: el es el código propio de PanDaaS, no el del nomenclador de ARCA. El esquema es 1 = Buenos Aires (interior), 2 = Gran Buenos Aires, 3 = Capital Federal y de 4 en adelante el resto en orden alfabético. Es el corte que usan los operadores logísticos argentinos, y es el que referencian las localidades de esta misma base. Para cruzar con otros sistemas, usá .",
      "propiedades": [
        {
          "nombre": "id",
          "tipo": "integer",
          "puedeSerNulo": false,
          "descripcion": "Código de provincia de PanDaaS (1 a 25)."
        },
        {
          "nombre": "name",
          "tipo": "string",
          "puedeSerNulo": true,
          "descripcion": "Nombre de la provincia."
        },
        {
          "nombre": "isoCode",
          "tipo": "string",
          "puedeSerNulo": true,
          "descripcion": "Código ISO 3166-2:AR (\"AR-X\" para Córdoba, \"AR-C\" para la Ciudad de Buenos Aires). Es el identificador estándar para cruzar con mapas, operadores logísticos y cualquier sistema fuera de PanDaaS. Interior de Buenos Aires y Gran Buenos Aires comparten \"AR-B\": para ISO son la misma provincia."
        }
      ]
    },
    "responsableType": {
      "nombre": "ResponsableType",
      "descripcion": "Condición del contribuyente frente al IVA: responsable inscripto, monotributista, consumidor final, exento, etc.\n\nEl de las condiciones vigentes es el código oficial que ARCA espera en el campo CondicionIVAReceptorId de la facturación electrónica (tabla FEParamGetCondicionIvaReceptor). Desde el 01/12/2026 la RG 5.616 lo hace obligatorio y ARCA rechaza el comprobante que informa un código inexistente o incompatible con la letra.",
      "propiedades": [
        {
          "nombre": "id",
          "tipo": "integer",
          "puedeSerNulo": false,
          "descripcion": "Código de la condición. En las vigentes, es el código de ARCA."
        },
        {
          "nombre": "name",
          "tipo": "string",
          "puedeSerNulo": true,
          "descripcion": "Denominación, tal como figura en la tabla de ARCA."
        },
        {
          "nombre": "isCurrent",
          "tipo": "boolean",
          "puedeSerNulo": false,
          "descripcion": "true si ARCA acepta hoy este código en CondicionIVAReceptorId. Las no vigentes son figuras derogadas —\"IVA Responsable no Inscripto\", \"Pequeño Contribuyente Eventual\"— que se conservan porque pueden estar guardadas en sistemas viejos, pero no se pueden informar."
        },
        {
          "nombre": "currentEquivalentId",
          "tipo": "integer?",
          "puedeSerNulo": true,
          "descripcion": "Para una condición derogada, la vigente que la reemplaza; null en las vigentes. Las equivalencias son razonables pero no idénticas: ante un caso real conviene revisar al contribuyente, no confiar a ciegas en el reemplazo."
        }
      ]
    },
    "segment": {
      "nombre": "Segment",
      "descripcion": "Segmento de mercado de un modelo (hatchback, SUV, pick-up, etc.).",
      "propiedades": [
        {
          "nombre": "id",
          "tipo": "integer",
          "puedeSerNulo": false,
          "descripcion": "Identificador estable del segmento."
        },
        {
          "nombre": "name",
          "tipo": "string",
          "puedeSerNulo": true,
          "descripcion": "Nombre del segmento."
        }
      ]
    },
    "taxType": {
      "nombre": "TaxType",
      "descripcion": "Tipo de tributo que puede sumarse a un comprobante: percepciones, impuestos provinciales, ingresos brutos.",
      "propiedades": [
        {
          "nombre": "id",
          "tipo": "integer",
          "puedeSerNulo": false,
          "descripcion": "Código oficial del tributo."
        },
        {
          "nombre": "name",
          "tipo": "string",
          "puedeSerNulo": true,
          "descripcion": "Denominación."
        }
      ]
    }
  },
  "errores": [
    {
      "codigo": 200,
      "significado": "OK",
      "queHacer": "El cuerpo trae el recurso pedido."
    },
    {
      "codigo": 400,
      "significado": "Parámetro inválido",
      "queHacer": "Revisá tipos y valores contra la sección de parámetros del endpoint."
    },
    {
      "codigo": 401,
      "significado": "Token ausente, inexistente, desactivado o vencido",
      "queHacer": "El cuerpo aclara el motivo en el campo 'error'. Los tokens se administran en admin.pandaas.com.ar."
    },
    {
      "codigo": 404,
      "significado": "El recurso no existe",
      "queHacer": "El id pedido no está en el catálogo. No es un error de integración."
    },
    {
      "codigo": 429,
      "significado": "Límite mensual del token superado",
      "queHacer": "Esperá al mes que viene o pedí que te amplíen el cupo."
    },
    {
      "codigo": 500,
      "significado": "Error del servidor",
      "queHacer": "Escribinos: es nuestro. Guardamos el request en el log de consultas."
    }
  ]
}