---
title: "Price a release before submitting it"
method: POST
path: "/releases/quote"
---

# Price a release before submitting it

`POST /releases/quote`

## Request

- Base URL: `https://once.app/v1`
- URL: `https://once.app/v1/releases/quote`
- Auth: HTTP bearer
- TypeScript: <https://skmtc.dev/once/apis/once-rest-api/docs/releases/quote/post.ts> (a function with typed inputs; its response is checked against the schema)

Body: { tracks: [...], token_offset?: boolean } — the same tracks you are about to submit. Prices them with the same code that debits on submit, against the live balance, without creating or charging anything. Returns the per-track breakdown, cost.totalCredits, balance.covered, balance.shortfallCredits, and the cheapest bundle covering the shortfall. Gate your submit button on balance.covered rather than recomputing the cost client-side: an estimate that drifts one credit high silently blocks a user whose balance is sufficient.

## Request body

- object
  - `tracks` object[], required
  - `token_offset` boolean

## Response `200`

Release quote

## Changes

- **2026-09-17** `cc6a2adfcbce`: 1 info
  - endpoint added

[Operation history](https://skmtc.dev/once/apis/once-rest-api/changes/releases/quote/post.md)

---

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