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

# Cancel future transaction

> Cancel a specific scheduled payment within a recurring series without affecting the rest of the schedule.

`POST /v1/payments/recurring/future-transactions/cancel/{terminal_friendly_id}`

Cancels a single upcoming payment within a recurring series. The rest of the billing schedule continues as normal - only the targeted occurrence is skipped. Use this when you need to waive a specific payment, for example to honor a promotional credit or account adjustment.

<Note>
  This cancels only the specified future transaction. To stop all future payments and end the entire series, use the [recurring cancel endpoint](/docs/api-reference/recurring/cancel) instead.
</Note>

<Note>
  Safe retries for this POST endpoint use the `Idempotency-Key` header. Reuse the same key only when retrying the exact same request body. See [Idempotency](/docs/api-reference/idempotency).
</Note>

<RequestExample>
  ```bash cURL theme={null}
  curl --request POST \
    --url https://terminal.smartretry.com/v1/payments/recurring/future-transactions/cancel/ABC123 \
    --header 'Content-Type: application/json' \
    --header 'x-api-key: YOUR_API_KEY' \
    --header 'Idempotency-Key: future-cancel-20260401-001' \
    --data '{
      "future_transaction_id": "FT3D8E1C",
      "recurring_id": "RC9F4A2B"
    }'
  ```

  ```python Python theme={null}
  import requests

  response = requests.post(
      "https://terminal.smartretry.com/v1/payments/recurring/future-transactions/cancel/ABC123",
      headers={
          "Content-Type": "application/json",
          "x-api-key": "YOUR_API_KEY",
          "Idempotency-Key": "future-cancel-20260401-001"
      },
      json={
          "future_transaction_id": "FT3D8E1C",
          "recurring_id": "RC9F4A2B"
      }
  )

  print(response.json())
  ```

  ```javascript Node.js theme={null}
  const response = await fetch(
    "https://terminal.smartretry.com/v1/payments/recurring/future-transactions/cancel/ABC123",
    {
      method: "POST",
      headers: {
        "Content-Type": "application/json",
        "x-api-key": "YOUR_API_KEY",
        "Idempotency-Key": "future-cancel-20260401-001"
      },
      body: JSON.stringify({
        future_transaction_id: "FT3D8E1C",
        recurring_id: "RC9F4A2B"
      })
    }
  );

  const data = await response.json();
  console.log(data);
  ```
</RequestExample>

## Path parameters

<ParamField path="terminal_friendly_id" type="string" required>
  Your 6-character terminal identifier.
</ParamField>

## Request body

<ParamField body="future_transaction_id" type="string" required>
  The 8-character identifier of the future transaction to cancel.
</ParamField>

<ParamField body="recurring_id" type="string" required>
  The 8-character identifier of the recurring series this future transaction belongs to.
</ParamField>

## Response

<ResponseField name="recurring_id" type="string">
  The identifier of the recurring series (8 characters).
</ResponseField>

<ResponseField name="future_transaction_id" type="string">
  The identifier of the cancelled future transaction (8 characters).
</ResponseField>

<ResponseField name="cancelled" type="boolean">
  `true` if the cancellation was accepted and the transaction has been marked as cancelled.
</ResponseField>

```json Example response theme={null}
{
  "recurring_id": "RC9F4A2B",
  "future_transaction_id": "FT3D8E1C",
  "cancelled": true
}
```

<Note>
  After cancellation, the transaction status changes to `cancelled`. You can confirm this by calling the [future transaction status endpoint](/docs/api-reference/future-transactions/status).
</Note>
