---
title: "Estado de una aprobación pendiente"
method: POST
path: "/v1/tools/notta.dte.aprobacion/execute"
tags: ["notta"]
---

# Estado de una aprobación pendiente

`POST /v1/tools/notta.dte.aprobacion/execute`

## Request

- Base URL: `https://connect.emisso.ai/api`
- URL: `https://connect.emisso.ai/api/v1/tools/notta.dte.aprobacion/execute`
- Auth: one of:
  - HTTP bearer
  - OAuth 2 (authorization code, authorization URL `https://connect.emisso.ai/authorize`, token URL `https://connect.emisso.ai/token`, scopes: `notta:read`)

Devuelve en qué quedó una aprobación pendiente. El id NO es el del documento: lo devuelve la emisión cuando el documento queda esperando que una persona lo apruebe en Notta. Dice si sigue pendiente, si se aprobó, se rechazó o venció, el documento que salió de ella cuando lo hay, y qué le toca hacer a quien llama.

## Headers

- `X-Connect-Connection` string, required

## Request body

- object
  - `input` NottaDteAprobacionInput, required
    - `id` string, uuid, required: UUID de la solicitud de aprobación: el `pending_id` que devolvió el 202 de `POST /dtes`. NO es el `id` del documento, que aparece en `result_ref` cuando la aprobación termina.

## Response `200`

La tool corrió bien. 'data' es la salida de la tool tal cual, y 'meta' trae el 'request_id' que identifica esta llamada en la bitácora.

- object
  - `data` NottaDteAprobacionOutput, required
    - `id` string, uuid, required: UUID de esta solicitud de aprobación (el `pending_id` del 202). NO es el `id` del documento: ese llega en `result_ref` cuando la aprobación termina.
    - `status` 'pending' | 'approved' | 'rejected' | 'expired', required: `pending` = esperando a una persona, no hay nada emitido todavía. `approved` = alguien aprobó y el documento siguió su curso (míralo en `result_ref`). `rejected` = alguien lo rechazó y no se emitió nada; el motivo va en `rejection_reason`. `expired` = venció `expires_at` sin que nadie decidiera, y tampoco se emitió nada. Los tres últimos son finales: reintentar esta solicitud no la revive.
    - `kind` 'emit_dte' | 'recepcion_evento', required: Qué está esperando aprobación: `emit_dte` (emitir un documento) o `recepcion_evento` (aceptar o reclamar un documento recibido).
    - `result_ref` string, uuid, nullable, required: El DTE que salió de la aprobación. Presente TAMBIÉN si el SII lo rechazó (D36).
    - `rejection_reason` string, nullable, required: El motivo que escribió la persona al rechazar (D41). null si no dijo por qué.
    - `expires_at` string, required: Instante ISO-8601 en que la solicitud vence si nadie decide. Pasado ese punto queda en `expired` y hay que volver a pedir la operación desde cero.
    - `resolved_at` string, nullable, required: Instante en que una persona aprobó o rechazó. null mientras siga `pending`.
    - `created_at` string, required: Instante en que se creó la solicitud.
    - `next_action` 'wait_for_human_approval' | 'get_dte' | 'fix_and_retry' | 'emit_dte_again', required: Qué le toca al llamante en este estado, en el vocabulario que el resto de la API ya usa.
    - `links` object: Presente solo cuando hay `result_ref`.
      - `dte` string, required: Ruta del documento que salió de la aprobación.
  - `meta` ResponseMeta
    - `request_id` string, required: Identificador que el servidor le da a esta llamada (req_…). Correlaciona con la fila de la bitácora y es lo primero que pide soporte: guárdalo en tus logs.
    - `operation_request_id` string, uuid: Identidad del intento e-Boleta original. Se conserva al reproducir el resultado del journal; request_id identifica la llamada actual.
    - `tool_id` string, required: La tool que se ejecutó, con su id punteado.
    - `plane` 'action' | 'read', required: 'read' = la llamada escribió en el plano persistido (un sync). 'action' = efímera, no persistió nada de negocio: actuar afuera, o leer lo que un sync ya dejó.
    - `latency_ms` integer, required: Cuánto tardó la ejecución, en milisegundos.
    - `audit_status` 'recorded' | 'degraded', required: 'recorded' = la bitácora recibió la fila de esta llamada. 'degraded' = la acción se hizo pero el registro cayó a un respaldo duradero. Nunca convierte una acción exitosa en un error, porque reintentar por eso sería pagar o emitir dos veces.
    - `idempotency` 'replayed': Presente solo cuando una tool destructiva devolvió la respuesta guardada de un intento previo con la misma Idempotency-Key. Significa que en ESTA llamada no ocurrió ningún efecto nuevo.

## Other responses

- `400`: validation_error (400)
- `401`: unauthorized (401)
- `403`: scope_not_granted | connection_scope_not_enabled | alcance_not_enabled
- `404`: tool_not_found (404)
- `409`: connection_ambiguous | connection_busy
- `428`: connection_credential_required (428)
- `500`: internal_error (500)

---

[API](https://skmtc.dev/emisso/apis/emisso-connect-api.md) · [All operations](https://skmtc.dev/emisso/apis/emisso-connect-api/llms.txt) · [OpenAPI document](https://skmtc.dev/emisso/apis/emisso-connect-api/revisions/e766c01ef2a0?raw)
