> ## Documentation Index
> Fetch the complete documentation index at: https://docs.fegora.com/llms.txt
> Use this file to discover all available pages before exploring further.

# Casos especiales

> Contingencia, exportación, pagos a plazos, plantillas reutilizables, envío por correo, resguardo de XML y recursos adjuntos.

Esta página reúne flujos que se apartan de la emisión estándar de un DTE: cada sección describe qué resuelve el caso, cuándo usarlo y cómo lucen la petición y la respuesta.

## Contingencia

<Note>
  **Solo Guatemala.** El concepto de contingencia, tal como se describe aquí, corresponde a la regla de la SAT. No se encontró en el código una restricción explícita que impida usar `numeroAcceso` para otro país, pero tampoco evidencia de que aplique.
</Note>

Una contingencia es un corte de conectividad (o del certificador/SAT) que le impide emitir un DTE en línea en el momento de la venta. Fegora no ofrece una cola de emisión offline — la contingencia ocurre en su propio sistema; lo que el API soporta es la reconciliación posterior:

<Steps>
  <Step title="Durante la contingencia, emita en su propio sistema">
    Genere usted mismo un número aleatorio único de 9 dígitos e imprímalo en la representación gráfica junto con el texto "Emisión en contingencia, obtenga el DTE Certificado en el sitio [www.sat.gob.gt/efactura](http://www.sat.gob.gt/efactura)".
  </Step>

  <Step title="Al restablecerse la conexión, envíe el documento a POST /dte">
    Use la misma estructura que un DTE normal, agregando el campo `numeroAcceso` con el número que generó en el paso anterior.
  </Step>
</Steps>

```json theme={null}
{
  "numeroAcceso": 123456789,
  "receptor": { "id": "CF", "nombre": "CONSUMIDOR FINAL" },
  "items": [
    { "descripcion": "Audífonos inalámbricos", "precioUnitario": 500 }
  ]
}
```

`numeroAcceso` es distinto del número de autorización que asigna el certificador: es el número de contingencia que usted generó, se graba en el XML y se refleja de vuelta en la respuesta.

```json theme={null}
{
  "id": "8F3A1C2E-9B7D-4E51-8A0F-1234567890AB",
  "numeroAcceso": 123456789,
  "tipo": "factura",
  "estado": "Certificado"
}
```

## Facturas de exportación

Un DTE de exportación se declara con `esExportacion: true` y el bloque `datosExportacion`. Fegora aplica automáticamente la exención de IVA correspondiente — no es necesario indicar `motivoExencionIva` ni calcular el IVA como exento manualmente.

```json theme={null}
{
  "receptor": { "id": "CF", "nombre": "Comprador Extranjero Ejemplo" },
  "items": [
    { "descripcion": "Telas típicas variadas", "precioUnitario": 500 }
  ],
  "esExportacion": true,
  "datosExportacion": {
    "nombreConsignatario": "Importadora Ejemplo Ltda.",
    "direccionConsignatario": "Av. Principal 123, Ciudad Ejemplo",
    "incoterm": "CIF"
  }
}
```

| Campo                                                        | Obligatorio      | Descripción                                                                                                |
| ------------------------------------------------------------ | ---------------- | ---------------------------------------------------------------------------------------------------------- |
| `nombreConsignatario`                                        | Sí               | Nombre de quien recibe la mercadería en destino.                                                           |
| `direccionConsignatario`                                     | Sí               | Dirección del consignatario.                                                                               |
| `incoterm`                                                   | No (recomendado) | Si se envía, debe ser uno de: `EXW`, `FCA`, `CPT`, `CIP`, `DAP`, `DPU`, `DDP`, `FAS`, `FOB`, `CFR`, `CIF`. |
| `codigoConsignatario`                                        | No               | Código de referencia del consignatario.                                                                    |
| `nombreComprador` / `direccionComprador` / `codigoComprador` | No               | Datos del comprador, cuando difiere del consignatario.                                                     |
| `nombreExportador` / `codigoExportador`                      | No               | Datos del exportador, cuando aplica.                                                                       |
| `otraReferencia`                                             | No               | Referencia adicional libre (p. ej. número de orden).                                                       |

