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

# Post Internal Training Usage

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

Charge a completed managed Flash training run using an explicit org id.

Machine-to-machine: the Flash control plane calls this after a run reaches ``done``,
authenticated with the operator internal key. The run is still charged idempotently by
``runId``; the only difference from the user-key route is that the org is supplied by
Flash's persisted non-secret billing context instead of being derived from a user API key.

## Request body

- InternalTrainingUsageBody
  - `runId` string, required
  - `costCents` integer, required
  - `gpu` string, nullable
  - `provider` string, nullable
  - `method` string, nullable
  - `model` string, nullable
  - `estimate` object, nullable
  - `orgId` string, 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)
