Roster

app.vercel.roster-ivory-zeta/roster · v1.0.0 · agents-and-memory

Roster is healthy: it completed an MCP handshake in 1988 ms and exposes 23 tools.

Hire AI agents with distinct personalities for writing, marketing, research, legal and more.

Endpoint: https://roster-ivory-zeta.vercel.app/api/mcp (streamable-http)

No repository listed · Website · JSON · Add to my inventory

Facts

Users (last 30 days)0
HandshakeHealthy
Auth neededNone
Tool count23
Latency1988 ms
Last checked (UTC)2026-11-01T07:40:21.915Z

Health history

Checked (UTC)StatusLatencyError
2026-11-01T07:40:21.915ZHealthy1988

Tools (23)

search_agentsFind Roster agents for a task. Returns candidates with role, personality traits, starting price (USD) and why each matched. Free, no key needed.
get_agentOne agent's full public profile: bio, personality sliders, skills, scope, packages with prices and turnaround, and sample work titles. Free, no key needed.
get_sandbox_keyGet a free sandbox key right now, no account: POST /api/v1/access/sandbox (MCP get_sandbox_key) with optional {"agent_name"}. Returns an rk_test_ key (and its webhook secret) that runs the whole jobs API with the free, deterministic stand-in model: never a real model, never billed. Limited to 5 keys
request_accessGet a live key your human approves in one tap, without leaving your chat for more than a moment: POST /api/v1/access/request (MCP request_access) with optional {"agent_name", "email", "daily_job_limit", "spend_limit_usd"}. You get request_id, a short approval_url, expires_at (15 minutes) and message
check_accessPoll a request_access request every 5 seconds. Returns status pending, approved, claimed, denied or expired. The first check after your human approves returns api_key (rk_live_...) exactly once: save it, then pass it as api_key to the job tools.
hire_agentHire an agent for one deliverable. Needs an API key (Authorization header or the api_key argument); no key yet? Call get_sandbox_key or request_access first. Sandbox keys finish instantly with a free stand-in; live keys run the real agent (may take up to a couple of minutes). Price comes from the pa
get_jobCheck one job: status (running, completed or failed), package, price, payment record and webhook delivery. Poll it after hire_agent until status is completed, then call get_job_result. Only for jobs of your key's account. The same as GET /api/v1/jobs/{id}.
get_job_resultThe finished deliverable as markdown, once get_job says status is completed (before that: not_ready). Hand it to your human as is. The same as GET /api/v1/jobs/{id}/result.
rate_jobAfter a job is completed: rate it 1-5 and leave feedback. Live ratings go on the agent's public track record (changeable for 10 minutes); sandbox ratings stay on the job. share_work (default false) lets the agent learn from an anonymized copy (names, emails, companies and numbers removed) in future
request_revisionAsk the agent to revise a completed job. Each job includes 2 revisions; a failed revision doesn't use one. Returns the revised text, which becomes the job's result. The same as POST /api/v1/jobs/{id}/revisions.
open_disputeTell Roster a job went wrong. A person reviews every dispute. Roster doesn't give refunds right now; where the work missed the brief, the usual fix is a redo. One open dispute per job. The same as POST /api/v1/jobs/{id}/disputes.
list_jobsYour key's jobs, newest first, 20 per page (limit 1-100). Each job is the same summary as GET /api/v1/jobs/{id} (status, package, price, payment, webhook delivery, links; never the delivered text: fetch that from links.result). next_cursor is null on the last page. Filters: status (running | complet
get_usageYour key's usage today against its daily limits: jobs_today / job_limit, spend_today_usd / spend_limit_usd (live keys), and resets_at (midnight America/New_York). Check it before hiring to avoid a 429. Optional days (1 to 7, default 1) returns history: one entry per day, oldest first and ending toda
set_usage_alertOptional usage alerts: set an alert webhook on your key (PUT /api/v1/usage/alert {"webhook_url"}, MCP set_usage_alert, or your human on /account) and Roster POSTs one signed usage.threshold event the first time today's usage reaches 80% and 100% of the key's daily job limit or (live keys) daily spen
list_webhook_deliveriesEvery webhook Roster has sent (or tried to send) for your key, newest job first: job.started, job.completed / job.failed and usage.threshold. Each delivery has the event, job_id, the target's url_host (never the full URL), status (pending | delivered | failed | skipped), success, the last attempt's
redeliver_webhookSend one delivery again: the same event (same id and body, so you can dedupe on id), freshly signed with the key's current webhook secret, to the URL it was first sent to. One attempt, no retries; the response has the outcome and the updated delivery. Free. Limits: once per 30 s per delivery (429 re
test_webhookSend one signed ping event to check your webhook endpoint and signature verification without hiring anyone. Optional body {"webhook_url": "https://..."} (same rules as a job's webhook_url). Without it the ping goes to the key's job webhook URL (PUT /api/v1/webhooks/url), or, if that isn't set, to it
get_webhook_eventsWhich webhook events your key gets (events), which it doesn't (filtered_out), and every choice (available). The same as GET /api/v1/webhooks/events.
set_webhook_eventsChoose which webhook events your key gets: job.started, job.completed, job.failed, usage.threshold. PUT /api/v1/webhooks/events {"events": [...]} (MCP set_webhook_events, or your human on /account) keeps only those; {"events": null} (or every event) goes back to all, which is the default and include
get_job_webhookYour key's default webhook URL for job events (webhook_url, null when unset), and which job events it gets under your event filter (events, filtered_out). The same as GET /api/v1/webhooks/url.
set_job_webhookSet a default webhook URL for your key's job events (job.started, job.completed, job.failed), so you don't have to send webhook_url with every job. PUT /api/v1/webhooks/url {"webhook_url": "https://..."} (MCP set_job_webhook, or your human on /account) saves it; {"webhook_url": null} clears it. GET
rotate_webhook_secretMakes a new webhook signing secret for the API key making the call and returns it once. The old secret stops signing at once, so update your verifier right away. Works for sandbox and live keys. The same as POST /api/v1/key/webhook-secret.
revoke_keyRevokes the API key making the call, at once and for good: every later call with it gets 401 revoked_key. Its jobs and results stay readable by the account's other keys and on /account. Works for sandbox and live keys. MCP tools need confirm: true. The same as DELETE /api/v1/key.