Si el documento se marca como exportación (o el tipo es de exportación) y no se envía `datosExportacion`, el API rechaza la solicitud con `400 FEG_VALIDATION_ERROR` (mensaje: "El DTE de exportacion requiere el campo datosExportacion").

<Warning>
  **Solo Guatemala.** Una exportación con receptor Consumidor Final (`receptor.id: "CF"`) no puede tener un monto mayor o igual a Q2,500 (Acuerdo gubernativo 12-2023) — el API la rechaza antes de enviarla al certificador.
</Warning>

Cada país tiene su propio tipo de documento de exportación (factura de exportación en GT, FEX en SV, CEXP en DO) — vea el catálogo completo en [Tipos de documento](/dte/tipos-de-documento).

## Abonos pactados (pagos a plazos)

`abonosPactados[]` declara uno o más pagos asociados al documento. Fegora los ordena por fecha y les asigna un número consecutivo automáticamente.

| Campo        | Tipo   | Descripción                                                                                                                                                             |
| ------------ | ------ | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| `fecha`      | date   | Fecha pactada del abono.                                                                                                                                                |
| `monto`      | number | Monto del abono.                                                                                                                                                        |
| `metodoPago` | string | Forma de pago (uso libre; valores vistos en pruebas: `EFECTIVO`, `CHEQUE`, `TARJETA_CREDITO`, `TRANSFERENCIA`, `CREDITO`, `BONOS`, `PERMUTA`, `NOTA_CREDITO`, `OTROS`). |
| `duracion`   | string | Duración en formato ISO-8601 (p. ej. `P10D`, `P1M`). Opcional.                                                                                                          |

<Tabs>
  <Tab title="🇬🇹 Guatemala">
    Al incluir `abonosPactados` en una factura (`tipo: "factura"` o sin indicar `tipo`), Fegora detecta automáticamente que se trata de una **factura cambiaria** y agrega el complemento SAT correspondiente — no es necesario indicar un `tipo` distinto (aunque `tipo: "facturaCambiaria"` también se acepta explícitamente).

    ```json theme={null}
    {
      "receptor": { "id": "CF", "nombre": "CONSUMIDOR FINAL" },
      "items": [{ "descripcion": "Audífonos inalámbricos", "precioUnitario": 500 }],
      "abonosPactados": [
        { "fecha": "2026-08-14", "monto": 250 },
        { "fecha": "2026-09-14", "monto": 250 }
      ]
    }
    ```
  </Tab>

  <Tab title="🇸🇻 El Salvador / 🇩🇴 República Dominicana">
    En SV y DO, `abonosPactados` se usa típicamente para declarar múltiples formas de pago sobre un mismo documento (no necesariamente a plazo):

    ```json theme={null}
    {
      "abonosPactados": [
        { "monto": 60, "metodoPago": "EFECTIVO" },
        { "monto": 40, "metodoPago": "TARJETA_CREDITO" }
      ]
    }
    ```
  </Tab>
</Tabs>

## Plantillas de DTE

`GET /plantilla/dte` lista las plantillas de documento configuradas para una cuenta — útil para reutilizar una configuración de PDF o de tipos de documento ya definida, en vez de repetirla en cada integración.

```bash theme={null}
curl -X GET "https://api.fegora.com/plantilla/dte?idCuenta=12345678" \
  -H "Authorization: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9...ejemplo"
```

```json theme={null}
[
  {
    "id": "3c6f9e2a-1d4b-4a8e-9c0f-7a1b2c3d4e5f",
    "idCuenta": "12345678",
    "nombre": "Plantilla facturación mensual",
    "tiposDte": "factura,notaCredito",
    "archivoUri": "https://cdn.fegora.com/plantillas/3c6f9e2a.../plantilla.xlsx"
  }
]
```

## Envío por correo

`POST /dte/{id}/email` reenvía el documento certificado por correo electrónico.

```bash theme={null}
curl -X POST https://api.fegora.com/dte/8F3A1C2E-9B7D-4E51-8A0F-1234567890AB/email \
  -H "Authorization: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9...ejemplo"
```

Una solicitud exitosa responde `204 No Content`.

