The phone is your last API. Give your agent a voice to call any US business - reservations, inquiries, quotes. Verified outcome + transcript. First 250 calls free.
See the codeThe internet has APIs. The real world has phone numbers.
Give your agent a voice to call any US business, handle reservations, gather information, get quotes. Handles IVRs & hold. Returns outcome + transcript. First 250 calls free.
curl -s -X POST https://api.voygr.tech/calls \
-H "X-API-Key: $PLACECALL_API_KEY" -H "Content-Type: application/json" \
-H "X-Client-Surface: gh-repo" \
-H "X-Client-Agent: ${CLAUDECODE:+claude-code}${CURSOR_AGENT:+cursor}${CODEX_SANDBOX:+codex}${GEMINI_CLI:+gemini-cli}" \
-d '{"target_phone":"+1XXXXXXXXXX","brief":"Call this restaurant and ask what time the kitchen closes tonight.","language":"en"}'
Authentication: every request carries your key in the X-API-Key header.
Get one at https://api.voygr.tech/checkout - it arrives by email.
Give PlaceCall a US number (or a list) and a task in plain English - from making an inquiry to requesting a quote or completing a booking - and it dials, navigates IVRs and hold, talks to a business, and returns a verified outcome + transcript + recording.
No number? Just describe the place: "a romantic restaurant in Chicago, Saturday 8pm". PlaceCall finds candidates, explains why it picked them, and writes the call brief for you.
Put the full job in the brief - what to ask, who it's for, names, dates, party size, callback number, and desired outcome. The agent reads the brief, then gets things done. If necessary - agents will ask questions mid-call.
Every call returns one of 17 verified outcomes, plus the full transcript and recording - including clear failure reasons like dropped calls, busy lines, voicemail, or wrong numbers.
Built for agents that need to get shit done. Built by developers who mapped the world - ex-Google Maps & Search team.
🎁 Your first 250 calls are on us.
If PlaceCall is useful, drop us a ⭐ - it helps a lot.
Installing the skill needs no key - it just teaches your agent how to call the API. You add your key separately (next section) before placing real calls.
Two commands, no shell, no git - and it auto-updates from this repo:
/plugin marketplace add voygr-tech/placecall
/plugin install placecall@placecall
Claude Code asks where to install it - choose user scope ("Install for you")
unless you specifically want it confined to one repository. The skill then answers
to /placecall:call, and Claude reaches for it on its own whenever you ask to
call someone.
git clone https://github.com/voygr-tech/placecall && cd placecall
./install.sh # copies skills/call/SKILL.md -> ~/.claude/skills/placecall/
install.sh is a tiny convenience script - it only copies
skills/call/SKILL.md into your skills dir (no network, no other side
effects); you can also copy it by hand. Then start a fresh Claude Code session
(skills load at startup). Note that a copy never updates itself - if you want new
skills and fixes as we ship them, prefer the plugin above.
Same package as the Claude Code plugin, no terminal at all:
voygr-tech/placecallAuto-updates from this repo, like the Code plugin.
Then do both of these, in ~/.claude/settings.json. Cowork has no terminal,
so the export in the next section has nothing to run in, and the Bash sandbox
blocks our API until you allow it:
{
"env": { "PLACECALL_API_KEY": "<your key>" },
"sandbox": { "network": { "allowedDomains": ["api.voygr.tech"] } }
}
Restart Cowork afterwards. Why each half matters:
env puts the key somewhere that survives a reboot. Setting it in a shell
does not reach a desktop app, which never sees that shell.allowedDomains pre-allows api.voygr.tech. Claude Code pre-allows no
domains, so without this you get a permission prompt on the first call, and if
your organisation sets strictAllowlist or allowManagedDomainsOnly the call
is blocked outright with no prompt. That is the "deep admin setting" people
hit.Your key sits in plaintext in that file, same trust level as the 600 env file
in the next section. chmod 600 ~/.claude/settings.json if you want the file
permissions to match.
Works on every plan via a custom connector. Same setup everywhere; only the key's hiding place differs.
| Your plan | Who adds it | Where the key goes |
|---|---|---|
| Pro / Max | You | Request header |
| Team / Enterprise | A workspace Owner, once for everyone | Request header |
| Free | You | Inside the URL |
Setup. Personal plans: Settings > Connectors > Add. Team/Enterprise Owners: Organization Settings > Connectors > Add > Custom.
PlaceCall, URL https://api.voygr.tech/mcp
Free plan: https://api.voygr.tech/mcp?key=<your key>x-api-key with your key
Free plan: skip this, the key is already in the URLTwo things worth knowing. On Free, treat the connector URL like the key itself, since anyone who copies it can spend your credits (our server strips it from the URL on arrival, so it never reaches a log). On Team/Enterprise, one key serves everyone, so all calls bill to it.
ChatGPT: not yet. Its connectors require OAuth sign-in, which we are building.
Point the client at https://api.voygr.tech/mcp (streamable HTTP transport)
and send your key on every request - either header works:
X-API-Key: <your key>
or Authorization: Bearer <your key>.
Claude Code keeps its own MCP config (it does not pick up claude.ai connectors), so add it there with one command:
claude mcp add --transport http --scope user placecall https://api.voygr.tech/mcp \
--header "X-API-Key: <your key>"
--scope user makes it available in every project. The plugin at the top of
this page is still the richer path for Claude Code - it carries the full skill,
not just the three tools.
Type this inside Codex, not in your shell. $skill-installer is a system
skill bundled with Codex, so there is nothing to set up first:
$skill-installer install the skill at https://github.com/voygr-tech/placecall/tree/main/skills/call and name it placecall
It is a skill rather than a command, so plain English works and is what it
expects. It runs the install for you and reports where the skill landed. No
restart needed, it is available on your next turn, and it answers to
$placecall.
If the phrasing above is not understood, this is the script it runs, and you can run it yourself from a normal shell:
python3 ~/.codex/skills/.system/skill-installer/scripts/install-skill-from-github.py \
--url https://github.com/voygr-tech/placecall/tree/main/skills/call \
--name placecall
Two things worth knowing. The installer refuses to overwrite, so if you already
have a placecall (or older callwright) skill in ~/.codex/skills, delete it
first or the install aborts. And don't run install.sh on Codex, that is the
Claude Code path.
On older Codex without $skill-installer, or as an alternative on any Codex,
paste this repo's AGENTS.md into your project's AGENTS.md.
One command, and it prompts for the key rather than taking it on the command line, so nothing lands in your shell history:
hermes mcp add placecall --url https://api.voygr.tech/mcp/ --auth header
Answer Y to "Does this server require authentication?", paste the key at the
masked prompt, and Y to enable all four tools. Hermes stores the key in
~/.hermes/.env (as MCP_PLACECALL_API_KEY) and writes only a ${...}
reference into config.yaml, so the value is never in the config file. Verify
with hermes mcp test placecall, then start a new session - tools load at
session start.
Do not use the skill route on Hermes. hermes skills install placecall is
refused by Hermes's own scanner: a skill that sends an API key with curl to
any non-loopback host is a critical finding by that scanner's design, which is
what our skill does on every call. MCP has no shell and no env var in the
request, so the rule does not apply. The trailing slash on the URL matters.
No install needed - the API is just HTTP. skills/call/SKILL.md is the full
reference; a model with a shell tool can place calls straight from it.
No shell on your side? Assistants with their own computer (e.g. Meta Muse) integrate from this repo directly: paste the repo URL into the chat and ask it to use PlaceCall for phone calls. If it offers secure credential storage for the API key, use that - never paste the key into the chat itself.
Known to work this way: Meta Muse, OpenClaw (DeepSeek backend). Hermes needs
the MCP route above rather than the skill. If you are an agent building this
integration, send X-Client-Surface: <your-platform> on every request so we
can see which surfaces need love.
Installing the skill does not need a key; placing calls does. Keys are self-serve - no need to contact anyone:
Then set the key in your shell:
Quick way - just export it for the current session:
export PLACECALL_API_KEY="<your key>"
Nicer way - save it once (no echo to screen, 600 perms) and load it per session:
mkdir -p ~/.codex
read -rsp "PLACECALL_API_KEY: " KEY; echo
printf 'export PLACECALL_API_KEY=%q\n' "$KEY" > ~/.codex/placecall.env
chmod 600 ~/.codex/placecall.env
unset KEY
# then, in any new shell where you want to place calls:
source ~/.codex/placecall.env
No shell at all? A desktop app never sees your shell environment, so neither
of the above reaches it. Put the key in the env block of
~/.claude/settings.json instead, which survives restarts. See the
Cowork section, which also covers the sandbox domain allowlist you
need there.
Verify (prints your quota, never the key):
curl -s -H "X-API-Key: $PLACECALL_API_KEY" https://api.voygr.tech/users/me
Never commit ~/.codex/placecall.env or paste the key into chat - keep it in the
env var / the 600 file above.
This project was called Callwright until 2026-08, and the repo lived at
voygr-tech/callwright-skill. Two things to know:
install.sh copies the skill rather than
linking it, so an older copy is frozen at whatever it was when you installed -
the rename cannot break it. It also means it will never pick up new skills or
fixes, which is the reason to migrate.install.sh now warns you if it finds one.
rm -rf ~/.claude/skills/callwright ~/.claude/skills/callwright-skill
Then install the plugin above, and re-export your key under its new name:
PLACECALL_API_KEY. The key itself is unchanged - only the variable is renamed,
so no need to reissue anything.If you previously installed a phone-call skill from someone else (e.g.
ai-call-agent), remove or disable that too, for the same reason.
Everything goes in the brief - the bot reads only your brief. Put every detail
in it (what to ask, who you're calling for, names/dates/party size/callback number,
how to wrap up). One endpoint, describe the task, done.
POST /v1/places/suggest, nothing when it returns no cards or is refused.
Both take a refundable hold at request time that is larger than the charge,
so either can return 402 while your balance still looks sufficient for the
charge alone (GET /users/me for your balance; rates and top-ups are
self-serve at https://api.voygr.tech/checkout?src=gh-repo). The free tier
is one shared pot: 250 free calls means 2,500 credits, and suggestions spend
from the same 2,500.completed, the outcome/transcript can populate a moment
after the status flips - poll GET /calls/{id} until outcome_type is
non-null.en, es, fr, de, hi, ru, pt, ja,
it, nl, sr, tr, pl) plus auto (the default, resolves to en).
en is the most reliable; non-English is best-effort.Full reference: skills/call/SKILL.md (Claude Code) · AGENTS.md (Codex).
Live API docs: https://api.voygr.tech/docs - log in with your PlaceCall key (the same one you set as PLACECALL_API_KEY).
Shell
100.0%
The phone is your last API. Give your agent a voice to call any US business - reservations, inquiries, quotes. Verified outcome + transcript. First 250 calls free.
See the codeThe internet has APIs. The real world has phone numbers.
Give your agent a voice to call any US business, handle reservations, gather information, get quotes. Handles IVRs & hold. Returns outcome + transcript. First 250 calls free.
curl -s -X POST https://api.voygr.tech/calls \
-H "X-API-Key: $PLACECALL_API_KEY" -H "Content-Type: application/json" \
-H "X-Client-Surface: gh-repo" \
-H "X-Client-Agent: ${CLAUDECODE:+claude-code}${CURSOR_AGENT:+cursor}${CODEX_SANDBOX:+codex}${GEMINI_CLI:+gemini-cli}" \
-d '{"target_phone":"+1XXXXXXXXXX","brief":"Call this restaurant and ask what time the kitchen closes tonight.","language":"en"}'
Authentication: every request carries your key in the X-API-Key header.
Get one at https://api.voygr.tech/checkout - it arrives by email.
Give PlaceCall a US number (or a list) and a task in plain English - from making an inquiry to requesting a quote or completing a booking - and it dials, navigates IVRs and hold, talks to a business, and returns a verified outcome + transcript + recording.
No number? Just describe the place: "a romantic restaurant in Chicago, Saturday 8pm". PlaceCall finds candidates, explains why it picked them, and writes the call brief for you.
Put the full job in the brief - what to ask, who it's for, names, dates, party size, callback number, and desired outcome. The agent reads the brief, then gets things done. If necessary - agents will ask questions mid-call.
Every call returns one of 17 verified outcomes, plus the full transcript and recording - including clear failure reasons like dropped calls, busy lines, voicemail, or wrong numbers.
Built for agents that need to get shit done. Built by developers who mapped the world - ex-Google Maps & Search team.
🎁 Your first 250 calls are on us.
If PlaceCall is useful, drop us a ⭐ - it helps a lot.
Installing the skill needs no key - it just teaches your agent how to call the API. You add your key separately (next section) before placing real calls.
Two commands, no shell, no git - and it auto-updates from this repo:
/plugin marketplace add voygr-tech/placecall
/plugin install placecall@placecall
Claude Code asks where to install it - choose user scope ("Install for you")
unless you specifically want it confined to one repository. The skill then answers
to /placecall:call, and Claude reaches for it on its own whenever you ask to
call someone.
git clone https://github.com/voygr-tech/placecall && cd placecall
./install.sh # copies skills/call/SKILL.md -> ~/.claude/skills/placecall/
install.sh is a tiny convenience script - it only copies
skills/call/SKILL.md into your skills dir (no network, no other side
effects); you can also copy it by hand. Then start a fresh Claude Code session
(skills load at startup). Note that a copy never updates itself - if you want new
skills and fixes as we ship them, prefer the plugin above.
Same package as the Claude Code plugin, no terminal at all:
voygr-tech/placecallAuto-updates from this repo, like the Code plugin.
Then do both of these, in ~/.claude/settings.json. Cowork has no terminal,
so the export in the next section has nothing to run in, and the Bash sandbox
blocks our API until you allow it:
{
"env": { "PLACECALL_API_KEY": "<your key>" },
"sandbox": { "network": { "allowedDomains": ["api.voygr.tech"] } }
}
Restart Cowork afterwards. Why each half matters:
env puts the key somewhere that survives a reboot. Setting it in a shell
does not reach a desktop app, which never sees that shell.allowedDomains pre-allows api.voygr.tech. Claude Code pre-allows no
domains, so without this you get a permission prompt on the first call, and if
your organisation sets strictAllowlist or allowManagedDomainsOnly the call
is blocked outright with no prompt. That is the "deep admin setting" people
hit.Your key sits in plaintext in that file, same trust level as the 600 env file
in the next section. chmod 600 ~/.claude/settings.json if you want the file
permissions to match.
Works on every plan via a custom connector. Same setup everywhere; only the key's hiding place differs.
| Your plan | Who adds it | Where the key goes |
|---|---|---|
| Pro / Max | You | Request header |
| Team / Enterprise | A workspace Owner, once for everyone | Request header |
| Free | You | Inside the URL |
Setup. Personal plans: Settings > Connectors > Add. Team/Enterprise Owners: Organization Settings > Connectors > Add > Custom.
PlaceCall, URL https://api.voygr.tech/mcp
Free plan: https://api.voygr.tech/mcp?key=<your key>x-api-key with your key
Free plan: skip this, the key is already in the URLTwo things worth knowing. On Free, treat the connector URL like the key itself, since anyone who copies it can spend your credits (our server strips it from the URL on arrival, so it never reaches a log). On Team/Enterprise, one key serves everyone, so all calls bill to it.
ChatGPT: not yet. Its connectors require OAuth sign-in, which we are building.
Point the client at https://api.voygr.tech/mcp (streamable HTTP transport)
and send your key on every request - either header works:
X-API-Key: <your key>
or Authorization: Bearer <your key>.
Claude Code keeps its own MCP config (it does not pick up claude.ai connectors), so add it there with one command:
claude mcp add --transport http --scope user placecall https://api.voygr.tech/mcp \
--header "X-API-Key: <your key>"
--scope user makes it available in every project. The plugin at the top of
this page is still the richer path for Claude Code - it carries the full skill,
not just the three tools.
Type this inside Codex, not in your shell. $skill-installer is a system
skill bundled with Codex, so there is nothing to set up first:
$skill-installer install the skill at https://github.com/voygr-tech/placecall/tree/main/skills/call and name it placecall
It is a skill rather than a command, so plain English works and is what it
expects. It runs the install for you and reports where the skill landed. No
restart needed, it is available on your next turn, and it answers to
$placecall.
If the phrasing above is not understood, this is the script it runs, and you can run it yourself from a normal shell:
python3 ~/.codex/skills/.system/skill-installer/scripts/install-skill-from-github.py \
--url https://github.com/voygr-tech/placecall/tree/main/skills/call \
--name placecall
Two things worth knowing. The installer refuses to overwrite, so if you already
have a placecall (or older callwright) skill in ~/.codex/skills, delete it
first or the install aborts. And don't run install.sh on Codex, that is the
Claude Code path.
On older Codex without $skill-installer, or as an alternative on any Codex,
paste this repo's AGENTS.md into your project's AGENTS.md.
One command, and it prompts for the key rather than taking it on the command line, so nothing lands in your shell history:
hermes mcp add placecall --url https://api.voygr.tech/mcp/ --auth header
Answer Y to "Does this server require authentication?", paste the key at the
masked prompt, and Y to enable all four tools. Hermes stores the key in
~/.hermes/.env (as MCP_PLACECALL_API_KEY) and writes only a ${...}
reference into config.yaml, so the value is never in the config file. Verify
with hermes mcp test placecall, then start a new session - tools load at
session start.
Do not use the skill route on Hermes. hermes skills install placecall is
refused by Hermes's own scanner: a skill that sends an API key with curl to
any non-loopback host is a critical finding by that scanner's design, which is
what our skill does on every call. MCP has no shell and no env var in the
request, so the rule does not apply. The trailing slash on the URL matters.
No install needed - the API is just HTTP. skills/call/SKILL.md is the full
reference; a model with a shell tool can place calls straight from it.
No shell on your side? Assistants with their own computer (e.g. Meta Muse) integrate from this repo directly: paste the repo URL into the chat and ask it to use PlaceCall for phone calls. If it offers secure credential storage for the API key, use that - never paste the key into the chat itself.
Known to work this way: Meta Muse, OpenClaw (DeepSeek backend). Hermes needs
the MCP route above rather than the skill. If you are an agent building this
integration, send X-Client-Surface: <your-platform> on every request so we
can see which surfaces need love.
Installing the skill does not need a key; placing calls does. Keys are self-serve - no need to contact anyone:
Then set the key in your shell:
Quick way - just export it for the current session:
export PLACECALL_API_KEY="<your key>"
Nicer way - save it once (no echo to screen, 600 perms) and load it per session:
mkdir -p ~/.codex
read -rsp "PLACECALL_API_KEY: " KEY; echo
printf 'export PLACECALL_API_KEY=%q\n' "$KEY" > ~/.codex/placecall.env
chmod 600 ~/.codex/placecall.env
unset KEY
# then, in any new shell where you want to place calls:
source ~/.codex/placecall.env
No shell at all? A desktop app never sees your shell environment, so neither
of the above reaches it. Put the key in the env block of
~/.claude/settings.json instead, which survives restarts. See the
Cowork section, which also covers the sandbox domain allowlist you
need there.
Verify (prints your quota, never the key):
curl -s -H "X-API-Key: $PLACECALL_API_KEY" https://api.voygr.tech/users/me
Never commit ~/.codex/placecall.env or paste the key into chat - keep it in the
env var / the 600 file above.
This project was called Callwright until 2026-08, and the repo lived at
voygr-tech/callwright-skill. Two things to know:
install.sh copies the skill rather than
linking it, so an older copy is frozen at whatever it was when you installed -
the rename cannot break it. It also means it will never pick up new skills or
fixes, which is the reason to migrate.install.sh now warns you if it finds one.
rm -rf ~/.claude/skills/callwright ~/.claude/skills/callwright-skill
Then install the plugin above, and re-export your key under its new name:
PLACECALL_API_KEY. The key itself is unchanged - only the variable is renamed,
so no need to reissue anything.If you previously installed a phone-call skill from someone else (e.g.
ai-call-agent), remove or disable that too, for the same reason.
Everything goes in the brief - the bot reads only your brief. Put every detail
in it (what to ask, who you're calling for, names/dates/party size/callback number,
how to wrap up). One endpoint, describe the task, done.
POST /v1/places/suggest, nothing when it returns no cards or is refused.
Both take a refundable hold at request time that is larger than the charge,
so either can return 402 while your balance still looks sufficient for the
charge alone (GET /users/me for your balance; rates and top-ups are
self-serve at https://api.voygr.tech/checkout?src=gh-repo). The free tier
is one shared pot: 250 free calls means 2,500 credits, and suggestions spend
from the same 2,500.completed, the outcome/transcript can populate a moment
after the status flips - poll GET /calls/{id} until outcome_type is
non-null.en, es, fr, de, hi, ru, pt, ja,
it, nl, sr, tr, pl) plus auto (the default, resolves to en).
en is the most reliable; non-English is best-effort.Full reference: skills/call/SKILL.md (Claude Code) · AGENTS.md (Codex).
Live API docs: https://api.voygr.tech/docs - log in with your PlaceCall key (the same one you set as PLACECALL_API_KEY).
Shell
100.0%