Endpoints

POST /v1/run

Execute a provider endpoint. Billed.

Execute a specific provider endpoint. Billed.

Sync tools return the completed run immediately (200). Async tools return 202 with a runId — poll GET /v1/runs/get.

Request

POST /v1/run

Headers

HeaderRequiredDescription
AuthorizationYesBearer <api-key>
Content-TypeYesapplication/json

Body

FieldTypeRequiredDescription
providerstringYesProvider slug
endpointstringYesEndpoint slug
inputobjectNoJSON body (default {})

Example

curl -X POST https://api.toolplexer.com/v1/run \
  -H "Authorization: Bearer tpl_live_..." \
  -H "Content-Type: application/json" \
  -d '{
    "provider": "exa",
    "endpoint": "/search",
    "input": { "query": "AI agent tooling", "maxResults": 5 }
  }'

Response

FieldTypeDescription
runIdstring
providerstring
slugstringEndpoint slug
statusstringREADY RUNNING COMPLETED FAILED BLOCKED STOPPED TIMED_OUT
outputany | nullProvider output
errorstring | null
errorSource"provider" | "platform" | null
providerHttpStatusnumber | nullUpstream HTTP status
stoppablebooleantrue only while READY
holdUsdMicronumberAmount held
costUsdMicronumber | nullAmount charged
billedUnitsnumber | null
controlsarray | nullPresent when BLOCKED
hintsarray

Status vs provider HTTP status

  1. status — did our run finish? COMPLETED means the provider was called. FAILED is our fault. BLOCKED never called the provider.
  2. providerHttpStatus — did the provider return data? 200 = yes. 404 = no match. Not charged on >= 400.

Do not automatically retry paid operations.

Next

Poll GET /v1/runs/get for async runs. Prefer POST /v1/execute when you want ToolPlexer to pick the provider.

On this page