---
title: "Execute one approval under the caller's policy, retaining ambiguous publication evidence"
method: POST
path: "/v2/pending-sends/{pending_id}/send"
tags: ["pending-sends-v2"]
---

# Execute one approval under the caller's policy, retaining ambiguous publication evidence

`POST /v2/pending-sends/{pending_id}/send`

## Request

- Base URL: `https://api.tracklysms.com/api`
- URL: `https://api.tracklysms.com/api/v2/pending-sends/{pending_id}/send`
- Auth: API key in header `X-Api-Key`

Runs current send eligibility checks and compares the built artifacts with the immutable review. A refusal returns the hold to approved only when no publication intent was recorded. Once publication may have occurred, 503 unknown_execution requires reconciliation through the same hold; later execute attempts return 409. Do not blindly retry or create a replacement send.

## Response `201`

Sent; result carries the send response

- PendingSend
  - `api_key_id` string: ID of the key that submitted it
  - `created_at` string: ISO8601 UTC
  - `decided_at` string, nullable: When it was approved, rejected, or cancelled (ISO8601 UTC)
  - `decided_by` string, nullable: user:<id> for a dashboard decision, api_key:<id> for a cancel
  - `decision_reason` string, nullable: Rejection reason given by the approver
  - `executed_at` string, nullable: When the approved payload was sent (ISO8601 UTC)
  - `executed_by_key_id` string, nullable: ID of the key that executed it
  - `execution` object, nullable: Durable publication evidence; uncertain outcomes must be reconciled
  - `expires_at` string: When an undecided or unexecuted send lapses (ISO8601 UTC); 24 hours after creation
  - `id` string: Pending send ID
  - `kind` string: send | send_bulk
  - `last_error` object, nullable: The send error body from the most recent failed execute attempt; null otherwise
  - `note` string, nullable: The note as submitted
  - `payload` object: The held payload exactly as submitted: a send body, or {messages: [...]}
  - `recipient_count` integer: Messages in the held payload
  - `result` object, nullable: The send response body once executed; null before
  - `sandbox` boolean: True when held by a sandbox key; only a key in the same mode can execute it
  - `status` string: pending | approved | executing | unknown_execution | sent | rejected | cancelled | expired

## Other responses

- `207`: Every bulk recipient was refused before publication; hold remains approved
- `400`: Current send eligibility refuses execution
- `401`: Authentication error
- `403`: Calling key cannot send from a held list
- `404`: Not found
- `409`: State, mode or render mismatch; unknown_execution requires reconciliation
- `429`: Daily send cap reached; the send stays approved
- `500`: Execution failed before publication; hold remains approved
- `503`: Send authority unavailable, or unknown_execution requiring readback before further action

---

[API](https://skmtc.dev/tracklysms/apis/trackly-sms-api.md) · [All operations](https://skmtc.dev/tracklysms/apis/trackly-sms-api/llms.txt) · [OpenAPI document](https://skmtc.dev/tracklysms/apis/trackly-sms-api/revisions/ac1ad22cb2a9?raw)
