Use CallForMe in n8n, Zapier, and Make
Short answer: Use the REST API at https://callforme.tel/v1 with an Authorization: Bearer cfm_ header, using a key from your account page. POST /calls with a webhook_url, and the finished call arrives at that URL with its answers, so the workflow needs no polling loop. n8n's AI Agent can also use the MCP URL through its MCP Client Tool.
Automations don't have a person in the loop to open a setup link, so set up your account first. Connect CallForMe in any chat agent and place one call (that's where you add $5), then create a cfm_ key on the account page and store it as a credential in your tool. Check your balance with GET /account.
n8n
With an AI Agent: add an MCP Client Tool sub-node to your AI Agent node. Endpoint: https://callforme.tel/mcp, transport HTTP Streamable, authentication Bearer Auth with your cfm_ key. The node also offers OAuth2 with dynamic client registration, which signs you in with one click like any other agent; use the key when the workflow runs unattended.
Without an agent: use two HTTP Request nodes.
- POST
https://callforme.tel/v1/calls, headerAuthorization: Bearer cfm_your_key, JSON body:
{
"phone": "+12145552961",
"business_name": "Lakeside Print & Copy",
"goal": "Ask if order #4411 is ready for pickup and their closing time today",
"questions": ["Is order #4411 ready?", "What time do you close today?"],
"on_behalf_of": "Jordan Park"
}
- To skip the loop, add
"webhook_url"with the production URL of an n8n Webhook node in a second workflow: the finished call arrives there. Or GEThttps://callforme.tel/v1/calls/{{$json.call_id}}?wait=30in a loop untilstatusisended. Readanswersandoutcome.
Zapier
Two Zaps, no delays or loops:
- Zap 1, start the call. Action: Webhooks by Zapier, Custom Request, method POST, URL
https://callforme.tel/v1/calls, headersAuthorization: Bearer cfm_your_keyandContent-Type: application/json, with the JSON body above plus"webhook_url"set to Zap 2's hook URL. - Zap 2, get the result. Trigger: Webhooks by Zapier, Catch Hook. Each finished call arrives with
data.answersanddata.outcome.summary. Pass them to Sheets, Slack, or email.
Make
- Scenario 1: HTTP, Make a request: POST
https://callforme.tel/v1/calls, headerAuthorization: Bearer cfm_your_key, body type raw JSON, with"webhook_url"set to scenario 2's webhook address. - Scenario 2: Webhooks, Custom webhook as the trigger. Map
data.answersanddata.outcome.summaryinto the next module.
Without a webhook
Poll instead: GET https://callforme.tel/v1/calls/<call_id>?wait=30 until status is ended. ?wait=30 returns as soon as something changes.
Questions during the call
A workflow can't think on its feet, so give the call everything it needs up front in details, and set constraints for anything it must not agree to. If the business still asks something, pending_question appears in the GET response. You can answer with POST /v1/calls/{id}/answer and {"answer": "..."}, or let it pass: after about 45 seconds the assistant tells the business the customer will follow up on that point, and the question shows up in unanswered_questions.
Better yet, answer the usual questions ahead of time with if_asked (for example "if_asked": "Any pickup time after 4pm is fine. The order is under Jordan Park."), so the call never has to wait on your workflow.
Results
answers is a list in the same order as your questions, each { "question": ..., "answer": ... }, with null for anything the call didn't get. outcome.type (booked, quoted, answered, cancelled, changed, refused_ai, no_help, voicemail, needs_you or other) is handy for routing: send quoted rows to a sheet and needs_you to Slack. If your account has a signed-in email, the result is also emailed to you when the call ends.
Full endpoint list in the REST API docs.
Try it
Test your workflow against a free demo line first. Use this body in the POST step; it needs no key:
{
"phone": "+14697707412",
"business_name": "Maple Street Pizza",
"goal": "Ask how long a large pepperoni takes for pickup and what it costs.",
"questions": ["Pickup time", "Price"]
}
Maple Street Pizza is fictional, so nothing real is ordered. Once the answers land where you want them, switch to a real number and your key. A typical real workflow: every weekday at 10am, call the pharmacy from a sheet, ask if the prescription is ready, and post the answer to Slack.
Related
Questions
Can a workflow use a setup link?
Not well, since nobody is there to open it. Create a key on the account page at callforme.tel/account first and store it as a credential.
How long should I wait before checking?
A quick question call usually ends within a few minutes. Hold waits can run up to the 30 minute limit. GET with ?wait=30 returns early as soon as something changes.
Is there a webhook when the call ends?
Yes. Add webhook_url to the request, for example a Zapier Catch Hook or an n8n Webhook node URL, and the finished call is POSTed there with its answers and summary, signed so you can check it came from CallForMe. Polling GET /v1/calls/{id}?wait=30 still works too.
Can I bulk-call a list?
You can loop over a list of businesses, but calls must be to businesses and follow the terms: no telemarketing or sales calls, and at most 3 calls per number per day.
Add CallForMe to your agent
One URL for any MCP agent. Connecting asks for nothing.
Install steps for your agentTry a free demo callPricing
On your phone? Email yourself the setup steps
One email with the link, for when you're at your computer. Nothing else.