# Team Follow Up API Docs > Build with Team Follow Up AI public APIs for agents, calls, contacts, campaigns, and platform configuration. > ## Agent Instructions > Use the public API base URL: https://api.teamfollowup.ai/api. > Authenticate public API requests with Authorization: Bearer YOUR_API_KEY. > Use product-owned terms: agents, calls, campaigns, contacts, phone numbers, billing, and configuration. ## Docs - [Introduction to Team Follow Up APIs](https://docs.teamfollowup.ai/index.md): Build, operate, and monitor Team Follow Up AI workflows through customer-facing APIs. - [Authentication](https://docs.teamfollowup.ai/authentication.md): Authenticate public API requests with bearer API keys. - [MCP action tools](https://docs.teamfollowup.ai/mcp-actions.md): Let AI agents call the TFUAI public API through a scoped remote MCP server. - [Conventions](https://docs.teamfollowup.ai/conventions.md): Authentication, the response envelope, rate limits, and error shapes shared across the API. - [How Team Follow Up works](https://docs.teamfollowup.ai/concepts/how-it-works.md): The whole system in one picture: an agent that talks, and a campaign that decides who to call and when. - [More than a voice agent](https://docs.teamfollowup.ai/concepts/more-than-agent.md): Getting an agent to talk is the easy part. The campaign around it, the whole operation, is what we actually bring. - [Skills for voice AI](https://docs.teamfollowup.ai/concepts/skills-for-voice-ai.md): The worry with voice AI is always the same: can you trust it on a live call? Skills are how we make the answer yes. - [Built around GoHighLevel](https://docs.teamfollowup.ai/concepts/built-on-ghl.md): Today the software is built for GoHighLevel users. Anything beyond that, other CRMs or custom work, is where Done For You comes in. - [What an agent is](https://docs.teamfollowup.ai/agents/overview.md): An agent is the rep who actually makes the calls, every time, without the coffee breaks or the excuses. - [Campaign types and capabilities](https://docs.teamfollowup.ai/agents/agent-types.md): Two choices make an agent: what starts the call, and what the agent can do on it. - [What your agent says](https://docs.teamfollowup.ai/agents/prompt.md): Two things shape every call: the first line the agent opens with, and the instructions that guide the rest. - [How your agent sounds](https://docs.teamfollowup.ai/agents/voice.md): Pick a voice, set the pace, choose the language, and decide the background. Small choices that make the agent sound human. - [What your agent records](https://docs.teamfollowup.ai/agents/outcomes.md): After every call, the agent decides what happened and writes down the useful details. That record is what powers your follow up. - [Skills and tools](https://docs.teamfollowup.ai/skills/overview.md): Your voice agent can carry skills now, the same idea you already use in Claude Code and Codex. It makes calls more reliable, more deterministic, and easy to keep improving. - [The tool library](https://docs.teamfollowup.ai/skills/tool-library.md): The specialized abilities we build and ship. You add one to an agent and set it up. You don't build tools, and that's the point. - [Writing a skill](https://docs.teamfollowup.ai/skills/writing-a-skill.md): Teach your agent a rule in plain English: when it applies, and exactly what to do. No code, no setup. - [What a campaign is](https://docs.teamfollowup.ai/campaigns/overview.md): A campaign turns a list of people into phone calls. It decides who gets called, when, how often, and from what number. - [Who gets called](https://docs.teamfollowup.ai/campaigns/audience.md): People join and leave your call list with labels called tags. One kind of tag opens the door, another kind closes it. - [When and how often you call](https://docs.teamfollowup.ai/campaigns/scheduling.md): Set the hours a campaign can dial, whose clock they run on, and how often it retries. - [The calling window](https://docs.teamfollowup.ai/campaigns/calling-window.md): Set the hours a campaign is allowed to dial, and choose whether leads that arrive after hours wait for the next opening or get left for your team. - [Contact timezone](https://docs.teamfollowup.ai/campaigns/timezones.md): By default a campaign runs on your business timezone. Turn on contact timezone and it uses each lead's own local time for the calling hours, the agent, and any booking. - [The phone number people see](https://docs.teamfollowup.ai/campaigns/phone-numbers.md): The caller ID is the number that shows on a person's phone when you call. It has a big effect on whether they pick up. - [Connect your own Twilio numbers](https://docs.teamfollowup.ai/campaigns/connect-your-twilio.md): Use phone numbers you already own in Twilio as caller IDs for your agents. You are never billed here for them. - [What happens after the call](https://docs.teamfollowup.ai/campaigns/after-the-call.md): Every call ends in an outcome. You decide what the campaign does next: send a text, add a label, book, or try again. - [Going live](https://docs.teamfollowup.ai/campaigns/going-live.md): Every campaign starts paused. Here's how to check it, test it, and turn it on safely. - [Team Follow Up API Reference](https://docs.teamfollowup.ai/api-reference/overview.md): Reference for Team Follow Up APIs: base URL, authentication, response conventions, and launched public modules. - [List agent types](https://docs.teamfollowup.ai/api-reference/agents/list-agent-types.md): List the three campaign types available when creating an agent, each with the starting capabilities you may pick from. This module intentionally excludes chat endpoints. - [List agents](https://docs.teamfollowup.ai/api-reference/agents/list-agents.md): List agents visible to the caller. Agency admins see only agents in their agency. Use cursor pagination for integrations that sync agents repeatedly. - [Create agent](https://docs.teamfollowup.ai/api-reference/agents/create-agent.md): Create a voice agent for one project from a campaign type and one or more starting capabilities. The type decides what triggers the call; the capabilities decide what the agent can do on it, and each one installs its tool, post-call fields, workflow route, and required configuration together. Option… - [Get agent](https://docs.teamfollowup.ai/api-reference/agents/get-agent.md): Retrieve one agent and its editable configuration, including prompt, voice, post-call fields, and bound campaign context. - [Update agent](https://docs.teamfollowup.ai/api-reference/agents/update-agent.md): Patch editable agent fields. Omitted fields remain unchanged. The server applies name, prompt, begin-message, voice, audio, language, and post-call field updates, then returns the updated agent. Only the properties listed below are editable: an agent's type is fixed at creation, and its capabilities… - [Delete agent](https://docs.teamfollowup.ai/api-reference/agents/delete-agent.md): Soft-delete the complete Agent aggregate, including its campaign state and master-project bindings. External voice resources are preserved for recovery. - [Clone agent](https://docs.teamfollowup.ai/api-reference/agents/clone-agent.md): Clone a campaign reached through an existing agent into another project. `campaign` mode duplicates the campaign and workflow only. `everything` mode also provisions a new voice agent cloned from the source config. - [Create test call](https://docs.teamfollowup.ai/api-reference/agents/create-test-call.md): Place a real test call for an agent. The account must have billing enabled and available balance. Customer role: `agency_admin`. - [List agent skills](https://docs.teamfollowup.ai/api-reference/skills-and-tools/list-agent-skills.md): Return every skill with its editable content and current version. Use the digest endpoint when you only need to choose a skill. - [List agent skill digest](https://docs.teamfollowup.ai/api-reference/skills-and-tools/list-agent-skill-digest.md): Return compact skill identity and trigger details without large playbook bodies. - [List agent capability library](https://docs.teamfollowup.ai/api-reference/skills-and-tools/list-agent-capability-library.md): List every supported capability an API client can add, what each capability does, and the fields it requires. Agent-specific status shows whether each capability is available, already represented by a configured skill, or already installed as a tool. - [Create an agent skill](https://docs.teamfollowup.ai/api-reference/skills-and-tools/create-an-agent-skill.md): Add one capability without replacing or removing existing skills. The instructions type creates a custom plain-English skill. The other types add configured platform tools. Supply expectedVersion to reject a write based on stale state. - [Replace all agent skills](https://docs.teamfollowup.ai/api-reference/skills-and-tools/replace-all-agent-skills.md): Replace the entire skills list. Any existing skill omitted from the request is deleted. expectedVersion is required, and an empty list also requires confirmClear: true. Prefer single-skill operations unless you intentionally own the full list. - [Update one agent skill](https://docs.teamfollowup.ai/api-reference/skills-and-tools/update-one-agent-skill.md): Change selected fields on one skill while preserving its id, type, and every other skill. Supply expectedVersion to reject stale writes. - [Delete one agent skill](https://docs.teamfollowup.ai/api-reference/skills-and-tools/delete-one-agent-skill.md): Delete one skill by id without changing any sibling skill. Supply expectedVersion to reject stale writes. - [List installed agent tools](https://docs.teamfollowup.ai/api-reference/skills-and-tools/list-installed-agent-tools.md): Return the safe public inventory of tools this agent can use during a call, including recognized built-ins, tools generated from configured skills, and unknown installed tools. Executable code, URLs, headers, and credentials are excluded. - [Update a tool description](https://docs.teamfollowup.ai/api-reference/skills-and-tools/update-a-tool-description.md): Change only the description of one existing in-call tool. If a skill owns the tool, a later skill save may regenerate its description, so edit the owning skill instead. - [Update campaign](https://docs.teamfollowup.ai/api-reference/agents/update-campaign.md): Update the campaign owned by this agent. - [Get outcome prompts](https://docs.teamfollowup.ai/api-reference/agents/get-outcome-prompts.md): Read the current and default post-call field descriptions for the editable outcome cards. - [Update outcome prompt](https://docs.teamfollowup.ai/api-reference/agents/update-outcome-prompt.md): Set one editable outcome prompt. - [Enroll existing leads](https://docs.teamfollowup.ai/api-reference/agents/enroll-existing-leads.md): Preview or enroll matching contacts into this campaign. - [Create campaign test run](https://docs.teamfollowup.ai/api-reference/agents/create-campaign-test-run.md): Start a test run for this agent's campaign. - [Get campaign test run status](https://docs.teamfollowup.ai/api-reference/agents/get-campaign-test-run-status.md): Retrieve the current campaign test run status. - [Get the campaign workflow](https://docs.teamfollowup.ai/api-reference/campaign-workflows/get-the-campaign-workflow.md): Return the post-call workflow graph for a campaign, or `null` if none is configured. A freshly created campaign has an empty graph (no `nodes`): this graph holds only the actions you add on top of the built-in behaviour. The engine already runs a per-agent-type base pass on every call — auto-applyin… - [Get a per-outcome workflow digest](https://docs.teamfollowup.ai/api-reference/campaign-workflows/get-a-per-outcome-workflow-digest.md): **Start here to understand a workflow.** A compact, human-readable summary of what fires for each outcome, plus the AI-notes toggles and a node count. Read this to understand the graph before editing it. - [Add actions to an outcome](https://docs.teamfollowup.ai/api-reference/campaign-workflows/add-actions-to-an-outcome.md): **The normal way to add steps.** Append one or more nodes to the end of an outcome's action chain. **Prefer this over the whole-graph PUT for ordinary edits.** You describe what should happen; the server derives the node ids, the edge ids, the branch handles and the canvas coordinates, which are the… - [Remove a workflow node](https://docs.teamfollowup.ai/api-reference/campaign-workflows/remove-a-workflow-node.md): **The normal way to delete a step.** Remove one action node from its outcome chain and re-link around it — the node before it is joined to the node after it, so the chain survives. That re-linking is why deleting a node by omitting it from a `PUT` is not the same operation. Branch (`if`) and fan-out… - [Replace the entire workflow](https://docs.teamfollowup.ai/api-reference/campaign-workflows/replace-the-entire-workflow.md): **Only use this when you are authoring the whole graph.** For an ordinary edit reach for `PATCH .../workflow`, `POST .../outcomes/{outcome}/nodes` or `DELETE .../nodes/{nodeId}` — they carry no graph, so they cannot overwrite one. - [Update settings or node contents](https://docs.teamfollowup.ai/api-reference/campaign-workflows/update-settings-or-node-contents.md): **The normal way to change something that already exists.** Change campaign settings, the contents of existing nodes, or both, without sending the graph. **This is the endpoint for ordinary edits** — reword an SMS, point a callback at a different calendar, switch AI notes on. Because the request car… - [List calls](https://docs.teamfollowup.ai/api-reference/calls/list-calls.md): List tenant-scoped call records with filtering, sorting, pagination, and viewer-safe cost fields. Customer roles: `agency_admin`, `project_user`. - [List call filters](https://docs.teamfollowup.ai/api-reference/calls/list-call-filters.md): List tenant-scoped filter values available for the call-history table. Customer roles: `agency_admin`, `project_user`. - [Get call by call id](https://docs.teamfollowup.ai/api-reference/calls/get-call-by-call-id.md): Fetch one tenant-scoped call by its platform call id, including the transcript and recorded fields. Used when another product surface deep-links into a call drawer. Customer roles: `agency_admin`, `project_user`. - [Get call](https://docs.teamfollowup.ai/api-reference/calls/get-call.md): Fetch one tenant-scoped call by call-history row id, including the transcript and recorded fields. Customer roles: `agency_admin`, `project_user`. - [Get analytics summary](https://docs.teamfollowup.ai/api-reference/analytics/get-analytics-summary.md): Returns a minimal, non-billing performance summary for the caller's accessible projects: lead and call volume, appointment/transfer outcomes, and the key conversion and pickup rates. - [Get booking rate by project](https://docs.teamfollowup.ai/api-reference/analytics/get-booking-rate-by-project.md): Returns the booking rate for each project as appointments divided by leads, sorted highest first. Projects with no leads in the window are omitted rather than reported as a zero rate. - [Get transfer rate by project](https://docs.teamfollowup.ai/api-reference/analytics/get-transfer-rate-by-project.md): Returns the live-transfer rate for each project as transfers divided by leads, sorted highest first. Projects with no leads in the window are omitted rather than reported as a zero rate. - [List campaign projects](https://docs.teamfollowup.ai/api-reference/projects/list-campaign-projects.md): List visible projects that can contain campaigns. Customer role: `agency_admin`. - [List projects](https://docs.teamfollowup.ai/api-reference/projects/list-projects.md): List projects visible to the authenticated agency. Agency admins are scoped to their own agency even when query filters are supplied. Customer role: `agency_admin`. - [Get project](https://docs.teamfollowup.ai/api-reference/projects/get-project.md): Fetch a single visible project, including its campaigns and live connection state. Customer role: `agency_admin`. - [Update project](https://docs.teamfollowup.ai/api-reference/projects/update-project.md): Update project settings such as live state, display name, knowledge base, timezone behavior, and calling-window override. Customer role: `agency_admin`. - [Delete project](https://docs.teamfollowup.ai/api-reference/projects/delete-project.md): Disconnect and hide a project from the customer workspace. Customer role: `agency_admin`. - [List project agencies](https://docs.teamfollowup.ai/api-reference/projects/list-project-agencies.md): List agency options available to the caller. Agency admins receive only their own agency. Customer role: `agency_admin`. - [List campaign systems](https://docs.teamfollowup.ai/api-reference/projects/list-campaign-systems.md): List campaign system definitions used by the project campaign editor. Customer role: `agency_admin`. - [List project calendars](https://docs.teamfollowup.ai/api-reference/projects/list-project-calendars.md): List connected calendars for one visible project. Customer role: `agency_admin`. - [Update project campaign](https://docs.teamfollowup.ai/api-reference/projects/update-project-campaign.md): Update a campaign embedded in a project from the project-management surface. Customer role: `agency_admin`. - [Validate project campaign agent](https://docs.teamfollowup.ai/api-reference/projects/validate-project-campaign-agent.md): Validate whether the campaign agent has the fields and variables expected by its selected campaign system. Customer role: `agency_admin`. - [Get pipeline steps](https://docs.teamfollowup.ai/api-reference/power-dialer/get-pipeline-steps.md): Load the visible cadence schedule, step counts, callback count, and parked-lead count for the Power Dialer workspace. Customer roles: `agency_admin`, `project_user`. - [List pipeline leads](https://docs.teamfollowup.ai/api-reference/power-dialer/list-pipeline-leads.md): List leads for one saved cadence step. Customer roles: `agency_admin`, `project_user`. - [List callback leads](https://docs.teamfollowup.ai/api-reference/power-dialer/list-callback-leads.md): List callback leads waiting for their promised callback time. Customer roles: `agency_admin`, `project_user`. - [List parked speed-to-lead leads](https://docs.teamfollowup.ai/api-reference/power-dialer/list-parked-speed-to-lead-leads.md): List speed-to-lead leads waiting for the project call window to open. Customer roles: `agency_admin`, `project_user`. - [Run lead touchpoints now](https://docs.teamfollowup.ai/api-reference/power-dialer/run-lead-touchpoints-now.md): Move selected waiting leads to run on the next dispatcher pass. Only leads in a waiting status are touched. A lead that is mid-dial or already finished is skipped and left out of `count`, without an error. Sending `selectAll` targets the outstanding (missed) backlog, not the leads listed by the pipe… - [Move leads to another step](https://docs.teamfollowup.ai/api-reference/power-dialer/move-leads-to-another-step.md): Move waiting leads to a different step of their schedule. The next call time is recomputed from the target step’s slot in each lead’s own timezone, and any actions still pending on the old step are cleared. Only leads in a waiting status are moved: one that is mid-dial, pinned to a callback, on an a… - [Remove leads from cadence](https://docs.teamfollowup.ai/api-reference/power-dialer/remove-leads-from-cadence.md): Remove selected leads from the Power Dialer cadence. The row is kept for audit and made terminal rather than deleted. Only leads in a waiting status are touched. A lead that is mid-dial or already finished is skipped and left out of `count`, without an error. Sending `selectAll` targets the outstand… - [List campaign schedules](https://docs.teamfollowup.ai/api-reference/power-dialer/list-campaign-schedules.md): List Power Dialer schedules visible to the caller. Optionally restrict the result to one accessible project. Customer roles: `agency_admin`, `project_user`. - [Get campaign schedule](https://docs.teamfollowup.ai/api-reference/power-dialer/get-campaign-schedule.md): Get one Power Dialer schedule visible to the caller. Shared defaults are readable by callers with project access. A private schedule outside the caller tenant is returned as not found. Customer roles: `agency_admin`, `project_user`. - [Update campaign schedule](https://docs.teamfollowup.ai/api-reference/power-dialer/update-campaign-schedule.md): Update a campaign Power Dialer schedule. Include `campaignId` and `locationId` when saving from a campaign-bound workspace. Customer role: `agency_admin`. - [List contacts](https://docs.teamfollowup.ai/api-reference/contacts/list-contacts.md): Authentication required. Intended for customer-facing agency administrators and project users. Results and actions are tenant-scoped to projects visible to the caller. - [List contact filter options](https://docs.teamfollowup.ai/api-reference/contacts/list-contact-filter-options.md): Authentication required. Intended for customer-facing agency administrators and project users. Results and actions are tenant-scoped to projects visible to the caller. - [List contact calls](https://docs.teamfollowup.ai/api-reference/contacts/list-contact-calls.md): Authentication required. Intended for customer-facing agency administrators and project users. Results and actions are tenant-scoped to projects visible to the caller. - [Set contact do-not-call](https://docs.teamfollowup.ai/api-reference/contacts/set-contact-do-not-call.md): Authentication required. Intended for customer-facing agency administrators and project users. Results and actions are tenant-scoped to projects visible to the caller. - [Clear contact do-not-call](https://docs.teamfollowup.ai/api-reference/contacts/clear-contact-do-not-call.md): Authentication required. Intended for customer-facing agency administrators and project users. Results and actions are tenant-scoped to projects visible to the caller. - [Mark contact internal](https://docs.teamfollowup.ai/api-reference/contacts/mark-contact-internal.md): Authentication required. Intended for customer-facing agency administrators and project users. Results and actions are tenant-scoped to projects visible to the caller. - [Clear contact internal mark](https://docs.teamfollowup.ai/api-reference/contacts/clear-contact-internal-mark.md): Authentication required. Intended for customer-facing agency administrators and project users. Results and actions are tenant-scoped to projects visible to the caller. - [List agent phone numbers](https://docs.teamfollowup.ai/api-reference/phone-numbers/list-agent-phone-numbers.md): List agency-owned caller IDs available to an agent context. Allowed customer role: `agency_admin`. - [Search agent phone numbers](https://docs.teamfollowup.ai/api-reference/phone-numbers/search-agent-phone-numbers.md): Search available caller IDs for an agent context before buying, so an operator can choose a specific number. Allowed customer role: `agency_admin`. - [Buy agent phone number](https://docs.teamfollowup.ai/api-reference/phone-numbers/buy-agent-phone-number.md): Buy a new caller ID and attach it to the requested agent context. This is a paid action. Allowed customer role: `agency_admin`. - [Attach agent phone number](https://docs.teamfollowup.ai/api-reference/phone-numbers/attach-agent-phone-number.md): Attach an existing agency-owned caller ID to the requested agent context. No purchase occurs. Allowed customer role: `agency_admin`. - [List phone numbers](https://docs.teamfollowup.ai/api-reference/phone-numbers/list-phone-numbers.md): List the agency phone number pool and the campaigns currently using each caller ID. Allowed customer role: `agency_admin`. - [Buy phone number](https://docs.teamfollowup.ai/api-reference/phone-numbers/buy-phone-number.md): Buy a new caller ID and assign it to a campaign. This is a paid action. Allowed customer role: `agency_admin`. - [Search phone numbers](https://docs.teamfollowup.ai/api-reference/phone-numbers/search-phone-numbers.md): Search available caller IDs before buying, so an operator can choose a specific number. Allowed customer role: `agency_admin`. - [Assign phone number](https://docs.teamfollowup.ai/api-reference/phone-numbers/assign-phone-number.md): Assign an existing agency-owned caller ID to another campaign without removing it from current campaigns. Allowed customer role: `agency_admin`. - [Unassign phone number](https://docs.teamfollowup.ai/api-reference/phone-numbers/unassign-phone-number.md): Remove a caller ID from one campaign. The number stays in the agency pool. Allowed customer role: `agency_admin`. - [Move phone number](https://docs.teamfollowup.ai/api-reference/phone-numbers/move-phone-number.md): Move a caller ID from one campaign to another in a single operation. Allowed customer role: `agency_admin`. - [Release phone number](https://docs.teamfollowup.ai/api-reference/phone-numbers/release-phone-number.md): Release a caller ID from the agency pool after it has been removed from active campaigns. This action is irreversible. Allowed customer role: `agency_admin`. - [List voices](https://docs.teamfollowup.ai/api-reference/voices/list-voices.md): List the curated voices available for agent configuration. Optionally filter by `accent`, `gender`, `region`, or `age`. Use the returned `voiceId` when updating an agent voice; call `GET /voices/{voiceId}` for the full detail record. - [Get voice](https://docs.teamfollowup.ai/api-reference/voices/get-voice.md): Retrieve one voice detail record from the catalogue by id. The detail record includes `region` in addition to the fields returned by the list. - [List agent GHL custom fields](https://docs.teamfollowup.ai/api-reference/ghl/list-agent-ghl-custom-fields.md): List contact-level CRM fields for the project that owns this agent. Customer role: `agency_admin`. - [List agent GHL custom values](https://docs.teamfollowup.ai/api-reference/ghl/list-agent-ghl-custom-values.md): List location-wide CRM values for the project that owns this agent. Customer role: `agency_admin`. - [List location GHL custom fields](https://docs.teamfollowup.ai/api-reference/ghl/list-location-ghl-custom-fields.md): List contact-level CRM fields for a project location. Customer role: `agency_admin`. - [List location GHL custom values](https://docs.teamfollowup.ai/api-reference/ghl/list-location-ghl-custom-values.md): List location-wide CRM values for a project location. Customer role: `agency_admin`. - [Lookup GHL contact](https://docs.teamfollowup.ai/api-reference/ghl/lookup-ghl-contact.md): Look up one CRM contact by phone within the project that owns this agent. Returns `contact: null` when no match is found. Customer role: `agency_admin`. Example request: `GET /api/agent-builder/agents/{id}/ghl-contacts/lookup?phone=%2B14155551234&locationId=loc_9f7a123&campaignId=campaign_speed_to_l… - [List GHL calendars](https://docs.teamfollowup.ai/api-reference/ghl/list-ghl-calendars.md): List calendars for a project location so campaigns can select where appointments are booked. Customer role: `agency_admin`. - [List GHL tags](https://docs.teamfollowup.ai/api-reference/ghl/list-ghl-tags.md): List tags for a project location so campaigns and workflow actions can reuse existing CRM tags. Customer role: `agency_admin`. - [Changelog](https://docs.teamfollowup.ai/changelog.md): Public API changelog for Team Follow Up. ## OpenAPI Specs - [openapi](https://docs.teamfollowup.ai/openapi.yaml)