> ## Documentation Index
> Fetch the complete documentation index at: https://docs.teamfollowup.ai/llms.txt
> Use this file to discover all available pages before exploring further.

> ## 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, campaigns, projects (GoHighLevel sub-accounts), contacts, calls, outcomes, skills, cadences, phone numbers.
> Scope requests by locationId rather than projectName.
> Read the guide linked from each API reference group before recommending an endpoint.

# Glossary

> Every term and field used in these docs, one line each, grouped the way the API is. When a value in a response is unfamiliar, look it up here.

One line per term, grouped by module. Dashboard names are in bold, API names in
backticks. Each group links to the page that explains it in full.

## Agents

Explained in [What an agent is](/agents/overview) and
[Campaign types and capabilities](/agents/agent-types).

* **Agent**: the voice that takes the calls. Prompt, voice, skills, and what it records.
* `id`, `agentId`: the agent id. The same value under two names.
* `agentType`: the campaign type the agent was created as: `outreach` (Outbound), `inbound` (Inbound) or `appointment` (Reminder). `null` when none can be resolved.
* `capabilityIds`, `capabilities`: what the agent may do on a call: `appointment_booking`, `live_transfer`, `add_tag`. Sent on create, read on the campaign.
* `templateId`, `templates`: on List agent types, the starting capability sets for a type.
* `isActive`, `active`: the agent's live state. Get agent spells it `isActive`, List agents `active`.
* `hasCustomPrompt`: whether the agent has its own prompt rather than the one it was created with.
* `platformFieldNames`: post-call fields the platform manages. Always kept on update.
* `partialFailures`: downstream syncs that did not apply after an otherwise successful update.
* `config.llm`: `generalPrompt` (the instructions) and `beginMessage` (the opening line).
* `config.voice`: `voiceId`, `speed`, `temperature`, `ambientSound` (`coffee-shop`, `convention-hall`, `summer-outdoor`, `mountain-outdoor`, `static-noise`, `call-center`), `ambientSoundVolume`.
* `config.language`: `language`, and `denoisingMode` (`no-denoise`, `noise-cancellation`, `noise-and-background-speech-cancellation`).
* `config.interaction`: `enableBackchannel`, `backchannelFrequency`, `backchannelWords`, `fillerWords`, `responsiveness`.
* `config.callScreening.callPurpose`: the reason the agent gives a call-screening assistant.
* `config.analysis`: the outcomes and fields the agent records. See [Outcomes](#outcomes).
* `sort` on List agents: `updatedAt.desc` or `createdAt.desc`.
* `cascade`: on Delete agent, must be `agent_and_campaign`.
* `mode` on Clone agent: `campaign` copies the campaign and workflow onto the same agent; `everything` also clones the agent.
* **Test call**: a real call from the campaign's number to `toNumber`, from `fromNumber`. Returns `callId` and `callStatus`.
* **Web test session**: a browser conversation. Returns `accessToken`, `callId`, `agentName`.
* **Campaign test run**: one contact pushed through the real campaign entry. Tracked by intent id with `consumed`, `events`, `triggerKind`, `placementFailure`.

## Outcomes

Explained in [What your agent records](/agents/outcomes).

* **Outcome**, **disposition**: what a call ended with. Workflow constants: `SUCCESS` (`BOOKED`), `CONFIRMED`, `RESCHEDULE`, `TRANSFER`, `FAILED_TRANSFER`, `TAG_APPLIED`, `CALLBACK`, `INFO_ONLY` (`FOLLOWUP_REQUESTED`), `HUMAN_NEEDED`, `KILL_SWITCH`, `VOICEMAIL` (`NO_ACTION`).
* `analysis.outcomes`: your wording for the four describable outcomes, keyed `opt_out`, `callback`, `human_needed`, `asked_for_info`.
* **Outcome prompts**: the same four, read and edited one at a time, with `current` beside the default.
* **AI-generated field**: a fact the agent extracts. `analysis.fields[]` with `key`, `type` (`text`, `choice`, `number`, `boolean`), `prompt`, `options`, `examples`, `extractWhen`, `required`.
* **Signal**: a `boolean` field a workflow can branch on.
* `analysis.locked`: fields owned by an installed capability. Reword, never delete.
* `disposition` on a call or contact: `type`, `label`, `color`, `tag`.
* **Automatic tags**: `tfu_ai_booked`, `tfu_ai_cancelled`, `tfu_ai_live_transfer`, `tfu_ai_standby`, `tfu_ai_human_needed`, `tfu_ai_kill_switch`, `tfu_ai_failed_transfer`.

## Skills and tools

Explained in [Skills and tools](/skills/overview) and [The tool library](/skills/tool-library).

* **Skill**: a rule the agent reaches for at one moment. `type: instructions`, `name` (up to 120 characters), `whenToUse` (up to 300), `instructions`, `enabled`.
* **Tool**: an ability that runs real code. Types `smart_service_area` (`zips`, `outOfAreaResponse`), `live_transfer`, `add_tag`, `check_tag` (one tag, `checkingMessage`), `appointment_booking`.
* **Library**: everything an agent could carry. Items have `kind` (`skill`, `tool`), `status` (`available`, `added_as_skill`, `installed_tool`), `canAdd`, and `fields` whose `type` is `string` or `boolean`.
* **Digest**: one line per skill.
* **Tools inventory**: installed tools with `freshness` (`live`, `cached`) and an `editableDescription`.
* `version`, `expectedVersion`: the concurrency token on the skill set.

## Campaigns

Explained in [What a campaign is](/campaigns/overview), [Who gets called](/campaigns/audience),
[Speed to lead and power dialer](/campaigns/dispatch-modes), [Calling window](/campaigns/calling-window)
and [Contact timezone](/campaigns/timezones).

* **Campaign**: who the agent calls, when, how, from which number. One per agent.
* `campaignId`, `name`, `description`, `locationId`, `projectName`.
* `active`: live or paused. Alias `isActive`.
* `activeTags`: entry tags. A contact who gets one joins the campaign.
* `inactiveTags`: exit tags. A contact who gets one leaves it.
* `callIfDnd`: dial contacts whose GoHighLevel record has Do Not Disturb on.
* `agentType` on a campaign or project: the legacy template id, one of `appointment_confirmation`, `appointment_booking`, `live_transfer`, `live_transfer_and_tag`, `live_transfer_and_booking`, `add_tag`, `inbound_receptionist`. Also `system`: provenance, not behaviour.
* `dialing`: the dispatch mode, `s2l` (speed to lead), `pd` (power dialer) or `s2l_pd` (both). Retired, read-only: `reactivation`, `confirmation`. Alias `type`.
* **Speed to lead**: call the moment the entry tag lands. **Power dialer**: work the lead through a cadence.
* `callingWindow`: `days` (ISO weekdays, Monday `1` to Sunday `7`), `start`, `end` (`HH:MM`), `tz`. An array for split days.
* `useWindowTimezone`: read the window in its own `tz` rather than the sub-account's.
* `multipleTimezoneCheck`: judge the window, the agent's sense of time and bookings in each contact's own timezone. On the campaign or as a project default.
* `dropOutsideWindow`: drop a lead that arrives outside the window instead of parking it.
* **Parked lead**: a lead held until the window opens.
* **AI After Hours**: the AI calls only in the gaps around your human team's hours. Dashboard only.
* `fromNumbers`: the caller IDs the campaign dials from.
* `masterCampaignEnabled`, `master`: see [Master agent](#master-agent).
* `firstLiveAt`, `firstLiveAtSource`: when the campaign first went live, by `activation` or `first_dial`.
* `config.calendarId`, `config.collectAddress`: booking settings.
* `config.transferNumber`, `config.transferToAssignedUser`, `config.advancedRouting`, `config.transferRoutes` (`id`, `number`, `condition`), `config.transferMessage`: transfer settings.
* `config.s2lDelaySeconds`, `config.s2lDelayHaltOnReply`, `config.s2lDoubleDial`, `config.callNowSkipTags`: speed-to-lead settings. `config.s2lDelayMinutes` is the superseded whole-minute form.
* `config.cadenceId`: the cadence a power-dialer campaign uses.
* `config.callbackDoubleDial`: double dial on the agent's return call.
* `config.voicemail`, `config.voicemailMessage`, `config.voicemailDetectionPrompt`: leave one voicemail per cadence touch, on its last dial. Callbacks and inbound calls never leave one, and a step's own `call.voicemail` replaces the message on that step.
* **Campaign name**: `name` follows the agent's name. A different name is set back to the agent's within about 15 minutes, unless the campaign is running an active split test or another campaign in the project already has that name.
* `config.appliedTag`, `config.confirmedTag`, `config.fallbackTag`: tags the agent applies for its capabilities.
* `config.testFormFields`: stand-in lead fields a test call uses.
* **Backfill**: enrol contacts already carrying the entry tag. `dryRun`, `limit`; returns `matched`, `truncated`, `preview`, `skipped` (`noPhone`, `existingQueue`), `enrolled`, `statuses`.

## Campaign workflows

Explained in [Campaign workflows](/campaign-workflows/overview).

* **Workflow**: the graph that runs after each call. `nodes` keyed by id, `edges` (`source`, `target`, `sourceHandle`), `dispositionEntries` keyed by outcome, `campaignConfig`, `advisories`, `version`.
* **Node types**: `if`, `switch`, `add-tag`, `remove-tag`, `set-field`, `move-stage`, `add-note`, `send-sms`, `send-email`, `book-appointment`, `trigger`.
* **Exits**: `then` and `else` on `if`; case ids and `default` on `switch`.
* **Condition operators**: `is_true`, `is_false`, `is_set`, `is_empty`, `equals`, `not_equals`, `contains`, `starts_with`, `in`, `gt`, `gte`, `lt`, `lte`.
* **Advisories**: `node_incomplete`, `unsafe_context`, `unreachable`, `unknown_outcome`.
* `campaignConfig`: `callbackMode` (`ai`, `human`), `humanCallbackCalendarId`, `aiNotes`, `noteLanguage`, `convertedTag`.
* `expectedVersion`, `allowRemovals`: the write guards.

## Calls

Explained in [Call records](/calls/overview).

* **Call record**: one call. `id` (record id), `callId` (voice platform id), `date`, `dateTime`, `leadName`, `phoneNumber`, `direction` (`inbound`, `outbound`), `status`, `duration`, `agent`, `callSummary`, `disposition`, `recordingUrl`, `cost`, `agentType`, `campaignId`, `campaignName`, `projectName`, `locationId`.
* **Detail**: adds `transcript`, `segments` (each with a `speaker` of `agent` or `lead`), `fields`, and `transcriptSource` (`stored`, `live`, `unavailable`).
* `sort`: `dateTime.desc`, `dateTime.asc`, `status.desc`, `status.asc`, `duration.desc`, `duration.asc`, `projectName.desc`, `projectName.asc`.
* `excludeReviewed`, `durationMin`, `durationMax`, `dateFromUTC`, `dateToUTC`: filters.
* `pagination`: `page`, `limit`, `total`, `totalPages`.

## Contacts

Explained in [Contacts and leads](/contacts/overview).

* **Contact**: one person, by phone number, with their calling history. `id`, `contactId`, `phoneNumber`, `leadName`, `projectName`, `locationId`, `dateAdded`, `callCount`, `disposition`, `nextScheduledCall` (`nextCallTime`, `cadenceStep`), `isInternal`.
* **Outcome type** on a contact: `appointment`, `callBack`, `liveTransfer`, `failedTransfer`, `killSwitch`, `tagged`.
* `dispositionSummary`: counts of each outcome type for one contact.
* **Do-not-call flag**: your project-wide "never call this person".
* **Internal contact**: your own test lead, excluded from performance figures. `internal` filter: `all`, `only`, `exclude`.
* `sortBy`: `leadName`, `phoneNumber`, `projectName`, `dateAdded`, `callCount`. `sortOrder`: `asc`, `desc`.
* `search`, `locationIds`, `projects`, `masterCampaignId`, `agentVariantId`: filters.

## Analytics

Explained in [Metrics and how they are calculated](/analytics/overview).

* **Lead rates** divide by `totalLeads`. **Conversion rates** divide by conversations, calls over 30 seconds.
* Counts: `totalLeads`, `totalCalls`, `totalAppointments`, `totalCallbacks`, `totalTransfers`, `totalFailedTransfers`, `attemptedTransfers`, `killSwitch`, `avgCallDuration`, `callsPerLead`.
* Rates: `pickupRate`, `conversationRate`, `conversationToPickupRate`, `bookingRate`, `transferRate`, `transferSuccessRate`, `appointmentConversionRate`, `transferConversionRate`, `combinedConversionRate`.
* `window`: the inclusive calendar days actually used.
* `cached`, `queryTime`, `generatedAt`: server metadata. Do not build on them.
* Per-project rows: `project`, `leads`, `appointments`, `bookingRate`, `transfers`, `transferRate`, filtered by `agency`, `projects`, `excludeProjects`.

## Billing

Explained in [Balances, spend and sub-account wallets](/billing/overview).

* Summary sections: `balance`, `autoRecharge`, `subscription`, `pendingPurchase`, `spendThisMonth`, `subAccounts`, `pendingCredits`. `unavailable` names any that could not load.
* `attention`: `code`, `severity`, `message`. Severities: `ACTION_REQUIRED`, `WARNING`, `INFO`.
* Transaction types: `PURCHASE`, `BONUS`, `SUB_ACCOUNT_TOP_UP`, `MINUTES_RETURNED`, `CALL_USAGE`, `PHONE_NUMBER`, `CO_AUTHOR`.
* `walletEffect`: `ADD`, `DEDUCT`, `NONE`. `cashFlow`: `PAID_BY_YOU`, `PAID_TO_YOU`, `NONE`.
* Usage: `callCostUSD` (what calls cost you), `billedToClientsUSD` (what rebilled sub-accounts were charged), `phoneNumbersUSD`, `coAuthorUSD`, `totalCostUSD`. `groupBy`: `sub_account`, `day`.
* Sub-account wallet `status`: `ACTIVE`, `LOW_BALANCE`, `IN_DEBT`, `DEPLETED`. `visibility`: `ENABLED`, `DISABLED`.
* Sub-account auto-recharge: `thresholdUSD`, `rechargeAmountUSD`, both in dollars.
* Documents: `scope` (`platform`, `sub_accounts`), `kind` (`INVOICE`, `RECEIPT`), `truncated`.
* `window`: `from`, `to`, `days`, whole UTC days.
* Changing billing: `billing:write` for settings, `billing:charge` to charge a card (needs `Idempotency-Key`, not over MCP). Plans: `SILVER`, `GOLD`, `DIAMOND`.
* Purchase `status`: `PAID`, `PROCESSING`, `PENDING_APPROVAL`. Charge `status`: `SUCCEEDED`, or `CREDIT_PENDING` when the card was charged and the minutes have not landed yet. `rebillingLeftOn`: the charge's outcome is unknown, so rebilling stayed on.
* Change errors: `STRIPE_NOT_CONNECTED`, `CAPABILITY_NOT_AVAILABLE`, `REBILLING_OFF`, `NO_USABLE_CARD`, `PAYMENT_METHOD_SELECTION_REQUIRED`, `USABLE_DEFAULT_PAYMENT_METHOD_REQUIRED`, `PROJECT_RATE_NEEDS_CONFIRMATION`, `PENDING_CREDITS_EXIST`, `SUB_ACCOUNT_WALLET_REQUIRED`, `THRESHOLD_FIXED_FOR_SELF_SERVE`, `SUB_ACCOUNT_CHANGED_DURING_WRITE`, `CREDIT_GUARD_PARTIALLY_APPLIED`, `IDEMPOTENCY_KEY_REQUIRED`, `IDEMPOTENCY_KEY_INVALID`, `IDEMPOTENCY_KEY_REUSED`, `IDEMPOTENCY_IN_PROGRESS`, `IDEMPOTENCY_OUTCOME_UNKNOWN`, `PAYMENT_RECONCILIATION_REQUIRED`.

## Power dialer

Explained in [Cadences, steps and the queue](/power-dialer/overview).

* **Cadence**: the follow-up schedule. `cadenceName`, `isDefault`, `locationIds`, `campaignIds`, `activeDays`, `active`, `stepCount`, `schedule[]`, `mode` (`appointment_reminder` for appointment campaigns).
* **Step**: one entry in `schedule[]`. Shapes: wait (`offsetMinutes`), clock time (`day`, `hour`, `minute`, `period` `AM` or `PM`), reminder (`minutesBeforeAppt`). Plus `label`, `doubleDial`, `call` (`enabled`, `openingMessage`, `screeningPurpose`, `voicemail`, `voicemailMessage`), `additionalActions[]`.
* **Additional action**: `type` (`sms`, `email`, `add-tag`, `move-stage`), `body` or `snippetId`, `subject`, `tags`, `pipelineId`, `stageId`, `delaySeconds`, `jitterSeconds`.
* **Update guards**: `deletions[]` with a `strategy` of `advance` or `remove`, `stepOrder`, `confirmReorder`, `allowEmpty`.
* **Queue**: where every lead is waiting. Each lead has `queueId`, `cadenceStep`, `callStatus`, `nextCallTime`, `live`, `callback`, `pipeline` (`v1`, `v2`).
* **Run now**, **move** (`targetStep`, zero-based), **remove**: act on waiting leads by `queueId` or `selectAll`. Skips come back in `skipped` with a reason.
* **Callback leads**, **parked speed-to-lead leads**: two views of the queue.

## Phone numbers

Explained in [Phone numbers and caller ID](/phone-numbers/overview).

* **Pool**: every number the agency owns. Each has `phoneNumber`, `pretty`, `source` (`customer-twilio` and `custom` are yours; anything else was bought here), `monthlyChargeUSD`, `campaigns[]`.
* **Search**: `place`, `areaCode`, `countryCode` (`US`, `CA`), `contains`, `tollFree`. Matches carry a `country`. Unavailable `reason`: `unknown_place`, `no_inventory`, `out_of_coverage`.
* **Buy**, **attach**, **assign**, **unassign**, **move**, **release** (`released`, `releaseFailed`).
* **Caller ID**: the number the lead sees. Local numbers get answered more.
* **Bring your own carrier**: numbers imported from your Twilio account. See [Connect your own Twilio numbers](/campaigns/connect-your-twilio).

## Voices

Explained in [Voices](/voices/overview).

* **Voice list**: every voice an agent can speak with. Each has `voiceId`, `voiceName`, `gender` (`male`, `female`, or empty), `accent`, `age`, `previewAudioUrl`, and a `source`: `own` (your agency added it), `shared` (another agency added it) or `curated` (the catalogue).
* **Voice detail**: adds `region` and `isCustom` (`true` for a voice outside the curated catalogue).
* `degraded`: on Get voice, the provider could not describe a voice from your list.
* **Voice library**: the voices your agency added. Each has `providerVoiceId`, `displayName` (your label), `addedAt` and `voiceIds` (the ids that select it on an agent).
* `used`, `limit`, `remaining`: your plan's voice allowance. `limit` and `remaining` are empty when there is no limit.
* **Voice search**: a `query`; each hit has `providerVoiceId`, `name`, `description`.
* **Removing a voice**: the preview returns `agentCount`, `agentNames`, `fallbackVoiceId`. The removal returns `reassignedAgents` (agents moved to the default voice) and `incompleteAgents` (agents that could not be moved).
* `references.voiceId`: sent with `VOICE_ALREADY_SHARED`, the voice to select instead of adding it.

## Split testing

Explained in [Agent split tests](/split-testing/overview).

* **Split test**: two to five variants of one agent in one campaign. `status` (`active`, `ended`), `revision`, `primaryAgentId`, `variants[]`, `sync` (`status` of `healthy` or `error`, and `failedAt`, when the failure was recorded).
* **Variant**: one version of the agent. `agentId`, `name`, `sequence`, `weight` (1 to 100 when live, totalling 100 across the live ones), `status` (`active`, `removed`), `splitDraft`, `addedAt`, `removedAt` (when it was removed, empty while active), `isPrimary` (`true` for the campaign's own agent).
* `customName`: a read-only flag, `true` once a variant has been given a name of its own through Rename split variant. The primary never gets it.
* **Draft variant**: a member excluded from the cycle. `splitDraft` is `true` and `weight` is `0`, so it takes no calls while staying testable and in step with the campaign. A live variant covers calls to its leads until it is included again. Set a weight of `0` to exclude, any weight from 1 to include.
* **Primary variant**: the original agent. Cannot be removed, and cannot be excluded.
* `agentVariantId`: the filter that scopes analytics, calls and contacts to one variant, with `campaignId`.
* `idempotentReplay`: set when an `Idempotency-Key` matched an earlier add.

## Master agent

Explained in [Master Agent](/master-agent/overview).

* **Master agent**, **master campaign**: one campaign mirrored into a child campaign per linked project.
* `masterCampaignEnabled`: the switch on the campaign.
* `master`: `enabled`, `masterCampaignId`, `projects[]`, `rescan` (`rescanned`, `failed`, `errors`).
* **Linked project** entry: `role` (`parent`, `child`), `status`, `syncVersion`, `syncedVersion`, `lastError`, `bindingScanStatus`, `bindingScanMatchedCount`, `bindingScanMissingCount`, `bindingScanError`.
* **Binding**: an asset resolved by name in a child sub-account, such as a calendar or pipeline stage.
* `masterCampaignId`: the filter that reads across every child at once.

## Projects

Explained in [Agencies, projects and sub-accounts](/concepts/projects).

* **Agency**: your account. `agencyName`, `agencyId`, `niche`, `agencyType`.
* **Project**, **sub-account**: one GoHighLevel location. `id` (record id), `locationId`, `companyId`, `projectName`, `businessName`, `businessNameOverridden`, `timezone`, `crm` (`ghl`).
* `status`: `live`, `stopped`, `disconnected`. `active`: `false` parks the project and frees a plan slot. `installed`, `uninstalledAt`.
* `callbacksHandledByHuman`, `multipleTimezoneCheck`, `useWindowTimezone`, `callingWindowOverride`, `knowledgeBase`, `campaigns[]`, `ghl` (live location data).
* **System**: a legacy template with `id`, `letter`, `name`, `description`, `promptVars`, `metadataVars`, `dynamicVars`, `postCallFields`, `dispositions`, `sideSignals`.
* **Validation**: `ok`, `error`, `system`, `agentName`, `missing`, `present`, `extra`.

## GoHighLevel

Explained in [GoHighLevel resources](/ghl/overview).

* **Custom field**: `id`, `name`, `fieldKey` (such as `contact.what_service`), `placeholder`, `dataType`.
* **Custom value**: `id`, `name`, `fieldKey` (the merge tag), `placeholder`, `value`.
* **Calendar**: `id`, `name`, `calendarType`, `active`. **Tag**: `id`, `name`.
* **Contact lookup**: by phone, `contact: null` when none.
* Connection errors: `GHL_NOT_CONNECTED`, `SUBACCOUNT_DISCONNECTED`, `REAUTH_REQUIRED`.

## Everywhere

Explained in [Conventions](/conventions). Every operation these terms appear in
is listed in the [API reference](/api-reference/overview).

* `locationId`: the id to scope on. `projectName`: a label.
* `Idempotency-Key`: replay-safe header on four operations.
* `version`, `expectedVersion`, `revision`: concurrency tokens.
* `RateLimit-Limit`, `RateLimit-Remaining`, `RateLimit-Reset`: the headers to build on.
* Error codes: `Unauthorized`, `InsufficientScope`, `Forbidden`, `FORBIDDEN`, `AccessDenied`, `VALIDATION`, `BadRequest`, `NotFound`, `NOT_FOUND`, `CONFLICT`, `IN_USE`, `SYNC_FAILED`, `VOICE_ALLOWANCE`, `VOICE_CAPACITY`, `VOICE_ALREADY_SHARED`, `VoiceProviderUnavailable`, `PROVIDER_UNAVAILABLE`, `TooManyRequests`, `RateLimited`, `InternalError`.
