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

# Consultar un pedido y retirar el CAF

> Estado del pedido de timbraje. Cuando `status` es `completed`, la respuesta incluye el **CAF en XML** (`caf_xml`) y el rango de folios autorizado.

El CAF contiene la llave privada con la que se firman tus DTE: trátalo como un secreto. Cada entrega queda registrada.

Estados posibles:

| `status` | Qué significa |
|---|---|
| `pending` | Registrado, aún no empieza |
| `processing` | El trámite está corriendo en el SII |
| `completed` | Listo: `caf_xml` trae tus folios |
| `failed` | El SII no autorizó folios. No se consumió nada, puedes volver a pedir con otra `Idempotency-Key` |
| `authorized_without_caf` | El SII autorizó el rango pero no entregó el archivo. **Esos folios ya salieron de tu stock**: no vuelvas a pedir el mismo rango, estamos recuperando el CAF. `folio_start` y `folio_end` indican cuál |



## OpenAPI

````yaml api-reference/openapi-v2.json GET /folio-requests/{id}/
openapi: 3.0.0
info:
  title: Tupana API — v2
  description: >-
    API v2 de Tupana: facturación electrónica, cesiones, recaudación, consultas,
    boleta de honorarios y nómina. Los identificadores de recursos son public
    IDs opacos con prefijo (docu_, ment_, cred_, doce_, empl_…).
  version: 2.0.0
servers:
  - url: https://api.tupana.ai/v2
    description: Producción (v2)
security:
  - apiKeyAuth: []
paths:
  /folio-requests/{id}/:
    get:
      tags:
        - Folios
      summary: Consultar un pedido y retirar el CAF
      description: >-
        Estado del pedido de timbraje. Cuando `status` es `completed`, la
        respuesta incluye el **CAF en XML** (`caf_xml`) y el rango de folios
        autorizado.


        El CAF contiene la llave privada con la que se firman tus DTE: trátalo
        como un secreto. Cada entrega queda registrada.


        Estados posibles:


        | `status` | Qué significa |

        |---|---|

        | `pending` | Registrado, aún no empieza |

        | `processing` | El trámite está corriendo en el SII |

        | `completed` | Listo: `caf_xml` trae tus folios |

        | `failed` | El SII no autorizó folios. No se consumió nada, puedes
        volver a pedir con otra `Idempotency-Key` |

        | `authorized_without_caf` | El SII autorizó el rango pero no entregó el
        archivo. **Esos folios ya salieron de tu stock**: no vuelvas a pedir el
        mismo rango, estamos recuperando el CAF. `folio_start` y `folio_end`
        indican cuál |
      operationId: getFolioRequest_v2
      parameters:
        - name: id
          in: path
          required: true
          schema:
            type: integer
          description: ID del pedido de timbraje.
          example: 8821
      responses:
        '200':
          description: Pedido encontrado
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/FolioRequest'
              example:
                id: fir_8d4a2f7c1e9b5
                dte_type: 33
                status: completed
                requested_quantity: 50
                granted_quantity: 50
                folio_start: 539
                folio_end: 588
                caf_xml: <AUTORIZACION><CAF version="1.0">…</CAF></AUTORIZACION>
                idempotency_key: pedido-facturas-2026-08-27-01
                error: ''
                created_at: '2026-08-27T14:30:00Z'
                completed_at: '2026-08-27T14:32:11Z'
        '403':
          description: El pedido pertenece a otra entidad
          content:
            application/json:
              schema:
                type: object
                properties:
                  detail:
                    type: string
                    example: No tienes acceso a esta entidad.
        '404':
          description: Pedido no encontrado
          content:
            application/json:
              schema:
                type: object
                properties:
                  error:
                    type: string
                    example: Pedido no encontrado.
      security:
        - apiKeyAuth: []
components:
  schemas:
    FolioRequest:
      type: object
      description: Pedido de timbraje de folios ante el SII.
      properties:
        id:
          type: string
          example: fir_8d4a2f7c1e9b5
        dte_type:
          type: integer
          description: Tipo de documento timbrado.
          example: 33
        status:
          type: string
          enum:
            - pending
            - processing
            - completed
            - failed
            - authorized_without_caf
          description: >-
            `authorized_without_caf` significa que el SII autorizó el rango y no
            entregó el archivo: esos folios ya salieron de tu stock.
          example: completed
        requested_quantity:
          type: integer
          description: Folios que pediste.
          example: 50
        granted_quantity:
          type: integer
          nullable: true
          description: >-
            Folios que el SII autorizó. Puede ser menor al pedido: el tope por
            solicitud lo pone el SII y sube con el uso.
          example: 50
        partially_granted:
          type: boolean
          description: >-
            `true` cuando el SII entregó menos folios de los que pediste. Es un
            desenlace normal: el tope por solicitud lo fija el SII y sube con el
            uso de la empresa.
          example: true
        sii_max_per_request:
          type: integer
          nullable: true
          description: >-
            Tope por solicitud que el SII publicó al hacer este trámite: el
            motivo por el que se entregó menos de lo pedido.
          example: 9
        folio_start:
          type: integer
          nullable: true
          example: 539
        folio_end:
          type: integer
          nullable: true
          example: 588
        caf_xml:
          type: string
          nullable: true
          description: >-
            CAF entregado por el SII. Contiene la llave privada con la que se
            firman tus DTE: trátalo como secreto. Es `null` hasta que el pedido
            queda `completed`.
          example: <AUTORIZACION><CAF version="1.0">…</CAF></AUTORIZACION>
        idempotency_key:
          type: string
          description: La clave que enviaste al crear el pedido.
          example: pedido-facturas-2026-08-27-01
        error:
          type: string
          description: Motivo del SII cuando el pedido no terminó bien.
          example: ''
        created_at:
          type: string
          format: date-time
          example: '2026-08-27T14:30:00Z'
        completed_at:
          type: string
          format: date-time
          nullable: true
          example: '2026-08-27T14:32:11Z'
        sii_environment:
          type: string
          enum:
            - production
            - certification
          description: >-
            Ambiente del SII en el que se hizo la operación. Un CAF de
            `certification` NO sirve para emitir.
        error_code:
          type: string
          description: >-
            Vocabulario cerrado del desenlace fallido; vacío si no hubo error.
            Ver la página de códigos de error.
          enum:
            - ''
            - certification_not_enabled
            - missing_certificate
            - no_folios_authorized
            - sii_unavailable
            - sii_unrecognized_page
  securitySchemes:
    apiKeyAuth:
      type: apiKey
      in: header
      name: Authorization
      description: >-
        API Key para autenticación. Debe proporcionarse en el header
        Authorization con el formato: 'Api-Key YOUR-API-KEY' (incluye el prefijo
        'Api-Key ' seguido de tu API key)

````

This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.