---
title: "Schedule a monthly ↔ annual switch for the end of the current period"
method: POST
path: "/subscriptions/billing-interval"
tags: ["Subscriptions"]
---

# Schedule a monthly ↔ annual switch for the end of the current period

`POST /subscriptions/billing-interval`

## Request

- Base URL: `https://api.atako.ai`
- URL: `https://api.atako.ai/subscriptions/billing-interval`
- Auth: HTTP bearer

Company-admin only. Never immediate, no proration: the target interval is invoiced in full at `currentPeriodEnd`. Same plan, other interval. Requesting the current interval cancels a pending switch (`effect: canceled`); re-requesting the pending target is a no-op (`alreadyApplied: true`).

## Request body

- object
  - `billingInterval` 'monthly' | 'annual', required

## Response `200`

- object
  - `billingInterval` 'monthly' | 'annual', nullable
  - `pendingBillingInterval` 'monthly' | 'annual', nullable
  - `pendingBillingIntervalEffectiveAt` string, date-time, nullable
  - `effect` 'scheduled' | 'canceled'
  - `alreadyApplied` boolean

## Other responses

- `400`: Invalid billingInterval / INTERVAL_NOT_AVAILABLE / PLAN_PRICE_NOT_CONFIGURED / NO_STRIPE_SUBSCRIPTION / Subscription is canceled
- `401`: Missing, malformed, or invalid bearer token / API key, or revoked session (SESSION_REVOKED).
- `403`: The caller does not have the required role/permission.
- `404`: No company / No active subscription

---

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