curl --request POST \
--url https://api.pomerado.ai/v1/integrations/{id}/tools/{tool_id}/runs \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"input": {},
"login_id": "login_0f8e2d1c4b3a49e8a7f6e5d4c3b2a190",
"save_login": true,
"correct_login": true,
"redact_at_rest": true
}
'const options = {
method: 'POST',
headers: {Authorization: 'Bearer <token>', 'Content-Type': 'application/json'},
body: JSON.stringify({
input: {},
login_id: 'login_0f8e2d1c4b3a49e8a7f6e5d4c3b2a190',
save_login: true,
correct_login: true,
redact_at_rest: true
})
};
fetch('https://api.pomerado.ai/v1/integrations/{id}/tools/{tool_id}/runs', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));import requests
url = "https://api.pomerado.ai/v1/integrations/{id}/tools/{tool_id}/runs"
payload = {
"input": {},
"login_id": "login_0f8e2d1c4b3a49e8a7f6e5d4c3b2a190",
"save_login": True,
"correct_login": True,
"redact_at_rest": True
}
headers = {
"Authorization": "Bearer <token>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text){
"id": "job_0f8e2d1c4b3a49e8a7f6e5d4c3b2a190",
"type": "run",
"status": "queued",
"tool_id": "<string>",
"input_request": {
"id": "req_0f8e2d1c4b3a49e8a7f6e5d4c3b2a190",
"expires_at": "<string>",
"answer_url": "<string>",
"message": "<string>",
"questions": [
{
"id": "<string>",
"prompt": "<string>",
"type": "choice",
"options": [
{
"id": "<string>",
"label": "<string>"
}
],
"allow_other": true,
"allow_note": true
}
]
},
"result": "<unknown>",
"result_expires_at": "<string>",
"write_status": "not_attempted",
"login_save": {
"status": "saved",
"login_id": "<string>",
"reason": "<string>"
},
"error": {
"error": {
"code": "<string>",
"message": "<string>",
"retryable": true,
"docs_url": "<string>",
"details": {}
}
},
"message": "<string>",
"maintenance": {
"status": "repairing",
"result_recovered": true,
"message": "<string>"
},
"build": {
"integration_id": "int_0f8e2d1c4b3a49e8a7f6e5d4c3b2a190",
"stage": "queued",
"stages": [
{
"key": "queued",
"label": "<string>",
"status": "done",
"started_at": "<string>",
"completed_at": "<string>"
}
],
"eta": {
"min_seconds": 123,
"max_seconds": 123
},
"example_result": "<unknown>",
"existing_tool_id": "<string>"
},
"watch_url": "<string>",
"created_at": "<string>",
"updated_at": "<string>",
"completed_at": "<string>",
"tip": "<string>"
}{
"id": "job_0f8e2d1c4b3a49e8a7f6e5d4c3b2a190",
"type": "run",
"status": "queued",
"tool_id": "<string>",
"input_request": {
"id": "req_0f8e2d1c4b3a49e8a7f6e5d4c3b2a190",
"expires_at": "<string>",
"answer_url": "<string>",
"message": "<string>",
"questions": [
{
"id": "<string>",
"prompt": "<string>",
"type": "choice",
"options": [
{
"id": "<string>",
"label": "<string>"
}
],
"allow_other": true,
"allow_note": true
}
]
},
"result": "<unknown>",
"result_expires_at": "<string>",
"write_status": "not_attempted",
"login_save": {
"status": "saved",
"login_id": "<string>",
"reason": "<string>"
},
"error": {
"error": {
"code": "<string>",
"message": "<string>",
"retryable": true,
"docs_url": "<string>",
"details": {}
}
},
"message": "<string>",
"maintenance": {
"status": "repairing",
"result_recovered": true,
"message": "<string>"
},
"build": {
"integration_id": "int_0f8e2d1c4b3a49e8a7f6e5d4c3b2a190",
"stage": "queued",
"stages": [
{
"key": "queued",
"label": "<string>",
"status": "done",
"started_at": "<string>",
"completed_at": "<string>"
}
],
"eta": {
"min_seconds": 123,
"max_seconds": 123
},
"example_result": "<unknown>",
"existing_tool_id": "<string>"
},
"watch_url": "<string>",
"created_at": "<string>",
"updated_at": "<string>",
"completed_at": "<string>",
"tip": "<string>"
}{
"error": {
"code": "<string>",
"message": "<string>",
"retryable": true,
"docs_url": "<string>",
"details": {}
}
}{
"error": {
"code": "<string>",
"message": "<string>",
"retryable": true,
"docs_url": "<string>",
"details": {}
}
}{
"error": {
"code": "<string>",
"message": "<string>",
"retryable": true,
"docs_url": "<string>",
"details": {}
}
}{
"error": {
"code": "<string>",
"message": "<string>",
"retryable": true,
"docs_url": "<string>",
"details": {}
}
}{
"error": {
"code": "<string>",
"message": "<string>",
"retryable": true,
"docs_url": "<string>",
"details": {}
}
}{
"error": {
"code": "<string>",
"message": "<string>",
"retryable": true,
"docs_url": "<string>",
"details": {}
}
}{
"error": {
"code": "<string>",
"message": "<string>",
"retryable": true,
"docs_url": "<string>",
"details": {}
}
}{
"error": {
"code": "<string>",
"message": "<string>",
"retryable": true,
"docs_url": "<string>",
"details": {}
}
}{
"error": {
"code": "<string>",
"message": "<string>",
"retryable": true,
"docs_url": "<string>",
"details": {}
}
}{
"error": {
"code": "<string>",
"message": "<string>",
"retryable": true,
"docs_url": "<string>",
"details": {}
}
}Run one of an integration's tools
Run a tool of one integration, as POST /v1/runs does, with the tool named by the path. An integration key reaches only its own integration’s tools.
curl --request POST \
--url https://api.pomerado.ai/v1/integrations/{id}/tools/{tool_id}/runs \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"input": {},
"login_id": "login_0f8e2d1c4b3a49e8a7f6e5d4c3b2a190",
"save_login": true,
"correct_login": true,
"redact_at_rest": true
}
'const options = {
method: 'POST',
headers: {Authorization: 'Bearer <token>', 'Content-Type': 'application/json'},
body: JSON.stringify({
input: {},
login_id: 'login_0f8e2d1c4b3a49e8a7f6e5d4c3b2a190',
save_login: true,
correct_login: true,
redact_at_rest: true
})
};
fetch('https://api.pomerado.ai/v1/integrations/{id}/tools/{tool_id}/runs', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));import requests
url = "https://api.pomerado.ai/v1/integrations/{id}/tools/{tool_id}/runs"
payload = {
"input": {},
"login_id": "login_0f8e2d1c4b3a49e8a7f6e5d4c3b2a190",
"save_login": True,
"correct_login": True,
"redact_at_rest": True
}
headers = {
"Authorization": "Bearer <token>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text){
"id": "job_0f8e2d1c4b3a49e8a7f6e5d4c3b2a190",
"type": "run",
"status": "queued",
"tool_id": "<string>",
"input_request": {
"id": "req_0f8e2d1c4b3a49e8a7f6e5d4c3b2a190",
"expires_at": "<string>",
"answer_url": "<string>",
"message": "<string>",
"questions": [
{
"id": "<string>",
"prompt": "<string>",
"type": "choice",
"options": [
{
"id": "<string>",
"label": "<string>"
}
],
"allow_other": true,
"allow_note": true
}
]
},
"result": "<unknown>",
"result_expires_at": "<string>",
"write_status": "not_attempted",
"login_save": {
"status": "saved",
"login_id": "<string>",
"reason": "<string>"
},
"error": {
"error": {
"code": "<string>",
"message": "<string>",
"retryable": true,
"docs_url": "<string>",
"details": {}
}
},
"message": "<string>",
"maintenance": {
"status": "repairing",
"result_recovered": true,
"message": "<string>"
},
"build": {
"integration_id": "int_0f8e2d1c4b3a49e8a7f6e5d4c3b2a190",
"stage": "queued",
"stages": [
{
"key": "queued",
"label": "<string>",
"status": "done",
"started_at": "<string>",
"completed_at": "<string>"
}
],
"eta": {
"min_seconds": 123,
"max_seconds": 123
},
"example_result": "<unknown>",
"existing_tool_id": "<string>"
},
"watch_url": "<string>",
"created_at": "<string>",
"updated_at": "<string>",
"completed_at": "<string>",
"tip": "<string>"
}{
"id": "job_0f8e2d1c4b3a49e8a7f6e5d4c3b2a190",
"type": "run",
"status": "queued",
"tool_id": "<string>",
"input_request": {
"id": "req_0f8e2d1c4b3a49e8a7f6e5d4c3b2a190",
"expires_at": "<string>",
"answer_url": "<string>",
"message": "<string>",
"questions": [
{
"id": "<string>",
"prompt": "<string>",
"type": "choice",
"options": [
{
"id": "<string>",
"label": "<string>"
}
],
"allow_other": true,
"allow_note": true
}
]
},
"result": "<unknown>",
"result_expires_at": "<string>",
"write_status": "not_attempted",
"login_save": {
"status": "saved",
"login_id": "<string>",
"reason": "<string>"
},
"error": {
"error": {
"code": "<string>",
"message": "<string>",
"retryable": true,
"docs_url": "<string>",
"details": {}
}
},
"message": "<string>",
"maintenance": {
"status": "repairing",
"result_recovered": true,
"message": "<string>"
},
"build": {
"integration_id": "int_0f8e2d1c4b3a49e8a7f6e5d4c3b2a190",
"stage": "queued",
"stages": [
{
"key": "queued",
"label": "<string>",
"status": "done",
"started_at": "<string>",
"completed_at": "<string>"
}
],
"eta": {
"min_seconds": 123,
"max_seconds": 123
},
"example_result": "<unknown>",
"existing_tool_id": "<string>"
},
"watch_url": "<string>",
"created_at": "<string>",
"updated_at": "<string>",
"completed_at": "<string>",
"tip": "<string>"
}{
"error": {
"code": "<string>",
"message": "<string>",
"retryable": true,
"docs_url": "<string>",
"details": {}
}
}{
"error": {
"code": "<string>",
"message": "<string>",
"retryable": true,
"docs_url": "<string>",
"details": {}
}
}{
"error": {
"code": "<string>",
"message": "<string>",
"retryable": true,
"docs_url": "<string>",
"details": {}
}
}{
"error": {
"code": "<string>",
"message": "<string>",
"retryable": true,
"docs_url": "<string>",
"details": {}
}
}{
"error": {
"code": "<string>",
"message": "<string>",
"retryable": true,
"docs_url": "<string>",
"details": {}
}
}{
"error": {
"code": "<string>",
"message": "<string>",
"retryable": true,
"docs_url": "<string>",
"details": {}
}
}{
"error": {
"code": "<string>",
"message": "<string>",
"retryable": true,
"docs_url": "<string>",
"details": {}
}
}{
"error": {
"code": "<string>",
"message": "<string>",
"retryable": true,
"docs_url": "<string>",
"details": {}
}
}{
"error": {
"code": "<string>",
"message": "<string>",
"retryable": true,
"docs_url": "<string>",
"details": {}
}
}{
"error": {
"code": "<string>",
"message": "<string>",
"retryable": true,
"docs_url": "<string>",
"details": {}
}
}Authorization: Bearer <token> with Dashboard session, Pomerado MCP OAuth token, API key, integration API key.
Permission: runs:create.
Effect: Write: creates or changes something in your account.
Errors: invalid_input (400), unsupported_login_field (400), invalid_request (400), unauthorized (401), reauthentication_required (401), save_forbidden (403), forbidden (403), not_found (404), idempotency_conflict (409), quota_expired (409), account_selection_required (409), saved_login_conflict (409), login_identity_conflict (409), legacy_duplicate_saved_logins (409), saved_login_unsettled (409), request_too_large (413), quota_exceeded (429), internal_error (500), not_configured (501), acceptance_unknown (503), temporarily_unavailable (503). Every error has the same envelope.Authorizations
Bearer authentication header of the form Bearer <token>, where <token> is your auth token.
Headers
Repeat a request safely: the same key and body answer the first request's job again with Idempotent-Replayed: true; the same key with a different body answers idempotency_conflict. 1 to 200 letters, digits, _ or -, such as a UUID
^[A-Za-z0-9_-]{1,200}$Path Parameters
an integration ID: int_ and 32 lowercase hex digits
"int_0f8e2d1c4b3a49e8a7f6e5d4c3b2a190"
A tool ID, as GET /v1/tools lists it: tool_ and 32 lowercase hex digits
Body
The tool's input, as its input_schema describes; {} when it takes none
The saved login to sign in with, when the site has several
"login_0f8e2d1c4b3a49e8a7f6e5d4c3b2a190"
A login for this call, used only when the site has no saved login: a username (or email, phone or account number) with its password, or mode "code" and no password when the site sends a code. It reaches this caller's client and model provider; without one, the run asks the person on its answer page.
Show child attributes
Show child attributes
Keep login as a saved login (requires login)
The two-factor method the sign-in picks when the site offers several, among the tool's two-factor methods
sms, call, email, authenticator, push Correct the rejected saved login login_id during this run
true Staging and preview only: true seals what this job stores and redacts it once it settles, false keeps it readable, overriding the environment's setting. Production refuses a request that names it with invalid_request.
Response
The job this Idempotency-Key already started, with Idempotent-Replayed: true
a job ID: job_ and 32 lowercase hex digits
"job_0f8e2d1c4b3a49e8a7f6e5d4c3b2a190"
run, build queued, running, needs_input, succeeded, failed, cancelled Show child attributes
Show child attributes
a string to be decoded into a Date
not_attempted, may_have_applied, applied, not_applied Show child attributes
Show child attributes
Show child attributes
Show child attributes
Show child attributes
Show child attributes
Show child attributes
Show child attributes
a string to be decoded into a Date
a string to be decoded into a Date
a string to be decoded into a Date