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

# Trigger Fiscal Sync

> Disparar la sincronización de documentos fiscales desde el SAT (México) o la DIAN (Colombia)

Dispara una sincronización fiscal para la compañía asociada a tu API key. Payana resuelve el país automáticamente: **México** usa extracción SAT (Satws); **Colombia** inicia el flujo DIAN vía sincronización automática por correo.

El endpoint **no acepta parámetros en el body**. La ventana de fechas se calcula en el servidor según el país y el historial de sincronización de la compañía.

## Requisitos previos

### México (SAT)

* CIEC registrada y **válida** en Payana para el RFC de la compañía.
* La API key debe pertenecer a una compañía de México.

### Colombia (DIAN)

* [Sincronización automática DIAN](/integracion-dian/sincronizacion-automatica) configurada (reenvío del correo de la DIAN a Payana).
* Credenciales DIAN registradas en Payana (NIT empresa y representante legal).

## Comportamiento

| País    | Qué hace el `202 Accepted`                                                       | Ventana de sincronización                                                           |
| ------- | -------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------- |
| **MEX** | Crea una extracción Satws de facturas recibidas                                  | Últimas **24 horas** (zona `America/Mexico_City`)                                   |
| **COL** | Solicita token de acceso DIAN y deja lista la ventana para el pipeline de correo | Desde `last_sync_at + 1 día` hasta hoy; si nunca hubo sync, **45 días** hacia atrás |

<Warning>
  En **Colombia**, la respuesta `202` significa que Payana **aceptó** la solicitud y solicitó el token DIAN. La descarga de facturas ocurre **de forma asíncrona** cuando el pipeline de correo procesa el enlace de la DIAN. Consulta el progreso con [`GET /fiscal-sync/status`](/api-reference/fiscal-sync/status).
</Warning>

Cuando aparezcan documentos nuevos, Payana puede enviar el webhook [`document.created`](/api-reference/documents/webhooks/documento-recibido).

## Rate limit

Solo se permite **una sincronización fiscal por hora** por compañía (independiente del país). Si superas el límite, recibes `429` con el campo `retry_after_seconds`.

## Ejemplo

```bash theme={null}
curl -X POST "https://api.prod.payana.cloud/public/api/v1/fiscal-sync" \
  -H "api-key: YOUR_API_KEY"
```

### Respuesta exitosa — México

```json theme={null}
{
  "country": "MEX",
  "status": "accepted",
  "started_at": "2026-06-22T15:30:00.000Z",
  "sync_from": "2026-06-21T15:30:00.000-06:00",
  "sync_to": "2026-06-22T15:30:00.000-06:00",
  "extraction_id": "ext-abc123"
}
```

### Respuesta exitosa — Colombia

```json theme={null}
{
  "country": "COL",
  "status": "accepted",
  "started_at": "2026-06-22T15:30:00.000Z",
  "sync_from": "2026-06-10",
  "sync_to": "2026-06-22"
}
```

## Errores

| Código HTTP | Código                                  | Cuándo                                                                     |
| ----------- | --------------------------------------- | -------------------------------------------------------------------------- |
| `401`       | —                                       | Falta el header `api-key` o la clave es inválida.                          |
| `403`       | `dian_automatic_sync_not_configured`    | Colombia: la compañía no tiene reenvío de correo DIAN configurado.         |
| `422`       | `sat_credentials_not_configured`        | México: no hay CIEC registrada.                                            |
| `422`       | `sat_ciec_pending`                      | México: la CIEC está en validación.                                        |
| `422`       | `sat_ciec_invalid`                      | México: la CIEC es inválida o fue rechazada por el SAT.                    |
| `422`       | `dian_credentials_not_configured`       | Colombia: faltan credenciales DIAN.                                        |
| `422`       | `dian_sync_window_empty`                | Colombia: no hay documentos nuevos (la última sync es demasiado reciente). |
| `422`       | `fiscal_sync_not_supported_for_country` | El país de la compañía no soporta este endpoint.                           |
| `429`       | `fiscal_sync_rate_limited`              | Ya se disparó una sync en la última hora. Revisa `retry_after_seconds`.    |

Para consultar el estado después de un `202`, usa [`GET /fiscal-sync/status`](/api-reference/fiscal-sync/status) pasando `started_at` con el valor de `started_at` de la respuesta.


## OpenAPI

````yaml POST /fiscal-sync
openapi: 3.1.0
info:
  title: Payana Accounts Payable API
  description: >-
    API pública para gestionar cuentas por pagar (payments) y beneficiarios
    (beneficiaries) en Payana, incluyendo notificaciones por webhooks cuando se
    procesan pagos.
  version: 1.0.0
servers:
  - url: https://api.prod.payana.cloud/public/api/v1
    description: Production
  - url: https://api.develop.payana.cloud/public/api/v1
    description: Develop
security:
  - apiKeyAuth: []
tags:
  - name: Payments
    description: Crear y listar pagos
  - name: Beneficiaries
    description: Crear, listar y consultar beneficiarios
  - name: Webhooks
    description: Eventos de webhooks enviados por Payana
  - name: Banks
    description: Listar y consultar bancos
  - name: Transactions In
    description: Transacciones entrantes (polling, mismo formato que webhooks)
  - name: Documents
    description: Listar, consultar y operar documentos (cuentas por pagar)
  - name: DIAN Events
    description: >-
      Encolar eventos DIAN (030 Acuse de recibo, 031 Reclamo, 032 Recibo del
      bien, 033 Aceptación expresa, 034 Aceptación tácita) para documentos
      identificados por CUFE. El procesamiento es asíncrono.
  - name: Fiscal Sync
    description: >-
      Disparar y consultar sincronización de documentos fiscales desde el SAT
      (México) o la DIAN (Colombia).
  - name: Workflow Steps
    description: >-
      Resolver el paso en que está parado un documento dentro de su flujo:
      aprobación, clasificación o etiquetado.
