Skip to content

REST API

REST is one of two transports for invoking tools on a Wire container. The other is MCP. What tools exist, what they do, and what they return is defined on the Tools page — this page covers how to call them over HTTP.

All REST endpoints accept the same credentials as MCP:

  • API Key: x-api-key: YOUR_API_KEY header
  • Bearer Token: Authorization: Bearer YOUR_TOKEN header

On public containers, wire_status (GET /status) is accessible without authentication. All other tools require an API key or bearer token.

See Authentication for details on obtaining credentials.

REST exposes two endpoint styles:

1. Generic tool dispatcher — for the standard tools (wire_explore, wire_search, wire_navigate, wire_write, wire_delete):

POST /container/:id/tools/{short-name}

The {short-name} is the tool name without the wire_ prefix. The request body is a JSON object matching the tool’s input schema documented on the Tools page.

Example:

Terminal window
curl -X POST \
-H "x-api-key: YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{"query": "customer feedback on pricing"}' \
https://YOUR_ORG_SLUG.api.usewire.io/container/YOUR_CONTAINER_ID/tools/search

2. Dedicated REST endpoints — for file and status tools, where the underlying operation doesn’t map cleanly to a JSON-body call (multipart upload, GET semantics for status, path-positional file IDs):

ToolREST endpoint
wire_statusGET /container/:id/status
wire_files_listGET /container/:id/files
wire_files_uploadPOST /container/:id/files (multipart)
wire_files_deleteDELETE /container/:id/files/:fileId

Both styles share the same gating: if a tool is toggled off for the REST transport on the container’s Tools page, the corresponding endpoint returns 404 NOT_FOUND. See Tools for each tool’s input schema, output shape, default visibility, and credit cost.

Any automation platform that can make an authenticated HTTP POST — n8n, Zapier, Make, Pipedream, a cron job, a shell script — can drop entries into a Wire container by calling wire_write:

Terminal window
curl -X POST \
-H "x-api-key: YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{"content": "Q2 revenue increased 15% driven by enterprise segment", "tags": ["finance", "q2"]}' \
https://YOUR_ORG_SLUG.api.usewire.io/container/YOUR_CONTAINER_ID/tools/write

Wire uses the source string to trace where each entry came from. Stick to the <platform>:<identifier> pattern so downstream graph exploration stays tidy:

OriginRecommended source
Claude Code / other MCP agentsagent:session-abc (default: agent:mcp)
REST without explicit sourcewebhook:<api-key-name> (auto-filled)
n8n workflown8n:<workflow-id>:<node-id>
Make scenariomake:<scenario-id>
Zapier zapzapier:<zap-id>
Custom script / anything elsewebhook:<descriptive-name>

See the Sources tab inside any container in the dashboard to grab the endpoint URL pre-filled for your container.

POST /container/:id/claim

Generate a claim link for an ephemeral container. Returns a URL the user can open to sign up or log in and make the container permanent. Requires authentication.

Returns 409 Conflict if the container has already been claimed.

Terminal window
curl -X POST \
-H "x-api-key: YOUR_API_KEY" \
https://YOUR_ORG_SLUG.api.usewire.io/container/YOUR_CONTAINER_ID/claim
{
"success": true,
"data": {
"claim_url": "https://app.usewire.io/onboarding/create-account?claimToken=...",
"expires_in": 3600
}
}

All errors follow the same format:

{
"success": false,
"error": {
"code": "NOT_FOUND",
"message": "Endpoint disabled: 'wire_files_list' is turned off for this container's REST transport"
}
}
CodeHTTP StatusDescription
BAD_REQUEST400Missing required parameter
UNAUTHORIZED401Missing or invalid credentials
INSUFFICIENT_CREDITS402Not enough credits to execute tool
FORBIDDEN403Action not allowed (e.g., write tools on public access, scoped key on wrong container)
NOT_FOUND404Container, file, or tool not found — also returned when a tool is toggled off for the REST transport
CONFLICT409Container already claimed
TOOL_ERROR422Tool execution returned an error
INTERNAL_ERROR500Server error