curl --request POST \
--url https://grid.x402compute.cc/v1/audio/transcriptions/reserve \
--header 'Content-Type: application/json' \
--data '
{
"model": "whisper-1",
"transcription_protocol": "transcription-v1",
"request_id": "4fc6b6d2-5d2c-4f3b-92d9-3cd1de81f883",
"sample_rate": 16000,
"channels": 1,
"bits_per_sample": 16,
"sample_count": 80000,
"language": "auto",
"use_credits": true,
"model_revision": "5359861c739e955e79d9a303bcbc70fb988958b1",
"model_sha256": "1be3a9b2063867b937e64e2ec7483364a79917e157fa98c5d94b5c1fffea987b"
}
'import requests
url = "https://grid.x402compute.cc/v1/audio/transcriptions/reserve"
payload = {
"model": "whisper-1",
"transcription_protocol": "transcription-v1",
"request_id": "4fc6b6d2-5d2c-4f3b-92d9-3cd1de81f883",
"sample_rate": 16000,
"channels": 1,
"bits_per_sample": 16,
"sample_count": 80000,
"language": "auto",
"use_credits": True,
"model_revision": "5359861c739e955e79d9a303bcbc70fb988958b1",
"model_sha256": "1be3a9b2063867b937e64e2ec7483364a79917e157fa98c5d94b5c1fffea987b"
}
headers = {"Content-Type": "application/json"}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {'Content-Type': 'application/json'},
body: JSON.stringify({
model: 'whisper-1',
transcription_protocol: 'transcription-v1',
request_id: '4fc6b6d2-5d2c-4f3b-92d9-3cd1de81f883',
sample_rate: 16000,
channels: 1,
bits_per_sample: 16,
sample_count: 80000,
language: 'auto',
use_credits: true,
model_revision: '5359861c739e955e79d9a303bcbc70fb988958b1',
model_sha256: '1be3a9b2063867b937e64e2ec7483364a79917e157fa98c5d94b5c1fffea987b'
})
};
fetch('https://grid.x402compute.cc/v1/audio/transcriptions/reserve', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://grid.x402compute.cc/v1/audio/transcriptions/reserve",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "POST",
CURLOPT_POSTFIELDS => json_encode([
'model' => 'whisper-1',
'transcription_protocol' => 'transcription-v1',
'request_id' => '4fc6b6d2-5d2c-4f3b-92d9-3cd1de81f883',
'sample_rate' => 16000,
'channels' => 1,
'bits_per_sample' => 16,
'sample_count' => 80000,
'language' => 'auto',
'use_credits' => true,
'model_revision' => '5359861c739e955e79d9a303bcbc70fb988958b1',
'model_sha256' => '1be3a9b2063867b937e64e2ec7483364a79917e157fa98c5d94b5c1fffea987b'
]),
CURLOPT_HTTPHEADER => [
"Content-Type: application/json"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"strings"
"net/http"
"io"
)
func main() {
url := "https://grid.x402compute.cc/v1/audio/transcriptions/reserve"
payload := strings.NewReader("{\n \"model\": \"whisper-1\",\n \"transcription_protocol\": \"transcription-v1\",\n \"request_id\": \"4fc6b6d2-5d2c-4f3b-92d9-3cd1de81f883\",\n \"sample_rate\": 16000,\n \"channels\": 1,\n \"bits_per_sample\": 16,\n \"sample_count\": 80000,\n \"language\": \"auto\",\n \"use_credits\": true,\n \"model_revision\": \"5359861c739e955e79d9a303bcbc70fb988958b1\",\n \"model_sha256\": \"1be3a9b2063867b937e64e2ec7483364a79917e157fa98c5d94b5c1fffea987b\"\n}")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.post("https://grid.x402compute.cc/v1/audio/transcriptions/reserve")
.header("Content-Type", "application/json")
.body("{\n \"model\": \"whisper-1\",\n \"transcription_protocol\": \"transcription-v1\",\n \"request_id\": \"4fc6b6d2-5d2c-4f3b-92d9-3cd1de81f883\",\n \"sample_rate\": 16000,\n \"channels\": 1,\n \"bits_per_sample\": 16,\n \"sample_count\": 80000,\n \"language\": \"auto\",\n \"use_credits\": true,\n \"model_revision\": \"5359861c739e955e79d9a303bcbc70fb988958b1\",\n \"model_sha256\": \"1be3a9b2063867b937e64e2ec7483364a79917e157fa98c5d94b5c1fffea987b\"\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://grid.x402compute.cc/v1/audio/transcriptions/reserve")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["Content-Type"] = 'application/json'
request.body = "{\n \"model\": \"whisper-1\",\n \"transcription_protocol\": \"transcription-v1\",\n \"request_id\": \"4fc6b6d2-5d2c-4f3b-92d9-3cd1de81f883\",\n \"sample_rate\": 16000,\n \"channels\": 1,\n \"bits_per_sample\": 16,\n \"sample_count\": 80000,\n \"language\": \"auto\",\n \"use_credits\": true,\n \"model_revision\": \"5359861c739e955e79d9a303bcbc70fb988958b1\",\n \"model_sha256\": \"1be3a9b2063867b937e64e2ec7483364a79917e157fa98c5d94b5c1fffea987b\"\n}"
response = http.request(request)
puts response.read_body{
"reservation_token": "<string>",
"request_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"model": "whisper-1",
"model_revision": "<string>",
"model_sha256": "<string>",
"transcription_protocol": "transcription-v1",
"sample_count": 480000,
"language": "<string>",
"node_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"node_x25519_pubkey": "<string>",
"node_ed25519_pubkey": "<string>",
"node_x25519_pubkey_sig": "<string>",
"key_version": 1,
"tee_type": "<string>",
"attestation_verified": true,
"expires_in_ms": 2,
"quote": {
"audio_seconds": 59,
"price_usd": 0.00305,
"currency": "USDC",
"sample_count": 480000,
"rate_usd_per_second": 0.0001,
"minimum_charge_usd": 0.0001
}
}Reserve a transcription node
Release-gated first step for transcription-v1. Sends bounded metadata and sample count only; audio remains on the client. A successful response returns the selected node’s verified encryption/signing identity, a short-lived reservation token, and a maximum quote. The client must validate the response before sealing PCM. The route is default off and is not available until public discovery returns whisper-1.
curl --request POST \
--url https://grid.x402compute.cc/v1/audio/transcriptions/reserve \
--header 'Content-Type: application/json' \
--data '
{
"model": "whisper-1",
"transcription_protocol": "transcription-v1",
"request_id": "4fc6b6d2-5d2c-4f3b-92d9-3cd1de81f883",
"sample_rate": 16000,
"channels": 1,
"bits_per_sample": 16,
"sample_count": 80000,
"language": "auto",
"use_credits": true,
"model_revision": "5359861c739e955e79d9a303bcbc70fb988958b1",
"model_sha256": "1be3a9b2063867b937e64e2ec7483364a79917e157fa98c5d94b5c1fffea987b"
}
'import requests
url = "https://grid.x402compute.cc/v1/audio/transcriptions/reserve"
payload = {
"model": "whisper-1",
"transcription_protocol": "transcription-v1",
"request_id": "4fc6b6d2-5d2c-4f3b-92d9-3cd1de81f883",
"sample_rate": 16000,
"channels": 1,
"bits_per_sample": 16,
"sample_count": 80000,
"language": "auto",
"use_credits": True,
"model_revision": "5359861c739e955e79d9a303bcbc70fb988958b1",
"model_sha256": "1be3a9b2063867b937e64e2ec7483364a79917e157fa98c5d94b5c1fffea987b"
}
headers = {"Content-Type": "application/json"}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {'Content-Type': 'application/json'},
body: JSON.stringify({
model: 'whisper-1',
transcription_protocol: 'transcription-v1',
request_id: '4fc6b6d2-5d2c-4f3b-92d9-3cd1de81f883',
sample_rate: 16000,
channels: 1,
bits_per_sample: 16,
sample_count: 80000,
language: 'auto',
use_credits: true,
model_revision: '5359861c739e955e79d9a303bcbc70fb988958b1',
model_sha256: '1be3a9b2063867b937e64e2ec7483364a79917e157fa98c5d94b5c1fffea987b'
})
};
fetch('https://grid.x402compute.cc/v1/audio/transcriptions/reserve', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://grid.x402compute.cc/v1/audio/transcriptions/reserve",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "POST",
CURLOPT_POSTFIELDS => json_encode([
'model' => 'whisper-1',
'transcription_protocol' => 'transcription-v1',
'request_id' => '4fc6b6d2-5d2c-4f3b-92d9-3cd1de81f883',
'sample_rate' => 16000,
'channels' => 1,
'bits_per_sample' => 16,
'sample_count' => 80000,
'language' => 'auto',
'use_credits' => true,
'model_revision' => '5359861c739e955e79d9a303bcbc70fb988958b1',
'model_sha256' => '1be3a9b2063867b937e64e2ec7483364a79917e157fa98c5d94b5c1fffea987b'
]),
CURLOPT_HTTPHEADER => [
"Content-Type: application/json"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"strings"
"net/http"
"io"
)
func main() {
url := "https://grid.x402compute.cc/v1/audio/transcriptions/reserve"
payload := strings.NewReader("{\n \"model\": \"whisper-1\",\n \"transcription_protocol\": \"transcription-v1\",\n \"request_id\": \"4fc6b6d2-5d2c-4f3b-92d9-3cd1de81f883\",\n \"sample_rate\": 16000,\n \"channels\": 1,\n \"bits_per_sample\": 16,\n \"sample_count\": 80000,\n \"language\": \"auto\",\n \"use_credits\": true,\n \"model_revision\": \"5359861c739e955e79d9a303bcbc70fb988958b1\",\n \"model_sha256\": \"1be3a9b2063867b937e64e2ec7483364a79917e157fa98c5d94b5c1fffea987b\"\n}")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.post("https://grid.x402compute.cc/v1/audio/transcriptions/reserve")
.header("Content-Type", "application/json")
.body("{\n \"model\": \"whisper-1\",\n \"transcription_protocol\": \"transcription-v1\",\n \"request_id\": \"4fc6b6d2-5d2c-4f3b-92d9-3cd1de81f883\",\n \"sample_rate\": 16000,\n \"channels\": 1,\n \"bits_per_sample\": 16,\n \"sample_count\": 80000,\n \"language\": \"auto\",\n \"use_credits\": true,\n \"model_revision\": \"5359861c739e955e79d9a303bcbc70fb988958b1\",\n \"model_sha256\": \"1be3a9b2063867b937e64e2ec7483364a79917e157fa98c5d94b5c1fffea987b\"\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://grid.x402compute.cc/v1/audio/transcriptions/reserve")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["Content-Type"] = 'application/json'
request.body = "{\n \"model\": \"whisper-1\",\n \"transcription_protocol\": \"transcription-v1\",\n \"request_id\": \"4fc6b6d2-5d2c-4f3b-92d9-3cd1de81f883\",\n \"sample_rate\": 16000,\n \"channels\": 1,\n \"bits_per_sample\": 16,\n \"sample_count\": 80000,\n \"language\": \"auto\",\n \"use_credits\": true,\n \"model_revision\": \"5359861c739e955e79d9a303bcbc70fb988958b1\",\n \"model_sha256\": \"1be3a9b2063867b937e64e2ec7483364a79917e157fa98c5d94b5c1fffea987b\"\n}"
response = http.request(request)
puts response.read_body{
"reservation_token": "<string>",
"request_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"model": "whisper-1",
"model_revision": "<string>",
"model_sha256": "<string>",
"transcription_protocol": "transcription-v1",
"sample_count": 480000,
"language": "<string>",
"node_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"node_x25519_pubkey": "<string>",
"node_ed25519_pubkey": "<string>",
"node_x25519_pubkey_sig": "<string>",
"key_version": 1,
"tee_type": "<string>",
"attestation_verified": true,
"expires_in_ms": 2,
"quote": {
"audio_seconds": 59,
"price_usd": 0.00305,
"currency": "USDC",
"sample_count": 480000,
"rate_usd_per_second": 0.0001,
"minimum_charge_usd": 0.0001
}
}Headers
Compute/Grid API key with grid:write scope for prepaid credits.
"x402c_..."
Body
whisper-1 transcription-v1 Stable canonical lowercase UUID v4 logical identity bound into reservation, sealed input, result, and billing.
^[0-9a-f]{8}-[0-9a-f]{4}-4[0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}$16000 1 16 Duration and quote authority. The submit envelope and node independently bind and verify this count.
1 <= x <= 960000Exact immutable candidate pin; mismatches are rejected before reservation.
5359861c739e955e79d9a303bcbc70fb988958b1 Exact immutable candidate pin; mismatches are rejected before reservation.
1be3a9b2063867b937e64e2ec7483364a79917e157fa98c5d94b5c1fffea987b ^(auto|[a-z]{2})$Optional eligible provider node id to pin.
^[0-9a-f]{8}-[0-9a-f]{4}-4[0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}$Maximum accepted quote in USD.
Response
Short-lived reservation and maximum quote. No audio was uploaded by this step.
whisper-1 Immutable Hugging Face commit: 5359861c739e955e79d9a303bcbc70fb988958b1.
^[a-f0-9]{40}$SHA-256 of the pinned model file.
^[a-f0-9]{64}$transcription-v1 1 <= x <= 960000^(auto|[a-z]{2})$Base58 X25519 key used by the client to seal the PCM payload.
Base58 Ed25519 identity key used to verify the sealed result signature.
Node identity signature binding the current versioned X25519 key.
x >= 0x >= 1Show child attributes
Show child attributes
Was this page helpful?
