QAPI está en beta — la API puede cambiar sin previo aviso. Usa sandbox para pruebas.
QAPIQAPIDocs · by DTEVIA
Api

Emitir factura de prueba

Crea una factura de prueba usando siempre el certificador MOCK, sin importar el certificador del tenant. Sin costo ni validez tributaria. Aplica las mismas 14 validaciones que producción. La respuesta incluye `links.self` apuntando a `GET /v1/invoices/{id}` — las facturas de sandbox **se consultan y anulan por los endpoints normales de Facturas**, no existe un GET/cancel bajo /v1/sandbox. Diferencias vs producción: no dispara webhooks, no consume cuota del plan, `referencia_interna` se prefija con "[SANDBOX]", y aplica un límite diario por tipo de DTE según tu plan (starter/business: 20, enterprise: 50).

POST
/v1/sandbox/invoices

Authorization

ApiKeyAuth
AuthorizationBearer <token>

API key con prefijo qapi_live_ o qapi_test_, o JWT (access_token) obtenido vía POST /v1/auth/login. QAPI detecta el tipo automáticamente por el prefijo del token.

In: header

Header Parameters

Idempotency-Key?string

Mismo comportamiento que en POST /v1/invoices: evita duplicados en reintentos, ventana de 24 horas.

Request Body

application/json

TypeScript Definitions

Use the request body type in TypeScript.

Response Body

application/json

application/json

application/json

application/json

application/json

application/json

curl -X POST "https://example.com/v1/sandbox/invoices" \  -H "Content-Type: application/json" \  -d '{    "tipo_dte": "FACT",    "moneda": "GTQ",    "fecha_emision": "2026-06-08T10:00:00-06:00",    "emisor": {      "nit": "12345678",      "nombre": "Mi Empresa S.A.",      "nombre_comercial": "Mi Empresa",      "codigo_establecimiento": 1,      "afiliacion_iva": "GEN",      "direccion": {        "calle": "6a Avenida 1-36 Zona 1",        "municipio": "Guatemala",        "departamento": "Guatemala",        "codigo_postal": "01001",        "pais": "GT"      },      "correo": "facturacion@miempresa.com"    },    "receptor": {      "id": "CF",      "nombre": "Consumidor Final"    },    "frases": [      {        "tipo_frase": 1,        "codigo_escenario": 1      }    ],    "items": [      {        "tipo": "S",        "cantidad": 1,        "unidad_medida": "UND",        "descripcion": "Servicio de consultoría",        "precio_unitario": 100,        "impuestos": [          {            "nombre": "IVA",            "codigo_unidad_gravable": 1,            "monto_gravable": 100,            "monto_impuesto": 12          }        ]      }    ]  }'
{
  "id": "inv_V1StGXR8_Z5jdHi6",
  "status": "PROCESSING",
  "sandbox": false,
  "tipo_dte": "FACT",
  "gran_total": 112,
  "moneda": "GTQ",
  "numero_acceso": 543219876,
  "created_at": "2019-08-24T14:15:22Z",
  "links": {
    "self": "/v1/invoices/inv_V1StGXR8_Z5jdHi6"
  }
}
{
  "type": "https://docs.dtevia.com.gt/errors/validation-error",
  "title": "VALIDATION_ERROR",
  "status": 422,
  "detail": "Error de validación",
  "instance": "/v1/invoices",
  "invalid_params": [
    {
      "field": "items.0.impuestos.0.monto_impuesto",
      "message": "MontoImpuesto IVA inválido. Esperado ~12 (MontoGravable 100 × 0.12), recibido 10"
    }
  ]
}
{
  "type": "https://docs.dtevia.com.gt/errors/validation-error",
  "title": "VALIDATION_ERROR",
  "status": 422,
  "detail": "Error de validación",
  "instance": "/v1/invoices",
  "invalid_params": [
    {
      "field": "items.0.impuestos.0.monto_impuesto",
      "message": "MontoImpuesto IVA inválido. Esperado ~12 (MontoGravable 100 × 0.12), recibido 10"
    }
  ]
}
{
  "type": "https://docs.dtevia.com.gt/errors/validation-error",
  "title": "VALIDATION_ERROR",
  "status": 422,
  "detail": "Error de validación",
  "instance": "/v1/invoices",
  "invalid_params": [
    {
      "field": "items.0.impuestos.0.monto_impuesto",
      "message": "MontoImpuesto IVA inválido. Esperado ~12 (MontoGravable 100 × 0.12), recibido 10"
    }
  ]
}
{
  "type": "https://docs.dtevia.com.gt/errors/validation-error",
  "title": "VALIDATION_ERROR",
  "status": 422,
  "detail": "Error de validación",
  "instance": "/v1/invoices",
  "invalid_params": [
    {
      "field": "items.0.impuestos.0.monto_impuesto",
      "message": "MontoImpuesto IVA inválido. Esperado ~12 (MontoGravable 100 × 0.12), recibido 10"
    }
  ]
}
{
  "type": "https://docs.dtevia.com.gt/errors/validation-error",
  "title": "VALIDATION_ERROR",
  "status": 422,
  "detail": "Error de validación",
  "instance": "/v1/invoices",
  "invalid_params": [
    {
      "field": "items.0.impuestos.0.monto_impuesto",
      "message": "MontoImpuesto IVA inválido. Esperado ~12 (MontoGravable 100 × 0.12), recibido 10"
    }
  ]
}