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

# Eliminar factura

> Cancela el Payment asociado y elimina la factura.

### Path params

<ParamField path="invoice_id" type="string" required placeholder="2f2b1e5a-1a2b-4c33-8a18-5e9f3b9f4b1a">
  ID de la factura a eliminar. [Crear factura](/client/invoices/create).
</ParamField>

### Body

<ParamField body="reason" type="string" placeholder="DELETE_FROM_PROVIDER" default="DELETE_FROM_PROVIDER">
  Motivo de la eliminación. Valores permitidos:

  * `DELETE_FROM_PROVIDER` — La factura fue eliminada desde el proveedor. Se notifica al cliente que la factura fue eliminada.
  * `PAID_FROM_PROVIDER` — La factura fue pagada fuera de OnePay. El pago se cancela silenciosamente sin enviar eventos.
</ParamField>

<ParamField body="provider_payment_id" type="string" placeholder="EXT-REF-001">
  Referencia del pago externo en el proveedor. Solo aplica cuando `reason` es `PAID_FROM_PROVIDER`.

  Cuando se envía este campo junto con `reason=PAID_FROM_PROVIDER`, OnePay genera automáticamente un **recibo de pago en PDF** y lo envía al cliente por WhatsApp, confirmando que su pago fue registrado por la empresa.

  <Note>
    Este campo es opcional. Si no se envía, la factura se elimina sin enviar ningún recibo al cliente.
  </Note>
</ParamField>

### Ejemplos de uso

<Tabs>
  <Tab title="curl">
    ```bash theme={null}
    curl https://api.onepay.la/v1/invoices/2f2b1e5a-1a2b-4c33-8a18-5e9f3b9f4b1a \
      -X DELETE \
      -H "Authorization: Bearer sk_test_xxx" \
      -H "Content-Type: application/json" \
      -d '{
        "reason": "PAID_FROM_PROVIDER",
        "provider_payment_id": "EXT-REF-001"
      }'
    ```
  </Tab>

  <Tab title="JavaScript">
    ```ts theme={null}
    const response = await fetch('https://api.onepay.la/v1/invoices/2f2b1e5a-1a2b-4c33-8a18-5e9f3b9f4b1a', {
      method: 'DELETE',
      headers: {
        'Authorization': 'Bearer sk_test_xxx',
        'Content-Type': 'application/json',
      },
      body: JSON.stringify({
        reason: 'PAID_FROM_PROVIDER',
        provider_payment_id: 'EXT-REF-001',
      }),
    });
    // 204 No Content
    ```
  </Tab>

  <Tab title="Python">
    ```python theme={null}
    import requests

    response = requests.delete(
        'https://api.onepay.la/v1/invoices/2f2b1e5a-1a2b-4c33-8a18-5e9f3b9f4b1a',
        headers={'Authorization': 'Bearer sk_test_xxx'},
        json={
            'reason': 'PAID_FROM_PROVIDER',
            'provider_payment_id': 'EXT-REF-001',
        },
    )
    # 204 No Content
    ```
  </Tab>
</Tabs>

### Response

<ResponseExample>
  ```json 204 theme={null}
  no content
  ```

  ```json 404 theme={null}
  {
    "message": "La factura no existe o pertenece a otra compañía.",
    "code": 10004,
    "code_name": "not_found"
  }
  ```

  ```json 409 theme={null}
  {
    "message": "No se puede eliminar una factura que ya fue pagada o conciliada.",
    "code": 10009,
    "code_name": "conflict"
  }
  ```
</ResponseExample>

<Note>
  Solo puedes eliminar facturas que pertenezcan a tu compañía y que **no** estén en estado `PAID` o `CONCILIATED`.
</Note>
