curl --request GET \
--url https://api.sandbox.nevermined.app/api/v1/router/subscription/balance \
--header 'Authorization: Bearer <token>'import requests
url = "https://api.sandbox.nevermined.app/api/v1/router/subscription/balance"
headers = {"Authorization": "Bearer <token>"}
response = requests.get(url, headers=headers)
print(response.text)const options = {method: 'GET', headers: {Authorization: 'Bearer <token>'}};
fetch('https://api.sandbox.nevermined.app/api/v1/router/subscription/balance', 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/balance",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "GET",
CURLOPT_HTTPHEADER => [
"Authorization: Bearer <token>"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"net/http"
"io"
)
func main() {
url := "https://api.sandbox.nevermined.app/api/v1/router/subscription/balance"
req, _ := http.NewRequest("GET", url, nil)
req.Header.Add("Authorization", "Bearer <token>")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.get("https://api.sandbox.nevermined.app/api/v1/router/subscription/balance")
.header("Authorization", "Bearer <token>")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.sandbox.nevermined.app/api/v1/router/subscription/balance")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Get.new(url)
request["Authorization"] = 'Bearer <token>'
response = http.request(request)
puts response.read_body{
"subscribed": true,
"creditsLeft": "1240",
"spendable": true,
"resetsAt": "2026-10-30T00:00:00.000Z",
"cancelAtPeriodEnd": true,
"status": "active",
"suspended": true,
"plan": {
"catalogId": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"planKey": "standard",
"creditsPerCycle": "20000"
}
}{
"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\"}"
}Read Your Subscription Credits
Your Nevermined Subscription credits left, when they reset, and your plan. Charges nothing. Called in an organization you are an active member of (X-Current-Org-Id, or that organization’s API key), it reads that organization’s subscription instead, never your personal one; organizations can no longer subscribe, so that is subscribed: false unless the organization still holds one bought earlier. subscribed: false carries no other field; every other field is present exactly when subscribed is true.
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 GET \
--url https://api.sandbox.nevermined.app/api/v1/router/subscription/balance \
--header 'Authorization: Bearer <token>'import requests
url = "https://api.sandbox.nevermined.app/api/v1/router/subscription/balance"
headers = {"Authorization": "Bearer <token>"}
response = requests.get(url, headers=headers)
print(response.text)const options = {method: 'GET', headers: {Authorization: 'Bearer <token>'}};
fetch('https://api.sandbox.nevermined.app/api/v1/router/subscription/balance', 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/balance",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "GET",
CURLOPT_HTTPHEADER => [
"Authorization: Bearer <token>"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"net/http"
"io"
)
func main() {
url := "https://api.sandbox.nevermined.app/api/v1/router/subscription/balance"
req, _ := http.NewRequest("GET", url, nil)
req.Header.Add("Authorization", "Bearer <token>")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.get("https://api.sandbox.nevermined.app/api/v1/router/subscription/balance")
.header("Authorization", "Bearer <token>")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.sandbox.nevermined.app/api/v1/router/subscription/balance")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Get.new(url)
request["Authorization"] = 'Bearer <token>'
response = http.request(request)
puts response.read_body{
"subscribed": true,
"creditsLeft": "1240",
"spendable": true,
"resetsAt": "2026-10-30T00:00:00.000Z",
"cancelAtPeriodEnd": true,
"status": "active",
"suspended": true,
"plan": {
"catalogId": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"planKey": "standard",
"creditsPerCycle": "20000"
}
}{
"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.
Response
The caller's credits, reset date and plan.
Whether the caller has a current Nevermined Subscription.
Credits left: the unexpired remainder, as a whole-number digit string. What the Router debits.
"1240"
Whether these credits can pay a call right now: the subscription is active or trialing and not suspended by a card dispute.
When this period's credits expire and — unless cancelAtPeriodEnd — the next period's are granted, on payment of its invoice (ISO 8601). null until the billing period is recorded.
"2026-10-30T00:00:00.000Z"
The subscription ends at resetsAt instead of renewing.
The subscription status. A past_due subscription keeps its credits but cannot spend them until its invoice is paid. An ended subscription answers subscribed: false.
incomplete, trialing, active, past_due, unpaid, paused "active"
True while a card dispute is open, or after one was decided in the cardholder's favour: the credits cannot be spent. A dispute decided in Nevermined's favour lifts it, once no other dispute is open or was decided in the cardholder's favour.
Show child attributes
Show child attributes
Was this page helpful?