Every Viably tool, one HTTP call away.
Scripts, CI jobs and anything else that speaks HTTP can call the tools the MCP server gives agents, at /v1/<tool> with a personal access token. Reads take GET or POST, changes take POST, and every answer is the same JSON under data.
curl https://api.viably.app/v1/list_tasks?status=todo,blocked \ -H "Authorization: Bearer $VIABLY_TOKEN"
The tools your agent calls, as endpoints your scripts call.
The MCP server and the REST API serve one catalog, so a tool added to one appears in the other. The reference, the OpenAPI document and the grid below are all generated from it.
A token for each script, reaching only what it needs.
Create a personal access token on API and agents, tick what it may read and change, and send it as a bearer token. Viably keeps only a hash, so the token is shown once: put it straight into your CI's secrets.
Create a personal access token
Nightly digest, GitHub ActionsTasks
Deals
Your inbox
Create tasks, which post to Slack, and change their status, assignee and due date
Copy your token now
Viably keeps only a hash of it, so this is the one time it is shown. Repository secrets
One token per script, so revoking one on API and agents leaves the others working.
- Expires when you choose
30 days, 90 days, a year, or never. Each token shows when it last ran, which makes stale ones easy to spot.
- Leaving ends it
Viably checks the member behind a token on every call. When someone leaves the workspace, their tokens stop working on the next request.
- Revoke one, keep the rest
Give each script its own token. Revoking the one that leaked leaves the nightly job and the dashboard sync running.
A nightly build that files its own failures.
One step at the end of a workflow turns a red build into an issue in #engineering, on the board, and on GitHub when the channel has a linked repository. The same shape works for a weekly digest built from list_deals, or a job that sweeps the inbox every morning.
name: nightly on: schedule: - cron: "0 2 * * *" jobs: test: runs-on: ubuntu-latest steps: - uses: actions/checkout@v4 - run: npm test - if: failure() run: | curl https://api.viably.app/v1/create_issue \ -H "Authorization: Bearer ${{ secrets.VIABLY_TOKEN }}" \ -H "Content-Type: application/json" \ -d '{"title": "Nightly tests failed on main", "channel": "engineering"}'
nightly
run 412- Check out
- npm test
- File the failure in Viably
#engineering
Issue created: Nightly tests failed on main
Plain statuses, and a budget you can see.
A failed call answers with a status and its reason under error. Each token gets 30 requests a minute on Free and 60 on Viably+, and a change costs 3. Every response carries an X-Request-Id to quote when you write to us about a call.
The tool ran. Its answer is under data.
{ "data": { "task": { "id": 3137, "channel": "ops" }, "note": null } }Every change on the record, refused ones included
API and agents lists each write with the member, the token or app that made it, the tool and the record it touched. A call Viably refused is listed with its reason, so a script reaching past its scopes shows up the first time it tries.
Agents use the same tools through the MCP server, and their changes land on the same list.
Changes, newest first
API and agents- 2 min ago
create issue 221
Jim via Personal token - 9 min ago
move deal 812
Jim via Personal token · refused: This token lacks the deals:write scope - 1 hour ago
create task 3137
Jim via Personal token - 3 hours ago
claim contact 985
Jim via Claude Code
Questions about the API
How do I authenticate?
How is the REST API different from the MCP server?
Is there an OpenAPI document?
What are the rate limits?
Can a token do more than the person who made it?
Does the API cost extra?
Call Viably from your next script.
Start free, create a token on API and agents, and make your first call in a minute.
- Free to start
- No credit card required
- Powers on when you need them