curl --request POST \
--url https://grid.x402compute.cc/v1/audio/transcriptions \
--header 'Content-Type: application/json' \
--data '
{
"reservation_token": "<string>",
"enc": {
"ciphertext": "<string>",
"client_ephemeral_pubkey": "<string>",
"client_response_pubkey": "<string>",
"algorithm": "x25519-xchacha20poly1305-hkdf-v2",
"encoding": "base64"
}
}
'import requests
url = "https://grid.x402compute.cc/v1/audio/transcriptions"
payload = {
"reservation_token": "<string>",
"enc": {
"ciphertext": "<string>",
"client_ephemeral_pubkey": "<string>",
"client_response_pubkey": "<string>",
"algorithm": "x25519-xchacha20poly1305-hkdf-v2",
"encoding": "base64"
}
}
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({
reservation_token: '<string>',
enc: {
ciphertext: '<string>',
client_ephemeral_pubkey: '<string>',
client_response_pubkey: '<string>',
algorithm: 'x25519-xchacha20poly1305-hkdf-v2',
encoding: 'base64'
}
})
};
fetch('https://grid.x402compute.cc/v1/audio/transcriptions', 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",
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([
'reservation_token' => '<string>',
'enc' => [
'ciphertext' => '<string>',
'client_ephemeral_pubkey' => '<string>',
'client_response_pubkey' => '<string>',
'algorithm' => 'x25519-xchacha20poly1305-hkdf-v2',
'encoding' => 'base64'
]
]),
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"
payload := strings.NewReader("{\n \"reservation_token\": \"<string>\",\n \"enc\": {\n \"ciphertext\": \"<string>\",\n \"client_ephemeral_pubkey\": \"<string>\",\n \"client_response_pubkey\": \"<string>\",\n \"algorithm\": \"x25519-xchacha20poly1305-hkdf-v2\",\n \"encoding\": \"base64\"\n }\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")
.header("Content-Type", "application/json")
.body("{\n \"reservation_token\": \"<string>\",\n \"enc\": {\n \"ciphertext\": \"<string>\",\n \"client_ephemeral_pubkey\": \"<string>\",\n \"client_response_pubkey\": \"<string>\",\n \"algorithm\": \"x25519-xchacha20poly1305-hkdf-v2\",\n \"encoding\": \"base64\"\n }\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://grid.x402compute.cc/v1/audio/transcriptions")
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 \"reservation_token\": \"<string>\",\n \"enc\": {\n \"ciphertext\": \"<string>\",\n \"client_ephemeral_pubkey\": \"<string>\",\n \"client_response_pubkey\": \"<string>\",\n \"algorithm\": \"x25519-xchacha20poly1305-hkdf-v2\",\n \"encoding\": \"base64\"\n }\n}"
response = http.request(request)
puts response.read_body{
"job_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"sealed_result": {
"algorithm": "x25519-xchacha20poly1305-hkdf-v2",
"encoding": "base64",
"ephemeral_public_key": "<string>",
"ciphertext": "<string>"
},
"result_envelope_signature": "<string>",
"result_envelope_version": "v1",
"usage": {
"audio_seconds": 30,
"cost_usd": 0.00305
},
"object": "<string>",
"billing_pending": true
}Submit a sealed transcription
Submit a valid reservation token and one client-sealed JSON envelope. This route never accepts multipart form data, plaintext audio, filenames, URLs, containers, streaming chunks, or legacy/base58 ciphertext. The client must verify the reserved node’s key binding before sealing and verify its signature over the sealed result before decryption. Transcription is default off and unavailable until public discovery returns whisper-1.
curl --request POST \
--url https://grid.x402compute.cc/v1/audio/transcriptions \
--header 'Content-Type: application/json' \
--data '
{
"reservation_token": "<string>",
"enc": {
"ciphertext": "<string>",
"client_ephemeral_pubkey": "<string>",
"client_response_pubkey": "<string>",
"algorithm": "x25519-xchacha20poly1305-hkdf-v2",
"encoding": "base64"
}
}
'import requests
url = "https://grid.x402compute.cc/v1/audio/transcriptions"
payload = {
"reservation_token": "<string>",
"enc": {
"ciphertext": "<string>",
"client_ephemeral_pubkey": "<string>",
"client_response_pubkey": "<string>",
"algorithm": "x25519-xchacha20poly1305-hkdf-v2",
"encoding": "base64"
}
}
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({
reservation_token: '<string>',
enc: {
ciphertext: '<string>',
client_ephemeral_pubkey: '<string>',
client_response_pubkey: '<string>',
algorithm: 'x25519-xchacha20poly1305-hkdf-v2',
encoding: 'base64'
}
})
};
fetch('https://grid.x402compute.cc/v1/audio/transcriptions', 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",
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([
'reservation_token' => '<string>',
'enc' => [
'ciphertext' => '<string>',
'client_ephemeral_pubkey' => '<string>',
'client_response_pubkey' => '<string>',
'algorithm' => 'x25519-xchacha20poly1305-hkdf-v2',
'encoding' => 'base64'
]
]),
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"
payload := strings.NewReader("{\n \"reservation_token\": \"<string>\",\n \"enc\": {\n \"ciphertext\": \"<string>\",\n \"client_ephemeral_pubkey\": \"<string>\",\n \"client_response_pubkey\": \"<string>\",\n \"algorithm\": \"x25519-xchacha20poly1305-hkdf-v2\",\n \"encoding\": \"base64\"\n }\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")
.header("Content-Type", "application/json")
.body("{\n \"reservation_token\": \"<string>\",\n \"enc\": {\n \"ciphertext\": \"<string>\",\n \"client_ephemeral_pubkey\": \"<string>\",\n \"client_response_pubkey\": \"<string>\",\n \"algorithm\": \"x25519-xchacha20poly1305-hkdf-v2\",\n \"encoding\": \"base64\"\n }\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://grid.x402compute.cc/v1/audio/transcriptions")
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 \"reservation_token\": \"<string>\",\n \"enc\": {\n \"ciphertext\": \"<string>\",\n \"client_ephemeral_pubkey\": \"<string>\",\n \"client_response_pubkey\": \"<string>\",\n \"algorithm\": \"x25519-xchacha20poly1305-hkdf-v2\",\n \"encoding\": \"base64\"\n }\n}"
response = http.request(request)
puts response.read_body{
"job_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"sealed_result": {
"algorithm": "x25519-xchacha20poly1305-hkdf-v2",
"encoding": "base64",
"ephemeral_public_key": "<string>",
"ciphertext": "<string>"
},
"result_envelope_signature": "<string>",
"result_envelope_version": "v1",
"usage": {
"audio_seconds": 30,
"cost_usd": 0.00305
},
"object": "<string>",
"billing_pending": true
}whisper-1. For
the complete flow, see Speech-to-text transcription.Headers
Use the same credit/payment identity as the reservation.
"x402c_..."
x402 payment payload bound to the reserved request.
Response
A node-signed encrypted result plus validated usage. SDKs verify the signature before decrypting and expose the final typed transcript only after all bindings validate.
Show child attributes
Show child attributes
Base58 Ed25519 signature by the reserved node over the public result envelope.
v1 Show child attributes
Show child attributes
Payment settlement or accounting needs reconciliation, including an unknown settlement outcome. Do not resubmit; reconcile by job/payment identity.
Was this page helpful?
