curl --request POST \
--url https://api.cloud.gomry.com/v1/superagent \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"objective": "Which of these venues changed their refund policy in 2026, and how?",
"seedUrls": [
"https://example.com/venue/calendar"
],
"outputSchema": {
"type": "object",
"properties": {
"shows": {
"type": "array",
"items": {
"type": "object",
"properties": {
"name": {
"type": "string"
},
"startDate": {
"type": "string"
}
}
}
}
}
},
"tier": "standard"
}
'const options = {
method: 'POST',
headers: {Authorization: 'Bearer <token>', 'Content-Type': 'application/json'},
body: JSON.stringify({
objective: 'Which of these venues changed their refund policy in 2026, and how?',
seedUrls: ['https://example.com/venue/calendar'],
outputSchema: {
type: 'object',
properties: {
shows: {
type: 'array',
items: {
type: 'object',
properties: {name: {type: 'string'}, startDate: {type: 'string'}}
}
}
}
},
tier: 'standard'
})
};
fetch('https://api.cloud.gomry.com/v1/superagent', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));import requests
url = "https://api.cloud.gomry.com/v1/superagent"
payload = {
"objective": "Which of these venues changed their refund policy in 2026, and how?",
"seedUrls": ["https://example.com/venue/calendar"],
"outputSchema": {
"type": "object",
"properties": { "shows": {
"type": "array",
"items": {
"type": "object",
"properties": {
"name": { "type": "string" },
"startDate": { "type": "string" }
}
}
} }
},
"tier": "standard"
}
headers = {
"Authorization": "Bearer <token>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text){}{
"error": "<string>",
"message": "<string>"
}{
"error": "<string>",
"message": "<string>"
}{
"error": "<string>",
"message": "<string>"
}{
"error": "<string>",
"message": "<string>"
}{
"error": "<string>",
"message": "<string>"
}{
"error": "<string>",
"message": "<string>"
}{
"error": "<string>",
"message": "<string>"
}{
"error": "<string>",
"message": "<string>"
}{
"error": "<string>",
"message": "<string>"
}Give it a research question and a JSON schema. It plans, searches, reads, notices what is missing, searches again — and cites every field
Give it a research question and a JSON schema. It plans, searches, reads, notices what is missing, searches again — and cites every field.
Requires the tasks:run scope, and the project must have Superagent enabled.
Billed on success. The response reports cost.units — the quantity metered for this call. Rates: https://docs.cloud.gomry.com/pricing.
ASYNCHRONOUS: this returns 202 with an id, not a result. Poll GET /v1/superagent/{taskId} (the Location header carries the absolute URL) no sooner than Retry-After, currently 5 seconds. Polling and cancelling are not billed.
Full reference: https://docs.cloud.gomry.com/services/tasks
curl --request POST \
--url https://api.cloud.gomry.com/v1/superagent \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"objective": "Which of these venues changed their refund policy in 2026, and how?",
"seedUrls": [
"https://example.com/venue/calendar"
],
"outputSchema": {
"type": "object",
"properties": {
"shows": {
"type": "array",
"items": {
"type": "object",
"properties": {
"name": {
"type": "string"
},
"startDate": {
"type": "string"
}
}
}
}
}
},
"tier": "standard"
}
'const options = {
method: 'POST',
headers: {Authorization: 'Bearer <token>', 'Content-Type': 'application/json'},
body: JSON.stringify({
objective: 'Which of these venues changed their refund policy in 2026, and how?',
seedUrls: ['https://example.com/venue/calendar'],
outputSchema: {
type: 'object',
properties: {
shows: {
type: 'array',
items: {
type: 'object',
properties: {name: {type: 'string'}, startDate: {type: 'string'}}
}
}
}
},
tier: 'standard'
})
};
fetch('https://api.cloud.gomry.com/v1/superagent', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));import requests
url = "https://api.cloud.gomry.com/v1/superagent"
payload = {
"objective": "Which of these venues changed their refund policy in 2026, and how?",
"seedUrls": ["https://example.com/venue/calendar"],
"outputSchema": {
"type": "object",
"properties": { "shows": {
"type": "array",
"items": {
"type": "object",
"properties": {
"name": { "type": "string" },
"startDate": { "type": "string" }
}
}
} }
},
"tier": "standard"
}
headers = {
"Authorization": "Bearer <token>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text){}{
"error": "<string>",
"message": "<string>"
}{
"error": "<string>",
"message": "<string>"
}{
"error": "<string>",
"message": "<string>"
}{
"error": "<string>",
"message": "<string>"
}{
"error": "<string>",
"message": "<string>"
}{
"error": "<string>",
"message": "<string>"
}{
"error": "<string>",
"message": "<string>"
}{
"error": "<string>",
"message": "<string>"
}{
"error": "<string>",
"message": "<string>"
}Authorizations
An API key minted in the console, sent as Authorization: Bearer <key>. Keys are project-scoped and carry per-operation scopes. A gck_test_… key runs the full request path — including the real upstream call — and bills nothing.
Every scope is enumerated in x-scopes below and in the RFC 9728 protected-resource metadata at https://cloud.gomry.com/.well-known/oauth-protected-resource, which is also what a 401 points at through its WWW-Authenticate: Bearer resource_metadata="…" header.
Headers
Two requests carrying the same key on one project return the same task instead of starting a second. Send one whenever a retry is possible — an unattended caller that retries without it pays twice for the same research.
Body
Required. 1–2000 characters describing what you want found, in plain language.
Required. A JSON Schema object describing the shape you want back. Returned in output, with a matching entry in citations for every field.
URLs to start from, up to 100 and never more than the tier's source ceiling. Omit and the task searches for its own sources. Private addresses and internal hostnames are refused at creation.
lite | standard | deep. Sets the source, round, cost and time ceilings. Defaults to standard.
{ maxCostMicroUsd, maxSources, deadlineSeconds, maxRounds }. Each is intersected with the tier's ceiling — it can only narrow. maxRounds: 0 is honoured as "do not reason, just read what I gave you".
Called once when the task reaches a terminal state. Must be a public host.
Block up to 60s for a terminal state before responding. The task is unaffected and keeps running if the wait expires. Defaults to false.
Response
Accepted. The work has been started, not done — poll /v1/superagent/{taskId} for the result. The id is at task.taskId. Nothing is billed by this call.
The response is of type object.

