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

# Reactivate Subscription

> Reactivate a subscription that is canceling at the end of the current period

Reactivate a subscription that is currently in `canceling` state. The pending end-of-period cancellation is removed and the subscription continues to renew as scheduled.

```
POST /v1/actions/subscription-order/reactivate-order
```

**Authentication:** Session Token — see [Customer Endpoints](/api-reference/endpoints/auth/customer-endpoints) (customer or customer role)

## Reactivation Behavior

| Current Status                                | Action                                              | Result Status |
| --------------------------------------------- | --------------------------------------------------- | ------------- |
| `canceling`                                   | Remove pending end-of-period cancellation (via PSP) | `active`      |
| `canceled`                                    | Not allowed — already fully canceled                | —             |
| `pending` / `active` / `past_due` / `expired` | Not allowed — only `canceling` is reactivatable     | —             |

<Note>
  * Only subscriptions in `canceling` (cancellation scheduled at period end) can be reactivated.
  * Fully canceled (`canceled`) subscriptions cannot be reactivated — start a new subscription instead.
  * No additional charge — the current billing period continues, and renewal resumes at its original schedule.
</Note>

## Request Body

| Field     | Type   | Required | Description                                       |
| --------- | ------ | -------- | ------------------------------------------------- |
| `orderId` | string | Yes      | Subscription order ID (Short ID format `ORD_xxx`) |

## Example Request

<CodeGroup>
  ```typescript TypeScript (SDK) theme={"system"}
  import { WaffoPancake } from "@waffo/pancake-ts";

  const client = new WaffoPancake({
    sessionToken: window.WAFFO_SESSION_TOKEN, // injected by the merchant's portal
    environment: "prod",
  });

  const result = await client.orders.reactivateSubscription({
    orderId: "ORD_2aUyqjCzEIiEcYMKj7TZtw",
  });

  console.log(result.orderId); // "ORD_2aUyqjCzEIiEcYMKj7TZtw"
  console.log(result.status);  // "active"
  ```

  ```typescript TypeScript (Manual) theme={"system"}
  const result = await fetch("https://api.waffo.ai/v1/actions/subscription-order/reactivate-order", {
    method: "POST",
    headers: {
      "Authorization": `Bearer ${SESSION_TOKEN}`,
      "Content-Type": "application/json",
      "X-Environment": "prod",
    },
    body: JSON.stringify({
      orderId: "ORD_2aUyqjCzEIiEcYMKj7TZtw",
    }),
  }).then(r => r.json());
  ```

  ```bash cURL theme={"system"}
  curl -X POST "https://api.waffo.ai/v1/actions/subscription-order/reactivate-order" \
    -H "Authorization: Bearer $SESSION_TOKEN" \
    -H "Content-Type: application/json" \
    -H "X-Environment: prod" \
    -d '{"orderId":"ORD_2aUyqjCzEIiEcYMKj7TZtw"}'
  ```

  ```bash wget theme={"system"}
  wget -qO- \
    --header="Authorization: Bearer $SESSION_TOKEN" \
    --header="Content-Type: application/json" \
    --header="X-Environment: prod" \
    --post-data='{"orderId":"ORD_2aUyqjCzEIiEcYMKj7TZtw"}' \
    "https://api.waffo.ai/v1/actions/subscription-order/reactivate-order"
  ```
</CodeGroup>

## Success Response (200)

```json theme={"system"}
{
  "data": {
    "orderId": "ORD_2aUyqjCzEIiEcYMKj7TZtw",
    "status": "active"
  }
}
```

### Response Fields

| Field     | Type   | Description                 |
| --------- | ------ | --------------------------- |
| `orderId` | string | Order ID (Short ID)         |
| `status`  | string | New order status (`active`) |

## Errors

> **Retry policy:** Never retry 4xx — fix the request and resubmit. Retry 5xx with exponential backoff (start 5s, max 3 attempts).

| Status | `errors[0].message`                               | What it means                                                          | Recommended handling                                      |
| ------ | ------------------------------------------------- | ---------------------------------------------------------------------- | --------------------------------------------------------- |
| 400    | `Missing required field: orderId`                 | `orderId` was not provided in the body                                 | Fix the request body, then resubmit                       |
| 400    | `Expected format: ORD_xxx, got "..."`             | `orderId` Short ID could not be decoded                                | Fix the `orderId` format, then resubmit                   |
| 400    | `Only canceling subscriptions can be reactivated` | Order status is not `canceling` (e.g. `canceled`, `active`, `expired`) | The subscription is not reactivatable                     |
| 401    | `Authentication failed`                           | Session token invalid, expired, or malformed                           | Re-mint the session token via Issue Session Token         |
| 403    | `Order does not belong to user`                   | Ownership check failed                                                 | Verify the caller owns the order                          |
| 404    | `Order not found`                                 | Order does not exist                                                   | Verify the order ID                                       |
| 500    | `Internal server error`                           | Unexpected server-side failure                                         | Retry with exponential backoff (start 5s, max 3 attempts) |
