> ## 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 estado de un lote de cesión

> Obtiene el estado agregado de un lote creado con POST /cessions/batch (identificado por el cession_batch_id recibido en el 202), junto con el detalle por documento — incluyendo el mensaje de error real del SII si alguna cesión falló. No requiere master_entity_id: el lote ya sabe a qué entidad pertenece.

## ¿Para qué se usa?

Sirve para **consultar el resultado de un lote creado con `POST /cessions/batch`**, usando el `cession_batch_id` que ese endpoint devuelve en el `202`. Es la forma correcta de confirmar si las cesiones realmente se generaron — el `202` solo indica que la solicitud fue aceptada y encolada, no que el SII las haya procesado con éxito.

## Qué hace

* Devuelve el **estado agregado** del lote: `pending`, `processing`, `completed` (todos los documentos se cedieron con éxito), `failed` (ninguno) o `partial` (una mezcla de éxitos y fallos).
* Incluye `success_count` y `failed_count` para saber de un vistazo cuántos documentos de los `total` terminaron bien.
* Devuelve `batch_cessions`: el detalle **por documento**, con su `folio`, `status` individual, el `cession_id` si tuvo éxito, y — muy importante — el **`error_message` real devuelto por el SII** si falló (por ejemplo, un error transitorio del portal, credenciales inválidas, o un documento que no cumple los requisitos para cesión).

## Por qué importa

Antes de este endpoint, si el SII fallaba (incluso de forma transitoria) al generar una cesión, no había ninguna forma de saberlo desde la API: no se creaba ninguna cesión, y el único registro del intento quedaba en logs internos de Tupana. Con este endpoint, cualquier integración puede hacer *polling* del `cession_batch_id` recibido y saber con certeza qué pasó con cada documento — sin depender de notificaciones en tiempo real ni de revisar manualmente.

## Ejemplos de uso

* Después de llamar a `POST /cessions/batch`, consultar este endpoint (con reintentos espaciados) hasta que `status` deje de ser `pending`/`processing`.
* Mostrar en tu sistema qué documentos de un lote fallaron y por qué, para poder reintentarlos o escalar el error.
* Auditar el historial de intentos de cesión de una integración sin depender de que el equipo de Tupana revise logs internos.


## OpenAPI

````yaml GET /cessions/batch/{batch_id}
openapi: 3.0.0
info:
  title: Tupana API
  description: API para integración con el sistema Tupana - Facturación Electrónica
  version: 1.0.0
servers:
  - url: https://api.tupana.ai/v1
    description: Servidor de producción
security:
  - apiKeyAuth: []
paths:
  /cessions/batch/{batch_id}:
    get:
      tags:
        - Cesiones
      summary: Consultar el estado de un lote de cesión
      description: >-
        Obtiene el estado agregado de un lote creado con POST /cessions/batch
        (identificado por el cession_batch_id recibido en el 202), junto con el
        detalle por documento — incluyendo el mensaje de error real del SII si
        alguna cesión falló. No requiere master_entity_id: el lote ya sabe a qué
        entidad pertenece.
      operationId: getCessionBatchStatus
      parameters:
        - name: batch_id
          in: path
          required: true
          description: cession_batch_id devuelto por POST /cessions/batch
          schema:
            type: string
            format: uuid
      responses:
        '200':
          description: Estado del lote y detalle por documento
          content:
            application/json:
              schema:
                type: object
                properties:
                  id:
                    type: string
                    format: uuid
                  status:
                    type: string
                    enum:
                      - pending
                      - processing
                      - completed
                      - failed
                      - partial
                    description: >-
                      completed = todos los documentos se cedieron con éxito.
                      failed = ninguno. partial = una mezcla.
                  total:
                    type: integer
                  success_count:
                    type: integer
                  failed_count:
                    type: integer
                  assignee_business_name:
                    type: string
                  assignee_rut:
                    type: string
                  created_at:
                    type: string
                    format: date-time
                  error_message:
                    type: string
                    nullable: true
                    description: >-
                      Error general del lote (ej. sin credenciales SII válidas),
                      si aplica
                  batch_cessions:
                    type: array
                    description: Un item por documento incluido en el lote
                    items:
                      type: object
                      properties:
                        document_id:
                          type: integer
                        folio:
                          type: string
                        status:
                          type: string
                          enum:
                            - pending
                            - processing
                            - success
                            - failed
                        cession_id:
                          type: integer
                          nullable: true
                          description: >-
                            ID de la DocumentCession creada, solo si
                            status=success
                        error_message:
                          type: string
                          nullable: true
                          description: >-
                            Mensaje real del último intento fallido contra el
                            SII, si status=failed
              example:
                id: e7877303-1a03-424d-a024-48c1de218611
                status: failed
                total: 1
                success_count: 0
                failed_count: 1
                assignee_business_name: CAPITAL EXPRESS SERVICIOS FINANCIEROS SA.
                assignee_rut: 76083507-2
                created_at: '2026-08-05T20:18:53.703Z'
                error_message: null
                batch_cessions:
                  - document_id: 4929562
                    folio: '674'
                    status: failed
                    cession_id: null
                    error_message: 'Error al contribuyente. Código SII: 02.35.209.54.211.2'
        '403':
          description: No tienes acceso a este lote de cesión
          content:
            application/json:
              schema:
                type: object
                properties:
                  detail:
                    type: string
        '404':
          description: Lote no encontrado
          content:
            application/json:
              schema:
                type: object
                properties:
                  detail:
                    type: string
      security:
        - apiKeyAuth: []
components:
  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)

````