curl --request GET \
--url https://api.monid.ai/v1/runs/{runId} \
--header 'Authorization: Bearer <token>'import requests
url = "https://api.monid.ai/v1/runs/{runId}"
headers = {"Authorization": "Bearer <token>"}
response = requests.get(url, headers=headers)
print(response.text)const options = {method: 'GET', headers: {Authorization: 'Bearer <token>'}};
fetch('https://api.monid.ai/v1/runs/{runId}', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://api.monid.ai/v1/runs/{runId}",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "GET",
CURLOPT_HTTPHEADER => [
"Authorization: Bearer <token>"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"net/http"
"io"
)
func main() {
url := "https://api.monid.ai/v1/runs/{runId}"
req, _ := http.NewRequest("GET", url, nil)
req.Header.Add("Authorization", "Bearer <token>")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.get("https://api.monid.ai/v1/runs/{runId}")
.header("Authorization", "Bearer <token>")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.monid.ai/v1/runs/{runId}")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Get.new(url)
request["Authorization"] = 'Bearer <token>'
response = http.request(request)
puts response.read_body{
"runId": "01JGXYZABCDEFGHJKMNPQRSTVW",
"caller": "API_KEY#a1b2c3d4",
"provider": "<string>",
"endpoint": "<string>",
"status": "READY",
"input": {
"body": {},
"queryParams": {},
"pathParams": {}
},
"price": {
"type": "<string>",
"amount": {
"value": 123,
"currency": "USD"
},
"flatFee": {
"value": 123,
"currency": "USD"
},
"period": {
"unit": "MINUTE",
"count": 123
},
"per": {
"unit": "MINUTE",
"count": 123
},
"unit": "token",
"default": {
"type": "PER_CALL",
"amount": {
"value": 123,
"currency": "USD"
}
},
"selectors": [
{
"label": "<string>",
"key": "<string>",
"in": "body",
"offset": 1
}
],
"variants": [
{
"when": {},
"price": {
"type": "PER_CALL",
"amount": {
"value": 123,
"currency": "USD"
}
},
"label": "<string>"
}
],
"tiers": [
{
"label": "<string>",
"price": {
"type": "PER_CALL",
"amount": {
"value": 123,
"currency": "USD"
}
},
"when": {},
"selector": {
"label": "<string>",
"key": "<string>",
"in": "body",
"offset": 1
}
}
],
"notes": [
"<string>"
]
},
"createdAt": "2023-11-07T05:31:56Z",
"owner": "user_2abc",
"providerName": "<string>",
"stoppable": true,
"reason": "<string>",
"controls": [
{}
],
"output": "<unknown>",
"providerResponse": {
"httpStatus": 200,
"error": "<unknown>"
},
"cost": {
"value": 123,
"currency": "USD"
},
"resultCount": 1,
"billedUnits": 1,
"resources": [
{
"action": "PROVISIONED",
"resourceId": "<string>",
"resourceType": "phone_number",
"identifier": "<string>"
}
],
"startedAt": "2023-11-07T05:31:56Z",
"completedAt": "2023-11-07T05:31:56Z",
"hints": {}
}{
"code": 400,
"message": "Bad Request",
"hints": {},
"errorCode": "RATE_LIMITED"
}{
"code": 400,
"message": "Bad Request",
"hints": {},
"errorCode": "RATE_LIMITED"
}{
"code": 400,
"message": "Bad Request",
"hints": {},
"errorCode": "RATE_LIMITED"
}{
"code": 400,
"message": "Bad Request",
"hints": {},
"errorCode": "RATE_LIMITED"
}{
"code": 400,
"message": "Bad Request",
"hints": {},
"errorCode": "RATE_LIMITED"
}Get a run
Poll run status and retrieve results. Terminal runs include the resolved provider output.
curl --request GET \
--url https://api.monid.ai/v1/runs/{runId} \
--header 'Authorization: Bearer <token>'import requests
url = "https://api.monid.ai/v1/runs/{runId}"
headers = {"Authorization": "Bearer <token>"}
response = requests.get(url, headers=headers)
print(response.text)const options = {method: 'GET', headers: {Authorization: 'Bearer <token>'}};
fetch('https://api.monid.ai/v1/runs/{runId}', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://api.monid.ai/v1/runs/{runId}",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "GET",
CURLOPT_HTTPHEADER => [
"Authorization: Bearer <token>"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"net/http"
"io"
)
func main() {
url := "https://api.monid.ai/v1/runs/{runId}"
req, _ := http.NewRequest("GET", url, nil)
req.Header.Add("Authorization", "Bearer <token>")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.get("https://api.monid.ai/v1/runs/{runId}")
.header("Authorization", "Bearer <token>")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.monid.ai/v1/runs/{runId}")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Get.new(url)
request["Authorization"] = 'Bearer <token>'
response = http.request(request)
puts response.read_body{
"runId": "01JGXYZABCDEFGHJKMNPQRSTVW",
"caller": "API_KEY#a1b2c3d4",
"provider": "<string>",
"endpoint": "<string>",
"status": "READY",
"input": {
"body": {},
"queryParams": {},
"pathParams": {}
},
"price": {
"type": "<string>",
"amount": {
"value": 123,
"currency": "USD"
},
"flatFee": {
"value": 123,
"currency": "USD"
},
"period": {
"unit": "MINUTE",
"count": 123
},
"per": {
"unit": "MINUTE",
"count": 123
},
"unit": "token",
"default": {
"type": "PER_CALL",
"amount": {
"value": 123,
"currency": "USD"
}
},
"selectors": [
{
"label": "<string>",
"key": "<string>",
"in": "body",
"offset": 1
}
],
"variants": [
{
"when": {},
"price": {
"type": "PER_CALL",
"amount": {
"value": 123,
"currency": "USD"
}
},
"label": "<string>"
}
],
"tiers": [
{
"label": "<string>",
"price": {
"type": "PER_CALL",
"amount": {
"value": 123,
"currency": "USD"
}
},
"when": {},
"selector": {
"label": "<string>",
"key": "<string>",
"in": "body",
"offset": 1
}
}
],
"notes": [
"<string>"
]
},
"createdAt": "2023-11-07T05:31:56Z",
"owner": "user_2abc",
"providerName": "<string>",
"stoppable": true,
"reason": "<string>",
"controls": [
{}
],
"output": "<unknown>",
"providerResponse": {
"httpStatus": 200,
"error": "<unknown>"
},
"cost": {
"value": 123,
"currency": "USD"
},
"resultCount": 1,
"billedUnits": 1,
"resources": [
{
"action": "PROVISIONED",
"resourceId": "<string>",
"resourceType": "phone_number",
"identifier": "<string>"
}
],
"startedAt": "2023-11-07T05:31:56Z",
"completedAt": "2023-11-07T05:31:56Z",
"hints": {}
}{
"code": 400,
"message": "Bad Request",
"hints": {},
"errorCode": "RATE_LIMITED"
}{
"code": 400,
"message": "Bad Request",
"hints": {},
"errorCode": "RATE_LIMITED"
}{
"code": 400,
"message": "Bad Request",
"hints": {},
"errorCode": "RATE_LIMITED"
}{
"code": 400,
"message": "Bad Request",
"hints": {},
"errorCode": "RATE_LIMITED"
}{
"code": 400,
"message": "Bad Request",
"hints": {},
"errorCode": "RATE_LIMITED"
}Authorizations
Monid API key (Authorization: Bearer mk_...) or Clerk-issued JWT. Each operation lists the ONE scope an API key needs. {resource}:* grants every action on that resource; * grants everything; Clerk sessions hold *. Operations with an empty list need no scope. Scope catalog: GET /v1/api-keys/scopes.
Headers
Model driving the calling agent. Optional; a value that is empty, longer than 256 characters or not printable ASCII is ignored (never an error).
256Agent harness or client making the call (e.g. a coding agent, an agent framework). Optional; a value that is empty, longer than 256 characters or not printable ASCII is ignored (never an error).
256Caller-side session identifier, so the calls of one agent session (discover → inspect → run → polling) can be correlated. Optional; a value that is empty, longer than 256 characters or not printable ASCII is ignored (never an error).
256Path Parameters
Run identifier (ULID).
"01JGXYZABCDEFGHJKMNPQRSTVW"
Response
The run (with output when terminal)
Run identifier (ULID).
"01JGXYZABCDEFGHJKMNPQRSTVW"
The CREDENTIAL that made the call, as an actor id: API_KEY#<fingerprint> (an API key), X402#<address> (a wallet), RESOURCE#<id> (a webhook-initiated run), USER#<userId> (a session). The user behind it is owner.
"API_KEY#a1b2c3d4"
Run lifecycle status. Always one of the UPPERCASE enum values (e.g. COMPLETED, never completed) — compare case-sensitively. COMPLETED means the provider responded (any HTTP status); FAILED means an infrastructure failure.
READY, RUNNING, STOPPING, COMPLETED, FAILED, BLOCKED, STOPPED, TIMED_OUT Composite endpoint input — body + URL query + URL path. All sub-fields optional.
Show child attributes
Show child attributes
User-facing price (markup applied).
Show child attributes
Show child attributes
User id the run belongs to (billed / attributed). Absent for wallet (x402) and resource-initiated runs, which have no user.
"user_2abc"
Show child attributes
Show child attributes
Provider output data (terminal runs only; may be null). Endpoints that generate FILES (e.g. audio) surface each file INSIDE output as an artifact object under a stable key: { download_link (fresh signed URL, valid until link_expires_at — re-fetch the run for a new one), content_type, link_expires_at, file_expires_at? }. After the file's retention lapses the object becomes { expired: true, file_expired_at, message }.
Show child attributes
Show child attributes
Show child attributes
Show child attributes
x >= 0x >= 0Show child attributes
Show child attributes
Show child attributes
Show child attributes