Calls and texts on the record, and the next calls already queued.
JustCall is a call and meeting tool, and one of the 54 tools hyreflow connects to Claude, ChatGPT and other AI assistants. Through hyreflow, an AI agent can run 17 actions: 13 that look something up and 4 that create or change records. JustCall runs on your own JustCall account: hyreflow charges no credits for it, and JustCall bills you as before.
Your agent reads JustCall call logs, AI transcripts and SMS threads and writes them onto the candidate in your CRM. It can text a candidate from your JustCall number and drop a shortlist straight into a Sales Dialer campaign, so the calling session starts with the list already loaded.
JustCall reads and writes. Calls and texts flow in; the shortlist flows out to the dialer.
With hyreflow connected, you ask for the outcome in plain language and the assistant runs JustCall for you. For example:
In a hyreflow run, JustCall is most often paired with Bullhorn, Lusha, Fathom and Recruit CRM.
the record the call notes belong on
the direct dials worth putting in the dialer
the recorded interviews JustCall does not cover
call and text activity onto the candidate
Through hyreflow, an AI agent can run 17 JustCall actions: 13 that look something up and 4 that create or change records. JustCall runs on your own JustCall account: hyreflow charges no credits for it, and JustCall bills you as before.
| JustCall action | What it does | Cost through hyreflow |
|---|---|---|
| Add campaign contact | Creates or changes a record | no hyreflow credits |
| Create contact | Creates or changes a record | no hyreflow credits |
| Send text | Creates or changes a record | no hyreflow credits |
| Check reply | Looks something up | no hyreflow credits |
| Update contact | Creates or changes a record | no hyreflow credits |
| List calls | Looks something up | no hyreflow credits |
| List calls ai | Looks something up | no hyreflow credits |
| List campaigns | Looks something up | no hyreflow credits |
| List contacts | Looks something up | no hyreflow credits |
| List phone numbers | Looks something up | no hyreflow credits |
| JustCall action | What it does | Cost through hyreflow |
|---|---|---|
| List texts | Looks something up | no hyreflow credits |
| List users | Looks something up | no hyreflow credits |
| Get call | Looks something up | no hyreflow credits |
| Get call ai | Looks something up | no hyreflow credits |
| Get contact | Looks something up | no hyreflow credits |
| Get text | Looks something up | no hyreflow credits |
| Get user | Looks something up | no hyreflow credits |
One credit is priced on the pricing page. The full price list for every tool is in the pricing tables.
Ask for the outcome and your agent composes the run itself. Or start from a skill, a whole pipeline it already knows end to end.
browse all skills →hyreflow ships a written playbook for JustCall, and the agent loads it before the first call. Auth, rate limits, what each call costs, which actions need your approval, and the mistakes worth avoiding. It is the difference between an agent that knows the tool and one that guesses at it.
Read the JustCall docs →HOW in lib/justcall.py. Docs: developer.justcall.io/reference.
https://api.justcall.io/v2.1 · Auth: header Authorization: <api_key>:<api_secret>. Both come from JustCall > your profile > APIs and Webhooks. API access needs JustCall's Team plan or higher.page / per_page; contacts, users and campaigns start at page 0. Max per_page: calls 100, texts 100, contacts 500, users 100, numbers 100, campaigns 50, list_calls_ai 20. A larger per_page is rejected, not trimmed. The next page is signalled by next_page_link.list_calls (filter contact_number, agent_id, from_datetime/to_datetime as YYYY-MM-DD), get_call (fetch_ai_data=true adds AI fields), list_calls_ai, get_call_ai (transcript + summary + action items; needs JustCall's AI add-on).list_texts, get_text, check_reply (latest inbound text from a number, read-only), send_text (from one of your JustCall numbers; body up to 1600 characters; optional schedule_at YYYY-MM-DD HH:mm:ss; restrict_once="Yes" stops this text reaching the same number twice within 24h).list_contacts (contact_number finds one by phone), get_contact, create_contact (contact_number + first_name required), update_contact (find by id or contact_number; notes are [{note}]).list_users (agents and their numbers), get_user, list_phone_numbers (capabilities=sms for numbers that can text).list_campaigns, add_campaign_contact (campaign_id plus exactly one of contact_id or phone_number; optional name, email, custom_fields).Phone numbers are E.164 (+14155550123). These are the only callable methods. There is no REST click-to-call for a human agent: load the list into a Sales Dialer campaign instead.
send_text, add_campaign_contact, create_contact and update_contact write to a live phone system: texts are billed by JustCall and reach real people, and a campaign contact gets dialled. Confirm before bulk; pilot one. The key is shared by the whole workspace, so send_text goes out from whichever justcall_number you pass: confirm the sending number with the user, it may be a colleague's line. A write that fails with "the write may have applied" may already have texted or queued the person: check list_texts, list_contacts or the campaign before resending, never resend blind.
Read source: pull list_calls / get_call_ai and list_texts → write them as candidate activity into the ATS. Write target: send_text for a candidate nudge, add_campaign_contact to queue a shortlist for a calling session.
Call via the CLI: hyreflow tools execute justcall <method> --payload '{...}' (preview with --dry-run; hyreflow tools get justcall <method> returns the live contract + cost). Base: https://api.justcall.io/v2.1. Only the methods listed below are callable.
add_campaign_contact(campaign_id: int, *, contact_id: int | None = None, phone_number: str | None = None, **fields) -> Any — POST /sales_dialer/campaigns/contact — queue a contact for dialing in a campaign (contact_id or phone_number).check_reply(contact_number: str, justcall_number: str | None = None) -> Any — POST /texts/checkreply — the latest inbound SMS from a contact (read-only).create_contact(payload: dict) -> Any — POST /contacts — create a contact (contact_number and first_name required).{"contact_number":"+14155550123","first_name":"Jane","last_name":"Doe","company":"Acme"}get_call(call_id: str, **params) -> Any — GET /calls/{id} — one call by numeric id or call SID (fetch_ai_data=true adds AI fields).get_call_ai(call_id: int, *, fetch_transcription: bool = True, fetch_summary: bool = True, platform: str | None = None) -> Any — GET /calls_ai/{id} — transcript, summary, action items and sentiment for a call.get_contact(contact_id: int) -> Anyget_text(text_id: int) -> Anyget_user(user_id: int) -> Anylist_calls(**params) -> Any — GET /calls — call log, filter by contact_number, agent_id, from_datetime/to_datetime (per_page max 100).list_calls_ai(**params) -> Any — GET /calls_ai — AI summaries for calls, filter by phone_number or dates (per_page max 20).list_campaigns(**params) -> Any — GET /sales_dialer/campaigns — Sales Dialer campaigns (page 0 is first; per_page max 50).list_contacts(**params) -> Any — GET /contacts — contacts, contact_number finds one by phone (page 0 is first; per_page max 500).list_phone_numbers(**params) -> Any — GET /phone-numbers — the account's JustCall numbers, filter by capabilities=sms (per_page max 100).list_texts(**params) -> Any — GET /texts — SMS history, filter by contact_number, justcall_number, sms_direction (per_page max 100).list_users(**params) -> Any — GET /users — agents with their numbers and availability (per_page max 100).send_text(justcall_number: str, contact_number: str, body: str, *, schedule_at: str | None = None, restrict_once: str | None = None, media_url: str | None = None) -> Any — POST /texts/new — send an SMS from a JustCall number (E.164 numbers; schedule_at 'YYYY-MM-DD HH:mm:ss').update_contact(payload: dict) -> Any — PUT /contacts — update a contact found by id or contact_number (notes are [{note}]).{"contact_number":"+14155550123","company":"Acme"}Yes. hyreflow is a connector for Claude, ChatGPT and other AI assistants. Once hyreflow is connected, you ask for the outcome in plain language and the assistant calls JustCall for you. hyreflow exposes 17 JustCall actions this way.
Yes. JustCall runs on your own JustCall account. You connect it to hyreflow once, hyreflow charges no credits for the calls, and JustCall bills you as before.
JustCall runs on your own JustCall account: hyreflow charges no credits for it, and JustCall bills you as before.
Add the hyreflow MCP server to your assistant and sign in. hyreflow calls the JustCall API directly and exposes its actions as tools the assistant can run, so there is no separate JustCall server to install.
Connect hyreflow to Claude or ChatGPT and ask for the outcome. It reads the playbook above before it makes a single call.