---
title: "Post Training Usage Precheck"
method: POST
path: "/api/billing/training-usage/precheck"
tags: ["billing"]
---

# Post Training Usage Precheck

`POST /api/billing/training-usage/precheck`

Verify-only budget pre-flight before a managed flash run is allocated a GPU.

Machine-to-machine: the flash control plane calls this at submit (internal key + explicit org
id) with the run's flash.cost estimate. Returns 402 when the org can't cover the estimate (no
balance and no card+auto-topup), so the control plane rejects the run BEFORE any GPU is
allocated -- instead of letting it train to completion and only then failing to bill. This
moves no money: the real debit still happens at completion from the actual ``cost_usd``.

## Request body

- TrainingPrecheckBody
  - `orgId` string, required
  - `estimateCents` integer, required

## Response `200`

Successful Response

- object

## Other responses

- `422` — Validation Error

---

[API](https://skmtc.dev/freesolo/apis/platform-backend.md) · [All operations](https://skmtc.dev/freesolo/apis/platform-backend/llms.txt) · [OpenAPI document](https://skmtc-service-production.skmtc.workers.dev/v1/apis/freesolo/platform-backend/revisions/5626e92675af/schema)
