Confirm-then-execute safety model
Destructive and high-volume bulk MCP tools return a dry-run preview on the first call. Execute by calling again with confirm: true and the confirmation_id from the preview.
Confirmation TTL: 300 seconds
Bulk create threshold: 10 rows (above this requires confirmation)
Guarded tools: codes_delete</code>, <code class="docs-inline-code">codes_bulk_create</code>, <code class="docs-inline-code">codes_bulk_update_status
First call (dry run)
Returns { requires_confirmation: true, confirmation_id, preview }
Second call (execute)
Same arguments plus confirm: true and confirmation_id
REST bulk import uses a separate two-phase flow with confirm_token via POST /v1/qr-codes/bulk and POST /v1/qr-codes/bulk/{import_ulid}/confirm.
All tools
Each tool includes typed input/output schemas and copy-pasteable cURL, JavaScript, Python, PHP, and C# examples.
status_read
Health check and token context (GET /v1/status).
REST mapping
GET /v1/status
Ability
Any valid token on an API-enabled plan
Example response
{
"jsonrpc": "2.0",
"id": 1,
"result": {
"content": [
{
"type": "text",
"text": "{\"status\":\"ok\",\"version\":\"v1\",\"organization\":{\"ulid\":\"01HXYZORGULID000000000001\",\"name\":\"Acme Marketing\",\"slug\":\"acme-marketing\"},\"plan\":{\"code\":\"professional\",\"name\":\"Professional (annual)\"},\"api\":{\"rate_limit_per_min\":120,\"calls_included_month\":50000,\"calls_used_month\":1240},\"token\":{\"name\":\"CI automation\",\"abilities\":[\"codes.view\",\"codes.create\",\"mcp.access\"]}}"
}
],
"isError": false
}
}
Response schema
Field
Type
Required
Description
jsonrpc
string
required
—
id
integer
required
—
result.content
array<object>
optional
—
result.isError
boolean
optional
—
Code samples
cURL
JavaScript
Python
PHP
C#
curl -sS -X POST "https://mcp.qrhero.com/mcp" \
-H "Authorization: Bearer YOUR_QRHERO_TOKEN" \
-H "Accept: application/json" \
-H "Content-Type: application/json" \
-d '{
"jsonrpc": "2.0",
"id": 1,
"method": "tools/call",
"params": {
"name": "status_read",
"arguments": []
}
}'
const response = await fetch('https://mcp.qrhero.com/mcp', {
method: 'POST',
headers: {
'Authorization': 'Bearer YOUR_QRHERO_TOKEN',
'Content-Type': 'application/json',
},
body: JSON.stringify({
"jsonrpc": "2.0",
"id": 1,
"method": "tools/call",
"params": {
"name": "status_read",
"arguments": []
}
}),
});
const data = await response.json();
console.log(data);
import requests
url = 'https://mcp.qrhero.com/mcp'
headers = {
'Authorization': 'Bearer YOUR_QRHERO_TOKEN',
'Content-Type': 'application/json',
}
payload = {
"jsonrpc": "2.0",
"id": 1,
"method": "tools/call",
"params": {
"name": "status_read",
"arguments": []
}
}
response = requests.post(url, headers=headers, json=payload)
response.raise_for_status()
print(response.json())
<?php
$client = new GuzzleHttp\Client();
$response = $client->post('https://mcp.qrhero.com/mcp', [
'headers' => [
'Authorization' => 'Bearer YOUR_QRHERO_TOKEN',
'Content-Type' => 'application/json',
],
'json' => {
"jsonrpc": "2.0",
"id": 1,
"method": "tools/call",
"params": {
"name": "status_read",
"arguments": []
}
},
]);
$data = json_decode($response->getBody()->getContents(), true);
print_r($data);
using var client = new HttpClient();
client.DefaultRequestHeaders.Authorization =
new AuthenticationHeaderValue("Bearer", "YOUR_QRHERO_TOKEN");
var content = new StringContent(
'{"jsonrpc":"2.0","id":1,"method":"tools/call","params":{"name":"status_read","arguments":[]}}',
Encoding.UTF8,
"application/json");
var response = await client.PostAsync("https://mcp.qrhero.com/mcp", content);
response.EnsureSuccessStatusCode();
var json = await response.Content.ReadAsStringAsync();
Console.WriteLine(json);
organization_read
Read organization profile (GET /v1/organization).
REST mapping
GET /v1/organization
Ability
Any valid token on an API-enabled plan
Example response
{
"jsonrpc": "2.0",
"id": 1,
"result": {
"content": [
{
"type": "text",
"text": "{\"data\":{\"ulid\":\"01HXYZORGULID000000000001\",\"name\":\"Acme Marketing\",\"slug\":\"acme-marketing\",\"locale\":\"en\",\"currency\":\"EUR\",\"plan\":{\"code\":\"professional\",\"name\":\"Professional (annual)\"},\"created_at\":\"2026-01-15T10:00:00+00:00\",\"updated_at\":\"2026-07-01T08:30:00+00:00\"}}"
}
],
"isError": false
}
}
Response schema
Field
Type
Required
Description
jsonrpc
string
required
—
id
integer
required
—
result.content
array<object>
optional
—
result.isError
boolean
optional
—
Code samples
cURL
JavaScript
Python
PHP
C#
curl -sS -X POST "https://mcp.qrhero.com/mcp" \
-H "Authorization: Bearer YOUR_QRHERO_TOKEN" \
-H "Accept: application/json" \
-H "Content-Type: application/json" \
-d '{
"jsonrpc": "2.0",
"id": 1,
"method": "tools/call",
"params": {
"name": "organization_read",
"arguments": []
}
}'
const response = await fetch('https://mcp.qrhero.com/mcp', {
method: 'POST',
headers: {
'Authorization': 'Bearer YOUR_QRHERO_TOKEN',
'Content-Type': 'application/json',
},
body: JSON.stringify({
"jsonrpc": "2.0",
"id": 1,
"method": "tools/call",
"params": {
"name": "organization_read",
"arguments": []
}
}),
});
const data = await response.json();
console.log(data);
import requests
url = 'https://mcp.qrhero.com/mcp'
headers = {
'Authorization': 'Bearer YOUR_QRHERO_TOKEN',
'Content-Type': 'application/json',
}
payload = {
"jsonrpc": "2.0",
"id": 1,
"method": "tools/call",
"params": {
"name": "organization_read",
"arguments": []
}
}
response = requests.post(url, headers=headers, json=payload)
response.raise_for_status()
print(response.json())
<?php
$client = new GuzzleHttp\Client();
$response = $client->post('https://mcp.qrhero.com/mcp', [
'headers' => [
'Authorization' => 'Bearer YOUR_QRHERO_TOKEN',
'Content-Type' => 'application/json',
],
'json' => {
"jsonrpc": "2.0",
"id": 1,
"method": "tools/call",
"params": {
"name": "organization_read",
"arguments": []
}
},
]);
$data = json_decode($response->getBody()->getContents(), true);
print_r($data);
using var client = new HttpClient();
client.DefaultRequestHeaders.Authorization =
new AuthenticationHeaderValue("Bearer", "YOUR_QRHERO_TOKEN");
var content = new StringContent(
'{"jsonrpc":"2.0","id":1,"method":"tools/call","params":{"name":"organization_read","arguments":[]}}',
Encoding.UTF8,
"application/json");
var response = await client.PostAsync("https://mcp.qrhero.com/mcp", content);
response.EnsureSuccessStatusCode();
var json = await response.Content.ReadAsStringAsync();
Console.WriteLine(json);
analytics_read
Read scan analytics rollup (GET /v1/analytics).
REST mapping
GET /v1/analytics
Ability
analytics.view
Input schema
Field
Type
Required
Description
range
integer
optional
7, 30, or 90 days (default 30).
dimension
string
optional
country | device | referrer | language
brand_ulid
string
optional
Optional brand scope.
code_ulid
string
optional
Optional code scope.
Example response
{
"jsonrpc": "2.0",
"id": 1,
"result": {
"content": [
{
"type": "text",
"text": "{\"data\":{\"scope_level\":\"organization\",\"range_days\":30,\"totals\":{\"scans\":1240,\"uniques\":890,\"unique_rate\":0.718},\"time_series\":[{\"date\":\"2026-06-07\",\"scans\":42},{\"date\":\"2026-06-08\",\"scans\":38}],\"dimension\":\"country\",\"dimension_label\":\"Country\",\"dimension_breakdown\":[{\"label\":\"DK\",\"scans\":520,\"uniques\":410},{\"label\":\"DE\",\"scans\":310,\"uniques\":240}],\"child_breakdown\":[{\"key\":\"01HXYZCODEULID000000000001\",\"label\":\"Launch 2026\",\"scans\":620,\"uniques\":480}]}}"
}
],
"isError": false
}
}
Response schema
Field
Type
Required
Description
jsonrpc
string
required
—
id
integer
required
—
result.content
array<object>
optional
—
result.isError
boolean
optional
—
Code samples
cURL
JavaScript
Python
PHP
C#
curl -sS -X POST "https://mcp.qrhero.com/mcp" \
-H "Authorization: Bearer YOUR_QRHERO_TOKEN" \
-H "Accept: application/json" \
-H "Content-Type: application/json" \
-d '{
"jsonrpc": "2.0",
"id": 1,
"method": "tools/call",
"params": {
"name": "analytics_read",
"arguments": {
"range": "example",
"dimension": "example",
"brand_ulid": "01HXYZDOMAINULID0000000001",
"code_ulid": "example"
}
}
}'
const response = await fetch('https://mcp.qrhero.com/mcp', {
method: 'POST',
headers: {
'Authorization': 'Bearer YOUR_QRHERO_TOKEN',
'Content-Type': 'application/json',
},
body: JSON.stringify({
"jsonrpc": "2.0",
"id": 1,
"method": "tools/call",
"params": {
"name": "analytics_read",
"arguments": {
"range": "example",
"dimension": "example",
"brand_ulid": "01HXYZDOMAINULID0000000001",
"code_ulid": "example"
}
}
}),
});
const data = await response.json();
console.log(data);
import requests
url = 'https://mcp.qrhero.com/mcp'
headers = {
'Authorization': 'Bearer YOUR_QRHERO_TOKEN',
'Content-Type': 'application/json',
}
payload = {
"jsonrpc": "2.0",
"id": 1,
"method": "tools/call",
"params": {
"name": "analytics_read",
"arguments": {
"range": "example",
"dimension": "example",
"brand_ulid": "01HXYZDOMAINULID0000000001",
"code_ulid": "example"
}
}
}
response = requests.post(url, headers=headers, json=payload)
response.raise_for_status()
print(response.json())
<?php
$client = new GuzzleHttp\Client();
$response = $client->post('https://mcp.qrhero.com/mcp', [
'headers' => [
'Authorization' => 'Bearer YOUR_QRHERO_TOKEN',
'Content-Type' => 'application/json',
],
'json' => {
"jsonrpc": "2.0",
"id": 1,
"method": "tools/call",
"params": {
"name": "analytics_read",
"arguments": {
"range": "example",
"dimension": "example",
"brand_ulid": "01HXYZDOMAINULID0000000001",
"code_ulid": "example"
}
}
},
]);
$data = json_decode($response->getBody()->getContents(), true);
print_r($data);
using var client = new HttpClient();
client.DefaultRequestHeaders.Authorization =
new AuthenticationHeaderValue("Bearer", "YOUR_QRHERO_TOKEN");
var content = new StringContent(
'{"jsonrpc":"2.0","id":1,"method":"tools/call","params":{"name":"analytics_read","arguments":{"range":"example","dimension":"example","brand_ulid":"01HXYZDOMAINULID0000000001","code_ulid":"example"}}}',
Encoding.UTF8,
"application/json");
var response = await client.PostAsync("https://mcp.qrhero.com/mcp", content);
response.EnsureSuccessStatusCode();
var json = await response.Content.ReadAsStringAsync();
Console.WriteLine(json);
analytics_export
Export analytics payload with csv_rows (GET /v1/analytics/export).
REST mapping
GET /v1/analytics/export
Ability
analytics.export
Input schema
Field
Type
Required
Description
range
integer
optional
7, 30, or 90 days (default 30).
dimension
string
optional
country | device | referrer | language
brand_ulid
string
optional
Optional brand scope.
code_ulid
string
optional
Optional code scope.
Example response
{
"jsonrpc": "2.0",
"id": 1,
"result": {
"content": [
{
"type": "text",
"text": "{\"data\":{\"scope_level\":\"organization\",\"range_days\":30,\"totals\":{\"scans\":1240,\"uniques\":890,\"unique_rate\":0.718},\"time_series\":[{\"date\":\"2026-06-07\",\"scans\":42},{\"date\":\"2026-06-08\",\"scans\":38}],\"dimension\":\"country\",\"dimension_label\":\"Country\",\"dimension_breakdown\":[{\"label\":\"DK\",\"scans\":520,\"uniques\":410},{\"label\":\"DE\",\"scans\":310,\"uniques\":240}],\"child_breakdown\":[{\"key\":\"01HXYZCODEULID000000000001\",\"label\":\"Launch 2026\",\"scans\":620,\"uniques\":480}],\"csv_rows\":[{\"date\":\"2026-06-07\",\"country\":\"DK\",\"scans\":42}]}}"
}
],
"isError": false
}
}
Response schema
Field
Type
Required
Description
jsonrpc
string
required
—
id
integer
required
—
result.content
array<object>
optional
—
result.isError
boolean
optional
—
Code samples
cURL
JavaScript
Python
PHP
C#
curl -sS -X POST "https://mcp.qrhero.com/mcp" \
-H "Authorization: Bearer YOUR_QRHERO_TOKEN" \
-H "Accept: application/json" \
-H "Content-Type: application/json" \
-d '{
"jsonrpc": "2.0",
"id": 1,
"method": "tools/call",
"params": {
"name": "analytics_export",
"arguments": {
"range": "example",
"dimension": "example",
"brand_ulid": "01HXYZDOMAINULID0000000001",
"code_ulid": "example"
}
}
}'
const response = await fetch('https://mcp.qrhero.com/mcp', {
method: 'POST',
headers: {
'Authorization': 'Bearer YOUR_QRHERO_TOKEN',
'Content-Type': 'application/json',
},
body: JSON.stringify({
"jsonrpc": "2.0",
"id": 1,
"method": "tools/call",
"params": {
"name": "analytics_export",
"arguments": {
"range": "example",
"dimension": "example",
"brand_ulid": "01HXYZDOMAINULID0000000001",
"code_ulid": "example"
}
}
}),
});
const data = await response.json();
console.log(data);
import requests
url = 'https://mcp.qrhero.com/mcp'
headers = {
'Authorization': 'Bearer YOUR_QRHERO_TOKEN',
'Content-Type': 'application/json',
}
payload = {
"jsonrpc": "2.0",
"id": 1,
"method": "tools/call",
"params": {
"name": "analytics_export",
"arguments": {
"range": "example",
"dimension": "example",
"brand_ulid": "01HXYZDOMAINULID0000000001",
"code_ulid": "example"
}
}
}
response = requests.post(url, headers=headers, json=payload)
response.raise_for_status()
print(response.json())
<?php
$client = new GuzzleHttp\Client();
$response = $client->post('https://mcp.qrhero.com/mcp', [
'headers' => [
'Authorization' => 'Bearer YOUR_QRHERO_TOKEN',
'Content-Type' => 'application/json',
],
'json' => {
"jsonrpc": "2.0",
"id": 1,
"method": "tools/call",
"params": {
"name": "analytics_export",
"arguments": {
"range": "example",
"dimension": "example",
"brand_ulid": "01HXYZDOMAINULID0000000001",
"code_ulid": "example"
}
}
},
]);
$data = json_decode($response->getBody()->getContents(), true);
print_r($data);
using var client = new HttpClient();
client.DefaultRequestHeaders.Authorization =
new AuthenticationHeaderValue("Bearer", "YOUR_QRHERO_TOKEN");
var content = new StringContent(
'{"jsonrpc":"2.0","id":1,"method":"tools/call","params":{"name":"analytics_export","arguments":{"range":"example","dimension":"example","brand_ulid":"01HXYZDOMAINULID0000000001","code_ulid":"example"}}}',
Encoding.UTF8,
"application/json");
var response = await client.PostAsync("https://mcp.qrhero.com/mcp", content);
response.EnsureSuccessStatusCode();
var json = await response.Content.ReadAsStringAsync();
Console.WriteLine(json);
brands_list
List brands (GET /v1/brands).
REST mapping
GET /v1/brands
Ability
brands.view
Example response
{
"jsonrpc": "2.0",
"id": 1,
"result": {
"content": [
{
"type": "text",
"text": "{\"data\":[{\"ulid\":\"01HXYZBRANDULID00000000001\",\"name\":\"Summer Campaign\",\"slug\":\"summer-campaign\",\"brand_kit\":{\"primary_color\":\"#0f3460\",\"secondary_color\":\"#e94560\"},\"settings\":{\"locale\":\"en\"},\"primary_domain\":{\"ulid\":\"01HXYZDOMAINULID0000000001\",\"host\":\"links.example.com\"},\"created_at\":\"2026-02-01T12:00:00+00:00\",\"updated_at\":\"2026-07-01T08:30:00+00:00\"}]}"
}
],
"isError": false
}
}
Response schema
Field
Type
Required
Description
jsonrpc
string
required
—
id
integer
required
—
result.content
array<object>
optional
—
result.isError
boolean
optional
—
Code samples
cURL
JavaScript
Python
PHP
C#
curl -sS -X POST "https://mcp.qrhero.com/mcp" \
-H "Authorization: Bearer YOUR_QRHERO_TOKEN" \
-H "Accept: application/json" \
-H "Content-Type: application/json" \
-d '{
"jsonrpc": "2.0",
"id": 1,
"method": "tools/call",
"params": {
"name": "brands_list",
"arguments": []
}
}'
const response = await fetch('https://mcp.qrhero.com/mcp', {
method: 'POST',
headers: {
'Authorization': 'Bearer YOUR_QRHERO_TOKEN',
'Content-Type': 'application/json',
},
body: JSON.stringify({
"jsonrpc": "2.0",
"id": 1,
"method": "tools/call",
"params": {
"name": "brands_list",
"arguments": []
}
}),
});
const data = await response.json();
console.log(data);
import requests
url = 'https://mcp.qrhero.com/mcp'
headers = {
'Authorization': 'Bearer YOUR_QRHERO_TOKEN',
'Content-Type': 'application/json',
}
payload = {
"jsonrpc": "2.0",
"id": 1,
"method": "tools/call",
"params": {
"name": "brands_list",
"arguments": []
}
}
response = requests.post(url, headers=headers, json=payload)
response.raise_for_status()
print(response.json())
<?php
$client = new GuzzleHttp\Client();
$response = $client->post('https://mcp.qrhero.com/mcp', [
'headers' => [
'Authorization' => 'Bearer YOUR_QRHERO_TOKEN',
'Content-Type' => 'application/json',
],
'json' => {
"jsonrpc": "2.0",
"id": 1,
"method": "tools/call",
"params": {
"name": "brands_list",
"arguments": []
}
},
]);
$data = json_decode($response->getBody()->getContents(), true);
print_r($data);
using var client = new HttpClient();
client.DefaultRequestHeaders.Authorization =
new AuthenticationHeaderValue("Bearer", "YOUR_QRHERO_TOKEN");
var content = new StringContent(
'{"jsonrpc":"2.0","id":1,"method":"tools/call","params":{"name":"brands_list","arguments":[]}}',
Encoding.UTF8,
"application/json");
var response = await client.PostAsync("https://mcp.qrhero.com/mcp", content);
response.EnsureSuccessStatusCode();
var json = await response.Content.ReadAsStringAsync();
Console.WriteLine(json);
brands_create
Create a brand (POST /v1/brands).
REST mapping
POST /v1/brands
Ability
brands.manage
Input schema
Field
Type
Required
Description
name
string
required
Brand name.
slug
string
optional
Optional alpha_dash slug.
brand_kit
object
optional
Optional brand kit object.
settings
object
optional
Optional settings object.
primary_domain_ulid
string
optional
Optional primary domain ULID.
Example response
{
"jsonrpc": "2.0",
"id": 1,
"result": {
"content": [
{
"type": "text",
"text": "{\"data\":{\"ulid\":\"01HXYZBRANDULID00000000001\",\"name\":\"Summer Campaign\",\"slug\":\"summer-campaign\",\"brand_kit\":{\"primary_color\":\"#0f3460\",\"secondary_color\":\"#e94560\"},\"settings\":{\"locale\":\"en\"},\"primary_domain\":{\"ulid\":\"01HXYZDOMAINULID0000000001\",\"host\":\"links.example.com\"},\"created_at\":\"2026-02-01T12:00:00+00:00\",\"updated_at\":\"2026-07-01T08:30:00+00:00\"}}"
}
],
"isError": false
}
}
Response schema
Field
Type
Required
Description
jsonrpc
string
required
—
id
integer
required
—
result.content
array<object>
optional
—
result.isError
boolean
optional
—
Code samples
cURL
JavaScript
Python
PHP
C#
curl -sS -X POST "https://mcp.qrhero.com/mcp" \
-H "Authorization: Bearer YOUR_QRHERO_TOKEN" \
-H "Accept: application/json" \
-H "Content-Type: application/json" \
-d '{
"jsonrpc": "2.0",
"id": 1,
"method": "tools/call",
"params": {
"name": "brands_create",
"arguments": {
"name": "Automation token",
"slug": "launch-2026",
"brand_kit": {
"primary_color": "#4f46e5"
},
"settings": {
"locale": "en"
},
"primary_domain_ulid": "01HXYZDOMAINULID0000000001"
}
}
}'
const response = await fetch('https://mcp.qrhero.com/mcp', {
method: 'POST',
headers: {
'Authorization': 'Bearer YOUR_QRHERO_TOKEN',
'Content-Type': 'application/json',
},
body: JSON.stringify({
"jsonrpc": "2.0",
"id": 1,
"method": "tools/call",
"params": {
"name": "brands_create",
"arguments": {
"name": "Automation token",
"slug": "launch-2026",
"brand_kit": {
"primary_color": "#4f46e5"
},
"settings": {
"locale": "en"
},
"primary_domain_ulid": "01HXYZDOMAINULID0000000001"
}
}
}),
});
const data = await response.json();
console.log(data);
import requests
url = 'https://mcp.qrhero.com/mcp'
headers = {
'Authorization': 'Bearer YOUR_QRHERO_TOKEN',
'Content-Type': 'application/json',
}
payload = {
"jsonrpc": "2.0",
"id": 1,
"method": "tools/call",
"params": {
"name": "brands_create",
"arguments": {
"name": "Automation token",
"slug": "launch-2026",
"brand_kit": {
"primary_color": "#4f46e5"
},
"settings": {
"locale": "en"
},
"primary_domain_ulid": "01HXYZDOMAINULID0000000001"
}
}
}
response = requests.post(url, headers=headers, json=payload)
response.raise_for_status()
print(response.json())
<?php
$client = new GuzzleHttp\Client();
$response = $client->post('https://mcp.qrhero.com/mcp', [
'headers' => [
'Authorization' => 'Bearer YOUR_QRHERO_TOKEN',
'Content-Type' => 'application/json',
],
'json' => {
"jsonrpc": "2.0",
"id": 1,
"method": "tools/call",
"params": {
"name": "brands_create",
"arguments": {
"name": "Automation token",
"slug": "launch-2026",
"brand_kit": {
"primary_color": "#4f46e5"
},
"settings": {
"locale": "en"
},
"primary_domain_ulid": "01HXYZDOMAINULID0000000001"
}
}
},
]);
$data = json_decode($response->getBody()->getContents(), true);
print_r($data);
using var client = new HttpClient();
client.DefaultRequestHeaders.Authorization =
new AuthenticationHeaderValue("Bearer", "YOUR_QRHERO_TOKEN");
var content = new StringContent(
'{"jsonrpc":"2.0","id":1,"method":"tools/call","params":{"name":"brands_create","arguments":{"name":"Automation token","slug":"launch-2026","brand_kit":{"primary_color":"#4f46e5"},"settings":{"locale":"en"},"primary_domain_ulid":"01HXYZDOMAINULID0000000001"}}}',
Encoding.UTF8,
"application/json");
var response = await client.PostAsync("https://mcp.qrhero.com/mcp", content);
response.EnsureSuccessStatusCode();
var json = await response.Content.ReadAsStringAsync();
Console.WriteLine(json);
brands_update
Update a brand (PATCH /v1/brands/{brand_ulid}).
REST mapping
PATCH /v1/brands/{brand_ulid}
Ability
brands.manage
Input schema
Field
Type
Required
Description
brand_ulid
string
required
Brand ULID.
name
string
optional
Brand name.
slug
string
optional
Optional alpha_dash slug.
brand_kit
object
optional
Optional brand kit object.
settings
object
optional
Optional settings object.
primary_domain_ulid
string
optional
Optional primary domain ULID.
Example response
{
"jsonrpc": "2.0",
"id": 1,
"result": {
"content": [
{
"type": "text",
"text": "{\"data\":{\"ulid\":\"01HXYZBRANDULID00000000001\",\"name\":\"Summer Campaign\",\"slug\":\"summer-campaign\",\"brand_kit\":{\"primary_color\":\"#0f3460\",\"secondary_color\":\"#e94560\"},\"settings\":{\"locale\":\"en\"},\"primary_domain\":{\"ulid\":\"01HXYZDOMAINULID0000000001\",\"host\":\"links.example.com\"},\"created_at\":\"2026-02-01T12:00:00+00:00\",\"updated_at\":\"2026-07-01T08:30:00+00:00\"}}"
}
],
"isError": false
}
}
Response schema
Field
Type
Required
Description
jsonrpc
string
required
—
id
integer
required
—
result.content
array<object>
optional
—
result.isError
boolean
optional
—
Code samples
cURL
JavaScript
Python
PHP
C#
curl -sS -X POST "https://mcp.qrhero.com/mcp" \
-H "Authorization: Bearer YOUR_QRHERO_TOKEN" \
-H "Accept: application/json" \
-H "Content-Type: application/json" \
-d '{
"jsonrpc": "2.0",
"id": 1,
"method": "tools/call",
"params": {
"name": "brands_update",
"arguments": {
"name": "Automation token",
"slug": "launch-2026",
"brand_kit": {
"primary_color": "#4f46e5"
},
"settings": {
"locale": "en"
},
"primary_domain_ulid": "01HXYZDOMAINULID0000000001"
}
}
}'
const response = await fetch('https://mcp.qrhero.com/mcp', {
method: 'POST',
headers: {
'Authorization': 'Bearer YOUR_QRHERO_TOKEN',
'Content-Type': 'application/json',
},
body: JSON.stringify({
"jsonrpc": "2.0",
"id": 1,
"method": "tools/call",
"params": {
"name": "brands_update",
"arguments": {
"name": "Automation token",
"slug": "launch-2026",
"brand_kit": {
"primary_color": "#4f46e5"
},
"settings": {
"locale": "en"
},
"primary_domain_ulid": "01HXYZDOMAINULID0000000001"
}
}
}),
});
const data = await response.json();
console.log(data);
import requests
url = 'https://mcp.qrhero.com/mcp'
headers = {
'Authorization': 'Bearer YOUR_QRHERO_TOKEN',
'Content-Type': 'application/json',
}
payload = {
"jsonrpc": "2.0",
"id": 1,
"method": "tools/call",
"params": {
"name": "brands_update",
"arguments": {
"name": "Automation token",
"slug": "launch-2026",
"brand_kit": {
"primary_color": "#4f46e5"
},
"settings": {
"locale": "en"
},
"primary_domain_ulid": "01HXYZDOMAINULID0000000001"
}
}
}
response = requests.post(url, headers=headers, json=payload)
response.raise_for_status()
print(response.json())
<?php
$client = new GuzzleHttp\Client();
$response = $client->post('https://mcp.qrhero.com/mcp', [
'headers' => [
'Authorization' => 'Bearer YOUR_QRHERO_TOKEN',
'Content-Type' => 'application/json',
],
'json' => {
"jsonrpc": "2.0",
"id": 1,
"method": "tools/call",
"params": {
"name": "brands_update",
"arguments": {
"name": "Automation token",
"slug": "launch-2026",
"brand_kit": {
"primary_color": "#4f46e5"
},
"settings": {
"locale": "en"
},
"primary_domain_ulid": "01HXYZDOMAINULID0000000001"
}
}
},
]);
$data = json_decode($response->getBody()->getContents(), true);
print_r($data);
using var client = new HttpClient();
client.DefaultRequestHeaders.Authorization =
new AuthenticationHeaderValue("Bearer", "YOUR_QRHERO_TOKEN");
var content = new StringContent(
'{"jsonrpc":"2.0","id":1,"method":"tools/call","params":{"name":"brands_update","arguments":{"name":"Automation token","slug":"launch-2026","brand_kit":{"primary_color":"#4f46e5"},"settings":{"locale":"en"},"primary_domain_ulid":"01HXYZDOMAINULID0000000001"}}}',
Encoding.UTF8,
"application/json");
var response = await client.PostAsync("https://mcp.qrhero.com/mcp", content);
response.EnsureSuccessStatusCode();
var json = await response.Content.ReadAsStringAsync();
Console.WriteLine(json);
domains_list
List domains (GET /v1/domains).
REST mapping
GET /v1/domains
Ability
domains.view
Example response
{
"jsonrpc": "2.0",
"id": 1,
"result": {
"content": [
{
"type": "text",
"text": "{\"data\":[{\"ulid\":\"01HXYZDOMAINULID0000000001\",\"host\":\"links.example.com\",\"type\":\"custom\",\"status\":\"active\",\"ssl_status\":\"active\",\"is_primary\":true,\"is_shared\":false,\"verified_at\":\"2026-02-01T12:05:00+00:00\",\"verification\":{\"txt_record_name\":\"_qrhero-verify.links.example.com\",\"txt_record_value\":\"qrhero-verify=abc123\",\"cname_target\":\"qr.qrhero.link\"},\"created_at\":\"2026-02-01T12:00:00+00:00\",\"updated_at\":\"2026-07-01T08:30:00+00:00\"}]}"
}
],
"isError": false
}
}
Response schema
Field
Type
Required
Description
jsonrpc
string
required
—
id
integer
required
—
result.content
array<object>
optional
—
result.isError
boolean
optional
—
Code samples
cURL
JavaScript
Python
PHP
C#
curl -sS -X POST "https://mcp.qrhero.com/mcp" \
-H "Authorization: Bearer YOUR_QRHERO_TOKEN" \
-H "Accept: application/json" \
-H "Content-Type: application/json" \
-d '{
"jsonrpc": "2.0",
"id": 1,
"method": "tools/call",
"params": {
"name": "domains_list",
"arguments": []
}
}'
const response = await fetch('https://mcp.qrhero.com/mcp', {
method: 'POST',
headers: {
'Authorization': 'Bearer YOUR_QRHERO_TOKEN',
'Content-Type': 'application/json',
},
body: JSON.stringify({
"jsonrpc": "2.0",
"id": 1,
"method": "tools/call",
"params": {
"name": "domains_list",
"arguments": []
}
}),
});
const data = await response.json();
console.log(data);
import requests
url = 'https://mcp.qrhero.com/mcp'
headers = {
'Authorization': 'Bearer YOUR_QRHERO_TOKEN',
'Content-Type': 'application/json',
}
payload = {
"jsonrpc": "2.0",
"id": 1,
"method": "tools/call",
"params": {
"name": "domains_list",
"arguments": []
}
}
response = requests.post(url, headers=headers, json=payload)
response.raise_for_status()
print(response.json())
<?php
$client = new GuzzleHttp\Client();
$response = $client->post('https://mcp.qrhero.com/mcp', [
'headers' => [
'Authorization' => 'Bearer YOUR_QRHERO_TOKEN',
'Content-Type' => 'application/json',
],
'json' => {
"jsonrpc": "2.0",
"id": 1,
"method": "tools/call",
"params": {
"name": "domains_list",
"arguments": []
}
},
]);
$data = json_decode($response->getBody()->getContents(), true);
print_r($data);
using var client = new HttpClient();
client.DefaultRequestHeaders.Authorization =
new AuthenticationHeaderValue("Bearer", "YOUR_QRHERO_TOKEN");
var content = new StringContent(
'{"jsonrpc":"2.0","id":1,"method":"tools/call","params":{"name":"domains_list","arguments":[]}}',
Encoding.UTF8,
"application/json");
var response = await client.PostAsync("https://mcp.qrhero.com/mcp", content);
response.EnsureSuccessStatusCode();
var json = await response.Content.ReadAsStringAsync();
Console.WriteLine(json);
domains_create
Add a custom domain (POST /v1/domains).
REST mapping
POST /v1/domains
Ability
domains.manage
Input schema
Field
Type
Required
Description
host
string
required
Hostname, e.g. links.example.com.
verify
boolean
optional
Attempt immediate TXT verification.
Example response
{
"jsonrpc": "2.0",
"id": 1,
"result": {
"content": [
{
"type": "text",
"text": "{\"data\":{\"ulid\":\"01HXYZDOMAINULID0000000001\",\"host\":\"links.example.com\",\"type\":\"custom\",\"status\":\"active\",\"ssl_status\":\"active\",\"is_primary\":true,\"is_shared\":false,\"verified_at\":\"2026-02-01T12:05:00+00:00\",\"verification\":{\"txt_record_name\":\"_qrhero-verify.links.example.com\",\"txt_record_value\":\"qrhero-verify=abc123\",\"cname_target\":\"qr.qrhero.link\"},\"created_at\":\"2026-02-01T12:00:00+00:00\",\"updated_at\":\"2026-07-01T08:30:00+00:00\"}}"
}
],
"isError": false
}
}
Response schema
Field
Type
Required
Description
jsonrpc
string
required
—
id
integer
required
—
result.content
array<object>
optional
—
result.isError
boolean
optional
—
Code samples
cURL
JavaScript
Python
PHP
C#
curl -sS -X POST "https://mcp.qrhero.com/mcp" \
-H "Authorization: Bearer YOUR_QRHERO_TOKEN" \
-H "Accept: application/json" \
-H "Content-Type: application/json" \
-d '{
"jsonrpc": "2.0",
"id": 1,
"method": "tools/call",
"params": {
"name": "domains_create",
"arguments": {
"host": "links.example.com",
"verify": true
}
}
}'
const response = await fetch('https://mcp.qrhero.com/mcp', {
method: 'POST',
headers: {
'Authorization': 'Bearer YOUR_QRHERO_TOKEN',
'Content-Type': 'application/json',
},
body: JSON.stringify({
"jsonrpc": "2.0",
"id": 1,
"method": "tools/call",
"params": {
"name": "domains_create",
"arguments": {
"host": "links.example.com",
"verify": true
}
}
}),
});
const data = await response.json();
console.log(data);
import requests
url = 'https://mcp.qrhero.com/mcp'
headers = {
'Authorization': 'Bearer YOUR_QRHERO_TOKEN',
'Content-Type': 'application/json',
}
payload = {
"jsonrpc": "2.0",
"id": 1,
"method": "tools/call",
"params": {
"name": "domains_create",
"arguments": {
"host": "links.example.com",
"verify": true
}
}
}
response = requests.post(url, headers=headers, json=payload)
response.raise_for_status()
print(response.json())
<?php
$client = new GuzzleHttp\Client();
$response = $client->post('https://mcp.qrhero.com/mcp', [
'headers' => [
'Authorization' => 'Bearer YOUR_QRHERO_TOKEN',
'Content-Type' => 'application/json',
],
'json' => {
"jsonrpc": "2.0",
"id": 1,
"method": "tools/call",
"params": {
"name": "domains_create",
"arguments": {
"host": "links.example.com",
"verify": true
}
}
},
]);
$data = json_decode($response->getBody()->getContents(), true);
print_r($data);
using var client = new HttpClient();
client.DefaultRequestHeaders.Authorization =
new AuthenticationHeaderValue("Bearer", "YOUR_QRHERO_TOKEN");
var content = new StringContent(
'{"jsonrpc":"2.0","id":1,"method":"tools/call","params":{"name":"domains_create","arguments":{"host":"links.example.com","verify":true}}}',
Encoding.UTF8,
"application/json");
var response = await client.PostAsync("https://mcp.qrhero.com/mcp", content);
response.EnsureSuccessStatusCode();
var json = await response.Content.ReadAsStringAsync();
Console.WriteLine(json);
domains_update
Verify or update a domain (PATCH /v1/domains/{domain_ulid}).
REST mapping
PATCH /v1/domains/{domain_ulid}
Ability
domains.manage
Input schema
Field
Type
Required
Description
domain_ulid
string
required
Domain ULID.
verify
boolean
optional
Re-check TXT ownership.
refresh_ssl
boolean
optional
Refresh SSL status.
is_primary
boolean
optional
Set as primary domain.
Example response
{
"jsonrpc": "2.0",
"id": 1,
"result": {
"content": [
{
"type": "text",
"text": "{\"data\":{\"ulid\":\"01HXYZDOMAINULID0000000001\",\"host\":\"links.example.com\",\"type\":\"custom\",\"status\":\"active\",\"ssl_status\":\"active\",\"is_primary\":true,\"is_shared\":false,\"verified_at\":\"2026-02-01T12:05:00+00:00\",\"verification\":{\"txt_record_name\":\"_qrhero-verify.links.example.com\",\"txt_record_value\":\"qrhero-verify=abc123\",\"cname_target\":\"qr.qrhero.link\"},\"created_at\":\"2026-02-01T12:00:00+00:00\",\"updated_at\":\"2026-07-01T08:30:00+00:00\"}}"
}
],
"isError": false
}
}
Response schema
Field
Type
Required
Description
jsonrpc
string
required
—
id
integer
required
—
result.content
array<object>
optional
—
result.isError
boolean
optional
—
Code samples
cURL
JavaScript
Python
PHP
C#
curl -sS -X POST "https://mcp.qrhero.com/mcp" \
-H "Authorization: Bearer YOUR_QRHERO_TOKEN" \
-H "Accept: application/json" \
-H "Content-Type: application/json" \
-d '{
"jsonrpc": "2.0",
"id": 1,
"method": "tools/call",
"params": {
"name": "domains_update",
"arguments": {
"verify": true,
"refresh_ssl": true,
"is_primary": true
}
}
}'
const response = await fetch('https://mcp.qrhero.com/mcp', {
method: 'POST',
headers: {
'Authorization': 'Bearer YOUR_QRHERO_TOKEN',
'Content-Type': 'application/json',
},
body: JSON.stringify({
"jsonrpc": "2.0",
"id": 1,
"method": "tools/call",
"params": {
"name": "domains_update",
"arguments": {
"verify": true,
"refresh_ssl": true,
"is_primary": true
}
}
}),
});
const data = await response.json();
console.log(data);
import requests
url = 'https://mcp.qrhero.com/mcp'
headers = {
'Authorization': 'Bearer YOUR_QRHERO_TOKEN',
'Content-Type': 'application/json',
}
payload = {
"jsonrpc": "2.0",
"id": 1,
"method": "tools/call",
"params": {
"name": "domains_update",
"arguments": {
"verify": true,
"refresh_ssl": true,
"is_primary": true
}
}
}
response = requests.post(url, headers=headers, json=payload)
response.raise_for_status()
print(response.json())
<?php
$client = new GuzzleHttp\Client();
$response = $client->post('https://mcp.qrhero.com/mcp', [
'headers' => [
'Authorization' => 'Bearer YOUR_QRHERO_TOKEN',
'Content-Type' => 'application/json',
],
'json' => {
"jsonrpc": "2.0",
"id": 1,
"method": "tools/call",
"params": {
"name": "domains_update",
"arguments": {
"verify": true,
"refresh_ssl": true,
"is_primary": true
}
}
},
]);
$data = json_decode($response->getBody()->getContents(), true);
print_r($data);
using var client = new HttpClient();
client.DefaultRequestHeaders.Authorization =
new AuthenticationHeaderValue("Bearer", "YOUR_QRHERO_TOKEN");
var content = new StringContent(
'{"jsonrpc":"2.0","id":1,"method":"tools/call","params":{"name":"domains_update","arguments":{"verify":true,"refresh_ssl":true,"is_primary":true}}}',
Encoding.UTF8,
"application/json");
var response = await client.PostAsync("https://mcp.qrhero.com/mcp", content);
response.EnsureSuccessStatusCode();
var json = await response.Content.ReadAsStringAsync();
Console.WriteLine(json);
codes_list
List QR codes (GET /v1/qr-codes).
REST mapping
GET /v1/qr-codes
Ability
codes.view
Example response
{
"jsonrpc": "2.0",
"id": 1,
"result": {
"content": [
{
"type": "text",
"text": "{\"data\":[{\"ulid\":\"01HXYZCODEULID000000000001\",\"name\":\"Launch 2026\",\"slug\":\"acme-marketing/launch-2026\",\"type\":\"url\",\"status\":\"active\",\"public_url\":\"https://links.example.com/acme-marketing/launch-2026\",\"destination\":\"https://example.com/launch\",\"routing\":{\"rules\":[]},\"schedule\":{\"enabled\":false},\"password\":false,\"date_begin\":null,\"expire_at\":null,\"redirect_cap\":null,\"redirects_count\":142,\"utm_params\":null,\"device_routing\":null,\"language_routing\":null,\"tracking_pixels\":null,\"custom_js\":null,\"landing_config\":null,\"prelander_enabled\":false,\"prelander_seconds\":null,\"prelander_message\":null,\"brand\":{\"ulid\":\"01HXYZBRANDULID00000000001\",\"name\":\"Summer Campaign\"},\"domain\":{\"ulid\":\"01HXYZDOMAINULID0000000001\",\"host\":\"links.example.com\"},\"style\":{\"ulid\":\"01HXYZSTYLEULID00000000001\",\"name\":\"Brand default\"},\"created_at\":\"2026-03-01T09:00:00+00:00\",\"updated_at\":\"2026-07-01T08:30:00+00:00\"}]}"
}
],
"isError": false
}
}
Response schema
Field
Type
Required
Description
jsonrpc
string
required
—
id
integer
required
—
result.content
array<object>
optional
—
result.isError
boolean
optional
—
Code samples
cURL
JavaScript
Python
PHP
C#
curl -sS -X POST "https://mcp.qrhero.com/mcp" \
-H "Authorization: Bearer YOUR_QRHERO_TOKEN" \
-H "Accept: application/json" \
-H "Content-Type: application/json" \
-d '{
"jsonrpc": "2.0",
"id": 1,
"method": "tools/call",
"params": {
"name": "codes_list",
"arguments": []
}
}'
const response = await fetch('https://mcp.qrhero.com/mcp', {
method: 'POST',
headers: {
'Authorization': 'Bearer YOUR_QRHERO_TOKEN',
'Content-Type': 'application/json',
},
body: JSON.stringify({
"jsonrpc": "2.0",
"id": 1,
"method": "tools/call",
"params": {
"name": "codes_list",
"arguments": []
}
}),
});
const data = await response.json();
console.log(data);
import requests
url = 'https://mcp.qrhero.com/mcp'
headers = {
'Authorization': 'Bearer YOUR_QRHERO_TOKEN',
'Content-Type': 'application/json',
}
payload = {
"jsonrpc": "2.0",
"id": 1,
"method": "tools/call",
"params": {
"name": "codes_list",
"arguments": []
}
}
response = requests.post(url, headers=headers, json=payload)
response.raise_for_status()
print(response.json())
<?php
$client = new GuzzleHttp\Client();
$response = $client->post('https://mcp.qrhero.com/mcp', [
'headers' => [
'Authorization' => 'Bearer YOUR_QRHERO_TOKEN',
'Content-Type' => 'application/json',
],
'json' => {
"jsonrpc": "2.0",
"id": 1,
"method": "tools/call",
"params": {
"name": "codes_list",
"arguments": []
}
},
]);
$data = json_decode($response->getBody()->getContents(), true);
print_r($data);
using var client = new HttpClient();
client.DefaultRequestHeaders.Authorization =
new AuthenticationHeaderValue("Bearer", "YOUR_QRHERO_TOKEN");
var content = new StringContent(
'{"jsonrpc":"2.0","id":1,"method":"tools/call","params":{"name":"codes_list","arguments":[]}}',
Encoding.UTF8,
"application/json");
var response = await client.PostAsync("https://mcp.qrhero.com/mcp", content);
response.EnsureSuccessStatusCode();
var json = await response.Content.ReadAsStringAsync();
Console.WriteLine(json);
codes_read
Read a QR code (GET /v1/qr-codes/{code_ulid}).
REST mapping
GET /v1/qr-codes/{code_ulid}
Ability
codes.view
Input schema
Field
Type
Required
Description
code_ulid
string
required
QR code ULID.
Example response
{
"jsonrpc": "2.0",
"id": 1,
"result": {
"content": [
{
"type": "text",
"text": "{\"data\":{\"ulid\":\"01HXYZCODEULID000000000001\",\"name\":\"Launch 2026\",\"slug\":\"acme-marketing/launch-2026\",\"type\":\"url\",\"status\":\"active\",\"public_url\":\"https://links.example.com/acme-marketing/launch-2026\",\"destination\":\"https://example.com/launch\",\"routing\":{\"rules\":[]},\"schedule\":{\"enabled\":false},\"password\":false,\"date_begin\":null,\"expire_at\":null,\"redirect_cap\":null,\"redirects_count\":142,\"utm_params\":null,\"device_routing\":null,\"language_routing\":null,\"tracking_pixels\":null,\"custom_js\":null,\"landing_config\":null,\"prelander_enabled\":false,\"prelander_seconds\":null,\"prelander_message\":null,\"brand\":{\"ulid\":\"01HXYZBRANDULID00000000001\",\"name\":\"Summer Campaign\"},\"domain\":{\"ulid\":\"01HXYZDOMAINULID0000000001\",\"host\":\"links.example.com\"},\"style\":{\"ulid\":\"01HXYZSTYLEULID00000000001\",\"name\":\"Brand default\"},\"created_at\":\"2026-03-01T09:00:00+00:00\",\"updated_at\":\"2026-07-01T08:30:00+00:00\"}}"
}
],
"isError": false
}
}
Response schema
Field
Type
Required
Description
jsonrpc
string
required
—
id
integer
required
—
result.content
array<object>
optional
—
result.isError
boolean
optional
—
Code samples
cURL
JavaScript
Python
PHP
C#
curl -sS -X POST "https://mcp.qrhero.com/mcp" \
-H "Authorization: Bearer YOUR_QRHERO_TOKEN" \
-H "Accept: application/json" \
-H "Content-Type: application/json" \
-d '{
"jsonrpc": "2.0",
"id": 1,
"method": "tools/call",
"params": {
"name": "codes_read",
"arguments": {
"code_ulid": "01HXYZCODEULID000000000001"
}
}
}'
const response = await fetch('https://mcp.qrhero.com/mcp', {
method: 'POST',
headers: {
'Authorization': 'Bearer YOUR_QRHERO_TOKEN',
'Content-Type': 'application/json',
},
body: JSON.stringify({
"jsonrpc": "2.0",
"id": 1,
"method": "tools/call",
"params": {
"name": "codes_read",
"arguments": {
"code_ulid": "01HXYZCODEULID000000000001"
}
}
}),
});
const data = await response.json();
console.log(data);
import requests
url = 'https://mcp.qrhero.com/mcp'
headers = {
'Authorization': 'Bearer YOUR_QRHERO_TOKEN',
'Content-Type': 'application/json',
}
payload = {
"jsonrpc": "2.0",
"id": 1,
"method": "tools/call",
"params": {
"name": "codes_read",
"arguments": {
"code_ulid": "01HXYZCODEULID000000000001"
}
}
}
response = requests.post(url, headers=headers, json=payload)
response.raise_for_status()
print(response.json())
<?php
$client = new GuzzleHttp\Client();
$response = $client->post('https://mcp.qrhero.com/mcp', [
'headers' => [
'Authorization' => 'Bearer YOUR_QRHERO_TOKEN',
'Content-Type' => 'application/json',
],
'json' => {
"jsonrpc": "2.0",
"id": 1,
"method": "tools/call",
"params": {
"name": "codes_read",
"arguments": {
"code_ulid": "01HXYZCODEULID000000000001"
}
}
},
]);
$data = json_decode($response->getBody()->getContents(), true);
print_r($data);
using var client = new HttpClient();
client.DefaultRequestHeaders.Authorization =
new AuthenticationHeaderValue("Bearer", "YOUR_QRHERO_TOKEN");
var content = new StringContent(
'{"jsonrpc":"2.0","id":1,"method":"tools/call","params":{"name":"codes_read","arguments":{"code_ulid":"01HXYZCODEULID000000000001"}}}',
Encoding.UTF8,
"application/json");
var response = await client.PostAsync("https://mcp.qrhero.com/mcp", content);
response.EnsureSuccessStatusCode();
var json = await response.Content.ReadAsStringAsync();
Console.WriteLine(json);
codes_create
Create a QR code (POST /v1/qr-codes).
REST mapping
POST /v1/qr-codes
Ability
codes.create
Input schema
Field
Type
Required
Description
slug
string
required
Individual slug (stored as org-slug/slug).
destination
string
required
Redirect destination URL.
domain_ulid
string
required
Domain ULID.
name
string
optional
Optional display name.
brand_ulid
string
optional
Optional brand ULID.
style_ulid
string
optional
Optional style ULID.
type
string
optional
Code type (default redirect).
status
string
optional
Optional status.
routing
object
optional
Optional routing rules.
schedule
object
optional
Optional schedule object.
password
string
optional
Optional password (plan-gated).
redirect_cap
integer
optional
Optional redirect cap (plan-gated).
Example response
{
"jsonrpc": "2.0",
"id": 1,
"result": {
"content": [
{
"type": "text",
"text": "{\"data\":{\"ulid\":\"01HXYZCODEULID000000000001\",\"name\":\"Launch 2026\",\"slug\":\"acme-marketing/launch-2026\",\"type\":\"url\",\"status\":\"active\",\"public_url\":\"https://links.example.com/acme-marketing/launch-2026\",\"destination\":\"https://example.com/launch\",\"routing\":{\"rules\":[]},\"schedule\":{\"enabled\":false},\"password\":false,\"date_begin\":null,\"expire_at\":null,\"redirect_cap\":null,\"redirects_count\":142,\"utm_params\":null,\"device_routing\":null,\"language_routing\":null,\"tracking_pixels\":null,\"custom_js\":null,\"landing_config\":null,\"prelander_enabled\":false,\"prelander_seconds\":null,\"prelander_message\":null,\"brand\":{\"ulid\":\"01HXYZBRANDULID00000000001\",\"name\":\"Summer Campaign\"},\"domain\":{\"ulid\":\"01HXYZDOMAINULID0000000001\",\"host\":\"links.example.com\"},\"style\":{\"ulid\":\"01HXYZSTYLEULID00000000001\",\"name\":\"Brand default\"},\"created_at\":\"2026-03-01T09:00:00+00:00\",\"updated_at\":\"2026-07-01T08:30:00+00:00\"}}"
}
],
"isError": false
}
}
Response schema
Field
Type
Required
Description
jsonrpc
string
required
—
id
integer
required
—
result.content
array<object>
optional
—
result.isError
boolean
optional
—
Code samples
cURL
JavaScript
Python
PHP
C#
curl -sS -X POST "https://mcp.qrhero.com/mcp" \
-H "Authorization: Bearer YOUR_QRHERO_TOKEN" \
-H "Accept: application/json" \
-H "Content-Type: application/json" \
-d '{
"jsonrpc": "2.0",
"id": 1,
"method": "tools/call",
"params": {
"name": "codes_create",
"arguments": {
"slug": "launch-2026",
"destination": {
"url": "https://example.com"
},
"domain_ulid": "01HXYZDOMAINULID0000000001",
"name": "Automation token",
"brand_ulid": "01HXYZDOMAINULID0000000001",
"style_ulid": "01HXYZDOMAINULID0000000001",
"redirect_cap": 100,
"password": "example",
"routing": {
"rules": []
},
"schedule": {
"enabled": false
}
}
}
}'
const response = await fetch('https://mcp.qrhero.com/mcp', {
method: 'POST',
headers: {
'Authorization': 'Bearer YOUR_QRHERO_TOKEN',
'Content-Type': 'application/json',
},
body: JSON.stringify({
"jsonrpc": "2.0",
"id": 1,
"method": "tools/call",
"params": {
"name": "codes_create",
"arguments": {
"slug": "launch-2026",
"destination": {
"url": "https://example.com"
},
"domain_ulid": "01HXYZDOMAINULID0000000001",
"name": "Automation token",
"brand_ulid": "01HXYZDOMAINULID0000000001",
"style_ulid": "01HXYZDOMAINULID0000000001",
"redirect_cap": 100,
"password": "example",
"routing": {
"rules": []
},
"schedule": {
"enabled": false
}
}
}
}),
});
const data = await response.json();
console.log(data);
import requests
url = 'https://mcp.qrhero.com/mcp'
headers = {
'Authorization': 'Bearer YOUR_QRHERO_TOKEN',
'Content-Type': 'application/json',
}
payload = {
"jsonrpc": "2.0",
"id": 1,
"method": "tools/call",
"params": {
"name": "codes_create",
"arguments": {
"slug": "launch-2026",
"destination": {
"url": "https://example.com"
},
"domain_ulid": "01HXYZDOMAINULID0000000001",
"name": "Automation token",
"brand_ulid": "01HXYZDOMAINULID0000000001",
"style_ulid": "01HXYZDOMAINULID0000000001",
"redirect_cap": 100,
"password": "example",
"routing": {
"rules": []
},
"schedule": {
"enabled": false
}
}
}
}
response = requests.post(url, headers=headers, json=payload)
response.raise_for_status()
print(response.json())
<?php
$client = new GuzzleHttp\Client();
$response = $client->post('https://mcp.qrhero.com/mcp', [
'headers' => [
'Authorization' => 'Bearer YOUR_QRHERO_TOKEN',
'Content-Type' => 'application/json',
],
'json' => {
"jsonrpc": "2.0",
"id": 1,
"method": "tools/call",
"params": {
"name": "codes_create",
"arguments": {
"slug": "launch-2026",
"destination": {
"url": "https://example.com"
},
"domain_ulid": "01HXYZDOMAINULID0000000001",
"name": "Automation token",
"brand_ulid": "01HXYZDOMAINULID0000000001",
"style_ulid": "01HXYZDOMAINULID0000000001",
"redirect_cap": 100,
"password": "example",
"routing": {
"rules": []
},
"schedule": {
"enabled": false
}
}
}
},
]);
$data = json_decode($response->getBody()->getContents(), true);
print_r($data);
using var client = new HttpClient();
client.DefaultRequestHeaders.Authorization =
new AuthenticationHeaderValue("Bearer", "YOUR_QRHERO_TOKEN");
var content = new StringContent(
'{"jsonrpc":"2.0","id":1,"method":"tools/call","params":{"name":"codes_create","arguments":{"slug":"launch-2026","destination":{"url":"https://example.com"},"domain_ulid":"01HXYZDOMAINULID0000000001","name":"Automation token","brand_ulid":"01HXYZDOMAINULID0000000001","style_ulid":"01HXYZDOMAINULID0000000001","redirect_cap":100,"password":"example","routing":{"rules":[]},"schedule":{"enabled":false}}}}',
Encoding.UTF8,
"application/json");
var response = await client.PostAsync("https://mcp.qrhero.com/mcp", content);
response.EnsureSuccessStatusCode();
var json = await response.Content.ReadAsStringAsync();
Console.WriteLine(json);
codes_update
Update a QR code (PATCH /v1/qr-codes/{code_ulid}).
REST mapping
PATCH /v1/qr-codes/{code_ulid}
Ability
codes.update
Input schema
Field
Type
Required
Description
code_ulid
string
required
QR code ULID.
destination
string
optional
Redirect destination URL.
status
string
optional
Optional status.
name
string
optional
Optional display name.
routing
object
optional
Optional routing rules.
redirect_cap
integer
optional
Optional redirect cap.
Example response
{
"jsonrpc": "2.0",
"id": 1,
"result": {
"content": [
{
"type": "text",
"text": "{\"data\":{\"ulid\":\"01HXYZCODEULID000000000001\",\"name\":\"Launch 2026\",\"slug\":\"acme-marketing/launch-2026\",\"type\":\"url\",\"status\":\"active\",\"public_url\":\"https://links.example.com/acme-marketing/launch-2026\",\"destination\":\"https://example.com/launch\",\"routing\":{\"rules\":[]},\"schedule\":{\"enabled\":false},\"password\":false,\"date_begin\":null,\"expire_at\":null,\"redirect_cap\":null,\"redirects_count\":142,\"utm_params\":null,\"device_routing\":null,\"language_routing\":null,\"tracking_pixels\":null,\"custom_js\":null,\"landing_config\":null,\"prelander_enabled\":false,\"prelander_seconds\":null,\"prelander_message\":null,\"brand\":{\"ulid\":\"01HXYZBRANDULID00000000001\",\"name\":\"Summer Campaign\"},\"domain\":{\"ulid\":\"01HXYZDOMAINULID0000000001\",\"host\":\"links.example.com\"},\"style\":{\"ulid\":\"01HXYZSTYLEULID00000000001\",\"name\":\"Brand default\"},\"created_at\":\"2026-03-01T09:00:00+00:00\",\"updated_at\":\"2026-07-01T08:30:00+00:00\"}}"
}
],
"isError": false
}
}
Response schema
Field
Type
Required
Description
jsonrpc
string
required
—
id
integer
required
—
result.content
array<object>
optional
—
result.isError
boolean
optional
—
Code samples
cURL
JavaScript
Python
PHP
C#
curl -sS -X POST "https://mcp.qrhero.com/mcp" \
-H "Authorization: Bearer YOUR_QRHERO_TOKEN" \
-H "Accept: application/json" \
-H "Content-Type: application/json" \
-d '{
"jsonrpc": "2.0",
"id": 1,
"method": "tools/call",
"params": {
"name": "codes_update",
"arguments": {
"destination": {
"url": "https://example.com"
},
"status": "active",
"name": "Automation token",
"redirect_cap": 100,
"routing": {
"rules": []
}
}
}
}'
const response = await fetch('https://mcp.qrhero.com/mcp', {
method: 'POST',
headers: {
'Authorization': 'Bearer YOUR_QRHERO_TOKEN',
'Content-Type': 'application/json',
},
body: JSON.stringify({
"jsonrpc": "2.0",
"id": 1,
"method": "tools/call",
"params": {
"name": "codes_update",
"arguments": {
"destination": {
"url": "https://example.com"
},
"status": "active",
"name": "Automation token",
"redirect_cap": 100,
"routing": {
"rules": []
}
}
}
}),
});
const data = await response.json();
console.log(data);
import requests
url = 'https://mcp.qrhero.com/mcp'
headers = {
'Authorization': 'Bearer YOUR_QRHERO_TOKEN',
'Content-Type': 'application/json',
}
payload = {
"jsonrpc": "2.0",
"id": 1,
"method": "tools/call",
"params": {
"name": "codes_update",
"arguments": {
"destination": {
"url": "https://example.com"
},
"status": "active",
"name": "Automation token",
"redirect_cap": 100,
"routing": {
"rules": []
}
}
}
}
response = requests.post(url, headers=headers, json=payload)
response.raise_for_status()
print(response.json())
<?php
$client = new GuzzleHttp\Client();
$response = $client->post('https://mcp.qrhero.com/mcp', [
'headers' => [
'Authorization' => 'Bearer YOUR_QRHERO_TOKEN',
'Content-Type' => 'application/json',
],
'json' => {
"jsonrpc": "2.0",
"id": 1,
"method": "tools/call",
"params": {
"name": "codes_update",
"arguments": {
"destination": {
"url": "https://example.com"
},
"status": "active",
"name": "Automation token",
"redirect_cap": 100,
"routing": {
"rules": []
}
}
}
},
]);
$data = json_decode($response->getBody()->getContents(), true);
print_r($data);
using var client = new HttpClient();
client.DefaultRequestHeaders.Authorization =
new AuthenticationHeaderValue("Bearer", "YOUR_QRHERO_TOKEN");
var content = new StringContent(
'{"jsonrpc":"2.0","id":1,"method":"tools/call","params":{"name":"codes_update","arguments":{"destination":{"url":"https://example.com"},"status":"active","name":"Automation token","redirect_cap":100,"routing":{"rules":[]}}}}',
Encoding.UTF8,
"application/json");
var response = await client.PostAsync("https://mcp.qrhero.com/mcp", content);
response.EnsureSuccessStatusCode();
var json = await response.Content.ReadAsStringAsync();
Console.WriteLine(json);
codes_delete
Confirm-then-execute
Destructive
Soft-delete a QR code. Always requires a dry-run preview first; call again with confirm: true to execute.
REST mapping
DELETE /v1/qr-codes/{code_ulid}
Ability
codes.delete
Input schema
Field
Type
Required
Description
code_ulid
string
required
QR code ULID.
confirm
boolean
optional
Set to true on the second call to execute after reviewing the preview.
confirmation_id
string
optional
Confirmation id returned by the dry-run preview.
Example response
{
"jsonrpc": "2.0",
"id": 1,
"result": {
"content": [
{
"type": "text",
"text": "[]"
}
],
"isError": false
}
}
Response schema
Field
Type
Required
Description
jsonrpc
string
required
—
id
integer
required
—
result.content
array<object>
optional
—
result.isError
boolean
optional
—
Code samples
cURL
JavaScript
Python
PHP
C#
curl -sS -X POST "https://mcp.qrhero.com/mcp" \
-H "Authorization: Bearer YOUR_QRHERO_TOKEN" \
-H "Accept: application/json" \
-H "Content-Type: application/json" \
-d '{
"jsonrpc": "2.0",
"id": 1,
"method": "tools/call",
"params": {
"name": "codes_delete",
"arguments": []
}
}'
const response = await fetch('https://mcp.qrhero.com/mcp', {
method: 'POST',
headers: {
'Authorization': 'Bearer YOUR_QRHERO_TOKEN',
'Content-Type': 'application/json',
},
body: JSON.stringify({
"jsonrpc": "2.0",
"id": 1,
"method": "tools/call",
"params": {
"name": "codes_delete",
"arguments": []
}
}),
});
const data = await response.json();
console.log(data);
import requests
url = 'https://mcp.qrhero.com/mcp'
headers = {
'Authorization': 'Bearer YOUR_QRHERO_TOKEN',
'Content-Type': 'application/json',
}
payload = {
"jsonrpc": "2.0",
"id": 1,
"method": "tools/call",
"params": {
"name": "codes_delete",
"arguments": []
}
}
response = requests.post(url, headers=headers, json=payload)
response.raise_for_status()
print(response.json())
<?php
$client = new GuzzleHttp\Client();
$response = $client->post('https://mcp.qrhero.com/mcp', [
'headers' => [
'Authorization' => 'Bearer YOUR_QRHERO_TOKEN',
'Content-Type' => 'application/json',
],
'json' => {
"jsonrpc": "2.0",
"id": 1,
"method": "tools/call",
"params": {
"name": "codes_delete",
"arguments": []
}
},
]);
$data = json_decode($response->getBody()->getContents(), true);
print_r($data);
using var client = new HttpClient();
client.DefaultRequestHeaders.Authorization =
new AuthenticationHeaderValue("Bearer", "YOUR_QRHERO_TOKEN");
var content = new StringContent(
'{"jsonrpc":"2.0","id":1,"method":"tools/call","params":{"name":"codes_delete","arguments":[]}}',
Encoding.UTF8,
"application/json");
var response = await client.PostAsync("https://mcp.qrhero.com/mcp", content);
response.EnsureSuccessStatusCode();
var json = await response.Content.ReadAsStringAsync();
Console.WriteLine(json);
codes_bulk_create
Confirm-then-execute
Create multiple QR codes. Above the configured row threshold, returns a dry-run preview first; call again with confirm: true to execute. At or below the threshold, creates immediately.
REST mapping
POST /v1/qr-codes/bulk
Ability
codes.create
Input schema
Field
Type
Required
Description
rows
array
required
Array of row objects.
defaults
object
optional
Optional defaults applied to each row.
confirm
boolean
optional
Set to true on the second call to execute after reviewing the preview.
confirmation_id
string
optional
Confirmation id returned by the dry-run preview.
Example response
{
"jsonrpc": "2.0",
"id": 1,
"result": {
"content": [
{
"type": "text",
"text": "{\"data\":{\"ulid\":\"01HXYZIMPORTULID0000000001\",\"type\":\"qr_codes\",\"status\":\"staged\",\"source\":\"api\",\"awaiting_confirmation\":true,\"total_rows\":2,\"processed_rows\":0,\"success_count\":0,\"failed_count\":0,\"skipped_count\":0,\"valid_row_count\":2,\"progress_percent\":0,\"preview_errors\":[],\"error_message\":null,\"has_error_report\":false,\"confirmed_at\":null,\"completed_at\":null,\"created_at\":\"2026-07-01T10:00:00+00:00\",\"updated_at\":\"2026-07-01T10:00:00+00:00\"},\"meta\":{\"confirm_token\":\"CONFIRM_TOKEN_FROM_STAGE\"}}"
}
],
"isError": false
}
}
Response schema
Field
Type
Required
Description
jsonrpc
string
required
—
id
integer
required
—
result.content
array<object>
optional
—
result.isError
boolean
optional
—
Code samples
cURL
JavaScript
Python
PHP
C#
curl -sS -X POST "https://mcp.qrhero.com/mcp" \
-H "Authorization: Bearer YOUR_QRHERO_TOKEN" \
-H "Accept: application/json" \
-H "Content-Type: application/json" \
-d '{
"jsonrpc": "2.0",
"id": 1,
"method": "tools/call",
"params": {
"name": "codes_bulk_create",
"arguments": []
}
}'
const response = await fetch('https://mcp.qrhero.com/mcp', {
method: 'POST',
headers: {
'Authorization': 'Bearer YOUR_QRHERO_TOKEN',
'Content-Type': 'application/json',
},
body: JSON.stringify({
"jsonrpc": "2.0",
"id": 1,
"method": "tools/call",
"params": {
"name": "codes_bulk_create",
"arguments": []
}
}),
});
const data = await response.json();
console.log(data);
import requests
url = 'https://mcp.qrhero.com/mcp'
headers = {
'Authorization': 'Bearer YOUR_QRHERO_TOKEN',
'Content-Type': 'application/json',
}
payload = {
"jsonrpc": "2.0",
"id": 1,
"method": "tools/call",
"params": {
"name": "codes_bulk_create",
"arguments": []
}
}
response = requests.post(url, headers=headers, json=payload)
response.raise_for_status()
print(response.json())
<?php
$client = new GuzzleHttp\Client();
$response = $client->post('https://mcp.qrhero.com/mcp', [
'headers' => [
'Authorization' => 'Bearer YOUR_QRHERO_TOKEN',
'Content-Type' => 'application/json',
],
'json' => {
"jsonrpc": "2.0",
"id": 1,
"method": "tools/call",
"params": {
"name": "codes_bulk_create",
"arguments": []
}
},
]);
$data = json_decode($response->getBody()->getContents(), true);
print_r($data);
using var client = new HttpClient();
client.DefaultRequestHeaders.Authorization =
new AuthenticationHeaderValue("Bearer", "YOUR_QRHERO_TOKEN");
var content = new StringContent(
'{"jsonrpc":"2.0","id":1,"method":"tools/call","params":{"name":"codes_bulk_create","arguments":[]}}',
Encoding.UTF8,
"application/json");
var response = await client.PostAsync("https://mcp.qrhero.com/mcp", content);
response.EnsureSuccessStatusCode();
var json = await response.Content.ReadAsStringAsync();
Console.WriteLine(json);
codes_bulk_read
Read bulk import status (GET /v1/qr-codes/bulk/{import_ulid}).
REST mapping
GET /v1/qr-codes/bulk/{import_ulid}
Ability
codes.view
Input schema
Field
Type
Required
Description
import_ulid
string
required
Bulk import ULID.
Example response
{
"jsonrpc": "2.0",
"id": 1,
"result": {
"content": [
{
"type": "text",
"text": "{\"data\":{\"ulid\":\"01HXYZIMPORTULID0000000001\",\"type\":\"qr_codes\",\"status\":\"awaiting_confirmation\",\"source\":\"api\",\"awaiting_confirmation\":true,\"total_rows\":2,\"processed_rows\":0,\"success_count\":0,\"failed_count\":0,\"skipped_count\":0,\"valid_row_count\":2,\"progress_percent\":0,\"preview_errors\":[],\"error_message\":null,\"has_error_report\":false,\"confirmed_at\":null,\"completed_at\":null,\"created_at\":\"2026-07-01T10:00:00+00:00\",\"updated_at\":\"2026-07-01T10:00:00+00:00\"}}"
}
],
"isError": false
}
}
Response schema
Field
Type
Required
Description
jsonrpc
string
required
—
id
integer
required
—
result.content
array<object>
optional
—
result.isError
boolean
optional
—
Code samples
cURL
JavaScript
Python
PHP
C#
curl -sS -X POST "https://mcp.qrhero.com/mcp" \
-H "Authorization: Bearer YOUR_QRHERO_TOKEN" \
-H "Accept: application/json" \
-H "Content-Type: application/json" \
-d '{
"jsonrpc": "2.0",
"id": 1,
"method": "tools/call",
"params": {
"name": "codes_bulk_read",
"arguments": {
"import_ulid": "01HXYZIMPORTULID0000000001"
}
}
}'
const response = await fetch('https://mcp.qrhero.com/mcp', {
method: 'POST',
headers: {
'Authorization': 'Bearer YOUR_QRHERO_TOKEN',
'Content-Type': 'application/json',
},
body: JSON.stringify({
"jsonrpc": "2.0",
"id": 1,
"method": "tools/call",
"params": {
"name": "codes_bulk_read",
"arguments": {
"import_ulid": "01HXYZIMPORTULID0000000001"
}
}
}),
});
const data = await response.json();
console.log(data);
import requests
url = 'https://mcp.qrhero.com/mcp'
headers = {
'Authorization': 'Bearer YOUR_QRHERO_TOKEN',
'Content-Type': 'application/json',
}
payload = {
"jsonrpc": "2.0",
"id": 1,
"method": "tools/call",
"params": {
"name": "codes_bulk_read",
"arguments": {
"import_ulid": "01HXYZIMPORTULID0000000001"
}
}
}
response = requests.post(url, headers=headers, json=payload)
response.raise_for_status()
print(response.json())
<?php
$client = new GuzzleHttp\Client();
$response = $client->post('https://mcp.qrhero.com/mcp', [
'headers' => [
'Authorization' => 'Bearer YOUR_QRHERO_TOKEN',
'Content-Type' => 'application/json',
],
'json' => {
"jsonrpc": "2.0",
"id": 1,
"method": "tools/call",
"params": {
"name": "codes_bulk_read",
"arguments": {
"import_ulid": "01HXYZIMPORTULID0000000001"
}
}
},
]);
$data = json_decode($response->getBody()->getContents(), true);
print_r($data);
using var client = new HttpClient();
client.DefaultRequestHeaders.Authorization =
new AuthenticationHeaderValue("Bearer", "YOUR_QRHERO_TOKEN");
var content = new StringContent(
'{"jsonrpc":"2.0","id":1,"method":"tools/call","params":{"name":"codes_bulk_read","arguments":{"import_ulid":"01HXYZIMPORTULID0000000001"}}}',
Encoding.UTF8,
"application/json");
var response = await client.PostAsync("https://mcp.qrhero.com/mcp", content);
response.EnsureSuccessStatusCode();
var json = await response.Content.ReadAsStringAsync();
Console.WriteLine(json);
codes_bulk_confirm
Confirm and execute bulk import (POST /v1/qr-codes/bulk/{import_ulid}/confirm).
REST mapping
POST /v1/qr-codes/bulk/{import_ulid}/confirm
Ability
codes.create
Input schema
Field
Type
Required
Description
import_ulid
string
required
Bulk import ULID.
confirm_token
string
required
Token from codes_bulk_create response.
Example response
{
"jsonrpc": "2.0",
"id": 1,
"result": {
"content": [
{
"type": "text",
"text": "{\"data\":{\"ulid\":\"01HXYZIMPORTULID0000000001\",\"type\":\"qr_codes\",\"status\":\"awaiting_confirmation\",\"source\":\"api\",\"awaiting_confirmation\":true,\"total_rows\":2,\"processed_rows\":0,\"success_count\":0,\"failed_count\":0,\"skipped_count\":0,\"valid_row_count\":2,\"progress_percent\":0,\"preview_errors\":[],\"error_message\":null,\"has_error_report\":false,\"confirmed_at\":null,\"completed_at\":null,\"created_at\":\"2026-07-01T10:00:00+00:00\",\"updated_at\":\"2026-07-01T10:00:00+00:00\"}}"
}
],
"isError": false
}
}
Response schema
Field
Type
Required
Description
jsonrpc
string
required
—
id
integer
required
—
result.content
array<object>
optional
—
result.isError
boolean
optional
—
Code samples
cURL
JavaScript
Python
PHP
C#
curl -sS -X POST "https://mcp.qrhero.com/mcp" \
-H "Authorization: Bearer YOUR_QRHERO_TOKEN" \
-H "Accept: application/json" \
-H "Content-Type: application/json" \
-d '{
"jsonrpc": "2.0",
"id": 1,
"method": "tools/call",
"params": {
"name": "codes_bulk_confirm",
"arguments": {
"confirm_token": "CONFIRM_TOKEN_FROM_STAGE"
}
}
}'
const response = await fetch('https://mcp.qrhero.com/mcp', {
method: 'POST',
headers: {
'Authorization': 'Bearer YOUR_QRHERO_TOKEN',
'Content-Type': 'application/json',
},
body: JSON.stringify({
"jsonrpc": "2.0",
"id": 1,
"method": "tools/call",
"params": {
"name": "codes_bulk_confirm",
"arguments": {
"confirm_token": "CONFIRM_TOKEN_FROM_STAGE"
}
}
}),
});
const data = await response.json();
console.log(data);
import requests
url = 'https://mcp.qrhero.com/mcp'
headers = {
'Authorization': 'Bearer YOUR_QRHERO_TOKEN',
'Content-Type': 'application/json',
}
payload = {
"jsonrpc": "2.0",
"id": 1,
"method": "tools/call",
"params": {
"name": "codes_bulk_confirm",
"arguments": {
"confirm_token": "CONFIRM_TOKEN_FROM_STAGE"
}
}
}
response = requests.post(url, headers=headers, json=payload)
response.raise_for_status()
print(response.json())
<?php
$client = new GuzzleHttp\Client();
$response = $client->post('https://mcp.qrhero.com/mcp', [
'headers' => [
'Authorization' => 'Bearer YOUR_QRHERO_TOKEN',
'Content-Type' => 'application/json',
],
'json' => {
"jsonrpc": "2.0",
"id": 1,
"method": "tools/call",
"params": {
"name": "codes_bulk_confirm",
"arguments": {
"confirm_token": "CONFIRM_TOKEN_FROM_STAGE"
}
}
},
]);
$data = json_decode($response->getBody()->getContents(), true);
print_r($data);
using var client = new HttpClient();
client.DefaultRequestHeaders.Authorization =
new AuthenticationHeaderValue("Bearer", "YOUR_QRHERO_TOKEN");
var content = new StringContent(
'{"jsonrpc":"2.0","id":1,"method":"tools/call","params":{"name":"codes_bulk_confirm","arguments":{"confirm_token":"CONFIRM_TOKEN_FROM_STAGE"}}}',
Encoding.UTF8,
"application/json");
var response = await client.PostAsync("https://mcp.qrhero.com/mcp", content);
response.EnsureSuccessStatusCode();
var json = await response.Content.ReadAsStringAsync();
Console.WriteLine(json);
codes_bulk_update_status
Confirm-then-execute
MCP-only
Change status on multiple QR codes. Always requires a dry-run preview first; call again with confirm: true to execute.
REST mapping
No REST route — MCP-only operation
Ability
codes.update
Input schema
Field
Type
Required
Description
ulids
array
required
ULIDs of the QR codes whose status should change.
status
string
required
New status value (e.g. active, disabled_manual).
confirm
boolean
optional
Set to true on the second call to execute after reviewing the preview.
confirmation_id
string
optional
Confirmation id returned by the dry-run preview.
Example response
{
"jsonrpc": "2.0",
"id": 1,
"result": {
"content": [
{
"type": "text",
"text": "{\"data\":{}}"
}
],
"isError": false
}
}
Response schema
Field
Type
Required
Description
jsonrpc
string
required
—
id
integer
required
—
result.content
array<object>
optional
—
result.isError
boolean
optional
—
Code samples
cURL
JavaScript
Python
PHP
C#
curl -sS -X POST "https://mcp.qrhero.com/mcp" \
-H "Authorization: Bearer YOUR_QRHERO_TOKEN" \
-H "Accept: application/json" \
-H "Content-Type: application/json" \
-d '{
"jsonrpc": "2.0",
"id": 1,
"method": "tools/call",
"params": {
"name": "codes_bulk_update_status",
"arguments": {
"ulids": [
"01HXYZCODEULID000000000001",
"01HXYZCODEULID000000000002"
],
"status": "disabled_manual"
}
}
}'
const response = await fetch('https://mcp.qrhero.com/mcp', {
method: 'POST',
headers: {
'Authorization': 'Bearer YOUR_QRHERO_TOKEN',
'Content-Type': 'application/json',
},
body: JSON.stringify({
"jsonrpc": "2.0",
"id": 1,
"method": "tools/call",
"params": {
"name": "codes_bulk_update_status",
"arguments": {
"ulids": [
"01HXYZCODEULID000000000001",
"01HXYZCODEULID000000000002"
],
"status": "disabled_manual"
}
}
}),
});
const data = await response.json();
console.log(data);
import requests
url = 'https://mcp.qrhero.com/mcp'
headers = {
'Authorization': 'Bearer YOUR_QRHERO_TOKEN',
'Content-Type': 'application/json',
}
payload = {
"jsonrpc": "2.0",
"id": 1,
"method": "tools/call",
"params": {
"name": "codes_bulk_update_status",
"arguments": {
"ulids": [
"01HXYZCODEULID000000000001",
"01HXYZCODEULID000000000002"
],
"status": "disabled_manual"
}
}
}
response = requests.post(url, headers=headers, json=payload)
response.raise_for_status()
print(response.json())
<?php
$client = new GuzzleHttp\Client();
$response = $client->post('https://mcp.qrhero.com/mcp', [
'headers' => [
'Authorization' => 'Bearer YOUR_QRHERO_TOKEN',
'Content-Type' => 'application/json',
],
'json' => {
"jsonrpc": "2.0",
"id": 1,
"method": "tools/call",
"params": {
"name": "codes_bulk_update_status",
"arguments": {
"ulids": [
"01HXYZCODEULID000000000001",
"01HXYZCODEULID000000000002"
],
"status": "disabled_manual"
}
}
},
]);
$data = json_decode($response->getBody()->getContents(), true);
print_r($data);
using var client = new HttpClient();
client.DefaultRequestHeaders.Authorization =
new AuthenticationHeaderValue("Bearer", "YOUR_QRHERO_TOKEN");
var content = new StringContent(
'{"jsonrpc":"2.0","id":1,"method":"tools/call","params":{"name":"codes_bulk_update_status","arguments":{"ulids":["01HXYZCODEULID000000000001","01HXYZCODEULID000000000002"],"status":"disabled_manual"}}}',
Encoding.UTF8,
"application/json");
var response = await client.PostAsync("https://mcp.qrhero.com/mcp", content);
response.EnsureSuccessStatusCode();
var json = await response.Content.ReadAsStringAsync();
Console.WriteLine(json);
styles_list
List QR styles (GET /v1/qr-styles).
REST mapping
GET /v1/qr-styles
Ability
styles.manage
Input schema
Field
Type
Required
Description
brand_ulid
string
optional
Optional brand filter.
Example response
{
"jsonrpc": "2.0",
"id": 1,
"result": {
"content": [
{
"type": "text",
"text": "{\"data\":[{\"ulid\":\"01HXYZSTYLEULID00000000001\",\"name\":\"Brand default\",\"config\":{\"type\":\"square\",\"margin\":2},\"is_preset\":true,\"brand\":{\"ulid\":\"01HXYZBRANDULID00000000001\",\"name\":\"Summer Campaign\"},\"created_at\":\"2026-03-01T09:00:00+00:00\",\"updated_at\":\"2026-07-01T08:30:00+00:00\"}]}"
}
],
"isError": false
}
}
Response schema
Field
Type
Required
Description
jsonrpc
string
required
—
id
integer
required
—
result.content
array<object>
optional
—
result.isError
boolean
optional
—
Code samples
cURL
JavaScript
Python
PHP
C#
curl -sS -X POST "https://mcp.qrhero.com/mcp" \
-H "Authorization: Bearer YOUR_QRHERO_TOKEN" \
-H "Accept: application/json" \
-H "Content-Type: application/json" \
-d '{
"jsonrpc": "2.0",
"id": 1,
"method": "tools/call",
"params": {
"name": "styles_list",
"arguments": {
"brand_ulid": "01HXYZDOMAINULID0000000001"
}
}
}'
const response = await fetch('https://mcp.qrhero.com/mcp', {
method: 'POST',
headers: {
'Authorization': 'Bearer YOUR_QRHERO_TOKEN',
'Content-Type': 'application/json',
},
body: JSON.stringify({
"jsonrpc": "2.0",
"id": 1,
"method": "tools/call",
"params": {
"name": "styles_list",
"arguments": {
"brand_ulid": "01HXYZDOMAINULID0000000001"
}
}
}),
});
const data = await response.json();
console.log(data);
import requests
url = 'https://mcp.qrhero.com/mcp'
headers = {
'Authorization': 'Bearer YOUR_QRHERO_TOKEN',
'Content-Type': 'application/json',
}
payload = {
"jsonrpc": "2.0",
"id": 1,
"method": "tools/call",
"params": {
"name": "styles_list",
"arguments": {
"brand_ulid": "01HXYZDOMAINULID0000000001"
}
}
}
response = requests.post(url, headers=headers, json=payload)
response.raise_for_status()
print(response.json())
<?php
$client = new GuzzleHttp\Client();
$response = $client->post('https://mcp.qrhero.com/mcp', [
'headers' => [
'Authorization' => 'Bearer YOUR_QRHERO_TOKEN',
'Content-Type' => 'application/json',
],
'json' => {
"jsonrpc": "2.0",
"id": 1,
"method": "tools/call",
"params": {
"name": "styles_list",
"arguments": {
"brand_ulid": "01HXYZDOMAINULID0000000001"
}
}
},
]);
$data = json_decode($response->getBody()->getContents(), true);
print_r($data);
using var client = new HttpClient();
client.DefaultRequestHeaders.Authorization =
new AuthenticationHeaderValue("Bearer", "YOUR_QRHERO_TOKEN");
var content = new StringContent(
'{"jsonrpc":"2.0","id":1,"method":"tools/call","params":{"name":"styles_list","arguments":{"brand_ulid":"01HXYZDOMAINULID0000000001"}}}',
Encoding.UTF8,
"application/json");
var response = await client.PostAsync("https://mcp.qrhero.com/mcp", content);
response.EnsureSuccessStatusCode();
var json = await response.Content.ReadAsStringAsync();
Console.WriteLine(json);
styles_create
Create a QR style preset (POST /v1/qr-styles).
REST mapping
POST /v1/qr-styles
Ability
styles.manage
Input schema
Field
Type
Required
Description
name
string
required
Style name.
config
object
required
qr_styles.config object.
brand_ulid
string
optional
Optional brand ULID.
is_preset
boolean
optional
Mark as preset style.
Example response
{
"jsonrpc": "2.0",
"id": 1,
"result": {
"content": [
{
"type": "text",
"text": "{\"data\":{\"ulid\":\"01HXYZSTYLEULID00000000001\",\"name\":\"Brand default\",\"config\":{\"type\":\"square\",\"margin\":2},\"is_preset\":true,\"brand\":{\"ulid\":\"01HXYZBRANDULID00000000001\",\"name\":\"Summer Campaign\"},\"created_at\":\"2026-03-01T09:00:00+00:00\",\"updated_at\":\"2026-07-01T08:30:00+00:00\"}}"
}
],
"isError": false
}
}
Response schema
Field
Type
Required
Description
jsonrpc
string
required
—
id
integer
required
—
result.content
array<object>
optional
—
result.isError
boolean
optional
—
Code samples
cURL
JavaScript
Python
PHP
C#
curl -sS -X POST "https://mcp.qrhero.com/mcp" \
-H "Authorization: Bearer YOUR_QRHERO_TOKEN" \
-H "Accept: application/json" \
-H "Content-Type: application/json" \
-d '{
"jsonrpc": "2.0",
"id": 1,
"method": "tools/call",
"params": {
"name": "styles_create",
"arguments": {
"name": "Automation token",
"config": {
"type": "square",
"margin": 2
},
"brand_ulid": "01HXYZDOMAINULID0000000001",
"is_preset": true
}
}
}'
const response = await fetch('https://mcp.qrhero.com/mcp', {
method: 'POST',
headers: {
'Authorization': 'Bearer YOUR_QRHERO_TOKEN',
'Content-Type': 'application/json',
},
body: JSON.stringify({
"jsonrpc": "2.0",
"id": 1,
"method": "tools/call",
"params": {
"name": "styles_create",
"arguments": {
"name": "Automation token",
"config": {
"type": "square",
"margin": 2
},
"brand_ulid": "01HXYZDOMAINULID0000000001",
"is_preset": true
}
}
}),
});
const data = await response.json();
console.log(data);
import requests
url = 'https://mcp.qrhero.com/mcp'
headers = {
'Authorization': 'Bearer YOUR_QRHERO_TOKEN',
'Content-Type': 'application/json',
}
payload = {
"jsonrpc": "2.0",
"id": 1,
"method": "tools/call",
"params": {
"name": "styles_create",
"arguments": {
"name": "Automation token",
"config": {
"type": "square",
"margin": 2
},
"brand_ulid": "01HXYZDOMAINULID0000000001",
"is_preset": true
}
}
}
response = requests.post(url, headers=headers, json=payload)
response.raise_for_status()
print(response.json())
<?php
$client = new GuzzleHttp\Client();
$response = $client->post('https://mcp.qrhero.com/mcp', [
'headers' => [
'Authorization' => 'Bearer YOUR_QRHERO_TOKEN',
'Content-Type' => 'application/json',
],
'json' => {
"jsonrpc": "2.0",
"id": 1,
"method": "tools/call",
"params": {
"name": "styles_create",
"arguments": {
"name": "Automation token",
"config": {
"type": "square",
"margin": 2
},
"brand_ulid": "01HXYZDOMAINULID0000000001",
"is_preset": true
}
}
},
]);
$data = json_decode($response->getBody()->getContents(), true);
print_r($data);
using var client = new HttpClient();
client.DefaultRequestHeaders.Authorization =
new AuthenticationHeaderValue("Bearer", "YOUR_QRHERO_TOKEN");
var content = new StringContent(
'{"jsonrpc":"2.0","id":1,"method":"tools/call","params":{"name":"styles_create","arguments":{"name":"Automation token","config":{"type":"square","margin":2},"brand_ulid":"01HXYZDOMAINULID0000000001","is_preset":true}}}',
Encoding.UTF8,
"application/json");
var response = await client.PostAsync("https://mcp.qrhero.com/mcp", content);
response.EnsureSuccessStatusCode();
var json = await response.Content.ReadAsStringAsync();
Console.WriteLine(json);
tokens_abilities
List assignable token abilities (GET /v1/tokens/abilities).
REST mapping
GET /v1/tokens/abilities
Ability
api.tokens.manage
Example response
{
"jsonrpc": "2.0",
"id": 1,
"result": {
"content": [
{
"type": "text",
"text": "{\"assignable\":[\"codes.view\",\"codes.create\",\"analytics.view\"],\"all\":[\"codes.view\",\"codes.create\",\"analytics.view\",\"mcp.access\"]}"
}
],
"isError": false
}
}
Response schema
Field
Type
Required
Description
jsonrpc
string
required
—
id
integer
required
—
result.content
array<object>
optional
—
result.isError
boolean
optional
—
Code samples
cURL
JavaScript
Python
PHP
C#
curl -sS -X POST "https://mcp.qrhero.com/mcp" \
-H "Authorization: Bearer YOUR_QRHERO_TOKEN" \
-H "Accept: application/json" \
-H "Content-Type: application/json" \
-d '{
"jsonrpc": "2.0",
"id": 1,
"method": "tools/call",
"params": {
"name": "tokens_abilities",
"arguments": []
}
}'
const response = await fetch('https://mcp.qrhero.com/mcp', {
method: 'POST',
headers: {
'Authorization': 'Bearer YOUR_QRHERO_TOKEN',
'Content-Type': 'application/json',
},
body: JSON.stringify({
"jsonrpc": "2.0",
"id": 1,
"method": "tools/call",
"params": {
"name": "tokens_abilities",
"arguments": []
}
}),
});
const data = await response.json();
console.log(data);
import requests
url = 'https://mcp.qrhero.com/mcp'
headers = {
'Authorization': 'Bearer YOUR_QRHERO_TOKEN',
'Content-Type': 'application/json',
}
payload = {
"jsonrpc": "2.0",
"id": 1,
"method": "tools/call",
"params": {
"name": "tokens_abilities",
"arguments": []
}
}
response = requests.post(url, headers=headers, json=payload)
response.raise_for_status()
print(response.json())
<?php
$client = new GuzzleHttp\Client();
$response = $client->post('https://mcp.qrhero.com/mcp', [
'headers' => [
'Authorization' => 'Bearer YOUR_QRHERO_TOKEN',
'Content-Type' => 'application/json',
],
'json' => {
"jsonrpc": "2.0",
"id": 1,
"method": "tools/call",
"params": {
"name": "tokens_abilities",
"arguments": []
}
},
]);
$data = json_decode($response->getBody()->getContents(), true);
print_r($data);
using var client = new HttpClient();
client.DefaultRequestHeaders.Authorization =
new AuthenticationHeaderValue("Bearer", "YOUR_QRHERO_TOKEN");
var content = new StringContent(
'{"jsonrpc":"2.0","id":1,"method":"tools/call","params":{"name":"tokens_abilities","arguments":[]}}',
Encoding.UTF8,
"application/json");
var response = await client.PostAsync("https://mcp.qrhero.com/mcp", content);
response.EnsureSuccessStatusCode();
var json = await response.Content.ReadAsStringAsync();
Console.WriteLine(json);
tokens_list
List API tokens (GET /v1/tokens).
REST mapping
GET /v1/tokens
Ability
api.tokens.manage
Example response
{
"jsonrpc": "2.0",
"id": 1,
"result": {
"content": [
{
"type": "text",
"text": "{\"data\":[{\"id\":42,\"name\":\"CI automation\",\"abilities\":[\"codes.view\",\"codes.create\",\"mcp.access\"],\"last_used_at\":\"2026-07-01T07:55:00+00:00\",\"expires_at\":\"2027-12-31T23:59:59+00:00\",\"created_at\":\"2026-01-15T10:00:00+00:00\"}]}"
}
],
"isError": false
}
}
Response schema
Field
Type
Required
Description
jsonrpc
string
required
—
id
integer
required
—
result.content
array<object>
optional
—
result.isError
boolean
optional
—
Code samples
cURL
JavaScript
Python
PHP
C#
curl -sS -X POST "https://mcp.qrhero.com/mcp" \
-H "Authorization: Bearer YOUR_QRHERO_TOKEN" \
-H "Accept: application/json" \
-H "Content-Type: application/json" \
-d '{
"jsonrpc": "2.0",
"id": 1,
"method": "tools/call",
"params": {
"name": "tokens_list",
"arguments": []
}
}'
const response = await fetch('https://mcp.qrhero.com/mcp', {
method: 'POST',
headers: {
'Authorization': 'Bearer YOUR_QRHERO_TOKEN',
'Content-Type': 'application/json',
},
body: JSON.stringify({
"jsonrpc": "2.0",
"id": 1,
"method": "tools/call",
"params": {
"name": "tokens_list",
"arguments": []
}
}),
});
const data = await response.json();
console.log(data);
import requests
url = 'https://mcp.qrhero.com/mcp'
headers = {
'Authorization': 'Bearer YOUR_QRHERO_TOKEN',
'Content-Type': 'application/json',
}
payload = {
"jsonrpc": "2.0",
"id": 1,
"method": "tools/call",
"params": {
"name": "tokens_list",
"arguments": []
}
}
response = requests.post(url, headers=headers, json=payload)
response.raise_for_status()
print(response.json())
<?php
$client = new GuzzleHttp\Client();
$response = $client->post('https://mcp.qrhero.com/mcp', [
'headers' => [
'Authorization' => 'Bearer YOUR_QRHERO_TOKEN',
'Content-Type' => 'application/json',
],
'json' => {
"jsonrpc": "2.0",
"id": 1,
"method": "tools/call",
"params": {
"name": "tokens_list",
"arguments": []
}
},
]);
$data = json_decode($response->getBody()->getContents(), true);
print_r($data);
using var client = new HttpClient();
client.DefaultRequestHeaders.Authorization =
new AuthenticationHeaderValue("Bearer", "YOUR_QRHERO_TOKEN");
var content = new StringContent(
'{"jsonrpc":"2.0","id":1,"method":"tools/call","params":{"name":"tokens_list","arguments":[]}}',
Encoding.UTF8,
"application/json");
var response = await client.PostAsync("https://mcp.qrhero.com/mcp", content);
response.EnsureSuccessStatusCode();
var json = await response.Content.ReadAsStringAsync();
Console.WriteLine(json);
tokens_create
Create an API token (POST /v1/tokens). Returns plain-text secret once.
REST mapping
POST /v1/tokens
Ability
api.tokens.manage
Input schema
Field
Type
Required
Description
name
string
required
Token label.
abilities
array
optional
Ability list (default ["*"]).
expires_at
string
optional
Optional ISO8601 expiry datetime.
Example response
{
"jsonrpc": "2.0",
"id": 1,
"result": {
"content": [
{
"type": "text",
"text": "{\"token\":\"1|plainTextSecretShownOnce\",\"data\":{\"id\":42,\"name\":\"CI automation\",\"abilities\":[\"codes.view\",\"codes.create\",\"mcp.access\"],\"expires_at\":\"2027-12-31T23:59:59+00:00\"}}"
}
],
"isError": false
}
}
Response schema
Field
Type
Required
Description
jsonrpc
string
required
—
id
integer
required
—
result.content
array<object>
optional
—
result.isError
boolean
optional
—
Code samples
cURL
JavaScript
Python
PHP
C#
curl -sS -X POST "https://mcp.qrhero.com/mcp" \
-H "Authorization: Bearer YOUR_QRHERO_TOKEN" \
-H "Accept: application/json" \
-H "Content-Type: application/json" \
-d '{
"jsonrpc": "2.0",
"id": 1,
"method": "tools/call",
"params": {
"name": "tokens_create",
"arguments": {
"name": "Automation token",
"abilities": [
"codes.view",
"codes.create"
],
"expires_at": "2027-12-31T23:59:59Z"
}
}
}'
const response = await fetch('https://mcp.qrhero.com/mcp', {
method: 'POST',
headers: {
'Authorization': 'Bearer YOUR_QRHERO_TOKEN',
'Content-Type': 'application/json',
},
body: JSON.stringify({
"jsonrpc": "2.0",
"id": 1,
"method": "tools/call",
"params": {
"name": "tokens_create",
"arguments": {
"name": "Automation token",
"abilities": [
"codes.view",
"codes.create"
],
"expires_at": "2027-12-31T23:59:59Z"
}
}
}),
});
const data = await response.json();
console.log(data);
import requests
url = 'https://mcp.qrhero.com/mcp'
headers = {
'Authorization': 'Bearer YOUR_QRHERO_TOKEN',
'Content-Type': 'application/json',
}
payload = {
"jsonrpc": "2.0",
"id": 1,
"method": "tools/call",
"params": {
"name": "tokens_create",
"arguments": {
"name": "Automation token",
"abilities": [
"codes.view",
"codes.create"
],
"expires_at": "2027-12-31T23:59:59Z"
}
}
}
response = requests.post(url, headers=headers, json=payload)
response.raise_for_status()
print(response.json())
<?php
$client = new GuzzleHttp\Client();
$response = $client->post('https://mcp.qrhero.com/mcp', [
'headers' => [
'Authorization' => 'Bearer YOUR_QRHERO_TOKEN',
'Content-Type' => 'application/json',
],
'json' => {
"jsonrpc": "2.0",
"id": 1,
"method": "tools/call",
"params": {
"name": "tokens_create",
"arguments": {
"name": "Automation token",
"abilities": [
"codes.view",
"codes.create"
],
"expires_at": "2027-12-31T23:59:59Z"
}
}
},
]);
$data = json_decode($response->getBody()->getContents(), true);
print_r($data);
using var client = new HttpClient();
client.DefaultRequestHeaders.Authorization =
new AuthenticationHeaderValue("Bearer", "YOUR_QRHERO_TOKEN");
var content = new StringContent(
'{"jsonrpc":"2.0","id":1,"method":"tools/call","params":{"name":"tokens_create","arguments":{"name":"Automation token","abilities":["codes.view","codes.create"],"expires_at":"2027-12-31T23:59:59Z"}}}',
Encoding.UTF8,
"application/json");
var response = await client.PostAsync("https://mcp.qrhero.com/mcp", content);
response.EnsureSuccessStatusCode();
var json = await response.Content.ReadAsStringAsync();
Console.WriteLine(json);
tokens_revoke
Destructive
Revoke an API token (DELETE /v1/tokens/{token_id}).
REST mapping
DELETE /v1/tokens/{token_id}
Ability
api.tokens.manage
Input schema
Field
Type
Required
Description
token_id
integer
required
Personal access token id.
Example response
{
"jsonrpc": "2.0",
"id": 1,
"result": {
"content": [
{
"type": "text",
"text": "[]"
}
],
"isError": false
}
}
Response schema
Field
Type
Required
Description
jsonrpc
string
required
—
id
integer
required
—
result.content
array<object>
optional
—
result.isError
boolean
optional
—
Code samples
cURL
JavaScript
Python
PHP
C#
curl -sS -X POST "https://mcp.qrhero.com/mcp" \
-H "Authorization: Bearer YOUR_QRHERO_TOKEN" \
-H "Accept: application/json" \
-H "Content-Type: application/json" \
-d '{
"jsonrpc": "2.0",
"id": 1,
"method": "tools/call",
"params": {
"name": "tokens_revoke",
"arguments": []
}
}'
const response = await fetch('https://mcp.qrhero.com/mcp', {
method: 'POST',
headers: {
'Authorization': 'Bearer YOUR_QRHERO_TOKEN',
'Content-Type': 'application/json',
},
body: JSON.stringify({
"jsonrpc": "2.0",
"id": 1,
"method": "tools/call",
"params": {
"name": "tokens_revoke",
"arguments": []
}
}),
});
const data = await response.json();
console.log(data);
import requests
url = 'https://mcp.qrhero.com/mcp'
headers = {
'Authorization': 'Bearer YOUR_QRHERO_TOKEN',
'Content-Type': 'application/json',
}
payload = {
"jsonrpc": "2.0",
"id": 1,
"method": "tools/call",
"params": {
"name": "tokens_revoke",
"arguments": []
}
}
response = requests.post(url, headers=headers, json=payload)
response.raise_for_status()
print(response.json())
<?php
$client = new GuzzleHttp\Client();
$response = $client->post('https://mcp.qrhero.com/mcp', [
'headers' => [
'Authorization' => 'Bearer YOUR_QRHERO_TOKEN',
'Content-Type' => 'application/json',
],
'json' => {
"jsonrpc": "2.0",
"id": 1,
"method": "tools/call",
"params": {
"name": "tokens_revoke",
"arguments": []
}
},
]);
$data = json_decode($response->getBody()->getContents(), true);
print_r($data);
using var client = new HttpClient();
client.DefaultRequestHeaders.Authorization =
new AuthenticationHeaderValue("Bearer", "YOUR_QRHERO_TOKEN");
var content = new StringContent(
'{"jsonrpc":"2.0","id":1,"method":"tools/call","params":{"name":"tokens_revoke","arguments":[]}}',
Encoding.UTF8,
"application/json");
var response = await client.PostAsync("https://mcp.qrhero.com/mcp", content);
response.EnsureSuccessStatusCode();
var json = await response.Content.ReadAsStringAsync();
Console.WriteLine(json);