---
title: "Rotate Usage Period"
method: POST
path: "/internal/rotate-usage-period"
---

# Rotate Usage Period

`POST /internal/rotate-usage-period`

## Request

- Base URL: `https://api.enconvert.com` (the document declares no server; this is the origin it was published from)
- URL: `https://api.enconvert.com/internal/rotate-usage-period`
- Auth: none declared

Rotate one project's usage period on demand.

Rotation is now driven by the droplet-local poller
(services/billing_rotation.py, started from main.py's lifespan) —
the no-GCP replacement for the Cloud Tasks trigger, which was not
firing and left periods unrotated (usage uncounted AND ungated once
the first period lapsed). This route stays for manual triggering and
any straggler Cloud Task still pointed at it; both paths share the
same idempotent, FOR-UPDATE-guarded implementation, so a double
trigger is a harmless skip. The old per-call Cloud Tasks
re-scheduling is gone.

## Response `200`

Successful Response

- unknown

---

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