curl --request POST \
--url https://api.cloud.gomry.com/v1/toolsapi/run \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"vendor": "apify",
"endpoint": "/apidojo/tweet-scraper",
"input": {
"handle": "gomry",
"limit": 20
}
}
'const options = {
method: 'POST',
headers: {Authorization: 'Bearer <token>', 'Content-Type': 'application/json'},
body: JSON.stringify({
vendor: 'apify',
endpoint: '/apidojo/tweet-scraper',
input: {handle: 'gomry', limit: 20}
})
};
fetch('https://api.cloud.gomry.com/v1/toolsapi/run', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));import requests
url = "https://api.cloud.gomry.com/v1/toolsapi/run"
payload = {
"vendor": "apify",
"endpoint": "/apidojo/tweet-scraper",
"input": {
"handle": "gomry",
"limit": 20
}
}
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>"
}Find a tool that can do a task and run it — 1,700+ across 55+ vendors, on your Gomry key
Find a tool that can do a task and run it — 1,700+ across 55+ vendors, on your Gomry key.
Requires the toolsapi:run scope, and the project must have ToolsAPI enabled.
Billed on success. The response reports meteredMicroUsd — the quantity metered for this call. Rates: https://docs.cloud.gomry.com/pricing.
Full reference: https://docs.cloud.gomry.com/services/toolsapi
curl --request POST \
--url https://api.cloud.gomry.com/v1/toolsapi/run \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"vendor": "apify",
"endpoint": "/apidojo/tweet-scraper",
"input": {
"handle": "gomry",
"limit": 20
}
}
'const options = {
method: 'POST',
headers: {Authorization: 'Bearer <token>', 'Content-Type': 'application/json'},
body: JSON.stringify({
vendor: 'apify',
endpoint: '/apidojo/tweet-scraper',
input: {handle: 'gomry', limit: 20}
})
};
fetch('https://api.cloud.gomry.com/v1/toolsapi/run', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));import requests
url = "https://api.cloud.gomry.com/v1/toolsapi/run"
payload = {
"vendor": "apify",
"endpoint": "/apidojo/tweet-scraper",
"input": {
"handle": "gomry",
"limit": 20
}
}
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.
Body
Required for run/inspect. Catalogue vendor slug, e.g. "apify". Monid calls this provider; here it is vendor, because provider already means an adapter.
Required for run/inspect. The tool's path within that vendor, e.g. "/apidojo/tweet-scraper". Both halves come from discover or inspect.
Required for run. An object matching the tool's own inputSchema from inspect. Passed through unvalidated by us — the tool rejects what it does not accept.
Required for discover. 1–2000 characters of natural language describing the task.
Discover only. How many tools to return, 1–20. Values above the ceiling are clamped, not refused.
Milliseconds before the catalogue call is abandoned. 1000–90000. The run route is capped at 120s server-side.
Response
Success. meteredMicroUsd reports what was metered.
The response is of type object.