paths:
  /fiscal-sync:
    post:
      tags:
        - Fiscal Sync
      summary: Trigger fiscal sync (SAT or DIAN)
      description: >-
        Dispara una sincronización fiscal para la compañía asociada a la API
        key. El país se resuelve automáticamente.


        **México:** crea una extracción Satws de facturas recibidas en las
        últimas 24 horas (zona `America/Mexico_City`). Requiere CIEC válida.


        **Colombia:** solicita token DIAN y persiste la ventana de fechas para
        el pipeline de correo. Requiere sincronización automática DIAN y
        credenciales configuradas. La descarga de facturas es **asíncrona** —
        consulta `GET /fiscal-sync/status`.


        No acepta parámetros en el body. Rate limit: **1 sync por hora** por
        compañía.
      responses:
        '202':
          description: >-
            Solicitud aceptada. La sincronización fue iniciada (MEX) o encolada
            (COL).
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/FiscalSyncTriggerResponse'
              examples:
                mexico:
                  summary: México — extracción Satws
                  value:
                    country: MEX
                    status: accepted
                    started_at: '2026-06-22T15:30:00.000Z'
                    sync_from: '2026-06-21T15:30:00.000-06:00'
                    sync_to: '2026-06-22T15:30:00.000-06:00'
                    extraction_id: ext-abc123
                colombia:
                  summary: Colombia — token DIAN solicitado
                  value:
                    country: COL
                    status: accepted
                    started_at: '2026-06-22T15:30:00.000Z'
                    sync_from: '2026-06-10'
                    sync_to: '2026-06-22'
        '401':
          description: Header `api-key` ausente o inválido.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/FiscalSyncError'
              example:
                message: API key is required
        '403':
          description: 'Colombia: sincronización automática DIAN no configurada.'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/FiscalSyncError'
              example:
                status: 403
                code: dian_automatic_sync_not_configured
                message: >-
                  Esta compañía no tiene sincronización automática DIAN
                  configurada. Configure el reenvío de correo DIAN a Payana
                  antes de usar este endpoint.
        '422':
          description: >-
            Credenciales faltantes, CIEC inválida, ventana vacía o país no
            soportado.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/FiscalSyncError'
              examples:
                sat_credentials:
                  summary: México — sin CIEC
                  value:
                    status: 422
                    code: sat_credentials_not_configured
                    message: >-
                      No hay credenciales SAT (CIEC) configuradas para esta
                      compañía.
                dian_window_empty:
                  summary: Colombia — sin documentos nuevos
                  value:
                    status: 422
                    code: dian_sync_window_empty
                    message: >-
                      No hay un intervalo de documentos nuevos para sincronizar.
                      La última sincronización es demasiado reciente.
        '429':
          description: 'Rate limit: solo una sync fiscal por hora por compañía.'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/FiscalSyncRateLimitError'
              example:
                status: 429
                code: fiscal_sync_rate_limited
                message: Solo se permite una sincronización fiscal por hora.
                retry_after_seconds: 1800
components:
  schemas:
    FiscalSyncTriggerResponse:
      type: object
      required:
        - country
        - status
        - started_at
        - sync_to
      properties:
        country:
          type: string
          enum:
            - MEX
            - COL
          description: País de la compañía.
        status:
          type: string
          const: accepted
          description: La solicitud fue aceptada.
        started_at:
          type: string
          format: date-time
          description: >-
            Timestamp de inicio. Úsalo como `started_at` en `GET
            /fiscal-sync/status`.
        sync_from:
          type:
            - string
            - 'null'
          description: >-
            Inicio de la ventana de sincronización (ISO 8601 en MEX, fecha
            `YYYY-MM-DD` en COL).
        sync_to:
          type: string
          description: Fin de la ventana de sincronización.
        extraction_id:
          type: string
          description: >-
            Identificador Satws de la extracción. Solo presente en respuestas de
            México.
    FiscalSyncError:
      type: object
      properties:
        status:
          type: integer
          description: Código HTTP.
        code:
          type: string
          description: Código de error estable (snake_case).
          enum:
            - sat_credentials_not_configured
            - sat_ciec_invalid
            - sat_ciec_pending
            - dian_automatic_sync_not_configured
            - dian_credentials_not_configured
            - dian_sync_window_empty
            - fiscal_sync_not_supported_for_country
            - company_not_found
            - user_not_found
        message:
          type: string
    FiscalSyncRateLimitError:
      allOf:
        - $ref: '#/components/schemas/FiscalSyncError'
        - type: object
          required:
            - retry_after_seconds
          properties:
            code:
              type: string
              const: fiscal_sync_rate_limited
            retry_after_seconds:
              type: integer
              description: Segundos restantes antes de poder disparar otra sync.
              example: 1800
  securitySchemes:
    apiKeyAuth:
      type: apiKey
      in: header
      name: api-key
      description: API key provista por Payana.

````