<Warning>
  El cuerpo de la petición acepta campos como `destinatarios`/`additionalRecipients` y `mensaje`/`customMessage` por compatibilidad, pero **no tienen efecto**: los destinatarios se resuelven automáticamente a partir del documento (el correo del receptor) y no se admite un mensaje personalizado. No dependa de estos campos para enviar a destinatarios adicionales o personalizar el mensaje.
</Warning>

## Resguardo de XML

`POST /dte/xml` permite ingresar en Fegora un XML de DTE ya certificado por otro medio (por ejemplo, un sistema de respaldo o un documento migrado), en vez de emitirlo a través de `POST /dte`.

<CodeGroup>
  ```bash JSON theme={null}
  curl -X POST https://api.fegora.com/dte/xml \
    -H "Content-Type: application/json" \
    -d '{
          "xmlContent": "PD94bWwgdmVyc2lvbj0iMS4wIj8+...ejemplo-base64",
          "isBase64Encoded": true
        }'
  ```

  ```bash Texto plano (legacy) theme={null}
  curl -X POST https://api.fegora.com/dte/xml \
    -H "Content-Type: text/plain" \
    -d 'PD94bWwgdmVyc2lvbj0iMS4wIj8+...ejemplo-base64'
  ```
</CodeGroup>

```json theme={null}
{
  "id": "2a7e9c1d-4f3b-4e8a-9c1d-7a1b2c3d4e5f",
  "serie": "2A7E9C1D",
  "numero": 1023,
  "numeroAcceso": "",
  "estado": "Certificado"
}
```

* Acepta el XML en base64 (por defecto) o como texto plano — controlado por `isBase64Encoded`.
* No requiere token de autenticación (`Authorization`).
* Es idempotente respecto al número de autorización contenido en el XML: reenviar el mismo XML no crea un duplicado. No hay validación de unicidad sobre `numeroTransaccion` en este endpoint.

## Recursos adjuntos

`POST /dte/{id}/recurso` agrega un archivo, una URL o una referencia a otro DTE relacionado, sobre un documento ya emitido.

```bash theme={null}
curl -X POST https://api.fegora.com/dte/8F3A1C2E-9B7D-4E51-8A0F-1234567890AB/recurso \
  -H "Content-Type: application/json" \
  -d '{
        "tipo": "archivo",
        "nombreArchivo": "orden-compra.pdf",
        "archivoStringBase64": "JVBERi0xLjQKJ...ejemplo-base64",
        "descripcion": "Orden de compra del cliente"
      }'
```

| Campo                                   | Aplica a `tipo` | Descripción                                  |
| --------------------------------------- | --------------- | -------------------------------------------- |
| `tipo`                                  | —               | `archivo`, `url` o `dte`.                    |
| `archivoStringBase64` + `nombreArchivo` | `archivo`       | Contenido del archivo en base64 y su nombre. |
| `uri` (o `url`)                         | `url`           | Dirección del recurso externo.               |
| `idDteRelacionado`                      | `dte`           | ID del DTE relacionado.                      |
| `descripcion`                           | cualquiera      | Descripción libre del recurso.               |

```json theme={null}
{
  "tipo": "archivo",
  "archivoUri": "https://cdn.fegora.com/recursos/8F3A1C2E-.../orden-compra.pdf",
  "descripcion": "Orden de compra del cliente"
}
```

No requiere token de autenticación. Los recursos agregados aparecen luego en el arreglo `recursos[]` al consultar el DTE con `GET /dte/{id}`.

## Páginas relacionadas

<Columns cols={2}>
  <Card title="Anulación de un DTE" icon="ban" href="/dte/anulacion">
    Cuándo y cómo anular un documento certificado.
  </Card>

  <Card title="Tipos de documento" icon="files" href="/dte/tipos-de-documento">
    Catálogo de tipos de documento por país, incluida la exportación.
  </Card>

  <Card title="Datos adicionales" icon="tag" href="/dte/datos-adicionales">
    Claves reservadas por país que viajan en `datosAdicionales`.
  </Card>

  <Card title="Carga masiva (lotes)" icon="file-spreadsheet" href="/dte/carga-masiva">
    Emitir muchos documentos a la vez con un archivo Excel.
  </Card>
</Columns>
