Skip to content

CRM records MCP tools

Use this reference to find a tool and its inputs. Connect an MCP client before calling tools. Tool visibility depends on discovery and permissions.

For actions that send messages, spend credits, delete data, or start execution, review the intended records and confirm the action before proceeding. Obtain IDs from a prior result; do not invent them. A registered tool does not guarantee that its supporting service is available in every organization.

g8_add_to_list

Add contacts to an existing list, by id or by explicit records. Source modes (exactly one required): - contact_ids: list[int] - attach existing CRM contacts (free). - rows: list[dict] - import explicit records into the list (free; no enrichment credits). Accepted fields per row: first_name, last_name, work_email, job_title, company_domain, seniority_level, linkedin_url, city, state, country, personal_emails, direct_phone, mobile_phone, job_department. Searching by filters and merging into an existing list is not supported here in v1 - use g8_create_list(filters=…) to create a new list instead, or call g8_find_contacts and forward the result as rows. When rows is supplied, call with dry_run=True first to get a ConfirmationPreview, then re-call with dry_run=False to execute. Args: list_id: Target list id (from g8_create_list or g8_get_lists). contact_ids: Optional CRM contact ids to attach to the list. rows: Optional list of record dicts to import into the list. dry_run: When True, return a ConfirmationPreview instead of executing.

Inputs

InputRequiredTypeDescription
list_idYesintegerSee the schema below for constraints and defaults.
contact_idsNoarray / nullSee the schema below for constraints and defaults.
rowsNoarray / nullSee the schema below for constraints and defaults.
dry_runNobooleanSee the schema below for constraints and defaults.
Complete input schema
{
"properties": {
"list_id": {
"title": "List Id",
"type": "integer"
},
"contact_ids": {
"anyOf": [
{
"items": {
"type": "integer"
},
"type": "array"
},
{
"type": "null"
}
],
"default": null,
"title": "Contact Ids"
},
"rows": {
"anyOf": [
{
"items": {
"additionalProperties": true,
"type": "object"
},
"type": "array"
},
{
"type": "null"
}
],
"default": null,
"title": "Rows"
},
"dry_run": {
"default": false,
"title": "Dry Run",
"type": "boolean"
}
},
"required": [
"list_id"
],
"title": "g8_add_to_listArguments",
"type": "object"
}

g8_add_to_sequence

Add contacts to an outbound sequence for automated outreach. IMPORTANT: This enrolls real contacts into an active sequence that will send emails/messages. Always confirm with the user before calling this tool. Recommended flow: call with dry_run=True first to render a confirmation widget, then again with dry_run=False after the user confirms. Use g8_list_sequences to find available sequence IDs. Contacts must exist in your CRM with a contact_id. If they came from prospecting (g8_lookup_person / g8_find_contacts), create them first with g8_create_contact. Args: sequence_id: Sequence ID (from g8_list_sequences) contact_ids: List of contact IDs to enroll list_id: Contact list ID the contacts belong to dry_run: When True, return a confirmation preview instead of executing.

Inputs

InputRequiredTypeDescription
sequence_idYesstringSee the schema below for constraints and defaults.
contact_idsYesarraySee the schema below for constraints and defaults.
list_idYesintegerSee the schema below for constraints and defaults.
dry_runNobooleanSee the schema below for constraints and defaults.
Complete input schema
{
"properties": {
"sequence_id": {
"title": "Sequence Id",
"type": "string"
},
"contact_ids": {
"items": {
"type": "integer"
},
"title": "Contact Ids",
"type": "array"
},
"list_id": {
"title": "List Id",
"type": "integer"
},
"dry_run": {
"default": false,
"title": "Dry Run",
"type": "boolean"
}
},
"required": [
"sequence_id",
"contact_ids",
"list_id"
],
"title": "g8_add_to_sequenceArguments",
"type": "object"
}

g8_analytics_get_campaign_visitors

Read one graph8 analytics report. Uses the current organization and existing API permissions. report selects which report to read. Defaults to campaign-visitors, which is the Campaign Visitors report (click steps, email-link engagement and CTR, top contacts) this tool has always returned. Available reports: Campaign visitors: campaign-visitors Acquisition (where traffic comes from): acquisition/campaigns, acquisition/channels, acquisition/channels/trend, acquisition/referrals, acquisition/search, acquisition/social, acquisition/sources Audience (who the visitors are): audience/behavior, audience/demographics, audience/geo, audience/geo/cities, audience/languages, audience/overview, audience/technology, audience/trend Behavior (what they do on site): behavior/events, behavior/exit-pages, behavior/landing-pages, behavior/page-metrics, behavior/pages Conversions (forms, goals, funnel): conversions/forms, conversions/forms/analysis, conversions/forms/trend, conversions/funnel, conversions/goals, conversions/goals/trend, conversions/rate Dialer (call volume, quality, grading): dialer/grading/search, dialer/leaderboard, dialer/leaderboard/sdr, dialer/performance, dialer/quality, dialer/quality/leaderboard Engagement (depth and time on site): engagement/by-campaign, engagement/by-channel, engagement/by-landing-page, engagement/depth-distribution, engagement/overview, engagement/time-distribution, engagement/trend Marketing (campaigns, content, outbound bridge): marketing/campaigns, marketing/content, marketing/content/by-landing, marketing/outbound-bridge, marketing/outbound-bridge/by-campaign, marketing/outbound-bridge/by-channel, marketing/outbound-bridge/by-landing-page, marketing/outbound-bridge/top-sources, marketing/outbound-bridge/trend, marketing/overview Realtime (live visitors): realtime, realtime/locations, realtime/pages, realtime/sources SDR (rep activity and leaderboards): sdr/ai-agents/summary, sdr/detail, sdr/leaderboard, sdr/summary, sdr/trends Every report is read-only and runs on the analytics:read scope. Give it a window with days (rolling), start_date/end_date, or date_from/date_to, whichever the report accepts; the API applies its own default when none is sent. Arguments a report does not declare are ignored by the API, so send only the ones the report uses. sdr_email is required for sdr/detail and dialer/leaderboard/sdr, where it is part of the URL. path is required for behavior/page-metrics. Everything else is optional. API: GET /analytics/campaign-visitors (and 59 sibling report operations under /analytics; see report).

Inputs

InputRequiredTypeDescription
reportNostringWhich analytics report to read. Defaults to campaign-visitors, the report this tool returned before the rest of the /analytics surface was folded in.
daysNointeger / nullRolling ‘last N days from today’, 1-365. Ignored when an explicit window is supplied.
start_dateNostring / nullWindow start (inclusive), YYYY-MM-DD. If omitted, derived from days.
end_dateNostring / nullWindow end (inclusive), YYYY-MM-DD. If omitted, today.
date_fromNostring / nullAnchored window start (YYYY-MM-DD) for the web analytics reports. Send with date_to.
date_toNostring / nullAnchored window end (YYYY-MM-DD) for the web analytics reports. Send with date_from.
limitNointeger / nullRow cap. The per-report maximum differs (50 to 500); the API rejects an over-large value.
sort_byNostring / nullSort key. The accepted values differ per report; see the report’s API documentation.
sort_orderNostring / nullSort order: asc or desc. Defaults to desc.
granularityNostring / nullAggregation period for sdr/trends: day or week.
periodNostring / nullTime period preset for dialer/leaderboard when no dates are given: today, week or month.
sdr_emailNostring / nullSDR email address. REQUIRED for sdr/detail and dialer/leaderboard/sdr, where it is part of the URL; an optional filter on the other dialer reports.
campaign_idNostring / nullCampaign ID filter for dialer/grading/search.
pathNostring / nullExact context_page_path to roll up. REQUIRED for behavior/page-metrics.
pageNointeger / nullPage number for dialer/grading/search, 1-based.
page_sizeNointeger / nullResults per page for dialer/grading/search, 1-100.
min_scoreNointeger / nullMinimum overall grading score, 0-40, for dialer/grading/search.
max_scoreNointeger / nullMaximum overall grading score, 0-40, for dialer/grading/search.
include_contactsNoboolean / nullcampaign-visitors only: include the Top contacts table (contact name + email, so PII). Set false to omit it entirely for a privacy-lean response.
Complete input schema
{
"properties": {
"report": {
"default": "campaign-visitors",
"description": "Which analytics report to read. Defaults to campaign-visitors, the report this tool returned before the rest of the /analytics surface was folded in.",
"enum": [
"campaign-visitors",
"acquisition/campaigns",
"acquisition/channels",
"acquisition/channels/trend",
"acquisition/referrals",
"acquisition/search",
"acquisition/social",
"acquisition/sources",
"audience/behavior",
"audience/demographics",
"audience/geo",
"audience/geo/cities",
"audience/languages",
"audience/overview",
"audience/technology",
"audience/trend",
"behavior/events",
"behavior/exit-pages",
"behavior/landing-pages",
"behavior/page-metrics",
"behavior/pages",
"conversions/forms",
"conversions/forms/analysis",
"conversions/forms/trend",
"conversions/funnel",
"conversions/goals",
"conversions/goals/trend",
"conversions/rate",
"dialer/grading/search",
"dialer/leaderboard",
"dialer/leaderboard/sdr",
"dialer/performance",
"dialer/quality",
"dialer/quality/leaderboard",
"engagement/by-campaign",
"engagement/by-channel",
"engagement/by-landing-page",
"engagement/depth-distribution",
"engagement/overview",
"engagement/time-distribution",
"engagement/trend",
"marketing/campaigns",
"marketing/content",
"marketing/content/by-landing",
"marketing/outbound-bridge",
"marketing/outbound-bridge/by-campaign",
"marketing/outbound-bridge/by-channel",
"marketing/outbound-bridge/by-landing-page",
"marketing/outbound-bridge/top-sources",
"marketing/outbound-bridge/trend",
"marketing/overview",
"realtime",
"realtime/locations",
"realtime/pages",
"realtime/sources",
"sdr/ai-agents/summary",
"sdr/detail",
"sdr/leaderboard",
"sdr/summary",
"sdr/trends"
],
"title": "Report",
"type": "string"
},
"days": {
"anyOf": [
{
"maximum": 365,
"minimum": 1,
"type": "integer"
},
{
"type": "null"
}
],
"default": null,
"description": "Rolling 'last N days from today', 1-365. Ignored when an explicit window is supplied.",
"title": "Days"
},
"start_date": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"description": "Window start (inclusive), YYYY-MM-DD. If omitted, derived from `days`.",
"title": "Start Date"
},
"end_date": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"description": "Window end (inclusive), YYYY-MM-DD. If omitted, today.",
"title": "End Date"
},
"date_from": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"description": "Anchored window start (YYYY-MM-DD) for the web analytics reports. Send with date_to.",
"title": "Date From"
},
"date_to": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"description": "Anchored window end (YYYY-MM-DD) for the web analytics reports. Send with date_from.",
"title": "Date To"
},
"limit": {
"anyOf": [
{
"minimum": 1,
"type": "integer"
},
{
"type": "null"
}
],
"default": null,
"description": "Row cap. The per-report maximum differs (50 to 500); the API rejects an over-large value.",
"title": "Limit"
},
"sort_by": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"description": "Sort key. The accepted values differ per report; see the report's API documentation.",
"title": "Sort By"
},
"sort_order": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"description": "Sort order: asc or desc. Defaults to desc.",
"title": "Sort Order"
},
"granularity": {
"anyOf": [
{
"enum": [
"day",
"week"
],
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"description": "Aggregation period for sdr/trends: day or week.",
"title": "Granularity"
},
"period": {
"anyOf": [
{
"enum": [
"today",
"week",
"month"
],
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"description": "Time period preset for dialer/leaderboard when no dates are given: today, week or month.",
"title": "Period"
},
"sdr_email": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"description": "SDR email address. REQUIRED for sdr/detail and dialer/leaderboard/sdr, where it is part of the URL; an optional filter on the other dialer reports.",
"title": "Sdr Email"
},
"campaign_id": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"description": "Campaign ID filter for dialer/grading/search.",
"title": "Campaign Id"
},
"path": {
"anyOf": [
{
"maxLength": 1000,
"minLength": 1,
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"description": "Exact context_page_path to roll up. REQUIRED for behavior/page-metrics.",
"title": "Path"
},
"page": {
"anyOf": [
{
"minimum": 1,
"type": "integer"
},
{
"type": "null"
}
],
"default": null,
"description": "Page number for dialer/grading/search, 1-based.",
"title": "Page"
},
"page_size": {
"anyOf": [
{
"maximum": 100,
"minimum": 1,
"type": "integer"
},
{
"type": "null"
}
],
"default": null,
"description": "Results per page for dialer/grading/search, 1-100.",
"title": "Page Size"
},
"min_score": {
"anyOf": [
{
"maximum": 40,
"minimum": 0,
"type": "integer"
},
{
"type": "null"
}
],
"default": null,
"description": "Minimum overall grading score, 0-40, for dialer/grading/search.",
"title": "Min Score"
},
"max_score": {
"anyOf": [
{
"maximum": 40,
"minimum": 0,
"type": "integer"
},
{
"type": "null"
}
],
"default": null,
"description": "Maximum overall grading score, 0-40, for dialer/grading/search.",
"title": "Max Score"
},
"include_contacts": {
"anyOf": [
{
"type": "boolean"
},
{
"type": "null"
}
],
"default": null,
"description": "campaign-visitors only: include the Top contacts table (contact name + email, so PII). Set false to omit it entirely for a privacy-lean response.",
"title": "Include Contacts"
}
},
"title": "g8_analytics_get_campaign_visitorsArguments",
"type": "object"
}

g8_app_apply_manifest

Apply a graph8.app.yaml to an app: publish its objects, store its build config. The objects half goes through the same publish path as g8_app_publish_schema, so it is idempotent on content and the tenant fan-out is failure-isolated. Refused when the manifest’s app.slug names a different app than app_id, because a copied file would otherwise publish one app’s schema into another app’s tenants. A block the manifest omits is left alone rather than cleared, so applying a frontend-only manifest does not erase a stored backend. Args: app_id: The app id to apply this manifest to manifest: The full graph8.app.yaml document as text

Inputs

InputRequiredTypeDescription
app_idYesstringSee the schema below for constraints and defaults.
manifestYesstringSee the schema below for constraints and defaults.
Complete input schema
{
"properties": {
"app_id": {
"title": "App Id",
"type": "string"
},
"manifest": {
"title": "Manifest",
"type": "string"
}
},
"required": [
"app_id",
"manifest"
],
"title": "g8_app_apply_manifestArguments",
"type": "object"
}

g8_app_claim_app_domain

Claim App Domain. Uses the current organization and existing API permissions. App-builder enablement and ownership gates apply. Review the intended change and set confirm=true to execute; otherwise no API request is sent. API: POST /apps/{app_id}/domains

Inputs

InputRequiredTypeDescription
app_idYesstringSee the schema below for constraints and defaults.
bodyYes#/$defs/ApiClaimDomainRequestSee the schema below for constraints and defaults.
confirmNobooleanSee the schema below for constraints and defaults.
Complete input schema
{
"$defs": {
"ApiClaimDomainRequest": {
"additionalProperties": false,
"properties": {
"hostname": {
"description": "The hostname to serve this app on. Normalized server-side: case, a trailing dot and unicode all resolve to one canonical form.",
"maxLength": 253,
"title": "Hostname",
"type": "string"
}
},
"required": [
"hostname"
],
"title": "ApiClaimDomainRequest",
"type": "object"
}
},
"properties": {
"app_id": {
"title": "App Id",
"type": "string"
},
"body": {
"$ref": "#/$defs/ApiClaimDomainRequest"
},
"confirm": {
"default": false,
"title": "Confirm",
"type": "boolean"
}
},
"required": [
"app_id",
"body"
],
"title": "g8_app_claim_app_domainArguments",
"type": "object"
}

g8_app_clear_app_limit

Clear App Limit. Uses the current organization and existing API permissions. App-builder enablement and ownership gates apply. Review the intended change and set confirm=true to execute; otherwise no API request is sent. API: DELETE /apps/{app_id}/limit

Inputs

InputRequiredTypeDescription
app_idYesstringSee the schema below for constraints and defaults.
confirmNobooleanSee the schema below for constraints and defaults.
Complete input schema
{
"properties": {
"app_id": {
"title": "App Id",
"type": "string"
},
"confirm": {
"default": false,
"title": "Confirm",
"type": "boolean"
}
},
"required": [
"app_id"
],
"title": "g8_app_clear_app_limitArguments",
"type": "object"
}

g8_app_clear_app_source

Clear App Source. Uses the current organization and existing API permissions. App-builder enablement and ownership gates apply. Review the intended change and set confirm=true to execute; otherwise no API request is sent. API: DELETE /apps/{app_id}/source

Inputs

InputRequiredTypeDescription
app_idYesstringSee the schema below for constraints and defaults.
confirmNobooleanSee the schema below for constraints and defaults.
Complete input schema
{
"properties": {
"app_id": {
"title": "App Id",
"type": "string"
},
"confirm": {
"default": false,
"title": "Confirm",
"type": "boolean"
}
},
"required": [
"app_id"
],
"title": "g8_app_clear_app_sourceArguments",
"type": "object"
}

g8_app_create

Create an app you are building on graph8. An app is software your customers install into their own workspace, acting on their data with their consent. Distinct from your own workspace’s data: an app declares its own objects. Requires your organization to be enabled as an app builder. Until then this answers 403 builder_not_allowlisted. Args: name: Human-readable name, shown to customers installing it slug: Short identifier, unique within your organization (e.g. invoicer)

Inputs

InputRequiredTypeDescription
nameYesstringSee the schema below for constraints and defaults.
slugYesstringSee the schema below for constraints and defaults.
Complete input schema
{
"properties": {
"name": {
"title": "Name",
"type": "string"
},
"slug": {
"title": "Slug",
"type": "string"
}
},
"required": [
"name",
"slug"
],
"title": "g8_app_createArguments",
"type": "object"
}

g8_app_create_app_credential

Create App Credential. Uses the current organization and existing API permissions. App-builder enablement and ownership gates apply. Review the intended change and set confirm=true to execute; otherwise no API request is sent. API: POST /apps/{app_id}/credentials

Inputs

InputRequiredTypeDescription
app_idYesstringSee the schema below for constraints and defaults.
bodyYes#/$defs/ApiCreateCredentialRequestSee the schema below for constraints and defaults.
confirmNobooleanSee the schema below for constraints and defaults.
Complete input schema
{
"$defs": {
"ApiCreateCredentialRequest": {
"additionalProperties": false,
"properties": {
"client_org_id": {
"description": "The client organization this credential acts for. It must already have a consented installation of the app - a credential is bound to one tenant and cannot be pointed at another later.",
"title": "Client Org Id",
"type": "string"
}
},
"required": [
"client_org_id"
],
"title": "ApiCreateCredentialRequest",
"type": "object"
}
},
"properties": {
"app_id": {
"title": "App Id",
"type": "string"
},
"body": {
"$ref": "#/$defs/ApiCreateCredentialRequest"
},
"confirm": {
"default": false,
"title": "Confirm",
"type": "boolean"
}
},
"required": [
"app_id",
"body"
],
"title": "g8_app_create_app_credentialArguments",
"type": "object"
}

g8_app_delete_app_secret

Delete App Secret. Uses the current organization and existing API permissions. App-builder enablement and ownership gates apply. Review the intended change and set confirm=true to execute; otherwise no API request is sent. API: DELETE /apps/{app_id}/secrets/{secret_key}

Inputs

InputRequiredTypeDescription
app_idYesstringSee the schema below for constraints and defaults.
secret_keyYesstringSee the schema below for constraints and defaults.
confirmNobooleanSee the schema below for constraints and defaults.
Complete input schema
{
"properties": {
"app_id": {
"title": "App Id",
"type": "string"
},
"secret_key": {
"title": "Secret Key",
"type": "string"
},
"confirm": {
"default": false,
"title": "Confirm",
"type": "boolean"
}
},
"required": [
"app_id",
"secret_key"
],
"title": "g8_app_delete_app_secretArguments",
"type": "object"
}

g8_app_deploy

Start a deployment of this app’s runtime. A deployment begins queued. Promotion is a separate, deliberate step, so a build that passes its checks does not become live by default. Args: app_id: The app to deploy source_ref: REQUIRED. An immutable commit SHA, not a branch name. A branch moves, so a deployment recorded against one cannot answer “what is running right now” a week later - which is the question a rollback has to answer. schema_version_id: Schema version this build expects. Pin it so a rollback restores the matching schema, not merely the matching image.

Inputs

InputRequiredTypeDescription
app_idYesstringSee the schema below for constraints and defaults.
source_refYesstringSee the schema below for constraints and defaults.
schema_version_idNostring / nullSee the schema below for constraints and defaults.
Complete input schema
{
"properties": {
"app_id": {
"title": "App Id",
"type": "string"
},
"source_ref": {
"title": "Source Ref",
"type": "string"
},
"schema_version_id": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"title": "Schema Version Id"
}
},
"required": [
"app_id",
"source_ref"
],
"title": "g8_app_deployArguments",
"type": "object"
}

g8_app_get_active_deployment

Get Active Deployment. Uses the current organization and existing API permissions. App-builder enablement and ownership gates apply. API: GET /apps/{app_id}/deployments/active

Inputs

InputRequiredTypeDescription
app_idYesstringSee the schema below for constraints and defaults.
Complete input schema
{
"properties": {
"app_id": {
"title": "App Id",
"type": "string"
}
},
"required": [
"app_id"
],
"title": "g8_app_get_active_deploymentArguments",
"type": "object"
}

g8_app_get_app_limit

Get App Limit. Uses the current organization and existing API permissions. App-builder enablement and ownership gates apply. API: GET /apps/{app_id}/limit

Inputs

InputRequiredTypeDescription
app_idYesstringSee the schema below for constraints and defaults.
Complete input schema
{
"properties": {
"app_id": {
"title": "App Id",
"type": "string"
}
},
"required": [
"app_id"
],
"title": "g8_app_get_app_limitArguments",
"type": "object"
}

g8_app_get_app_logs

Get App Logs. Uses the current organization and existing API permissions. App-builder enablement and ownership gates apply. API: GET /apps/{app_id}/logs

Inputs

InputRequiredTypeDescription
app_idYesstringSee the schema below for constraints and defaults.
tail_linesNointeger / nullLines per replica, newest last.
Complete input schema
{
"properties": {
"app_id": {
"title": "App Id",
"type": "string"
},
"tail_lines": {
"anyOf": [
{
"maximum": 2000,
"minimum": 1,
"type": "integer"
},
{
"type": "null"
}
],
"default": null,
"description": "Lines per replica, newest last.",
"title": "Tail Lines"
}
},
"required": [
"app_id"
],
"title": "g8_app_get_app_logsArguments",
"type": "object"
}

g8_app_get_app_runtime

Get App Runtime. Uses the current organization and existing API permissions. App-builder enablement and ownership gates apply. API: GET /apps/{app_id}/runtime

Inputs

InputRequiredTypeDescription
app_idYesstringSee the schema below for constraints and defaults.
Complete input schema
{
"properties": {
"app_id": {
"title": "App Id",
"type": "string"
}
},
"required": [
"app_id"
],
"title": "g8_app_get_app_runtimeArguments",
"type": "object"
}

g8_app_get_app_usage

Get App Usage. Uses the current organization and existing API permissions. App-builder enablement and ownership gates apply. API: GET /apps/{app_id}/usage

Inputs

InputRequiredTypeDescription
app_idYesstringSee the schema below for constraints and defaults.
periodNostring / nullCalendar month YYYY-MM. Defaults to the current month.
Complete input schema
{
"properties": {
"app_id": {
"title": "App Id",
"type": "string"
},
"period": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"description": "Calendar month `YYYY-MM`. Defaults to the current month.",
"title": "Period"
}
},
"required": [
"app_id"
],
"title": "g8_app_get_app_usageArguments",
"type": "object"
}

g8_app_get_deployment

Get Deployment. Uses the current organization and existing API permissions. App-builder enablement and ownership gates apply. API: GET /apps/{app_id}/deployments/{deployment_id}

Inputs

InputRequiredTypeDescription
app_idYesstringSee the schema below for constraints and defaults.
deployment_idYesstringSee the schema below for constraints and defaults.
Complete input schema
{
"properties": {
"app_id": {
"title": "App Id",
"type": "string"
},
"deployment_id": {
"title": "Deployment Id",
"type": "string"
}
},
"required": [
"app_id",
"deployment_id"
],
"title": "g8_app_get_deploymentArguments",
"type": "object"
}

g8_app_get_deployment_logs

Get Deployment Logs. Uses the current organization and existing API permissions. App-builder enablement and ownership gates apply. API: GET /apps/{app_id}/deployments/{deployment_id}/logs

Inputs

InputRequiredTypeDescription
app_idYesstringSee the schema below for constraints and defaults.
deployment_idYesstringSee the schema below for constraints and defaults.
tail_linesNointeger / nullLines per build step, newest last.
Complete input schema
{
"properties": {
"app_id": {
"title": "App Id",
"type": "string"
},
"deployment_id": {
"title": "Deployment Id",
"type": "string"
},
"tail_lines": {
"anyOf": [
{
"maximum": 2000,
"minimum": 1,
"type": "integer"
},
{
"type": "null"
}
],
"default": null,
"description": "Lines per build step, newest last.",
"title": "Tail Lines"
}
},
"required": [
"app_id",
"deployment_id"
],
"title": "g8_app_get_deployment_logsArguments",
"type": "object"
}

g8_app_get_installed_app

Get Installed App. Uses the current organization and existing API permissions. API: GET /installed-apps/{app_id}

Inputs

InputRequiredTypeDescription
app_idYesstringSee the schema below for constraints and defaults.
Complete input schema
{
"properties": {
"app_id": {
"title": "App Id",
"type": "string"
}
},
"required": [
"app_id"
],
"title": "g8_app_get_installed_appArguments",
"type": "object"
}

g8_app_install

Install an app into a client organization. The install starts unconsented. A tenant receives no object definitions until it consents, which is the security boundary rather than a filter. Args: app_id: The app to install client_org_id: The organization installing it

Inputs

InputRequiredTypeDescription
app_idYesstringSee the schema below for constraints and defaults.
client_org_idYesstringSee the schema below for constraints and defaults.
Complete input schema
{
"properties": {
"app_id": {
"title": "App Id",
"type": "string"
},
"client_org_id": {
"title": "Client Org Id",
"type": "string"
}
},
"required": [
"app_id",
"client_org_id"
],
"title": "g8_app_installArguments",
"type": "object"
}

g8_app_list

List the apps your organization is building, newest first.

Inputs

InputRequiredTypeDescription
NoneNoNo user-supplied inputs.
Complete input schema
{
"properties": {},
"title": "g8_app_listArguments",
"type": "object"
}

g8_app_list_app_credentials

List App Credentials. Uses the current organization and existing API permissions. App-builder enablement and ownership gates apply. API: GET /apps/{app_id}/credentials

Inputs

InputRequiredTypeDescription
app_idYesstringSee the schema below for constraints and defaults.
Complete input schema
{
"properties": {
"app_id": {
"title": "App Id",
"type": "string"
}
},
"required": [
"app_id"
],
"title": "g8_app_list_app_credentialsArguments",
"type": "object"
}

g8_app_list_app_deployments

List App Deployments. Uses the current organization and existing API permissions. App-builder enablement and ownership gates apply. API: GET /apps/{app_id}/deployments

Inputs

InputRequiredTypeDescription
app_idYesstringSee the schema below for constraints and defaults.
Complete input schema
{
"properties": {
"app_id": {
"title": "App Id",
"type": "string"
}
},
"required": [
"app_id"
],
"title": "g8_app_list_app_deploymentsArguments",
"type": "object"
}

g8_app_list_app_domains

List App Domains. Uses the current organization and existing API permissions. App-builder enablement and ownership gates apply. API: GET /apps/{app_id}/domains

Inputs

InputRequiredTypeDescription
app_idYesstringSee the schema below for constraints and defaults.
Complete input schema
{
"properties": {
"app_id": {
"title": "App Id",
"type": "string"
}
},
"required": [
"app_id"
],
"title": "g8_app_list_app_domainsArguments",
"type": "object"
}

g8_app_list_app_installs

List App Installs. Uses the current organization and existing API permissions. App-builder enablement and ownership gates apply. API: GET /apps/{app_id}/installs

Inputs

InputRequiredTypeDescription
app_idYesstringSee the schema below for constraints and defaults.
Complete input schema
{
"properties": {
"app_id": {
"title": "App Id",
"type": "string"
}
},
"required": [
"app_id"
],
"title": "g8_app_list_app_installsArguments",
"type": "object"
}

g8_app_list_app_secrets

List App Secrets. Uses the current organization and existing API permissions. App-builder enablement and ownership gates apply. API: GET /apps/{app_id}/secrets

Inputs

InputRequiredTypeDescription
app_idYesstringSee the schema below for constraints and defaults.
Complete input schema
{
"properties": {
"app_id": {
"title": "App Id",
"type": "string"
}
},
"required": [
"app_id"
],
"title": "g8_app_list_app_secretsArguments",
"type": "object"
}

g8_app_list_installed_apps

List Installed Apps. Uses the current organization and existing API permissions. API: GET /installed-apps

Inputs

InputRequiredTypeDescription
NoneNoNo user-supplied inputs.
Complete input schema
{
"properties": {},
"title": "g8_app_list_installed_appsArguments",
"type": "object"
}

g8_app_list_schema_versions

List this app’s published schema versions, oldest first. Args: app_id: The app id

Inputs

InputRequiredTypeDescription
app_idYesstringSee the schema below for constraints and defaults.
Complete input schema
{
"properties": {
"app_id": {
"title": "App Id",
"type": "string"
}
},
"required": [
"app_id"
],
"title": "g8_app_list_schema_versionsArguments",
"type": "object"
}

g8_app_promote

Promote a deployment to live. Separate from deploying on purpose: promotion is what customers see, and it should be a decision rather than a side effect of a build finishing. Args: app_id: The app deployment_id: The deployment to promote (e.g. ddep_…) image_digest: REQUIRED. The built image digest being promoted, from g8_app_status. Recorded so a rollback targets an artifact rather than a rebuild - a rebuild of the same ref is not necessarily the same image.

Inputs

InputRequiredTypeDescription
app_idYesstringSee the schema below for constraints and defaults.
deployment_idYesstringSee the schema below for constraints and defaults.
image_digestYesstringSee the schema below for constraints and defaults.
Complete input schema
{
"properties": {
"app_id": {
"title": "App Id",
"type": "string"
},
"deployment_id": {
"title": "Deployment Id",
"type": "string"
},
"image_digest": {
"title": "Image Digest",
"type": "string"
}
},
"required": [
"app_id",
"deployment_id",
"image_digest"
],
"title": "g8_app_promoteArguments",
"type": "object"
}

g8_app_publish_schema

Publish this app’s object schema and materialize it in every consented tenant. Idempotent on the content: republishing an identical schema resolves to the existing version rather than writing to every tenant again. The fan-out is failure-isolated, so one unreachable tenant does not fail the publish or stop the others. Only tenants that have CONSENTED receive anything. A pending or revoked install gets nothing. Args: app_id: The app id objects: Declared objects. Each needs slug, singular_noun, plural_noun and attributes; each attribute needs slug, title and type. Publishing an empty list is refused, because it would archive every object the app has ever declared.

Inputs

InputRequiredTypeDescription
app_idYesstringSee the schema below for constraints and defaults.
objectsYesarraySee the schema below for constraints and defaults.
Complete input schema
{
"properties": {
"app_id": {
"title": "App Id",
"type": "string"
},
"objects": {
"items": {
"additionalProperties": true,
"type": "object"
},
"title": "Objects",
"type": "array"
}
},
"required": [
"app_id",
"objects"
],
"title": "g8_app_publish_schemaArguments",
"type": "object"
}

g8_app_put_app_secret

Put App Secret. Uses the current organization and existing API permissions. App-builder enablement and ownership gates apply. Review the intended change and set confirm=true to execute; otherwise no API request is sent. API: PUT /apps/{app_id}/secrets/{secret_key}

Inputs

InputRequiredTypeDescription
app_idYesstringSee the schema below for constraints and defaults.
secret_keyYesstringSee the schema below for constraints and defaults.
bodyYes#/$defs/ApiPutAppSecretRequestSee the schema below for constraints and defaults.
confirmNobooleanSee the schema below for constraints and defaults.
Complete input schema
{
"$defs": {
"ApiPutAppSecretRequest": {
"additionalProperties": false,
"properties": {
"provider_ref": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"description": "Secret-manager PATH for the value. Never the value itself.",
"title": "Provider Ref"
}
},
"title": "ApiPutAppSecretRequest",
"type": "object"
}
},
"properties": {
"app_id": {
"title": "App Id",
"type": "string"
},
"secret_key": {
"title": "Secret Key",
"type": "string"
},
"body": {
"$ref": "#/$defs/ApiPutAppSecretRequest"
},
"confirm": {
"default": false,
"title": "Confirm",
"type": "boolean"
}
},
"required": [
"app_id",
"secret_key",
"body"
],
"title": "g8_app_put_app_secretArguments",
"type": "object"
}

g8_app_release_app_domain

Release App Domain. Uses the current organization and existing API permissions. App-builder enablement and ownership gates apply. Review the intended change and set confirm=true to execute; otherwise no API request is sent. API: DELETE /apps/{app_id}/domains/{hostname}

Inputs

InputRequiredTypeDescription
app_idYesstringSee the schema below for constraints and defaults.
hostnameYesstringSee the schema below for constraints and defaults.
confirmNobooleanSee the schema below for constraints and defaults.
Complete input schema
{
"properties": {
"app_id": {
"title": "App Id",
"type": "string"
},
"hostname": {
"title": "Hostname",
"type": "string"
},
"confirm": {
"default": false,
"title": "Confirm",
"type": "boolean"
}
},
"required": [
"app_id",
"hostname"
],
"title": "g8_app_release_app_domainArguments",
"type": "object"
}

g8_app_report_observed_build

Observe a real Kubernetes build Job and report its derived progress after confirm=true. Requires the isolated g8-controller-mcp-server connection with existing controller credentials and cluster service-account mounts. App/deployment identifiers select a Job whose identity is verified. Agents cannot supply status, image digest, error text, credentials or cluster addresses. Missing or unreadable evidence never updates progress. The API verifies the app binding and state transition; this never promotes an app to live traffic.

Inputs

InputRequiredTypeDescription
app_idYesstringSee the schema below for constraints and defaults.
deployment_idYesstringSee the schema below for constraints and defaults.
confirmNobooleanSee the schema below for constraints and defaults.
Complete input schema
{
"properties": {
"app_id": {
"pattern": "^dapp_[0-9a-f]{6,32}$",
"title": "App Id",
"type": "string"
},
"deployment_id": {
"pattern": "^ddep_[0-9a-f]{6,32}$",
"title": "Deployment Id",
"type": "string"
},
"confirm": {
"default": false,
"title": "Confirm",
"type": "boolean"
}
},
"required": [
"app_id",
"deployment_id"
],
"title": "g8_app_report_observed_buildArguments",
"type": "object"
}

g8_app_revoke_app_credential

Revoke App Credential. Uses the current organization and existing API permissions. App-builder enablement and ownership gates apply. Review the intended change and set confirm=true to execute; otherwise no API request is sent. API: DELETE /apps/{app_id}/credentials/{client_id}

Inputs

InputRequiredTypeDescription
app_idYesstringSee the schema below for constraints and defaults.
client_idYesstringSee the schema below for constraints and defaults.
confirmNobooleanSee the schema below for constraints and defaults.
Complete input schema
{
"properties": {
"app_id": {
"title": "App Id",
"type": "string"
},
"client_id": {
"title": "Client Id",
"type": "string"
},
"confirm": {
"default": false,
"title": "Confirm",
"type": "boolean"
}
},
"required": [
"app_id",
"client_id"
],
"title": "g8_app_revoke_app_credentialArguments",
"type": "object"
}

g8_app_rollback_deployment

Rollback Deployment. Uses the current organization and existing API permissions. App-builder enablement and ownership gates apply. Review the intended change and set confirm=true to execute; otherwise no API request is sent. API: POST /apps/{app_id}/deployments/{deployment_id}/rollback

Inputs

InputRequiredTypeDescription
app_idYesstringSee the schema below for constraints and defaults.
deployment_idYesstringSee the schema below for constraints and defaults.
confirmNobooleanSee the schema below for constraints and defaults.
Complete input schema
{
"properties": {
"app_id": {
"title": "App Id",
"type": "string"
},
"deployment_id": {
"title": "Deployment Id",
"type": "string"
},
"confirm": {
"default": false,
"title": "Confirm",
"type": "boolean"
}
},
"required": [
"app_id",
"deployment_id"
],
"title": "g8_app_rollback_deploymentArguments",
"type": "object"
}

g8_app_set_app_limit

Set App Limit. Uses the current organization and existing API permissions. App-builder enablement and ownership gates apply. Review the intended change and set confirm=true to execute; otherwise no API request is sent. API: PUT /apps/{app_id}/limit

Inputs

InputRequiredTypeDescription
app_idYesstringSee the schema below for constraints and defaults.
bodyYes#/$defs/ApiSetAppLimitRequestSee the schema below for constraints and defaults.
confirmNobooleanSee the schema below for constraints and defaults.
Complete input schema
{
"$defs": {
"ApiSetAppLimitRequest": {
"additionalProperties": false,
"properties": {
"credit_cap": {
"description": "Hard cap in credits for the window. `0` means 'cap at zero', NOT 'uncapped' -- to remove a cap, DELETE the limit instead.",
"minimum": 0.0,
"title": "Credit Cap",
"type": "integer"
},
"window": {
"default": "calendar_month",
"description": "Cap window. `calendar_month` is the only value today.",
"title": "Window",
"type": "string"
}
},
"required": [
"credit_cap"
],
"title": "ApiSetAppLimitRequest",
"type": "object"
}
},
"properties": {
"app_id": {
"title": "App Id",
"type": "string"
},
"body": {
"$ref": "#/$defs/ApiSetAppLimitRequest"
},
"confirm": {
"default": false,
"title": "Confirm",
"type": "boolean"
}
},
"required": [
"app_id",
"body"
],
"title": "g8_app_set_app_limitArguments",
"type": "object"
}

g8_app_set_app_source

Set App Source. Uses the current organization and existing API permissions. App-builder enablement and ownership gates apply. Review the intended change and set confirm=true to execute; otherwise no API request is sent. API: PUT /apps/{app_id}/source

Inputs

InputRequiredTypeDescription
app_idYesstringSee the schema below for constraints and defaults.
bodyYes#/$defs/ApiAppSourceRequestSee the schema below for constraints and defaults.
confirmNobooleanSee the schema below for constraints and defaults.
Complete input schema
{
"$defs": {
"ApiAppSourceRequest": {
"additionalProperties": false,
"properties": {
"credential_ref": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"description": "Secret-manager PATH for the fetch credential. Never the credential itself.",
"title": "Credential Ref"
},
"default_branch": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"description": "Defaults to the repository's own default when omitted.",
"title": "Default Branch"
},
"provider": {
"description": "One of: github, gitlab, bitbucket.",
"title": "Provider",
"type": "string"
},
"repo_url": {
"description": "Clone URL.",
"maxLength": 2000,
"minLength": 1,
"title": "Repo Url",
"type": "string"
}
},
"required": [
"provider",
"repo_url"
],
"title": "ApiAppSourceRequest",
"type": "object"
}
},
"properties": {
"app_id": {
"title": "App Id",
"type": "string"
},
"body": {
"$ref": "#/$defs/ApiAppSourceRequest"
},
"confirm": {
"default": false,
"title": "Confirm",
"type": "boolean"
}
},
"required": [
"app_id",
"body"
],
"title": "g8_app_set_app_sourceArguments",
"type": "object"
}

g8_app_set_app_status

Set App Status. Uses the current organization and existing API permissions. App-builder enablement and ownership gates apply. Review the intended change and set confirm=true to execute; otherwise no API request is sent. API: POST /apps/{app_id}/status

Inputs

InputRequiredTypeDescription
app_idYesstringSee the schema below for constraints and defaults.
bodyYes#/$defs/ApiSetAppStatusRequestSee the schema below for constraints and defaults.
confirmNobooleanSee the schema below for constraints and defaults.
Complete input schema
{
"$defs": {
"ApiSetAppStatusRequest": {
"additionalProperties": false,
"properties": {
"status": {
"description": "`draft`, `published`, `suspended` or `archived`. `active` is accepted as the legacy spelling of `published`.",
"title": "Status",
"type": "string"
}
},
"required": [
"status"
],
"title": "ApiSetAppStatusRequest",
"type": "object"
}
},
"properties": {
"app_id": {
"title": "App Id",
"type": "string"
},
"body": {
"$ref": "#/$defs/ApiSetAppStatusRequest"
},
"confirm": {
"default": false,
"title": "Confirm",
"type": "boolean"
}
},
"required": [
"app_id",
"body"
],
"title": "g8_app_set_app_statusArguments",
"type": "object"
}

g8_app_status

Get one app: its lifecycle status, registered origins and hostname. Args: app_id: The app id (e.g. dapp_a1b2c3d4e5f6)

Inputs

InputRequiredTypeDescription
app_idYesstringSee the schema below for constraints and defaults.
Complete input schema
{
"properties": {
"app_id": {
"title": "App Id",
"type": "string"
}
},
"required": [
"app_id"
],
"title": "g8_app_statusArguments",
"type": "object"
}

g8_app_uninstall_app

Uninstall App. Uses the current organization and existing API permissions. Review the intended change and set confirm=true to execute; otherwise no API request is sent. API: DELETE /installed-apps/{app_id}

Inputs

InputRequiredTypeDescription
app_idYesstringSee the schema below for constraints and defaults.
confirmNobooleanSee the schema below for constraints and defaults.
Complete input schema
{
"properties": {
"app_id": {
"title": "App Id",
"type": "string"
},
"confirm": {
"default": false,
"title": "Confirm",
"type": "boolean"
}
},
"required": [
"app_id"
],
"title": "g8_app_uninstall_appArguments",
"type": "object"
}

g8_app_validate_manifest

Check a graph8.app.yaml without applying it. No app id needed. Answers successfully whether or not the manifest is valid: valid is the answer and issues is why not, each with a path pointer, so a whole file is fixed in one pass rather than one error per attempt. Use this on a manifest you just wrote, before applying it. A manifest MUST declare a frontend and/or a backend build target. One that declares only objects is rejected with no_build_target. Args: manifest: The full graph8.app.yaml document as text, newlines and all. Rejected above 256 KiB.

Inputs

InputRequiredTypeDescription
manifestYesstringSee the schema below for constraints and defaults.
Complete input schema
{
"properties": {
"manifest": {
"title": "Manifest",
"type": "string"
}
},
"required": [
"manifest"
],
"title": "g8_app_validate_manifestArguments",
"type": "object"
}

g8_app_verify_app_domain

Verify App Domain. Uses the current organization and existing API permissions. App-builder enablement and ownership gates apply. Review the intended change and set confirm=true to execute; otherwise no API request is sent. API: POST /apps/{app_id}/domains/{hostname}/verify

Inputs

InputRequiredTypeDescription
app_idYesstringSee the schema below for constraints and defaults.
hostnameYesstringSee the schema below for constraints and defaults.
confirmNobooleanSee the schema below for constraints and defaults.
Complete input schema
{
"properties": {
"app_id": {
"title": "App Id",
"type": "string"
},
"hostname": {
"title": "Hostname",
"type": "string"
},
"confirm": {
"default": false,
"title": "Confirm",
"type": "boolean"
}
},
"required": [
"app_id",
"hostname"
],
"title": "g8_app_verify_app_domainArguments",
"type": "object"
}

g8_apply_install

Apply the generated GTM patches to the repository. IMPORTANT: This modifies the codebase. Always confirm with the user first. Args: repo_id: Repository ID with a pending patch set

Inputs

InputRequiredTypeDescription
repo_idYesstringSee the schema below for constraints and defaults.
Complete input schema
{
"properties": {
"repo_id": {
"title": "Repo Id",
"type": "string"
}
},
"required": [
"repo_id"
],
"title": "g8_apply_installArguments",
"type": "object"
}

g8_apply_landing_page_patch

Submit ordered exact replacements to a landing-page draft. First call g8_get_landing_page_source. Build replacements from its exact HTML and pass back its sha256. Every old string must occur exactly expected_matches times against the evolving document or nothing is written. Studio handoffs default to pending_review, where the user applies or discards the validated diff in graph8. If the user explicitly selected automatic updates, a successful call snapshots the previous HTML as a restorable graph8 version and applies immediately. Reuse the same idempotency key only when retrying the identical request. Args: edit_session: Opaque page-scoped session copied from graph8 Studio. base_sha256: sha256 returned by g8_get_landing_page_source. replacements: 1-20 ordered exact old/new replacements. idempotency_key: New stable retry key (8-128 URL-safe characters). summary: Concise human-readable description for version history.

Inputs

InputRequiredTypeDescription
edit_sessionYesstringSee the schema below for constraints and defaults.
base_sha256YesstringSee the schema below for constraints and defaults.
replacementsYesarraySee the schema below for constraints and defaults.
idempotency_keyYesstringSee the schema below for constraints and defaults.
summaryNostringSee the schema below for constraints and defaults.
Complete input schema
{
"$defs": {
"LandingPageReplacementInput": {
"description": "One ordered exact-text replacement for a landing-page patch.",
"properties": {
"old": {
"maxLength": 200000,
"minLength": 1,
"title": "Old",
"type": "string"
},
"new": {
"maxLength": 500000,
"title": "New",
"type": "string"
},
"expected_matches": {
"default": 1,
"maximum": 100,
"minimum": 1,
"title": "Expected Matches",
"type": "integer"
}
},
"required": [
"old",
"new"
],
"title": "LandingPageReplacementInput",
"type": "object"
}
},
"properties": {
"edit_session": {
"title": "Edit Session",
"type": "string"
},
"base_sha256": {
"title": "Base Sha256",
"type": "string"
},
"replacements": {
"items": {
"$ref": "#/$defs/LandingPageReplacementInput"
},
"title": "Replacements",
"type": "array"
},
"idempotency_key": {
"title": "Idempotency Key",
"type": "string"
},
"summary": {
"default": "External AI edit",
"title": "Summary",
"type": "string"
}
},
"required": [
"edit_session",
"base_sha256",
"replacements",
"idempotency_key"
],
"title": "g8_apply_landing_page_patchArguments",
"type": "object"
}

g8_appointments_add_booking_guests

Add guest email addresses to an existing booking. Guests are extra attendees who get the same calendar invite and notifications; each new guest is emailed. Args: booking_uid: Booking UID to add guests to. guests: List of email addresses to invite as guests.

Inputs

InputRequiredTypeDescription
booking_uidYesstringSee the schema below for constraints and defaults.
guestsYesarraySee the schema below for constraints and defaults.
Complete input schema
{
"properties": {
"booking_uid": {
"title": "Booking Uid",
"type": "string"
},
"guests": {
"items": {
"type": "string"
},
"title": "Guests",
"type": "array"
}
},
"required": [
"booking_uid",
"guests"
],
"title": "g8_appointments_add_booking_guestsArguments",
"type": "object"
}

g8_appointments_add_booking_note

Add an internal host-only note to a booking. Notes are not visible to attendees - only to org members in the booking detail view. Args: booking_uid: Booking UID to annotate. text: Note content (plain text).

Inputs

InputRequiredTypeDescription
booking_uidYesstringSee the schema below for constraints and defaults.
textYesstringSee the schema below for constraints and defaults.
Complete input schema
{
"properties": {
"booking_uid": {
"title": "Booking Uid",
"type": "string"
},
"text": {
"title": "Text",
"type": "string"
}
},
"required": [
"booking_uid",
"text"
],
"title": "g8_appointments_add_booking_noteArguments",
"type": "object"
}

g8_appointments_cancel_booking

Cancel a booking and notify both parties. This sends cancellation emails and frees the slot - confirm with the user first. Args: booking_uid: Booking UID to cancel. cancellation_reason: Optional reason shown in the notification. cancel_subsequent: For recurring bookings, also cancel later occurrences (default False).

Inputs

InputRequiredTypeDescription
booking_uidYesstringSee the schema below for constraints and defaults.
cancellation_reasonNostring / nullSee the schema below for constraints and defaults.
cancel_subsequentNobooleanSee the schema below for constraints and defaults.
Complete input schema
{
"properties": {
"booking_uid": {
"title": "Booking Uid",
"type": "string"
},
"cancellation_reason": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"title": "Cancellation Reason"
},
"cancel_subsequent": {
"default": false,
"title": "Cancel Subsequent",
"type": "boolean"
}
},
"required": [
"booking_uid"
],
"title": "g8_appointments_cancel_bookingArguments",
"type": "object"
}

g8_appointments_confirm_booking

Confirm or reject a pending booking that requires host approval. SENDS EMAILS to both parties - confirm intent with the user first. confirmed=True accepts (pending -> accepted); confirmed=False rejects and notifies the attendee with the optional reason. Args: booking_uid: Booking UID to confirm or reject. confirmed: True to accept, False to reject. reason: Optional message to the attendee (shown on rejection).

Inputs

InputRequiredTypeDescription
booking_uidYesstringSee the schema below for constraints and defaults.
confirmedYesbooleanSee the schema below for constraints and defaults.
reasonNostring / nullSee the schema below for constraints and defaults.
Complete input schema
{
"properties": {
"booking_uid": {
"title": "Booking Uid",
"type": "string"
},
"confirmed": {
"title": "Confirmed",
"type": "boolean"
},
"reason": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"title": "Reason"
}
},
"required": [
"booking_uid",
"confirmed"
],
"title": "g8_appointments_confirm_bookingArguments",
"type": "object"
}

g8_appointments_connect_conferencing

Connect a conferencing provider that does not need a browser OAuth flow. google_meet reuses your Google Calendar credential (must be connected first). roam/whereby/jitsi are link-based (optionally pass the URL). roam_auto creates a stub credential (OAuth completed once in the web app). For Zoom and Teams (office365_video) use the web app - they need browser OAuth. Args: provider: One of: google_meet, roam, roam_auto, whereby, jitsi. link: Optional meeting URL for roam, whereby, or jitsi providers.

Inputs

InputRequiredTypeDescription
providerYesstringSee the schema below for constraints and defaults.
linkNostring / nullSee the schema below for constraints and defaults.
Complete input schema
{
"properties": {
"provider": {
"title": "Provider",
"type": "string"
},
"link": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"title": "Link"
}
},
"required": [
"provider"
],
"title": "g8_appointments_connect_conferencingArguments",
"type": "object"
}

g8_appointments_create_booking

Book an appointment. CHARGES CREDITS (~20) and sends calendar invites + confirmation emails to attendee and host. ALWAYS confirm event type, time, and attendee with the user first - billable, externally-visible. Resolve event_type_id via g8_appointments_list_event_types and inspect it with g8_appointments_get_event_type first (duration + required booking_fields). start_time must be an available slot; end_time derives from the event-type length when omitted. Args: event_type_id: The event type to book. start_time: ISO-8601 start (e.g. “2026-06-10T15:00:00Z”). attendee_name: Primary attendee’s name. attendee_email: Primary attendee’s email. attendee_time_zone: IANA tz for the attendee (e.g. “America/New_York”). end_time: ISO-8601 end. Omit to use the event-type duration. location: Location/conferencing key (e.g. “zoom”, “google_meet”). guests: Additional guest email addresses to invite. responses: Answers to the event type’s custom booking_fields, keyed by field id.

Inputs

InputRequiredTypeDescription
event_type_idYesintegerSee the schema below for constraints and defaults.
start_timeYesstringSee the schema below for constraints and defaults.
attendee_nameYesstringSee the schema below for constraints and defaults.
attendee_emailYesstringSee the schema below for constraints and defaults.
attendee_time_zoneNostring / nullSee the schema below for constraints and defaults.
end_timeNostring / nullSee the schema below for constraints and defaults.
locationNostring / nullSee the schema below for constraints and defaults.
guestsNoarray / nullSee the schema below for constraints and defaults.
responsesNoobject / nullSee the schema below for constraints and defaults.
Complete input schema
{
"properties": {
"event_type_id": {
"title": "Event Type Id",
"type": "integer"
},
"start_time": {
"title": "Start Time",
"type": "string"
},
"attendee_name": {
"title": "Attendee Name",
"type": "string"
},
"attendee_email": {
"title": "Attendee Email",
"type": "string"
},
"attendee_time_zone": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"title": "Attendee Time Zone"
},
"end_time": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"title": "End Time"
},
"location": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"title": "Location"
},
"guests": {
"anyOf": [
{
"items": {
"type": "string"
},
"type": "array"
},
{
"type": "null"
}
],
"default": null,
"title": "Guests"
},
"responses": {
"anyOf": [
{
"additionalProperties": true,
"type": "object"
},
{
"type": "null"
}
],
"default": null,
"title": "Responses"
}
},
"required": [
"event_type_id",
"start_time",
"attendee_name",
"attendee_email"
],
"title": "g8_appointments_create_bookingArguments",
"type": "object"
}

g8_appointments_create_event_type

Create a bookable event type (what people book on your calendar). slug must be unique in the org (it becomes part of the public booking URL); collisions return an error. Args: title: Display name, e.g. “Discovery call”. slug: URL slug, e.g. “discovery-call” (unique per org). length: Duration in minutes. description: Optional description shown on the booking page. scheduling_type: “collective” | “round_robin” for team events; omit for 1:1. schedule_id: Availability schedule to attach (from g8_appointments_list_schedules). hidden: Create it hidden (not publicly bookable) when True. requires_confirmation: Require host approval before a booking is confirmed. minimum_booking_notice: Minutes of lead time required before a slot (default 120). locations: Location/conferencing config, e.g. [{“type”: “integrations:google:meet”}]. booking_fields: Custom questions the attendee must answer.

Inputs

InputRequiredTypeDescription
titleYesstringSee the schema below for constraints and defaults.
slugYesstringSee the schema below for constraints and defaults.
lengthYesintegerSee the schema below for constraints and defaults.
descriptionNostring / nullSee the schema below for constraints and defaults.
scheduling_typeNostring / nullSee the schema below for constraints and defaults.
schedule_idNointeger / nullSee the schema below for constraints and defaults.
hiddenNobooleanSee the schema below for constraints and defaults.
requires_confirmationNobooleanSee the schema below for constraints and defaults.
minimum_booking_noticeNointeger / nullSee the schema below for constraints and defaults.
locationsNoarray / nullSee the schema below for constraints and defaults.
booking_fieldsNoarray / nullSee the schema below for constraints and defaults.
Complete input schema
{
"properties": {
"title": {
"title": "Title",
"type": "string"
},
"slug": {
"title": "Slug",
"type": "string"
},
"length": {
"title": "Length",
"type": "integer"
},
"description": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"title": "Description"
},
"scheduling_type": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"title": "Scheduling Type"
},
"schedule_id": {
"anyOf": [
{
"type": "integer"
},
{
"type": "null"
}
],
"default": null,
"title": "Schedule Id"
},
"hidden": {
"default": false,
"title": "Hidden",
"type": "boolean"
},
"requires_confirmation": {
"default": false,
"title": "Requires Confirmation",
"type": "boolean"
},
"minimum_booking_notice": {
"anyOf": [
{
"type": "integer"
},
{
"type": "null"
}
],
"default": null,
"title": "Minimum Booking Notice"
},
"locations": {
"anyOf": [
{
"items": {
"additionalProperties": true,
"type": "object"
},
"type": "array"
},
{
"type": "null"
}
],
"default": null,
"title": "Locations"
},
"booking_fields": {
"anyOf": [
{
"items": {
"additionalProperties": true,
"type": "object"
},
"type": "array"
},
{
"type": "null"
}
],
"default": null,
"title": "Booking Fields"
}
},
"required": [
"title",
"slug",
"length"
],
"title": "g8_appointments_create_event_typeArguments",
"type": "object"
}

g8_appointments_create_ooo

Create an out-of-office entry for the calling user. While active, the user’s slots are blocked so no new bookings land in the period. Args: start: ISO-8601 UTC start datetime, e.g. “2026-07-01T00:00:00Z”. end: ISO-8601 UTC end datetime, e.g. “2026-07-08T00:00:00Z”. notes: Optional free-text note visible to the host. to_user_id: Integer user id of a team member to redirect bookings to. reason: Optional short label, e.g. “vacation” or “conference”.

Inputs

InputRequiredTypeDescription
startYesstringSee the schema below for constraints and defaults.
endYesstringSee the schema below for constraints and defaults.
notesNostring / nullSee the schema below for constraints and defaults.
to_user_idNointeger / nullSee the schema below for constraints and defaults.
reasonNostring / nullSee the schema below for constraints and defaults.
Complete input schema
{
"properties": {
"start": {
"title": "Start",
"type": "string"
},
"end": {
"title": "End",
"type": "string"
},
"notes": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"title": "Notes"
},
"to_user_id": {
"anyOf": [
{
"type": "integer"
},
{
"type": "null"
}
],
"default": null,
"title": "To User Id"
},
"reason": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"title": "Reason"
}
},
"required": [
"start",
"end"
],
"title": "g8_appointments_create_oooArguments",
"type": "object"
}

g8_appointments_create_routing_form

Create a new routing form (sequence of questions that route the visitor to an event type based on answers). Each field needs a label and type (select/text/email/phone); select fields need an options list of {label, value}. Routes need conditions (list of {field_id, operator, value} where field_id is the field’s identifier slug) plus action_type + action_value (event-type slug to redirect to). Include one route with is_fallback=True as the catch-all. Args: name: Display name for the form. description: Optional description shown on the form page. disabled: Create the form in disabled state when True. fields: List of field dicts (label, type, required, options). routes: List of route dicts (conditions, action_type, action_value, is_fallback).

Inputs

InputRequiredTypeDescription
nameYesstringSee the schema below for constraints and defaults.
descriptionNostring / nullSee the schema below for constraints and defaults.
disabledNobooleanSee the schema below for constraints and defaults.
fieldsNoarray / nullSee the schema below for constraints and defaults.
routesNoarray / nullSee the schema below for constraints and defaults.
Complete input schema
{
"properties": {
"name": {
"title": "Name",
"type": "string"
},
"description": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"title": "Description"
},
"disabled": {
"default": false,
"title": "Disabled",
"type": "boolean"
},
"fields": {
"anyOf": [
{
"items": {
"additionalProperties": true,
"type": "object"
},
"type": "array"
},
{
"type": "null"
}
],
"default": null,
"title": "Fields"
},
"routes": {
"anyOf": [
{
"items": {
"additionalProperties": true,
"type": "object"
},
"type": "array"
},
{
"type": "null"
}
],
"default": null,
"title": "Routes"
}
},
"required": [
"name"
],
"title": "g8_appointments_create_routing_formArguments",
"type": "object"
}

g8_appointments_create_schedule

Create a named availability schedule with weekly rules and optional date overrides. Args: name: Display name, e.g. “Working hours”. time_zone: IANA timezone string, e.g. “America/New_York”. is_default: Set as the caller’s default schedule when True (used for slot generation when an event type has no schedule attached). availability: Weekly rules [{days: [1..7], start_time: “HH:MM”, end_time: “HH:MM”}]. Days: 1=Monday … 7=Sunday. Omit for Mon-Fri 09:00-17:00. overrides: Date-specific overrides [{date: “YYYY-MM-DD”, start_time, end_time}].

Inputs

InputRequiredTypeDescription
nameYesstringSee the schema below for constraints and defaults.
time_zoneYesstringSee the schema below for constraints and defaults.
is_defaultNobooleanSee the schema below for constraints and defaults.
availabilityNoarray / nullSee the schema below for constraints and defaults.
overridesNoarray / nullSee the schema below for constraints and defaults.
Complete input schema
{
"properties": {
"name": {
"title": "Name",
"type": "string"
},
"time_zone": {
"title": "Time Zone",
"type": "string"
},
"is_default": {
"default": false,
"title": "Is Default",
"type": "boolean"
},
"availability": {
"anyOf": [
{
"items": {
"additionalProperties": true,
"type": "object"
},
"type": "array"
},
{
"type": "null"
}
],
"default": null,
"title": "Availability"
},
"overrides": {
"anyOf": [
{
"items": {
"additionalProperties": true,
"type": "object"
},
"type": "array"
},
{
"type": "null"
}
],
"default": null,
"title": "Overrides"
}
},
"required": [
"name",
"time_zone"
],
"title": "g8_appointments_create_scheduleArguments",
"type": "object"
}

g8_appointments_create_workflow

Create a booking workflow that automates actions (emails, reminders) tied to booking lifecycle events. Must have at least one step. Args: name: Display name for the workflow. trigger: When the workflow fires. One of: “new_booking” (on creation), “before_event”/“after_event” (N time_units before/after; need time + time_unit), “booking_cancelled”, “booking_rescheduled”. steps: List of step dicts (at least one). Each step: action (required): “EMAIL_HOST” | “EMAIL_ATTENDEE” | “EMAIL_ADDRESS”; template (default “REMINDER”); email_subject; reminder_body; send_to (required when action is “EMAIL_ADDRESS”); sender; include_calendar_event (default False). time: For time-based triggers - how many time_unit intervals before/after. time_unit: “minutes” | “hours” | “days” | “weeks” (required with time). is_active_on_all: Apply to all event types when True (default False). event_type_ids: Specific event types to attach this workflow to.

Inputs

InputRequiredTypeDescription
nameYesstringSee the schema below for constraints and defaults.
triggerYesstringSee the schema below for constraints and defaults.
stepsYesarraySee the schema below for constraints and defaults.
timeNointeger / nullSee the schema below for constraints and defaults.
time_unitNostring / nullSee the schema below for constraints and defaults.
is_active_on_allNobooleanSee the schema below for constraints and defaults.
event_type_idsNoarray / nullSee the schema below for constraints and defaults.
Complete input schema
{
"properties": {
"name": {
"title": "Name",
"type": "string"
},
"trigger": {
"title": "Trigger",
"type": "string"
},
"steps": {
"items": {
"additionalProperties": true,
"type": "object"
},
"title": "Steps",
"type": "array"
},
"time": {
"anyOf": [
{
"type": "integer"
},
{
"type": "null"
}
],
"default": null,
"title": "Time"
},
"time_unit": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"title": "Time Unit"
},
"is_active_on_all": {
"default": false,
"title": "Is Active On All",
"type": "boolean"
},
"event_type_ids": {
"anyOf": [
{
"items": {
"type": "integer"
},
"type": "array"
},
{
"type": "null"
}
],
"default": null,
"title": "Event Type Ids"
}
},
"required": [
"name",
"trigger",
"steps"
],
"title": "g8_appointments_create_workflowArguments",
"type": "object"
}

g8_appointments_delete_event_type

Delete an event type permanently (irreversible). Removes its public booking page; existing bookings are not cancelled. Confirm with the user first. Requires Admin or Owner role - a non-admin key gets a permission error, in which case hide it instead via g8_appointments_update_event_type(hidden=True). Args: event_type_id: The event type to delete.

Inputs

InputRequiredTypeDescription
event_type_idYesintegerSee the schema below for constraints and defaults.
Complete input schema
{
"properties": {
"event_type_id": {
"title": "Event Type Id",
"type": "integer"
}
},
"required": [
"event_type_id"
],
"title": "g8_appointments_delete_event_typeArguments",
"type": "object"
}

g8_appointments_delete_ooo

Delete an out-of-office entry permanently. The user’s slots in the previously-blocked period become bookable again after deletion. Confirm with the user before calling. Args: ooo_uuid: UUID of the out-of-office entry (from g8_appointments_list_ooo).

Inputs

InputRequiredTypeDescription
ooo_uuidYesstringSee the schema below for constraints and defaults.
Complete input schema
{
"properties": {
"ooo_uuid": {
"title": "Ooo Uuid",
"type": "string"
}
},
"required": [
"ooo_uuid"
],
"title": "g8_appointments_delete_oooArguments",
"type": "object"
}

g8_appointments_delete_routing_form

Delete a routing form permanently. Cascades to all fields, routes, and captured responses. Irreversible - confirm with the user first. Args: form_id: The routing form to delete.

Inputs

InputRequiredTypeDescription
form_idYesintegerSee the schema below for constraints and defaults.
Complete input schema
{
"properties": {
"form_id": {
"title": "Form Id",
"type": "integer"
}
},
"required": [
"form_id"
],
"title": "g8_appointments_delete_routing_formArguments",
"type": "object"
}

g8_appointments_delete_schedule

Delete an availability schedule permanently. Confirm with the user first - this removes the schedule from any linked event types. Returns 409 if it is the user’s only remaining schedule (must keep at least one). Args: schedule_id: Schedule to delete.

Inputs

InputRequiredTypeDescription
schedule_idYesintegerSee the schema below for constraints and defaults.
Complete input schema
{
"properties": {
"schedule_id": {
"title": "Schedule Id",
"type": "integer"
}
},
"required": [
"schedule_id"
],
"title": "g8_appointments_delete_scheduleArguments",
"type": "object"
}

g8_appointments_delete_workflow

Delete a workflow permanently. Pending reminders are cancelled; existing bookings are unaffected. Confirm with the user before calling. Args: workflow_id: The workflow to delete.

Inputs

InputRequiredTypeDescription
workflow_idYesintegerSee the schema below for constraints and defaults.
Complete input schema
{
"properties": {
"workflow_id": {
"title": "Workflow Id",
"type": "integer"
}
},
"required": [
"workflow_id"
],
"title": "g8_appointments_delete_workflowArguments",
"type": "object"
}

g8_appointments_deselect_calendar

Remove a sub-calendar from conflict checking. The calendar account stays connected; only its conflict-check selection is removed. Args: credential_id: ID of the connected calendar account credential. integration: Provider type, e.g. “google_calendar”. external_id: The calendar’s external ID.

Inputs

InputRequiredTypeDescription
credential_idYesintegerSee the schema below for constraints and defaults.
integrationYesstringSee the schema below for constraints and defaults.
external_idYesstringSee the schema below for constraints and defaults.
Complete input schema
{
"properties": {
"credential_id": {
"title": "Credential Id",
"type": "integer"
},
"integration": {
"title": "Integration",
"type": "string"
},
"external_id": {
"title": "External Id",
"type": "string"
}
},
"required": [
"credential_id",
"integration",
"external_id"
],
"title": "g8_appointments_deselect_calendarArguments",
"type": "object"
}

g8_appointments_disconnect_calendar

Disconnect a calendar account entirely: removes the credential, revokes the OAuth token (best-effort), and clears destination settings pointing at it. Existing bookings are unaffected. Confirm with the user before calling. Args: credential_id: ID of the calendar account credential to disconnect (from g8_appointments_list_calendars).

Inputs

InputRequiredTypeDescription
credential_idYesintegerSee the schema below for constraints and defaults.
Complete input schema
{
"properties": {
"credential_id": {
"title": "Credential Id",
"type": "integer"
}
},
"required": [
"credential_id"
],
"title": "g8_appointments_disconnect_calendarArguments",
"type": "object"
}

g8_appointments_disconnect_conferencing

Disconnect a conferencing provider. Real-credential providers (zoom, roam, whereby, jitsi, office365_video, roam_auto) have their credential deleted; Google Meet has no credential, so it is suppressed and cleared as default. Confirm with the user first - reconnecting OAuth providers (zoom, office365_video) requires the web app. Args: provider: The conferencing provider to disconnect.

Inputs

InputRequiredTypeDescription
providerYesstringSee the schema below for constraints and defaults.
Complete input schema
{
"properties": {
"provider": {
"title": "Provider",
"type": "string"
}
},
"required": [
"provider"
],
"title": "g8_appointments_disconnect_conferencingArguments",
"type": "object"
}

g8_appointments_duplicate_event_type

Duplicate an event type into a copy with a unique “{slug}-copy” slug and the same hosts/config. Args: event_type_id: The source event type to copy.

Inputs

InputRequiredTypeDescription
event_type_idYesintegerSee the schema below for constraints and defaults.
Complete input schema
{
"properties": {
"event_type_id": {
"title": "Event Type Id",
"type": "integer"
}
},
"required": [
"event_type_id"
],
"title": "g8_appointments_duplicate_event_typeArguments",
"type": "object"
}

g8_appointments_duplicate_routing_form

Duplicate a routing form with all its fields and routes. Creates a copy named “{name} (copy)” with a unique auto-generated slug. Captured responses are NOT copied. Args: form_id: The source routing form to copy.

Inputs

InputRequiredTypeDescription
form_idYesintegerSee the schema below for constraints and defaults.
Complete input schema
{
"properties": {
"form_id": {
"title": "Form Id",
"type": "integer"
}
},
"required": [
"form_id"
],
"title": "g8_appointments_duplicate_routing_formArguments",
"type": "object"
}

g8_appointments_get_availability

Get a schedule’s availability list (recurring weekly rules with days 1=Mon..7=Sun, start_time, end_time) and overrides list (one-time overrides for specific dates). Args: schedule_id: Schedule integer ID.

Inputs

InputRequiredTypeDescription
schedule_idYesintegerSee the schema below for constraints and defaults.
Complete input schema
{
"properties": {
"schedule_id": {
"title": "Schedule Id",
"type": "integer"
}
},
"required": [
"schedule_id"
],
"title": "g8_appointments_get_availabilityArguments",
"type": "object"
}

g8_appointments_get_booking

Get a single booking by its UID. Returns the full detail: attendees, status, times, location, meeting_url, the attendee’s form responses, and internal notes. Args: booking_uid: Booking UID (uuid string) from g8_appointments_list_bookings.

Inputs

InputRequiredTypeDescription
booking_uidYesstringSee the schema below for constraints and defaults.
Complete input schema
{
"properties": {
"booking_uid": {
"title": "Booking Uid",
"type": "string"
}
},
"required": [
"booking_uid"
],
"title": "g8_appointments_get_bookingArguments",
"type": "object"
}

g8_appointments_get_default_conferencing

Get the default conferencing provider used for new bookings when no explicit location is specified. Returns null provider when none is set.

Inputs

InputRequiredTypeDescription
NoneNoNo user-supplied inputs.
Complete input schema
{
"properties": {},
"title": "g8_appointments_get_default_conferencingArguments",
"type": "object"
}

g8_appointments_get_destination_calendar

Get the destination calendar where new booking events are pushed. Returns null when none is configured. Args: event_type_id: Optional event type ID for a per-event-type lookup; omit to get the user-level default.

Inputs

InputRequiredTypeDescription
event_type_idNointeger / nullSee the schema below for constraints and defaults.
Complete input schema
{
"properties": {
"event_type_id": {
"anyOf": [
{
"type": "integer"
},
{
"type": "null"
}
],
"default": null,
"title": "Event Type Id"
}
},
"title": "g8_appointments_get_destination_calendarArguments",
"type": "object"
}

g8_appointments_get_event_type

Get full detail for one bookable event type: title, slug, duration (length minutes), locations, hosts, schedule, buffers, minimum notice, and the booking_fields an attendee must answer. Call before g8_appointments_create_booking to learn required fields + slot length. Find event_type_id via g8_appointments_list_event_types. Args: event_type_id: Event-type integer ID.

Inputs

InputRequiredTypeDescription
event_type_idYesintegerSee the schema below for constraints and defaults.
Complete input schema
{
"properties": {
"event_type_id": {
"title": "Event Type Id",
"type": "integer"
}
},
"required": [
"event_type_id"
],
"title": "g8_appointments_get_event_typeArguments",
"type": "object"
}

g8_appointments_get_insights

Get aggregated booking insights (counts, show/no-show rates, per-event-type breakdowns) for the caller’s org. Answers questions like booking volume, no-show rate, or most-booked event type. Args: date_from: ISO date lower bound, e.g. “2026-01-01”. date_to: ISO date upper bound, e.g. “2026-06-30”. event_type_ids: Comma-separated event-type IDs to filter by. member_user_id: Filter by a specific member (ignored for non-admin API callers).

Inputs

InputRequiredTypeDescription
date_fromNostring / nullSee the schema below for constraints and defaults.
date_toNostring / nullSee the schema below for constraints and defaults.
event_type_idsNostring / nullSee the schema below for constraints and defaults.
member_user_idNointeger / nullSee the schema below for constraints and defaults.
Complete input schema
{
"properties": {
"date_from": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"title": "Date From"
},
"date_to": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"title": "Date To"
},
"event_type_ids": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"title": "Event Type Ids"
},
"member_user_id": {
"anyOf": [
{
"type": "integer"
},
{
"type": "null"
}
],
"default": null,
"title": "Member User Id"
}
},
"title": "g8_appointments_get_insightsArguments",
"type": "object"
}

g8_appointments_get_routing_form

Get a routing form by ID with its full fields, routes, and response_count. Each field has an identifier (slug used as the condition key), type (select/text/email/phone/number), label, required, and options (select fields). Routes map answer conditions to an event-type redirect; the fallback route has is_fallback=True. Conditions reference field_id = field.identifier (the slug, not the integer id). Args: form_id: The routing form integer ID.

Inputs

InputRequiredTypeDescription
form_idYesintegerSee the schema below for constraints and defaults.
Complete input schema
{
"properties": {
"form_id": {
"title": "Form Id",
"type": "integer"
}
},
"required": [
"form_id"
],
"title": "g8_appointments_get_routing_formArguments",
"type": "object"
}

g8_appointments_get_routing_form_responses

List captured responses for a routing form (paginated). Each response has the visitor’s field answers (keyed by field identifier/slug), the event-type routed to, and the submission timestamp. Args: form_id: The routing form integer ID. skip: Number of responses to skip (default 0). take: Maximum responses to return, up to 500 (default 50).

Inputs

InputRequiredTypeDescription
form_idYesintegerSee the schema below for constraints and defaults.
skipNointegerSee the schema below for constraints and defaults.
takeNointegerSee the schema below for constraints and defaults.
Complete input schema
{
"properties": {
"form_id": {
"title": "Form Id",
"type": "integer"
},
"skip": {
"default": 0,
"title": "Skip",
"type": "integer"
},
"take": {
"default": 50,
"title": "Take",
"type": "integer"
}
},
"required": [
"form_id"
],
"title": "g8_appointments_get_routing_form_responsesArguments",
"type": "object"
}

g8_appointments_get_schedule

Get a single availability schedule with its weekly rules, date overrides, owner info, and linked event types. Returns 404 if it does not exist or belongs to another user. Args: schedule_id: Schedule integer ID (from g8_appointments_list_schedules or the schedule_id field on an event type).

Inputs

InputRequiredTypeDescription
schedule_idYesintegerSee the schema below for constraints and defaults.
Complete input schema
{
"properties": {
"schedule_id": {
"title": "Schedule Id",
"type": "integer"
}
},
"required": [
"schedule_id"
],
"title": "g8_appointments_get_scheduleArguments",
"type": "object"
}

g8_appointments_get_workflow

Get full details for a single workflow, including all steps and linked event types. Args: workflow_id: The workflow integer ID (from g8_appointments_list_workflows).

Inputs

InputRequiredTypeDescription
workflow_idYesintegerSee the schema below for constraints and defaults.
Complete input schema
{
"properties": {
"workflow_id": {
"title": "Workflow Id",
"type": "integer"
}
},
"required": [
"workflow_id"
],
"title": "g8_appointments_get_workflowArguments",
"type": "object"
}

g8_appointments_list_bookings

List the caller’s appointment bookings (paginated). Shows bookings the user owns, hosts, or shared a link for - never org-wide. Args: status: Filter by status - accepted | pending | cancelled | rejected. event_type_id: Only bookings for this event type. after_start: ISO-8601 lower bound on start_time (e.g. “2026-06-01T00:00:00Z”). before_end: ISO-8601 upper bound on end_time. attendee_email: Filter to bookings including this attendee. sort_by: start_time | end_time | created_at | status (default start_time). sort_order: asc | desc (default desc). skip: Pagination offset (default 0). take: Page size, 1-100 (default 20).

Inputs

InputRequiredTypeDescription
statusNostring / nullSee the schema below for constraints and defaults.
event_type_idNointeger / nullSee the schema below for constraints and defaults.
after_startNostring / nullSee the schema below for constraints and defaults.
before_endNostring / nullSee the schema below for constraints and defaults.
attendee_emailNostring / nullSee the schema below for constraints and defaults.
sort_byNostringSee the schema below for constraints and defaults.
sort_orderNostringSee the schema below for constraints and defaults.
skipNointegerSee the schema below for constraints and defaults.
takeNointegerSee the schema below for constraints and defaults.
Complete input schema
{
"properties": {
"status": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"title": "Status"
},
"event_type_id": {
"anyOf": [
{
"type": "integer"
},
{
"type": "null"
}
],
"default": null,
"title": "Event Type Id"
},
"after_start": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"title": "After Start"
},
"before_end": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"title": "Before End"
},
"attendee_email": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"title": "Attendee Email"
},
"sort_by": {
"default": "start_time",
"title": "Sort By",
"type": "string"
},
"sort_order": {
"default": "desc",
"title": "Sort Order",
"type": "string"
},
"skip": {
"default": 0,
"title": "Skip",
"type": "integer"
},
"take": {
"default": 20,
"title": "Take",
"type": "integer"
}
},
"title": "g8_appointments_list_bookingsArguments",
"type": "object"
}

g8_appointments_list_calendars

List connected calendar accounts (Google Calendar, Outlook). Each account shows its sub-calendars and which are selected for conflict checking. Requires a calendar connected in the web app first.

Inputs

InputRequiredTypeDescription
NoneNoNo user-supplied inputs.
Complete input schema
{
"properties": {},
"title": "g8_appointments_list_calendarsArguments",
"type": "object"
}

g8_appointments_list_conferencing

List connected conferencing providers. Returns each provider’s name, type, meeting link (if applicable), and whether it is the default. Google Meet appears when a Google Calendar credential exists and was not removed.

Inputs

InputRequiredTypeDescription
NoneNoNo user-supplied inputs.
Complete input schema
{
"properties": {},
"title": "g8_appointments_list_conferencingArguments",
"type": "object"
}

g8_appointments_list_event_types

List bookable calendar event types (Cal.com appointments). An event type is the “where do they book?” picker: a title, a slug, and a duration. Pass the row’s integer id back as appointment_id on g8_gtm_launch_campaign to attach the booking link. Different from g8_list_meetings (the inbox of already-booked meetings); this is the picker for which booking template the sequence references. Args: include_hidden: Include event types marked hidden (not bookable publicly). Default False matches the in-app picker. scheduling_type: Filter by Cal.com scheduling type: managed | round_robin | collective. Omit to return all.

Inputs

InputRequiredTypeDescription
include_hiddenNobooleanSee the schema below for constraints and defaults.
scheduling_typeNostring / nullSee the schema below for constraints and defaults.
Complete input schema
{
"properties": {
"include_hidden": {
"default": false,
"title": "Include Hidden",
"type": "boolean"
},
"scheduling_type": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"title": "Scheduling Type"
}
},
"title": "list_event_typesArguments",
"type": "object"
}

g8_appointments_list_ooo

List all out-of-office entries for the calling user. Each entry has a uuid, date range, optional notes, optional redirect-to user id, and reason. Use the uuid to delete an entry with g8_appointments_delete_ooo.

Inputs

InputRequiredTypeDescription
NoneNoNo user-supplied inputs.
Complete input schema
{
"properties": {},
"title": "g8_appointments_list_oooArguments",
"type": "object"
}

g8_appointments_list_routing_forms

List all routing forms owned by the current user. Returns each form’s id, name, slug, description, disabled state, field count, route count, and total response_count. Use g8_appointments_get_routing_form for the full field/route definitions.

Inputs

InputRequiredTypeDescription
NoneNoNo user-supplied inputs.
Complete input schema
{
"properties": {},
"title": "g8_appointments_list_routing_formsArguments",
"type": "object"
}

g8_appointments_list_schedules

List the caller’s appointment availability schedules. DISTINCT from g8_list_schedules (sequencer send-window schedules). Each entry has id, name, time_zone, weekly rules, and is_default; use an id with g8_appointments_get_schedule / _update_schedule / _set_default_schedule.

Inputs

InputRequiredTypeDescription
NoneNoNo user-supplied inputs.
Complete input schema
{
"properties": {},
"title": "g8_appointments_list_schedulesArguments",
"type": "object"
}

g8_appointments_list_workflows

List all booking workflows configured for the organisation. Returns every workflow with its trigger, active state, linked event types, and steps. Use this to discover existing workflows before creating new ones.

Inputs

InputRequiredTypeDescription
NoneNoNo user-supplied inputs.
Complete input schema
{
"properties": {},
"title": "g8_appointments_list_workflowsArguments",
"type": "object"
}

g8_appointments_mark_absent

Mark the host and/or attendees as no-show for a booking. Args: booking_uid: Booking UID to update. host: Set True to mark the host as no-show. attendees: List of attendee dicts (each needs at least “email”), e.g. [{“email”: “[email protected]”}], to mark as no-show.

Inputs

InputRequiredTypeDescription
booking_uidYesstringSee the schema below for constraints and defaults.
hostNoboolean / nullSee the schema below for constraints and defaults.
attendeesNoarray / nullSee the schema below for constraints and defaults.
Complete input schema
{
"properties": {
"booking_uid": {
"title": "Booking Uid",
"type": "string"
},
"host": {
"anyOf": [
{
"type": "boolean"
},
{
"type": "null"
}
],
"default": null,
"title": "Host"
},
"attendees": {
"anyOf": [
{
"items": {
"additionalProperties": true,
"type": "object"
},
"type": "array"
},
{
"type": "null"
}
],
"default": null,
"title": "Attendees"
}
},
"required": [
"booking_uid"
],
"title": "g8_appointments_mark_absentArguments",
"type": "object"
}

g8_appointments_request_reschedule

Ask the attendee to pick a new time (host-initiated reschedule request). Sends a reschedule-request email with a booking-page link. Does NOT move or cancel the original booking - the attendee reschedules by clicking the link. Args: booking_uid: Booking UID for which to request a reschedule. reason: Optional message from host to the attendee.

Inputs

InputRequiredTypeDescription
booking_uidYesstringSee the schema below for constraints and defaults.
reasonNostring / nullSee the schema below for constraints and defaults.
Complete input schema
{
"properties": {
"booking_uid": {
"title": "Booking Uid",
"type": "string"
},
"reason": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"title": "Reason"
}
},
"required": [
"booking_uid"
],
"title": "g8_appointments_request_rescheduleArguments",
"type": "object"
}

g8_appointments_reschedule_booking

Reschedule a booking to a new start time. Free (no extra credit charge); re-sends the updated calendar invite and notifies the attendee. Returns the NEW booking detail. Args: booking_uid: Booking UID to move. start_time: New ISO-8601 start time (must be an available slot). rescheduling_reason: Optional reason shown in the notification.

Inputs

InputRequiredTypeDescription
booking_uidYesstringSee the schema below for constraints and defaults.
start_timeYesstringSee the schema below for constraints and defaults.
rescheduling_reasonNostring / nullSee the schema below for constraints and defaults.
Complete input schema
{
"properties": {
"booking_uid": {
"title": "Booking Uid",
"type": "string"
},
"start_time": {
"title": "Start Time",
"type": "string"
},
"rescheduling_reason": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"title": "Rescheduling Reason"
}
},
"required": [
"booking_uid",
"start_time"
],
"title": "g8_appointments_reschedule_bookingArguments",
"type": "object"
}

g8_appointments_select_calendar

Add a sub-calendar to conflict checking; its busy times are then checked before offering booking slots. Find all args via g8_appointments_list_calendars. Args: credential_id: ID of the connected calendar account credential. integration: Provider type, e.g. “google_calendar” or “office365_calendar”. external_id: The calendar’s external ID (from list_calendars sub_calendars).

Inputs

InputRequiredTypeDescription
credential_idYesintegerSee the schema below for constraints and defaults.
integrationYesstringSee the schema below for constraints and defaults.
external_idYesstringSee the schema below for constraints and defaults.
Complete input schema
{
"properties": {
"credential_id": {
"title": "Credential Id",
"type": "integer"
},
"integration": {
"title": "Integration",
"type": "string"
},
"external_id": {
"title": "External Id",
"type": "string"
}
},
"required": [
"credential_id",
"integration",
"external_id"
],
"title": "g8_appointments_select_calendarArguments",
"type": "object"
}

Set or update the meeting URL for a link-based conferencing provider (roam, whereby, or jitsi). The provider must already be connected; the URL is validated against the provider’s pattern. Args: provider: One of: roam, whereby, jitsi. link: The meeting URL (must match the provider’s URL pattern).

Inputs

InputRequiredTypeDescription
providerYesstringSee the schema below for constraints and defaults.
linkYesstringSee the schema below for constraints and defaults.
Complete input schema
{
"properties": {
"provider": {
"title": "Provider",
"type": "string"
},
"link": {
"title": "Link",
"type": "string"
}
},
"required": [
"provider",
"link"
],
"title": "g8_appointments_set_conferencing_linkArguments",
"type": "object"
}

g8_appointments_set_default_conferencing

Set the default conferencing provider for new bookings when no explicit location is specified. Link-based providers (roam, whereby, jitsi) need a meeting URL - pass it here or set it first via g8_appointments_set_conferencing_link. Args: provider: The conferencing provider to set as default. credential_id: Optional credential ID for the provider. link: Optional meeting URL (required for roam/whereby/jitsi if not already stored).

Inputs

InputRequiredTypeDescription
providerYesstringSee the schema below for constraints and defaults.
credential_idNointeger / nullSee the schema below for constraints and defaults.
linkNostring / nullSee the schema below for constraints and defaults.
Complete input schema
{
"properties": {
"provider": {
"title": "Provider",
"type": "string"
},
"credential_id": {
"anyOf": [
{
"type": "integer"
},
{
"type": "null"
}
],
"default": null,
"title": "Credential Id"
},
"link": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"title": "Link"
}
},
"required": [
"provider"
],
"title": "g8_appointments_set_default_conferencingArguments",
"type": "object"
}

g8_appointments_set_default_schedule

Set a schedule as the caller’s default availability schedule, used for slot generation when an event type has no explicit schedule attached. Args: schedule_id: Schedule to make the default.

Inputs

InputRequiredTypeDescription
schedule_idYesintegerSee the schema below for constraints and defaults.
Complete input schema
{
"properties": {
"schedule_id": {
"title": "Schedule Id",
"type": "integer"
}
},
"required": [
"schedule_id"
],
"title": "g8_appointments_set_default_scheduleArguments",
"type": "object"
}

g8_appointments_set_destination_calendar

Set the destination calendar where new booking events are pushed. Find arg values via g8_appointments_list_calendars. Args: integration: Provider type, e.g. “google_calendar” or “office365_calendar”. external_id: The calendar’s external ID. credential_id: Optional credential ID for the calendar account. event_type_id: Optional event type ID for a per-event-type destination; omit to set the user-level default.

Inputs

InputRequiredTypeDescription
integrationYesstringSee the schema below for constraints and defaults.
external_idYesstringSee the schema below for constraints and defaults.
credential_idNointeger / nullSee the schema below for constraints and defaults.
event_type_idNointeger / nullSee the schema below for constraints and defaults.
Complete input schema
{
"properties": {
"integration": {
"title": "Integration",
"type": "string"
},
"external_id": {
"title": "External Id",
"type": "string"
},
"credential_id": {
"anyOf": [
{
"type": "integer"
},
{
"type": "null"
}
],
"default": null,
"title": "Credential Id"
},
"event_type_id": {
"anyOf": [
{
"type": "integer"
},
{
"type": "null"
}
],
"default": null,
"title": "Event Type Id"
}
},
"required": [
"integration",
"external_id"
],
"title": "g8_appointments_set_destination_calendarArguments",
"type": "object"
}

g8_appointments_toggle_workflow

Activate or deactivate a workflow. Deactivating cancels all pending reminders so scheduled jobs never fire for a disabled workflow. Args: workflow_id: The workflow to toggle. active: True to activate, False to deactivate.

Inputs

InputRequiredTypeDescription
workflow_idYesintegerSee the schema below for constraints and defaults.
activeYesbooleanSee the schema below for constraints and defaults.
Complete input schema
{
"properties": {
"workflow_id": {
"title": "Workflow Id",
"type": "integer"
},
"active": {
"title": "Active",
"type": "boolean"
}
},
"required": [
"workflow_id",
"active"
],
"title": "g8_appointments_toggle_workflowArguments",
"type": "object"
}

g8_appointments_update_availability

Replace weekly availability rules and/or date overrides for a schedule. Pass at least one. Each list REPLACES its counterpart entirely - pass all active entries, not just changed ones. Days: 1=Monday … 7=Sunday. Args: schedule_id: Schedule to update. availability: Replacement weekly rules [{days: [1..7], start_time: “HH:MM”, end_time: “HH:MM”}]. Omit to leave weekly rules unchanged. overrides: Replacement date overrides [{date: “YYYY-MM-DD”, start_time: “HH:MM”, end_time: “HH:MM”}]. Omit to leave overrides unchanged.

Inputs

InputRequiredTypeDescription
schedule_idYesintegerSee the schema below for constraints and defaults.
availabilityNoarray / nullSee the schema below for constraints and defaults.
overridesNoarray / nullSee the schema below for constraints and defaults.
Complete input schema
{
"properties": {
"schedule_id": {
"title": "Schedule Id",
"type": "integer"
},
"availability": {
"anyOf": [
{
"items": {
"additionalProperties": true,
"type": "object"
},
"type": "array"
},
{
"type": "null"
}
],
"default": null,
"title": "Availability"
},
"overrides": {
"anyOf": [
{
"items": {
"additionalProperties": true,
"type": "object"
},
"type": "array"
},
{
"type": "null"
}
],
"default": null,
"title": "Overrides"
}
},
"required": [
"schedule_id"
],
"title": "g8_appointments_update_availabilityArguments",
"type": "object"
}

g8_appointments_update_booking_location

Update the meeting location for a booking. Sends location-updated emails to both the host and attendee. Args: booking_uid: Booking UID to update. location: New location key (“zoom”, “google_meet”, “in_person”) or a custom URL.

Inputs

InputRequiredTypeDescription
booking_uidYesstringSee the schema below for constraints and defaults.
locationYesstringSee the schema below for constraints and defaults.
Complete input schema
{
"properties": {
"booking_uid": {
"title": "Booking Uid",
"type": "string"
},
"location": {
"title": "Location",
"type": "string"
}
},
"required": [
"booking_uid",
"location"
],
"title": "g8_appointments_update_booking_locationArguments",
"type": "object"
}

g8_appointments_update_booking_sequence

Associate a booking with a sequencer sequence, or detach it. CRM-only action: no notifications are sent. Pass null or omit to detach. Args: booking_uid: Booking UID to update. sequence_id: Sequence UUID to link (from g8_list_sequences), or null to detach.

Inputs

InputRequiredTypeDescription
booking_uidYesstringSee the schema below for constraints and defaults.
sequence_idNostring / nullSee the schema below for constraints and defaults.
Complete input schema
{
"properties": {
"booking_uid": {
"title": "Booking Uid",
"type": "string"
},
"sequence_id": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"title": "Sequence Id"
}
},
"required": [
"booking_uid"
],
"title": "g8_appointments_update_booking_sequenceArguments",
"type": "object"
}

g8_appointments_update_event_type

Update an event type. Only the fields you pass are changed; omit a field to leave it as-is. Args: event_type_id: The event type to update (from g8_appointments_list_event_types). title: New display name. slug: New URL slug (must stay unique in the org). length: New duration in minutes. description: New description. scheduling_type: “collective” | “round_robin”. schedule_id: Attach a different availability schedule. hidden: True hides the event type; False makes it publicly bookable. requires_confirmation: Toggle host-approval requirement. minimum_booking_notice: Minutes of lead time required before a slot. locations: Replace the location/conferencing config. booking_fields: Replace the custom booking questions.

Inputs

InputRequiredTypeDescription
event_type_idYesintegerSee the schema below for constraints and defaults.
titleNostring / nullSee the schema below for constraints and defaults.
slugNostring / nullSee the schema below for constraints and defaults.
lengthNointeger / nullSee the schema below for constraints and defaults.
descriptionNostring / nullSee the schema below for constraints and defaults.
scheduling_typeNostring / nullSee the schema below for constraints and defaults.
schedule_idNointeger / nullSee the schema below for constraints and defaults.
hiddenNoboolean / nullSee the schema below for constraints and defaults.
requires_confirmationNoboolean / nullSee the schema below for constraints and defaults.
minimum_booking_noticeNointeger / nullSee the schema below for constraints and defaults.
locationsNoarray / nullSee the schema below for constraints and defaults.
booking_fieldsNoarray / nullSee the schema below for constraints and defaults.
Complete input schema
{
"properties": {
"event_type_id": {
"title": "Event Type Id",
"type": "integer"
},
"title": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"title": "Title"
},
"slug": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"title": "Slug"
},
"length": {
"anyOf": [
{
"type": "integer"
},
{
"type": "null"
}
],
"default": null,
"title": "Length"
},
"description": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"title": "Description"
},
"scheduling_type": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"title": "Scheduling Type"
},
"schedule_id": {
"anyOf": [
{
"type": "integer"
},
{
"type": "null"
}
],
"default": null,
"title": "Schedule Id"
},
"hidden": {
"anyOf": [
{
"type": "boolean"
},
{
"type": "null"
}
],
"default": null,
"title": "Hidden"
},
"requires_confirmation": {
"anyOf": [
{
"type": "boolean"
},
{
"type": "null"
}
],
"default": null,
"title": "Requires Confirmation"
},
"minimum_booking_notice": {
"anyOf": [
{
"type": "integer"
},
{
"type": "null"
}
],
"default": null,
"title": "Minimum Booking Notice"
},
"locations": {
"anyOf": [
{
"items": {
"additionalProperties": true,
"type": "object"
},
"type": "array"
},
{
"type": "null"
}
],
"default": null,
"title": "Locations"
},
"booking_fields": {
"anyOf": [
{
"items": {
"additionalProperties": true,
"type": "object"
},
"type": "array"
},
{
"type": "null"
}
],
"default": null,
"title": "Booking Fields"
}
},
"required": [
"event_type_id"
],
"title": "g8_appointments_update_event_typeArguments",
"type": "object"
}

g8_appointments_update_ooo

Update an out-of-office entry. Uses the current organization and existing API permissions. Review the intended change and set confirm=true to execute; otherwise no API request is sent. API: PATCH /appointments/out-of-office/{ooo_uuid}

Inputs

InputRequiredTypeDescription
ooo_uuidYesstringUUID of the out-of-office entry to update.
bodyYes#/$defs/ApiUpdateOutOfOfficeRequestSee the schema below for constraints and defaults.
confirmNobooleanSee the schema below for constraints and defaults.
Complete input schema
{
"$defs": {
"ApiUpdateOutOfOfficeRequest": {
"additionalProperties": false,
"properties": {
"end": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"title": "End"
},
"notes": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"title": "Notes"
},
"public_note": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"title": "Public Note"
},
"reason": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"title": "Reason"
},
"start": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"title": "Start"
},
"time_zone": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"title": "Time Zone"
},
"to_user_id": {
"anyOf": [
{
"type": "integer"
},
{
"type": "null"
}
],
"default": null,
"title": "To User Id"
}
},
"title": "ApiUpdateOutOfOfficeRequest",
"type": "object"
}
},
"properties": {
"ooo_uuid": {
"description": "UUID of the out-of-office entry to update.",
"title": "Ooo Uuid",
"type": "string"
},
"body": {
"$ref": "#/$defs/ApiUpdateOutOfOfficeRequest"
},
"confirm": {
"default": false,
"title": "Confirm",
"type": "boolean"
}
},
"required": [
"ooo_uuid",
"body"
],
"title": "g8_appointments_update_oooArguments",
"type": "object"
}

g8_appointments_update_routing_form

Update a routing form. Only the fields you pass are changed; omit a parameter to leave it as-is. Passing fields or routes REPLACES the existing list atomically. slug must be unique in the org (409 on collision). disabled=True pauses the form without deleting it. Args: form_id: The routing form to update. name: New display name. slug: New URL slug (must be unique in the org). description: New description. disabled: True pauses the form; False re-enables it. fields: Replacement field list (replaces all existing fields). routes: Replacement route list (replaces all existing routes).

Inputs

InputRequiredTypeDescription
form_idYesintegerSee the schema below for constraints and defaults.
nameNostring / nullSee the schema below for constraints and defaults.
slugNostring / nullSee the schema below for constraints and defaults.
descriptionNostring / nullSee the schema below for constraints and defaults.
disabledNoboolean / nullSee the schema below for constraints and defaults.
fieldsNoarray / nullSee the schema below for constraints and defaults.
routesNoarray / nullSee the schema below for constraints and defaults.
Complete input schema
{
"properties": {
"form_id": {
"title": "Form Id",
"type": "integer"
},
"name": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"title": "Name"
},
"slug": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"title": "Slug"
},
"description": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"title": "Description"
},
"disabled": {
"anyOf": [
{
"type": "boolean"
},
{
"type": "null"
}
],
"default": null,
"title": "Disabled"
},
"fields": {
"anyOf": [
{
"items": {
"additionalProperties": true,
"type": "object"
},
"type": "array"
},
{
"type": "null"
}
],
"default": null,
"title": "Fields"
},
"routes": {
"anyOf": [
{
"items": {
"additionalProperties": true,
"type": "object"
},
"type": "array"
},
{
"type": "null"
}
],
"default": null,
"title": "Routes"
}
},
"required": [
"form_id"
],
"title": "g8_appointments_update_routing_formArguments",
"type": "object"
}

g8_appointments_update_schedule

Partial update of an availability schedule. Omit a field to leave it as-is. availability and overrides each REPLACE all entries when passed. Args: schedule_id: Schedule to update. name: New display name. time_zone: New IANA timezone string. is_default: True to set as the caller’s default schedule. availability: Replacement weekly rules [{days, start_time, end_time}]. overrides: Replacement date overrides [{date, start_time, end_time}].

Inputs

InputRequiredTypeDescription
schedule_idYesintegerSee the schema below for constraints and defaults.
nameNostring / nullSee the schema below for constraints and defaults.
time_zoneNostring / nullSee the schema below for constraints and defaults.
is_defaultNoboolean / nullSee the schema below for constraints and defaults.
availabilityNoarray / nullSee the schema below for constraints and defaults.
overridesNoarray / nullSee the schema below for constraints and defaults.
Complete input schema
{
"properties": {
"schedule_id": {
"title": "Schedule Id",
"type": "integer"
},
"name": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"title": "Name"
},
"time_zone": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"title": "Time Zone"
},
"is_default": {
"anyOf": [
{
"type": "boolean"
},
{
"type": "null"
}
],
"default": null,
"title": "Is Default"
},
"availability": {
"anyOf": [
{
"items": {
"additionalProperties": true,
"type": "object"
},
"type": "array"
},
{
"type": "null"
}
],
"default": null,
"title": "Availability"
},
"overrides": {
"anyOf": [
{
"items": {
"additionalProperties": true,
"type": "object"
},
"type": "array"
},
{
"type": "null"
}
],
"default": null,
"title": "Overrides"
}
},
"required": [
"schedule_id"
],
"title": "g8_appointments_update_scheduleArguments",
"type": "object"
}

g8_appointments_update_workflow

Update a workflow. Only the fields you pass are changed; omit a field to leave it as-is. Passing steps replaces all existing steps; passing event_type_ids replaces all links. Args: workflow_id: The workflow to update (from g8_appointments_list_workflows). name: New display name. trigger: New trigger type. steps: New steps list (replaces all existing steps when provided). time: New time value for time-based triggers. time_unit: New time unit for time-based triggers. is_active_on_all: Toggle org-wide application. event_type_ids: New list of event type IDs to link (replaces existing links).

Inputs

InputRequiredTypeDescription
workflow_idYesintegerSee the schema below for constraints and defaults.
nameNostring / nullSee the schema below for constraints and defaults.
triggerNostring / nullSee the schema below for constraints and defaults.
stepsNoarray / nullSee the schema below for constraints and defaults.
timeNointeger / nullSee the schema below for constraints and defaults.
time_unitNostring / nullSee the schema below for constraints and defaults.
is_active_on_allNoboolean / nullSee the schema below for constraints and defaults.
event_type_idsNoarray / nullSee the schema below for constraints and defaults.
Complete input schema
{
"properties": {
"workflow_id": {
"title": "Workflow Id",
"type": "integer"
},
"name": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"title": "Name"
},
"trigger": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"title": "Trigger"
},
"steps": {
"anyOf": [
{
"items": {
"additionalProperties": true,
"type": "object"
},
"type": "array"
},
{
"type": "null"
}
],
"default": null,
"title": "Steps"
},
"time": {
"anyOf": [
{
"type": "integer"
},
{
"type": "null"
}
],
"default": null,
"title": "Time"
},
"time_unit": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"title": "Time Unit"
},
"is_active_on_all": {
"anyOf": [
{
"type": "boolean"
},
{
"type": "null"
}
],
"default": null,
"title": "Is Active On All"
},
"event_type_ids": {
"anyOf": [
{
"items": {
"type": "integer"
},
"type": "array"
},
{
"type": "null"
}
],
"default": null,
"title": "Event Type Ids"
}
},
"required": [
"workflow_id"
],
"title": "g8_appointments_update_workflowArguments",
"type": "object"
}

g8_assign_reply

Assign a user to an inbox thread. Args: reply_id: Thread/reply ID. assignee_email: Email of the user to assign. channel: email, sms, or linkedin (default email).

Inputs

InputRequiredTypeDescription
reply_idYesstringSee the schema below for constraints and defaults.
assignee_emailYesstringSee the schema below for constraints and defaults.
channelNostringSee the schema below for constraints and defaults.
Complete input schema
{
"properties": {
"reply_id": {
"title": "Reply Id",
"type": "string"
},
"assignee_email": {
"title": "Assignee Email",
"type": "string"
},
"channel": {
"default": "email",
"title": "Channel",
"type": "string"
}
},
"required": [
"reply_id",
"assignee_email"
],
"title": "g8_assign_replyArguments",
"type": "object"
}

g8_assign_task_executor

Save an eligible Work agent assignment without starting execution. Keep the task’s human assignee accountable. Omit agent_id to return to human execution. Read the task first and supply its updated_at value.

Inputs

InputRequiredTypeDescription
task_idYesstringSee the schema below for constraints and defaults.
expected_updated_atYesstringSee the schema below for constraints and defaults.
agent_idNostring / nullSee the schema below for constraints and defaults.
Complete input schema
{
"properties": {
"task_id": {
"title": "Task Id",
"type": "string"
},
"expected_updated_at": {
"title": "Expected Updated At",
"type": "string"
},
"agent_id": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"title": "Agent Id"
}
},
"required": [
"task_id",
"expected_updated_at"
],
"title": "g8_assign_task_executorArguments",
"type": "object"
}

g8_audit_list_request_logs

List Request Logs. Uses the current organization and existing API permissions. API: GET /logs

Inputs

InputRequiredTypeDescription
limitNointeger / nullMax entries to return (most recent first)
Complete input schema
{
"properties": {
"limit": {
"anyOf": [
{
"maximum": 200,
"minimum": 1,
"type": "integer"
},
{
"type": "null"
}
],
"default": null,
"description": "Max entries to return (most recent first)",
"title": "Limit"
}
},
"title": "g8_audit_list_request_logsArguments",
"type": "object"
}

g8_cancel_booking

Cancel a booking and notify both parties. This sends cancellation emails and frees the slot - confirm with the user first. Args: booking_uid: Booking UID to cancel. cancellation_reason: Optional reason shown in the notification. cancel_subsequent: For recurring bookings, also cancel later occurrences (default False).

Inputs

InputRequiredTypeDescription
booking_uidYesstringSee the schema below for constraints and defaults.
cancellation_reasonNostring / nullSee the schema below for constraints and defaults.
cancel_subsequentNobooleanSee the schema below for constraints and defaults.
Complete input schema
{
"properties": {
"booking_uid": {
"title": "Booking Uid",
"type": "string"
},
"cancellation_reason": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"title": "Cancellation Reason"
},
"cancel_subsequent": {
"default": false,
"title": "Cancel Subsequent",
"type": "boolean"
}
},
"required": [
"booking_uid"
],
"title": "g8_appointments_cancel_bookingArguments",
"type": "object"
}

g8_company_open_jobs

Find out what companies in your CRM are hiring for right now. A growth/buying signal: a company staffing up is a company with budget. Use it to prioritise accounts, time outreach, or open with a specific role they just posted. NOT related to g8_marketplace_create_job_post. That publishes an SDR role YOU are recruiting for onto the graph8 marketplace. This reads jobs OTHER companies are advertising. Same word, different data - if the user wants to hire someone, you want the marketplace tool, not this one. Pass CRM company ids (from g8_search_companies). Companies you don’t have ids for yet: search first, then call this. Free - reads an already-ingested corpus, no credits. Results split into items (resolved) and unresolved. An unresolved company is normal - it means we couldn’t match it to a LinkedIn company page, not that it isn’t hiring. open_jobs: 0 means resolved and genuinely hiring nobody. Read lcid_confidence before trusting a match: 1.0 is an exact LinkedIn-URL match, 0.7 is a domain fallback that can mismatch on shared or parked domains. And note open_jobs counts postings seen within window_days - the source has no open/closed state, so a filled role lingers until it ages out. Args: company_ids: CRM company ids (max 200). NOT LinkedIn ids. window_days: How far back to look for postings (1-365, default 60). include_postings: False returns counts only - faster, use when you just need to rank accounts by hiring activity. limit_per_company: Max postings per company (1-50, default 25).

Inputs

InputRequiredTypeDescription
company_idsYesarraySee the schema below for constraints and defaults.
window_daysNointegerSee the schema below for constraints and defaults.
include_postingsNobooleanSee the schema below for constraints and defaults.
limit_per_companyNointegerSee the schema below for constraints and defaults.
Complete input schema
{
"properties": {
"company_ids": {
"items": {
"type": "integer"
},
"title": "Company Ids",
"type": "array"
},
"window_days": {
"default": 60,
"title": "Window Days",
"type": "integer"
},
"include_postings": {
"default": true,
"title": "Include Postings",
"type": "boolean"
},
"limit_per_company": {
"default": 25,
"title": "Limit Per Company",
"type": "integer"
}
},
"required": [
"company_ids"
],
"title": "g8_company_open_jobsArguments",
"type": "object"
}

g8_connect_repo

Connect a GitHub/GitLab repository to graph8 for GTM automation. After connecting, read the tech stack yourself and record it with g8_scan_repo. graph8 does not scan the repository for you. Args: repo_url: Full repository URL (e.g. https://github.com/org/repo) repo_name: Short name for the repo (e.g. my-saas-app) provider: Repository provider - github, gitlab, or local default_branch: Default branch name (usually main)

Inputs

InputRequiredTypeDescription
repo_urlYesstringSee the schema below for constraints and defaults.
repo_nameYesstringSee the schema below for constraints and defaults.
providerNostringSee the schema below for constraints and defaults.
default_branchNostringSee the schema below for constraints and defaults.
Complete input schema
{
"properties": {
"repo_url": {
"title": "Repo Url",
"type": "string"
},
"repo_name": {
"title": "Repo Name",
"type": "string"
},
"provider": {
"default": "github",
"title": "Provider",
"type": "string"
},
"default_branch": {
"default": "main",
"title": "Default Branch",
"type": "string"
}
},
"required": [
"repo_url",
"repo_name"
],
"title": "g8_connect_repoArguments",
"type": "object"
}

g8_connection_describe_current_key

Describe the API connection this session is using. By default: who the key belongs to, the org it acts for, the scopes it carries and the operations those reach. That is the answer to “why did that call 403?” - compare the failing operation against what comes back here. Two opt-in extras, both reads: - include_org_keys: every API key in the org - id, name, mode, scopes, who created it and when it was last used. Secrets are never returned by any of these routes; a token is emitted only at creation and rotation, neither of which is available here. Use it to find a key nobody uses any more, or to see which key a teammate’s integration is running on. - include_scope_catalog: the full scope vocabulary a key CAN be granted, plus the default grant. Wider than the scope list on this key, and wider than the operations above: several scopes exist only in this catalog because their routes gate themselves, so this is the only place to see them. Each extra costs one additional request, so leave them off unless the question needs them. API: GET /me (plus GET /api-keys and GET /api-keys/scopes when the flags are set).

Inputs

InputRequiredTypeDescription
include_org_keysNobooleanSee the schema below for constraints and defaults.
include_scope_catalogNobooleanSee the schema below for constraints and defaults.
Complete input schema
{
"properties": {
"include_org_keys": {
"default": false,
"title": "Include Org Keys",
"type": "boolean"
},
"include_scope_catalog": {
"default": false,
"title": "Include Scope Catalog",
"type": "boolean"
}
},
"title": "g8_connection_describe_current_keyArguments",
"type": "object"
}

g8_connection_get_mcp_connection

Get Mcp Connection. Uses the current organization and existing API permissions. API: GET /mcp/connection

Inputs

InputRequiredTypeDescription
NoneNoNo user-supplied inputs.
Complete input schema
{
"properties": {},
"title": "g8_connection_get_mcp_connectionArguments",
"type": "object"
}

g8_connection_revoke_api_key

Revoke one of the org’s API keys, permanently. The key stops working immediately and its token cannot be recovered - anything running on it breaks until someone issues a new key in the app and redeploys. There is no un-revoke. Check last_used_at first with g8_connection_describe_current_key(include_org_keys=True): a key used in the last few minutes is almost certainly load-bearing. Note the list does not say WHICH key this session is using, so revoking the wrong row can end the session’s own access. A key id that is not in this org returns not-found, the same as one that was already revoked. Args: api_key_id: From include_org_keys above. confirm: Must be true. Without it no request is sent. API: DELETE /api-keys/{api_key_id}

Inputs

InputRequiredTypeDescription
api_key_idYesstringSee the schema below for constraints and defaults.
confirmNobooleanSee the schema below for constraints and defaults.
Complete input schema
{
"properties": {
"api_key_id": {
"title": "Api Key Id",
"type": "string"
},
"confirm": {
"default": false,
"title": "Confirm",
"type": "boolean"
}
},
"required": [
"api_key_id"
],
"title": "g8_connection_revoke_api_keyArguments",
"type": "object"
}

g8_contact_support

Send the user’s message to graph8’s HUMAN support team. Use this when the user explicitly asks to talk to a human, contact graph8 support, report a problem you cannot solve, or file a complaint about the graph8 platform. Do NOT use it for questions you can answer yourself with the other tools. How the reply works: graph8 support is notified immediately and replies by EMAIL to the user’s own address (or to contact_email when provided). After calling, tell the user which address the reply will go to - it is in the response. There is no live chat behind this tool. Duplicate handling: a repeat call within a few minutes returns status “already_received” - the team was already notified, so do NOT retry or call again for the same issue. Args: message: What the user needs help with, in their own words. Include relevant context (what they tried, error messages, which feature). 3 to 5000 characters. contact_email: Where support should reply. Usually omit it - the authenticated user’s email is used. REQUIRED when the server says the API key has no user email (org-scoped machine key): ask the user for their email and retry with it. urgency: Optional free-form urgency hint, e.g. “normal”, “high”, “urgent”. Urgent-flavored values are flagged to the team.

Inputs

InputRequiredTypeDescription
messageYesstringSee the schema below for constraints and defaults.
contact_emailNostring / nullSee the schema below for constraints and defaults.
urgencyNostring / nullSee the schema below for constraints and defaults.
Complete input schema
{
"properties": {
"message": {
"title": "Message",
"type": "string"
},
"contact_email": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"title": "Contact Email"
},
"urgency": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"title": "Urgency"
}
},
"required": [
"message"
],
"title": "g8_contact_supportArguments",
"type": "object"
}

g8_copy_task_to_people

Create a separate human task for each selected person; leave the source unchanged. Read the source first and pass its updated_at revision. request_id is a UUID that MUST be reused after any uncertain result or partial failure. Retry only failed recipients with the same request_id and revision. The response separates copied task IDs from recipient failures. Copies exclude execution/approval history, comments, subtasks and reminders. This does not start any agent execution.

Inputs

InputRequiredTypeDescription
task_idYesstringSee the schema below for constraints and defaults.
assignee_idsYesarraySee the schema below for constraints and defaults.
expected_updated_atYesstringSee the schema below for constraints and defaults.
request_idYesstringSee the schema below for constraints and defaults.
Complete input schema
{
"properties": {
"task_id": {
"title": "Task Id",
"type": "string"
},
"assignee_ids": {
"items": {
"type": "string"
},
"title": "Assignee Ids",
"type": "array"
},
"expected_updated_at": {
"title": "Expected Updated At",
"type": "string"
},
"request_id": {
"title": "Request Id",
"type": "string"
}
},
"required": [
"task_id",
"assignee_ids",
"expected_updated_at",
"request_id"
],
"title": "g8_copy_task_to_peopleArguments",
"type": "object"
}

g8_create_audience_sync

Create an audience sync config: syncs a graph8 audience list to an ad platform for custom audience targeting. Returns 409 if a sync already exists for this audience + platform combo. Args: audience_id: Audience list ID to sync platform: Ad platform (meta, linkedin, google, x) mode: Sync mode - “mirror” (add+remove) or “append_only” (add only) refresh_cadence_hours: Hours between auto-syncs (default 24) platform_audience_name: Custom name for the audience on the platform

Inputs

InputRequiredTypeDescription
audience_idYesintegerSee the schema below for constraints and defaults.
platformYesstringSee the schema below for constraints and defaults.
modeNostringSee the schema below for constraints and defaults.
refresh_cadence_hoursNointegerSee the schema below for constraints and defaults.
platform_audience_nameNostring / nullSee the schema below for constraints and defaults.
Complete input schema
{
"properties": {
"audience_id": {
"title": "Audience Id",
"type": "integer"
},
"platform": {
"title": "Platform",
"type": "string"
},
"mode": {
"default": "mirror",
"title": "Mode",
"type": "string"
},
"refresh_cadence_hours": {
"default": 24,
"title": "Refresh Cadence Hours",
"type": "integer"
},
"platform_audience_name": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"title": "Platform Audience Name"
}
},
"required": [
"audience_id",
"platform"
],
"title": "g8_create_audience_syncArguments",
"type": "object"
}

g8_create_booking

Book an appointment. CHARGES CREDITS (~20) and sends calendar invites + confirmation emails to attendee and host. ALWAYS confirm event type, time, and attendee with the user first - billable, externally-visible. Resolve event_type_id via g8_appointments_list_event_types and inspect it with g8_appointments_get_event_type first (duration + required booking_fields). start_time must be an available slot; end_time derives from the event-type length when omitted. Args: event_type_id: The event type to book. start_time: ISO-8601 start (e.g. “2026-06-10T15:00:00Z”). attendee_name: Primary attendee’s name. attendee_email: Primary attendee’s email. attendee_time_zone: IANA tz for the attendee (e.g. “America/New_York”). end_time: ISO-8601 end. Omit to use the event-type duration. location: Location/conferencing key (e.g. “zoom”, “google_meet”). guests: Additional guest email addresses to invite. responses: Answers to the event type’s custom booking_fields, keyed by field id.

Inputs

InputRequiredTypeDescription
event_type_idYesintegerSee the schema below for constraints and defaults.
start_timeYesstringSee the schema below for constraints and defaults.
attendee_nameYesstringSee the schema below for constraints and defaults.
attendee_emailYesstringSee the schema below for constraints and defaults.
attendee_time_zoneNostring / nullSee the schema below for constraints and defaults.
end_timeNostring / nullSee the schema below for constraints and defaults.
locationNostring / nullSee the schema below for constraints and defaults.
guestsNoarray / nullSee the schema below for constraints and defaults.
responsesNoobject / nullSee the schema below for constraints and defaults.
Complete input schema
{
"properties": {
"event_type_id": {
"title": "Event Type Id",
"type": "integer"
},
"start_time": {
"title": "Start Time",
"type": "string"
},
"attendee_name": {
"title": "Attendee Name",
"type": "string"
},
"attendee_email": {
"title": "Attendee Email",
"type": "string"
},
"attendee_time_zone": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"title": "Attendee Time Zone"
},
"end_time": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"title": "End Time"
},
"location": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"title": "Location"
},
"guests": {
"anyOf": [
{
"items": {
"type": "string"
},
"type": "array"
},
{
"type": "null"
}
],
"default": null,
"title": "Guests"
},
"responses": {
"anyOf": [
{
"additionalProperties": true,
"type": "object"
},
{
"type": "null"
}
],
"default": null,
"title": "Responses"
}
},
"required": [
"event_type_id",
"start_time",
"attendee_name",
"attendee_email"
],
"title": "g8_appointments_create_bookingArguments",
"type": "object"
}

g8_create_company

Create a company in your CRM. domain is required (e.g. “acme.com”); it drives dedup, so creating the same domain twice reuses the existing company rather than making a duplicate. Returns the new company_id (mashup_companies.id). Use this to add a company that isn’t in your CRM yet and then attach it to a contact: create it here, then call g8_update_contact(contact_id=…, company_id=<company_id>). A deal can then derive its company from that contact. Args: domain: Company domain, e.g. “acme.com” (required). name: Company name. website, industry, linkedin_url, phone, city, state, country, employee_count: Optional company details. list_id: Optionally add the company to this list after creation. Backed by POST /api/v1/companies.

Inputs

InputRequiredTypeDescription
domainYesstringSee the schema below for constraints and defaults.
nameNostring / nullSee the schema below for constraints and defaults.
websiteNostring / nullSee the schema below for constraints and defaults.
industryNostring / nullSee the schema below for constraints and defaults.
linkedin_urlNostring / nullSee the schema below for constraints and defaults.
phoneNostring / nullSee the schema below for constraints and defaults.
cityNostring / nullSee the schema below for constraints and defaults.
stateNostring / nullSee the schema below for constraints and defaults.
countryNostring / nullSee the schema below for constraints and defaults.
employee_countNostring / nullSee the schema below for constraints and defaults.
list_idNointeger / nullSee the schema below for constraints and defaults.
Complete input schema
{
"properties": {
"domain": {
"title": "Domain",
"type": "string"
},
"name": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"title": "Name"
},
"website": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"title": "Website"
},
"industry": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"title": "Industry"
},
"linkedin_url": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"title": "Linkedin Url"
},
"phone": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"title": "Phone"
},
"city": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"title": "City"
},
"state": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"title": "State"
},
"country": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"title": "Country"
},
"employee_count": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"title": "Employee Count"
},
"list_id": {
"anyOf": [
{
"type": "integer"
},
{
"type": "null"
}
],
"default": null,
"title": "List Id"
}
},
"required": [
"domain"
],
"title": "g8_create_companyArguments",
"type": "object"
}

g8_create_contact

Create a contact in your CRM database. Use this after g8_lookup_person to save a prospect you want to track, or to manually add a contact you know about. Optionally add them directly to a list by providing list_id. Returns the new contact_id (needed for g8_add_to_sequence and g8_add_to_list). Args: work_email: Contact’s work email (required) first_name: First name last_name: Last name job_title: Job title company_domain: Company domain (e.g. acme.com) to resolve-or-create company_id: Existing company id (mashup_companies.id) to attach; wins over company_domain linkedin_url: LinkedIn profile URL direct_phone: Direct phone number mobile_phone: Mobile phone number seniority_level: Seniority level (C-Suite, VP, Director, Manager, etc.) city: City state: State/province country: Country list_id: Optionally add to this list immediately (from g8_create_list)

Inputs

InputRequiredTypeDescription
work_emailYesstringSee the schema below for constraints and defaults.
first_nameNostring / nullSee the schema below for constraints and defaults.
last_nameNostring / nullSee the schema below for constraints and defaults.
job_titleNostring / nullSee the schema below for constraints and defaults.
company_domainNostring / nullSee the schema below for constraints and defaults.
company_idNointeger / nullSee the schema below for constraints and defaults.
linkedin_urlNostring / nullSee the schema below for constraints and defaults.
direct_phoneNostring / nullSee the schema below for constraints and defaults.
mobile_phoneNostring / nullSee the schema below for constraints and defaults.
seniority_levelNostring / nullSee the schema below for constraints and defaults.
cityNostring / nullSee the schema below for constraints and defaults.
stateNostring / nullSee the schema below for constraints and defaults.
countryNostring / nullSee the schema below for constraints and defaults.
list_idNointeger / nullSee the schema below for constraints and defaults.
Complete input schema
{
"properties": {
"work_email": {
"title": "Work Email",
"type": "string"
},
"first_name": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"title": "First Name"
},
"last_name": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"title": "Last Name"
},
"job_title": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"title": "Job Title"
},
"company_domain": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"title": "Company Domain"
},
"company_id": {
"anyOf": [
{
"type": "integer"
},
{
"type": "null"
}
],
"default": null,
"title": "Company Id"
},
"linkedin_url": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"title": "Linkedin Url"
},
"direct_phone": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"title": "Direct Phone"
},
"mobile_phone": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"title": "Mobile Phone"
},
"seniority_level": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"title": "Seniority Level"
},
"city": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"title": "City"
},
"state": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"title": "State"
},
"country": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"title": "Country"
},
"list_id": {
"anyOf": [
{
"type": "integer"
},
{
"type": "null"
}
],
"default": null,
"title": "List Id"
}
},
"required": [
"work_email"
],
"title": "g8_create_contactArguments",
"type": "object"
}

g8_create_deal

Create a new CRM deal. Requires an owner and at least one contact. A deal is always tied to a company, and the company is DERIVED from the contacts (every contact must belong to the same company, which becomes the deal’s company). You do not pass a company id. Defaults to the org’s default pipeline and its first non-closed stage when those are not provided. Backed by POST /api/v1/deals. By default this rejects (409) creating a second deal for a company that already has one. If you get that error and still want another deal for the company, retry with allow_duplicate=true. Closed-stage rules (400 on violation, detail prefixed with a marker): creating a deal directly in a Closed Won stage requires close_date AND amount; Closed Lost requires close_date; either requires an owner. Markers: close_date_required_for_won_stage, close_date_required_for_lost_stage, amount_required_for_won_stage, owner_required_for_closed_stage. Past close dates are allowed (backdating is a supported workflow). Args: name: Deal name (required). owner_id: Deal owner, user id or email (required). contact_ids: mashup_contact_ids to link (required, at least one). All must belong to the same company; that company becomes the deal’s company. Same id space as g8_search_contacts.id. Idempotent: already-linked contacts are skipped. company_id: Deprecated. The company is derived from the contacts. If provided it must match the contacts’ company, else omit it. description: Free-text description. amount: Monetary value. Required when creating directly in a Closed Won stage (0 is a valid amount). currency: Currency code (defaults to USD server-side). stage_id: Pipeline stage UUID (see g8_get_pipeline). Must exist (422 otherwise) and belong to pipeline_id when both are sent. pipeline_id: Pipeline UUID (defaults to org default). Must exist (422 otherwise). close_date: Expected close date (ISO 8601). Required when creating directly in a Closed Won or Closed Lost stage. allow_duplicate: Set true to create a deal even when one already exists for the company (default false).

Inputs

InputRequiredTypeDescription
nameYesstringSee the schema below for constraints and defaults.
owner_idYesstringSee the schema below for constraints and defaults.
contact_idsYesarraySee the schema below for constraints and defaults.
company_idNointeger / nullSee the schema below for constraints and defaults.
descriptionNostring / nullSee the schema below for constraints and defaults.
amountNonumber / nullSee the schema below for constraints and defaults.
currencyNostring / nullSee the schema below for constraints and defaults.
stage_idNostring / nullSee the schema below for constraints and defaults.
pipeline_idNostring / nullSee the schema below for constraints and defaults.
close_dateNostring / nullSee the schema below for constraints and defaults.
allow_duplicateNobooleanSee the schema below for constraints and defaults.
Complete input schema
{
"properties": {
"name": {
"title": "Name",
"type": "string"
},
"owner_id": {
"title": "Owner Id",
"type": "string"
},
"contact_ids": {
"items": {
"type": "integer"
},
"title": "Contact Ids",
"type": "array"
},
"company_id": {
"anyOf": [
{
"type": "integer"
},
{
"type": "null"
}
],
"default": null,
"title": "Company Id"
},
"description": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"title": "Description"
},
"amount": {
"anyOf": [
{
"type": "number"
},
{
"type": "null"
}
],
"default": null,
"title": "Amount"
},
"currency": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"title": "Currency"
},
"stage_id": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"title": "Stage Id"
},
"pipeline_id": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"title": "Pipeline Id"
},
"close_date": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"title": "Close Date"
},
"allow_duplicate": {
"default": false,
"title": "Allow Duplicate",
"type": "boolean"
}
},
"required": [
"name",
"owner_id",
"contact_ids"
],
"title": "g8_create_dealArguments",
"type": "object"
}

g8_create_field

Create a SINGLE custom column on contacts or companies. DEPRECATED - prefer g8_create_fields, which creates one OR many columns in one call. STRONGLY RECOMMENDED: pass enrichment_providers=[...] (and enrichment_email_verification=True for ZeroBounce email verification). Without them the column has NO enrichment pipeline, so the UI “Enrich” button and g8_enrich_contacts (waterfall mode) both fail with 422 until a pipeline is provisioned separately. Default to passing enrichment_providers unless the caller wants a placeholder column. When list_id is set the column is list-scoped; when omitted it is global across the org. list_id is REQUIRED when supplying enrichment_providers (waterfall pipelines are list-scoped). Only data_type="text" is supported today; unknown values 400. Allowed providers: graph8, hunter, prospeo, dropcontact, icypeas, leadmagic, emaillistverify, apollo, lusha, rocketreach. Response on success includes an enrichment block with the column_id slug to pass to g8_enrich_contacts (waterfall mode). Args: title: Column title shown in the UI (e.g. “Work Email”) entity: Target entity - “contacts” or “companies” (default: contacts) list_id: List ID to scope the column. Required when supplying enrichment_providers. data_type: Column data type (default: “text”) enrichment_providers: STRONGLY RECOMMENDED. Ordered list of provider names. When supplied, the new column ships with a runnable waterfall pipeline so the UI “Enrich” button works immediately. list_id becomes required. enrichment_email_verification: When True, the auto-provisioned pipeline bolts ZeroBounce email verification on after enrichment. Recommended for any email-finder column. Ignored unless a pipeline is provisioned. enrichment_name: Optional pipeline name. Defaults to "&lt;title&gt; Enrichment". enrichment_target_field: The KIND of data this column holds - “phone” / “mobile” / “email” / “linkedin” or a canonical CONTACT_/COMPANY_ column. Pass this whenever the column is for a phone/mobile/etc. so each provider runs the CORRECT action (phone -> leadmagic mobile_finder, not email_finder) - the same actions the UI’s “Add column -> Waterfall” picks. Combine with enrichment_providers to filter to those providers. Without it, enrichment_providers uses the legacy email-finder mapping.

Inputs

InputRequiredTypeDescription
titleYesstringSee the schema below for constraints and defaults.
entityNostringSee the schema below for constraints and defaults.
list_idNointeger / nullSee the schema below for constraints and defaults.
data_typeNostringSee the schema below for constraints and defaults.
enrichment_providersNoarray / nullSee the schema below for constraints and defaults.
enrichment_email_verificationNobooleanSee the schema below for constraints and defaults.
enrichment_nameNostring / nullSee the schema below for constraints and defaults.
enrichment_target_fieldNostring / nullSee the schema below for constraints and defaults.
Complete input schema
{
"properties": {
"title": {
"title": "Title",
"type": "string"
},
"entity": {
"default": "contacts",
"title": "Entity",
"type": "string"
},
"list_id": {
"anyOf": [
{
"type": "integer"
},
{
"type": "null"
}
],
"default": null,
"title": "List Id"
},
"data_type": {
"default": "text",
"title": "Data Type",
"type": "string"
},
"enrichment_providers": {
"anyOf": [
{
"items": {
"type": "string"
},
"type": "array"
},
{
"type": "null"
}
],
"default": null,
"title": "Enrichment Providers"
},
"enrichment_email_verification": {
"default": false,
"title": "Enrichment Email Verification",
"type": "boolean"
},
"enrichment_name": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"title": "Enrichment Name"
},
"enrichment_target_field": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"title": "Enrichment Target Field"
}
},
"required": [
"title"
],
"title": "g8_create_fieldArguments",
"type": "object"
}

g8_create_fields

Create one OR many custom columns on contacts or companies in a single call. The default field-creation tool (prefer over deprecated g8_create_field). fields is a list: one column or a batch, all created in one transaction with a single view rebuild. entity and list_id are SHARED across every column. Each entry is a dict: { “title”: “Phone Number”, # required “data_type”: “text”, # optional, default “text” “enrichment_target_field”: “phone”, # RECOMMENDED for phone/email/etc. “enrichment_providers”: [“leadmagic”], # optional waterfall (filters template) “enrichment_email_verification”: true, # optional, ZeroBounce (email cols) “enrichment_name”: “Phone Enrichment” # optional pipeline name } Per-column enrichment works like g8_create_field. Ship a runnable pipeline (else the UI “Enrich” button 422s) by passing either enrichment_target_field (RECOMMENDED - “phone”/“mobile”/“email”/ “linkedin” or a CONTACT_/COMPANY_ column, so each provider runs the CORRECT action: phone -> leadmagic mobile_finder, not email_finder) and/or enrichment_providers. list_id is REQUIRED whenever ANY column carries a pipeline. For email columns also set enrichment_email_verification: true. Allowed providers: graph8, hunter, prospeo, dropcontact, icypeas, leadmagic, emaillistverify, apollo, lusha, rocketreach. Validation is fail-fast: invalid data_type, duplicate titles, or a bad enrichment block rejects the whole request and creates NOTHING. On success the response includes total_created and a results[] array with each column’s id, name, and (if requested) its enrichment block carrying the column_id for g8_enrich_contacts. Args: fields: List of column specs (1-100). Each is a dict as shown above. entity: Target entity for ALL columns - “contacts” or “companies”. list_id: Shared list scope. REQUIRED if any field uses enrichment.

Inputs

InputRequiredTypeDescription
fieldsYesarraySee the schema below for constraints and defaults.
entityNostringSee the schema below for constraints and defaults.
list_idNointeger / nullSee the schema below for constraints and defaults.
Complete input schema
{
"properties": {
"fields": {
"items": {
"additionalProperties": true,
"type": "object"
},
"title": "Fields",
"type": "array"
},
"entity": {
"default": "contacts",
"title": "Entity",
"type": "string"
},
"list_id": {
"anyOf": [
{
"type": "integer"
},
{
"type": "null"
}
],
"default": null,
"title": "List Id"
}
},
"required": [
"fields"
],
"title": "g8_create_fieldsArguments",
"type": "object"
}

g8_create_list

Create a contact or company list, optionally pre-populated. Source modes (pass at most one; default = empty list): - contact_ids: list[int] - add existing CRM contacts to the new list (free) - rows: list[dict] - import explicit records (free; no enrichment). Each row may contain any of: first_name, last_name, work_email, job_title, company_domain, seniority_level, linkedin_url, city, state, country, personal_emails, direct_phone, mobile_phone, job_department. - filters: list[dict] - search + save from open data (free, no credits). Same shape as g8_find_contacts; max_results caps how many are saved. When filters or rows is supplied, call with dry_run=True first to get a ConfirmationPreview. Re-call with dry_run=False to execute. For contact_ids and the empty-list mode the cost is zero, but dry_run=True is still honored if the caller wants a preview. Returns the new list’s id on success. Backward compatible: with no source params this is identical to the original empty-list creator. Args: title: List name (e.g. “Enterprise Q2 Targets”) type: List type - “contacts” or “companies” (default: contacts) contact_ids: Optional CRM contact ids to attach to the new list. rows: Optional list of record dicts to import into the list. filters: Optional g8_find_contacts-style filters to search and save. max_results: Cap on records saved when filters is used (default 100). dry_run: When True, return a ConfirmationPreview instead of executing.

Inputs

InputRequiredTypeDescription
titleYesstringSee the schema below for constraints and defaults.
typeNostringSee the schema below for constraints and defaults.
contact_idsNoarray / nullSee the schema below for constraints and defaults.
rowsNoarray / nullSee the schema below for constraints and defaults.
filtersNoarray / nullSee the schema below for constraints and defaults.
max_resultsNointegerSee the schema below for constraints and defaults.
dry_runNobooleanSee the schema below for constraints and defaults.
Complete input schema
{
"properties": {
"title": {
"title": "Title",
"type": "string"
},
"type": {
"default": "contacts",
"title": "Type",
"type": "string"
},
"contact_ids": {
"anyOf": [
{
"items": {
"type": "integer"
},
"type": "array"
},
{
"type": "null"
}
],
"default": null,
"title": "Contact Ids"
},
"rows": {
"anyOf": [
{
"items": {
"additionalProperties": true,
"type": "object"
},
"type": "array"
},
{
"type": "null"
}
],
"default": null,
"title": "Rows"
},
"filters": {
"anyOf": [
{
"items": {
"additionalProperties": true,
"type": "object"
},
"type": "array"
},
{
"type": "null"
}
],
"default": null,
"title": "Filters"
},
"max_results": {
"default": 100,
"title": "Max Results",
"type": "integer"
},
"dry_run": {
"default": false,
"title": "Dry Run",
"type": "boolean"
}
},
"required": [
"title"
],
"title": "g8_create_listArguments",
"type": "object"
}

g8_create_note

Add a note to a CRM contact, COMPANY or DEAL. Notes are polymorphic in graph8: contacts, companies and deals all file notes into the same store, so this one tool covers all three. Pass exactly ONE of contact_id / company_id / deal_id - whichever record the note belongs to. Use deal_id for deal-room context (budget, next steps, decision criteria); there is no separate “deal note” tool to look for. Backed by POST /api/v1/&#123;contacts\|companies\|deals&#125;/&#123;id&#125;/notes. Args: content: Note body (plain text or markdown). An “@name” inside the body is parsed as a mention and NOTIFIES that teammate, so avoid stray ”@” text you did not mean as a ping. contact_id: Integer contact ID from g8_find_contacts. company_id: Integer company ID from g8_find_companies. deal_id: Deal UUID from g8_get_deals / g8_create_deal.

Inputs

InputRequiredTypeDescription
contentYesstringSee the schema below for constraints and defaults.
contact_idNointeger / nullSee the schema below for constraints and defaults.
company_idNointeger / nullSee the schema below for constraints and defaults.
deal_idNostring / nullSee the schema below for constraints and defaults.
Complete input schema
{
"properties": {
"content": {
"title": "Content",
"type": "string"
},
"contact_id": {
"anyOf": [
{
"type": "integer"
},
{
"type": "null"
}
],
"default": null,
"title": "Contact Id"
},
"company_id": {
"anyOf": [
{
"type": "integer"
},
{
"type": "null"
}
],
"default": null,
"title": "Company Id"
},
"deal_id": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"title": "Deal Id"
}
},
"required": [
"content"
],
"title": "g8_create_noteArguments",
"type": "object"
}

g8_create_quote

Create a new quote in draft status. Always creates, never sends. At least one of signer_contact_id or signer_email is required. line_items must be non-empty. Each line-item dict (see g8_list_quotable_products): stripe_product_id + stripe_price_id, OR manual_product_id, OR neither (custom one-off); plus product_name (required), description, quantity, unit_amount (cents), discount_pct, billing_frequency, start_month, billing_start_date, sort_order. Recurring billing starts at contract start by default (start_month=1). Use start_month=3 for after 2 months, up to 120, or billing_start_date (YYYY-MM-DD) for an exact date, keeping start_month=1. Dates must be within the contract. The two start options cannot be combined. Args: title: Quote title (1-500 chars). line_items: Non-empty list of line-item dicts. signer_contact_id: Contact id of the e-signature recipient. signer_email: Direct signer email (used if signer_contact_id is omitted). signer_name: Display name to render on the quote. billing_contact_id: Optional separate billing contact id. billing_legal_name: Customer legal entity name shown on the quote. billing_primary_email: Billing contact email. billing_email: Secondary billing email. billing_address: Billing address (max 2000 chars). owner_id: Quote owner/AE (user id or email). Defaults to the API caller; set it to attribute the quote to a real rep. mashup_company_id: Company the quote is for. deal_id: Deal UUID to attach to. template_id: Optional quote-settings template id for branding. currency: 3-letter ISO currency, default USD. payment_terms: One of due_on_receipt / net_15 / net_30 / net_45 / net_60 / net_90. valid_until: ISO date for quote expiration. terms_content: Inline terms markdown (max 50k chars). privacy_content: Inline privacy markdown (max 50k chars). notes: Private notes (max 10k chars). public_notes: Public notes shown to signer (max 10k chars). tax_amount: Total tax in cents (default 0). contract_months: Month-equivalent for reporting/MRR, accepts fractions. contract_duration_value / contract_duration_unit: Exact term, e.g. 6 + weeks or 42 + days. contract_start_date / contract_end_date: ISO dates for contract window. accepted_payment_methods: Any subset of [ach, credit_card, wire]. marketing_rights: Any subset of [logo, quote, case_study].

Inputs

InputRequiredTypeDescription
titleYesstringSee the schema below for constraints and defaults.
line_itemsYesarraySee the schema below for constraints and defaults.
signer_contact_idNointeger / nullSee the schema below for constraints and defaults.
signer_emailNostring / nullSee the schema below for constraints and defaults.
signer_nameNostring / nullSee the schema below for constraints and defaults.
billing_contact_idNointeger / nullSee the schema below for constraints and defaults.
billing_legal_nameNostring / nullSee the schema below for constraints and defaults.
billing_primary_emailNostring / nullSee the schema below for constraints and defaults.
billing_emailNostring / nullSee the schema below for constraints and defaults.
billing_addressNostring / nullSee the schema below for constraints and defaults.
mashup_company_idNointeger / nullSee the schema below for constraints and defaults.
deal_idNostring / nullSee the schema below for constraints and defaults.
owner_idNostring / nullSee the schema below for constraints and defaults.
template_idNostring / nullSee the schema below for constraints and defaults.
currencyNostringSee the schema below for constraints and defaults.
payment_termsNostringSee the schema below for constraints and defaults.
valid_untilNostring / nullSee the schema below for constraints and defaults.
terms_contentNostring / nullSee the schema below for constraints and defaults.
privacy_contentNostring / nullSee the schema below for constraints and defaults.
notesNostring / nullSee the schema below for constraints and defaults.
public_notesNostring / nullSee the schema below for constraints and defaults.
tax_amountNointegerSee the schema below for constraints and defaults.
contract_monthsNonumber / nullSee the schema below for constraints and defaults.
contract_duration_valueNonumber / nullSee the schema below for constraints and defaults.
contract_duration_unitNostring / nullSee the schema below for constraints and defaults.
contract_start_dateNostring / nullSee the schema below for constraints and defaults.
contract_end_dateNostring / nullSee the schema below for constraints and defaults.
accepted_payment_methodsNoarray / nullSee the schema below for constraints and defaults.
marketing_rightsNoarray / nullSee the schema below for constraints and defaults.
Complete input schema
{
"properties": {
"title": {
"title": "Title",
"type": "string"
},
"line_items": {
"items": {
"additionalProperties": true,
"type": "object"
},
"title": "Line Items",
"type": "array"
},
"signer_contact_id": {
"anyOf": [
{
"type": "integer"
},
{
"type": "null"
}
],
"default": null,
"title": "Signer Contact Id"
},
"signer_email": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"title": "Signer Email"
},
"signer_name": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"title": "Signer Name"
},
"billing_contact_id": {
"anyOf": [
{
"type": "integer"
},
{
"type": "null"
}
],
"default": null,
"title": "Billing Contact Id"
},
"billing_legal_name": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"title": "Billing Legal Name"
},
"billing_primary_email": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"title": "Billing Primary Email"
},
"billing_email": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"title": "Billing Email"
},
"billing_address": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"title": "Billing Address"
},
"mashup_company_id": {
"anyOf": [
{
"type": "integer"
},
{
"type": "null"
}
],
"default": null,
"title": "Mashup Company Id"
},
"deal_id": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"title": "Deal Id"
},
"owner_id": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"title": "Owner Id"
},
"template_id": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"title": "Template Id"
},
"currency": {
"default": "USD",
"title": "Currency",
"type": "string"
},
"payment_terms": {
"default": "net_30",
"title": "Payment Terms",
"type": "string"
},
"valid_until": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"title": "Valid Until"
},
"terms_content": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"title": "Terms Content"
},
"privacy_content": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"title": "Privacy Content"
},
"notes": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"title": "Notes"
},
"public_notes": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"title": "Public Notes"
},
"tax_amount": {
"default": 0,
"title": "Tax Amount",
"type": "integer"
},
"contract_months": {
"anyOf": [
{
"type": "number"
},
{
"type": "null"
}
],
"default": null,
"title": "Contract Months"
},
"contract_duration_value": {
"anyOf": [
{
"type": "number"
},
{
"type": "null"
}
],
"default": null,
"title": "Contract Duration Value"
},
"contract_duration_unit": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"title": "Contract Duration Unit"
},
"contract_start_date": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"title": "Contract Start Date"
},
"contract_end_date": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"title": "Contract End Date"
},
"accepted_payment_methods": {
"anyOf": [
{
"items": {
"type": "string"
},
"type": "array"
},
{
"type": "null"
}
],
"default": null,
"title": "Accepted Payment Methods"
},
"marketing_rights": {
"anyOf": [
{
"items": {
"type": "string"
},
"type": "array"
},
{
"type": "null"
}
],
"default": null,
"title": "Marketing Rights"
}
},
"required": [
"title",
"line_items"
],
"title": "g8_create_quoteArguments",
"type": "object"
}

g8_create_sequence

Create a new outbound sequence (drafted state). Confirm with the user before calling - this creates a real sequence. A “nurture” is a sequence with sequence_kind=“nurture”: same step types and structure, but pinned to one mailbox (pinned_mailbox_id) with a higher daily email cap. There is no separate nurture tool - pass sequence_kind=“nurture” plus pinned_mailbox_id here. Args: name: Sequence name user_email: Owner email description: Optional description finish_on_reply: Stop contacting on reply (default true) send_in_same_thread: Send follow-ups in same email thread wait_for_new_contacts: Keep sequence open for late-arriving contacts associated_list_id: Contact list ID to attach to the sequence (use g8_get_lists to find) steps: Sequence steps. Each item is a dict with: - step_order (int, 1-based) - step_type (str): one of EMAIL, PHONE, SMS, WHATSAPP, HEYREACH, MANUAL_DIALER. Note: LinkedIn outreach uses HEYREACH, not LINKEDIN. Case-insensitive. - input_type (str, default ON_DEMAND): one of ON_DEMAND, MANUAL_TEMPLATE, AI_GENERATED_TEMPLATE. Case-insensitive (e.g. ‘template’ -> MANUAL_TEMPLATE). - time_interval (int, seconds delay after previous step) - step_data (dict): EMAIL needs {subject, body}; SMS/WHATSAPP need {message_body}; HEYREACH needs {linkedin_action_type, …}; ON_DEMAND can use {instructions}. channels: Channels to attach. Each item is a dict with: - channel_id (int): mailbox/phone resource ID - channel_value (str): email address, phone number, etc. - channel_type (str): one of SMTP, GMAIL, INBOXKIT, PHONE, LINKEDIN, SMS, WHATSAPP. campaign_id: AI Studio campaign ID to link (optional) sequence_kind: Sequence kind, ‘cold_outbound’ (default) or ‘nurture’. Use ‘nurture’ for high-volume, single-mailbox nurture sends. Immutable after creation. pinned_mailbox_id: Mailbox ID to pin for nurture sequences. REQUIRED when sequence_kind=‘nurture’; all email channels must use this mailbox. Ignored for cold_outbound. (Nurture is gated by the ENABLE_NURTURE feature flag.) Example minimal email sequence: steps=[ {“step_order”: 1, “step_type”: “EMAIL”, “input_type”: “MANUAL_TEMPLATE”, “time_interval”: 0, “step_data”: {“subject”: “Hi {{first_name}}”, “body”: “Quick intro…”}}, {“step_order”: 2, “step_type”: “EMAIL”, “input_type”: “MANUAL_TEMPLATE”, “time_interval”: 259200, “step_data”: {“subject”: “Re: Hi {{first_name}}”, “body”: “Bumping this…”}}, ] Example nurture sequence (same step format, just pinned + kind): sequence_kind=“nurture”, pinned_mailbox_id=12345, steps=[…same shape as above…]

Inputs

InputRequiredTypeDescription
nameYesstringSee the schema below for constraints and defaults.
user_emailYesstringSee the schema below for constraints and defaults.
descriptionNostring / nullSee the schema below for constraints and defaults.
finish_on_replyNobooleanSee the schema below for constraints and defaults.
send_in_same_threadNobooleanSee the schema below for constraints and defaults.
wait_for_new_contactsNobooleanSee the schema below for constraints and defaults.
associated_list_idNointeger / nullSee the schema below for constraints and defaults.
stepsNoarray / nullSee the schema below for constraints and defaults.
channelsNoarray / nullSee the schema below for constraints and defaults.
campaign_idNostring / nullSee the schema below for constraints and defaults.
sequence_kindNostringSee the schema below for constraints and defaults.
pinned_mailbox_idNointeger / nullSee the schema below for constraints and defaults.
Complete input schema
{
"properties": {
"name": {
"title": "Name",
"type": "string"
},
"user_email": {
"title": "User Email",
"type": "string"
},
"description": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"title": "Description"
},
"finish_on_reply": {
"default": true,
"title": "Finish On Reply",
"type": "boolean"
},
"send_in_same_thread": {
"default": false,
"title": "Send In Same Thread",
"type": "boolean"
},
"wait_for_new_contacts": {
"default": false,
"title": "Wait For New Contacts",
"type": "boolean"
},
"associated_list_id": {
"anyOf": [
{
"type": "integer"
},
{
"type": "null"
}
],
"default": null,
"title": "Associated List Id"
},
"steps": {
"anyOf": [
{
"items": {
"additionalProperties": true,
"type": "object"
},
"type": "array"
},
{
"type": "null"
}
],
"default": null,
"title": "Steps"
},
"channels": {
"anyOf": [
{
"items": {
"additionalProperties": true,
"type": "object"
},
"type": "array"
},
{
"type": "null"
}
],
"default": null,
"title": "Channels"
},
"campaign_id": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"title": "Campaign Id"
},
"sequence_kind": {
"default": "cold_outbound",
"title": "Sequence Kind",
"type": "string"
},
"pinned_mailbox_id": {
"anyOf": [
{
"type": "integer"
},
{
"type": "null"
}
],
"default": null,
"title": "Pinned Mailbox Id"
}
},
"required": [
"name",
"user_email"
],
"title": "g8_create_sequenceArguments",
"type": "object"
}

g8_create_task

Create a task linked to a contact or multiple typed business records. Args: tags: Task labels (up to 20, each 1-50 characters); [] clears labels on update. contact_id: Optional CRM contact. Otherwise supply records or entity_type/entity_id. records: Related records with entity_type and entity_id (contact, company, deal, lead, application, team_member). entity_type: Primary record type when records is omitted. entity_id: Primary record ID when records is omitted. source_url: Exact originating source URL, when known. task_type: Optional activity type, such as call or meeting. title: Task title. description: Optional long-form description. due_date: ISO 8601 due date. assignee_id: User ID to assign the task to. priority: 0=none, 1=high, 2=medium, 3=low; historical 4=low is preserved. parent_task_id: Optional parent task UUID. When set, this task is created as a subtask of the parent. Subtasks cannot themselves have subtasks (one level deep). subtask_sort_order: Optional sort position within the parent’s subtasks. Omit to append to the end.

Inputs

InputRequiredTypeDescription
titleYesstringSee the schema below for constraints and defaults.
contact_idNointeger / nullSee the schema below for constraints and defaults.
descriptionNostring / nullSee the schema below for constraints and defaults.
tagsNoarray / nullSee the schema below for constraints and defaults.
due_dateNostring / nullSee the schema below for constraints and defaults.
assignee_idNostring / nullSee the schema below for constraints and defaults.
priorityNointeger / nullSee the schema below for constraints and defaults.
parent_task_idNostring / nullSee the schema below for constraints and defaults.
subtask_sort_orderNointeger / nullSee the schema below for constraints and defaults.
recordsNoarray / nullSee the schema below for constraints and defaults.
entity_typeNostring / nullSee the schema below for constraints and defaults.
entity_idNostring / nullSee the schema below for constraints and defaults.
source_urlNostring / nullSee the schema below for constraints and defaults.
task_typeNostring / nullSee the schema below for constraints and defaults.
Complete input schema
{
"properties": {
"title": {
"title": "Title",
"type": "string"
},
"contact_id": {
"anyOf": [
{
"type": "integer"
},
{
"type": "null"
}
],
"default": null,
"title": "Contact Id"
},
"description": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"title": "Description"
},
"tags": {
"anyOf": [
{
"items": {
"type": "string"
},
"type": "array"
},
{
"type": "null"
}
],
"default": null,
"title": "Tags"
},
"due_date": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"title": "Due Date"
},
"assignee_id": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"title": "Assignee Id"
},
"priority": {
"anyOf": [
{
"type": "integer"
},
{
"type": "null"
}
],
"default": null,
"title": "Priority"
},
"parent_task_id": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"title": "Parent Task Id"
},
"subtask_sort_order": {
"anyOf": [
{
"type": "integer"
},
{
"type": "null"
}
],
"default": null,
"title": "Subtask Sort Order"
},
"records": {
"anyOf": [
{
"items": {
"additionalProperties": {
"type": "string"
},
"type": "object"
},
"type": "array"
},
{
"type": "null"
}
],
"default": null,
"title": "Records"
},
"entity_type": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"title": "Entity Type"
},
"entity_id": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"title": "Entity Id"
},
"source_url": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"title": "Source Url"
},
"task_type": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"title": "Task Type"
}
},
"required": [
"title"
],
"title": "g8_create_taskArguments",
"type": "object"
}

g8_crm_assert_companies_batch

Assert Companies Batch. Uses the current organization and existing API permissions. Review the intended change and set confirm=true to execute; otherwise no API request is sent. API: PUT /companies/assert/batch

Inputs

InputRequiredTypeDescription
bodyYes#/$defs/ApiBatchCompanyAssertRequestSee the schema below for constraints and defaults.
confirmNobooleanSee the schema below for constraints and defaults.
Complete input schema
{
"$defs": {
"ApiBatchCompanyAssertRequest": {
"additionalProperties": false,
"properties": {
"companies": {
"description": "Up to 100 companies with domain or linkedin_url",
"items": {
"additionalProperties": true,
"type": "object"
},
"maxItems": 100,
"title": "Companies",
"type": "array"
},
"create_missing_fields": {
"default": false,
"description": "When true, any key in `custom_fields` that matches no existing column is created as a NEW list-scoped custom column (max 100 per request) and then written. Default false preserves the previous behaviour of not creating columns implicitly.",
"title": "Create Missing Fields",
"type": "boolean"
},
"list_id": {
"description": "Target list ID",
"title": "List Id",
"type": "integer"
}
},
"required": [
"companies",
"list_id"
],
"title": "ApiBatchCompanyAssertRequest",
"type": "object"
}
},
"properties": {
"body": {
"$ref": "#/$defs/ApiBatchCompanyAssertRequest"
},
"confirm": {
"default": false,
"title": "Confirm",
"type": "boolean"
}
},
"required": [
"body"
],
"title": "g8_crm_assert_companies_batchArguments",
"type": "object"
}

g8_crm_assert_company

Assert Company. Uses the current organization and existing API permissions. Review the intended change and set confirm=true to execute; otherwise no API request is sent. API: PUT /companies/assert

Inputs

InputRequiredTypeDescription
bodyYes#/$defs/ApiCompanyAssertRequestSee the schema below for constraints and defaults.
confirmNobooleanSee the schema below for constraints and defaults.
Complete input schema
{
"$defs": {
"ApiCompanyAssertRequest": {
"additionalProperties": false,
"properties": {
"annual_revenue": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"title": "Annual Revenue"
},
"city": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"title": "City"
},
"country": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"title": "Country"
},
"create_missing_fields": {
"default": false,
"description": "When true, any key in `custom_fields` that matches no existing column is created as a NEW list-scoped custom column (max 100 per request) and then written. Default false preserves the previous behaviour of not creating columns implicitly.",
"title": "Create Missing Fields",
"type": "boolean"
},
"custom_fields": {
"anyOf": [
{
"additionalProperties": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"type": "object"
},
{
"type": "null"
}
],
"default": null,
"description": "Custom column values to write on this record, keyed by the column's display title (e.g. 'Followup 1'), its slug (e.g. 'udo_followup_1_ab12cd34'), or a case/space variant of the title. Keys that match no existing column are reported back in `ignored_fields` unless `create_missing_fields` is true.",
"title": "Custom Fields"
},
"description": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"title": "Description"
},
"domain": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"description": "Company domain (primary match key)",
"title": "Domain"
},
"employee_count": {
"anyOf": [
{
"type": "integer"
},
{
"type": "null"
}
],
"default": null,
"title": "Employee Count"
},
"industry": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"title": "Industry"
},
"linkedin_url": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"description": "LinkedIn URL (fallback match key)",
"title": "Linkedin Url"
},
"list_id": {
"description": "Target list ID",
"title": "List Id",
"type": "integer"
},
"name": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"title": "Name"
},
"state": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"title": "State"
},
"website": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"title": "Website"
}
},
"required": [
"list_id"
],
"title": "ApiCompanyAssertRequest",
"type": "object"
}
},
"properties": {
"body": {
"$ref": "#/$defs/ApiCompanyAssertRequest"
},
"confirm": {
"default": false,
"title": "Confirm",
"type": "boolean"
}
},
"required": [
"body"
],
"title": "g8_crm_assert_companyArguments",
"type": "object"
}

g8_crm_assert_contact

Assert Contact. Uses the current organization and existing API permissions. Review the intended change and set confirm=true to execute; otherwise no API request is sent. API: PUT /contacts/assert

Inputs

InputRequiredTypeDescription
bodyYes#/$defs/ApiContactAssertRequestSee the schema below for constraints and defaults.
confirmNobooleanSee the schema below for constraints and defaults.
Complete input schema
{
"$defs": {
"ApiContactAssertRequest": {
"additionalProperties": false,
"properties": {
"city": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"title": "City"
},
"company_domain": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"title": "Company Domain"
},
"country": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"title": "Country"
},
"create_missing_fields": {
"default": false,
"description": "When true, any key in `custom_fields` that matches no existing column is created as a NEW list-scoped custom column (max 100 per request) and then written. Default false preserves the previous behaviour of not creating columns implicitly.",
"title": "Create Missing Fields",
"type": "boolean"
},
"custom_fields": {
"anyOf": [
{
"additionalProperties": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"type": "object"
},
{
"type": "null"
}
],
"default": null,
"description": "Custom column values to write on this record, keyed by the column's display title (e.g. 'Followup 1'), its slug (e.g. 'udo_followup_1_ab12cd34'), or a case/space variant of the title. Keys that match no existing column are reported back in `ignored_fields` unless `create_missing_fields` is true.",
"title": "Custom Fields"
},
"direct_phone": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"title": "Direct Phone"
},
"first_name": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"title": "First Name"
},
"job_department": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"title": "Job Department"
},
"job_title": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"title": "Job Title"
},
"last_name": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"title": "Last Name"
},
"linkedin_url": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"description": "LinkedIn URL (fallback match key)",
"title": "Linkedin Url"
},
"list_id": {
"description": "Target list ID",
"title": "List Id",
"type": "integer"
},
"mobile_phone": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"title": "Mobile Phone"
},
"personal_emails": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"title": "Personal Emails"
},
"seniority_level": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"title": "Seniority Level"
},
"state": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"title": "State"
},
"work_email": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"description": "Work email (primary match key)",
"title": "Work Email"
}
},
"required": [
"list_id"
],
"title": "ApiContactAssertRequest",
"type": "object"
}
},
"properties": {
"body": {
"$ref": "#/$defs/ApiContactAssertRequest"
},
"confirm": {
"default": false,
"title": "Confirm",
"type": "boolean"
}
},
"required": [
"body"
],
"title": "g8_crm_assert_contactArguments",
"type": "object"
}

g8_crm_assert_contacts_batch

Assert Contacts Batch. Uses the current organization and existing API permissions. Review the intended change and set confirm=true to execute; otherwise no API request is sent. API: PUT /contacts/assert/batch

Inputs

InputRequiredTypeDescription
bodyYes#/$defs/ApiBatchContactAssertRequestSee the schema below for constraints and defaults.
confirmNobooleanSee the schema below for constraints and defaults.
Complete input schema
{
"$defs": {
"ApiBatchContactAssertRequest": {
"additionalProperties": false,
"properties": {
"contacts": {
"description": "Up to 100 contacts with work_email or linkedin_url",
"items": {
"additionalProperties": true,
"type": "object"
},
"maxItems": 100,
"title": "Contacts",
"type": "array"
},
"create_missing_fields": {
"default": false,
"description": "When true, any key in `custom_fields` that matches no existing column is created as a NEW list-scoped custom column (max 100 per request) and then written. Default false preserves the previous behaviour of not creating columns implicitly.",
"title": "Create Missing Fields",
"type": "boolean"
},
"list_id": {
"description": "Target list ID",
"title": "List Id",
"type": "integer"
}
},
"required": [
"contacts",
"list_id"
],
"title": "ApiBatchContactAssertRequest",
"type": "object"
}
},
"properties": {
"body": {
"$ref": "#/$defs/ApiBatchContactAssertRequest"
},
"confirm": {
"default": false,
"title": "Confirm",
"type": "boolean"
}
},
"required": [
"body"
],
"title": "g8_crm_assert_contacts_batchArguments",
"type": "object"
}

g8_crm_assert_deal

Assert Deal. Uses the current organization and existing API permissions. Review the intended change and set confirm=true to execute; otherwise no API request is sent. API: PUT /deals/assert

Inputs

InputRequiredTypeDescription
bodyYes#/$defs/ApiDealAssertRequestSee the schema below for constraints and defaults.
confirmNobooleanSee the schema below for constraints and defaults.
Complete input schema
{
"$defs": {
"ApiDealAssertRequest": {
"additionalProperties": false,
"properties": {
"amount": {
"anyOf": [
{
"type": "number"
},
{
"type": "null"
}
],
"default": null,
"title": "Amount"
},
"close_date": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"title": "Close Date"
},
"company_id": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"description": "Company ID (match key, combined with name)",
"title": "Company Id"
},
"currency": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"title": "Currency"
},
"description": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"title": "Description"
},
"name": {
"description": "Deal name (match key)",
"title": "Name",
"type": "string"
},
"pipeline_id": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"title": "Pipeline Id"
},
"stage_id": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"title": "Stage Id"
}
},
"required": [
"name"
],
"title": "ApiDealAssertRequest",
"type": "object"
}
},
"properties": {
"body": {
"$ref": "#/$defs/ApiDealAssertRequest"
},
"confirm": {
"default": false,
"title": "Confirm",
"type": "boolean"
}
},
"required": [
"body"
],
"title": "g8_crm_assert_dealArguments",
"type": "object"
}

g8_crm_assert_deal_contact

Assert Deal Contact. Uses the current organization and existing API permissions. Review the intended change and set confirm=true to execute; otherwise no API request is sent. API: PUT /contacts/{contact_id}/deals/assert

Inputs

InputRequiredTypeDescription
contact_idYesintegerContact ID
bodyYes#/$defs/ApiDealContactAssertRequestSee the schema below for constraints and defaults.
confirmNobooleanSee the schema below for constraints and defaults.
Complete input schema
{
"$defs": {
"ApiDealContactAssertRequest": {
"additionalProperties": false,
"properties": {
"deal_id": {
"description": "Deal ID to associate",
"title": "Deal Id",
"type": "string"
}
},
"required": [
"deal_id"
],
"title": "ApiDealContactAssertRequest",
"type": "object"
}
},
"properties": {
"contact_id": {
"description": "Contact ID",
"title": "Contact Id",
"type": "integer"
},
"body": {
"$ref": "#/$defs/ApiDealContactAssertRequest"
},
"confirm": {
"default": false,
"title": "Confirm",
"type": "boolean"
}
},
"required": [
"contact_id",
"body"
],
"title": "g8_crm_assert_deal_contactArguments",
"type": "object"
}

g8_crm_create_company_column

Create Company Column. Uses the current organization and existing API permissions. Review the intended change and set confirm=true to execute; otherwise no API request is sent. API: POST /companies/columns/create

Inputs

InputRequiredTypeDescription
bodyYes#/$defs/ApiCreateCompanyColumnRequestSee the schema below for constraints and defaults.
confirmNobooleanSee the schema below for constraints and defaults.
Complete input schema
{
"$defs": {
"ApiCreateCompanyColumnRequest": {
"additionalProperties": false,
"properties": {
"created_by": {
"description": "Email of the user creating the column (for audit).",
"format": "email",
"title": "Created By",
"type": "string"
},
"data_type": {
"default": "text",
"description": "Column data type. Currently only 'text' is supported.",
"enum": [
"text",
"int",
"numeric",
"boolean"
],
"title": "Data Type",
"type": "string"
},
"enrichment": {
"anyOf": [
{
"$ref": "#/$defs/ApiCreateFieldEnrichmentInput"
},
{
"type": "null"
}
],
"default": null,
"description": "STRONGLY RECOMMENDED. Optional waterfall enrichment block. When supplied, a companion `enrichment_configs` row is created alongside the column so the UI 'Enrich' button works immediately. Without it the column exists but isn't enrichable until a pipeline is configured via POST /enrichment/waterfall/configs."
},
"list_id": {
"anyOf": [
{
"type": "integer"
},
{
"type": "null"
}
],
"default": null,
"description": "If set, the column is list-scoped (only visible on that list). Required when `enrichment` is supplied - waterfall pipelines are list-scoped.",
"title": "List Id"
},
"title": {
"description": "Column title shown in the UI (e.g. 'Tier')",
"title": "Title",
"type": "string"
}
},
"required": [
"created_by",
"title"
],
"title": "ApiCreateCompanyColumnRequest",
"type": "object"
},
"ApiCreateFieldEnrichmentInput": {
"additionalProperties": false,
"properties": {
"email_verification": {
"anyOf": [
{
"$ref": "#/$defs/ApiEmailVerificationInput"
},
{
"type": "null"
}
],
"default": null,
"description": "Optional post-enrichment email verification config."
},
"field_to_enrich": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"description": "Target field identifier. Defaults to the new column's slug.",
"title": "Field To Enrich"
},
"name": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"description": "Pipeline name. Defaults to `<column title> Enrichment` if omitted.",
"title": "Name"
},
"providers": {
"anyOf": [
{
"items": {
"type": "string"
},
"type": "array"
},
{
"type": "null"
}
],
"default": null,
"description": "Ordered list of provider names. Without `target_field`, server maps each to its default email-finder action (legacy). With `target_field`, filters the column template to these providers (correct per-field action preserved). Mutually exclusive with `steps`.",
"title": "Providers"
},
"skip_existing_values": {
"default": true,
"description": "If true, skip rows where the target field is already populated.",
"title": "Skip Existing Values",
"type": "boolean"
},
"steps": {
"anyOf": [
{
"items": {
"$ref": "#/$defs/ApiWaterfallStepInput"
},
"type": "array"
},
{
"type": "null"
}
],
"default": null,
"description": "Full caller-supplied step list. Persisted verbatim. Mutually exclusive with `providers`.",
"title": "Steps"
},
"target_field": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"description": "Kind of data this column holds - CONTACT_DIRECT_PHONE, CONTACT_MOBILE_PHONE, CONTACT_WORK_EMAIL, CONTACT_LINKEDIN_URL, COMPANY_PHONE, ... or a friendly synonym ('phone', 'mobile', 'email', 'linkedin'). When set, the pipeline is built from the server's per-column TEMPLATE so each provider runs its CORRECT action for that data kind (e.g. leadmagic `mobile_finder` for a phone, NOT `email_finder`) - the same actions the web UI's 'Add column -> Waterfall' picks. Combine with `providers[]` to keep only those providers from the template. Mutually exclusive with `steps`. When omitted, the legacy `providers[]` email-finder shortcut is unchanged.",
"title": "Target Field"
},
"type": {
"default": "waterfall",
"description": "Pipeline kind. Only 'waterfall' is supported today.",
"title": "Type",
"type": "string"
}
},
"title": "ApiCreateFieldEnrichmentInput",
"type": "object"
},
"ApiEmailVerificationInput": {
"additionalProperties": false,
"properties": {
"accept_catchall": {
"default": false,
"description": "Treat catch-all responses as valid (domains that accept any address).",
"title": "Accept Catchall",
"type": "boolean"
},
"enabled": {
"default": true,
"description": "Enable post-enrichment email verification",
"title": "Enabled",
"type": "boolean"
},
"provider": {
"default": "zerobounce",
"description": "Verification provider. Charges credits when use_system_credentials=True.",
"enum": [
"zerobounce",
"hunter",
"icypeas",
"leadmagic"
],
"title": "Provider",
"type": "string"
},
"use_system_credentials": {
"default": true,
"description": "Use graph8-managed API keys (charges credits). False = use org's BYOK keys.",
"title": "Use System Credentials",
"type": "boolean"
},
"valid_statuses": {
"anyOf": [
{
"items": {
"type": "string"
},
"type": "array"
},
{
"type": "null"
}
],
"default": null,
"description": "Verification statuses to accept as valid. Typical: ['valid'] or ['valid','catch-all'].",
"title": "Valid Statuses"
}
},
"title": "ApiEmailVerificationInput",
"type": "object"
},
"ApiWaterfallStepInput": {
"additionalProperties": false,
"properties": {
"action": {
"description": "Provider action: lookup_person, find_email, enrich_person, ...",
"title": "Action",
"type": "string"
},
"action_display_name": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"description": "Human-readable label shown in UI. Auto-titled from `action` if omitted.",
"title": "Action Display Name"
},
"confidence_threshold": {
"default": 0.0,
"maximum": 1.0,
"minimum": 0.0,
"title": "Confidence Threshold",
"type": "number"
},
"config": {
"anyOf": [
{
"additionalProperties": true,
"type": "object"
},
{
"type": "null"
}
],
"default": null,
"description": "Provider-specific options (e.g. apollo `reveal_phone_numbers=true`).",
"title": "Config"
},
"enabled": {
"default": true,
"title": "Enabled",
"type": "boolean"
},
"id": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"description": "Step identifier. Auto-generated (`step_<provider>_<uuid8>`) if omitted.",
"title": "Id"
},
"input_mapping": {
"anyOf": [
{
"additionalProperties": {
"type": "string"
},
"type": "object"
},
{
"type": "null"
}
],
"default": null,
"description": "Maps provider input names to graph8 column identifiers (CONTACT_*).",
"title": "Input Mapping"
},
"is_system_provider": {
"default": false,
"description": "True = use graph8-managed credentials + charge credits. False = use org BYOK.",
"title": "Is System Provider",
"type": "boolean"
},
"max_retries": {
"default": 0,
"maximum": 3.0,
"minimum": 0.0,
"title": "Max Retries",
"type": "integer"
},
"order": {
"default": 0,
"description": "0-indexed execution order.",
"minimum": 0.0,
"title": "Order",
"type": "integer"
},
"output_field": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"description": "Dotted path the worker writes into (e.g. 'contact.work_email').",
"title": "Output Field"
},
"output_mapping": {
"anyOf": [
{
"additionalProperties": {
"type": "string"
},
"type": "object"
},
{
"type": "null"
}
],
"default": null,
"description": "Optional output field remap (deprecated - prefer `output_field`).",
"title": "Output Mapping"
},
"provider": {
"description": "Provider name: graph8, hunter, prospeo, dropcontact, apollo, ...",
"title": "Provider",
"type": "string"
},
"stop_on_success": {
"default": true,
"title": "Stop On Success",
"type": "boolean"
}
},
"required": [
"action",
"provider"
],
"title": "ApiWaterfallStepInput",
"type": "object"
}
},
"properties": {
"body": {
"$ref": "#/$defs/ApiCreateCompanyColumnRequest"
},
"confirm": {
"default": false,
"title": "Confirm",
"type": "boolean"
}
},
"required": [
"body"
],
"title": "g8_crm_create_company_columnArguments",
"type": "object"
}

g8_crm_create_contact_column

Create Contact Column. Uses the current organization and existing API permissions. Review the intended change and set confirm=true to execute; otherwise no API request is sent. API: POST /contacts/columns/create

Inputs

InputRequiredTypeDescription
bodyYes#/$defs/ApiCreateContactColumnRequestSee the schema below for constraints and defaults.
confirmNobooleanSee the schema below for constraints and defaults.
Complete input schema
{
"$defs": {
"ApiCreateContactColumnRequest": {
"additionalProperties": false,
"properties": {
"created_by": {
"description": "Email of the user creating the column (for audit).",
"format": "email",
"title": "Created By",
"type": "string"
},
"data_type": {
"default": "text",
"description": "Column data type. Currently only 'text' is supported.",
"enum": [
"text",
"int",
"numeric",
"boolean"
],
"title": "Data Type",
"type": "string"
},
"enrichment": {
"anyOf": [
{
"$ref": "#/$defs/ApiCreateFieldEnrichmentInput"
},
{
"type": "null"
}
],
"default": null,
"description": "STRONGLY RECOMMENDED. Optional waterfall enrichment block. When supplied, a companion `enrichment_configs` row is created alongside the column so the UI 'Enrich' button works immediately. Without it the column exists but isn't enrichable until a pipeline is configured via POST /enrichment/waterfall/configs."
},
"list_id": {
"anyOf": [
{
"type": "integer"
},
{
"type": "null"
}
],
"default": null,
"description": "If set, the column is list-scoped (only visible on that list). Required when `enrichment` is supplied - waterfall pipelines are list-scoped.",
"title": "List Id"
},
"title": {
"description": "Column title shown in the UI (e.g. 'Lead Score')",
"title": "Title",
"type": "string"
}
},
"required": [
"created_by",
"title"
],
"title": "ApiCreateContactColumnRequest",
"type": "object"
},
"ApiCreateFieldEnrichmentInput": {
"additionalProperties": false,
"properties": {
"email_verification": {
"anyOf": [
{
"$ref": "#/$defs/ApiEmailVerificationInput"
},
{
"type": "null"
}
],
"default": null,
"description": "Optional post-enrichment email verification config."
},
"field_to_enrich": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"description": "Target field identifier. Defaults to the new column's slug.",
"title": "Field To Enrich"
},
"name": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"description": "Pipeline name. Defaults to `<column title> Enrichment` if omitted.",
"title": "Name"
},
"providers": {
"anyOf": [
{
"items": {
"type": "string"
},
"type": "array"
},
{
"type": "null"
}
],
"default": null,
"description": "Ordered list of provider names. Without `target_field`, server maps each to its default email-finder action (legacy). With `target_field`, filters the column template to these providers (correct per-field action preserved). Mutually exclusive with `steps`.",
"title": "Providers"
},
"skip_existing_values": {
"default": true,
"description": "If true, skip rows where the target field is already populated.",
"title": "Skip Existing Values",
"type": "boolean"
},
"steps": {
"anyOf": [
{
"items": {
"$ref": "#/$defs/ApiWaterfallStepInput"
},
"type": "array"
},
{
"type": "null"
}
],
"default": null,
"description": "Full caller-supplied step list. Persisted verbatim. Mutually exclusive with `providers`.",
"title": "Steps"
},
"target_field": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"description": "Kind of data this column holds - CONTACT_DIRECT_PHONE, CONTACT_MOBILE_PHONE, CONTACT_WORK_EMAIL, CONTACT_LINKEDIN_URL, COMPANY_PHONE, ... or a friendly synonym ('phone', 'mobile', 'email', 'linkedin'). When set, the pipeline is built from the server's per-column TEMPLATE so each provider runs its CORRECT action for that data kind (e.g. leadmagic `mobile_finder` for a phone, NOT `email_finder`) - the same actions the web UI's 'Add column -> Waterfall' picks. Combine with `providers[]` to keep only those providers from the template. Mutually exclusive with `steps`. When omitted, the legacy `providers[]` email-finder shortcut is unchanged.",
"title": "Target Field"
},
"type": {
"default": "waterfall",
"description": "Pipeline kind. Only 'waterfall' is supported today.",
"title": "Type",
"type": "string"
}
},
"title": "ApiCreateFieldEnrichmentInput",
"type": "object"
},
"ApiEmailVerificationInput": {
"additionalProperties": false,
"properties": {
"accept_catchall": {
"default": false,
"description": "Treat catch-all responses as valid (domains that accept any address).",
"title": "Accept Catchall",
"type": "boolean"
},
"enabled": {
"default": true,
"description": "Enable post-enrichment email verification",
"title": "Enabled",
"type": "boolean"
},
"provider": {
"default": "zerobounce",
"description": "Verification provider. Charges credits when use_system_credentials=True.",
"enum": [
"zerobounce",
"hunter",
"icypeas",
"leadmagic"
],
"title": "Provider",
"type": "string"
},
"use_system_credentials": {
"default": true,
"description": "Use graph8-managed API keys (charges credits). False = use org's BYOK keys.",
"title": "Use System Credentials",
"type": "boolean"
},
"valid_statuses": {
"anyOf": [
{
"items": {
"type": "string"
},
"type": "array"
},
{
"type": "null"
}
],
"default": null,
"description": "Verification statuses to accept as valid. Typical: ['valid'] or ['valid','catch-all'].",
"title": "Valid Statuses"
}
},
"title": "ApiEmailVerificationInput",
"type": "object"
},
"ApiWaterfallStepInput": {
"additionalProperties": false,
"properties": {
"action": {
"description": "Provider action: lookup_person, find_email, enrich_person, ...",
"title": "Action",
"type": "string"
},
"action_display_name": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"description": "Human-readable label shown in UI. Auto-titled from `action` if omitted.",
"title": "Action Display Name"
},
"confidence_threshold": {
"default": 0.0,
"maximum": 1.0,
"minimum": 0.0,
"title": "Confidence Threshold",
"type": "number"
},
"config": {
"anyOf": [
{
"additionalProperties": true,
"type": "object"
},
{
"type": "null"
}
],
"default": null,
"description": "Provider-specific options (e.g. apollo `reveal_phone_numbers=true`).",
"title": "Config"
},
"enabled": {
"default": true,
"title": "Enabled",
"type": "boolean"
},
"id": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"description": "Step identifier. Auto-generated (`step_<provider>_<uuid8>`) if omitted.",
"title": "Id"
},
"input_mapping": {
"anyOf": [
{
"additionalProperties": {
"type": "string"
},
"type": "object"
},
{
"type": "null"
}
],
"default": null,
"description": "Maps provider input names to graph8 column identifiers (CONTACT_*).",
"title": "Input Mapping"
},
"is_system_provider": {
"default": false,
"description": "True = use graph8-managed credentials + charge credits. False = use org BYOK.",
"title": "Is System Provider",
"type": "boolean"
},
"max_retries": {
"default": 0,
"maximum": 3.0,
"minimum": 0.0,
"title": "Max Retries",
"type": "integer"
},
"order": {
"default": 0,
"description": "0-indexed execution order.",
"minimum": 0.0,
"title": "Order",
"type": "integer"
},
"output_field": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"description": "Dotted path the worker writes into (e.g. 'contact.work_email').",
"title": "Output Field"
},
"output_mapping": {
"anyOf": [
{
"additionalProperties": {
"type": "string"
},
"type": "object"
},
{
"type": "null"
}
],
"default": null,
"description": "Optional output field remap (deprecated - prefer `output_field`).",
"title": "Output Mapping"
},
"provider": {
"description": "Provider name: graph8, hunter, prospeo, dropcontact, apollo, ...",
"title": "Provider",
"type": "string"
},
"stop_on_success": {
"default": true,
"title": "Stop On Success",
"type": "boolean"
}
},
"required": [
"action",
"provider"
],
"title": "ApiWaterfallStepInput",
"type": "object"
}
},
"properties": {
"body": {
"$ref": "#/$defs/ApiCreateContactColumnRequest"
},
"confirm": {
"default": false,
"title": "Confirm",
"type": "boolean"
}
},
"required": [
"body"
],
"title": "g8_crm_create_contact_columnArguments",
"type": "object"
}

g8_crm_delete_company

Delete Company. Uses the current organization and existing API permissions. Review the intended change and set confirm=true to execute; otherwise no API request is sent. API: DELETE /companies/{company_id}

Inputs

InputRequiredTypeDescription
company_idYesintegerCompany ID
confirmNobooleanSee the schema below for constraints and defaults.
Complete input schema
{
"properties": {
"company_id": {
"description": "Company ID",
"title": "Company Id",
"type": "integer"
},
"confirm": {
"default": false,
"title": "Confirm",
"type": "boolean"
}
},
"required": [
"company_id"
],
"title": "g8_crm_delete_companyArguments",
"type": "object"
}

g8_crm_delete_company_column

Delete Company Column. Uses the current organization and existing API permissions. Review the intended change and set confirm=true to execute; otherwise no API request is sent. API: DELETE /companies/columns/{column_id}

Inputs

InputRequiredTypeDescription
column_idYesintegerID of the column to delete
confirmNobooleanSee the schema below for constraints and defaults.
Complete input schema
{
"properties": {
"column_id": {
"description": "ID of the column to delete",
"title": "Column Id",
"type": "integer"
},
"confirm": {
"default": false,
"title": "Confirm",
"type": "boolean"
}
},
"required": [
"column_id"
],
"title": "g8_crm_delete_company_columnArguments",
"type": "object"
}

g8_crm_delete_contact

Delete Contact. Uses the current organization and existing API permissions. Review the intended change and set confirm=true to execute; otherwise no API request is sent. API: DELETE /contacts/{contact_id}

Inputs

InputRequiredTypeDescription
contact_idYesintegerContact ID
confirmNobooleanSee the schema below for constraints and defaults.
Complete input schema
{
"properties": {
"contact_id": {
"description": "Contact ID",
"title": "Contact Id",
"type": "integer"
},
"confirm": {
"default": false,
"title": "Confirm",
"type": "boolean"
}
},
"required": [
"contact_id"
],
"title": "g8_crm_delete_contactArguments",
"type": "object"
}

g8_crm_delete_contact_column

Delete Contact Column. Uses the current organization and existing API permissions. Review the intended change and set confirm=true to execute; otherwise no API request is sent. API: DELETE /contacts/columns/{column_id}

Inputs

InputRequiredTypeDescription
column_idYesintegerID of the column to delete
confirmNobooleanSee the schema below for constraints and defaults.
Complete input schema
{
"properties": {
"column_id": {
"description": "ID of the column to delete",
"title": "Column Id",
"type": "integer"
},
"confirm": {
"default": false,
"title": "Confirm",
"type": "boolean"
}
},
"required": [
"column_id"
],
"title": "g8_crm_delete_contact_columnArguments",
"type": "object"
}

g8_crm_delete_list

Delete List. Uses the current organization and existing API permissions. Review the intended change and set confirm=true to execute; otherwise no API request is sent. API: DELETE /lists/{list_id}

Inputs

InputRequiredTypeDescription
list_idYesintegerList ID
confirmNobooleanSee the schema below for constraints and defaults.
Complete input schema
{
"properties": {
"list_id": {
"description": "List ID",
"title": "List Id",
"type": "integer"
},
"confirm": {
"default": false,
"title": "Confirm",
"type": "boolean"
}
},
"required": [
"list_id"
],
"title": "g8_crm_delete_listArguments",
"type": "object"
}

g8_crm_get_company

Get Company. Uses the current organization and existing API permissions. API: GET /companies/{company_id}

Inputs

InputRequiredTypeDescription
company_idYesintegerCompany ID
include_custom_fieldsNoboolean / nullWhen true, the response includes a custom_fields object of custom column values keyed by column slug. Default false omits it.
Complete input schema
{
"properties": {
"company_id": {
"description": "Company ID",
"title": "Company Id",
"type": "integer"
},
"include_custom_fields": {
"anyOf": [
{
"type": "boolean"
},
{
"type": "null"
}
],
"default": null,
"description": "When true, the response includes a `custom_fields` object of custom column values keyed by column slug. Default false omits it.",
"title": "Include Custom Fields"
}
},
"required": [
"company_id"
],
"title": "g8_crm_get_companyArguments",
"type": "object"
}

g8_crm_get_list_contacts

Get List Contacts. Uses the current organization and existing API permissions. API: GET /lists/{list_id}/contacts

Inputs

InputRequiredTypeDescription
list_idYesintegerList ID
pageNointeger / nullPage number (1-indexed)
limitNointeger / nullItems per page (max 200)
Complete input schema
{
"properties": {
"list_id": {
"description": "List ID",
"title": "List Id",
"type": "integer"
},
"page": {
"anyOf": [
{
"minimum": 1,
"type": "integer"
},
{
"type": "null"
}
],
"default": null,
"description": "Page number (1-indexed)",
"title": "Page"
},
"limit": {
"anyOf": [
{
"maximum": 200,
"minimum": 1,
"type": "integer"
},
{
"type": "null"
}
],
"default": null,
"description": "Items per page (max 200)",
"title": "Limit"
}
},
"required": [
"list_id"
],
"title": "g8_crm_get_list_contactsArguments",
"type": "object"
}

g8_crm_list_company_columns

List Company Columns. Uses the current organization and existing API permissions. API: GET /companies/columns

Inputs

InputRequiredTypeDescription
list_idNointeger / nullOptional list ID. When provided, list-specific dynamic columns are included alongside global ones.
Complete input schema
{
"properties": {
"list_id": {
"anyOf": [
{
"type": "integer"
},
{
"type": "null"
}
],
"default": null,
"description": "Optional list ID. When provided, list-specific dynamic columns are included alongside global ones.",
"title": "List Id"
}
},
"title": "g8_crm_list_company_columnsArguments",
"type": "object"
}

g8_crm_list_contact_columns

List Contact Columns. Uses the current organization and existing API permissions. API: GET /contacts/columns

Inputs

InputRequiredTypeDescription
list_idNointeger / nullOptional list ID. When provided, list-specific dynamic columns are included alongside global ones.
Complete input schema
{
"properties": {
"list_id": {
"anyOf": [
{
"type": "integer"
},
{
"type": "null"
}
],
"default": null,
"description": "Optional list ID. When provided, list-specific dynamic columns are included alongside global ones.",
"title": "List Id"
}
},
"title": "g8_crm_list_contact_columnsArguments",
"type": "object"
}

g8_crm_list_contact_tasks

List Contact Tasks. Uses the current organization and existing API permissions. API: GET /contacts/{contact_id}/tasks

Inputs

InputRequiredTypeDescription
contact_idYesintegerContact ID
statusNostring / nullFilter by status (open, completed)
Complete input schema
{
"properties": {
"contact_id": {
"description": "Contact ID",
"title": "Contact Id",
"type": "integer"
},
"status": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"description": "Filter by status (open, completed)",
"title": "Status"
}
},
"required": [
"contact_id"
],
"title": "g8_crm_list_contact_tasksArguments",
"type": "object"
}

g8_crm_list_duplicates

Find duplicate records, and review merges that already happened. Four views over one surface: - suggestions (default): candidate duplicate PAIRS awaiting a decision, with their confidence and the fields that matched. Each carries a suggestion id - that is what g8_crm_resolve_duplicate takes. - counts: how many pairs are pending. Cheap; use it to answer “do we have a duplicates problem?” without pulling rows. - recent_merges: merges already applied, each with can_undo. can_undo false means the 30-day undo window has closed or the merge is not reversible - do not offer an undo it will refuse. - merge_status: progress of one bulk-merge run. Needs run_id, which comes from a run started in the app’s duplicate review screen; this surface does not start merge runs. Rows are already narrowed to what the calling key may see, so an empty result means “none visible to you”, which is not always the same as “none exist”. Args: entity_type: contact | company | deal. Required for suggestions and counts. Note deals can be SUGGESTED and rejected but never merged. view: suggestions | counts | recent_merges | merge_status. status: Suggestion status filter, default “pending”. search: Substring match on the records in the pair. confidence: Confidence band filter. owner_id: Only pairs owned by this user. lifecycle_stage: Comma-separated lifecycle stages to filter by. run_id: The bulk-merge run to poll, merge_status only. include_shadow: recent_merges only - include shadow merges. cursor: Opaque page cursor from a previous suggestions page. limit: Rows per page (1-100, default 25).

Inputs

InputRequiredTypeDescription
entity_typeNostringSee the schema below for constraints and defaults.
viewNostringSee the schema below for constraints and defaults.
statusNostringSee the schema below for constraints and defaults.
searchNostring / nullSee the schema below for constraints and defaults.
confidenceNostring / nullSee the schema below for constraints and defaults.
owner_idNostring / nullSee the schema below for constraints and defaults.
lifecycle_stageNostring / nullSee the schema below for constraints and defaults.
run_idNostring / nullSee the schema below for constraints and defaults.
include_shadowNobooleanSee the schema below for constraints and defaults.
cursorNostring / nullSee the schema below for constraints and defaults.
limitNointegerSee the schema below for constraints and defaults.
Complete input schema
{
"properties": {
"entity_type": {
"default": "contact",
"title": "Entity Type",
"type": "string"
},
"view": {
"default": "suggestions",
"title": "View",
"type": "string"
},
"status": {
"default": "pending",
"title": "Status",
"type": "string"
},
"search": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"title": "Search"
},
"confidence": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"title": "Confidence"
},
"owner_id": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"title": "Owner Id"
},
"lifecycle_stage": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"title": "Lifecycle Stage"
},
"run_id": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"title": "Run Id"
},
"include_shadow": {
"default": false,
"title": "Include Shadow",
"type": "boolean"
},
"cursor": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"title": "Cursor"
},
"limit": {
"default": 25,
"title": "Limit",
"type": "integer"
}
},
"title": "g8_crm_list_duplicatesArguments",
"type": "object"
}

g8_crm_list_suppressions

List the org’s do-not-contact ledger - who may NOT be contacted. This is the same ledger every send path checks (sequencer, newsletter, audience sync), so a contact listed here will not be reached by any of them. Use it to reconcile an external suppression list, to audit what the org is blocking and why, or to answer “how many people have opted out”. To check ONE contact, use g8_get_contact_detail(include_suppression=True) instead of paging this. To suppress or reinstate, use g8_update_contact. Rows carry NO contact PII - no email, phone or name, only contact_id. Resolve a person with g8_get_contact_detail. category says who set the block, and whether it may be lifted: - contact_initiated: they asked (an unsubscribe). NEVER lift it. - org_initiated: your own operator block. Reversible by you. - system: a hard bounce, complaint or DNC-registry hit. Args: channel: all | email | phone | linkedin. Filters the way the SEND gate filters: email also returns the umbrella all rows, because a contact blocked on every channel is blocked for email too. Pass all to see only the umbrella rows. Omit it for the whole ledger. category: contact_initiated | org_initiated | system. Exact match - unlike channel, there is no umbrella category. limit: Rows per page (1-500, default 50). offset: Rows to skip, for paging. Only ACTIVE (uncleared) rows are returned, so a lifted suppression simply disappears rather than showing as cleared.

Inputs

InputRequiredTypeDescription
channelNostring / nullSee the schema below for constraints and defaults.
categoryNostring / nullSee the schema below for constraints and defaults.
limitNointegerSee the schema below for constraints and defaults.
offsetNointegerSee the schema below for constraints and defaults.
Complete input schema
{
"properties": {
"channel": {
"anyOf": [
{
"enum": [
"all",
"email",
"phone",
"linkedin"
],
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"title": "Channel"
},
"category": {
"anyOf": [
{
"enum": [
"contact_initiated",
"org_initiated",
"system"
],
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"title": "Category"
},
"limit": {
"default": 50,
"title": "Limit",
"type": "integer"
},
"offset": {
"default": 0,
"title": "Offset",
"type": "integer"
}
},
"title": "g8_crm_list_suppressionsArguments",
"type": "object"
}

g8_crm_remove_contacts_from_list

Remove Contacts From List. Uses the current organization and existing API permissions. Review the intended change and set confirm=true to execute; otherwise no API request is sent. API: DELETE /lists/{list_id}/contacts

Inputs

InputRequiredTypeDescription
list_idYesintegerList ID
bodyYes#/$defs/ApiRemoveContactsFromListRequestSee the schema below for constraints and defaults.
confirmNobooleanSee the schema below for constraints and defaults.
Complete input schema
{
"$defs": {
"ApiRemoveContactsFromListRequest": {
"additionalProperties": false,
"properties": {
"contact_ids": {
"description": "List of contact IDs to remove",
"items": {
"type": "integer"
},
"title": "Contact Ids",
"type": "array"
}
},
"required": [
"contact_ids"
],
"title": "ApiRemoveContactsFromListRequest",
"type": "object"
}
},
"properties": {
"list_id": {
"description": "List ID",
"title": "List Id",
"type": "integer"
},
"body": {
"$ref": "#/$defs/ApiRemoveContactsFromListRequest"
},
"confirm": {
"default": false,
"title": "Confirm",
"type": "boolean"
}
},
"required": [
"list_id",
"body"
],
"title": "g8_crm_remove_contacts_from_listArguments",
"type": "object"
}

g8_crm_resolve_duplicate

Dismiss a suggested duplicate pair, or undo a merge. Two decisions, one per id: - suggestion_id (from g8_crm_list_duplicates): the pair is NOT a duplicate. This is permanent - there is no un-reject, and the pair will not be suggested again. It changes no contact, company or deal record; only the suggestion is marked. - merge_history_id (from the recent_merges view, where can_undo is true): reverse a merge that already happened, restoring the record that was merged away. Only within its 30-day window, and only for contacts and companies. MERGING pairs is deliberately not available here: choosing which record survives a merge is a decision a person makes, and this surface offers no way to show them the outcome first. Point the user at the duplicate review screen for that, then use view="merge_status" and view="recent_merges" to follow it. Args: suggestion_id: Pair to dismiss permanently. merge_history_id: Merge to reverse. reason: Why, recorded on the dismissal. Optional. confirm: Required. Both actions are consequential and neither has a preview.

Inputs

InputRequiredTypeDescription
suggestion_idNostring / nullSee the schema below for constraints and defaults.
merge_history_idNostring / nullSee the schema below for constraints and defaults.
reasonNostring / nullSee the schema below for constraints and defaults.
confirmNobooleanSee the schema below for constraints and defaults.
Complete input schema
{
"properties": {
"suggestion_id": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"title": "Suggestion Id"
},
"merge_history_id": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"title": "Merge History Id"
},
"reason": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"title": "Reason"
},
"confirm": {
"default": false,
"title": "Confirm",
"type": "boolean"
}
},
"title": "g8_crm_resolve_duplicateArguments",
"type": "object"
}

g8_crm_update_company

Update Company. Uses the current organization and existing API permissions. body edits the company’s own fields. lifecycle_stage moves it through the revenue lifecycle (Suspects -> Leads -> Trial -> Customers -> Churned, plus any custom stages), which writes the revenue overlay rather than the company record and leaves an audit entry. Pass either, or both. Moving to customers is refused unless the company has a live subscription - the same guard the app enforces, so a manual “mark them a customer” cannot silently disagree with billing. With both, the field edit runs first and the stage move second, as two separate writes: on an error assume a partial change and re-read the company. Review the intended change and set confirm=true to execute; otherwise no API request is sent. API: PATCH /companies/{company_id} and POST /companies/{company_id}/lifecycle-stage

Inputs

InputRequiredTypeDescription
company_idYesintegerCompany ID
bodyNo#/$defs/ApiCompanyUpdateRequest / nullSee the schema below for constraints and defaults.
lifecycle_stageNostring / nullMove the company to this revenue lifecycle stage. Use a slug from g8_get_pipeline(include_lifecycle=True); an unknown slug is rejected with the list of valid ones.
confirmNobooleanSee the schema below for constraints and defaults.
Complete input schema
{
"$defs": {
"ApiCompanyUpdateRequest": {
"additionalProperties": false,
"properties": {
"address": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"title": "Address"
},
"city": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"title": "City"
},
"country": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"title": "Country"
},
"domain": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"title": "Domain"
},
"employee_count": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"title": "Employee Count"
},
"industry": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"title": "Industry"
},
"linkedin_url": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"title": "Linkedin Url"
},
"name": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"title": "Name"
},
"phone": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"title": "Phone"
},
"state": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"title": "State"
},
"website": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"title": "Website"
},
"zip": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"title": "Zip"
}
},
"title": "ApiCompanyUpdateRequest",
"type": "object"
}
},
"properties": {
"company_id": {
"description": "Company ID",
"title": "Company Id",
"type": "integer"
},
"body": {
"anyOf": [
{
"$ref": "#/$defs/ApiCompanyUpdateRequest"
},
{
"type": "null"
}
],
"default": null
},
"lifecycle_stage": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"description": "Move the company to this revenue lifecycle stage. Use a `slug` from g8_get_pipeline(include_lifecycle=True); an unknown slug is rejected with the list of valid ones.",
"title": "Lifecycle Stage"
},
"confirm": {
"default": false,
"title": "Confirm",
"type": "boolean"
}
},
"required": [
"company_id"
],
"title": "g8_crm_update_companyArguments",
"type": "object"
}

g8_crm_update_list

Update List. Uses the current organization and existing API permissions. Review the intended change and set confirm=true to execute; otherwise no API request is sent. API: PATCH /lists/{list_id}

Inputs

InputRequiredTypeDescription
list_idYesintegerList ID
bodyYes#/$defs/ApiListUpdateRequestSee the schema below for constraints and defaults.
confirmNobooleanSee the schema below for constraints and defaults.
Complete input schema
{
"$defs": {
"ApiListUpdateRequest": {
"additionalProperties": false,
"properties": {
"description": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"description": "New purpose note for the list (#16641). Omit to leave the current description unchanged; send an empty string to clear it.",
"title": "Description"
},
"title": {
"description": "New name for the list",
"minLength": 1,
"title": "Title",
"type": "string"
}
},
"required": [
"title"
],
"title": "ApiListUpdateRequest",
"type": "object"
}
},
"properties": {
"list_id": {
"description": "List ID",
"title": "List Id",
"type": "integer"
},
"body": {
"$ref": "#/$defs/ApiListUpdateRequest"
},
"confirm": {
"default": false,
"title": "Confirm",
"type": "boolean"
}
},
"required": [
"list_id",
"body"
],
"title": "g8_crm_update_listArguments",
"type": "object"
}

g8_crm_update_quote

Update Quote. Uses the current organization and existing API permissions. Review the intended change and set confirm=true to execute; otherwise no API request is sent. API: PATCH /quotes/{quote_id}

Inputs

InputRequiredTypeDescription
quote_idYesstringQuote UUID
bodyYes#/$defs/ApiQuoteUpdateRequestSee the schema below for constraints and defaults.
confirmNobooleanSee the schema below for constraints and defaults.
Complete input schema
{
"$defs": {
"ApiQuoteLineItemRequest": {
"additionalProperties": false,
"properties": {
"billing_frequency": {
"anyOf": [
{
"enum": [
"one_time",
"month",
"year",
"quarter"
],
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"title": "Billing Frequency"
},
"billing_start_date": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"description": "Exact recurring billing start date within the contract; start_month must remain 1 when supplied.",
"title": "Billing Start Date"
},
"description": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"title": "Description"
},
"discount_pct": {
"default": 0,
"maximum": 100.0,
"minimum": 0.0,
"title": "Discount Pct",
"type": "number"
},
"manual_product_id": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"title": "Manual Product Id"
},
"product_name": {
"maxLength": 255,
"minLength": 1,
"title": "Product Name",
"type": "string"
},
"quantity": {
"default": 1,
"maximum": 10000.0,
"minimum": 1.0,
"title": "Quantity",
"type": "integer"
},
"sort_order": {
"default": 0,
"title": "Sort Order",
"type": "integer"
},
"start_month": {
"default": 1,
"description": "Contract month when recurring billing begins; 1 means at contract start. Use billing_start_date instead for an exact date.",
"maximum": 120.0,
"minimum": 1.0,
"title": "Start Month",
"type": "integer"
},
"stripe_price_id": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"title": "Stripe Price Id"
},
"stripe_product_id": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"title": "Stripe Product Id"
},
"unit_amount": {
"description": "In cents",
"maximum": 1000000000.0,
"minimum": 0.0,
"title": "Unit Amount",
"type": "integer"
}
},
"required": [
"product_name",
"unit_amount"
],
"title": "ApiQuoteLineItemRequest",
"type": "object"
},
"ApiQuoteUpdateRequest": {
"additionalProperties": false,
"properties": {
"accepted_payment_methods": {
"anyOf": [
{
"items": {
"enum": [
"ach",
"credit_card",
"wire"
],
"type": "string"
},
"type": "array"
},
{
"type": "null"
}
],
"default": null,
"title": "Accepted Payment Methods"
},
"billing_address": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"title": "Billing Address"
},
"billing_contact_id": {
"anyOf": [
{
"type": "integer"
},
{
"type": "null"
}
],
"default": null,
"title": "Billing Contact Id"
},
"billing_email": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"title": "Billing Email"
},
"billing_legal_name": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"title": "Billing Legal Name"
},
"billing_primary_email": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"title": "Billing Primary Email"
},
"contract_duration_unit": {
"anyOf": [
{
"enum": [
"months",
"weeks",
"days"
],
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"title": "Contract Duration Unit"
},
"contract_duration_value": {
"anyOf": [
{
"type": "number"
},
{
"type": "null"
}
],
"default": null,
"title": "Contract Duration Value"
},
"contract_end_date": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"title": "Contract End Date"
},
"contract_months": {
"anyOf": [
{
"type": "number"
},
{
"type": "null"
}
],
"default": null,
"title": "Contract Months"
},
"contract_start_date": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"title": "Contract Start Date"
},
"currency": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"title": "Currency"
},
"deal_id": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"title": "Deal Id"
},
"line_items": {
"anyOf": [
{
"items": {
"$ref": "#/$defs/ApiQuoteLineItemRequest"
},
"type": "array"
},
{
"type": "null"
}
],
"default": null,
"title": "Line Items"
},
"marketing_rights": {
"anyOf": [
{
"items": {
"enum": [
"logo",
"quote",
"case_study"
],
"type": "string"
},
"type": "array"
},
{
"type": "null"
}
],
"default": null,
"title": "Marketing Rights"
},
"mashup_company_id": {
"anyOf": [
{
"type": "integer"
},
{
"type": "null"
}
],
"default": null,
"title": "Mashup Company Id"
},
"notes": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"title": "Notes"
},
"owner_id": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"title": "Owner Id"
},
"payment_terms": {
"anyOf": [
{
"enum": [
"due_on_receipt",
"net_15",
"net_30",
"net_45",
"net_60",
"net_90"
],
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"title": "Payment Terms"
},
"privacy_content": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"title": "Privacy Content"
},
"public_notes": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"title": "Public Notes"
},
"signer_contact_id": {
"anyOf": [
{
"type": "integer"
},
{
"type": "null"
}
],
"default": null,
"title": "Signer Contact Id"
},
"signer_email": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"title": "Signer Email"
},
"signer_name": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"title": "Signer Name"
},
"tax_amount": {
"anyOf": [
{
"type": "integer"
},
{
"type": "null"
}
],
"default": null,
"title": "Tax Amount"
},
"terms_content": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"title": "Terms Content"
},
"title": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"title": "Title"
},
"valid_until": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"title": "Valid Until"
}
},
"title": "ApiQuoteUpdateRequest",
"type": "object"
}
},
"properties": {
"quote_id": {
"description": "Quote UUID",
"title": "Quote Id",
"type": "string"
},
"body": {
"$ref": "#/$defs/ApiQuoteUpdateRequest"
},
"confirm": {
"default": false,
"title": "Confirm",
"type": "boolean"
}
},
"required": [
"quote_id",
"body"
],
"title": "g8_crm_update_quoteArguments",
"type": "object"
}

g8_current_org

Report which organization your MCP actions currently run against. Call when unsure which org is active before reading or writing org data. SURFACE THE RESULT TO THE USER, do not treat it as silent setup. When you call this at session start, briefly tell the user which org they are acting in, and if the result carries an activity brief, present it: for mode ‘resume’ show the “pick up where you left off” items (name + type) so they can continue prior work; for ‘onboarding’ offer the first setup steps; for ‘suggest’ offer the next actions. One short line or list is enough - the point is the user should SEE where to pick up, not have to ask. For mode ‘provisioning’ the workspace is still being set up: say so, note it usually takes under a minute, and offer to check again shortly. Re-call this tool when the user asks - a provisioning brief does not consume the once-per-session brief, so re-calling is correct here (and only here). If the brief carries first_connect=true, welcome the user to graph8, offer the get_started prompt for a guided walkthrough, and mention they can open their workspace in the browser via activity.app_url. Call this ONCE at session start and not again unless the user switches org (or you are re-checking a ‘provisioning’ brief). If action_required is true the user belongs to multiple orgs and has not chosen one yet - list orgs with g8_list_orgs and ASK which to use before any write.

Inputs

InputRequiredTypeDescription
NoneNoNo user-supplied inputs.
Complete input schema
{
"properties": {},
"title": "g8_current_orgArguments",
"type": "object"
}

g8_dashboard_chat_edit_app_page

Chat Edit App Page. Uses the current organization and existing API permissions. App-builder enablement and ownership gates apply. Review the intended change and set confirm=true to execute; otherwise no API request is sent. API: POST /app-pages/{page_id}/chat-edit

Inputs

InputRequiredTypeDescription
page_idYesstringSee the schema below for constraints and defaults.
bodyYes#/$defs/ApiAppPageChatEditRequestSee the schema below for constraints and defaults.
confirmNobooleanSee the schema below for constraints and defaults.
Complete input schema
{
"$defs": {
"ApiAppPageChatEditRequest": {
"additionalProperties": false,
"properties": {
"instruction": {
"maxLength": 2000,
"minLength": 1,
"title": "Instruction",
"type": "string"
}
},
"required": [
"instruction"
],
"title": "ApiAppPageChatEditRequest",
"type": "object"
}
},
"properties": {
"page_id": {
"title": "Page Id",
"type": "string"
},
"body": {
"$ref": "#/$defs/ApiAppPageChatEditRequest"
},
"confirm": {
"default": false,
"title": "Confirm",
"type": "boolean"
}
},
"required": [
"page_id",
"body"
],
"title": "g8_dashboard_chat_edit_app_pageArguments",
"type": "object"
}

g8_dashboard_create_app_page

Create App Page. Uses the current organization and existing API permissions. App-builder enablement and ownership gates apply. Review the intended change and set confirm=true to execute; otherwise no API request is sent. API: POST /app-pages

Inputs

InputRequiredTypeDescription
bodyYes#/$defs/ApiCreateAppPageRequestSee the schema below for constraints and defaults.
confirmNobooleanSee the schema below for constraints and defaults.
Complete input schema
{
"$defs": {
"ApiAppPageSourceDto": {
"additionalProperties": false,
"properties": {
"alias": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"description": "Handle used inside the page. Auto-assigned from the kind when omitted.",
"title": "Alias"
},
"position": {
"default": 0,
"title": "Position",
"type": "integer"
},
"role": {
"default": "data",
"title": "Role",
"type": "string"
},
"source_id": {
"description": "Opaque to everything but the connector that owns it",
"title": "Source Id",
"type": "string"
},
"source_kind": {
"description": "Connector family, e.g. staging-table or custom-object",
"title": "Source Kind",
"type": "string"
}
},
"required": [
"source_id",
"source_kind"
],
"title": "ApiAppPageSourceDto",
"type": "object"
},
"ApiCreateAppPageRequest": {
"additionalProperties": false,
"properties": {
"description": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"title": "Description"
},
"name": {
"title": "Name",
"type": "string"
},
"sources": {
"description": "At least one. A page with no data source can never be generated.",
"items": {
"$ref": "#/$defs/ApiAppPageSourceDto"
},
"minItems": 1,
"title": "Sources",
"type": "array"
}
},
"required": [
"name",
"sources"
],
"title": "ApiCreateAppPageRequest",
"type": "object"
}
},
"properties": {
"body": {
"$ref": "#/$defs/ApiCreateAppPageRequest"
},
"confirm": {
"default": false,
"title": "Confirm",
"type": "boolean"
}
},
"required": [
"body"
],
"title": "g8_dashboard_create_app_pageArguments",
"type": "object"
}

g8_dashboard_delete_app_page

Delete App Page. Uses the current organization and existing API permissions. App-builder enablement and ownership gates apply. Review the intended change and set confirm=true to execute; otherwise no API request is sent. API: DELETE /app-pages/{page_id}

Inputs

InputRequiredTypeDescription
page_idYesstringSee the schema below for constraints and defaults.
confirmNobooleanSee the schema below for constraints and defaults.
Complete input schema
{
"properties": {
"page_id": {
"title": "Page Id",
"type": "string"
},
"confirm": {
"default": false,
"title": "Confirm",
"type": "boolean"
}
},
"required": [
"page_id"
],
"title": "g8_dashboard_delete_app_pageArguments",
"type": "object"
}

g8_dashboard_generate_app_page

Generate App Page. Uses the current organization and existing API permissions. App-builder enablement and ownership gates apply. Review the intended change and set confirm=true to execute; otherwise no API request is sent. API: POST /app-pages/{page_id}/generate

Inputs

InputRequiredTypeDescription
page_idYesstringSee the schema below for constraints and defaults.
bodyYes#/$defs/ApiGenerateAppPageRequestSee the schema below for constraints and defaults.
confirmNobooleanSee the schema below for constraints and defaults.
Complete input schema
{
"$defs": {
"ApiGenerateAppPageRequest": {
"additionalProperties": false,
"properties": {
"instruction": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"description": "What the page should show. Free text; the generator composes every bound source.",
"title": "Instruction"
}
},
"title": "ApiGenerateAppPageRequest",
"type": "object"
}
},
"properties": {
"page_id": {
"title": "Page Id",
"type": "string"
},
"body": {
"$ref": "#/$defs/ApiGenerateAppPageRequest"
},
"confirm": {
"default": false,
"title": "Confirm",
"type": "boolean"
}
},
"required": [
"page_id",
"body"
],
"title": "g8_dashboard_generate_app_pageArguments",
"type": "object"
}

g8_dashboard_get_app_page

Get App Page. Uses the current organization and existing API permissions. App-builder enablement and ownership gates apply. API: GET /app-pages/{page_id}

Inputs

InputRequiredTypeDescription
page_idYesstringSee the schema below for constraints and defaults.
Complete input schema
{
"properties": {
"page_id": {
"title": "Page Id",
"type": "string"
}
},
"required": [
"page_id"
],
"title": "g8_dashboard_get_app_pageArguments",
"type": "object"
}

g8_dashboard_get_app_page_artifact

Get App Page Artifact. Uses the current organization and existing API permissions. App-builder enablement and ownership gates apply. API: GET /app-pages/{page_id}/artifact

Inputs

InputRequiredTypeDescription
page_idYesstringSee the schema below for constraints and defaults.
Complete input schema
{
"properties": {
"page_id": {
"title": "Page Id",
"type": "string"
}
},
"required": [
"page_id"
],
"title": "g8_dashboard_get_app_page_artifactArguments",
"type": "object"
}

g8_dashboard_get_app_page_status

Get App Page Status. Uses the current organization and existing API permissions. App-builder enablement and ownership gates apply. API: GET /app-pages/{page_id}/status

Inputs

InputRequiredTypeDescription
page_idYesstringSee the schema below for constraints and defaults.
Complete input schema
{
"properties": {
"page_id": {
"title": "Page Id",
"type": "string"
}
},
"required": [
"page_id"
],
"title": "g8_dashboard_get_app_page_statusArguments",
"type": "object"
}

g8_dashboard_invoke_app_page_action

Invoke App Page Action. Uses the current organization and existing API permissions. App-builder enablement and ownership gates apply. Review the intended change and set confirm=true to execute; otherwise no API request is sent. API: POST /app-pages/{page_id}/actions/{alias}/{action_name}

Inputs

InputRequiredTypeDescription
page_idYesstringSee the schema below for constraints and defaults.
aliasYesstringSee the schema below for constraints and defaults.
action_nameYesstringSee the schema below for constraints and defaults.
bodyYes#/$defs/ApiInvokeActionRequestSee the schema below for constraints and defaults.
confirmNobooleanSee the schema below for constraints and defaults.
Complete input schema
{
"$defs": {
"ApiInvokeActionRequest": {
"additionalProperties": false,
"properties": {
"args": {
"anyOf": [
{
"additionalProperties": true,
"type": "object"
},
{
"type": "null"
}
],
"default": null,
"description": "Action arguments. Validated against the object's own schema; an undeclared field is refused, not dropped.",
"title": "Args"
}
},
"title": "ApiInvokeActionRequest",
"type": "object"
}
},
"properties": {
"page_id": {
"title": "Page Id",
"type": "string"
},
"alias": {
"title": "Alias",
"type": "string"
},
"action_name": {
"title": "Action Name",
"type": "string"
},
"body": {
"$ref": "#/$defs/ApiInvokeActionRequest"
},
"confirm": {
"default": false,
"title": "Confirm",
"type": "boolean"
}
},
"required": [
"page_id",
"alias",
"action_name",
"body"
],
"title": "g8_dashboard_invoke_app_page_actionArguments",
"type": "object"
}

g8_dashboard_list_app_page_actions

List App Page Actions. Uses the current organization and existing API permissions. App-builder enablement and ownership gates apply. API: GET /app-pages/{page_id}/actions

Inputs

InputRequiredTypeDescription
page_idYesstringSee the schema below for constraints and defaults.
Complete input schema
{
"properties": {
"page_id": {
"title": "Page Id",
"type": "string"
}
},
"required": [
"page_id"
],
"title": "g8_dashboard_list_app_page_actionsArguments",
"type": "object"
}

g8_dashboard_list_app_page_versions

List App Page Versions. Uses the current organization and existing API permissions. App-builder enablement and ownership gates apply. API: GET /app-pages/{page_id}/versions

Inputs

InputRequiredTypeDescription
page_idYesstringSee the schema below for constraints and defaults.
Complete input schema
{
"properties": {
"page_id": {
"title": "Page Id",
"type": "string"
}
},
"required": [
"page_id"
],
"title": "g8_dashboard_list_app_page_versionsArguments",
"type": "object"
}

g8_dashboard_list_app_pages

List App Pages. Uses the current organization and existing API permissions. App-builder enablement and ownership gates apply. API: GET /app-pages

Inputs

InputRequiredTypeDescription
NoneNoNo user-supplied inputs.
Complete input schema
{
"properties": {},
"title": "g8_dashboard_list_app_pagesArguments",
"type": "object"
}

g8_dashboard_mint_app_page_frame_session

Mint App Page Frame Session. Uses the current organization and existing API permissions. App-builder enablement and ownership gates apply. Review the intended change and set confirm=true to execute; otherwise no API request is sent. API: POST /app-pages/{page_id}/frame-session

Inputs

InputRequiredTypeDescription
page_idYesstringSee the schema below for constraints and defaults.
confirmNobooleanSee the schema below for constraints and defaults.
Complete input schema
{
"properties": {
"page_id": {
"title": "Page Id",
"type": "string"
},
"confirm": {
"default": false,
"title": "Confirm",
"type": "boolean"
}
},
"required": [
"page_id"
],
"title": "g8_dashboard_mint_app_page_frame_sessionArguments",
"type": "object"
}

g8_dashboard_restore_app_page_version

Restore App Page Version. Uses the current organization and existing API permissions. App-builder enablement and ownership gates apply. Review the intended change and set confirm=true to execute; otherwise no API request is sent. API: POST /app-pages/{page_id}/versions/{version_num}/restore

Inputs

InputRequiredTypeDescription
page_idYesstringSee the schema below for constraints and defaults.
version_numYesintegerSee the schema below for constraints and defaults.
confirmNobooleanSee the schema below for constraints and defaults.
Complete input schema
{
"properties": {
"page_id": {
"title": "Page Id",
"type": "string"
},
"version_num": {
"title": "Version Num",
"type": "integer"
},
"confirm": {
"default": false,
"title": "Confirm",
"type": "boolean"
}
},
"required": [
"page_id",
"version_num"
],
"title": "g8_dashboard_restore_app_page_versionArguments",
"type": "object"
}

g8_delete_audience_sync

Delete an audience sync configuration (soft delete). IMPORTANT: This deactivates the sync. The audience data on the ad platform is NOT deleted - manage that directly in the platform. Args: config_id: Sync config ID

Inputs

InputRequiredTypeDescription
config_idYesintegerSee the schema below for constraints and defaults.
Complete input schema
{
"properties": {
"config_id": {
"title": "Config Id",
"type": "integer"
}
},
"required": [
"config_id"
],
"title": "g8_delete_audience_syncArguments",
"type": "object"
}

g8_delete_deal

Delete a deal by ID. Irreversible. Backed by DELETE /api/v1/deals/&#123;deal_id&#125;. Args: deal_id: Deal UUID returned by g8_get_deals / g8_create_deal.

Inputs

InputRequiredTypeDescription
deal_idYesstringSee the schema below for constraints and defaults.
Complete input schema
{
"properties": {
"deal_id": {
"title": "Deal Id",
"type": "string"
}
},
"required": [
"deal_id"
],
"title": "g8_delete_dealArguments",
"type": "object"
}

g8_delete_field

Soft-delete a custom column from contacts or companies. Always org-scoped. Pass list_id to additionally require that the column belong to a specific list - that is the safer default for list-scoped agents because the org may have many custom columns across different lists with similar names. Args: column_id: Column ID to delete (from g8_list_fields or g8_create_field) entity: Target entity - “contacts” or “companies” (default: contacts) list_id: Optional list scope guard. If set, returns 404 unless the column belongs to this list - prevents cross-list deletion.

Inputs

InputRequiredTypeDescription
column_idYesintegerSee the schema below for constraints and defaults.
entityNostringSee the schema below for constraints and defaults.
list_idNointeger / nullSee the schema below for constraints and defaults.
Complete input schema
{
"properties": {
"column_id": {
"title": "Column Id",
"type": "integer"
},
"entity": {
"default": "contacts",
"title": "Entity",
"type": "string"
},
"list_id": {
"anyOf": [
{
"type": "integer"
},
{
"type": "null"
}
],
"default": null,
"title": "List Id"
}
},
"required": [
"column_id"
],
"title": "g8_delete_fieldArguments",
"type": "object"
}

g8_delete_note

Delete a note by ID. Irreversible. Works on a contact, COMPANY or DEAL note - note ids are global, so no deal-specific variant is needed. Notes marked read_only by g8_list_notes cannot be deleted. Backed by DELETE /api/v1/notes/&#123;note_id&#125;. Args: note_id: Note UUID returned by g8_list_notes / g8_create_note.

Inputs

InputRequiredTypeDescription
note_idYesstringSee the schema below for constraints and defaults.
Complete input schema
{
"properties": {
"note_id": {
"title": "Note Id",
"type": "string"
}
},
"required": [
"note_id"
],
"title": "g8_delete_noteArguments",
"type": "object"
}

g8_delete_quote

Delete a draft quote. Irreversible. 400s on any non-draft status. Sent/accepted/voided quotes are preserved as legal records and cannot be hard-deleted - use g8_edit_quote_as_draft or g8_duplicate_quote instead. Args: quote_id: Quote UUID (must be in draft status).

Inputs

InputRequiredTypeDescription
quote_idYesstringSee the schema below for constraints and defaults.
Complete input schema
{
"properties": {
"quote_id": {
"title": "Quote Id",
"type": "string"
}
},
"required": [
"quote_id"
],
"title": "g8_delete_quoteArguments",
"type": "object"
}

g8_delete_sequence

Soft-delete (archive) a sequence. Sets is_archived=True. IMPORTANT: This archives a real sequence. Confirm with the user first. Archived sequences are hidden from the UI and excluded from worker processing. Args: sequence_id: Sequence ID to archive

Inputs

InputRequiredTypeDescription
sequence_idYesstringSee the schema below for constraints and defaults.
Complete input schema
{
"properties": {
"sequence_id": {
"title": "Sequence Id",
"type": "string"
}
},
"required": [
"sequence_id"
],
"title": "g8_delete_sequenceArguments",
"type": "object"
}

g8_delete_task

Delete a task by ID. Irreversible. Backed by DELETE /api/v1/tasks/&#123;task_id&#125;. Args: task_id: Task UUID returned by g8_get_tasks / g8_create_task.

Inputs

InputRequiredTypeDescription
task_idYesstringSee the schema below for constraints and defaults.
Complete input schema
{
"properties": {
"task_id": {
"title": "Task Id",
"type": "string"
}
},
"required": [
"task_id"
],
"title": "g8_delete_taskArguments",
"type": "object"
}

g8_doctor

Report what graph8 knows about a repository’s GTM readiness. Three read-only checks against the stored repo record: is the repo connected and does it carry a write key, are there stored scan results, and is there an install patch set (and was it applied). This does NOT reach into your running application. graph8 has no server-side probe, so it cannot tell you whether a script tag renders, an env var is set, or an event actually arrived. Those you verify in your own environment; this tells you whether the graph8 side of the install is in place. Args: repo_id: Repository ID

Inputs

InputRequiredTypeDescription
repo_idYesstringSee the schema below for constraints and defaults.
Complete input schema
{
"properties": {
"repo_id": {
"title": "Repo Id",
"type": "string"
}
},
"required": [
"repo_id"
],
"title": "g8_doctorArguments",
"type": "object"
}

g8_duplicate_quote

Clone any quote (any status) into a new draft. Title gets a (Copy) suffix. Useful for renewals or recreating an expired quote without retyping line items. Args: quote_id: Source quote UUID.

Inputs

InputRequiredTypeDescription
quote_idYesstringSee the schema below for constraints and defaults.
Complete input schema
{
"properties": {
"quote_id": {
"title": "Quote Id",
"type": "string"
}
},
"required": [
"quote_id"
],
"title": "g8_duplicate_quoteArguments",
"type": "object"
}

g8_edit_quote_as_draft

Convert a sent quote back into an editable draft via void+clone. Side effects: voids the existing signing envelope (recipient’s link stops resolving), marks the source voided, and creates a fresh draft copy with line items preserved. Use when a recipient needs revised pricing/terms on an already-sent quote. Returns the new quote_id to operate on next. Args: quote_id: Source quote UUID (must be in sent status).

Inputs

InputRequiredTypeDescription
quote_idYesstringSee the schema below for constraints and defaults.
Complete input schema
{
"properties": {
"quote_id": {
"title": "Quote Id",
"type": "string"
}
},
"required": [
"quote_id"
],
"title": "g8_edit_quote_as_draftArguments",
"type": "object"
}

g8_enrich_contacts

Enrich existing CRM contacts with third-party data or AI web research. CHARGES CREDITS per contact - call with dry_run=True first for a confirmation preview, then dry_run=False after the user confirms. Two modes share this entry point: 1. waterfall - runs the list’s saved waterfall pipeline. Returns a job_id; poll with g8_get_enrichment_job. Credits per contact = sum of provider step costs. 2. ai-research - runs a saved AI enrichment config (requires ai_group_id). Runs synchronously and returns final counts inline (status="completed", total, completed, results); the job_id is also valid for g8_get_enrichment_job. ~3 credits per contact. Mode: “auto” (default) prefers AI when ai_group_id is given else waterfall; “waterfall” forces waterfall; “ai-research” forces AI (ai_group_id required). Waterfall pipeline discovery: - No providers / email_verification / target_field: uses the first active saved pipeline on the list, or auto-creates a minimal graph8 lookup pipeline (0 credits). - target_field="phone": enrich a SPECIFIC column with the correct provider action for that column. The server builds the pipeline from its per-column template, so a phone request runs leadmagic mobile_finder (NOT email_finder) and writes into the real phone field. Accepts canonical columns (CONTACT_DIRECT_PHONE, CONTACT_MOBILE_PHONE, CONTACT_WORK_EMAIL, CONTACT_LINKEDIN_URL, COMPANY_PHONE, …) or synonyms (“phone”, “mobile”, “email”, “linkedin”). ALWAYS pass this when the user names a field to enrich (“enrich the phone”, “find mobiles”). - providers=["hunter","prospeo"]: provisions a pipeline running those providers in order, deduped by name so re-calls reuse it. Allowed: graph8, hunter, prospeo, dropcontact, icypeas, leadmagic, emaillistverify, apollo, lusha, rocketreach. Combine with target_field to keep only those providers from the column’s template (each keeps its correct per-field action, e.g. providers=["leadmagic"] + target_field="phone" gives leadmagic mobile_finder). - email_verification=True: bolts ZeroBounce (valid only) on after enrichment. ~1 extra verification credit per row. Credentials (system vs your own key): graph8 funds most providers with its own keys, so a provisioned pipeline uses graph8 system credentials by default and charges credits - no setup needed. If your org has its own key for a provider, that key is used instead (no credits). lusha and rocketreach are NOT graph8-funded: they need your own key under Settings > Providers or their step is skipped. Call g8_list_enrichment_providers to see which is which before enriching. Single-contact enrichment is fine (one-element list); the contact must already be in a list. For an unattached prospect use g8_lookup_person. Args: contact_ids: List of CRM contact IDs to enrich. list_id: ID of the list the contacts belong to. dry_run: When True, return a confirmation preview instead of running. mode: “auto” | “waterfall” | “ai-research”. Defaults to “auto”. ai_group_id: group_id of a saved AI config (required for ai-research). Discover via the /enrichment/ai/configs?list_id=... endpoint or the campaign builder UI. providers: Optional ordered list of provider names. When supplied, auto-provisions a pipeline that runs these providers (ignored for ai-research). Mutually exclusive with ai_group_id’s mode. email_verification: When True, bolts ZeroBounce email verification onto the auto-provisioned pipeline (system credentials, valid only). Ignored when an existing pipeline is reused without providers overrides. target_field: Optional column to enrich (e.g. “phone”, “mobile”, “email”, or a canonical CONTACT_/COMPANY_ column). Builds the pipeline from the server’s per-column template so each provider runs the CORRECT action for that column (phone → leadmagic mobile_finder, not email_finder) and writes into the real field. Pass this whenever the user names a field to enrich; omit to run the list’s default/saved pipeline. Ignored for ai-research.

Inputs

InputRequiredTypeDescription
contact_idsYesarraySee the schema below for constraints and defaults.
list_idYesintegerSee the schema below for constraints and defaults.
dry_runNobooleanSee the schema below for constraints and defaults.
modeNostringSee the schema below for constraints and defaults.
ai_group_idNostring / nullSee the schema below for constraints and defaults.
providersNoarray / nullSee the schema below for constraints and defaults.
email_verificationNobooleanSee the schema below for constraints and defaults.
target_fieldNostring / nullSee the schema below for constraints and defaults.
Complete input schema
{
"properties": {
"contact_ids": {
"items": {
"type": "integer"
},
"title": "Contact Ids",
"type": "array"
},
"list_id": {
"title": "List Id",
"type": "integer"
},
"dry_run": {
"default": false,
"title": "Dry Run",
"type": "boolean"
},
"mode": {
"default": "auto",
"title": "Mode",
"type": "string"
},
"ai_group_id": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"title": "Ai Group Id"
},
"providers": {
"anyOf": [
{
"items": {
"type": "string"
},
"type": "array"
},
{
"type": "null"
}
],
"default": null,
"title": "Providers"
},
"email_verification": {
"default": false,
"title": "Email Verification",
"type": "boolean"
},
"target_field": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"title": "Target Field"
}
},
"required": [
"contact_ids",
"list_id"
],
"title": "g8_enrich_contactsArguments",
"type": "object"
}

g8_enrichment_list_ai_configs

List Ai Configs. Uses the current organization and existing API permissions. API: GET /enrichment/ai/configs

Inputs

InputRequiredTypeDescription
list_idYesintegerList ID whose saved AI configs to return
Complete input schema
{
"properties": {
"list_id": {
"description": "List ID whose saved AI configs to return",
"title": "List Id",
"type": "integer"
}
},
"required": [
"list_id"
],
"title": "g8_enrichment_list_ai_configsArguments",
"type": "object"
}

g8_enrichment_start_enrichment

Start Enrichment. Uses the current organization and existing API permissions. Review the intended change and set confirm=true to execute; otherwise no API request is sent. API: POST /enrichment/enrich

Inputs

InputRequiredTypeDescription
bodyYes#/$defs/ApiEnrichRequestSee the schema below for constraints and defaults.
confirmNobooleanSee the schema below for constraints and defaults.
Complete input schema
{
"$defs": {
"ApiEnrichRequest": {
"additionalProperties": false,
"properties": {
"contact_ids": {
"description": "Contact IDs to enrich",
"items": {
"type": "integer"
},
"title": "Contact Ids",
"type": "array"
},
"fields_config": {
"anyOf": [
{
"additionalProperties": {
"items": {
"type": "string"
},
"type": "array"
},
"type": "object"
},
{
"type": "null"
}
],
"default": null,
"description": "Fields to enrich and provider order. Example: {\"work_email\": [\"prospeo\", \"dropcontact\"]}",
"title": "Fields Config"
},
"list_id": {
"description": "List ID the contacts belong to",
"title": "List Id",
"type": "integer"
}
},
"required": [
"contact_ids",
"list_id"
],
"title": "ApiEnrichRequest",
"type": "object"
}
},
"properties": {
"body": {
"$ref": "#/$defs/ApiEnrichRequest"
},
"confirm": {
"default": false,
"title": "Confirm",
"type": "boolean"
}
},
"required": [
"body"
],
"title": "g8_enrichment_start_enrichmentArguments",
"type": "object"
}

g8_enrichment_verify_email

Verify Email. Uses the current organization and existing API permissions. Review the intended change and set confirm=true to execute; otherwise no API request is sent. API: POST /enrichment/verify-email

Inputs

InputRequiredTypeDescription
bodyYes#/$defs/ApiVerifyEmailRequestSee the schema below for constraints and defaults.
confirmNobooleanSee the schema below for constraints and defaults.
Complete input schema
{
"$defs": {
"ApiVerifyEmailRequest": {
"additionalProperties": false,
"properties": {
"email": {
"description": "Email address to verify",
"title": "Email",
"type": "string"
}
},
"required": [
"email"
],
"title": "ApiVerifyEmailRequest",
"type": "object"
}
},
"properties": {
"body": {
"$ref": "#/$defs/ApiVerifyEmailRequest"
},
"confirm": {
"default": false,
"title": "Confirm",
"type": "boolean"
}
},
"required": [
"body"
],
"title": "g8_enrichment_verify_emailArguments",
"type": "object"
}

g8_execute

Run ANY graph8 tool by name, even when it is not in your tools list. Use this when g8_tool_search found the tool you need but it did NOT appear in your tool palette (some MCP clients only refresh tools on reconnect). Flow: g8_tool_search returns matches with input_schema for the top hits -> build arguments from that schema -> call g8_execute(tool_name=…, arguments={…}). Never tell the user a graph8 capability is unavailable without trying this first. Args: tool_name: Exact tool name from g8_tool_search (e.g. “g8_voice_create_dialer_session”). arguments: Arguments for that tool, matching its input_schema. Omit or pass {} for tools without required arguments. Returns a G8ExecuteResult envelope: ok=true with result on success; ok=false with error, error_type and a hint on failure. On invalid_arguments the failure includes the tool’s input_schema - fix the arguments and retry. Permissions and org-context rules apply to the wrapped tool exactly as if it were called directly. The ctx parameter is auto-injected by FastMCP and hidden from the public tool schema - clients do not see it.

Inputs

InputRequiredTypeDescription
tool_nameYesstringSee the schema below for constraints and defaults.
argumentsNoobject / nullSee the schema below for constraints and defaults.
Complete input schema
{
"properties": {
"tool_name": {
"title": "Tool Name",
"type": "string"
},
"arguments": {
"anyOf": [
{
"additionalProperties": true,
"type": "object"
},
{
"type": "null"
}
],
"default": null,
"title": "Arguments"
}
},
"required": [
"tool_name"
],
"title": "g8_executeArguments",
"type": "object"
}

g8_find_companies

Search graph8’s company database for new prospects. Unlike g8_search_companies (which searches YOUR CRM), this searches the open data index for companies you don’t track yet. Free - no credits are consumed. The organization’s default-on deliverability protection policy is applied automatically. It may exclude high-risk account categories configured under Settings > Compliance > Deliverability. Each filter is a dict with: field, operator, value. Fields: name, domain, industry, industry_group, employee_count, revenue, founded_year, country, state, city, linkedin_followers Operators: any_of, contains, all_of, none_of, is_empty, is_not_empty, between, exists Args: filters: List of filter objects (field, operator, value) page: Page number (default 1) limit: Results per page (default 25, max 200)

Inputs

InputRequiredTypeDescription
filtersYesarraySee the schema below for constraints and defaults.
pageNointegerSee the schema below for constraints and defaults.
limitNointegerSee the schema below for constraints and defaults.
Complete input schema
{
"properties": {
"filters": {
"items": {
"additionalProperties": true,
"type": "object"
},
"title": "Filters",
"type": "array"
},
"page": {
"default": 1,
"title": "Page",
"type": "integer"
},
"limit": {
"default": 25,
"title": "Limit",
"type": "integer"
}
},
"required": [
"filters"
],
"title": "g8_find_companiesArguments",
"type": "object"
}

g8_find_contacts

Search graph8’s contact database to find new prospects. Unlike g8_search_contacts (which searches YOUR CRM), this searches the open data index for leads you don’t have yet. Free - no credits are consumed. The organization’s default-on deliverability protection policy is applied automatically. It may exclude high-risk account categories configured under Settings > Compliance > Deliverability. Each filter is a dict with: field, operator, value. Fields: first_name, last_name, work_email, job_title, seniority_level, job_department, role, linkedin_url, city, state, country, company_name, company_domain, company_industry, company_employee_count, company_revenue, company_founded_year Operators: any_of, contains, all_of, none_of, is_empty, is_not_empty, between, exists Example filters: [ {“field”: “seniority_level”, “operator”: “any_of”, “value”: [“Vice President”, “Director”]}, {“field”: “company_industry”, “operator”: “contains”, “value”: [“SaaS”, “Software”]}, {“field”: “company_employee_count”, “operator”: “between”, “value”: [50, 500]} ] Note: the index stores seniority as full strings (“Vice President”, not “VP”). Common abbreviations (VP, SVP, EVP, AVP, C-Level, C-Suite) are auto-expanded, but prefer the canonical form. Args: filters: List of filter objects (field, operator, value) page: Page number (default 1) limit: Results per page (default 25, max 200)

Inputs

InputRequiredTypeDescription
filtersYesarraySee the schema below for constraints and defaults.
pageNointegerSee the schema below for constraints and defaults.
limitNointegerSee the schema below for constraints and defaults.
Complete input schema
{
"properties": {
"filters": {
"items": {
"additionalProperties": true,
"type": "object"
},
"title": "Filters",
"type": "array"
},
"page": {
"default": 1,
"title": "Page",
"type": "integer"
},
"limit": {
"default": 25,
"title": "Limit",
"type": "integer"
}
},
"required": [
"filters"
],
"title": "g8_find_contactsArguments",
"type": "object"
}

g8_forms_get_form_overview

Get operational detail for one lead-capture form. Returns capture/delivery/activation health, submission metrics, the destination list, owner, and display name. Args: form_key: The form’s id / group key (from g8_forms_list_forms). source_id: The form’s write key / site (from g8_forms_list_forms) - a form id is only unique within its source, so this is required.

Inputs

InputRequiredTypeDescription
form_keyYesstringSee the schema below for constraints and defaults.
source_idYesstringSee the schema below for constraints and defaults.
Complete input schema
{
"properties": {
"form_key": {
"title": "Form Key",
"type": "string"
},
"source_id": {
"title": "Source Id",
"type": "string"
}
},
"required": [
"form_key",
"source_id"
],
"title": "g8_forms_get_form_overviewArguments",
"type": "object"
}

g8_forms_list_forms

List and search the org’s website lead-capture forms. Use this to FIND a specific form by name - e.g. search=‘discovery’ to locate a “discovery” form. Each result carries the form_key + source_id needed by g8_forms_get_form_overview. Args: page: 1-indexed page (default 1). per_page: Rows per page (default 20, max 200). search: Case-insensitive substring match on the form name/id. source_id: Restrict to one write key / site. sort_field: One of ‘total_submissions’, ‘latest_submitted_at’, ‘form_tag_id’. sort_order: ‘asc’ or ‘desc’.

Inputs

InputRequiredTypeDescription
pageNointegerSee the schema below for constraints and defaults.
per_pageNointegerSee the schema below for constraints and defaults.
searchNostring / nullSee the schema below for constraints and defaults.
source_idNostring / nullSee the schema below for constraints and defaults.
sort_fieldNostring / nullSee the schema below for constraints and defaults.
sort_orderNostring / nullSee the schema below for constraints and defaults.
Complete input schema
{
"properties": {
"page": {
"default": 1,
"title": "Page",
"type": "integer"
},
"per_page": {
"default": 20,
"title": "Per Page",
"type": "integer"
},
"search": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"title": "Search"
},
"source_id": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"title": "Source Id"
},
"sort_field": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"title": "Sort Field"
},
"sort_order": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"title": "Sort Order"
}
},
"title": "g8_forms_list_formsArguments",
"type": "object"
}

g8_generate_spintax

Rewrite a manual email into spintax for per-contact variation. CHARGES CREDITS per call (one AI generation, token-metered). Confirm with the user before calling. Takes a plain subject + body and returns them rewritten with nested {{option a|option b}} spintax blocks. At send time the sequencer picks one option per block per contact, so every lead receives a different-looking variant of the same email. IMPORTANT - the step MUST be input_type=‘MANUAL_TEMPLATE’. An email step left at the default input_type=‘ON_DEMAND’ IGNORES subject/body entirely and asks the AI to write each email from step_data.instructions instead, so spintax you paste there is silently discarded and never sent. Writing this result onto an ON_DEMAND step now returns a 422 that names the fix. After writing the result into a step, verify with g8_list_sequence_steps: rendered.variants shows the actual per-contact variations, and raw {{a|b|c}} braces in step_data are correct storage rather than a failure. Campaign sequence steps resolve spintax identically at send time, so the result works there too. Generation is synchronous and can take up to ~2 minutes. The output is validated server-side (balanced braces, every {{variable}} preserved, links preserved for HTML) - invalid model output returns an error, never silently broken content. A 402 error means insufficient credits OR an inactive subscription. A 429 error means the server is at its concurrent-generation cap - wait ~15s and retry, do not treat it as a hard failure. Args: subject: Email subject to rewrite into spintax body: Email body to rewrite into spintax email_type: Body format, ‘plain’ (default) or ‘html’. HTML preserves <a href> links. tone_instructions: Optional tone/style guidance for the rewrite strength: Variation intensity - ‘light’, ‘balanced’ (default), or ‘maximum’. Each level has an enforced ceiling on total distinct renderings (subject x body), applied after generation: light up to 200 with flat blocks only, balanced up to 5,000, maximum up to 100,000. Output above the ceiling is trimmed down rather than rejected.

Inputs

InputRequiredTypeDescription
subjectYesstringSee the schema below for constraints and defaults.
bodyYesstringSee the schema below for constraints and defaults.
email_typeNostringSee the schema below for constraints and defaults.
tone_instructionsNostring / nullSee the schema below for constraints and defaults.
strengthNostringSee the schema below for constraints and defaults.
Complete input schema
{
"properties": {
"subject": {
"title": "Subject",
"type": "string"
},
"body": {
"title": "Body",
"type": "string"
},
"email_type": {
"default": "plain",
"title": "Email Type",
"type": "string"
},
"tone_instructions": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"title": "Tone Instructions"
},
"strength": {
"default": "balanced",
"title": "Strength",
"type": "string"
}
},
"required": [
"subject",
"body"
],
"title": "g8_generate_spintaxArguments",
"type": "object"
}

g8_get_activities

List recent CRM activities for the current organization.

Inputs

InputRequiredTypeDescription
pageNointegerSee the schema below for constraints and defaults.
limitNointegerSee the schema below for constraints and defaults.
activity_typeNostring / nullSee the schema below for constraints and defaults.
contact_idNostring / nullSee the schema below for constraints and defaults.
company_idNostring / nullSee the schema below for constraints and defaults.
mashup_contact_idNointeger / nullSee the schema below for constraints and defaults.
mashup_company_idNointeger / nullSee the schema below for constraints and defaults.
deal_idNostring / nullSee the schema below for constraints and defaults.
occurred_afterNostring / nullSee the schema below for constraints and defaults.
occurred_beforeNostring / nullSee the schema below for constraints and defaults.
Complete input schema
{
"properties": {
"page": {
"default": 1,
"title": "Page",
"type": "integer"
},
"limit": {
"default": 50,
"title": "Limit",
"type": "integer"
},
"activity_type": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"title": "Activity Type"
},
"contact_id": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"title": "Contact Id"
},
"company_id": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"title": "Company Id"
},
"mashup_contact_id": {
"anyOf": [
{
"type": "integer"
},
{
"type": "null"
}
],
"default": null,
"title": "Mashup Contact Id"
},
"mashup_company_id": {
"anyOf": [
{
"type": "integer"
},
{
"type": "null"
}
],
"default": null,
"title": "Mashup Company Id"
},
"deal_id": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"title": "Deal Id"
},
"occurred_after": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"title": "Occurred After"
},
"occurred_before": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"title": "Occurred Before"
}
},
"title": "g8_get_activitiesArguments",
"type": "object"
}

g8_get_activity_summary

Summarize recent CRM activity for the current organization. Aggregates the most recent activities into a rollup: total count, counts by activity_type and outcome, daily counts for the window, top owners by activity count, and total call/meeting duration. Good for “how was this week” / “which reps are most active” without paging the raw feed. Pulls up to 200 most recent activities then filters client-side by the day window. If more than 200 fall in the window the summary covers only the newest 200 (truncated flag is true) - call g8_get_activities with narrower filters for a full feed. Args: days: Size of the rollup window in days ending now (default 7). activity_type: Optional activity type filter (e.g. “call”, “email”, “meeting”). Passed to the server-side filter. contact_id: Optional contact filter. company_id: Optional company filter. deal_id: Optional deal filter.

Inputs

InputRequiredTypeDescription
daysNointegerSee the schema below for constraints and defaults.
activity_typeNostring / nullSee the schema below for constraints and defaults.
contact_idNostring / nullSee the schema below for constraints and defaults.
company_idNostring / nullSee the schema below for constraints and defaults.
deal_idNostring / nullSee the schema below for constraints and defaults.
Complete input schema
{
"properties": {
"days": {
"default": 7,
"title": "Days",
"type": "integer"
},
"activity_type": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"title": "Activity Type"
},
"contact_id": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"title": "Contact Id"
},
"company_id": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"title": "Company Id"
},
"deal_id": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"title": "Deal Id"
}
},
"title": "g8_get_activity_summaryArguments",
"type": "object"
}

g8_get_audience_sync

Get details for a specific audience sync configuration. Args: config_id: Sync config ID

Inputs

InputRequiredTypeDescription
config_idYesintegerSee the schema below for constraints and defaults.
Complete input schema
{
"properties": {
"config_id": {
"title": "Config Id",
"type": "integer"
}
},
"required": [
"config_id"
],
"title": "g8_get_audience_syncArguments",
"type": "object"
}

g8_get_audience_sync_errors

Get error logs for an audience sync configuration. Returns recent failed sync runs with error messages and details. Args: config_id: Sync config ID limit: Max errors to return (default 20, max 100)

Inputs

InputRequiredTypeDescription
config_idYesintegerSee the schema below for constraints and defaults.
limitNointegerSee the schema below for constraints and defaults.
Complete input schema
{
"properties": {
"config_id": {
"title": "Config Id",
"type": "integer"
},
"limit": {
"default": 20,
"title": "Limit",
"type": "integer"
}
},
"required": [
"config_id"
],
"title": "g8_get_audience_sync_errorsArguments",
"type": "object"
}

g8_get_audience_sync_runs

Get sync run history for an audience sync configuration. Returns recent sync runs with status, member counts, and timing. Args: config_id: Sync config ID limit: Max runs to return (default 20, max 100)

Inputs

InputRequiredTypeDescription
config_idYesintegerSee the schema below for constraints and defaults.
limitNointegerSee the schema below for constraints and defaults.
Complete input schema
{
"properties": {
"config_id": {
"title": "Config Id",
"type": "integer"
},
"limit": {
"default": 20,
"title": "Limit",
"type": "integer"
}
},
"required": [
"config_id"
],
"title": "g8_get_audience_sync_runsArguments",
"type": "object"
}

g8_get_booking

Get a single booking by its UID. Returns the full detail: attendees, status, times, location, meeting_url, the attendee’s form responses, and internal notes. Args: booking_uid: Booking UID (uuid string) from g8_appointments_list_bookings.

Inputs

InputRequiredTypeDescription
booking_uidYesstringSee the schema below for constraints and defaults.
Complete input schema
{
"properties": {
"booking_uid": {
"title": "Booking Uid",
"type": "string"
}
},
"required": [
"booking_uid"
],
"title": "g8_appointments_get_bookingArguments",
"type": "object"
}

g8_get_campaign

Get full details for a specific campaign. Args: repo_id: Repository ID campaign_id: Campaign ID from g8_list_campaigns

Inputs

InputRequiredTypeDescription
repo_idYesstringSee the schema below for constraints and defaults.
campaign_idYesstringSee the schema below for constraints and defaults.
Complete input schema
{
"properties": {
"repo_id": {
"title": "Repo Id",
"type": "string"
},
"campaign_id": {
"title": "Campaign Id",
"type": "string"
}
},
"required": [
"repo_id",
"campaign_id"
],
"title": "g8_get_campaignArguments",
"type": "object"
}

g8_get_company_contacts

List the contacts attached to a company. Returns the people your org has recorded at a given company. Useful for multi-threading prep (“who else do we know at Acme?”) or for building account-based outreach lists. Args: company_id: Integer company ID. limit: Items per page (default 100, max 200). offset: Pagination offset (default 0).

Inputs

InputRequiredTypeDescription
company_idYesintegerSee the schema below for constraints and defaults.
limitNointegerSee the schema below for constraints and defaults.
offsetNointegerSee the schema below for constraints and defaults.
Complete input schema
{
"properties": {
"company_id": {
"title": "Company Id",
"type": "integer"
},
"limit": {
"default": 100,
"title": "Limit",
"type": "integer"
},
"offset": {
"default": 0,
"title": "Offset",
"type": "integer"
}
},
"required": [
"company_id"
],
"title": "g8_get_company_contactsArguments",
"type": "object"
}

g8_get_company_deals

List all deals associated with a company (account view). Returns every deal linked to this company, with stage, value, currency, pipeline, role, owner, and close date. Useful for “what’s in the pipeline for this account” questions. Mirrors g8_get_contact_deals. Backed by GET /api/v1/companies/&#123;company_id&#125;/deals. Args: company_id: Integer company ID (mashup_companies.id).

Inputs

InputRequiredTypeDescription
company_idYesintegerSee the schema below for constraints and defaults.
Complete input schema
{
"properties": {
"company_id": {
"title": "Company Id",
"type": "integer"
}
},
"required": [
"company_id"
],
"title": "g8_get_company_dealsArguments",
"type": "object"
}

g8_get_company_quotes

List every quote attached to a given company (account view). Args: company_id: MashupCompany ID (integer).

Inputs

InputRequiredTypeDescription
company_idYesintegerSee the schema below for constraints and defaults.
Complete input schema
{
"properties": {
"company_id": {
"title": "Company Id",
"type": "integer"
}
},
"required": [
"company_id"
],
"title": "g8_get_company_quotesArguments",
"type": "object"
}

g8_get_contact_activity

List recent activities for a single contact. Returns the activity timeline (calls, emails, meetings, notes) for this contact, newest first. Good for “what have we done with this person”. Pulls up to 200 most recent org-wide activities and filters client-side. For very active orgs the contact’s older activities may fall outside the 200-row scan window; the response sets scan_truncated: true then. Args: contact_id: Integer contact ID. limit: Max activities to return after filtering (default 50, max 200). activity_type: Optional type filter (e.g. “call”, “email”, “meeting”).

Inputs

InputRequiredTypeDescription
contact_idYesintegerSee the schema below for constraints and defaults.
limitNointegerSee the schema below for constraints and defaults.
activity_typeNostring / nullSee the schema below for constraints and defaults.
Complete input schema
{
"properties": {
"contact_id": {
"title": "Contact Id",
"type": "integer"
},
"limit": {
"default": 50,
"title": "Limit",
"type": "integer"
},
"activity_type": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"title": "Activity Type"
}
},
"required": [
"contact_id"
],
"title": "g8_get_contact_activityArguments",
"type": "object"
}

g8_get_contact_company

Get the company record attached to a contact. Single-call wrapper: /contacts/&#123;id&#125; already embeds the contact’s company as a nested object (id, name, domain, industry, location, linkedin_url, logo_url), so we extract and return that directly. Returns an empty ResourceDetail if the contact has no company linkage. Args: contact_id: Integer contact ID.

Inputs

InputRequiredTypeDescription
contact_idYesintegerSee the schema below for constraints and defaults.
Complete input schema
{
"properties": {
"contact_id": {
"title": "Contact Id",
"type": "integer"
}
},
"required": [
"contact_id"
],
"title": "g8_get_contact_companyArguments",
"type": "object"
}

g8_get_contact_deals

List all deals associated with a contact. Returns every deal where this contact is the primary or associated contact, with stage, value, currency, pipeline, and role. Useful for “what’s this person working on with us” questions. Args: contact_id: Integer contact ID.

Inputs

InputRequiredTypeDescription
contact_idYesintegerSee the schema below for constraints and defaults.
Complete input schema
{
"properties": {
"contact_id": {
"title": "Contact Id",
"type": "integer"
}
},
"required": [
"contact_id"
],
"title": "g8_get_contact_dealsArguments",
"type": "object"
}

g8_get_contact_detail

Get the full detail record for a single CRM contact. Returns every backend field the org has on this contact (emails, phones, job title, company linkage, social URLs, location, custom attributes). Use after g8_search_contacts has narrowed down a contact_id to read the full record. With include_suppression=True the record also carries a suppression block - is_suppressed, active_channels and the ledger rows behind them - read from the SAME ledger the sequencer and newsletter send gates check. Ask for it BEFORE contacting anyone, or before enrolling them in a sequence. That read is a second API call, so leave it off when you only need the fields. If the suppression read fails, the whole call returns that error rather than a record with the block missing: a returned record either has a true suppression answer or is not returned at all. Nothing is ever inferred from an absent block. Args: contact_id: Integer contact ID (from g8_search_contacts or CRM). include_suppression: Attach the do-not-contact status. Default False, which issues exactly the request this tool always did.

Inputs

InputRequiredTypeDescription
contact_idYesintegerSee the schema below for constraints and defaults.
include_suppressionNobooleanSee the schema below for constraints and defaults.
Complete input schema
{
"properties": {
"contact_id": {
"title": "Contact Id",
"type": "integer"
},
"include_suppression": {
"default": false,
"title": "Include Suppression",
"type": "boolean"
}
},
"required": [
"contact_id"
],
"title": "g8_get_contact_detailArguments",
"type": "object"
}

g8_get_contact_quotes

List quotes where this contact is the signer. Args: contact_id: MashupContact ID (integer).

Inputs

InputRequiredTypeDescription
contact_idYesintegerSee the schema below for constraints and defaults.
Complete input schema
{
"properties": {
"contact_id": {
"title": "Contact Id",
"type": "integer"
}
},
"required": [
"contact_id"
],
"title": "g8_get_contact_quotesArguments",
"type": "object"
}

g8_get_crm_fields

Discover available fields for an entity type on a CRM provider (use to build field mappings before pushing data). Args: provider: CRM provider (hubspot, salesforce, pipedrive, zoho, sugarcrm) entity_type: Entity type (contacts, companies, leads, deals)

Inputs

InputRequiredTypeDescription
providerYesstringSee the schema below for constraints and defaults.
entity_typeNostringSee the schema below for constraints and defaults.
Complete input schema
{
"properties": {
"provider": {
"title": "Provider",
"type": "string"
},
"entity_type": {
"default": "contacts",
"title": "Entity Type",
"type": "string"
}
},
"required": [
"provider"
],
"title": "g8_get_crm_fieldsArguments",
"type": "object"
}

g8_get_crm_status

Check connection health for a CRM provider. Args: provider: CRM provider (hubspot, salesforce, pipedrive, zoho, sugarcrm)

Inputs

InputRequiredTypeDescription
providerYesstringSee the schema below for constraints and defaults.
Complete input schema
{
"properties": {
"provider": {
"title": "Provider",
"type": "string"
}
},
"required": [
"provider"
],
"title": "g8_get_crm_statusArguments",
"type": "object"
}

g8_get_deal

Get details for a single CRM deal.

Inputs

InputRequiredTypeDescription
deal_idYesstringSee the schema below for constraints and defaults.
Complete input schema
{
"properties": {
"deal_id": {
"title": "Deal Id",
"type": "string"
}
},
"required": [
"deal_id"
],
"title": "g8_get_dealArguments",
"type": "object"
}

g8_get_deals

List deals with owner, outcome, stage, pipeline, activity and contact filters. For “my stale deals” use stale_before (ISO timestamp): it returns deals last touched before that time OR never touched at all. Note that last_activity_before alone EXCLUDES never-touched deals (no activity = no last-activity timestamp), which is usually not what “stale” means. Use outcome=“won” | “lost” | “open” to filter by outcome. A deal has exactly one, so this is unambiguous. For closed-lost re-engagement use outcome=“lost”. For “how many deals did we close this month/quarter” combine outcome=“won” with close_after / close_before (ISO timestamps) to scope by close_date. The window is half-open [close_after, close_before) and is applied server-side, so the returned total is the exact count for the period rather than a client-side tally of a truncated page. A period count needs BOTH bounds AND the outcome filter: close_before alone (no lower bound) sums the entire deal history into the period, and omitting outcome counts open/lost deals whose close_date is only a forecast. Deals with no close_date are excluded from a windowed query. Do NOT use is_closed_won=false for that - it is a LEGACY boolean whose false branch means “not won”, which also returns open and unclassified deals. Prefer outcome= in all new code; passing an outcome that contradicts is_closed_won is rejected (400). Pair outcome=“lost” with last_activity_before rather than stale_before when the result will drive an automated action: stale_before also returns deals that have NEVER had a recorded interaction, which is the wrong cohort for outreach that is meant to reference prior conversations. Add has_activity=true to be explicit. Use has_contact=false for “deals without a contact” - the orphaned-deal cohort. This IS filterable server-side, so never page the pipeline checking linkage yourself. “No contact” means no linked contact AND no live primary contact, so a pointer at a merged-away contact still counts as orphaned. Results carry closed_lost_reason when the rep recorded one; it is frequently null, because nothing in the platform requires it.

Inputs

InputRequiredTypeDescription
pageNointegerSee the schema below for constraints and defaults.
limitNointegerSee the schema below for constraints and defaults.
stage_idNostring / nullSee the schema below for constraints and defaults.
pipeline_idNostring / nullSee the schema below for constraints and defaults.
searchNostring / nullSee the schema below for constraints and defaults.
owner_idNostring / nullSee the schema below for constraints and defaults.
owner_emailNostring / nullSee the schema below for constraints and defaults.
is_closed_wonNoboolean / nullSee the schema below for constraints and defaults.
outcomeNostring / nullSee the schema below for constraints and defaults.
last_activity_beforeNostring / nullSee the schema below for constraints and defaults.
stale_beforeNostring / nullSee the schema below for constraints and defaults.
has_activityNoboolean / nullSee the schema below for constraints and defaults.
has_contactNoboolean / nullSee the schema below for constraints and defaults.
close_afterNostring / nullSee the schema below for constraints and defaults.
close_beforeNostring / nullSee the schema below for constraints and defaults.
Complete input schema
{
"properties": {
"page": {
"default": 1,
"title": "Page",
"type": "integer"
},
"limit": {
"default": 25,
"title": "Limit",
"type": "integer"
},
"stage_id": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"title": "Stage Id"
},
"pipeline_id": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"title": "Pipeline Id"
},
"search": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"title": "Search"
},
"owner_id": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"title": "Owner Id"
},
"owner_email": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"title": "Owner Email"
},
"is_closed_won": {
"anyOf": [
{
"type": "boolean"
},
{
"type": "null"
}
],
"default": null,
"title": "Is Closed Won"
},
"outcome": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"title": "Outcome"
},
"last_activity_before": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"title": "Last Activity Before"
},
"stale_before": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"title": "Stale Before"
},
"has_activity": {
"anyOf": [
{
"type": "boolean"
},
{
"type": "null"
}
],
"default": null,
"title": "Has Activity"
},
"has_contact": {
"anyOf": [
{
"type": "boolean"
},
{
"type": "null"
}
],
"default": null,
"title": "Has Contact"
},
"close_after": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"title": "Close After"
},
"close_before": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"title": "Close Before"
}
},
"title": "g8_get_dealsArguments",
"type": "object"
}

g8_get_enrichment_job

Poll the status of an enrichment job by the job_id from g8_enrich_contacts. - Waterfall jobs are async: response carries status (queued/running/completed/failed) until the worker reports progress, then total/completed populate. - AI jobs run synchronously inside g8_enrich_contacts(mode=“ai-research”), so the job is already completed/failed by the time you have a job_id; polling is supported but rarely needed. IMPORTANT: status="completed" means the pipeline RAN, not that it wrote data. Always check successful_enrichments - a completed job with successful_enrichments=0 (and total_credits_used=0) enriched nothing, almost always a missing provider credential. Pass include_provider_errors=True to get the per-provider reasons (e.g. “<provider> API key is not configured”). Args: job_id: job_id from the g8_enrich_contacts response. include_provider_errors: When True, include per-provider step errors (record_id, provider, error) for a completed/failed job.

Inputs

InputRequiredTypeDescription
job_idYesstringSee the schema below for constraints and defaults.
include_provider_errorsNobooleanSee the schema below for constraints and defaults.
Complete input schema
{
"properties": {
"job_id": {
"title": "Job Id",
"type": "string"
},
"include_provider_errors": {
"default": false,
"title": "Include Provider Errors",
"type": "boolean"
}
},
"required": [
"job_id"
],
"title": "g8_get_enrichment_jobArguments",
"type": "object"
}

g8_get_event_type

Get full detail for one bookable event type: title, slug, duration (length minutes), locations, hosts, schedule, buffers, minimum notice, and the booking_fields an attendee must answer. Call before g8_appointments_create_booking to learn required fields + slot length. Find event_type_id via g8_appointments_list_event_types. Args: event_type_id: Event-type integer ID.

Inputs

InputRequiredTypeDescription
event_type_idYesintegerSee the schema below for constraints and defaults.
Complete input schema
{
"properties": {
"event_type_id": {
"title": "Event Type Id",
"type": "integer"
}
},
"required": [
"event_type_id"
],
"title": "g8_appointments_get_event_typeArguments",
"type": "object"
}

g8_get_field_value

Read a single custom column value from one contact or company row. The read-side counterpart of g8_set_field_value. Use g8_list_fields first to find the column_id. record_id is the contact_id (when entity=“contacts”) or company_id (when entity=“companies”). Returns value: null when the column exists but has not been set for that row. To read the custom values of MANY rows at once, pass include_custom_fields=true to g8_search_contacts / g8_search_companies (or the contact/company read endpoints) instead of calling this per-row. Args: column_id: Column ID from g8_list_fields or g8_create_field. record_id: Contact ID or company ID to read. entity: Target entity - “contacts” or “companies” (default: contacts).

Inputs

InputRequiredTypeDescription
column_idYesintegerSee the schema below for constraints and defaults.
record_idYesintegerSee the schema below for constraints and defaults.
entityNostringSee the schema below for constraints and defaults.
Complete input schema
{
"properties": {
"column_id": {
"title": "Column Id",
"type": "integer"
},
"record_id": {
"title": "Record Id",
"type": "integer"
},
"entity": {
"default": "contacts",
"title": "Entity",
"type": "string"
}
},
"required": [
"column_id",
"record_id"
],
"title": "g8_get_field_valueArguments",
"type": "object"
}

g8_get_form_template

Return a complete, working progressive form-fill template for a framework. Progressive forms collect visitor data across multiple visits (stage 1: email triggers CDP lookup; later stages add name/company/title then budget/timeline, skipping fields CDP already knows). Each submit calls g8.identify() + g8.track(). PREREQUISITE: install the graph8 tracking snippet first (run g8_get_tracking_snippet); without it the g8 calls silently no-op and no data reaches graph8 CDP. Adapt the returned template freely; it tracks stage via localStorage. Args: framework: html, react, nextjs, vue, wordpress, webflow, or shopify. variant: embedded (inline) or popup (overlay with time/scroll/exit triggers). field_stages: Optional JSON array of stage objects (stage number + fields) for custom stages. Omit for defaults (email/name -> company/title -> budget/timeline). repo_id: Optional repository ID for a repo-specific write key.

Inputs

InputRequiredTypeDescription
frameworkYesstringSee the schema below for constraints and defaults.
variantYesstringSee the schema below for constraints and defaults.
field_stagesNostring / nullSee the schema below for constraints and defaults.
repo_idNostring / nullSee the schema below for constraints and defaults.
Complete input schema
{
"properties": {
"framework": {
"title": "Framework",
"type": "string"
},
"variant": {
"title": "Variant",
"type": "string"
},
"field_stages": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"title": "Field Stages"
},
"repo_id": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"title": "Repo Id"
}
},
"required": [
"framework",
"variant"
],
"title": "g8_get_form_templateArguments",
"type": "object"
}

g8_get_landing_page_source

Read the exact HTML and SHA-256 for a Studio landing-page edit session. The edit session comes from Studio’s Open in AI dialog. It selects one draft but is not a credential: the connected graph8 account must match the user and organization that created it. Args: edit_session: Opaque page-scoped session copied from graph8 Studio.

Inputs

InputRequiredTypeDescription
edit_sessionYesstringSee the schema below for constraints and defaults.
Complete input schema
{
"properties": {
"edit_session": {
"title": "Edit Session",
"type": "string"
}
},
"required": [
"edit_session"
],
"title": "g8_get_landing_page_sourceArguments",
"type": "object"
}

g8_get_lists

List contact and company lists in your CRM. Args: page: Page number (default 1) limit: Items per page (default 50)

Inputs

InputRequiredTypeDescription
pageNointegerSee the schema below for constraints and defaults.
limitNointegerSee the schema below for constraints and defaults.
Complete input schema
{
"properties": {
"page": {
"default": 1,
"title": "Page",
"type": "integer"
},
"limit": {
"default": 50,
"title": "Limit",
"type": "integer"
}
},
"title": "g8_get_listsArguments",
"type": "object"
}

g8_get_meeting

Get a single meeting with FULL transcript bundled inline. Returns the meeting record plus the complete transcript body, summary, key topics, action items, CRM tasks, and custom-field extractions. If the caller is not a participant and lacks meetings:see_transcripts, transcript content is redacted (transcript_redacted=true). Use after g8_list_meetings narrows down a meeting id. Args: meeting_id: Meeting ID (string or integer form; both accepted).

Inputs

InputRequiredTypeDescription
meeting_idYesstringSee the schema below for constraints and defaults.
Complete input schema
{
"properties": {
"meeting_id": {
"title": "Meeting Id",
"type": "string"
}
},
"required": [
"meeting_id"
],
"title": "g8_get_meetingArguments",
"type": "object"
}

g8_get_pipeline

List deal pipelines and stages, and optionally the revenue lifecycle stages. Two different axes of the same board. A deal pipeline moves one DEAL through selling stages. The revenue lifecycle moves a whole COMPANY (or contact) through Suspects -> Leads -> Trial -> Customers -> Churned, plus any custom stages the org added. Ask for include_lifecycle before using a lifecycle stage anywhere else: the slug returned here is the value g8_search_companies(lifecycle_stage=), g8_update_contact(lifecycle_stage=) and g8_crm_update_company(lifecycle_stage=) all take, and an org can rename or add stages so the five seeded slugs are not a safe guess. Args: include_lifecycle: Also return the org’s lifecycle stages. include_counts: Join each lifecycle stage’s company count onto it as record_count. Implies include_lifecycle. Counts are COMPANY-side only: moving a contact to a stage never moves one of these numbers.

Inputs

InputRequiredTypeDescription
include_lifecycleNobooleanSee the schema below for constraints and defaults.
include_countsNobooleanSee the schema below for constraints and defaults.
Complete input schema
{
"properties": {
"include_lifecycle": {
"default": false,
"title": "Include Lifecycle",
"type": "boolean"
},
"include_counts": {
"default": false,
"title": "Include Counts",
"type": "boolean"
}
},
"title": "g8_get_pipelineArguments",
"type": "object"
}

g8_get_quote

Get full quote detail: line items, activity log, envelope tracking, totals. Args: quote_id: Quote UUID returned by g8_list_quotes / g8_create_quote.

Inputs

InputRequiredTypeDescription
quote_idYesstringSee the schema below for constraints and defaults.
Complete input schema
{
"properties": {
"quote_id": {
"title": "Quote Id",
"type": "string"
}
},
"required": [
"quote_id"
],
"title": "g8_get_quoteArguments",
"type": "object"
}

g8_get_quote_settings

Get org-level quote settings (branding, default terms, sender identity). Auto-creates default settings if none exist. Use to confirm the org’s sender name/email, default payment terms, and default valid_until window before sending.

Inputs

InputRequiredTypeDescription
NoneNoNo user-supplied inputs.
Complete input schema
{
"properties": {},
"title": "g8_get_quote_settingsArguments",
"type": "object"
}

g8_get_reply

Get a single inbox thread with its message history. Long message bodies are capped by default; a capped message is marked with content_truncated=true and its real length in content_chars. Real threads accumulate quoted reply chains and signatures and can otherwise run to hundreds of thousands of tokens, which can blow the context window. For browsing an inbox use g8_list_inbox - its preview field already says what each thread is about. Args: reply_id: Thread/reply ID. channel: email, sms, or linkedin (default email). full_messages: Return untrimmed message bodies. Use only when the capped text is genuinely insufficient - e.g. quoting an exact clause from deep in a long thread.

Inputs

InputRequiredTypeDescription
reply_idYesstringSee the schema below for constraints and defaults.
channelNostringSee the schema below for constraints and defaults.
full_messagesNobooleanSee the schema below for constraints and defaults.
Complete input schema
{
"properties": {
"reply_id": {
"title": "Reply Id",
"type": "string"
},
"channel": {
"default": "email",
"title": "Channel",
"type": "string"
},
"full_messages": {
"default": false,
"title": "Full Messages",
"type": "boolean"
}
},
"required": [
"reply_id"
],
"title": "g8_get_replyArguments",
"type": "object"
}

g8_get_reply_draft

Generate an AI draft reply for an inbox thread. Charges credits (402 if insufficient). Draft only - does not send. Args: reply_id: Thread/reply ID. channel: email, sms, or linkedin (default email).

Inputs

InputRequiredTypeDescription
reply_idYesstringSee the schema below for constraints and defaults.
channelNostringSee the schema below for constraints and defaults.
Complete input schema
{
"properties": {
"reply_id": {
"title": "Reply Id",
"type": "string"
},
"channel": {
"default": "email",
"title": "Channel",
"type": "string"
}
},
"required": [
"reply_id"
],
"title": "g8_get_reply_draftArguments",
"type": "object"
}

g8_get_scan_results

Get the latest scan results for a repository. Returns detected tech stack, API routes, README summary, and GTM readiness flags. Args: repo_id: Repository ID

Inputs

InputRequiredTypeDescription
repo_idYesstringSee the schema below for constraints and defaults.
Complete input schema
{
"properties": {
"repo_id": {
"title": "Repo Id",
"type": "string"
}
},
"required": [
"repo_id"
],
"title": "g8_get_scan_resultsArguments",
"type": "object"
}

g8_get_sequence_analytics

Get comprehensive analytics for a sequence. Returns overview, performance, engagement, timeline, and contact distribution. Args: sequence_id: Sequence ID to get analytics for

Inputs

InputRequiredTypeDescription
sequence_idYesstringSee the schema below for constraints and defaults.
Complete input schema
{
"properties": {
"sequence_id": {
"title": "Sequence Id",
"type": "string"
}
},
"required": [
"sequence_id"
],
"title": "g8_get_sequence_analyticsArguments",
"type": "object"
}

g8_get_sequence_preview

Preview a sequence with steps, channels and RESOLVED copy (read-only, no enrollment). Each step returns two views of its content, and the difference matters: - step_data: the stored template, spintax braces and all. - rendered: the same copy with spintax collapsed to one real variant, plus total_combinations and up to 3 sample variants. To answer “is my spintax working?”, read rendered.variants. If they differ from each other, per-contact variation is live and each lead receives a different email. Raw {{a|b|c}} in step_data is CORRECT storage, not a bug. {{variables}} stay visible in rendered because a preview has no contact; they fill in at send time. rendered is null for ON_DEMAND steps, whose copy the AI writes per contact at send time. Check rendered.will_send_as_shown before launching. When it is false, rendered.content_issues explains what will be silently dropped from the delivered email, and those same errors will block the launch. Args: sequence_id: Sequence ID to preview

Inputs

InputRequiredTypeDescription
sequence_idYesstringSee the schema below for constraints and defaults.
Complete input schema
{
"properties": {
"sequence_id": {
"title": "Sequence Id",
"type": "string"
}
},
"required": [
"sequence_id"
],
"title": "g8_get_sequence_previewArguments",
"type": "object"
}

g8_get_task

Read one task, including typed related records and exact source context.

Inputs

InputRequiredTypeDescription
task_idYesstringSee the schema below for constraints and defaults.
Complete input schema
{
"properties": {
"task_id": {
"title": "Task Id",
"type": "string"
}
},
"required": [
"task_id"
],
"title": "g8_get_taskArguments",
"type": "object"
}

g8_get_task_execution

Read permitted execution history and result links for a CRM task.

Inputs

InputRequiredTypeDescription
task_idYesstringSee the schema below for constraints and defaults.
Complete input schema
{
"properties": {
"task_id": {
"title": "Task Id",
"type": "string"
}
},
"required": [
"task_id"
],
"title": "g8_get_task_executionArguments",
"type": "object"
}

g8_get_tasks

List tasks for the current organization with optional filters. Returns up to limit rows starting at offset (default: first 50). Response includes tasks plus total (API total, or unknown on older servers), limit, offset, and has_next. Args: status: Filter by status (e.g. “open”, “completed”). priority: Filter by priority (0-4). assignee_id: Filter to tasks assigned to this user ID. search: Substring match on title. limit: Max rows to return (default 50, hard cap 100). Larger values are clamped silently. Use offset to walk past the first page. offset: Rows to skip from the start of the filtered list. Default 0.

Inputs

InputRequiredTypeDescription
statusNostring / nullSee the schema below for constraints and defaults.
priorityNointeger / nullSee the schema below for constraints and defaults.
assignee_idNostring / nullSee the schema below for constraints and defaults.
searchNostring / nullSee the schema below for constraints and defaults.
limitNointegerSee the schema below for constraints and defaults.
offsetNointegerSee the schema below for constraints and defaults.
Complete input schema
{
"properties": {
"status": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"title": "Status"
},
"priority": {
"anyOf": [
{
"type": "integer"
},
{
"type": "null"
}
],
"default": null,
"title": "Priority"
},
"assignee_id": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"title": "Assignee Id"
},
"search": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"title": "Search"
},
"limit": {
"default": 50,
"title": "Limit",
"type": "integer"
},
"offset": {
"default": 0,
"title": "Offset",
"type": "integer"
}
},
"title": "g8_get_tasksArguments",
"type": "object"
}

g8_get_tracking_snippet

Return the graph8 tracking snippet (p.js) with framework-specific install code. First step before any other graph8 integration: p.js must load on every page before g8.identify(), g8.track(), or progressive forms work. For CSR frameworks (React, Vue) it loads after hydration, so use window.g8?.track(). After installing, add g8.identify() on login/signup and g8.track() for key actions, then use g8_get_form_template for progressive data collection. Args: framework: Target framework - one of html, react, nextjs, vue, wordpress, webflow, shopify. repo_id: Optional repository ID for repo-specific config. Returns: TrackingSnippetResult, or a plain-string error envelope on invalid framework / API failure.

Inputs

InputRequiredTypeDescription
frameworkYesstringSee the schema below for constraints and defaults.
repo_idNostring / nullSee the schema below for constraints and defaults.
Complete input schema
{
"properties": {
"framework": {
"title": "Framework",
"type": "string"
},
"repo_id": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"title": "Repo Id"
}
},
"required": [
"framework"
],
"title": "g8_get_tracking_snippetArguments",
"type": "object"
}

g8_install_spine

Generate a GTM install patch set for a scanned repository. Produces code patches adding tracking, forms, identity resolution, and attribution. Review the patches before applying. Args: repo_id: Repository ID (must have scan results first)

Inputs

InputRequiredTypeDescription
repo_idYesstringSee the schema below for constraints and defaults.
Complete input schema
{
"properties": {
"repo_id": {
"title": "Repo Id",
"type": "string"
}
},
"required": [
"repo_id"
],
"title": "g8_install_spineArguments",
"type": "object"
}

g8_knowledge_context

Assemble the smallest authorized, cited context pack for a task.

Inputs

InputRequiredTypeDescription
taskYesstringSee the schema below for constraints and defaults.
entity_concept_idsNoarray / nullSee the schema below for constraints and defaults.
token_budgetNointeger / nullSee the schema below for constraints and defaults.
Complete input schema
{
"properties": {
"task": {
"title": "Task",
"type": "string"
},
"entity_concept_ids": {
"anyOf": [
{
"items": {
"type": "string"
},
"type": "array"
},
{
"type": "null"
}
],
"default": null,
"title": "Entity Concept Ids"
},
"token_budget": {
"anyOf": [
{
"type": "integer"
},
{
"type": "null"
}
],
"default": null,
"title": "Token Budget"
}
},
"required": [
"task"
],
"title": "g8_knowledge_contextArguments",
"type": "object"
}

g8_knowledge_export

Download authorized organization knowledge as a ZIP MCP embedded resource. Requires knowledge:export (or knowledge:admin) plus the existing knowledge read and MCP-channel gates. Contains only records authorized by the API. Maximum compressed archive size is 1 MiB; larger exports fail without truncation and must use the authenticated API download. No shared files or public download links are created. Decode resource.blob to save the ZIP.

Inputs

InputRequiredTypeDescription
NoneNoNo user-supplied inputs.
Complete input schema
{
"properties": {},
"title": "g8_knowledge_exportArguments",
"type": "object"
}

g8_knowledge_get

Read one authorized concept with Markdown, trust, sources, and warnings.

Inputs

InputRequiredTypeDescription
concept_idYesstringSee the schema below for constraints and defaults.
Complete input schema
{
"properties": {
"concept_id": {
"title": "Concept Id",
"type": "string"
}
},
"required": [
"concept_id"
],
"title": "g8_knowledge_getArguments",
"type": "object"
}

g8_knowledge_list

Browse authorized organization knowledge concepts. Git paths and organization selectors are intentionally unavailable; tenant identity comes from the authenticated graph8 connection.

Inputs

InputRequiredTypeDescription
concept_typeNostring / nullSee the schema below for constraints and defaults.
lifecycleNostring / nullSee the schema below for constraints and defaults.
limitNointegerSee the schema below for constraints and defaults.
Complete input schema
{
"properties": {
"concept_type": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"title": "Concept Type"
},
"lifecycle": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"title": "Lifecycle"
},
"limit": {
"default": 50,
"title": "Limit",
"type": "integer"
}
},
"title": "g8_knowledge_listArguments",
"type": "object"
}

Traverse authorized typed relationships from one concept.

Inputs

InputRequiredTypeDescription
concept_idYesstringSee the schema below for constraints and defaults.
depthNointegerSee the schema below for constraints and defaults.
limitNointegerSee the schema below for constraints and defaults.
Complete input schema
{
"properties": {
"concept_id": {
"title": "Concept Id",
"type": "string"
},
"depth": {
"default": 1,
"title": "Depth",
"type": "integer"
},
"limit": {
"default": 25,
"title": "Limit",
"type": "integer"
}
},
"required": [
"concept_id"
],
"title": "g8_knowledge_relatedArguments",
"type": "object"
}

Search authorized tenant knowledge and return concise cited matches.

Inputs

InputRequiredTypeDescription
queryYesstringSee the schema below for constraints and defaults.
limitNointegerSee the schema below for constraints and defaults.
Complete input schema
{
"properties": {
"query": {
"title": "Query",
"type": "string"
},
"limit": {
"default": 10,
"title": "Limit",
"type": "integer"
}
},
"required": [
"query"
],
"title": "g8_knowledge_searchArguments",
"type": "object"
}

g8_knowledge_sources

Read allowlisted evidence metadata for one authorized concept.

Inputs

InputRequiredTypeDescription
concept_idYesstringSee the schema below for constraints and defaults.
Complete input schema
{
"properties": {
"concept_id": {
"title": "Concept Id",
"type": "string"
}
},
"required": [
"concept_id"
],
"title": "g8_knowledge_sourcesArguments",
"type": "object"
}

g8_landing_page_create_landing_page_agent_session

Create Landing Page Agent Session. Uses the current organization and existing API permissions. Review the intended change and set confirm=true to execute; otherwise no API request is sent. API: POST /landing-pages/{page_id}/agent-sessions

Inputs

InputRequiredTypeDescription
page_idYesstringSee the schema below for constraints and defaults.
bodyNo#/$defs/ApiCreateAgentSessionRequest / nullSee the schema below for constraints and defaults.
confirmNobooleanSee the schema below for constraints and defaults.
Complete input schema
{
"$defs": {
"ApiCreateAgentSessionRequest": {
"additionalProperties": false,
"properties": {
"approval_mode": {
"default": "review",
"description": "'review' (default) stages each patch for a human to approve in Studio. 'auto_apply' writes straight to the draft. Bound to the session at creation, so a later patch cannot escalate itself.",
"pattern": "^(review|auto_apply)$",
"title": "Approval Mode",
"type": "string"
}
},
"title": "ApiCreateAgentSessionRequest",
"type": "object"
}
},
"properties": {
"page_id": {
"title": "Page Id",
"type": "string"
},
"body": {
"anyOf": [
{
"$ref": "#/$defs/ApiCreateAgentSessionRequest"
},
{
"type": "null"
}
],
"default": null
},
"confirm": {
"default": false,
"title": "Confirm",
"type": "boolean"
}
},
"required": [
"page_id"
],
"title": "g8_landing_page_create_landing_page_agent_sessionArguments",
"type": "object"
}

g8_list_audience_syncs

List audience sync configs for your org (ad platforms: Meta, LinkedIn, Google Ads, X) with status, cadence, last sync time.

Inputs

InputRequiredTypeDescription
NoneNoNo user-supplied inputs.
Complete input schema
{
"properties": {},
"title": "g8_list_audience_syncsArguments",
"type": "object"
}

g8_list_bookings

List the caller’s appointment bookings (paginated). Shows bookings the user owns, hosts, or shared a link for - never org-wide. Args: status: Filter by status - accepted | pending | cancelled | rejected. event_type_id: Only bookings for this event type. after_start: ISO-8601 lower bound on start_time (e.g. “2026-06-01T00:00:00Z”). before_end: ISO-8601 upper bound on end_time. attendee_email: Filter to bookings including this attendee. sort_by: start_time | end_time | created_at | status (default start_time). sort_order: asc | desc (default desc). skip: Pagination offset (default 0). take: Page size, 1-100 (default 20).

Inputs

InputRequiredTypeDescription
statusNostring / nullSee the schema below for constraints and defaults.
event_type_idNointeger / nullSee the schema below for constraints and defaults.
after_startNostring / nullSee the schema below for constraints and defaults.
before_endNostring / nullSee the schema below for constraints and defaults.
attendee_emailNostring / nullSee the schema below for constraints and defaults.
sort_byNostringSee the schema below for constraints and defaults.
sort_orderNostringSee the schema below for constraints and defaults.
skipNointegerSee the schema below for constraints and defaults.
takeNointegerSee the schema below for constraints and defaults.
Complete input schema
{
"properties": {
"status": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"title": "Status"
},
"event_type_id": {
"anyOf": [
{
"type": "integer"
},
{
"type": "null"
}
],
"default": null,
"title": "Event Type Id"
},
"after_start": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"title": "After Start"
},
"before_end": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"title": "Before End"
},
"attendee_email": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"title": "Attendee Email"
},
"sort_by": {
"default": "start_time",
"title": "Sort By",
"type": "string"
},
"sort_order": {
"default": "desc",
"title": "Sort Order",
"type": "string"
},
"skip": {
"default": 0,
"title": "Skip",
"type": "integer"
},
"take": {
"default": 20,
"title": "Take",
"type": "integer"
}
},
"title": "g8_appointments_list_bookingsArguments",
"type": "object"
}

g8_list_campaigns

List generated campaigns for a repository. Args: repo_id: Repository ID page: Page number (default 1) limit: Items per page (default 50, max 200)

Inputs

InputRequiredTypeDescription
repo_idYesstringSee the schema below for constraints and defaults.
pageNointegerSee the schema below for constraints and defaults.
limitNointegerSee the schema below for constraints and defaults.
Complete input schema
{
"properties": {
"repo_id": {
"title": "Repo Id",
"type": "string"
},
"page": {
"default": 1,
"title": "Page",
"type": "integer"
},
"limit": {
"default": 50,
"title": "Limit",
"type": "integer"
}
},
"required": [
"repo_id"
],
"title": "g8_list_campaignsArguments",
"type": "object"
}

g8_list_crm_syncs

List configured CRM integrations for your org (HubSpot, Salesforce, Pipedrive, Zoho, SugarCRM) with connection status.

Inputs

InputRequiredTypeDescription
NoneNoNo user-supplied inputs.
Complete input schema
{
"properties": {},
"title": "g8_list_crm_syncsArguments",
"type": "object"
}

g8_list_enrichment_providers

List enrichment providers with their credential mode and credit cost. Use this before enriching to see which providers graph8 funds with its own keys (usable with no setup, charges credits) versus which need your own API key (BYOK). For each provider it returns: - system_funded: graph8 holds a system key for it (works out of the box). - byok_configured: your org has its own key configured for it. - default_credential_source: what credential_mode=“auto” uses right now (“system” = graph8 key + credits, “byok” = your key, no credits). - credits_per_row: per-action credit cost on graph8 system credentials. Providers that are NOT system_funded (e.g. lusha, rocketreach) require a BYOK key under Settings > Providers, otherwise their step is skipped. Args: None.

Inputs

InputRequiredTypeDescription
NoneNoNo user-supplied inputs.
Complete input schema
{
"properties": {},
"title": "g8_list_enrichment_providersArguments",
"type": "object"
}

g8_list_event_types

List bookable calendar event types (Cal.com appointments). An event type is the “where do they book?” picker: a title, a slug, and a duration. Pass the row’s integer id back as appointment_id on g8_gtm_launch_campaign to attach the booking link. Different from g8_list_meetings (the inbox of already-booked meetings); this is the picker for which booking template the sequence references. Args: include_hidden: Include event types marked hidden (not bookable publicly). Default False matches the in-app picker. scheduling_type: Filter by Cal.com scheduling type: managed | round_robin | collective. Omit to return all.

Inputs

InputRequiredTypeDescription
include_hiddenNobooleanSee the schema below for constraints and defaults.
scheduling_typeNostring / nullSee the schema below for constraints and defaults.
Complete input schema
{
"properties": {
"include_hidden": {
"default": false,
"title": "Include Hidden",
"type": "boolean"
},
"scheduling_type": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"title": "Scheduling Type"
}
},
"title": "list_event_typesArguments",
"type": "object"
}

g8_list_fields

List the field definitions (base + custom columns) for contacts or companies. Use this to see which custom columns already exist before calling g8_create_field, or to discover the column name to reference in downstream APIs. Args: entity: Target entity - “contacts” or “companies” (default: contacts) list_id: Optional list ID. When provided, includes custom columns scoped to that list in addition to global columns.

Inputs

InputRequiredTypeDescription
entityNostringSee the schema below for constraints and defaults.
list_idNointeger / nullSee the schema below for constraints and defaults.
Complete input schema
{
"properties": {
"entity": {
"default": "contacts",
"title": "Entity",
"type": "string"
},
"list_id": {
"anyOf": [
{
"type": "integer"
},
{
"type": "null"
}
],
"default": null,
"title": "List Id"
}
},
"title": "g8_list_fieldsArguments",
"type": "object"
}

g8_list_hot_contacts

Most-ENGAGED (‘hot’) contacts by recent INBOUND activity. Ranks contacts by inbound interaction events (replies / opens / meeting RSVPs) over the window - NOT a static score. Use for “who are my hottest contacts” / “most engaged prospects”. Org-scoped to your API key. Args: days: Lookback window in days (default 30, max 365). limit: Max contacts to return (default 10, max 50).

Inputs

InputRequiredTypeDescription
daysNointegerSee the schema below for constraints and defaults.
limitNointegerSee the schema below for constraints and defaults.
Complete input schema
{
"properties": {
"days": {
"default": 30,
"title": "Days",
"type": "integer"
},
"limit": {
"default": 10,
"title": "Limit",
"type": "integer"
}
},
"title": "g8_list_hot_contactsArguments",
"type": "object"
}

g8_list_inbox

List inbox threads (email, SMS, LinkedIn) with tags, assignees, and status. Each thread carries preview (one line of the latest inbound message) and contact.name. Answer “what is in my inbox”, “who replied” and “what did they say” questions FROM THIS RESULT - do not call g8_get_reply per thread just to see what a thread is about. Open a thread only when the user asks about that specific one or you need the full message history to draft a reply. Args: channel: Filter by channel (email, sms, linkedin). Omit for all channels. sequence_id: Filter by sequence/campaign ID. status: Filter by status. assignee: Filter by assignee email. tag: Filter by tag ID. page: Page number (default 1). page_size: Items per page (default 25, max 200). Raise it only when the user actually wants more than one screenful.

Inputs

InputRequiredTypeDescription
channelNostring / nullSee the schema below for constraints and defaults.
sequence_idNostring / nullSee the schema below for constraints and defaults.
statusNostring / nullSee the schema below for constraints and defaults.
assigneeNostring / nullSee the schema below for constraints and defaults.
tagNostring / nullSee the schema below for constraints and defaults.
pageNointegerSee the schema below for constraints and defaults.
page_sizeNointegerSee the schema below for constraints and defaults.
Complete input schema
{
"properties": {
"channel": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"title": "Channel"
},
"sequence_id": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"title": "Sequence Id"
},
"status": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"title": "Status"
},
"assignee": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"title": "Assignee"
},
"tag": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"title": "Tag"
},
"page": {
"default": 1,
"title": "Page",
"type": "integer"
},
"page_size": {
"default": 25,
"title": "Page Size",
"type": "integer"
}
},
"title": "g8_list_inboxArguments",
"type": "object"
}

g8_list_kb_documents

List all documents in the GTM knowledge base. Args: repo_id: Repository ID

Inputs

InputRequiredTypeDescription
repo_idYesstringSee the schema below for constraints and defaults.
Complete input schema
{
"properties": {
"repo_id": {
"title": "Repo Id",
"type": "string"
}
},
"required": [
"repo_id"
],
"title": "g8_list_kb_documentsArguments",
"type": "object"
}

g8_list_meetings

List calendar meetings as compact summary cards. Use for “show me meetings” or browsing the meeting inbox. Each card has title, time, attendees, and transcript status; transcript bodies are omitted - call g8_get_meeting(meeting_id) for the full transcript. Filter to one person via email, contact_id, or participant_emails (matched across organizer + owner + attendees, case-insensitive, OR). Args: email: Single email to filter by (organizer, owner, or attendee). contact_id: CRM contact ID, resolved to its work email and used as a participant filter. Combine with email to broaden (OR). participant_emails: Explicit list of emails to match (OR). scope: ‘my’ (default) or ‘all’ (org-wide, needs meetings:see_all). timeframe: ‘all’, ‘upcoming’, or ‘past’ (default ‘past’). has_transcript: True = only with transcript, False = only without. Omit for all. include_internal: True = include internal-only meetings (team syncs, standups, same-domain attendees). Omit/False follows org policy (most orgs exclude internal). Pass True when the user asks for team meetings, internal standups, or 1:1s. search: Match against meeting title or transcript text. page: Page number (default 1). page_size: Items per page (default 50). Clamped to 25; use page to walk through more rows.

Inputs

InputRequiredTypeDescription
emailNostring / nullSee the schema below for constraints and defaults.
contact_idNointeger / nullSee the schema below for constraints and defaults.
participant_emailsNoarray / nullSee the schema below for constraints and defaults.
scopeNostring / nullSee the schema below for constraints and defaults.
timeframeNostring / nullSee the schema below for constraints and defaults.
has_transcriptNoboolean / nullSee the schema below for constraints and defaults.
include_internalNoboolean / nullSee the schema below for constraints and defaults.
searchNostring / nullSee the schema below for constraints and defaults.
pageNointegerSee the schema below for constraints and defaults.
page_sizeNointegerSee the schema below for constraints and defaults.
Complete input schema
{
"properties": {
"email": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"title": "Email"
},
"contact_id": {
"anyOf": [
{
"type": "integer"
},
{
"type": "null"
}
],
"default": null,
"title": "Contact Id"
},
"participant_emails": {
"anyOf": [
{
"items": {
"type": "string"
},
"type": "array"
},
{
"type": "null"
}
],
"default": null,
"title": "Participant Emails"
},
"scope": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"title": "Scope"
},
"timeframe": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"title": "Timeframe"
},
"has_transcript": {
"anyOf": [
{
"type": "boolean"
},
{
"type": "null"
}
],
"default": null,
"title": "Has Transcript"
},
"include_internal": {
"anyOf": [
{
"type": "boolean"
},
{
"type": "null"
}
],
"default": null,
"title": "Include Internal"
},
"search": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"title": "Search"
},
"page": {
"default": 1,
"title": "Page",
"type": "integer"
},
"page_size": {
"default": 50,
"title": "Page Size",
"type": "integer"
}
},
"title": "g8_list_meetingsArguments",
"type": "object"
}

g8_list_notes

List all notes on a CRM contact, COMPANY or DEAL. Pass exactly ONE of contact_id / company_id / deal_id. Use deal_id to read a deal’s note history - there is no separate “deal note” tool. Each note carries read_only. A read_only note came from a CRM import or the activity log, and g8_update_note / g8_delete_note cannot change it - do not offer to edit those. Backed by GET /api/v1/&#123;contacts\|companies\|deals&#125;/&#123;id&#125;/notes. Args: contact_id: Integer contact ID from g8_find_contacts. company_id: Integer company ID from g8_find_companies. deal_id: Deal UUID from g8_get_deals / g8_create_deal.

Inputs

InputRequiredTypeDescription
contact_idNointeger / nullSee the schema below for constraints and defaults.
company_idNointeger / nullSee the schema below for constraints and defaults.
deal_idNostring / nullSee the schema below for constraints and defaults.
Complete input schema
{
"properties": {
"contact_id": {
"anyOf": [
{
"type": "integer"
},
{
"type": "null"
}
],
"default": null,
"title": "Contact Id"
},
"company_id": {
"anyOf": [
{
"type": "integer"
},
{
"type": "null"
}
],
"default": null,
"title": "Company Id"
},
"deal_id": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"title": "Deal Id"
}
},
"title": "g8_list_notesArguments",
"type": "object"
}

g8_list_orgs

List the organizations the signed-in user belongs to, marking the one currently in effect (is_current). Use when the user asks to switch orgs, asks which orgs they have, or when action_required is true (multiple orgs, none chosen) - present the options, ASK which to use before any write, then call g8_switch_org with the chosen org.

Inputs

InputRequiredTypeDescription
NoneNoNo user-supplied inputs.
Complete input schema
{
"properties": {},
"title": "g8_list_orgsArguments",
"type": "object"
}

g8_list_quotable_products

List products available for quote line items (Stripe + org manual catalog). Call before g8_create_quote / g8_update_quote to discover valid line-item ids; non-quotable products are rejected server-side. Each row’s source tells you which id family to use: stripe -> stripe_product_id + stripe_price_id; manual -> manual_product_id. Args: currency: Optional 3-letter currency filter (e.g. USD) - drops prices not in this currency. page: 1-indexed page (default 1). limit: Rows per page (default 100, max 500).

Inputs

InputRequiredTypeDescription
currencyNostring / nullSee the schema below for constraints and defaults.
pageNointegerSee the schema below for constraints and defaults.
limitNointegerSee the schema below for constraints and defaults.
Complete input schema
{
"properties": {
"currency": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"title": "Currency"
},
"page": {
"default": 1,
"title": "Page",
"type": "integer"
},
"limit": {
"default": 100,
"title": "Limit",
"type": "integer"
}
},
"title": "g8_list_quotable_productsArguments",
"type": "object"
}

g8_list_quotes

List quotes in your org with optional status / company / deal / owner filters. Args: page: 1-indexed page (default 1). limit: Rows per page (default 50, max 200). status: Filter by lifecycle stage. One of: draft, sent, viewed, accepted, declined, voided, expired. Omit to list every status. mashup_company_id: Restrict to quotes attached to one company (mashup_companies.id, integer). deal_id: Restrict to quotes linked to one deal (UUID string). owner_id: Restrict to quotes owned by one user (email).

Inputs

InputRequiredTypeDescription
pageNointegerSee the schema below for constraints and defaults.
limitNointegerSee the schema below for constraints and defaults.
statusNostring / nullSee the schema below for constraints and defaults.
mashup_company_idNointeger / nullSee the schema below for constraints and defaults.
deal_idNostring / nullSee the schema below for constraints and defaults.
owner_idNostring / nullSee the schema below for constraints and defaults.
Complete input schema
{
"properties": {
"page": {
"default": 1,
"title": "Page",
"type": "integer"
},
"limit": {
"default": 50,
"title": "Limit",
"type": "integer"
},
"status": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"title": "Status"
},
"mashup_company_id": {
"anyOf": [
{
"type": "integer"
},
{
"type": "null"
}
],
"default": null,
"title": "Mashup Company Id"
},
"deal_id": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"title": "Deal Id"
},
"owner_id": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"title": "Owner Id"
}
},
"title": "g8_list_quotesArguments",
"type": "object"
}

g8_list_schedules

List sending-window schedules the user can attach at launch. A schedule is the “when do we send?” picker: a name, a timezone, and per-day windows. Pass the row’s id back as schedule_id on g8_gtm_launch_campaign. Use BEFORE launching whenever send timing matters; without it the sequence falls back to the org default window. Args: include_archived: When True, also include archived schedules (rare; default False matches the in-app picker). search: Substring filter on schedule name + description.

Inputs

InputRequiredTypeDescription
include_archivedNobooleanSee the schema below for constraints and defaults.
searchNostring / nullSee the schema below for constraints and defaults.
Complete input schema
{
"properties": {
"include_archived": {
"default": false,
"title": "Include Archived",
"type": "boolean"
},
"search": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"title": "Search"
}
},
"title": "list_schedulesArguments",
"type": "object"
}

g8_list_sequence_steps

List a sequence’s steps with their resolved copy (read-only). The step list from g8_get_sequence_preview without the sequence and channel envelope. Use it to verify what a specific step will actually send after writing spintax into it. Each step carries the same rendered block, so rendered.variants is the direct proof that per-contact variation works. Args: sequence_id: Sequence ID whose steps to list

Inputs

InputRequiredTypeDescription
sequence_idYesstringSee the schema below for constraints and defaults.
Complete input schema
{
"properties": {
"sequence_id": {
"title": "Sequence Id",
"type": "string"
}
},
"required": [
"sequence_id"
],
"title": "g8_list_sequence_stepsArguments",
"type": "object"
}

g8_list_sequences

List available outbound sequences in your organization. Returns sequence IDs, names, status, and step counts. Use this to find a sequence_id before calling g8_add_to_sequence. Nurture sequences are ordinary sequences with sequence_kind=“nurture”; pass sequence_kind=“nurture” to list only those (or “cold_outbound” for standard outreach). Omit to list every kind. Args: page: Page number (default 1) limit: Items per page (default 50) sequence_kind: Optional filter by kind (‘cold_outbound’ or ‘nurture’). Omit to list all.

Inputs

InputRequiredTypeDescription
pageNointegerSee the schema below for constraints and defaults.
limitNointegerSee the schema below for constraints and defaults.
sequence_kindNostring / nullSee the schema below for constraints and defaults.
Complete input schema
{
"properties": {
"page": {
"default": 1,
"title": "Page",
"type": "integer"
},
"limit": {
"default": 50,
"title": "Limit",
"type": "integer"
},
"sequence_kind": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"title": "Sequence Kind"
}
},
"title": "g8_list_sequencesArguments",
"type": "object"
}

g8_lookup_company

Instantly look up a single company in graph8’s data index. Provide at least one of: domain or name. Returns enriched data including revenue, headcount, industry, tech stack, funding, and a confidence score. Costs 1 credit. This searches external data - the company does NOT need to be in your CRM. Args: domain: Company domain (e.g. acme.com) name: Company name

Inputs

InputRequiredTypeDescription
domainNostring / nullSee the schema below for constraints and defaults.
nameNostring / nullSee the schema below for constraints and defaults.
Complete input schema
{
"properties": {
"domain": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"title": "Domain"
},
"name": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"title": "Name"
}
},
"title": "g8_lookup_companyArguments",
"type": "object"
}

g8_lookup_person

Instantly look up a single person in graph8’s data index. Provide at least one of: email, linkedin_url, or (first_name + last_name + company_domain). Returns enriched data including verified email, phone, job title, company info, and a confidence score. Costs 1 credit. This searches external data - the person does NOT need to be in your CRM. To save them to your CRM afterward, use g8_create_contact. Args: email: Person’s email address linkedin_url: Person’s LinkedIn profile URL first_name: Person’s first name (combine with last_name + company_domain) last_name: Person’s last name company_domain: Person’s company domain (e.g. acme.com)

Inputs

InputRequiredTypeDescription
emailNostring / nullSee the schema below for constraints and defaults.
linkedin_urlNostring / nullSee the schema below for constraints and defaults.
first_nameNostring / nullSee the schema below for constraints and defaults.
last_nameNostring / nullSee the schema below for constraints and defaults.
company_domainNostring / nullSee the schema below for constraints and defaults.
Complete input schema
{
"properties": {
"email": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"title": "Email"
},
"linkedin_url": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"title": "Linkedin Url"
},
"first_name": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"title": "First Name"
},
"last_name": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"title": "Last Name"
},
"company_domain": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"title": "Company Domain"
}
},
"title": "g8_lookup_personArguments",
"type": "object"
}

g8_meetings_booked

Count + recent list of BOOKED meetings (not cancelled/deleted/private). Use for “how many meetings did we book”, “meetings this week”, or “upcoming meetings” (set upcoming_only=true). Org-scoped to your API key. Metadata only - no transcript content; call g8_get_meeting for a transcript. The result’s count is the real total; page past it with page until has_next is false. Args: days: Lookback window in days (default 30, max 365). limit: Max meetings per page (default 20, max 50). page: 1-based page over the booked list (default 1). upcoming_only: Only meetings from now forward (ignores days).

Inputs

InputRequiredTypeDescription
daysNointegerSee the schema below for constraints and defaults.
limitNointegerSee the schema below for constraints and defaults.
pageNointegerSee the schema below for constraints and defaults.
upcoming_onlyNobooleanSee the schema below for constraints and defaults.
Complete input schema
{
"properties": {
"days": {
"default": 30,
"title": "Days",
"type": "integer"
},
"limit": {
"default": 20,
"title": "Limit",
"type": "integer"
},
"page": {
"default": 1,
"title": "Page",
"type": "integer"
},
"upcoming_only": {
"default": false,
"title": "Upcoming Only",
"type": "boolean"
}
},
"title": "g8_meetings_bookedArguments",
"type": "object"
}

g8_newsletter_add_subscriber

Add a single subscriber to a newsletter (status=subscribed). Also creates/links a first-class CRM contact so the subscriber joins the central suppression model - mirrors the public subscribe form. Args: newsletter_id: Newsletter UUID. email: Subscriber email address (max 255 chars). first_name: Optional first name. last_name: Optional last name.

Inputs

InputRequiredTypeDescription
newsletter_idYesstringSee the schema below for constraints and defaults.
emailYesstringSee the schema below for constraints and defaults.
first_nameNostring / nullSee the schema below for constraints and defaults.
last_nameNostring / nullSee the schema below for constraints and defaults.
Complete input schema
{
"properties": {
"newsletter_id": {
"title": "Newsletter Id",
"type": "string"
},
"email": {
"title": "Email",
"type": "string"
},
"first_name": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"title": "First Name"
},
"last_name": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"title": "Last Name"
}
},
"required": [
"newsletter_id",
"email"
],
"title": "g8_newsletter_add_subscriberArguments",
"type": "object"
}

g8_newsletter_create_issue

Create a draft newsletter issue. Always creates, never sends. Args: newsletter_id: Newsletter UUID to attach the issue to. subject: Email subject line (max 2000 chars). html_body: Full HTML email body. preview_text: Optional inbox preview snippet (max 500 chars). plain_text: Optional plain-text fallback body. sender_name: Optional From display name (max 255 chars). Falls back to the newsletter’s default sender settings if omitted. sender_email: Optional From email address. Falls back to the newsletter’s default sender settings if omitted. reply_to: Optional Reply-To email address.

Inputs

InputRequiredTypeDescription
newsletter_idYesstringSee the schema below for constraints and defaults.
subjectYesstringSee the schema below for constraints and defaults.
html_bodyYesstringSee the schema below for constraints and defaults.
preview_textNostring / nullSee the schema below for constraints and defaults.
plain_textNostring / nullSee the schema below for constraints and defaults.
sender_nameNostring / nullSee the schema below for constraints and defaults.
sender_emailNostring / nullSee the schema below for constraints and defaults.
reply_toNostring / nullSee the schema below for constraints and defaults.
Complete input schema
{
"properties": {
"newsletter_id": {
"title": "Newsletter Id",
"type": "string"
},
"subject": {
"title": "Subject",
"type": "string"
},
"html_body": {
"title": "Html Body",
"type": "string"
},
"preview_text": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"title": "Preview Text"
},
"plain_text": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"title": "Plain Text"
},
"sender_name": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"title": "Sender Name"
},
"sender_email": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"title": "Sender Email"
},
"reply_to": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"title": "Reply To"
}
},
"required": [
"newsletter_id",
"subject",
"html_body"
],
"title": "g8_newsletter_create_issueArguments",
"type": "object"
}

g8_newsletter_create_newsletter

Create a new newsletter - the parent container issues live under. Always starts in draft status. Call this before creating any issue. Args: name: Newsletter name (max 255 chars). goal: Optional free-text description of what this newsletter is for.

Inputs

InputRequiredTypeDescription
nameYesstringSee the schema below for constraints and defaults.
goalNostring / nullSee the schema below for constraints and defaults.
Complete input schema
{
"properties": {
"name": {
"title": "Name",
"type": "string"
},
"goal": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"title": "Goal"
}
},
"required": [
"name"
],
"title": "g8_newsletter_create_newsletterArguments",
"type": "object"
}

g8_newsletter_duplicate_issue

Duplicate any issue (any status) into a new draft. Useful for recurring sends - clone last week’s issue instead of rebuilding it from scratch. Args: newsletter_id: Newsletter UUID the source issue belongs to. issue_id: Source issue id.

Inputs

InputRequiredTypeDescription
newsletter_idYesstringSee the schema below for constraints and defaults.
issue_idYesintegerSee the schema below for constraints and defaults.
Complete input schema
{
"properties": {
"newsletter_id": {
"title": "Newsletter Id",
"type": "string"
},
"issue_id": {
"title": "Issue Id",
"type": "integer"
}
},
"required": [
"newsletter_id",
"issue_id"
],
"title": "g8_newsletter_duplicate_issueArguments",
"type": "object"
}

g8_newsletter_get_issue

Get full issue detail: subject, html body, status, send stats. Args: newsletter_id: Newsletter UUID the issue belongs to. issue_id: Issue id from g8_newsletter_list_issues / g8_newsletter_create_issue.

Inputs

InputRequiredTypeDescription
newsletter_idYesstringSee the schema below for constraints and defaults.
issue_idYesintegerSee the schema below for constraints and defaults.
Complete input schema
{
"properties": {
"newsletter_id": {
"title": "Newsletter Id",
"type": "string"
},
"issue_id": {
"title": "Issue Id",
"type": "integer"
}
},
"required": [
"newsletter_id",
"issue_id"
],
"title": "g8_newsletter_get_issueArguments",
"type": "object"
}

g8_newsletter_get_issue_analytics

Bucketed KPI counters for a sent issue: opens, clicks, bounces, unsubscribes. Args: newsletter_id: Newsletter UUID the issue belongs to. issue_id: Issue id (should be a sent issue - a draft has no engagement yet).

Inputs

InputRequiredTypeDescription
newsletter_idYesstringSee the schema below for constraints and defaults.
issue_idYesintegerSee the schema below for constraints and defaults.
Complete input schema
{
"properties": {
"newsletter_id": {
"title": "Newsletter Id",
"type": "string"
},
"issue_id": {
"title": "Issue Id",
"type": "integer"
}
},
"required": [
"newsletter_id",
"issue_id"
],
"title": "g8_newsletter_get_issue_analyticsArguments",
"type": "object"
}

g8_newsletter_get_newsletter

Get a single newsletter (name, status, goal, audience list). Args: newsletter_id: Newsletter UUID from g8_newsletter_list_newsletters / g8_newsletter_create_newsletter.

Inputs

InputRequiredTypeDescription
newsletter_idYesstringSee the schema below for constraints and defaults.
Complete input schema
{
"properties": {
"newsletter_id": {
"title": "Newsletter Id",
"type": "string"
}
},
"required": [
"newsletter_id"
],
"title": "g8_newsletter_get_newsletterArguments",
"type": "object"
}

g8_newsletter_list_issues

List every issue (draft, scheduled, or sent) on a newsletter. Args: newsletter_id: Newsletter UUID.

Inputs

InputRequiredTypeDescription
newsletter_idYesstringSee the schema below for constraints and defaults.
Complete input schema
{
"properties": {
"newsletter_id": {
"title": "Newsletter Id",
"type": "string"
}
},
"required": [
"newsletter_id"
],
"title": "g8_newsletter_list_issuesArguments",
"type": "object"
}

g8_newsletter_list_newsletters

List every newsletter in your org. Call this first to discover a newsletter_id - every issue/subscriber tool below requires one.

Inputs

InputRequiredTypeDescription
NoneNoNo user-supplied inputs.
Complete input schema
{
"properties": {},
"title": "g8_newsletter_list_newslettersArguments",
"type": "object"
}

g8_newsletter_list_subscribers

Paginated subscriber list for a newsletter. Args: newsletter_id: Newsletter UUID. page: 1-indexed page (default 1). page_size: Rows per page (default 25, max 100). search: Optional free-text search over email/first/last name. status: Optional comma-separated status filter, e.g. ‘subscribed,bounced’.

Inputs

InputRequiredTypeDescription
newsletter_idYesstringSee the schema below for constraints and defaults.
pageNointegerSee the schema below for constraints and defaults.
page_sizeNointegerSee the schema below for constraints and defaults.
searchNostring / nullSee the schema below for constraints and defaults.
statusNostring / nullSee the schema below for constraints and defaults.
Complete input schema
{
"properties": {
"newsletter_id": {
"title": "Newsletter Id",
"type": "string"
},
"page": {
"default": 1,
"title": "Page",
"type": "integer"
},
"page_size": {
"default": 25,
"title": "Page Size",
"type": "integer"
},
"search": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"title": "Search"
},
"status": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"title": "Status"
}
},
"required": [
"newsletter_id"
],
"title": "g8_newsletter_list_subscribersArguments",
"type": "object"
}

g8_newsletter_list_templates

List org-level newsletter templates (reusable HTML scaffolds). Use with g8_newsletter_create_issue by pasting a template’s html_body, or build an issue from scratch without one.

Inputs

InputRequiredTypeDescription
NoneNoNo user-supplied inputs.
Complete input schema
{
"properties": {},
"title": "g8_newsletter_list_templatesArguments",
"type": "object"
}

g8_newsletter_send_issue

Send a newsletter issue to every subscribed, deliverable subscriber. Sends real customer-facing email. Not idempotent - calling twice sends twice. Returns immediately once the send is enqueued (202 semantics) - actual delivery happens asynchronously. Poll g8_newsletter_get_issue to observe completion, or g8_newsletter_get_issue_analytics once sent. Args: newsletter_id: Newsletter UUID the issue belongs to. issue_id: Issue id (must be a draft or already-scheduled issue). scheduled_at: Optional ISO-8601 timestamp to schedule the send for later. Omit to send immediately.

Inputs

InputRequiredTypeDescription
newsletter_idYesstringSee the schema below for constraints and defaults.
issue_idYesintegerSee the schema below for constraints and defaults.
scheduled_atNostring / nullSee the schema below for constraints and defaults.
Complete input schema
{
"properties": {
"newsletter_id": {
"title": "Newsletter Id",
"type": "string"
},
"issue_id": {
"title": "Issue Id",
"type": "integer"
},
"scheduled_at": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"title": "Scheduled At"
}
},
"required": [
"newsletter_id",
"issue_id"
],
"title": "g8_newsletter_send_issueArguments",
"type": "object"
}

g8_newsletter_send_test

Send a test copy of an issue to ONE email address. Sends a real email, but never touches the subscriber list or issue status - safe to call repeatedly while drafting. Args: newsletter_id: Newsletter UUID the issue belongs to. issue_id: Issue id to preview. test_email: Address to send the test to.

Inputs

InputRequiredTypeDescription
newsletter_idYesstringSee the schema below for constraints and defaults.
issue_idYesintegerSee the schema below for constraints and defaults.
test_emailYesstringSee the schema below for constraints and defaults.
Complete input schema
{
"properties": {
"newsletter_id": {
"title": "Newsletter Id",
"type": "string"
},
"issue_id": {
"title": "Issue Id",
"type": "integer"
},
"test_email": {
"title": "Test Email",
"type": "string"
}
},
"required": [
"newsletter_id",
"issue_id",
"test_email"
],
"title": "g8_newsletter_send_testArguments",
"type": "object"
}

g8_newsletter_unsubscribe_subscriber

Soft-unsubscribe a subscriber. Sets status, preserves the row - does NOT hard-delete. Args: newsletter_id: Newsletter UUID. subscriber_id: Subscriber id from g8_newsletter_list_subscribers.

Inputs

InputRequiredTypeDescription
newsletter_idYesstringSee the schema below for constraints and defaults.
subscriber_idYesintegerSee the schema below for constraints and defaults.
Complete input schema
{
"properties": {
"newsletter_id": {
"title": "Newsletter Id",
"type": "string"
},
"subscriber_id": {
"title": "Subscriber Id",
"type": "integer"
}
},
"required": [
"newsletter_id",
"subscriber_id"
],
"title": "g8_newsletter_unsubscribe_subscriberArguments",
"type": "object"
}

g8_newsletter_update_issue

Update a draft issue (partial). Pass only the fields you want to change. Rejects with an error for issues no longer in a draft-editable state - use g8_newsletter_duplicate_issue to get a fresh editable copy of a sent issue instead. Args: see g8_newsletter_create_issue - same field meanings. issue_id: Issue id to update.

Inputs

InputRequiredTypeDescription
newsletter_idYesstringSee the schema below for constraints and defaults.
issue_idYesintegerSee the schema below for constraints and defaults.
subjectNostring / nullSee the schema below for constraints and defaults.
html_bodyNostring / nullSee the schema below for constraints and defaults.
preview_textNostring / nullSee the schema below for constraints and defaults.
plain_textNostring / nullSee the schema below for constraints and defaults.
sender_nameNostring / nullSee the schema below for constraints and defaults.
sender_emailNostring / nullSee the schema below for constraints and defaults.
reply_toNostring / nullSee the schema below for constraints and defaults.
Complete input schema
{
"properties": {
"newsletter_id": {
"title": "Newsletter Id",
"type": "string"
},
"issue_id": {
"title": "Issue Id",
"type": "integer"
},
"subject": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"title": "Subject"
},
"html_body": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"title": "Html Body"
},
"preview_text": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"title": "Preview Text"
},
"plain_text": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"title": "Plain Text"
},
"sender_name": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"title": "Sender Name"
},
"sender_email": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"title": "Sender Email"
},
"reply_to": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"title": "Reply To"
}
},
"required": [
"newsletter_id",
"issue_id"
],
"title": "g8_newsletter_update_issueArguments",
"type": "object"
}

g8_object_archive

Archive a native object without deleting data. Requires objects:manage and Admin access; update can restore it.

Inputs

InputRequiredTypeDescription
object_slugYesstringSee the schema below for constraints and defaults.
Complete input schema
{
"properties": {
"object_slug": {
"title": "Object Slug",
"type": "string"
}
},
"required": [
"object_slug"
],
"title": "g8_object_archiveArguments",
"type": "object"
}

g8_object_attribute_archive

Archive a custom field without deleting its values; update can restore it. Requires objects:manage and Admin access.

Inputs

InputRequiredTypeDescription
object_slugYesstringSee the schema below for constraints and defaults.
attribute_slugYesstringSee the schema below for constraints and defaults.
Complete input schema
{
"properties": {
"object_slug": {
"title": "Object Slug",
"type": "string"
},
"attribute_slug": {
"title": "Attribute Slug",
"type": "string"
}
},
"required": [
"object_slug",
"attribute_slug"
],
"title": "g8_object_attribute_archiveArguments",
"type": "object"
}

g8_object_attribute_create

Create a CRM field with slug, title, attribute_type and optional constraints/config/defaults. Requires objects:manage and current Admin access.

Inputs

InputRequiredTypeDescription
object_slugYesstringSee the schema below for constraints and defaults.
definitionYesobjectSee the schema below for constraints and defaults.
Complete input schema
{
"properties": {
"object_slug": {
"title": "Object Slug",
"type": "string"
},
"definition": {
"additionalProperties": true,
"title": "Definition",
"type": "object"
}
},
"required": [
"object_slug",
"definition"
],
"title": "g8_object_attribute_createArguments",
"type": "object"
}

g8_object_attribute_update

Edit or restore a field using is_archived=false. Omitted fields are preserved; default_value=null clears the default. Type and slug are immutable. Requires objects:manage and Admin access.

Inputs

InputRequiredTypeDescription
object_slugYesstringSee the schema below for constraints and defaults.
attribute_slugYesstringSee the schema below for constraints and defaults.
changesYesobjectSee the schema below for constraints and defaults.
Complete input schema
{
"properties": {
"object_slug": {
"title": "Object Slug",
"type": "string"
},
"attribute_slug": {
"title": "Attribute Slug",
"type": "string"
},
"changes": {
"additionalProperties": true,
"title": "Changes",
"type": "object"
}
},
"required": [
"object_slug",
"attribute_slug",
"changes"
],
"title": "g8_object_attribute_updateArguments",
"type": "object"
}

g8_object_attributes

Discover typed fields, constraints, configured defaults and reference targets.

Inputs

InputRequiredTypeDescription
object_slugYesstringSee the schema below for constraints and defaults.
include_archivedNobooleanSee the schema below for constraints and defaults.
Complete input schema
{
"properties": {
"object_slug": {
"title": "Object Slug",
"type": "string"
},
"include_archived": {
"default": false,
"title": "Include Archived",
"type": "boolean"
}
},
"required": [
"object_slug"
],
"title": "g8_object_attributesArguments",
"type": "object"
}

g8_object_create

Create a native custom object. Requires objects:manage and current Admin access; standard names are reserved.

Inputs

InputRequiredTypeDescription
slugYesstringSee the schema below for constraints and defaults.
singular_nounYesstringSee the schema below for constraints and defaults.
plural_nounYesstringSee the schema below for constraints and defaults.
descriptionNostring / nullSee the schema below for constraints and defaults.
iconNostring / nullSee the schema below for constraints and defaults.
Complete input schema
{
"properties": {
"slug": {
"title": "Slug",
"type": "string"
},
"singular_noun": {
"title": "Singular Noun",
"type": "string"
},
"plural_noun": {
"title": "Plural Noun",
"type": "string"
},
"description": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"title": "Description"
},
"icon": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"title": "Icon"
}
},
"required": [
"slug",
"singular_noun",
"plural_noun"
],
"title": "g8_object_createArguments",
"type": "object"
}

g8_object_get

Read a native custom object’s definition by its discovered API slug.

Inputs

InputRequiredTypeDescription
object_slugYesstringSee the schema below for constraints and defaults.
Complete input schema
{
"properties": {
"object_slug": {
"title": "Object Slug",
"type": "string"
}
},
"required": [
"object_slug"
],
"title": "g8_object_getArguments",
"type": "object"
}

g8_object_list

Discover native custom CRM objects, optionally including archived definitions without restoring them.

Inputs

InputRequiredTypeDescription
include_archivedNobooleanSee the schema below for constraints and defaults.
Complete input schema
{
"properties": {
"include_archived": {
"default": false,
"title": "Include Archived",
"type": "boolean"
}
},
"title": "g8_object_listArguments",
"type": "object"
}

g8_object_record_archive

Archive a custom record, hiding it from listings while retaining its identity and history.

Inputs

InputRequiredTypeDescription
object_slugYesstringSee the schema below for constraints and defaults.
record_idYesstringSee the schema below for constraints and defaults.
Complete input schema
{
"properties": {
"object_slug": {
"title": "Object Slug",
"type": "string"
},
"record_id": {
"title": "Record Id",
"type": "string"
}
},
"required": [
"object_slug",
"record_id"
],
"title": "g8_object_record_archiveArguments",
"type": "object"
}

g8_object_record_changes

Read custom-record or canonical contact/company mutation facts. Limit 1-200; pass next_cursor to continue. Contact/company IDs stay canonical; current record access and field privacy apply to historical values. Archived records and older unrecorded mutations are not supplied by this reader. An unavailable store fails with 503 rather than reporting zero history.

Inputs

InputRequiredTypeDescription
object_slugYesstringSee the schema below for constraints and defaults.
record_idYesstringSee the schema below for constraints and defaults.
limitNointegerSee the schema below for constraints and defaults.
cursorNostring / nullSee the schema below for constraints and defaults.
Complete input schema
{
"properties": {
"object_slug": {
"title": "Object Slug",
"type": "string"
},
"record_id": {
"title": "Record Id",
"type": "string"
},
"limit": {
"default": 100,
"title": "Limit",
"type": "integer"
},
"cursor": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"title": "Cursor"
}
},
"required": [
"object_slug",
"record_id"
],
"title": "g8_object_record_changesArguments",
"type": "object"
}

g8_object_record_create

Create a native custom record. Discover attributes first; schema validation and scoped access apply.

Inputs

InputRequiredTypeDescription
object_slugYesstringSee the schema below for constraints and defaults.
valuesYesobjectSee the schema below for constraints and defaults.
Complete input schema
{
"properties": {
"object_slug": {
"title": "Object Slug",
"type": "string"
},
"values": {
"additionalProperties": true,
"title": "Values",
"type": "object"
}
},
"required": [
"object_slug",
"values"
],
"title": "g8_object_record_createArguments",
"type": "object"
}

g8_object_record_get

Read one native custom record, canonical contact/company, or deal using its stable graph8 ID. Contacts and companies use canonical IDs, not source CONTACT_ID/COMPANY_ID values. Deals retain UUIDs; company, primary-contact and contact_ids references require related-record access. Generic deal mutations are not yet supported.

Inputs

InputRequiredTypeDescription
object_slugYesstringSee the schema below for constraints and defaults.
record_idYesstringSee the schema below for constraints and defaults.
Complete input schema
{
"properties": {
"object_slug": {
"title": "Object Slug",
"type": "string"
},
"record_id": {
"title": "Record Id",
"type": "string"
}
},
"required": [
"object_slug",
"record_id"
],
"title": "g8_object_record_getArguments",
"type": "object"
}

g8_object_record_history

Read historical value generations and actor attribution, newest first. Limit 1-500.

Inputs

InputRequiredTypeDescription
object_slugYesstringSee the schema below for constraints and defaults.
record_idYesstringSee the schema below for constraints and defaults.
limitNointegerSee the schema below for constraints and defaults.
Complete input schema
{
"properties": {
"object_slug": {
"title": "Object Slug",
"type": "string"
},
"record_id": {
"title": "Record Id",
"type": "string"
},
"limit": {
"default": 100,
"title": "Limit",
"type": "integer"
}
},
"required": [
"object_slug",
"record_id"
],
"title": "g8_object_record_historyArguments",
"type": "object"
}

g8_object_record_restore

Restore an archived custom record under current schema and unique constraints. Conflicts preserve the archive.

Inputs

InputRequiredTypeDescription
object_slugYesstringSee the schema below for constraints and defaults.
record_idYesstringSee the schema below for constraints and defaults.
Complete input schema
{
"properties": {
"object_slug": {
"title": "Object Slug",
"type": "string"
},
"record_id": {
"title": "Record Id",
"type": "string"
}
},
"required": [
"object_slug",
"record_id"
],
"title": "g8_object_record_restoreArguments",
"type": "object"
}

g8_object_record_update

PATCH a custom record, canonical contact or company. Omitted fields stay unchanged; null clears optional values; arrays replace values. Contact/company updates require expected_revision from a fresh read. Custom records also support append_values/remove_values; field groups cannot overlap. Stale revisions return 409.

Inputs

InputRequiredTypeDescription
object_slugYesstringSee the schema below for constraints and defaults.
record_idYesstringSee the schema below for constraints and defaults.
valuesYesobjectSee the schema below for constraints and defaults.
expected_revisionNointeger / nullSee the schema below for constraints and defaults.
append_valuesNoobject / nullSee the schema below for constraints and defaults.
remove_valuesNoobject / nullSee the schema below for constraints and defaults.
Complete input schema
{
"properties": {
"object_slug": {
"title": "Object Slug",
"type": "string"
},
"record_id": {
"title": "Record Id",
"type": "string"
},
"values": {
"additionalProperties": true,
"title": "Values",
"type": "object"
},
"expected_revision": {
"anyOf": [
{
"type": "integer"
},
{
"type": "null"
}
],
"default": null,
"title": "Expected Revision"
},
"append_values": {
"anyOf": [
{
"additionalProperties": {
"items": {},
"type": "array"
},
"type": "object"
},
{
"type": "null"
}
],
"default": null,
"title": "Append Values"
},
"remove_values": {
"anyOf": [
{
"additionalProperties": {
"items": {},
"type": "array"
},
"type": "object"
},
{
"type": "null"
}
],
"default": null,
"title": "Remove Values"
}
},
"required": [
"object_slug",
"record_id",
"values"
],
"title": "g8_object_record_updateArguments",
"type": "object"
}

g8_object_record_upsert

Create or update by an active single-value unique attribute. Supply its value in values. Omitted fields are preserved. A revision requires an existing, unchanged match.

Inputs

InputRequiredTypeDescription
object_slugYesstringSee the schema below for constraints and defaults.
matching_attributeYesstringSee the schema below for constraints and defaults.
valuesYesobjectSee the schema below for constraints and defaults.
expected_revisionNointeger / nullSee the schema below for constraints and defaults.
Complete input schema
{
"properties": {
"object_slug": {
"title": "Object Slug",
"type": "string"
},
"matching_attribute": {
"title": "Matching Attribute",
"type": "string"
},
"values": {
"additionalProperties": true,
"title": "Values",
"type": "object"
},
"expected_revision": {
"anyOf": [
{
"type": "integer"
},
{
"type": "null"
}
],
"default": null,
"title": "Expected Revision"
}
},
"required": [
"object_slug",
"matching_attribute",
"values"
],
"title": "g8_object_record_upsertArguments",
"type": "object"
}

g8_object_records

List custom records or canonical deals with current values and revisions. Deal totals and related references respect current access. Pass next_cursor for the next page. Limit 1-200.

Inputs

InputRequiredTypeDescription
object_slugYesstringSee the schema below for constraints and defaults.
limitNointegerSee the schema below for constraints and defaults.
cursorNostring / nullSee the schema below for constraints and defaults.
Complete input schema
{
"properties": {
"object_slug": {
"title": "Object Slug",
"type": "string"
},
"limit": {
"default": 50,
"title": "Limit",
"type": "integer"
},
"cursor": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"title": "Cursor"
}
},
"required": [
"object_slug"
],
"title": "g8_object_recordsArguments",
"type": "object"
}

g8_object_update

Update a native object; slug/data are preserved. presentation accepts description, icon, display_attribute_slug; omit keys to preserve or use null to clear. Requires objects:manage and Admin access.

Inputs

InputRequiredTypeDescription
object_slugYesstringSee the schema below for constraints and defaults.
singular_nounNostring / nullSee the schema below for constraints and defaults.
plural_nounNostring / nullSee the schema below for constraints and defaults.
is_archivedNoboolean / nullSee the schema below for constraints and defaults.
presentationNoobject / nullSee the schema below for constraints and defaults.
Complete input schema
{
"properties": {
"object_slug": {
"title": "Object Slug",
"type": "string"
},
"singular_noun": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"title": "Singular Noun"
},
"plural_noun": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"title": "Plural Noun"
},
"is_archived": {
"anyOf": [
{
"type": "boolean"
},
{
"type": "null"
}
],
"default": null,
"title": "Is Archived"
},
"presentation": {
"anyOf": [
{
"additionalProperties": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"type": "object"
},
{
"type": "null"
}
],
"default": null,
"title": "Presentation"
}
},
"required": [
"object_slug"
],
"title": "g8_object_updateArguments",
"type": "object"
}

g8_pause_sequence

Pause a live sequence. Contacts in progress will be wound down. IMPORTANT: This pauses real outreach. Confirm with the user first. Args: sequence_id: Sequence ID to pause

Inputs

InputRequiredTypeDescription
sequence_idYesstringSee the schema below for constraints and defaults.
Complete input schema
{
"properties": {
"sequence_id": {
"title": "Sequence Id",
"type": "string"
}
},
"required": [
"sequence_id"
],
"title": "g8_pause_sequenceArguments",
"type": "object"
}

g8_push_to_crm_company

Push companies to an external CRM provider. IMPORTANT: This creates real records in the external CRM. Confirm with the user before pushing. Args: provider: CRM provider (hubspot, salesforce, pipedrive, zoho, sugarcrm) records: List of company records to push (each a dict with company fields)

Inputs

InputRequiredTypeDescription
providerYesstringSee the schema below for constraints and defaults.
recordsYesarraySee the schema below for constraints and defaults.
Complete input schema
{
"properties": {
"provider": {
"title": "Provider",
"type": "string"
},
"records": {
"items": {
"additionalProperties": true,
"type": "object"
},
"title": "Records",
"type": "array"
}
},
"required": [
"provider",
"records"
],
"title": "g8_push_to_crm_companyArguments",
"type": "object"
}

g8_push_to_crm_contact

Push contacts to an external CRM provider. IMPORTANT: This creates real records in the external CRM. Confirm with the user before pushing. Args: provider: CRM provider (hubspot, salesforce, pipedrive, zoho, sugarcrm) records: List of contact records to push (each a dict with contact fields)

Inputs

InputRequiredTypeDescription
providerYesstringSee the schema below for constraints and defaults.
recordsYesarraySee the schema below for constraints and defaults.
Complete input schema
{
"properties": {
"provider": {
"title": "Provider",
"type": "string"
},
"records": {
"items": {
"additionalProperties": true,
"type": "object"
},
"title": "Records",
"type": "array"
}
},
"required": [
"provider",
"records"
],
"title": "g8_push_to_crm_contactArguments",
"type": "object"
}

g8_push_to_crm_list

Modify CRM list memberships (add/remove contacts from lists). Each record should contain: list_id, add_contact_ids, remove_contact_ids. Args: provider: CRM provider (hubspot, salesforce, pipedrive, zoho, sugarcrm) records: List of membership operations

Inputs

InputRequiredTypeDescription
providerYesstringSee the schema below for constraints and defaults.
recordsYesarraySee the schema below for constraints and defaults.
Complete input schema
{
"properties": {
"provider": {
"title": "Provider",
"type": "string"
},
"records": {
"items": {
"additionalProperties": true,
"type": "object"
},
"title": "Records",
"type": "array"
}
},
"required": [
"provider",
"records"
],
"title": "g8_push_to_crm_listArguments",
"type": "object"
}

g8_radar_ad_detail

One ad’s full detail for the creative drawer - a plain read on the stored ad_creative snapshot (copy / headline / image / dates) joined to the rival’s traffic + threat context. NO LLM, NO live call. Args: ad_id: The ad id (matched via the snapshot data->>‘ad_id’ key).

Inputs

InputRequiredTypeDescription
ad_idYesstringSee the schema below for constraints and defaults.
Complete input schema
{
"properties": {
"ad_id": {
"title": "Ad Id",
"type": "string"
}
},
"required": [
"ad_id"
],
"title": "g8_radar_ad_detailArguments",
"type": "object"
}

g8_radar_add_competitor

Add one competitor to track. Returns the created competitor profile. 409 if already tracked, 422 if the 20-competitor limit is reached. Args: domain: Competitor domain (required; normalized to its apex). name: Optional display name. tier: tier1 or tier2 (default tier2). scan_config: Optional {mode: auto|manual, include_paths: […]} page selection config.

Inputs

InputRequiredTypeDescription
domainYesstringSee the schema below for constraints and defaults.
nameNostring / nullSee the schema below for constraints and defaults.
tierNostring / nullSee the schema below for constraints and defaults.
scan_configNoobject / nullSee the schema below for constraints and defaults.
Complete input schema
{
"properties": {
"domain": {
"title": "Domain",
"type": "string"
},
"name": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"title": "Name"
},
"tier": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"title": "Tier"
},
"scan_config": {
"anyOf": [
{
"additionalProperties": true,
"type": "object"
},
{
"type": "null"
}
],
"default": null,
"title": "Scan Config"
}
},
"required": [
"domain"
],
"title": "g8_radar_add_competitorArguments",
"type": "object"
}

g8_radar_aeo_overview

Answer-engine share-of-voice: mention rate, citation rate, SoV vs rivals, leaderboard, and recent runs. Empty (not an error) before any run or before the AEO tables are provisioned.

Inputs

InputRequiredTypeDescription
NoneNoNo user-supplied inputs.
Complete input schema
{
"properties": {},
"title": "g8_radar_aeo_overviewArguments",
"type": "object"
}

g8_radar_aeo_probes

List the org’s tracked AEO buyer-intent probes (the questions queried against the baseline answer engine).

Inputs

InputRequiredTypeDescription
NoneNoNo user-supplied inputs.
Complete input schema
{
"properties": {},
"title": "g8_radar_aeo_probesArguments",
"type": "object"
}

g8_radar_analyze_gaps

BILLABLE: enqueue gap analysis across the tracked competitor set. Runs an LLM pass async on Celery; returns {task_id}. Restrict to a subset of lenses to scope (and bound) the run. Args: lenses: Optional subset of allowed gap lenses to analyze. Omit to run all.

Inputs

InputRequiredTypeDescription
lensesNoarray / nullSee the schema below for constraints and defaults.
Complete input schema
{
"properties": {
"lenses": {
"anyOf": [
{
"items": {
"type": "string"
},
"type": "array"
},
{
"type": "null"
}
],
"default": null,
"title": "Lenses"
}
},
"title": "g8_radar_analyze_gapsArguments",
"type": "object"
}

g8_radar_approve_all_opportunities

DESTRUCTIVE / BILLABLE: approve all scored opportunities in one lane (top-50 by score per call; re-run to drain the rest, remaining signals more). Converts each into an initiative + seeds stubs (consumes credits when content is generated). Args: lane: Which lane to drain - now, next, or later (default now).

Inputs

InputRequiredTypeDescription
laneNostringSee the schema below for constraints and defaults.
Complete input schema
{
"properties": {
"lane": {
"default": "now",
"title": "Lane",
"type": "string"
}
},
"title": "g8_radar_approve_all_opportunitiesArguments",
"type": "object"
}

g8_radar_approve_opportunity

DESTRUCTIVE / BILLABLE: approve one scored opportunity (open gap) - converts it into an initiative + seeds the content stubs. May create content-generation work for the requested content types (consumes credits when content is generated). Args: gap_id: The gap UUID to approve (must be status=‘open’). content_types: Optional subset of allowed kinds to seed (else the lens default). seed_context: Optional {primary_keyword, volume, cpc} to seed an SEO page.

Inputs

InputRequiredTypeDescription
gap_idYesstringSee the schema below for constraints and defaults.
content_typesNoarray / nullSee the schema below for constraints and defaults.
seed_contextNoobject / nullSee the schema below for constraints and defaults.
Complete input schema
{
"properties": {
"gap_id": {
"title": "Gap Id",
"type": "string"
},
"content_types": {
"anyOf": [
{
"items": {
"type": "string"
},
"type": "array"
},
{
"type": "null"
}
],
"default": null,
"title": "Content Types"
},
"seed_context": {
"anyOf": [
{
"additionalProperties": true,
"type": "object"
},
{
"type": "null"
}
],
"default": null,
"title": "Seed Context"
}
},
"required": [
"gap_id"
],
"title": "g8_radar_approve_opportunityArguments",
"type": "object"
}

g8_radar_battle_card

Sales-enablement battle card composed from existing Radar intel (NO LLM / paid call): our evidence-gated advantages, the rival’s edges + our exposure (open gaps citing them), their recent moves, and a talk-track. Args: competitor_id: Competitor profile UUID.

Inputs

InputRequiredTypeDescription
competitor_idYesstringSee the schema below for constraints and defaults.
Complete input schema
{
"properties": {
"competitor_id": {
"title": "Competitor Id",
"type": "string"
}
},
"required": [
"competitor_id"
],
"title": "g8_radar_battle_cardArguments",
"type": "object"
}

g8_radar_bulk_add_competitors

Add many competitors at once (toggle-from-suggestions UX). Per item: normalize + dedup + respect the 20-competitor cap. Returns {created: <count>, skipped: [{domain, reason}]} where reason is limit / exists / invalid. Args: competitors: List of {domain, name?, tier?, scan_config?} dicts (max 20).

Inputs

InputRequiredTypeDescription
competitorsYesarraySee the schema below for constraints and defaults.
Complete input schema
{
"properties": {
"competitors": {
"items": {
"additionalProperties": true,
"type": "object"
},
"title": "Competitors",
"type": "array"
}
},
"required": [
"competitors"
],
"title": "g8_radar_bulk_add_competitorsArguments",
"type": "object"
}

g8_radar_compare_snapshot

Before/after diff for one page snapshot. By default compares against the prior capture of the same URL; pass against to diff against a specific earlier capture (the version-timeline ‘compare any two’). Args: snapshot_id: The snapshot UUID to diff (current side). against: Optional earlier snapshot UUID of the same page.

Inputs

InputRequiredTypeDescription
snapshot_idYesstringSee the schema below for constraints and defaults.
againstNostring / nullSee the schema below for constraints and defaults.
Complete input schema
{
"properties": {
"snapshot_id": {
"title": "Snapshot Id",
"type": "string"
},
"against": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"title": "Against"
}
},
"required": [
"snapshot_id"
],
"title": "g8_radar_compare_snapshotArguments",
"type": "object"
}

g8_radar_competitor_ads

Captured ad creatives for one competitor (distinct by ad, latest capture, newest first). Reads the durable ad_creative snapshot corpus so it works for all tiers. Captured-corpus, not a guaranteed-live set. Args: competitor_id: Competitor profile UUID.

Inputs

InputRequiredTypeDescription
competitor_idYesstringSee the schema below for constraints and defaults.
Complete input schema
{
"properties": {
"competitor_id": {
"title": "Competitor Id",
"type": "string"
}
},
"required": [
"competitor_id"
],
"title": "g8_radar_competitor_adsArguments",
"type": "object"
}

g8_radar_competitor_engagers

Steal-Their-Audience: people who engage this competitor’s LinkedIn content who are ALREADY known to us - counts (engaged / in CRM / at open-deal accounts) + a per-engager list. Listener-gated: with no per-org LinkedIn listener the response is honest-empty (configured=True, listener=False). Requires a deals-read permission. Args: competitor_id: Competitor profile UUID. limit: Max engagers (default 100, 1-200).

Inputs

InputRequiredTypeDescription
competitor_idYesstringSee the schema below for constraints and defaults.
limitNointegerSee the schema below for constraints and defaults.
Complete input schema
{
"properties": {
"competitor_id": {
"title": "Competitor Id",
"type": "string"
},
"limit": {
"default": 100,
"title": "Limit",
"type": "integer"
}
},
"required": [
"competitor_id"
],
"title": "g8_radar_competitor_engagersArguments",
"type": "object"
}

g8_radar_competitor_pages

Distinct tracked pages for one competitor (latest snapshot per URL, kind=‘page’), newest-captured first. The “Pages tracked” click-through; each row’s id opens the per-page version timeline. Args: competitor_id: Competitor profile UUID.

Inputs

InputRequiredTypeDescription
competitor_idYesstringSee the schema below for constraints and defaults.
Complete input schema
{
"properties": {
"competitor_id": {
"title": "Competitor Id",
"type": "string"
}
},
"required": [
"competitor_id"
],
"title": "g8_radar_competitor_pagesArguments",
"type": "object"
}

g8_radar_competitor_posts

LinkedIn posts for one competitor (the “Posts / wk” click-through). Reads the matched-post store posts_per_week is derived from. Degrades to a configured-aware empty list (never a 500) when no source is wired. Args: competitor_id: Competitor profile UUID. limit: Max posts (default 50, 1-200).

Inputs

InputRequiredTypeDescription
competitor_idYesstringSee the schema below for constraints and defaults.
limitNointegerSee the schema below for constraints and defaults.
Complete input schema
{
"properties": {
"competitor_id": {
"title": "Competitor Id",
"type": "string"
},
"limit": {
"default": 50,
"title": "Limit",
"type": "integer"
}
},
"required": [
"competitor_id"
],
"title": "g8_radar_competitor_postsArguments",
"type": "object"
}

g8_radar_competitor_suggestions

Detected-but-untracked competitors surfaced from the org’s existing intelligence (competitor_discovery) + the competitors global-context doc. Each suggestion flags already_tracked. Best-effort (degrades to an empty list on source failure).

Inputs

InputRequiredTypeDescription
NoneNoNo user-supplied inputs.
Complete input schema
{
"properties": {},
"title": "g8_radar_competitor_suggestionsArguments",
"type": "object"
}

g8_radar_competitor_traffic

Traffic detail for one competitor: current estimate + trend plus the ETV / ranked-keyword-count history from the kind=‘traffic’ snapshot series. Args: competitor_id: Competitor profile UUID.

Inputs

InputRequiredTypeDescription
competitor_idYesstringSee the schema below for constraints and defaults.
Complete input schema
{
"properties": {
"competitor_id": {
"title": "Competitor Id",
"type": "string"
}
},
"required": [
"competitor_id"
],
"title": "g8_radar_competitor_trafficArguments",
"type": "object"
}

g8_radar_delete_competitor

DESTRUCTIVE: delete a tracked competitor and all its captured snapshots (pages, ads, traffic history). Irreversible. Returns {ok: True}. Args: competitor_id: Competitor profile UUID.

Inputs

InputRequiredTypeDescription
competitor_idYesstringSee the schema below for constraints and defaults.
Complete input schema
{
"properties": {
"competitor_id": {
"title": "Competitor Id",
"type": "string"
}
},
"required": [
"competitor_id"
],
"title": "g8_radar_delete_competitorArguments",
"type": "object"
}

g8_radar_discover_pages

Discover a competitor’s pages (Firecrawl /map) for the tracked-pages picker - traffic-ranked, pricing/feature boosted, current selection flagged. Cached per competitor (6h). BILLABLE when refresh=True: bypasses the cache and re-maps the site (a paid Firecrawl call). Leave refresh=False to read the cached inventory. Args: competitor_id: Competitor profile UUID. refresh: When True, force a fresh paid site map (default False).

Inputs

InputRequiredTypeDescription
competitor_idYesstringSee the schema below for constraints and defaults.
refreshNobooleanSee the schema below for constraints and defaults.
Complete input schema
{
"properties": {
"competitor_id": {
"title": "Competitor Id",
"type": "string"
},
"refresh": {
"default": false,
"title": "Refresh",
"type": "boolean"
}
},
"required": [
"competitor_id"
],
"title": "g8_radar_discover_pagesArguments",
"type": "object"
}

g8_radar_dispatch_alerts

DESTRUCTIVE: detect + deliver new competitor-move alerts now (in-app bell + bridge mirror for opted-in users), respecting the org’s alert toggles + channels. Sends real notifications to users. Per-snapshot deduped so repeated calls can’t re-spam. Returns {delivered: <count>}. Requires settings:write.

Inputs

InputRequiredTypeDescription
NoneNoNo user-supplied inputs.
Complete input schema
{
"properties": {},
"title": "g8_radar_dispatch_alertsArguments",
"type": "object"
}

g8_radar_feature_matrix

Capability/feature comparison matrix (v1: one capability row per advantage claim) across the tracked competitor set.

Inputs

InputRequiredTypeDescription
NoneNoNo user-supplied inputs.
Complete input schema
{
"properties": {},
"title": "g8_radar_feature_matrixArguments",
"type": "object"
}

g8_radar_get_competitor

Single-competitor aggregation: profile + pages-tracked count + recent content changes + open gaps citing this rival. Args: competitor_id: Competitor profile UUID (from g8_radar_list_competitors).

Inputs

InputRequiredTypeDescription
competitor_idYesstringSee the schema below for constraints and defaults.
Complete input schema
{
"properties": {
"competitor_id": {
"title": "Competitor Id",
"type": "string"
}
},
"required": [
"competitor_id"
],
"title": "g8_radar_get_competitorArguments",
"type": "object"
}

g8_radar_get_settings

Read the org’s Radar settings: tier cadence days, alert toggles, delivery channels (in_app / bridge), and ad_source. Seed-on-empty: degrades to defaults when the org schema isn’t yet migrated.

Inputs

InputRequiredTypeDescription
NoneNoNo user-supplied inputs.
Complete input schema
{
"properties": {},
"title": "g8_radar_get_settingsArguments",
"type": "object"
}

g8_radar_keyword_gap

Keywords each rival ranks for that the org does NOT (“what you’re missing”). Computed from persisted competitor keywords minus the org’s own ranked set. available=False when the org’s own keywords can’t be resolved.

Inputs

InputRequiredTypeDescription
NoneNoNo user-supplied inputs.
Complete input schema
{
"properties": {},
"title": "g8_radar_keyword_gapArguments",
"type": "object"
}

g8_radar_list_competitors

List every tracked competitor profile (active + inactive), tier then domain order. Each carries threat_score, traffic_estimate, posts/wk, ads-live count, scan status, scan_config, and page_budget.

Inputs

InputRequiredTypeDescription
NoneNoNo user-supplied inputs.
Complete input schema
{
"properties": {},
"title": "g8_radar_list_competitorsArguments",
"type": "object"
}

g8_radar_list_gaps

List competitive gaps, optionally filtered. Args: lens: Filter by gap lens (must be an allowed lens, else 400). status: Filter by status - open, dismissed, or converted. competitor_id: Filter to gaps citing this competitor.

Inputs

InputRequiredTypeDescription
lensNostring / nullSee the schema below for constraints and defaults.
statusNostring / nullSee the schema below for constraints and defaults.
competitor_idNostring / nullSee the schema below for constraints and defaults.
Complete input schema
{
"properties": {
"lens": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"title": "Lens"
},
"status": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"title": "Status"
},
"competitor_id": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"title": "Competitor Id"
}
},
"title": "g8_radar_list_gapsArguments",
"type": "object"
}

g8_radar_list_initiatives

List radar initiatives (converted opportunities under execution), optionally filtered by lane (now / next / later / live / done). Args: lane: Filter by initiative lane.

Inputs

InputRequiredTypeDescription
laneNostring / nullSee the schema below for constraints and defaults.
Complete input schema
{
"properties": {
"lane": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"title": "Lane"
}
},
"title": "g8_radar_list_initiativesArguments",
"type": "object"
}

g8_radar_list_opportunities

List opportunities - the scored OPEN gaps (no separate table), optionally filtered to one lane (now / next / later). Args: lane: Filter by opportunity lane (now, next, or later).

Inputs

InputRequiredTypeDescription
laneNostring / nullSee the schema below for constraints and defaults.
Complete input schema
{
"properties": {
"lane": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"title": "Lane"
}
},
"title": "g8_radar_list_opportunitiesArguments",
"type": "object"
}

g8_radar_measure_initiatives

Run the performance loopback now: write content-progression + rival-traffic outcome signals onto the org’s active initiatives. Free (DB-only; also runs on the weekly sweep). Returns {measured: <count>}. Requires settings:write.

Inputs

InputRequiredTypeDescription
NoneNoNo user-supplied inputs.
Complete input schema
{
"properties": {},
"title": "g8_radar_measure_initiativesArguments",
"type": "object"
}

g8_radar_monitoring_ads

Ads & keywords. Reads the durable ad_creative snapshot corpus (never empty-by-design); optionally augments with a live provider fetch per the org’s ad_source setting. Keywords = persisted organic + paid.

Inputs

InputRequiredTypeDescription
NoneNoNo user-supplied inputs.
Complete input schema
{
"properties": {},
"title": "g8_radar_monitoring_adsArguments",
"type": "object"
}

g8_radar_monitoring_content

Competitor content-change feed. Filter by competitor, page kind, change category / type, minimum significance (0-100), date range, and free-text search. Args: competitor_id: Filter to one competitor. kind: Filter by page kind (e.g. pricing, page, features). change_category: Filter by change category. change_type: Filter by change type (new, changed, removed). min_significance: Minimum significance score (0-100). date_from: ISO start date. date_to: ISO end date. search: Free-text search (max 200 chars). limit: Max rows (default 50, 1-200).

Inputs

InputRequiredTypeDescription
competitor_idNostring / nullSee the schema below for constraints and defaults.
kindNostring / nullSee the schema below for constraints and defaults.
change_categoryNostring / nullSee the schema below for constraints and defaults.
change_typeNostring / nullSee the schema below for constraints and defaults.
min_significanceNointeger / nullSee the schema below for constraints and defaults.
date_fromNostring / nullSee the schema below for constraints and defaults.
date_toNostring / nullSee the schema below for constraints and defaults.
searchNostring / nullSee the schema below for constraints and defaults.
limitNointegerSee the schema below for constraints and defaults.
Complete input schema
{
"properties": {
"competitor_id": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"title": "Competitor Id"
},
"kind": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"title": "Kind"
},
"change_category": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"title": "Change Category"
},
"change_type": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"title": "Change Type"
},
"min_significance": {
"anyOf": [
{
"type": "integer"
},
{
"type": "null"
}
],
"default": null,
"title": "Min Significance"
},
"date_from": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"title": "Date From"
},
"date_to": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"title": "Date To"
},
"search": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"title": "Search"
},
"limit": {
"default": 50,
"title": "Limit",
"type": "integer"
}
},
"title": "g8_radar_monitoring_contentArguments",
"type": "object"
}

g8_radar_monitoring_linkedin

Competitor LinkedIn posts for the LinkedIn sub-tab (listener store first, then the MixRank company-post corpus fallback for tracked competitors). Args: limit: Max posts (default 50, 1-200).

Inputs

InputRequiredTypeDescription
limitNointegerSee the schema below for constraints and defaults.
Complete input schema
{
"properties": {
"limit": {
"default": 50,
"title": "Limit",
"type": "integer"
}
},
"title": "g8_radar_monitoring_linkedinArguments",
"type": "object"
}

g8_radar_optimization_runs

Radar-spawned content-refresh grids (ContentGrid ‘Radar: …’) with lean score aggregates over their content jobs.

Inputs

InputRequiredTypeDescription
NoneNoNo user-supplied inputs.
Complete input schema
{
"properties": {},
"title": "g8_radar_optimization_runsArguments",
"type": "object"
}

g8_radar_overview

Radar dashboard summary: tracked counts, 7-day moves, open gaps, act-now / live-initiative funnel, the threat board (one row per active competitor), recent moves, and derived alerts. The single best entry point for “what’s happening with my competitors”.

Inputs

InputRequiredTypeDescription
NoneNoNo user-supplied inputs.
Complete input schema
{
"properties": {},
"title": "g8_radar_overviewArguments",
"type": "object"
}

g8_radar_own_traffic_estimate

Estimated own-domain traffic (DataForSEO) - fallback for the Traffic & market view when the first-party tracking snippet isn’t installed. 6h success cache + 1h miss-cooldown bound the paid Labs call; the result is an APPROXIMATION, not first-party analytics.

Inputs

InputRequiredTypeDescription
NoneNoNo user-supplied inputs.
Complete input schema
{
"properties": {},
"title": "g8_radar_own_traffic_estimateArguments",
"type": "object"
}

g8_radar_page_history

Full capture history for one page (competitor + url), newest-first - powers the per-page version timeline. Excludes unchanged re-captures. Args: url: The page URL (required, max 2048 chars). competitor_id: Competitor profile UUID (required). limit: Max history points (default 20, 1-50).

Inputs

InputRequiredTypeDescription
urlYesstringSee the schema below for constraints and defaults.
competitor_idYesstringSee the schema below for constraints and defaults.
limitNointegerSee the schema below for constraints and defaults.
Complete input schema
{
"properties": {
"url": {
"title": "Url",
"type": "string"
},
"competitor_id": {
"title": "Competitor Id",
"type": "string"
},
"limit": {
"default": 20,
"title": "Limit",
"type": "integer"
}
},
"required": [
"url",
"competitor_id"
],
"title": "g8_radar_page_historyArguments",
"type": "object"
}

g8_radar_run_aeo

BILLABLE: trigger an AEO run (generate probes on first use, then query the baseline answer engine for each). Async via Celery - one paid LLM call per probe. Guarded by settings:write + a per-org Redis cooldown (returns 429 while a recent run is in flight).

Inputs

InputRequiredTypeDescription
NoneNoNo user-supplied inputs.
Complete input schema
{
"properties": {},
"title": "g8_radar_run_aeoArguments",
"type": "object"
}

g8_radar_scan_all

BILLABLE: enqueue a scan for every active competitor (up to 20). Runs async on Celery; returns the number of scans queued. Consumes paid crawl/provider credits per competitor.

Inputs

InputRequiredTypeDescription
NoneNoNo user-supplied inputs.
Complete input schema
{
"properties": {},
"title": "g8_radar_scan_allArguments",
"type": "object"
}

g8_radar_scan_competitor

BILLABLE: enqueue a fresh scan of one competitor (crawl pages, ads, traffic). Runs async on Celery; returns {task_id}. Consumes paid crawl/provider credits. Args: competitor_id: Competitor profile UUID.

Inputs

InputRequiredTypeDescription
competitor_idYesstringSee the schema below for constraints and defaults.
Complete input schema
{
"properties": {
"competitor_id": {
"title": "Competitor Id",
"type": "string"
}
},
"required": [
"competitor_id"
],
"title": "g8_radar_scan_competitorArguments",
"type": "object"
}

g8_radar_traffic

Traffic & market view: per-competitor visit estimates + trend, with the org’s own domain marked is_self. The market-share comparison series.

Inputs

InputRequiredTypeDescription
NoneNoNo user-supplied inputs.
Complete input schema
{
"properties": {},
"title": "g8_radar_trafficArguments",
"type": "object"
}

g8_radar_update_competitor

Update a competitor profile (tier, active flag, name, or scan_config). Returns the updated profile. Use scan_config to pin the manual tracked-page selection from g8_radar_discover_pages. Args: competitor_id: Competitor profile UUID. tier: New tier - tier1 or tier2. is_active: Active / paused flag. name: New display name. scan_config: {mode: auto|manual, include_paths: […]} selection.

Inputs

InputRequiredTypeDescription
competitor_idYesstringSee the schema below for constraints and defaults.
tierNostring / nullSee the schema below for constraints and defaults.
is_activeNoboolean / nullSee the schema below for constraints and defaults.
nameNostring / nullSee the schema below for constraints and defaults.
scan_configNoobject / nullSee the schema below for constraints and defaults.
Complete input schema
{
"properties": {
"competitor_id": {
"title": "Competitor Id",
"type": "string"
},
"tier": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"title": "Tier"
},
"is_active": {
"anyOf": [
{
"type": "boolean"
},
{
"type": "null"
}
],
"default": null,
"title": "Is Active"
},
"name": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"title": "Name"
},
"scan_config": {
"anyOf": [
{
"additionalProperties": true,
"type": "object"
},
{
"type": "null"
}
],
"default": null,
"title": "Scan Config"
}
},
"required": [
"competitor_id"
],
"title": "g8_radar_update_competitorArguments",
"type": "object"
}

g8_radar_update_gap

Update a gap’s status (open / dismissed / converted). Returns the updated gap. Args: gap_id: Gap UUID. status: New status - open, dismissed, or converted.

Inputs

InputRequiredTypeDescription
gap_idYesstringSee the schema below for constraints and defaults.
statusYesstringSee the schema below for constraints and defaults.
Complete input schema
{
"properties": {
"gap_id": {
"title": "Gap Id",
"type": "string"
},
"status": {
"title": "Status",
"type": "string"
}
},
"required": [
"gap_id",
"status"
],
"title": "g8_radar_update_gapArguments",
"type": "object"
}

g8_radar_update_settings

Replace the org’s Radar settings (PUT - full object). Reads current settings via g8_radar_get_settings first when you only want to change a field; any omitted field falls back to its default. Args: tier1_cadence_days: Scan cadence for tier1 competitors (1-365). tier2_cadence_days: Scan cadence for tier2 competitors (1-365). alerts: Toggles dict (pricing_change, new_ads, content_velocity, keyword_overtake, warm_account). channels: Delivery channels dict (in_app, bridge). ad_source: Ad source - stored, linkedin, meta, or all.

Inputs

InputRequiredTypeDescription
tier1_cadence_daysNointeger / nullSee the schema below for constraints and defaults.
tier2_cadence_daysNointeger / nullSee the schema below for constraints and defaults.
alertsNoobject / nullSee the schema below for constraints and defaults.
channelsNoobject / nullSee the schema below for constraints and defaults.
ad_sourceNostring / nullSee the schema below for constraints and defaults.
Complete input schema
{
"properties": {
"tier1_cadence_days": {
"anyOf": [
{
"type": "integer"
},
{
"type": "null"
}
],
"default": null,
"title": "Tier1 Cadence Days"
},
"tier2_cadence_days": {
"anyOf": [
{
"type": "integer"
},
{
"type": "null"
}
],
"default": null,
"title": "Tier2 Cadence Days"
},
"alerts": {
"anyOf": [
{
"additionalProperties": {
"type": "boolean"
},
"type": "object"
},
{
"type": "null"
}
],
"default": null,
"title": "Alerts"
},
"channels": {
"anyOf": [
{
"additionalProperties": {
"type": "boolean"
},
"type": "object"
},
{
"type": "null"
}
],
"default": null,
"title": "Channels"
},
"ad_source": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"title": "Ad Source"
}
},
"title": "g8_radar_update_settingsArguments",
"type": "object"
}

g8_repo_create_campaign

Create Campaign. Uses the current organization and existing API permissions. Review the intended change and set confirm=true to execute; otherwise no API request is sent. API: POST /repos/{repo_id}/campaigns

Inputs

InputRequiredTypeDescription
repo_idYesstringRepository ID
bodyYes#/$defs/Apideveloper_api__interfaces__v1__cli_campaigns_router__CampaignCreateRequestSee the schema below for constraints and defaults.
confirmNobooleanSee the schema below for constraints and defaults.
Complete input schema
{
"$defs": {
"Apideveloper_api__interfaces__v1__cli_campaigns_router__CampaignCreateRequest": {
"additionalProperties": false,
"properties": {
"brief": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"description": "Campaign brief",
"title": "Brief"
},
"category": {
"default": "Outbound",
"description": "Campaign category",
"title": "Category",
"type": "string"
},
"core_concept": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"description": "Core concept",
"title": "Core Concept"
},
"goal": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"description": "Campaign goal",
"title": "Goal"
},
"name": {
"description": "Campaign name",
"title": "Name",
"type": "string"
},
"primary_hook": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"description": "Primary hook text",
"title": "Primary Hook"
},
"target_persona": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"description": "Target persona",
"title": "Target Persona"
}
},
"required": [
"name"
],
"title": "Apideveloper_api__interfaces__v1__cli_campaigns_router__CampaignCreateRequest",
"type": "object"
}
},
"properties": {
"repo_id": {
"description": "Repository ID",
"title": "Repo Id",
"type": "string"
},
"body": {
"$ref": "#/$defs/Apideveloper_api__interfaces__v1__cli_campaigns_router__CampaignCreateRequest"
},
"confirm": {
"default": false,
"title": "Confirm",
"type": "boolean"
}
},
"required": [
"repo_id",
"body"
],
"title": "g8_repo_create_campaignArguments",
"type": "object"
}

g8_repo_delete_repo

Delete Repo. Uses the current organization and existing API permissions. Review the intended change and set confirm=true to execute; otherwise no API request is sent. API: DELETE /repos/{repo_id}

Inputs

InputRequiredTypeDescription
repo_idYesstringRepository ID
confirmNobooleanSee the schema below for constraints and defaults.
Complete input schema
{
"properties": {
"repo_id": {
"description": "Repository ID",
"title": "Repo Id",
"type": "string"
},
"confirm": {
"default": false,
"title": "Confirm",
"type": "boolean"
}
},
"required": [
"repo_id"
],
"title": "g8_repo_delete_repoArguments",
"type": "object"
}

g8_repo_get_campaign_document

Get Campaign Document. Uses the current organization and existing API permissions. API: GET /repos/{repo_id}/campaigns/{campaign_id}/documents/{document_id}

Inputs

InputRequiredTypeDescription
repo_idYesstringRepository ID
campaign_idYesstringCampaign ID
document_idYesstringDocument ID
Complete input schema
{
"properties": {
"repo_id": {
"description": "Repository ID",
"title": "Repo Id",
"type": "string"
},
"campaign_id": {
"description": "Campaign ID",
"title": "Campaign Id",
"type": "string"
},
"document_id": {
"description": "Document ID",
"title": "Document Id",
"type": "string"
}
},
"required": [
"repo_id",
"campaign_id",
"document_id"
],
"title": "g8_repo_get_campaign_documentArguments",
"type": "object"
}

g8_repo_launch_campaign

Launch Campaign. Uses the current organization and existing API permissions. Review the intended change and set confirm=true to execute; otherwise no API request is sent. API: POST /repos/{repo_id}/campaigns/{campaign_id}/launch

Inputs

InputRequiredTypeDescription
repo_idYesstringRepository ID
campaign_idYesstringCampaign ID
confirmNobooleanSee the schema below for constraints and defaults.
Complete input schema
{
"properties": {
"repo_id": {
"description": "Repository ID",
"title": "Repo Id",
"type": "string"
},
"campaign_id": {
"description": "Campaign ID",
"title": "Campaign Id",
"type": "string"
},
"confirm": {
"default": false,
"title": "Confirm",
"type": "boolean"
}
},
"required": [
"repo_id",
"campaign_id"
],
"title": "g8_repo_launch_campaignArguments",
"type": "object"
}

g8_repo_list_repos

List Repos. Uses the current organization and existing API permissions. API: GET /repos

Inputs

InputRequiredTypeDescription
pageNointeger / nullPage number (1-indexed)
limitNointeger / nullItems per page (max 200)
Complete input schema
{
"properties": {
"page": {
"anyOf": [
{
"minimum": 1,
"type": "integer"
},
{
"type": "null"
}
],
"default": null,
"description": "Page number (1-indexed)",
"title": "Page"
},
"limit": {
"anyOf": [
{
"maximum": 200,
"minimum": 1,
"type": "integer"
},
{
"type": "null"
}
],
"default": null,
"description": "Items per page (max 200)",
"title": "Limit"
}
},
"title": "g8_repo_list_reposArguments",
"type": "object"
}

g8_repo_list_streams

List Streams. Uses the current organization and existing API permissions. API: GET /repos/{repo_id}/streams

Inputs

InputRequiredTypeDescription
repo_idYesstringRepository ID
Complete input schema
{
"properties": {
"repo_id": {
"description": "Repository ID",
"title": "Repo Id",
"type": "string"
}
},
"required": [
"repo_id"
],
"title": "g8_repo_list_streamsArguments",
"type": "object"
}

g8_repo_rollback_install

Rollback Install. Uses the current organization and existing API permissions. Review the intended change and set confirm=true to execute; otherwise no API request is sent. API: POST /repos/{repo_id}/rollback

Inputs

InputRequiredTypeDescription
repo_idYesstringRepository ID
confirmNobooleanSee the schema below for constraints and defaults.
Complete input schema
{
"properties": {
"repo_id": {
"description": "Repository ID",
"title": "Repo Id",
"type": "string"
},
"confirm": {
"default": false,
"title": "Confirm",
"type": "boolean"
}
},
"required": [
"repo_id"
],
"title": "g8_repo_rollback_installArguments",
"type": "object"
}

g8_repo_update_campaign

Update Campaign. Uses the current organization and existing API permissions. Review the intended change and set confirm=true to execute; otherwise no API request is sent. API: PATCH /repos/{repo_id}/campaigns/{campaign_id}

Inputs

InputRequiredTypeDescription
repo_idYesstringRepository ID
campaign_idYesstringCampaign ID
bodyYes#/$defs/Apideveloper_api__interfaces__v1__cli_campaigns_router__CampaignUpdateRequestSee the schema below for constraints and defaults.
confirmNobooleanSee the schema below for constraints and defaults.
Complete input schema
{
"$defs": {
"Apideveloper_api__interfaces__v1__cli_campaigns_router__CampaignUpdateRequest": {
"additionalProperties": false,
"properties": {
"brief": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"description": "Campaign brief",
"title": "Brief"
},
"category": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"description": "Campaign category",
"title": "Category"
},
"core_concept": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"description": "Core concept",
"title": "Core Concept"
},
"goal": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"description": "Campaign goal",
"title": "Goal"
},
"name": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"description": "Campaign name",
"title": "Name"
},
"primary_hook": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"description": "Primary hook text",
"title": "Primary Hook"
},
"target_persona": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"description": "Target persona",
"title": "Target Persona"
}
},
"title": "Apideveloper_api__interfaces__v1__cli_campaigns_router__CampaignUpdateRequest",
"type": "object"
}
},
"properties": {
"repo_id": {
"description": "Repository ID",
"title": "Repo Id",
"type": "string"
},
"campaign_id": {
"description": "Campaign ID",
"title": "Campaign Id",
"type": "string"
},
"body": {
"$ref": "#/$defs/Apideveloper_api__interfaces__v1__cli_campaigns_router__CampaignUpdateRequest"
},
"confirm": {
"default": false,
"title": "Confirm",
"type": "boolean"
}
},
"required": [
"repo_id",
"campaign_id",
"body"
],
"title": "g8_repo_update_campaignArguments",
"type": "object"
}

g8_reschedule_booking

Reschedule a booking to a new start time. Free (no extra credit charge); re-sends the updated calendar invite and notifies the attendee. Returns the NEW booking detail. Args: booking_uid: Booking UID to move. start_time: New ISO-8601 start time (must be an available slot). rescheduling_reason: Optional reason shown in the notification.

Inputs

InputRequiredTypeDescription
booking_uidYesstringSee the schema below for constraints and defaults.
start_timeYesstringSee the schema below for constraints and defaults.
rescheduling_reasonNostring / nullSee the schema below for constraints and defaults.
Complete input schema
{
"properties": {
"booking_uid": {
"title": "Booking Uid",
"type": "string"
},
"start_time": {
"title": "Start Time",
"type": "string"
},
"rescheduling_reason": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"title": "Rescheduling Reason"
}
},
"required": [
"booking_uid",
"start_time"
],
"title": "g8_appointments_reschedule_bookingArguments",
"type": "object"
}

g8_resume_sequence

Resume a paused sequence. Contacts will resume receiving messages. IMPORTANT: This resumes real outreach. Confirm with the user first. Args: sequence_id: Sequence ID to resume

Inputs

InputRequiredTypeDescription
sequence_idYesstringSee the schema below for constraints and defaults.
Complete input schema
{
"properties": {
"sequence_id": {
"title": "Sequence Id",
"type": "string"
}
},
"required": [
"sequence_id"
],
"title": "g8_resume_sequenceArguments",
"type": "object"
}

g8_scan_repo

Record repository scan results that YOU produced by reading the code. graph8 does not clone or scan the repository server-side. Walk the checked-out tree yourself (or run the g8 CLI) and send what you found here. The stored results are what g8_install_spine reads to decide which patches to generate, so a scan recorded from a stale or guessed tree produces a patch set for a codebase that does not exist. tech_stack is required: a call without it is rejected by the API. Args: repo_id: Repository ID from g8_connect_repo or g8_status tech_stack: What you detected, e.g. {“framework”: “nextjs”, “language”: “typescript”, “package_manager”: “pnpm”} api_routes: Routes you found, e.g. [{“method”: “POST”, “path”: “/api/signup”}] readme_summary: A short summary of the README, if there is one product_type: b2b_saas, api, marketplace, ecommerce, … gtm_readiness: Flags you observed, e.g. {“has_analytics”: false, “has_forms”: true} scan_duration_ms: How long your scan took, in milliseconds

Inputs

InputRequiredTypeDescription
repo_idYesstringSee the schema below for constraints and defaults.
tech_stackYesobjectSee the schema below for constraints and defaults.
api_routesNoarray / nullSee the schema below for constraints and defaults.
readme_summaryNostring / nullSee the schema below for constraints and defaults.
product_typeNostring / nullSee the schema below for constraints and defaults.
gtm_readinessNoobject / nullSee the schema below for constraints and defaults.
scan_duration_msNointeger / nullSee the schema below for constraints and defaults.
Complete input schema
{
"properties": {
"repo_id": {
"title": "Repo Id",
"type": "string"
},
"tech_stack": {
"additionalProperties": true,
"title": "Tech Stack",
"type": "object"
},
"api_routes": {
"anyOf": [
{
"items": {
"additionalProperties": true,
"type": "object"
},
"type": "array"
},
{
"type": "null"
}
],
"default": null,
"title": "Api Routes"
},
"readme_summary": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"title": "Readme Summary"
},
"product_type": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"title": "Product Type"
},
"gtm_readiness": {
"anyOf": [
{
"additionalProperties": true,
"type": "object"
},
{
"type": "null"
}
],
"default": null,
"title": "Gtm Readiness"
},
"scan_duration_ms": {
"anyOf": [
{
"type": "integer"
},
{
"type": "null"
}
],
"default": null,
"title": "Scan Duration Ms"
}
},
"required": [
"repo_id",
"tech_stack"
],
"title": "g8_scan_repoArguments",
"type": "object"
}

g8_search_companies

Search companies already in your CRM database. Returns companies that your organization has imported or created. Use this to find companies you already track - NOT for prospecting. For finding new companies, use g8_find_companies instead. lifecycle_stage answers “who is in Trial / Customers / Churned right now?” using the exact membership rule the in-app lifecycle grid uses, so the two can never disagree. It is a different question from the other filters and cannot be combined with them. Companies only - “who is in Trial” has no contact-side answer on this surface. Each row then also carries status, custom_status, subscription_status, owner_id and mrr_cents, which a plain search leaves null. Args: domain: Filter by company domain (e.g. acme.com) industry: Filter by industry name: Filter by company name (partial match) page: Page number (default 1) limit: Items per page (default 25, max 200). Raise it only when the user actually wants more than a screenful. lifecycle_stage: A stage slug (or entry id) from g8_get_pipeline(include_lifecycle=True). Returns the companies in that stage. A 403 on this branch means the key is missing the deals:read scope this stage read needs, not that the stage is empty.

Inputs

InputRequiredTypeDescription
domainNostring / nullSee the schema below for constraints and defaults.
industryNostring / nullSee the schema below for constraints and defaults.
nameNostring / nullSee the schema below for constraints and defaults.
pageNointegerSee the schema below for constraints and defaults.
limitNointegerSee the schema below for constraints and defaults.
lifecycle_stageNostring / nullSee the schema below for constraints and defaults.
Complete input schema
{
"properties": {
"domain": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"title": "Domain"
},
"industry": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"title": "Industry"
},
"name": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"title": "Name"
},
"page": {
"default": 1,
"title": "Page",
"type": "integer"
},
"limit": {
"default": 25,
"title": "Limit",
"type": "integer"
},
"lifecycle_stage": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"title": "Lifecycle Stage"
}
},
"title": "g8_search_companiesArguments",
"type": "object"
}

g8_search_contacts

Search contacts already in your CRM database. Returns contacts that your organization has imported or created. Use this to find people you already know about - NOT for prospecting. For finding new leads, use g8_find_contacts instead. Args: email: Filter by email address (exact match) list_id: Filter by contact list ID name: Filter by first or last name (partial match) job_title: Filter by job title (partial match) seniority_level: Filter by seniority (exact: C-Suite, VP, Director, Manager, etc.) company_name: Filter by company name (partial match) country: Filter by country (exact match) page: Page number (default 1) limit: Items per page (default 25, max 200). Raise it only when the user actually wants more than a screenful.

Inputs

InputRequiredTypeDescription
emailNostring / nullSee the schema below for constraints and defaults.
list_idNostring / nullSee the schema below for constraints and defaults.
nameNostring / nullSee the schema below for constraints and defaults.
job_titleNostring / nullSee the schema below for constraints and defaults.
seniority_levelNostring / nullSee the schema below for constraints and defaults.
company_nameNostring / nullSee the schema below for constraints and defaults.
countryNostring / nullSee the schema below for constraints and defaults.
pageNointegerSee the schema below for constraints and defaults.
limitNointegerSee the schema below for constraints and defaults.
Complete input schema
{
"properties": {
"email": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"title": "Email"
},
"list_id": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"title": "List Id"
},
"name": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"title": "Name"
},
"job_title": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"title": "Job Title"
},
"seniority_level": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"title": "Seniority Level"
},
"company_name": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"title": "Company Name"
},
"country": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"title": "Country"
},
"page": {
"default": 1,
"title": "Page",
"type": "integer"
},
"limit": {
"default": 25,
"title": "Limit",
"type": "integer"
}
},
"title": "g8_search_contactsArguments",
"type": "object"
}

g8_search_kb

Search the GTM knowledge base for a repository. Args: repo_id: Repository ID query: Search query (e.g. “ICP for enterprise buyers”)

Inputs

InputRequiredTypeDescription
repo_idYesstringSee the schema below for constraints and defaults.
queryYesstringSee the schema below for constraints and defaults.
Complete input schema
{
"properties": {
"repo_id": {
"title": "Repo Id",
"type": "string"
},
"query": {
"title": "Query",
"type": "string"
}
},
"required": [
"repo_id",
"query"
],
"title": "g8_search_kbArguments",
"type": "object"
}

Save Company Search. Uses the current organization and existing API permissions. Review the intended change and set confirm=true to execute; otherwise no API request is sent. API: POST /search/companies/save

Inputs

InputRequiredTypeDescription
bodyYes#/$defs/ApiSearchSaveRequestSee the schema below for constraints and defaults.
confirmNobooleanSee the schema below for constraints and defaults.
Complete input schema
{
"$defs": {
"ApiSearchFilter": {
"additionalProperties": false,
"properties": {
"field": {
"description": "Field name to filter on (e.g., 'job_title', 'country', 'industry')",
"title": "Field",
"type": "string"
},
"operator": {
"description": "Filter operator",
"enum": [
"any_of",
"contains",
"all_of",
"none_of",
"is_empty",
"is_not_empty",
"between",
"exists"
],
"title": "Operator",
"type": "string"
},
"value": {
"anyOf": [
{
"items": {},
"type": "array"
},
{
"type": "null"
}
],
"default": null,
"description": "Filter values",
"title": "Value"
}
},
"required": [
"field",
"operator"
],
"title": "ApiSearchFilter",
"type": "object"
},
"ApiSearchSaveRequest": {
"additionalProperties": false,
"properties": {
"filters": {
"anyOf": [
{
"items": {
"$ref": "#/$defs/ApiSearchFilter"
},
"type": "array"
},
{
"type": "null"
}
],
"default": null,
"description": "Filter conditions (AND logic)",
"title": "Filters"
},
"limit": {
"default": 25,
"description": "Results per page (max 100)",
"maximum": 100.0,
"minimum": 1.0,
"title": "Limit",
"type": "integer"
},
"list_title": {
"description": "Title for the new list",
"title": "List Title",
"type": "string"
},
"max_results": {
"default": 1000,
"description": "Maximum results to save (max 10,000)",
"maximum": 10000.0,
"minimum": 1.0,
"title": "Max Results",
"type": "integer"
},
"page": {
"default": 1,
"description": "Page number (1-indexed)",
"maximum": 100.0,
"minimum": 1.0,
"title": "Page",
"type": "integer"
}
},
"required": [
"list_title"
],
"title": "ApiSearchSaveRequest",
"type": "object"
}
},
"properties": {
"body": {
"$ref": "#/$defs/ApiSearchSaveRequest"
},
"confirm": {
"default": false,
"title": "Confirm",
"type": "boolean"
}
},
"required": [
"body"
],
"title": "g8_search_save_company_searchArguments",
"type": "object"
}

g8_send_quote

Send (or resend) a quote for e-signature. Sends a real customer-facing email. Creates/reuses a signing envelope and rolls the quote status forward to sent. Recipient resolves from the quote’s signer_contact_id or signer_email (one must be set). Idempotent for resend: if an envelope is already sent or viewed, it is re-emailed with the original signing link - safe to call twice. Args: quote_id: Quote UUID (must be in draft or sent status). subject: Optional email subject override (falls back to quote title). message: Optional cover-line override (falls back to default template).

Inputs

InputRequiredTypeDescription
quote_idYesstringSee the schema below for constraints and defaults.
subjectNostring / nullSee the schema below for constraints and defaults.
messageNostring / nullSee the schema below for constraints and defaults.
Complete input schema
{
"properties": {
"quote_id": {
"title": "Quote Id",
"type": "string"
},
"subject": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"title": "Subject"
},
"message": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"title": "Message"
}
},
"required": [
"quote_id"
],
"title": "g8_send_quoteArguments",
"type": "object"
}

g8_send_reply

Send a reply through the specified channel. Sends a real message - confirm with user first. Args: reply_id: Thread/reply ID to reply to. body: Message body to send. channel: Channel to send through - email, sms, or linkedin. subject: Email subject (email channel only). to: Recipient (email address, phone number, or LinkedIn ID). from_address: Sender (mailbox email, phone number, or LinkedIn account ID).

Inputs

InputRequiredTypeDescription
reply_idYesstringSee the schema below for constraints and defaults.
bodyYesstringSee the schema below for constraints and defaults.
channelYesstringSee the schema below for constraints and defaults.
subjectNostring / nullSee the schema below for constraints and defaults.
toNostring / nullSee the schema below for constraints and defaults.
from_addressNostring / nullSee the schema below for constraints and defaults.
Complete input schema
{
"properties": {
"reply_id": {
"title": "Reply Id",
"type": "string"
},
"body": {
"title": "Body",
"type": "string"
},
"channel": {
"title": "Channel",
"type": "string"
},
"subject": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"title": "Subject"
},
"to": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"title": "To"
},
"from_address": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"title": "From Address"
}
},
"required": [
"reply_id",
"body",
"channel"
],
"title": "g8_send_replyArguments",
"type": "object"
}

g8_sequence_get_sequence

Get Sequence. Uses the current organization and existing API permissions. API: GET /sequences/{sequence_id}

Inputs

InputRequiredTypeDescription
sequence_idYesstringSequence ID
Complete input schema
{
"properties": {
"sequence_id": {
"description": "Sequence ID",
"title": "Sequence Id",
"type": "string"
}
},
"required": [
"sequence_id"
],
"title": "g8_sequence_get_sequenceArguments",
"type": "object"
}

g8_sequence_list_sequence_contacts

List Sequence Contacts. Uses the current organization and existing API permissions. API: GET /sequences/{sequence_id}/contacts

Inputs

InputRequiredTypeDescription
sequence_idYesstringSequence ID
pageNointeger / nullPage number
limitNointeger / nullItems per page
stateNostring / nullFilter by contact state
Complete input schema
{
"properties": {
"sequence_id": {
"description": "Sequence ID",
"title": "Sequence Id",
"type": "string"
},
"page": {
"anyOf": [
{
"minimum": 1,
"type": "integer"
},
{
"type": "null"
}
],
"default": null,
"description": "Page number",
"title": "Page"
},
"limit": {
"anyOf": [
{
"maximum": 200,
"minimum": 1,
"type": "integer"
},
{
"type": "null"
}
],
"default": null,
"description": "Items per page",
"title": "Limit"
},
"state": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"description": "Filter by contact state",
"title": "State"
}
},
"required": [
"sequence_id"
],
"title": "g8_sequence_list_sequence_contactsArguments",
"type": "object"
}

g8_sequence_run_sequence

Run Sequence. Uses the current organization and existing API permissions. Review the intended change and set confirm=true to execute; otherwise no API request is sent. API: POST /sequences/{sequence_id}/run

Inputs

InputRequiredTypeDescription
sequence_idYesstringSequence ID
confirmNobooleanSee the schema below for constraints and defaults.
Complete input schema
{
"properties": {
"sequence_id": {
"description": "Sequence ID",
"title": "Sequence Id",
"type": "string"
},
"confirm": {
"default": false,
"title": "Confirm",
"type": "boolean"
}
},
"required": [
"sequence_id"
],
"title": "g8_sequence_run_sequenceArguments",
"type": "object"
}

g8_set_field_value

Set a custom column value on a single contact or company row. Use g8_list_fields first to find the column_id for the column you want to write into. The record_id is the contact_id (when entity=“contacts”) or company_id (when entity=“companies”) of the row to update. Pass value=None (or omit it) to clear the column for that row. This is a write, not a destructive op: setting the same value twice is idempotent and reversible by simply writing the previous value back. Args: column_id: Column ID from g8_list_fields or g8_create_field record_id: Contact ID or company ID to update value: Value to write into the custom column. Omit/None to clear. entity: Target entity - “contacts” or “companies” (default: contacts)

Inputs

InputRequiredTypeDescription
column_idYesintegerSee the schema below for constraints and defaults.
record_idYesintegerSee the schema below for constraints and defaults.
valueNostring / nullSee the schema below for constraints and defaults.
entityNostringSee the schema below for constraints and defaults.
Complete input schema
{
"properties": {
"column_id": {
"title": "Column Id",
"type": "integer"
},
"record_id": {
"title": "Record Id",
"type": "integer"
},
"value": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"title": "Value"
},
"entity": {
"default": "contacts",
"title": "Entity",
"type": "string"
}
},
"required": [
"column_id",
"record_id"
],
"title": "g8_set_field_valueArguments",
"type": "object"
}

g8_set_field_values

Set custom column values on ONE or MANY contact/company rows in a single call. The batch version of g8_set_field_value - prefer this whenever you write more than one value (multiple columns on a row, multiple rows, or both). rows is a list; a single-row update is just a list of length 1. entity is SHARED across every row. Each row is a dict: { “record_id”: 123, # required: contact_id or company_id “fields”: [ # columns to set on this row {“column_id”: 5, “value”: “hot”}, {“column_id”: 6, “value”: “9”}, {“column_id”: 7} # value omitted -> clears that column ] } Use g8_list_fields to find column_ids. A field with no value (or value=null) clears that column for the row. Partial success: rows are applied independently, so one bad row (missing record, unknown column) comes back ok: false in results[] while the rest still commit. The response carries total_rows_updated, total_values_written, and a per-row results[] array. Limits: 1-500 rows per call; a record_id may appear only once per call (fold that record’s writes into a single row). Args: rows: List of row specs (1-500). Each is a dict with record_id and a fields list of &#123;column_id, value&#125; pairs as shown above. entity: Target entity for ALL rows - “contacts” or “companies”.

Inputs

InputRequiredTypeDescription
rowsYesarraySee the schema below for constraints and defaults.
entityNostringSee the schema below for constraints and defaults.
Complete input schema
{
"properties": {
"rows": {
"items": {
"additionalProperties": true,
"type": "object"
},
"title": "Rows",
"type": "array"
},
"entity": {
"default": "contacts",
"title": "Entity",
"type": "string"
}
},
"required": [
"rows"
],
"title": "g8_set_field_valuesArguments",
"type": "object"
}

g8_snippet_get_form_template

Get Form Template. Uses the current organization and existing API permissions. API: GET /snippet/form

Inputs

InputRequiredTypeDescription
NoneNoNo user-supplied inputs.
Complete input schema
{
"properties": {},
"title": "g8_snippet_get_form_templateArguments",
"type": "object"
}

g8_start_task_execution

Explicitly start an agent-assigned task using the caller’s permissions. Only call when execution is requested. request_id must be a UUID and must be reused for retries of an uncertain response. Assignment alone does not authorize Start; existing consequential-action approvals apply.

Inputs

InputRequiredTypeDescription
task_idYesstringSee the schema below for constraints and defaults.
request_idYesstringSee the schema below for constraints and defaults.
Complete input schema
{
"properties": {
"task_id": {
"title": "Task Id",
"type": "string"
},
"request_id": {
"title": "Request Id",
"type": "string"
}
},
"required": [
"task_id",
"request_id"
],
"title": "g8_start_task_executionArguments",
"type": "object"
}

g8_status

Get the current status of a connected repository. Args: repo_id: Repository ID

Inputs

InputRequiredTypeDescription
repo_idYesstringSee the schema below for constraints and defaults.
Complete input schema
{
"properties": {
"repo_id": {
"title": "Repo Id",
"type": "string"
}
},
"required": [
"repo_id"
],
"title": "g8_statusArguments",
"type": "object"
}

g8_switch_org

Switch which organization all your MCP actions run against. Rejected unless the user is a member of the target org. Takes effect on the user’s NEXT message and applies to every connected client (per-user choice). After switching, briefly confirm which org is now active. Args: org: graph8 id, uuid, or exact name (any value from g8_list_orgs).

Inputs

InputRequiredTypeDescription
orgYesstringSee the schema below for constraints and defaults.
Complete input schema
{
"properties": {
"org": {
"title": "Org",
"type": "string"
}
},
"required": [
"org"
],
"title": "g8_switch_orgArguments",
"type": "object"
}

g8_tag_reply

Attach tags to an inbox thread. Args: reply_id: Thread/reply ID. tag_ids: List of tag IDs to attach. channel: email, sms, or linkedin (default email).

Inputs

InputRequiredTypeDescription
reply_idYesstringSee the schema below for constraints and defaults.
tag_idsYesarraySee the schema below for constraints and defaults.
channelNostringSee the schema below for constraints and defaults.
Complete input schema
{
"properties": {
"reply_id": {
"title": "Reply Id",
"type": "string"
},
"tag_ids": {
"items": {
"type": "string"
},
"title": "Tag Ids",
"type": "array"
},
"channel": {
"default": "email",
"title": "Channel",
"type": "string"
}
},
"required": [
"reply_id",
"tag_ids"
],
"title": "g8_tag_replyArguments",
"type": "object"
}

REQUIRED FIRST STEP when the user asks for anything outside your currently visible tools. graph8 ships 586 tools but only 123 are visible at connect time. Workflow, voice/dialer, intent, skill, custom fields, forms, snippet, and playbook tools are HIDDEN until you search for them. Call this BEFORE saying “I don’t have a tool for that” - it returns ranked matches AND auto-activates them so they appear on your next tools/list call (the server emits notifications/tools/list_changed). Common category queries: “workflow”, “dialer”, “voice”, “intent”, “skill”, “field”, “form”, “snippet”, “playbook”. Search is family-aware: it understands synonyms (“automation” -> workflow, “dialer”/“phone” -> voice, “competitor”/“signals” -> intent) and singular/plural drift, and it ranks tools that match in their NAME above tools that only mention a word in their description - so a category query returns that family cleanly instead of bleeding into adjacent groups. The result’s detected_groups tells you which family/families the query resolved to; a multi-family result means the query was ambiguous. Args: query: Free-text search (e.g. “enrich contacts”, “sequence pause”, “push to CRM”). Ranks all registered tools by name/description match. tool_names: Explicit list of tool names to activate. Use when you already know the tool from a prior turn or skill and just need it visible in tools/list. limit: Max ranked matches to return (default 8). activate: When true (default) the top limit matches (or the tool_names entries) are written to this session’s activated set. Set false to preview without widening tools/list. Returns a ToolSearchResult with: - matches: ranked tool hits (name, description, score, activated flag; the TOP matches also carry input_schema - the tool’s full argument schema) - activated_session_tools: the full activated set AFTER this call - always_on_tools: the default visible set (for context) - total_registered_tools: how many tools exist in total After a successful activate=true call, the server emits notifications/tools/list_changed to prompt the client to re-fetch tools/list. Clients that don’t support the notification still see the newly activated tools on their next session connect (Redis-cached 4h). IMPORTANT: if an activated tool does NOT show up in your tools list (some clients only refresh on reconnect), do not stall and do not tell the user the capability is missing - run it directly with g8_execute(tool_name=<match.name>, arguments={…}) using the match’s input_schema to shape the arguments. To fetch the schema of a match beyond the top few, call again with tool_names=[<that name>]. The ctx parameter is auto-injected by FastMCP and hidden from the public tool schema - clients do not see it.

Inputs

InputRequiredTypeDescription
queryNostring / nullSee the schema below for constraints and defaults.
tool_namesNoarray / nullSee the schema below for constraints and defaults.
limitNointegerSee the schema below for constraints and defaults.
activateNobooleanSee the schema below for constraints and defaults.
Complete input schema
{
"properties": {
"query": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"title": "Query"
},
"tool_names": {
"anyOf": [
{
"items": {
"type": "string"
},
"type": "array"
},
{
"type": "null"
}
],
"default": null,
"title": "Tool Names"
},
"limit": {
"default": 8,
"title": "Limit",
"type": "integer"
},
"activate": {
"default": true,
"title": "Activate",
"type": "boolean"
}
},
"title": "g8_tool_searchArguments",
"type": "object"
}

g8_trigger_audience_sync

Manually trigger an audience sync to push latest members to the ad platform. IMPORTANT: This pushes real data to the ad platform immediately. Confirm with the user before triggering. Args: config_id: Sync config ID

Inputs

InputRequiredTypeDescription
config_idYesintegerSee the schema below for constraints and defaults.
Complete input schema
{
"properties": {
"config_id": {
"title": "Config Id",
"type": "integer"
}
},
"required": [
"config_id"
],
"title": "g8_trigger_audience_syncArguments",
"type": "object"
}

g8_update_audience_sync

Update an audience sync configuration. Args: config_id: Sync config ID mode: Sync mode - “mirror” or “append_only” refresh_cadence_hours: Hours between auto-syncs is_active: Enable/disable the sync

Inputs

InputRequiredTypeDescription
config_idYesintegerSee the schema below for constraints and defaults.
modeNostring / nullSee the schema below for constraints and defaults.
refresh_cadence_hoursNointeger / nullSee the schema below for constraints and defaults.
is_activeNoboolean / nullSee the schema below for constraints and defaults.
Complete input schema
{
"properties": {
"config_id": {
"title": "Config Id",
"type": "integer"
},
"mode": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"title": "Mode"
},
"refresh_cadence_hours": {
"anyOf": [
{
"type": "integer"
},
{
"type": "null"
}
],
"default": null,
"title": "Refresh Cadence Hours"
},
"is_active": {
"anyOf": [
{
"type": "boolean"
},
{
"type": "null"
}
],
"default": null,
"title": "Is Active"
}
},
"required": [
"config_id"
],
"title": "g8_update_audience_syncArguments",
"type": "object"
}

g8_update_contact

Update fields on an EXISTING contact (partial update). Only the arguments you pass are changed; the rest are left untouched. Attach a company (both optional; a contact may have none): - company_id: attach an EXISTING company (mashup_companies.id, as returned by g8_find_companies / g8_create_company). Wins if both given. - company_domain (e.g. “acme.com”): resolve-or-create a company from its domain, created if it does not exist. Attaching a company is how you give a company-less contact a company, which is required before g8_create_deal can derive the deal’s company from that contact. contact_id is the mashup_contact_id (same id space as g8_search_contacts / g8_find_contacts / g8_get_contact_detail). Args: contact_id: The contact to update (required). first_name, last_name, work_email, job_title, job_department, seniority_level, direct_phone, mobile_phone, linkedin_url, city, state, country: Fields to overwrite (omit to leave as-is). company_domain: Company domain to resolve-or-create and link. company_id: Existing company id (mashup_companies.id) to link. lifecycle_stage: Move this contact to a revenue lifecycle stage (a slug from g8_get_pipeline(include_lifecycle=True)). A typo comes back as a 400 naming the valid slugs. suppressed: Do-not-contact switch. True stops outreach, False lifts the org’s own block. Read the suppression section above before using False. suppression_reason: Why, recorded on the ledger row (max 1000 chars). Optional but worth writing - it is what a later audit reads. contact_ids: Suppress or reinstate MANY contacts in one call (max 5000). These must be mashup_contacts.id primary keys, not CONTACT_ID business keys, and ids that do not exist are skipped silently. Use instead of contact_id, never with it. suppression_channel: all (default) | email | phone | linkedin. Bulk suppress only. Careful: a row written for one channel is NOT returned by a query for another, and a per-channel block does not stop sends on other channels. SUPPRESSION, and why False is not the inverse of True: - suppressed=True writes an org-initiated do-not-contact block across all channels for one contact, or on suppression_channel for a bulk call. - suppressed=False clears ONLY the org’s own umbrella block. A block the CONTACT asked for (an unsubscribe) or one the SYSTEM set (a hard bounce, a DNC registry hit) SURVIVES on purpose. So a contact can still come back is_suppressed: true after a successful unsuppress, and channels_cleared can be empty with is_suppressed still true - that means “nothing here was yours to reverse”, not “half done”. - The bulk reinstate refuses per contact rather than in bulk. Read skipped[]: not_operator_reversible means an opt-out the org may not lift is present (do NOT retry), no_active_suppression means there was nothing to clear (benign), reinstate_failed means that one write errored (retryable). reinstated plus skipped should account for total_requested, which counts DE-DUPLICATED ids - so a short suppressed count can mean duplicates, non-existent ids, or already-suppressed contacts. Combining field edits with lifecycle_stage or suppressed in one call issues SEPARATE writes in that order and returns the last ack: the PATCH can succeed and the suppression still fail, so on an error assume a partial change and re-read the contact. Backed by PATCH /api/v1/contacts/&#123;contact_id&#125;, plus POST /contacts/&#123;contact_id&#125;/lifecycle-stage, POST /contacts/&#123;contact_id&#125;/suppress / /unsuppress, and POST /contacts/suppressions/bulk-add / /reinstate.

Inputs

InputRequiredTypeDescription
contact_idNointeger / nullSee the schema below for constraints and defaults.
first_nameNostring / nullSee the schema below for constraints and defaults.
last_nameNostring / nullSee the schema below for constraints and defaults.
work_emailNostring / nullSee the schema below for constraints and defaults.
job_titleNostring / nullSee the schema below for constraints and defaults.
job_departmentNostring / nullSee the schema below for constraints and defaults.
seniority_levelNostring / nullSee the schema below for constraints and defaults.
direct_phoneNostring / nullSee the schema below for constraints and defaults.
mobile_phoneNostring / nullSee the schema below for constraints and defaults.
linkedin_urlNostring / nullSee the schema below for constraints and defaults.
cityNostring / nullSee the schema below for constraints and defaults.
stateNostring / nullSee the schema below for constraints and defaults.
countryNostring / nullSee the schema below for constraints and defaults.
company_domainNostring / nullSee the schema below for constraints and defaults.
company_idNointeger / nullSee the schema below for constraints and defaults.
lifecycle_stageNostring / nullSee the schema below for constraints and defaults.
suppressedNoboolean / nullSee the schema below for constraints and defaults.
suppression_reasonNostring / nullSee the schema below for constraints and defaults.
contact_idsNoarray / nullSee the schema below for constraints and defaults.
suppression_channelNostring / nullSee the schema below for constraints and defaults.
Complete input schema
{
"properties": {
"contact_id": {
"anyOf": [
{
"type": "integer"
},
{
"type": "null"
}
],
"default": null,
"title": "Contact Id"
},
"first_name": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"title": "First Name"
},
"last_name": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"title": "Last Name"
},
"work_email": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"title": "Work Email"
},
"job_title": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"title": "Job Title"
},
"job_department": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"title": "Job Department"
},
"seniority_level": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"title": "Seniority Level"
},
"direct_phone": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"title": "Direct Phone"
},
"mobile_phone": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"title": "Mobile Phone"
},
"linkedin_url": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"title": "Linkedin Url"
},
"city": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"title": "City"
},
"state": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"title": "State"
},
"country": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"title": "Country"
},
"company_domain": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"title": "Company Domain"
},
"company_id": {
"anyOf": [
{
"type": "integer"
},
{
"type": "null"
}
],
"default": null,
"title": "Company Id"
},
"lifecycle_stage": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"title": "Lifecycle Stage"
},
"suppressed": {
"anyOf": [
{
"type": "boolean"
},
{
"type": "null"
}
],
"default": null,
"title": "Suppressed"
},
"suppression_reason": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"title": "Suppression Reason"
},
"contact_ids": {
"anyOf": [
{
"items": {
"type": "integer"
},
"type": "array"
},
{
"type": "null"
}
],
"default": null,
"title": "Contact Ids"
},
"suppression_channel": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"title": "Suppression Channel"
}
},
"title": "g8_update_contactArguments",
"type": "object"
}

g8_update_deal

Update a deal (partial update). Common uses: change the deal stage, reassign the owner, add/remove contact associations, record the buying-committee role of contacts on the deal. Pass only the fields you want to change. At least one field (or one non-empty contact list) is required. Backed by PATCH /api/v1/deals/&#123;deal_id&#125;. Closed-stage rules (400 on violation, detail prefixed with a marker): moving a deal into a Closed Won stage requires an effective close_date AND amount; Closed Lost requires an effective close_date; either requires an owner. “Effective” means the value in this call when provided, else the deal’s existing value - so a deal that already carries them moves freely. Re-submitting the deal’s current stage is not a move and is never gated. Markers: close_date_required_for_won_stage, close_date_required_for_lost_stage, amount_required_for_won_stage, owner_required_for_closed_stage. Supply expected_revision from the canonical CRM record to reject stale edits with HTTP 409. A successful conditional edit returns its new revision. Args: expected_revision: Positive canonical CRM revision to compare before writing. deal_id: Deal UUID returned by g8_get_deals / g8_create_deal. name: New deal name. description: New description. amount: New monetary value. currency: New currency code. stage_id: New pipeline stage UUID (see g8_get_pipeline). Must be an existing stage in the deal’s pipeline (422 otherwise). close_date: New expected close date (ISO 8601). owner_id: New deal owner (member id, email, or provider uid). Pass to reassign a deal whose owner is missing or wrong; it is resolved to a real team member (422 if it matches none). Reassign-only: a deal’s owner cannot be cleared (#18469). Omitting owner_id (or passing None) leaves the owner unchanged. add_contact_ids: mashup_contact_ids to link to the deal. Must belong to the deal’s company (if the deal has none yet, the added contacts’ company is adopted); a cross-company add is rejected. Idempotent - already-linked ids skipped silently. remove_contact_ids: mashup_contact_ids to unlink from the deal. Idempotent - unlinked ids skipped silently. contact_roles: Buying-committee role per contact, keyed by mashup_contact_id as a STRING, e.g. {“5500429”: “champion”, “5500914”: null}. Valid roles: champion, decision_maker, influencer, blocker, coach, end_user. null clears a contact’s role. Use this to record roles on contacts ALREADY on the deal - read them back with g8_get_deal, which returns each contact’s current role. Ids you link via add_contact_ids in the SAME call can be roled here too (roles are applied after the link). An id that is neither already linked nor being added is rejected and the whole update is rolled back.

Inputs

InputRequiredTypeDescription
deal_idYesstringSee the schema below for constraints and defaults.
nameNostring / nullSee the schema below for constraints and defaults.
descriptionNostring / nullSee the schema below for constraints and defaults.
amountNonumber / nullSee the schema below for constraints and defaults.
currencyNostring / nullSee the schema below for constraints and defaults.
stage_idNostring / nullSee the schema below for constraints and defaults.
close_dateNostring / nullSee the schema below for constraints and defaults.
owner_idNostring / nullSee the schema below for constraints and defaults.
add_contact_idsNoarray / nullSee the schema below for constraints and defaults.
remove_contact_idsNoarray / nullSee the schema below for constraints and defaults.
contact_rolesNoobject / nullSee the schema below for constraints and defaults.
expected_revisionNointeger / nullSee the schema below for constraints and defaults.
Complete input schema
{
"properties": {
"deal_id": {
"title": "Deal Id",
"type": "string"
},
"name": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"title": "Name"
},
"description": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"title": "Description"
},
"amount": {
"anyOf": [
{
"type": "number"
},
{
"type": "null"
}
],
"default": null,
"title": "Amount"
},
"currency": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"title": "Currency"
},
"stage_id": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"title": "Stage Id"
},
"close_date": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"title": "Close Date"
},
"owner_id": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"title": "Owner Id"
},
"add_contact_ids": {
"anyOf": [
{
"items": {
"type": "integer"
},
"type": "array"
},
{
"type": "null"
}
],
"default": null,
"title": "Add Contact Ids"
},
"remove_contact_ids": {
"anyOf": [
{
"items": {
"type": "integer"
},
"type": "array"
},
{
"type": "null"
}
],
"default": null,
"title": "Remove Contact Ids"
},
"contact_roles": {
"anyOf": [
{
"additionalProperties": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"type": "object"
},
{
"type": "null"
}
],
"default": null,
"title": "Contact Roles"
},
"expected_revision": {
"anyOf": [
{
"type": "integer"
},
{
"type": "null"
}
],
"default": null,
"title": "Expected Revision"
}
},
"required": [
"deal_id"
],
"title": "g8_update_dealArguments",
"type": "object"
}

g8_update_note

Update a note’s content, on a contact, COMPANY or DEAL note. Note ids are global, so this works on any note regardless of which record it is filed against - no deal-specific variant is needed. Notes marked read_only by g8_list_notes cannot be updated. Backed by PATCH /api/v1/notes/&#123;note_id&#125;. Args: note_id: Note UUID returned by g8_list_notes / g8_create_note. content: Replacement content (plain text or markdown).

Inputs

InputRequiredTypeDescription
note_idYesstringSee the schema below for constraints and defaults.
contentYesstringSee the schema below for constraints and defaults.
Complete input schema
{
"properties": {
"note_id": {
"title": "Note Id",
"type": "string"
},
"content": {
"title": "Content",
"type": "string"
}
},
"required": [
"note_id",
"content"
],
"title": "g8_update_noteArguments",
"type": "object"
}

g8_update_quote

Update a quote (partial). Pass only the fields you want to change. Draft quotes edit in place. A sent/viewed quote is recalled to draft first (its live signing link is voided), keeping the same row + quote number; terminal quotes (accepted/declined/voided/expired) reject the update. owner_id reassigns the owner/AE (a blank value is ignored - never nulls an existing owner). Passing line_items replaces the entire set and re-runs quotable-product authorization. Args: see g8_create_quote - same field meanings.

Inputs

InputRequiredTypeDescription
quote_idYesstringSee the schema below for constraints and defaults.
titleNostring / nullSee the schema below for constraints and defaults.
line_itemsNoarray / nullSee the schema below for constraints and defaults.
signer_contact_idNointeger / nullSee the schema below for constraints and defaults.
signer_emailNostring / nullSee the schema below for constraints and defaults.
signer_nameNostring / nullSee the schema below for constraints and defaults.
billing_contact_idNointeger / nullSee the schema below for constraints and defaults.
billing_legal_nameNostring / nullSee the schema below for constraints and defaults.
billing_primary_emailNostring / nullSee the schema below for constraints and defaults.
billing_emailNostring / nullSee the schema below for constraints and defaults.
billing_addressNostring / nullSee the schema below for constraints and defaults.
mashup_company_idNointeger / nullSee the schema below for constraints and defaults.
deal_idNostring / nullSee the schema below for constraints and defaults.
owner_idNostring / nullSee the schema below for constraints and defaults.
currencyNostring / nullSee the schema below for constraints and defaults.
payment_termsNostring / nullSee the schema below for constraints and defaults.
valid_untilNostring / nullSee the schema below for constraints and defaults.
terms_contentNostring / nullSee the schema below for constraints and defaults.
privacy_contentNostring / nullSee the schema below for constraints and defaults.
notesNostring / nullSee the schema below for constraints and defaults.
public_notesNostring / nullSee the schema below for constraints and defaults.
tax_amountNointeger / nullSee the schema below for constraints and defaults.
contract_monthsNonumber / nullSee the schema below for constraints and defaults.
contract_duration_valueNonumber / nullSee the schema below for constraints and defaults.
contract_duration_unitNostring / nullSee the schema below for constraints and defaults.
contract_start_dateNostring / nullSee the schema below for constraints and defaults.
contract_end_dateNostring / nullSee the schema below for constraints and defaults.
accepted_payment_methodsNoarray / nullSee the schema below for constraints and defaults.
marketing_rightsNoarray / nullSee the schema below for constraints and defaults.
Complete input schema
{
"properties": {
"quote_id": {
"title": "Quote Id",
"type": "string"
},
"title": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"title": "Title"
},
"line_items": {
"anyOf": [
{
"items": {
"additionalProperties": true,
"type": "object"
},
"type": "array"
},
{
"type": "null"
}
],
"default": null,
"title": "Line Items"
},
"signer_contact_id": {
"anyOf": [
{
"type": "integer"
},
{
"type": "null"
}
],
"default": null,
"title": "Signer Contact Id"
},
"signer_email": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"title": "Signer Email"
},
"signer_name": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"title": "Signer Name"
},
"billing_contact_id": {
"anyOf": [
{
"type": "integer"
},
{
"type": "null"
}
],
"default": null,
"title": "Billing Contact Id"
},
"billing_legal_name": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"title": "Billing Legal Name"
},
"billing_primary_email": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"title": "Billing Primary Email"
},
"billing_email": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"title": "Billing Email"
},
"billing_address": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"title": "Billing Address"
},
"mashup_company_id": {
"anyOf": [
{
"type": "integer"
},
{
"type": "null"
}
],
"default": null,
"title": "Mashup Company Id"
},
"deal_id": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"title": "Deal Id"
},
"owner_id": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"title": "Owner Id"
},
"currency": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"title": "Currency"
},
"payment_terms": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"title": "Payment Terms"
},
"valid_until": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"title": "Valid Until"
},
"terms_content": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"title": "Terms Content"
},
"privacy_content": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"title": "Privacy Content"
},
"notes": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"title": "Notes"
},
"public_notes": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"title": "Public Notes"
},
"tax_amount": {
"anyOf": [
{
"type": "integer"
},
{
"type": "null"
}
],
"default": null,
"title": "Tax Amount"
},
"contract_months": {
"anyOf": [
{
"type": "number"
},
{
"type": "null"
}
],
"default": null,
"title": "Contract Months"
},
"contract_duration_value": {
"anyOf": [
{
"type": "number"
},
{
"type": "null"
}
],
"default": null,
"title": "Contract Duration Value"
},
"contract_duration_unit": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"title": "Contract Duration Unit"
},
"contract_start_date": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"title": "Contract Start Date"
},
"contract_end_date": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"title": "Contract End Date"
},
"accepted_payment_methods": {
"anyOf": [
{
"items": {
"type": "string"
},
"type": "array"
},
{
"type": "null"
}
],
"default": null,
"title": "Accepted Payment Methods"
},
"marketing_rights": {
"anyOf": [
{
"items": {
"type": "string"
},
"type": "array"
},
{
"type": "null"
}
],
"default": null,
"title": "Marketing Rights"
}
},
"required": [
"quote_id"
],
"title": "g8_update_quoteArguments",
"type": "object"
}

g8_update_sequence

Update sequence metadata, or remove LinkedIn from the sequence entirely. Args: sequence_id: Sequence ID to update name: New name description: New description is_shared: Whether sequence is shared finish_on_reply: Finish on reply send_in_same_thread: Send in same thread wait_for_new_contacts: Wait for new contacts remove_linkedin: Remove LinkedIn from this sequence. Deletes its LinkedIn steps AND unbinds its LinkedIn sender account together, in one atomic operation. Use this rather than trying to unbind the account on its own: a sequence left holding LinkedIn steps with no sender cannot run or resume at all. Works for either provider (Netrion or legacy HeyReach) and also repairs a sequence already stuck in that state. A sequence with no LinkedIn returns success with zero counts, so it is safe to call across a batch. Cannot be combined with the metadata fields above. remove_linkedin_force: Required to remove LinkedIn from a LIVE or WAITING sequence. The sequence is paused afterwards so the result can be reviewed before it sends again. dry_run: With remove_linkedin, preview exactly which steps and channels would be removed without changing anything. IMPORTANT: this deletes real steps. Always run dry_run=True first and show the user what it reports before running it for real.

Inputs

InputRequiredTypeDescription
sequence_idYesstringSee the schema below for constraints and defaults.
nameNostring / nullSee the schema below for constraints and defaults.
descriptionNostring / nullSee the schema below for constraints and defaults.
is_sharedNoboolean / nullSee the schema below for constraints and defaults.
finish_on_replyNoboolean / nullSee the schema below for constraints and defaults.
send_in_same_threadNoboolean / nullSee the schema below for constraints and defaults.
wait_for_new_contactsNoboolean / nullSee the schema below for constraints and defaults.
remove_linkedinNobooleanSee the schema below for constraints and defaults.
remove_linkedin_forceNobooleanSee the schema below for constraints and defaults.
dry_runNobooleanSee the schema below for constraints and defaults.
Complete input schema
{
"properties": {
"sequence_id": {
"title": "Sequence Id",
"type": "string"
},
"name": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"title": "Name"
},
"description": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"title": "Description"
},
"is_shared": {
"anyOf": [
{
"type": "boolean"
},
{
"type": "null"
}
],
"default": null,
"title": "Is Shared"
},
"finish_on_reply": {
"anyOf": [
{
"type": "boolean"
},
{
"type": "null"
}
],
"default": null,
"title": "Finish On Reply"
},
"send_in_same_thread": {
"anyOf": [
{
"type": "boolean"
},
{
"type": "null"
}
],
"default": null,
"title": "Send In Same Thread"
},
"wait_for_new_contacts": {
"anyOf": [
{
"type": "boolean"
},
{
"type": "null"
}
],
"default": null,
"title": "Wait For New Contacts"
},
"remove_linkedin": {
"default": false,
"title": "Remove Linkedin",
"type": "boolean"
},
"remove_linkedin_force": {
"default": false,
"title": "Remove Linkedin Force",
"type": "boolean"
},
"dry_run": {
"default": false,
"title": "Dry Run",
"type": "boolean"
}
},
"required": [
"sequence_id"
],
"title": "g8_update_sequenceArguments",
"type": "object"
}

g8_update_sequence_step

Update a single step within a sequence. Args: sequence_id: Sequence ID containing the step step_id: Step ID to update step_data: Step template/content data time_interval: Delay in seconds after previous step step_type: Step type. One of: EMAIL, PHONE, SMS, WHATSAPP, HEYREACH, MANUAL_DIALER. Case-insensitive. input_type: Input type. One of: ON_DEMAND, MANUAL_TEMPLATE, AI_GENERATED_TEMPLATE. Case-insensitive.

Inputs

InputRequiredTypeDescription
sequence_idYesstringSee the schema below for constraints and defaults.
step_idYesstringSee the schema below for constraints and defaults.
step_dataNoobject / nullSee the schema below for constraints and defaults.
time_intervalNointeger / nullSee the schema below for constraints and defaults.
step_typeNostring / nullSee the schema below for constraints and defaults.
input_typeNostring / nullSee the schema below for constraints and defaults.
Complete input schema
{
"properties": {
"sequence_id": {
"title": "Sequence Id",
"type": "string"
},
"step_id": {
"title": "Step Id",
"type": "string"
},
"step_data": {
"anyOf": [
{
"additionalProperties": true,
"type": "object"
},
{
"type": "null"
}
],
"default": null,
"title": "Step Data"
},
"time_interval": {
"anyOf": [
{
"type": "integer"
},
{
"type": "null"
}
],
"default": null,
"title": "Time Interval"
},
"step_type": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"title": "Step Type"
},
"input_type": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"title": "Input Type"
}
},
"required": [
"sequence_id",
"step_id"
],
"title": "g8_update_sequence_stepArguments",
"type": "object"
}

g8_update_task

Update an existing task (partial update). Pass only the fields you want to change. At least one field is required. Backed by PATCH /api/v1/tasks/&#123;task_id&#125;. Read the task first and pass its updated_at as expected_updated_at to avoid overwriting another person’s edit. On conflict, read and reconcile the task before trying again; do not retry using a newer revision blindly. Args: tags: Task labels (up to 20, each 1-50 characters); [] clears labels on update. task_id: Task UUID returned by g8_get_tasks / g8_create_task. title: New title. description: New description. due_date: New due date (ISO 8601). assignee_id: New assignee user ID. clear_due_date: Remove the due date; cannot be combined with due_date. clear_assignee: Unassign the task; cannot be combined with assignee_id. task_type: New activity type. clear_task_type: Remove the activity type; cannot be combined with task_type. expected_updated_at: Revision from the task read before editing. Omit only for legacy callers. status: New status (open, completed). priority: New priority (0=none, 1=high, 2=medium, 3=low; historical 4=low is preserved). parent_task_id: New parent task UUID. Re-parents this task into a subtask of the given parent. Parent must exist and must not itself be a subtask. A task that already has subtasks of its own cannot be demoted into a subtask. subtask_sort_order: New sort position within the parent’s subtasks (reorder). Can be passed alone to reorder without re-parenting.

Inputs

InputRequiredTypeDescription
task_idYesstringSee the schema below for constraints and defaults.
titleNostring / nullSee the schema below for constraints and defaults.
descriptionNostring / nullSee the schema below for constraints and defaults.
tagsNoarray / nullSee the schema below for constraints and defaults.
due_dateNostring / nullSee the schema below for constraints and defaults.
assignee_idNostring / nullSee the schema below for constraints and defaults.
statusNostring / nullSee the schema below for constraints and defaults.
priorityNointeger / nullSee the schema below for constraints and defaults.
parent_task_idNostring / nullSee the schema below for constraints and defaults.
subtask_sort_orderNointeger / nullSee the schema below for constraints and defaults.
recordsNoarray / nullSee the schema below for constraints and defaults.
clear_due_dateNobooleanSee the schema below for constraints and defaults.
clear_assigneeNobooleanSee the schema below for constraints and defaults.
task_typeNostring / nullSee the schema below for constraints and defaults.
clear_task_typeNobooleanSee the schema below for constraints and defaults.
expected_updated_atNostring / nullSee the schema below for constraints and defaults.
Complete input schema
{
"properties": {
"task_id": {
"title": "Task Id",
"type": "string"
},
"title": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"title": "Title"
},
"description": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"title": "Description"
},
"tags": {
"anyOf": [
{
"items": {
"type": "string"
},
"type": "array"
},
{
"type": "null"
}
],
"default": null,
"title": "Tags"
},
"due_date": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"title": "Due Date"
},
"assignee_id": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"title": "Assignee Id"
},
"status": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"title": "Status"
},
"priority": {
"anyOf": [
{
"type": "integer"
},
{
"type": "null"
}
],
"default": null,
"title": "Priority"
},
"parent_task_id": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"title": "Parent Task Id"
},
"subtask_sort_order": {
"anyOf": [
{
"type": "integer"
},
{
"type": "null"
}
],
"default": null,
"title": "Subtask Sort Order"
},
"records": {
"anyOf": [
{
"items": {
"additionalProperties": {
"type": "string"
},
"type": "object"
},
"type": "array"
},
{
"type": "null"
}
],
"default": null,
"title": "Records"
},
"clear_due_date": {
"default": false,
"title": "Clear Due Date",
"type": "boolean"
},
"clear_assignee": {
"default": false,
"title": "Clear Assignee",
"type": "boolean"
},
"task_type": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"title": "Task Type"
},
"clear_task_type": {
"default": false,
"title": "Clear Task Type",
"type": "boolean"
},
"expected_updated_at": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"title": "Expected Updated At"
}
},
"required": [
"task_id"
],
"title": "g8_update_taskArguments",
"type": "object"
}

g8_usage_get_usage

Get Usage. Uses the current organization and existing API permissions. API: GET /usage

Inputs

InputRequiredTypeDescription
NoneNoNo user-supplied inputs.
Complete input schema
{
"properties": {},
"title": "g8_usage_get_usageArguments",
"type": "object"
}

g8_usage_list_usage_transactions

List Usage Transactions. Uses the current organization and existing API permissions. API: GET /usage/transactions

Inputs

InputRequiredTypeDescription
pageNointeger / nullPage number (ignored when cursor is supplied)
limitNointeger / nullItems per page
cursorNostring / nullOpaque pagination cursor from a prior response’s next_cursor. When supplied it takes precedence over page.
Complete input schema
{
"properties": {
"page": {
"anyOf": [
{
"minimum": 1,
"type": "integer"
},
{
"type": "null"
}
],
"default": null,
"description": "Page number (ignored when `cursor` is supplied)",
"title": "Page"
},
"limit": {
"anyOf": [
{
"maximum": 200,
"minimum": 1,
"type": "integer"
},
{
"type": "null"
}
],
"default": null,
"description": "Items per page",
"title": "Limit"
},
"cursor": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"description": "Opaque pagination cursor from a prior response's `next_cursor`. When supplied it takes precedence over `page`.",
"title": "Cursor"
}
},
"title": "g8_usage_list_usage_transactionsArguments",
"type": "object"
}

g8_webhook_create_webhook

Create Webhook. Uses the current organization and existing API permissions. Review the intended change and set confirm=true to execute; otherwise no API request is sent. API: POST /webhooks

Inputs

InputRequiredTypeDescription
bodyYes#/$defs/ApiWebhookCreateRequestSee the schema below for constraints and defaults.
confirmNobooleanSee the schema below for constraints and defaults.
Complete input schema
{
"$defs": {
"ApiWebhookCreateRequest": {
"additionalProperties": false,
"properties": {
"events": {
"description": "Event types to subscribe to",
"items": {
"type": "string"
},
"title": "Events",
"type": "array"
},
"name": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"description": "Human-readable name",
"title": "Name"
},
"url": {
"description": "Target URL for webhook delivery",
"title": "Url",
"type": "string"
}
},
"required": [
"events",
"url"
],
"title": "ApiWebhookCreateRequest",
"type": "object"
}
},
"properties": {
"body": {
"$ref": "#/$defs/ApiWebhookCreateRequest"
},
"confirm": {
"default": false,
"title": "Confirm",
"type": "boolean"
}
},
"required": [
"body"
],
"title": "g8_webhook_create_webhookArguments",
"type": "object"
}

g8_webhook_delete_webhook

Delete Webhook. Uses the current organization and existing API permissions. Review the intended change and set confirm=true to execute; otherwise no API request is sent. API: DELETE /webhooks/{webhook_id}

Inputs

InputRequiredTypeDescription
webhook_idYesstringWebhook subscription ID
confirmNobooleanSee the schema below for constraints and defaults.
Complete input schema
{
"properties": {
"webhook_id": {
"description": "Webhook subscription ID",
"title": "Webhook Id",
"type": "string"
},
"confirm": {
"default": false,
"title": "Confirm",
"type": "boolean"
}
},
"required": [
"webhook_id"
],
"title": "g8_webhook_delete_webhookArguments",
"type": "object"
}

g8_webhook_get_webhook

Get Webhook. Uses the current organization and existing API permissions. API: GET /webhooks/{webhook_id}

Inputs

InputRequiredTypeDescription
webhook_idYesstringWebhook subscription ID
Complete input schema
{
"properties": {
"webhook_id": {
"description": "Webhook subscription ID",
"title": "Webhook Id",
"type": "string"
}
},
"required": [
"webhook_id"
],
"title": "g8_webhook_get_webhookArguments",
"type": "object"
}

g8_webhook_list_webhook_deliveries

List Webhook Deliveries. Uses the current organization and existing API permissions. API: GET /webhooks/{webhook_id}/deliveries

Inputs

InputRequiredTypeDescription
webhook_idYesstringWebhook subscription ID
pageNointeger / nullPage number
limitNointeger / nullItems per page
statusNostring / nullFilter by delivery status
Complete input schema
{
"properties": {
"webhook_id": {
"description": "Webhook subscription ID",
"title": "Webhook Id",
"type": "string"
},
"page": {
"anyOf": [
{
"minimum": 1,
"type": "integer"
},
{
"type": "null"
}
],
"default": null,
"description": "Page number",
"title": "Page"
},
"limit": {
"anyOf": [
{
"maximum": 200,
"minimum": 1,
"type": "integer"
},
{
"type": "null"
}
],
"default": null,
"description": "Items per page",
"title": "Limit"
},
"status": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"description": "Filter by delivery status",
"title": "Status"
}
},
"required": [
"webhook_id"
],
"title": "g8_webhook_list_webhook_deliveriesArguments",
"type": "object"
}

g8_webhook_list_webhook_events

List Webhook Events. Uses the current organization and existing API permissions. API: GET /webhooks/events

Inputs

InputRequiredTypeDescription
NoneNoNo user-supplied inputs.
Complete input schema
{
"properties": {},
"title": "g8_webhook_list_webhook_eventsArguments",
"type": "object"
}

g8_webhook_list_webhooks

List Webhooks. Uses the current organization and existing API permissions. API: GET /webhooks

Inputs

InputRequiredTypeDescription
is_activeNoboolean / nullFilter by active status
Complete input schema
{
"properties": {
"is_active": {
"anyOf": [
{
"type": "boolean"
},
{
"type": "null"
}
],
"default": null,
"description": "Filter by active status",
"title": "Is Active"
}
},
"title": "g8_webhook_list_webhooksArguments",
"type": "object"
}

g8_webhook_rotate_webhook_secret

Rotate Webhook Secret. Uses the current organization and existing API permissions. Review the intended change and set confirm=true to execute; otherwise no API request is sent. API: POST /webhooks/{webhook_id}/rotate-secret

Inputs

InputRequiredTypeDescription
webhook_idYesstringWebhook subscription ID
confirmNobooleanSee the schema below for constraints and defaults.
Complete input schema
{
"properties": {
"webhook_id": {
"description": "Webhook subscription ID",
"title": "Webhook Id",
"type": "string"
},
"confirm": {
"default": false,
"title": "Confirm",
"type": "boolean"
}
},
"required": [
"webhook_id"
],
"title": "g8_webhook_rotate_webhook_secretArguments",
"type": "object"
}

g8_webhook_update_webhook

Update Webhook. Uses the current organization and existing API permissions. Review the intended change and set confirm=true to execute; otherwise no API request is sent. API: PATCH /webhooks/{webhook_id}

Inputs

InputRequiredTypeDescription
webhook_idYesstringWebhook subscription ID
bodyYes#/$defs/ApiWebhookUpdateRequestSee the schema below for constraints and defaults.
confirmNobooleanSee the schema below for constraints and defaults.
Complete input schema
{
"$defs": {
"ApiWebhookUpdateRequest": {
"additionalProperties": false,
"properties": {
"events": {
"anyOf": [
{
"items": {
"type": "string"
},
"type": "array"
},
{
"type": "null"
}
],
"default": null,
"description": "Event types to subscribe to",
"title": "Events"
},
"is_active": {
"anyOf": [
{
"type": "boolean"
},
{
"type": "null"
}
],
"default": null,
"description": "Whether the webhook is active",
"title": "Is Active"
},
"name": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"description": "Human-readable name",
"title": "Name"
},
"url": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"description": "Target URL for webhook delivery",
"title": "Url"
}
},
"title": "ApiWebhookUpdateRequest",
"type": "object"
}
},
"properties": {
"webhook_id": {
"description": "Webhook subscription ID",
"title": "Webhook Id",
"type": "string"
},
"body": {
"$ref": "#/$defs/ApiWebhookUpdateRequest"
},
"confirm": {
"default": false,
"title": "Confirm",
"type": "boolean"
}
},
"required": [
"webhook_id",
"body"
],
"title": "g8_webhook_update_webhookArguments",
"type": "object"
}

g8_work_delete

Delete one graph8 Work message, channel or routine. The three are NOT equally severe and this tool does not pretend otherwise. Deleting a MESSAGE is soft - the author retracts their own words and it is safe to repeat. Deleting a ROUTINE stops a schedule. Deleting a CHANNEL is irreversible: it removes the room for EVERYONE, leaves a non-restorable tombstone, and requires confirmation_name to equal the channel’s own slug as a second check. Review the intended change with the user and set confirm=true to execute; otherwise no API request is sent.

Inputs

InputRequiredTypeDescription
resourceYesstringWhat to delete.
resource_idYesstringId of the message, channel or routine to delete.
confirmation_nameNostring / nullThe channel’s own slug, repeated back. REQUIRED for resource=channel.
confirmNobooleanSet true to execute. No API request is sent while this is false.
Complete input schema
{
"properties": {
"resource": {
"description": "What to delete.",
"enum": [
"message",
"channel",
"routine"
],
"title": "Resource",
"type": "string"
},
"resource_id": {
"description": "Id of the message, channel or routine to delete.",
"maxLength": 255,
"title": "Resource Id",
"type": "string"
},
"confirmation_name": {
"anyOf": [
{
"maxLength": 255,
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"description": "The channel's own slug, repeated back. REQUIRED for resource=channel.",
"title": "Confirmation Name"
},
"confirm": {
"default": false,
"description": "Set true to execute. No API request is sent while this is false.",
"title": "Confirm",
"type": "boolean"
}
},
"required": [
"resource",
"resource_id"
],
"title": "g8_work_deleteArguments",
"type": "object"
}

g8_work_manage_channel

Create a graph8 Work channel, change its settings, or assign its purpose. Renaming changes display_name only: a channel’s slug is its room address, so a rename never moves the room. set-purpose TAKES the purpose from whichever channel held it - exactly one channel holds each - and reports the move in reassignedChannelIds. 409 when a new channel’s name is taken, and for a built-in channel’s identity or visibility. 403 when the caller neither owns the channel nor holds admin rights.

Inputs

InputRequiredTypeDescription
actionYesstringcreate opens a channel, update changes its settings, set-purpose assigns the organisation-wide purpose.
channel_idNostring / nullThe channel to change. Required for update and set-purpose.
nameNostring / nullSlug for a new channel; normalized to lowercase and hyphens. action=create.
display_nameNostring / nullHuman-readable name.
descriptionNostring / nullWhat the channel is for; 280 characters or fewer.
visibilityNostring / nullopen is self-serve joinable, private is invite only.
kindNostring / nullChannel layout. action=create.
member_user_idsNoarray / nullPeople seated in the channel; they must be in this organisation.
participant_agent_idsNoarray / nullAgents seated in the channel.
template_idNostring / nullChannel template; seats its specialists and seeds its Canvas. action=create.
agent_response_policyNostring / nullWhen seated agents may answer. action=update.
archivedNoboolean / nullArchive or unarchive the channel. action=update.
purposeNostring / nullOne of the organisation’s purposes (work, campaigns, hot, pipeline, customers, wins), or null to clear. action=set-purpose.
Complete input schema
{
"properties": {
"action": {
"description": "create opens a channel, update changes its settings, set-purpose assigns the organisation-wide purpose.",
"enum": [
"create",
"update",
"set-purpose"
],
"title": "Action",
"type": "string"
},
"channel_id": {
"anyOf": [
{
"maxLength": 255,
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"description": "The channel to change. Required for update and set-purpose.",
"title": "Channel Id"
},
"name": {
"anyOf": [
{
"maxLength": 255,
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"description": "Slug for a new channel; normalized to lowercase and hyphens. action=create.",
"title": "Name"
},
"display_name": {
"anyOf": [
{
"maxLength": 255,
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"description": "Human-readable name.",
"title": "Display Name"
},
"description": {
"anyOf": [
{
"maxLength": 1000,
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"description": "What the channel is for; 280 characters or fewer.",
"title": "Description"
},
"visibility": {
"anyOf": [
{
"enum": [
"open",
"private"
],
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"description": "open is self-serve joinable, private is invite only.",
"title": "Visibility"
},
"kind": {
"anyOf": [
{
"enum": [
"stream",
"forum"
],
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"description": "Channel layout. action=create.",
"title": "Kind"
},
"member_user_ids": {
"anyOf": [
{
"items": {
"type": "string"
},
"maxItems": 200,
"type": "array"
},
{
"type": "null"
}
],
"default": null,
"description": "People seated in the channel; they must be in this organisation.",
"title": "Member User Ids"
},
"participant_agent_ids": {
"anyOf": [
{
"items": {
"type": "string"
},
"maxItems": 16,
"type": "array"
},
{
"type": "null"
}
],
"default": null,
"description": "Agents seated in the channel.",
"title": "Participant Agent Ids"
},
"template_id": {
"anyOf": [
{
"maxLength": 128,
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"description": "Channel template; seats its specialists and seeds its Canvas. action=create.",
"title": "Template Id"
},
"agent_response_policy": {
"anyOf": [
{
"enum": [
"mention_required",
"proactive"
],
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"description": "When seated agents may answer. action=update.",
"title": "Agent Response Policy"
},
"archived": {
"anyOf": [
{
"type": "boolean"
},
{
"type": "null"
}
],
"default": null,
"description": "Archive or unarchive the channel. action=update.",
"title": "Archived"
},
"purpose": {
"anyOf": [
{
"maxLength": 64,
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"description": "One of the organisation's purposes (work, campaigns, hot, pipeline, customers, wins), or null to clear. action=set-purpose.",
"title": "Purpose"
}
},
"required": [
"action"
],
"title": "g8_work_manage_channelArguments",
"type": "object"
}

g8_work_manage_message

Edit, forward or react to an existing graph8 Work message. edit only works on a message this credential authored, and is deliberately not a re-send: no agent turn runs again and nobody is notified. forward checks both ends - you must be able to read the original and write into the destination. react toggles a single emoji and is safe to repeat.

Inputs

InputRequiredTypeDescription
actionYesstringedit rewrites the message, forward copies it into another conversation, react toggles one emoji.
message_idYesstringThe message to act on.
textNostring / nullNew plain text. action=edit.
documentNoobject / nullNew rich-text document. action=edit.
expected_revisionNointeger / nullMake the edit conditional on the revision you read. action=edit.
channelNostring / nullDestination conversation name or id. action=forward.
emojiNostring / nullReaction shortcode, e.g. tada. action=react.
activeNoboolean / nullTrue adds the reaction, False removes it. action=react.
Complete input schema
{
"properties": {
"action": {
"description": "edit rewrites the message, forward copies it into another conversation, react toggles one emoji.",
"enum": [
"edit",
"forward",
"react"
],
"title": "Action",
"type": "string"
},
"message_id": {
"description": "The message to act on.",
"maxLength": 128,
"title": "Message Id",
"type": "string"
},
"text": {
"anyOf": [
{
"maxLength": 20000,
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"description": "New plain text. action=edit.",
"title": "Text"
},
"document": {
"anyOf": [
{
"additionalProperties": true,
"type": "object"
},
{
"type": "null"
}
],
"default": null,
"description": "New rich-text document. action=edit.",
"title": "Document"
},
"expected_revision": {
"anyOf": [
{
"minimum": 1,
"type": "integer"
},
{
"type": "null"
}
],
"default": null,
"description": "Make the edit conditional on the revision you read. action=edit.",
"title": "Expected Revision"
},
"channel": {
"anyOf": [
{
"maxLength": 255,
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"description": "Destination conversation name or id. action=forward.",
"title": "Channel"
},
"emoji": {
"anyOf": [
{
"maxLength": 64,
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"description": "Reaction shortcode, e.g. `tada`. action=react.",
"title": "Emoji"
},
"active": {
"anyOf": [
{
"type": "boolean"
},
{
"type": "null"
}
],
"default": null,
"description": "True adds the reaction, False removes it. action=react.",
"title": "Active"
}
},
"required": [
"action",
"message_id"
],
"title": "g8_work_manage_messageArguments",
"type": "object"
}

g8_work_manage_routine

Create, change or immediately run a graph8 Work routine. A routine is a standing instruction to an agent, delivered into one conversation, on a schedule or on an event. delivery_conversation_id must be a conversation the caller can read - otherwise a routine would be a way to post into a room its author cannot see - and re-pointing it later is checked again. run-now posts the instruction as the caller’s own message and lets the normal turn machinery answer, so it exercises exactly what a live ask would. It returns a receipt with a runId; read the outcome with g8_work_read(resource=“routine-runs”).

Inputs

InputRequiredTypeDescription
actionYesstringcreate adds a routine, update changes one, run-now runs it immediately.
routine_idNostring / nullThe routine to act on. Required for update and run-now.
agent_idNostring / nullAgent that runs the routine.
titleNostring / nullWhat the routine is called.
instructionNostring / nullWhat the agent is asked to do on each run.
delivery_conversation_idNostring / nullConversation the routine posts into; the caller must be able to read it.
weekdaysNoarray / nullDays to run on, 0-6. Schedule routines.
local_timeNostring / nullLocal run time HH:MM. Schedule routines.
timezoneNostring / nullIANA timezone the local time is read in, e.g. Europe/London.
enabledNoboolean / nullTurn the routine on or off.
trigger_kindNostring / nullschedule runs on a clock, event runs when something happens.
triggerNoobject / nullTrigger configuration. Event routines.
event_policyNoobject / nullOptional event-handling policy. Event routines.
sample_eventNoobject / nullExample event to run an event routine against. action=run-now.
Complete input schema
{
"properties": {
"action": {
"description": "create adds a routine, update changes one, run-now runs it immediately.",
"enum": [
"create",
"update",
"run-now"
],
"title": "Action",
"type": "string"
},
"routine_id": {
"anyOf": [
{
"maxLength": 64,
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"description": "The routine to act on. Required for update and run-now.",
"title": "Routine Id"
},
"agent_id": {
"anyOf": [
{
"maxLength": 128,
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"description": "Agent that runs the routine.",
"title": "Agent Id"
},
"title": {
"anyOf": [
{
"maxLength": 255,
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"description": "What the routine is called.",
"title": "Title"
},
"instruction": {
"anyOf": [
{
"maxLength": 20000,
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"description": "What the agent is asked to do on each run.",
"title": "Instruction"
},
"delivery_conversation_id": {
"anyOf": [
{
"maxLength": 255,
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"description": "Conversation the routine posts into; the caller must be able to read it.",
"title": "Delivery Conversation Id"
},
"weekdays": {
"anyOf": [
{
"items": {
"type": "integer"
},
"maxItems": 7,
"type": "array"
},
{
"type": "null"
}
],
"default": null,
"description": "Days to run on, 0-6. Schedule routines.",
"title": "Weekdays"
},
"local_time": {
"anyOf": [
{
"maxLength": 8,
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"description": "Local run time `HH:MM`. Schedule routines.",
"title": "Local Time"
},
"timezone": {
"anyOf": [
{
"maxLength": 64,
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"description": "IANA timezone the local time is read in, e.g. Europe/London.",
"title": "Timezone"
},
"enabled": {
"anyOf": [
{
"type": "boolean"
},
{
"type": "null"
}
],
"default": null,
"description": "Turn the routine on or off.",
"title": "Enabled"
},
"trigger_kind": {
"anyOf": [
{
"enum": [
"schedule",
"event"
],
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"description": "schedule runs on a clock, event runs when something happens.",
"title": "Trigger Kind"
},
"trigger": {
"anyOf": [
{
"additionalProperties": true,
"type": "object"
},
{
"type": "null"
}
],
"default": null,
"description": "Trigger configuration. Event routines.",
"title": "Trigger"
},
"event_policy": {
"anyOf": [
{
"additionalProperties": true,
"type": "object"
},
{
"type": "null"
}
],
"default": null,
"description": "Optional event-handling policy. Event routines.",
"title": "Event Policy"
},
"sample_event": {
"anyOf": [
{
"additionalProperties": true,
"type": "object"
},
{
"type": "null"
}
],
"default": null,
"description": "Example event to run an event routine against. action=run-now.",
"title": "Sample Event"
}
},
"required": [
"action"
],
"title": "g8_work_manage_routineArguments",
"type": "object"
}

g8_work_read

Read the graph8 Work room: channels, conversations, messages, files, search, the activity feed, the All Work board and scheduled routines. Work is the team’s operating room - where people and agents talk, where work is tracked, and where routines post on a schedule. Pick what to read with resource; it defaults to room, the whole readable room in one call. An API key is an organisation credential with no channel seat, so it reads the organisation’s built-in channels (#work, #signals) and whatever channels it created. Private channels and channels it has not been seated in are refused by the same rule that governs a person. Direct messages are not reachable through the API at all.

Inputs

InputRequiredTypeDescription
resourceNostringWhat to read. room is the whole Work room in one call; channels lists the channels you can read and channels-available the ones you are not in; messages / events / files page one conversation (send conversation); search finds text across everything you can read (send q); activity is the feed of what happened; work-items, work-items-history and oversight are the All Work board; routines and routine-runs are the scheduled agent instructions.
conversationNostring / nullConversation to read: a channel name (work) or a channel id. Required for messages/events/files.
channelNostring / nullChannel name or id. Required for channel-canvas.
message_idNostring / nullMessage id. Required for resource=message.
attachment_idNostring / nullAttachment id. Required for resource=attachment.
routine_idNostring / nullRoutine id. Required for resource=routine-runs.
qNostring / nullSearch text, 2-200 characters. Required for resource=search.
limitNointeger / nullRow cap. The per-resource maximum differs (50 to 200); the API rejects an over-large value.
cursorNostring / nullOpaque cursor from a previous page’s next_cursor.
actorNostring / nullActivity filter: human, agent, runner or system.
categoryNostring / nullActivity filter: message, conversation, approval, execution, workflow, canvas or configuration.
consequenceNostring / nullActivity filter: requested, changed, approved, completed, failed or recorded.
agent_idNostring / nullActivity filter: only this agent’s activity.
date_fromNostring / nullActivity filter: ISO timestamp, inclusive lower bound.
date_toNostring / nullActivity filter: ISO timestamp, inclusive upper bound.
Complete input schema
{
"properties": {
"resource": {
"default": "room",
"description": "What to read. `room` is the whole Work room in one call; `channels` lists the channels you can read and `channels-available` the ones you are not in; `messages` / `events` / `files` page one conversation (send `conversation`); `search` finds text across everything you can read (send `q`); `activity` is the feed of what happened; `work-items`, `work-items-history` and `oversight` are the All Work board; `routines` and `routine-runs` are the scheduled agent instructions.",
"enum": [
"room",
"channels",
"channels-available",
"channel-canvas",
"messages",
"events",
"files",
"message",
"search",
"attachment",
"activity",
"work-items",
"work-items-history",
"oversight",
"routines",
"routine-runs"
],
"title": "Resource",
"type": "string"
},
"conversation": {
"anyOf": [
{
"maxLength": 255,
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"description": "Conversation to read: a channel name (`work`) or a channel id. Required for messages/events/files.",
"title": "Conversation"
},
"channel": {
"anyOf": [
{
"maxLength": 255,
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"description": "Channel name or id. Required for channel-canvas.",
"title": "Channel"
},
"message_id": {
"anyOf": [
{
"maxLength": 128,
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"description": "Message id. Required for resource=message.",
"title": "Message Id"
},
"attachment_id": {
"anyOf": [
{
"maxLength": 128,
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"description": "Attachment id. Required for resource=attachment.",
"title": "Attachment Id"
},
"routine_id": {
"anyOf": [
{
"maxLength": 64,
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"description": "Routine id. Required for resource=routine-runs.",
"title": "Routine Id"
},
"q": {
"anyOf": [
{
"maxLength": 200,
"minLength": 2,
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"description": "Search text, 2-200 characters. Required for resource=search.",
"title": "Q"
},
"limit": {
"anyOf": [
{
"maximum": 200,
"minimum": 1,
"type": "integer"
},
{
"type": "null"
}
],
"default": null,
"description": "Row cap. The per-resource maximum differs (50 to 200); the API rejects an over-large value.",
"title": "Limit"
},
"cursor": {
"anyOf": [
{
"maxLength": 512,
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"description": "Opaque cursor from a previous page's `next_cursor`.",
"title": "Cursor"
},
"actor": {
"anyOf": [
{
"maxLength": 32,
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"description": "Activity filter: human, agent, runner or system.",
"title": "Actor"
},
"category": {
"anyOf": [
{
"maxLength": 32,
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"description": "Activity filter: message, conversation, approval, execution, workflow, canvas or configuration.",
"title": "Category"
},
"consequence": {
"anyOf": [
{
"maxLength": 32,
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"description": "Activity filter: requested, changed, approved, completed, failed or recorded.",
"title": "Consequence"
},
"agent_id": {
"anyOf": [
{
"maxLength": 128,
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"description": "Activity filter: only this agent's activity.",
"title": "Agent Id"
},
"date_from": {
"anyOf": [
{
"maxLength": 64,
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"description": "Activity filter: ISO timestamp, inclusive lower bound.",
"title": "Date From"
},
"date_to": {
"anyOf": [
{
"maxLength": 64,
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"description": "Activity filter: ISO timestamp, inclusive upper bound.",
"title": "Date To"
}
},
"title": "g8_work_readArguments",
"type": "object"
}

g8_work_send_message

Post a message into a graph8 Work conversation. This is a real message other people and agents will see, so say what the user asked you to say and nothing else. Mentioning an agent via mention_agent_ids starts an agent turn: that agent reads the room and answers in it. 403 when the credential is not a member of the channel - an organisation API key holds a seat in the built-in channels (#work, #signals) and in channels it created.

Inputs

InputRequiredTypeDescription
channelYesstringConversation to post into: a channel name (work) or id.
messageNostring / nullPlain text to send. Send this OR document.
documentNoobject / nullRich-text document; normalized server-side.
parent_message_idNostring / nullReply inside this message’s thread.
root_message_idNostring / nullThread root, when replying deeper than one level.
mention_agent_idsNoarray / nullAgents to @mention. Mentioning one starts an agent turn that answers in the room.
mention_user_idsNoarray / nullPeople to @mention.
attachment_idsNoarray / nullAlready-uploaded attachment ids to carry.
Complete input schema
{
"properties": {
"channel": {
"description": "Conversation to post into: a channel name (`work`) or id.",
"maxLength": 255,
"title": "Channel",
"type": "string"
},
"message": {
"anyOf": [
{
"maxLength": 20000,
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"description": "Plain text to send. Send this OR `document`.",
"title": "Message"
},
"document": {
"anyOf": [
{
"additionalProperties": true,
"type": "object"
},
{
"type": "null"
}
],
"default": null,
"description": "Rich-text document; normalized server-side.",
"title": "Document"
},
"parent_message_id": {
"anyOf": [
{
"maxLength": 128,
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"description": "Reply inside this message's thread.",
"title": "Parent Message Id"
},
"root_message_id": {
"anyOf": [
{
"maxLength": 128,
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"description": "Thread root, when replying deeper than one level.",
"title": "Root Message Id"
},
"mention_agent_ids": {
"anyOf": [
{
"items": {
"type": "string"
},
"maxItems": 16,
"type": "array"
},
{
"type": "null"
}
],
"default": null,
"description": "Agents to @mention. Mentioning one starts an agent turn that answers in the room.",
"title": "Mention Agent Ids"
},
"mention_user_ids": {
"anyOf": [
{
"items": {
"type": "string"
},
"maxItems": 64,
"type": "array"
},
{
"type": "null"
}
],
"default": null,
"description": "People to @mention.",
"title": "Mention User Ids"
},
"attachment_ids": {
"anyOf": [
{
"items": {
"type": "string"
},
"maxItems": 20,
"type": "array"
},
{
"type": "null"
}
],
"default": null,
"description": "Already-uploaded attachment ids to carry.",
"title": "Attachment Ids"
}
},
"required": [
"channel"
],
"title": "g8_work_send_messageArguments",
"type": "object"
}