---
title: "API de gastos"
description: "Endpoints v1 para registrar gastos menores (E43) sin proveedor identificable y sólo con líneas exentas de ITBIS."
canonical: https://factura.com.do/desarrolladores/gastos
lang: es
generator: factura.com.do docs-index
---

Recurso · E43 

# API de gastos

El recurso `/expenses` registra gastos menores (E43): viáticos, peajes, propinas y otros egresos sin proveedor identificable. La regla operativa que el handler aplica hoy es de impuesto, no de monto: el comprobante solo acepta líneas con ITBIS exento (0%).

## Resumen

El DTO `V1CreateMinorExpenseDto` es similar al de compras pero no expone `supplierId`: el E43 vive sin proveedor identificable. La validación específica del E43 que vive en el dominio (`E43DocumentValidations.ValidateRequiredTax`) exige que cada línea use el impuesto exento (rate 0%); si una línea trae 18% u otra tasa, el handler rechaza el documento. Para egresos con proveedor formal y RNC, registra el comprobante como compra (E41).

## Operaciones disponibles

- [ GET /api/v1/expenses ](#expenses-list)— Devuelve un PagedResult con los gastos, compras y pagos al exterior del espacio de trabajo; esta ruta no filtra por tipo de e-CF.
- [ GET /api/v1/expenses/{id} ](#expenses-get)— Devuelve el detalle completo de un gasto menor (E43).
- [ POST /api/v1/expenses ](#expenses-create)— Registra un gasto menor (E43) con detalle por líneas hasta el tope DGII.
- [ POST /api/v1/expenses/{id}/void ](#expenses-void)— Anula el comprobante; si la DGII ya lo aceptó, emite una nota de crédito (E34) y devuelve su creditNoteId.
- [ POST /api/v1/expenses/{id}/edit-amount ](#expenses-edit-amount)— Emite una nota de débito (E33) que corrige los montos de el comprobante y devuelve el documentId de esa nota; el original no se modifica.
- [ POST /api/v1/expenses/{id}/edit-text ](#expenses-edit-text)— Emite una nota de débito (E33) que corrige la descripción de las líneas de el comprobante y devuelve el documentId de esa nota; el original no se modifica.

[  GET /api/v1/expenses X-Api-Key Estable Devuelve un PagedResult con los gastos, compras y pagos al exterior del espacio de trabajo; esta ruta no filtra por tipo de e-CF. ](#) 

| Nombre           | Tipo             | Descripción                                                     |
| ---------------- | ---------------- | --------------------------------------------------------------- |
| pageNumber query | integer Opcional | Página solicitada. Por defecto 1.                               |
| pageSize query   | integer Opcional | Tamaño de página. Por defecto 10\. La API no impone un máximo.  |
| search query     | string Opcional  | Filtra por número de comprobante o descripciones de las líneas. |

[  GET /api/v1/expenses/{id} X-Api-Key Estable Devuelve el detalle completo de un gasto menor (E43). ](#) 

| Nombre  | Tipo                    | Descripción              |
| ------- | ----------------------- | ------------------------ |
| id path | string (uuid) Requerido | Identificador del gasto. |

[  POST /api/v1/expenses X-Api-Key Estable Registra un gasto menor (E43) con detalle por líneas hasta el tope DGII. ](#) 

| Nombre                        | Tipo                        | Descripción                                                                                                                                                                                                                   |
| ----------------------------- | --------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| branchId body                 | string (uuid) Requerido     | Sucursal receptora dentro del espacio de trabajo.                                                                                                                                                                             |
| sequence body                 | string Opcional             | Opcional. NCF E43 a usar (formato \`E430000000000\`). Si lo omites, la API toma el siguiente de la secuencia activa; si no hay una secuencia E43 activa, responde \`500\`.                                                    |
| externalReference body        | string Opcional             | Referencia externa libre del emisor (orden, ticket, ID en tu sistema).                                                                                                                                                        |
| issuedAt body                 | string (ISO 8601) Requerido | Fecha de emisión del comprobante.                                                                                                                                                                                             |
| paymentTermId body            | integer Requerido           | Identificador del término de pago aplicable.                                                                                                                                                                                  |
| limitDate body                | string (ISO 8601) Requerido | Fecha límite asociada al término de pago.                                                                                                                                                                                     |
| currencyId body               | integer Requerido           | Identificador de la moneda del comprobante.                                                                                                                                                                                   |
| currencyRate body             | decimal Requerido           | Tasa de cambio aplicada (1 cuando la moneda coincide con DOP).                                                                                                                                                                |
| freight body                  | decimal Opcional            | Monto del flete o transporte cuando aplica.                                                                                                                                                                                   |
| notes body                    | string Opcional             | Notas libres impresas en el comprobante.                                                                                                                                                                                      |
| tipoBienServicioComprado body | integer Requerido           | Tipo de bienes y servicios comprados según la clasificación del formato 606 de la DGII (1 a 11). Envíalo siempre, porque la API no lo valida; si lo omites, guarda 0 sin avisar y el 606 sale con ese egreso mal clasificado. |
| lines body                    | V1LineDto\[\] Requerido     | Líneas con concepto, cantidad, precio unitario, descuento, recargo, impuestos y retenciones aplicables.                                                                                                                       |
| payments body                 | V1PaymentDto\[\] Opcional   | Opcional. Pagos asociados al comprobante; cada elemento lleva referencia y monto. Si lo omites, no se registra ningún pago.                                                                                                   |

[  POST /api/v1/expenses/{id}/void X-Api-Key Estable Anula el comprobante; si la DGII ya lo aceptó, emite una nota de crédito (E34) y devuelve su creditNoteId. ](#) 

| Nombre  | Tipo                    | Descripción              |
| ------- | ----------------------- | ------------------------ |
| id path | string (uuid) Requerido | Identificador del gasto. |

[  POST /api/v1/expenses/{id}/edit-amount X-Api-Key Estable Emite una nota de débito (E33) que corrige los montos de el comprobante y devuelve el documentId de esa nota; el original no se modifica. ](#) 

| Nombre                      | Tipo                              | Descripción                                                                                                                |
| --------------------------- | --------------------------------- | -------------------------------------------------------------------------------------------------------------------------- |
| id path                     | string (uuid) Requerido           | Identificador del gasto.                                                                                                   |
| lines body                  | V1EditAmountLineDto\[\] Requerido | Lista de líneas a editar. Cada elemento referencia el orden de la línea original y los campos que se desean sobreescribir. |
| lines\[\].order body        | integer Requerido                 | Posición de la línea en el comprobante original (1 para la primera, 2 para la segunda…).                                   |
| lines\[\].quantity body     | decimal Opcional                  | Nueva cantidad. Solo se aplica si se envía.                                                                                |
| lines\[\].unitPrice body    | decimal Opcional                  | Nuevo precio unitario. Solo se aplica si se envía.                                                                         |
| lines\[\].discount body     | decimal Opcional                  | Nuevo descuento aplicable a la línea.                                                                                      |
| lines\[\].recharge body     | decimal Opcional                  | Nuevo recargo aplicable a la línea.                                                                                        |
| lines\[\].taxes body        | V1TaxDto\[\] Opcional             | Nueva lista de impuestos aplicables a la línea.                                                                            |
| lines\[\].withholdings body | V1WithholdingDto\[\] Opcional     | Nueva lista de retenciones aplicables a la línea.                                                                          |

[  POST /api/v1/expenses/{id}/edit-text X-Api-Key Estable Emite una nota de débito (E33) que corrige la descripción de las líneas de el comprobante y devuelve el documentId de esa nota; el original no se modifica. ](#) 

| Nombre                     | Tipo                            | Descripción                                                                                              |
| -------------------------- | ------------------------------- | -------------------------------------------------------------------------------------------------------- |
| id path                    | string (uuid) Requerido         | Identificador del comprobante.                                                                           |
| lines body                 | V1EditTextLineDto\[\] Requerido | Lista de líneas a editar. Cada elemento referencia el orden de la línea original y la nueva descripción. |
| lines\[\].order body       | integer Requerido               | Posición de la línea en el comprobante original (1 para la primera, 2 para la segunda…).                 |
| lines\[\].description body | string Requerido                | Nueva descripción a imprimir en la línea.                                                                |

## Ejemplo: registrar gasto menor

El cuerpo replica el de una compra (E41) sin `supplierId`: `branchId`, `tipoBienServicioComprado` (clasificación del 606, de 1 a 11), `sequence` (opcional: si lo omites, se usa el siguiente NCF E43 de la secuencia activa), `lines` y `payments`. Envía siempre `tipoBienServicioComprado`: la API no lo valida y, si falta, guarda 0 sin avisar y el 606 sale mal. Para egresos sin ITBIS la línea va con `isExempt: true` y `taxes` vacío. El listado de `/expenses` devuelve gastos, compras y pagos al exterior mezclados, y `edit-amount` y `edit-text` emiten una nota de débito (E33) nueva. La respuesta es la convención del recurso: `documentId` y `consultationUrl`.

POST /api/v1/expenses

cURL TypeScript 

expense.sh

```

curl -X POST https://tuempresa.factura.com.do/api/v1/expenses \

  -H "X-Api-Key: $FACTURA_API_KEY" \

  -H "Content-Type: application/json" \

  -d '{

    "branchId": "b1a2c3d4-e5f6-4789-abcd-1234567890ab",

    "sequence": "E430000000001",

    "issuedAt": "2026-05-08T10:00:00Z",

    "paymentTermId": 1,

    "limitDate": "2026-05-08T10:00:00Z",

    "currencyId": 1,

    "currencyRate": 1,

    "tipoBienServicioComprado": 2,

    "notes": "Peaje autopista Las Américas",

    "lines": [

      {

        "code": "PEAJE",

        "order": 1,

        "description": "Peaje autopista Las Américas",

        "isService": true,

        "quantity": 1,

        "unitId": 1,

        "unitPrice": 350.00,

        "isExempt": true,

        "taxes": []

      }

    ],

    "payments": [

      { "reference": "EFECTIVO", "amount": 350.00 }

    ]

  }'


```

expense.ts

```

const res = await fetch(

  "https://tuempresa.factura.com.do/api/v1/expenses",

  {

    method: "POST",

    headers: {

      "X-Api-Key": process.env.FACTURA_API_KEY!,

      "Content-Type": "application/json",

    },

    body: JSON.stringify({

      branchId,

      sequence: "E430000000001",

      issuedAt: new Date().toISOString(),

      paymentTermId: 1,

      limitDate: new Date().toISOString(),

      currencyId: 1,

      currencyRate: 1,

      tipoBienServicioComprado: 2, // clasificación 606 (1 a 11); si falta, se guarda 0

      notes: "Peaje autopista Las Américas",

      lines,

      payments,

    }),

  },

);

if (!res.ok) throw new Error(`factura.com.do: ${res.status}`);

const { documentId, consultationUrl } = await res.json();


```

Respuesta

response.json

```

{

  "documentId": "e3b0c442-98fc-4c14-9afb-f4c8996fb924",

  "consultationUrl": "https://ecf.dgii.gov.do/ecf/ConsultaTimbre?RNCEmisor=131000001&ENCF=E430000000001&…"

}


```

### Ejemplo: 400 cuando una línea trae ITBIS distinto a exento

El handler invoca `ValidateE43Rules` sobre las tasas declaradas. Si encuentra una distinta de cero responde con la regla del dominio textual.

400-impuesto-no-exento.json

```

{

  "success": false,

  "message": "Los comprobantes E43 (Comprobante para gastos menores) solo permiten el impuesto exento (0%)."

}


```

## Gasto menor vs. compra formal

- **Gasto menor (E43)**: sin proveedor identificable, líneas con ITBIS exento. Casos: peaje, propina, viáticos puntuales.
- **Compra formal (E41)**: proveedor en tu catálogo no registrado en la DGII, líneas con ITBIS y retenciones. Casos: insumos, servicios profesionales, alquileres.

El tope DGII se publica externamente

 La DGII publica un tope monetario para gastos menores en su [guía oficial](https://dgii.gov.do/cicloContribuyente/facturacion/comprobantesFiscales/Paginas/tiposComprobantes.aspx); ese tope no lo aplica el handler de factura.com.do hoy. Consulta la guía antes de salir a producción y, si tu integración debe respetar el tope, valida el monto del lado tuyo antes de hacer POST. 

## Siguientes pasos

Siguiente paso 

## Continúa por aquí

- [  Compras Comprobante E41 para egresos con factura formal del proveedor. ](/desarrolladores/compras)
- [  Webhooks Eventos dgii.aprobado y dgii.rechazado también aplican a E43. ](/desarrolladores/webhooks)
- [  Errores Cómo reaccionar cuando una línea trae impuesto no exento o el cuerpo es inválido. ](/desarrolladores/errores)
