API reference
Base URL: https://www.prompt-tm.com/api/v3. Send your project key as x-api-key (or Authorization: Bearer). Bodies are JSON. Errors look like this:
{ "error": { "message": "auth_config.id and user_id are required.", "code": "bad_request", "status": 400 } }
Lists take limit (up to 200) and cursor, and return items and next_cursor.
Toolkits and tools (public, no key)
| Method | Path | Notes |
|---|---|---|
| GET | /toolkits | category, search. Returns items, categories. |
| GET | /toolkits/{slug} | Auth methods with their fields, tools, triggers. |
| GET | /tools | toolkit_slug (comma list), tool_slugs, query, format=openai|openai_responses|anthropic|mcp. |
| GET | /tools/{slug} | One tool with input_parameters. Takes format too. |
| GET | /triggers_types | toolkit_slugs. |
| GET | /triggers_types/{slug} | Config schema and example payload. |
Execute
POST /tools/execute/{slug}
{ "user_id": "alice", "arguments": { "owner": "acme", "repo": "web", "title": "Bug" } }
Pass connected_account_id instead of user_id to pick an account. The answer is always:
{ "data": { "...": "..." }, "error": null, "successful": true, "log_id": "log_..." }
A failed call answers 400 with successful: false and an error the agent can act on: invalid arguments, no active connection, or the app's own error message.
POST /tools/execute/proxy
{ "toolkit_slug": "github", "endpoint": "/user/emails", "method": "GET", "user_id": "alice",
"parameters": [{ "name": "per_page", "value": 5, "type": "query" }] }
endpoint must be a path. It is resolved against the toolkit's API host and sent with the account's auth.
Auth configs
| Method | Path | Body |
|---|---|---|
| GET | /auth_configs | toolkit_slug filter |
| POST | /auth_configs | toolkit.slug, auth_config.type (use_managed_auth or use_custom_auth), auth_config.auth_scheme, auth_config.credentials (client_id, client_secret, scopes), name, restrict_to_following_tools |
| GET | /auth_configs/{id} | |
| PATCH | /auth_configs/{id} | name, status (ENABLED/DISABLED), scopes, restrict_to_following_tools, credentials |
| DELETE | /auth_configs/{id} | Deletes its connected accounts too. |
Connected accounts
| Method | Path | Body or query |
|---|---|---|
| GET | /connected_accounts | user_ids, toolkit_slugs, statuses, auth_config_ids |
| POST | /connected_accounts | auth_config.id, user_id, callback_url, alias, connection.data (keys you already hold) |
| POST | /connected_accounts/link | auth_config_id, user_id, callback_url, alias. Returns redirect_url, link_token, expires_at, connected_account_id. |
| GET | /connected_accounts/{id} | Never includes credentials. |
| PATCH | /connected_accounts/{id} | alias, status (ACTIVE/DISABLED) |
| POST | /connected_accounts/{id}/refresh | New connect link for an expired account. |
| DELETE | /connected_accounts/{id} |
MCP servers and sessions
| Method | Path | Body |
|---|---|---|
| GET | /mcp/servers | |
| POST | /mcp/servers | name, type (custom/router), toolkits, allowed_tools, auth_config_ids |
| GET, PATCH, DELETE | /mcp/servers/{id} | |
| POST | /mcp/servers/{id}/generate | user_ids, with_key. Returns one URL per user. |
| POST | /tool_router/session | user_id, toolkits, auth_config_ids. Returns session_id and mcp.url. |
| GET, DELETE | /tool_router/session/{id} |
The MCP endpoint itself is https://www.prompt-tm.com/mcp/{server id}: JSON-RPC 2.0 over streamable HTTP, methods initialize, tools/list, tools/call, ping.
Triggers
| Method | Path | Body |
|---|---|---|
| GET | /trigger_instances | user_id |
| POST | /trigger_instances | slug, user_id or connected_account_id, trigger_config |
| PATCH | /trigger_instances/{id} | status: enable or disable |
| DELETE | /trigger_instances/{id} | Also removes the upstream webhook. |
Logs
GET /logs with toolkit_slug, tool_slug, user_id, connected_account_id, status (success/error). Each item has the request and response as stored, with secrets masked.