curl --request POST \
--url https://api.sandbox.nevermined.app/api/v1/router/subscription/quote \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"slug": "webscrape-pro",
"path": "scrape",
"method": "POST"
}
'import requests
url = "https://api.sandbox.nevermined.app/api/v1/router/subscription/quote"
payload = {
"slug": "webscrape-pro",
"path": "scrape",
"method": "POST"
}
headers = {
"Authorization": "Bearer <token>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {Authorization: 'Bearer <token>', 'Content-Type': 'application/json'},
body: JSON.stringify({slug: 'webscrape-pro', path: 'scrape', method: 'POST'})
};
fetch('https://api.sandbox.nevermined.app/api/v1/router/subscription/quote', 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://api.sandbox.nevermined.app/api/v1/router/subscription/quote",
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([
'slug' => 'webscrape-pro',
'path' => 'scrape',
'method' => 'POST'
]),
CURLOPT_HTTPHEADER => [
"Authorization: Bearer <token>",
"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://api.sandbox.nevermined.app/api/v1/router/subscription/quote"
payload := strings.NewReader("{\n \"slug\": \"webscrape-pro\",\n \"path\": \"scrape\",\n \"method\": \"POST\"\n}")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("Authorization", "Bearer <token>")
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://api.sandbox.nevermined.app/api/v1/router/subscription/quote")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"slug\": \"webscrape-pro\",\n \"path\": \"scrape\",\n \"method\": \"POST\"\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.sandbox.nevermined.app/api/v1/router/subscription/quote")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["Authorization"] = 'Bearer <token>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"slug\": \"webscrape-pro\",\n \"path\": \"scrape\",\n \"method\": \"POST\"\n}"
response = http.request(request)
puts response.read_body{
"slug": "webscrape-pro",
"credits": 3,
"tariffVersion": 2
}{
"code": "BCK.ROUTER.0003",
"httpStatus": 500,
"message": "delegation budget exceeded, expired, or inactive",
"details": "Hash JWT is not signed by the node account",
"error": "authorization_pending",
"hint": "Verify the wallet has sufficient balance and that the plan is active.",
"docsUrl": "https://nevermined.ai/docs/development-guide/api-errors/codes#bck-x402-0008",
"category": "integration",
"retryable": true,
"correlationId": "a3f6b1c4-7d2e-4a9b-8e0c-12f4d8e6c5b9",
"uuid": "e-550e8400-e29b-41d4-a716-446655440000",
"date": "2026-05-09T12:34:56.789Z",
"params": "{\"planId\":\"43298432984329\",\"reason\":\"Invalid configuration\"}"
}{
"code": "BCK.ROUTER.0003",
"httpStatus": 500,
"message": "delegation budget exceeded, expired, or inactive",
"details": "Hash JWT is not signed by the node account",
"error": "authorization_pending",
"hint": "Verify the wallet has sufficient balance and that the plan is active.",
"docsUrl": "https://nevermined.ai/docs/development-guide/api-errors/codes#bck-x402-0008",
"category": "integration",
"retryable": true,
"correlationId": "a3f6b1c4-7d2e-4a9b-8e0c-12f4d8e6c5b9",
"uuid": "e-550e8400-e29b-41d4-a716-446655440000",
"date": "2026-05-09T12:34:56.789Z",
"params": "{\"planId\":\"43298432984329\",\"reason\":\"Invalid configuration\"}"
}{
"code": "BCK.ROUTER.0003",
"httpStatus": 500,
"message": "delegation budget exceeded, expired, or inactive",
"details": "Hash JWT is not signed by the node account",
"error": "authorization_pending",
"hint": "Verify the wallet has sufficient balance and that the plan is active.",
"docsUrl": "https://nevermined.ai/docs/development-guide/api-errors/codes#bck-x402-0008",
"category": "integration",
"retryable": true,
"correlationId": "a3f6b1c4-7d2e-4a9b-8e0c-12f4d8e6c5b9",
"uuid": "e-550e8400-e29b-41d4-a716-446655440000",
"date": "2026-05-09T12:34:56.789Z",
"params": "{\"planId\":\"43298432984329\",\"reason\":\"Invalid configuration\"}"
}{
"code": "BCK.ROUTER.0003",
"httpStatus": 500,
"message": "delegation budget exceeded, expired, or inactive",
"details": "Hash JWT is not signed by the node account",
"error": "authorization_pending",
"hint": "Verify the wallet has sufficient balance and that the plan is active.",
"docsUrl": "https://nevermined.ai/docs/development-guide/api-errors/codes#bck-x402-0008",
"category": "integration",
"retryable": true,
"correlationId": "a3f6b1c4-7d2e-4a9b-8e0c-12f4d8e6c5b9",
"uuid": "e-550e8400-e29b-41d4-a716-446655440000",
"date": "2026-05-09T12:34:56.789Z",
"params": "{\"planId\":\"43298432984329\",\"reason\":\"Invalid configuration\"}"
}{
"code": "BCK.ROUTER.0003",
"httpStatus": 500,
"message": "delegation budget exceeded, expired, or inactive",
"details": "Hash JWT is not signed by the node account",
"error": "authorization_pending",
"hint": "Verify the wallet has sufficient balance and that the plan is active.",
"docsUrl": "https://nevermined.ai/docs/development-guide/api-errors/codes#bck-x402-0008",
"category": "integration",
"retryable": true,
"correlationId": "a3f6b1c4-7d2e-4a9b-8e0c-12f4d8e6c5b9",
"uuid": "e-550e8400-e29b-41d4-a716-446655440000",
"date": "2026-05-09T12:34:56.789Z",
"params": "{\"planId\":\"43298432984329\",\"reason\":\"Invalid configuration\"}"
}{
"code": "BCK.ROUTER.0003",
"httpStatus": 500,
"message": "delegation budget exceeded, expired, or inactive",
"details": "Hash JWT is not signed by the node account",
"error": "authorization_pending",
"hint": "Verify the wallet has sufficient balance and that the plan is active.",
"docsUrl": "https://nevermined.ai/docs/development-guide/api-errors/codes#bck-x402-0008",
"category": "integration",
"retryable": true,
"correlationId": "a3f6b1c4-7d2e-4a9b-8e0c-12f4d8e6c5b9",
"uuid": "e-550e8400-e29b-41d4-a716-446655440000",
"date": "2026-05-09T12:34:56.789Z",
"params": "{\"planId\":\"43298432984329\",\"reason\":\"Invalid configuration\"}"
}{
"code": "BCK.ROUTER.0003",
"httpStatus": 500,
"message": "delegation budget exceeded, expired, or inactive",
"details": "Hash JWT is not signed by the node account",
"error": "authorization_pending",
"hint": "Verify the wallet has sufficient balance and that the plan is active.",
"docsUrl": "https://nevermined.ai/docs/development-guide/api-errors/codes#bck-x402-0008",
"category": "integration",
"retryable": true,
"correlationId": "a3f6b1c4-7d2e-4a9b-8e0c-12f4d8e6c5b9",
"uuid": "e-550e8400-e29b-41d4-a716-446655440000",
"date": "2026-05-09T12:34:56.789Z",
"params": "{\"planId\":\"43298432984329\",\"reason\":\"Invalid configuration\"}"
}{
"code": "BCK.ROUTER.0003",
"httpStatus": 500,
"message": "delegation budget exceeded, expired, or inactive",
"details": "Hash JWT is not signed by the node account",
"error": "authorization_pending",
"hint": "Verify the wallet has sufficient balance and that the plan is active.",
"docsUrl": "https://nevermined.ai/docs/development-guide/api-errors/codes#bck-x402-0008",
"category": "integration",
"retryable": true,
"correlationId": "a3f6b1c4-7d2e-4a9b-8e0c-12f4d8e6c5b9",
"uuid": "e-550e8400-e29b-41d4-a716-446655440000",
"date": "2026-05-09T12:34:56.789Z",
"params": "{\"planId\":\"43298432984329\",\"reason\":\"Invalid configuration\"}"
}Quote a Call in Subscription Credits
Credits one call to a catalog endpoint costs with your Nevermined Subscription: the endpoint’s current rate on Nevermined’s rate card, whatever the merchant charges at the moment of the call. Rates change without notice; the rate in force when the call is made applies.
Answers from the rate card alone — the merchant is not contacted, nothing is reserved and nothing is charged. It refuses what POST /router/subscription/route would refuse before contacting the merchant (an ineligible or untariffed endpoint, no spendable subscription), but it does NOT check your credits left, the merchant’s live price or Nevermined’s treasury; the route checks those when the call is made. A url is refused (BCK.SUBSCRIPTION_ROUTER.0005).
Personal API keys only: the Nevermined Subscription belongs to a personal account, so call with a key that carries no organization tag and without X-Current-Org-Id. An OAuth-minted credential is refused (BCK.OAUTH.0030). Where the subscription is not available — on this deployment or to this account — it answers 404 BCK.SUBSCRIPTION_ACCESS.0001.
curl --request POST \
--url https://api.sandbox.nevermined.app/api/v1/router/subscription/quote \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"slug": "webscrape-pro",
"path": "scrape",
"method": "POST"
}
'import requests
url = "https://api.sandbox.nevermined.app/api/v1/router/subscription/quote"
payload = {
"slug": "webscrape-pro",
"path": "scrape",
"method": "POST"
}
headers = {
"Authorization": "Bearer <token>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {Authorization: 'Bearer <token>', 'Content-Type': 'application/json'},
body: JSON.stringify({slug: 'webscrape-pro', path: 'scrape', method: 'POST'})
};
fetch('https://api.sandbox.nevermined.app/api/v1/router/subscription/quote', 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://api.sandbox.nevermined.app/api/v1/router/subscription/quote",
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([
'slug' => 'webscrape-pro',
'path' => 'scrape',
'method' => 'POST'
]),
CURLOPT_HTTPHEADER => [
"Authorization: Bearer <token>",
"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://api.sandbox.nevermined.app/api/v1/router/subscription/quote"
payload := strings.NewReader("{\n \"slug\": \"webscrape-pro\",\n \"path\": \"scrape\",\n \"method\": \"POST\"\n}")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("Authorization", "Bearer <token>")
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://api.sandbox.nevermined.app/api/v1/router/subscription/quote")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"slug\": \"webscrape-pro\",\n \"path\": \"scrape\",\n \"method\": \"POST\"\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.sandbox.nevermined.app/api/v1/router/subscription/quote")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["Authorization"] = 'Bearer <token>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"slug\": \"webscrape-pro\",\n \"path\": \"scrape\",\n \"method\": \"POST\"\n}"
response = http.request(request)
puts response.read_body{
"slug": "webscrape-pro",
"credits": 3,
"tariffVersion": 2
}{
"code": "BCK.ROUTER.0003",
"httpStatus": 500,
"message": "delegation budget exceeded, expired, or inactive",
"details": "Hash JWT is not signed by the node account",
"error": "authorization_pending",
"hint": "Verify the wallet has sufficient balance and that the plan is active.",
"docsUrl": "https://nevermined.ai/docs/development-guide/api-errors/codes#bck-x402-0008",
"category": "integration",
"retryable": true,
"correlationId": "a3f6b1c4-7d2e-4a9b-8e0c-12f4d8e6c5b9",
"uuid": "e-550e8400-e29b-41d4-a716-446655440000",
"date": "2026-05-09T12:34:56.789Z",
"params": "{\"planId\":\"43298432984329\",\"reason\":\"Invalid configuration\"}"
}{
"code": "BCK.ROUTER.0003",
"httpStatus": 500,
"message": "delegation budget exceeded, expired, or inactive",
"details": "Hash JWT is not signed by the node account",
"error": "authorization_pending",
"hint": "Verify the wallet has sufficient balance and that the plan is active.",
"docsUrl": "https://nevermined.ai/docs/development-guide/api-errors/codes#bck-x402-0008",
"category": "integration",
"retryable": true,
"correlationId": "a3f6b1c4-7d2e-4a9b-8e0c-12f4d8e6c5b9",
"uuid": "e-550e8400-e29b-41d4-a716-446655440000",
"date": "2026-05-09T12:34:56.789Z",
"params": "{\"planId\":\"43298432984329\",\"reason\":\"Invalid configuration\"}"
}{
"code": "BCK.ROUTER.0003",
"httpStatus": 500,
"message": "delegation budget exceeded, expired, or inactive",
"details": "Hash JWT is not signed by the node account",
"error": "authorization_pending",
"hint": "Verify the wallet has sufficient balance and that the plan is active.",
"docsUrl": "https://nevermined.ai/docs/development-guide/api-errors/codes#bck-x402-0008",
"category": "integration",
"retryable": true,
"correlationId": "a3f6b1c4-7d2e-4a9b-8e0c-12f4d8e6c5b9",
"uuid": "e-550e8400-e29b-41d4-a716-446655440000",
"date": "2026-05-09T12:34:56.789Z",
"params": "{\"planId\":\"43298432984329\",\"reason\":\"Invalid configuration\"}"
}{
"code": "BCK.ROUTER.0003",
"httpStatus": 500,
"message": "delegation budget exceeded, expired, or inactive",
"details": "Hash JWT is not signed by the node account",
"error": "authorization_pending",
"hint": "Verify the wallet has sufficient balance and that the plan is active.",
"docsUrl": "https://nevermined.ai/docs/development-guide/api-errors/codes#bck-x402-0008",
"category": "integration",
"retryable": true,
"correlationId": "a3f6b1c4-7d2e-4a9b-8e0c-12f4d8e6c5b9",
"uuid": "e-550e8400-e29b-41d4-a716-446655440000",
"date": "2026-05-09T12:34:56.789Z",
"params": "{\"planId\":\"43298432984329\",\"reason\":\"Invalid configuration\"}"
}{
"code": "BCK.ROUTER.0003",
"httpStatus": 500,
"message": "delegation budget exceeded, expired, or inactive",
"details": "Hash JWT is not signed by the node account",
"error": "authorization_pending",
"hint": "Verify the wallet has sufficient balance and that the plan is active.",
"docsUrl": "https://nevermined.ai/docs/development-guide/api-errors/codes#bck-x402-0008",
"category": "integration",
"retryable": true,
"correlationId": "a3f6b1c4-7d2e-4a9b-8e0c-12f4d8e6c5b9",
"uuid": "e-550e8400-e29b-41d4-a716-446655440000",
"date": "2026-05-09T12:34:56.789Z",
"params": "{\"planId\":\"43298432984329\",\"reason\":\"Invalid configuration\"}"
}{
"code": "BCK.ROUTER.0003",
"httpStatus": 500,
"message": "delegation budget exceeded, expired, or inactive",
"details": "Hash JWT is not signed by the node account",
"error": "authorization_pending",
"hint": "Verify the wallet has sufficient balance and that the plan is active.",
"docsUrl": "https://nevermined.ai/docs/development-guide/api-errors/codes#bck-x402-0008",
"category": "integration",
"retryable": true,
"correlationId": "a3f6b1c4-7d2e-4a9b-8e0c-12f4d8e6c5b9",
"uuid": "e-550e8400-e29b-41d4-a716-446655440000",
"date": "2026-05-09T12:34:56.789Z",
"params": "{\"planId\":\"43298432984329\",\"reason\":\"Invalid configuration\"}"
}{
"code": "BCK.ROUTER.0003",
"httpStatus": 500,
"message": "delegation budget exceeded, expired, or inactive",
"details": "Hash JWT is not signed by the node account",
"error": "authorization_pending",
"hint": "Verify the wallet has sufficient balance and that the plan is active.",
"docsUrl": "https://nevermined.ai/docs/development-guide/api-errors/codes#bck-x402-0008",
"category": "integration",
"retryable": true,
"correlationId": "a3f6b1c4-7d2e-4a9b-8e0c-12f4d8e6c5b9",
"uuid": "e-550e8400-e29b-41d4-a716-446655440000",
"date": "2026-05-09T12:34:56.789Z",
"params": "{\"planId\":\"43298432984329\",\"reason\":\"Invalid configuration\"}"
}{
"code": "BCK.ROUTER.0003",
"httpStatus": 500,
"message": "delegation budget exceeded, expired, or inactive",
"details": "Hash JWT is not signed by the node account",
"error": "authorization_pending",
"hint": "Verify the wallet has sufficient balance and that the plan is active.",
"docsUrl": "https://nevermined.ai/docs/development-guide/api-errors/codes#bck-x402-0008",
"category": "integration",
"retryable": true,
"correlationId": "a3f6b1c4-7d2e-4a9b-8e0c-12f4d8e6c5b9",
"uuid": "e-550e8400-e29b-41d4-a716-446655440000",
"date": "2026-05-09T12:34:56.789Z",
"params": "{\"planId\":\"43298432984329\",\"reason\":\"Invalid configuration\"}"
}Authorizations
Your Nevermined API Key (starts with 'nvm:'). Get one at nevermined.app under Settings > API Keys.
Body
Catalog slug of the service to call. Subscription credits pay catalog services only, addressed by slug; the Router resolves it to the merchant server-side.
^[A-Za-z0-9._~-]+$"webscrape-pro"
Subpath of the endpoint to price, as on the route (path segments only).
2048"scrape"
HTTP method of the call to price.
GET, POST, PUT, PATCH, DELETE Response
The credits one call to this endpoint costs, and the tariff version that sets it.
The catalog slug priced.
"webscrape-pro"
Credits one call to this endpoint costs: its current rate on Nevermined's rate card, whatever the merchant charges at the moment of the call.
3
The tariff version that sets credits.
2
Was this page helpful?