Additional API operations through MCP
These 145 tools extend progressive discovery: 117 arrived in MCP server 0.58.0, five additional reads require 0.59.0, five internal operator reports require 0.60.0, nine app-object operations require 0.61.0, and TLS readiness plus two public-widget calls require 0.62.0. Version 0.63.0 adds two protected credential exchanges, observed build reporting, and a read-only human-approval handoff. Version 0.64.0 adds the human-authorized decision relay and app-record change history. Availability requires that version or later and the appropriate organization permissions and feature enablement. Search with g8_tool_search, inspect the returned schema, and call the tool directly or through g8_execute.
For changes and actions, the default call returns confirmation_required without sending an API request. Set confirm to true after reviewing the intended operation. API errors, ownership checks, key scopes and billing restrictions still apply. Reads preserve the full response, including pagination.
For example, search for rotate webhook secret or the exact name g8_webhook_rotate_webhook_secret. Read the schema and obtain the webhook ID from a previous result. Rotating a secret changes webhook verification and requires an explicit confirmed call.
App tools require the app builder to be enabled and the caller to own or administer the app. Sandbox tools require a test-mode key. Browser login, infrastructure control and human approval decisions are not exposed by this extension.
g8_agency_get_agency_me
Get Agency Me. Uses the current organization and existing API permissions. API: GET /agency/me
Inputs
{ "properties": {}, "title": "g8_agency_get_agency_meArguments", "type": "object"}g8_agency_list_agency_clients
List Agency Clients. Uses the current organization and existing API permissions. API: GET /agency/clients
Inputs
{ "properties": {}, "title": "g8_agency_list_agency_clientsArguments", "type": "object"}g8_agent_cancel_agent_run
Cancel Agent Run. 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 /agent/runs/{run_id}/cancel
Inputs
{ "properties": { "run_id": { "description": "Run ID", "format": "uuid", "title": "Run Id", "type": "string" }, "confirm": { "default": false, "title": "Confirm", "type": "boolean" } }, "required": [ "run_id" ], "title": "g8_agent_cancel_agent_runArguments", "type": "object"}g8_agent_create_agent_run
Create Agent Run. 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 /agent/runs
Inputs
{ "$defs": { "ApiCreateAgentRunRequest": { "additionalProperties": false, "properties": { "agent_id": { "description": "Which agent drives the loop: 'onboarding', 'dialer_setup', 'sequencer_setup', 'campaign_run', 'voice_setup', 'marketplace', 'dev_setup', or a free-form value for an ad-hoc session.", "title": "Agent Id", "type": "string" }, "entry_point": { "anyOf": [ { "type": "string" }, { "type": "null" } ], "default": null, "title": "Entry Point" }, "goal": { "description": "Free text the planner works from.", "minLength": 1, "title": "Goal", "type": "string" }, "seed_message": { "anyOf": [ { "type": "string" }, { "type": "null" } ], "default": null, "description": "An opening user turn, rendered as the first message.", "title": "Seed Message" }, "session_title": { "anyOf": [ { "type": "string" }, { "type": "null" } ], "default": null, "title": "Session Title" }, "skill_mode": { "anyOf": [ { "type": "string" }, { "type": "null" } ], "default": null, "description": "'web_search' | 'deep_thinking' | 'research'. Unknown values are ignored.", "title": "Skill Mode" }, "subject_account_id": { "anyOf": [ { "type": "string" }, { "type": "null" } ], "default": null, "description": "Bind the run to a company.", "title": "Subject Account Id" }, "subject_campaign_id": { "anyOf": [ { "type": "string" }, { "type": "null" } ], "default": null, "description": "Bind the run to a campaign.", "title": "Subject Campaign Id" }, "title": { "maxLength": 500, "minLength": 1, "title": "Title", "type": "string" }, "visibility": { "default": "private", "description": "'private' (default) keeps the run yours. 'shared' lets the organization see it, though only you can cancel it.", "pattern": "^(shared|private)$", "title": "Visibility", "type": "string" } }, "required": [ "agent_id", "goal", "title" ], "title": "ApiCreateAgentRunRequest", "type": "object" } }, "properties": { "body": { "$ref": "#/$defs/ApiCreateAgentRunRequest" }, "confirm": { "default": false, "title": "Confirm", "type": "boolean" } }, "required": [ "body" ], "title": "g8_agent_create_agent_runArguments", "type": "object"}g8_agent_get_agent_approval_receipts
Get Agent Approval Receipts. Uses the current organization and existing API permissions. API: GET /agent/approvals/{approval_id}/receipts
Inputs
{ "properties": { "approval_id": { "description": "Approval ID", "format": "uuid", "title": "Approval Id", "type": "string" } }, "required": [ "approval_id" ], "title": "g8_agent_get_agent_approval_receiptsArguments", "type": "object"}g8_agent_get_agent_run
Get Agent Run. Uses the current organization and existing API permissions. API: GET /agent/runs/{run_id}
Inputs
{ "properties": { "run_id": { "description": "Run ID", "format": "uuid", "title": "Run Id", "type": "string" } }, "required": [ "run_id" ], "title": "g8_agent_get_agent_runArguments", "type": "object"}g8_agent_list_agent_approval_history
List Agent Approval History. Uses the current organization and existing API permissions. API: GET /agent/approvals/history
Inputs
{ "properties": { "decision": { "anyOf": [ { "enum": [ "approve", "reject", "edit_and_approve" ], "type": "string" }, { "type": "null" } ], "default": null, "description": "Optional filter on the recorded decision. An unrecognised value is rejected with 422 rather than silently ignored.", "title": "Decision" } }, "title": "g8_agent_list_agent_approval_historyArguments", "type": "object"}g8_agent_list_agent_approvals
List Agent Approvals. Uses the current organization and existing API permissions. API: GET /agent/approvals
Inputs
{ "properties": {}, "title": "g8_agent_list_agent_approvalsArguments", "type": "object"}g8_agent_list_agent_runs
List Agent Runs. Uses the current organization and existing API permissions. API: GET /agent/runs
Inputs
{ "properties": { "statuses": { "anyOf": [ { "items": { "type": "string" }, "type": "array" }, { "type": "null" } ], "default": null, "description": "Optional repeatable status filter: ?statuses=running&statuses=queued", "title": "Statuses" }, "agent_id": { "anyOf": [ { "type": "string" }, { "type": "null" } ], "default": null, "title": "Agent Id" }, "include_shared": { "anyOf": [ { "type": "boolean" }, { "type": "null" } ], "default": null, "description": "When true (default), include org-wide shared runs. When false, return only runs this key owns.", "title": "Include Shared" }, "limit": { "anyOf": [ { "maximum": 500, "minimum": 1, "type": "integer" }, { "type": "null" } ], "default": null, "title": "Limit" }, "offset": { "anyOf": [ { "minimum": 0, "type": "integer" }, { "type": "null" } ], "default": null, "title": "Offset" } }, "title": "g8_agent_list_agent_runsArguments", "type": "object"}g8_analytics_get_campaign_visitors
Get Campaign Visitors. Uses the current organization and existing API permissions. API: GET /analytics/campaign-visitors
Inputs
{ "properties": { "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" }, "days": { "anyOf": [ { "type": "integer" }, { "type": "null" } ], "default": null, "description": "Rolling 'last N days from today'. Ignored when start_date/end_date are supplied.", "title": "Days" }, "limit": { "anyOf": [ { "maximum": 200, "minimum": 1, "type": "integer" }, { "type": "null" } ], "default": null, "description": "Row cap for the steps + contacts tables", "title": "Limit" }, "include_contacts": { "anyOf": [ { "type": "boolean" }, { "type": "null" } ], "default": null, "description": "Include the Top contacts table (contact name + email \u2014 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_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
{ "$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
{ "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
{ "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_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
{ "$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 \u2014 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
{ "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_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
{ "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
{ "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
{ "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
{ "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
{ "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
{ "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
{ "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
{ "properties": { "app_id": { "title": "App Id", "type": "string" } }, "required": [ "app_id" ], "title": "g8_app_get_installed_appArguments", "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
{ "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
{ "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
{ "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
{ "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
{ "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
{ "properties": {}, "title": "g8_app_list_installed_appsArguments", "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
{ "$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
{ "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_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
{ "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
{ "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
{ "$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
{ "$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
{ "$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_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
{ "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_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
{ "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_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
{ "$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_audit_list_request_logs
List Request Logs. Uses the current organization and existing API permissions. API: GET /logs
Inputs
{ "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_connection_describe_current_key
Describe Current Key. Uses the current organization and existing API permissions. API: GET /me
Inputs
{ "properties": {}, "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
{ "properties": {}, "title": "g8_connection_get_mcp_connectionArguments", "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
{ "$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" }, "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
{ "$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" }, "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
{ "$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" }, "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
{ "$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" }, "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
{ "$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
{ "$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
{ "$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 \u2014 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 \u2014 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`) \u2014 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 \u2014 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
{ "$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 \u2014 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 \u2014 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`) \u2014 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 \u2014 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
{ "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
{ "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
{ "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
{ "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
{ "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
{ "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
{ "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
{ "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
{ "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
{ "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_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
{ "$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_update_company
Update 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: PATCH /companies/{company_id}
Inputs
{ "$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": { "$ref": "#/$defs/ApiCompanyUpdateRequest" }, "confirm": { "default": false, "title": "Confirm", "type": "boolean" } }, "required": [ "company_id", "body" ], "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
{ "$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
{ "$defs": { "ApiQuoteLineItemRequest": { "additionalProperties": false, "properties": { "billing_frequency": { "anyOf": [ { "enum": [ "one_time", "month", "year", "quarter" ], "type": "string" }, { "type": "null" } ], "default": null, "title": "Billing Frequency" }, "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" }, "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_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
{ "$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
{ "$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
{ "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
{ "$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
{ "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
{ "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
{ "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
{ "$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
{ "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
{ "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
{ "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
{ "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
{ "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_enrichment_list_ai_configs
List Ai Configs. Uses the current organization and existing API permissions. API: GET /enrichment/ai/configs
Inputs
{ "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
{ "$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
{ "$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_intent_keywords_create_from_search
Keywords Create From 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 /intent/keywords/create-from-search
Inputs
{ "$defs": { "ApiKeywordsCreateFromSearchRequest": { "additionalProperties": false, "properties": { "contact_limit": { "default": 50, "description": "Max contacts to pre-resolve per keyword.", "maximum": 100.0, "minimum": 1.0, "title": "Contact Limit", "type": "integer" }, "keywords": { "description": "1-10 free-text keyword queries. Each is searched against the intent page index, contacts/companies are resolved, and a compete-tracking keyword row is saved. Duplicates within the request (case-insensitive, trimmed) are skipped, not re-saved.", "items": { "type": "string" }, "maxItems": 10, "minItems": 1, "title": "Keywords", "type": "array" }, "page_limit": { "default": 20, "description": "Max pages to seed per keyword. Deliberately smaller than create-from-domain's 200 default since this runs once per keyword.", "maximum": 50.0, "minimum": 1.0, "title": "Page Limit", "type": "integer" }, "search_filters": { "anyOf": [ { "additionalProperties": true, "type": "object" }, { "type": "null" } ], "default": null, "description": "Optional intent-search filters applied to EVERY keyword in the batch (audience, page_type, commercial_score_min, etc.). Stored verbatim on each saved keyword row so the daily resolver replays them.", "title": "Search Filters" }, "semantic_ratio": { "default": 0.0, "description": "0 = text search (default, cheapest), 1 = semantic, between = hybrid.", "maximum": 1.0, "minimum": 0.0, "title": "Semantic Ratio", "type": "number" } }, "required": [ "keywords" ], "title": "ApiKeywordsCreateFromSearchRequest", "type": "object" } }, "properties": { "body": { "$ref": "#/$defs/ApiKeywordsCreateFromSearchRequest" }, "confirm": { "default": false, "title": "Confirm", "type": "boolean" } }, "required": [ "body" ], "title": "g8_intent_keywords_create_from_searchArguments", "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
{ "$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_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
{ "$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
{ "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
{ "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
{ "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
{ "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
{ "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
{ "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
{ "$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_sandbox_sandbox_clear_failure_rules
Clear failure rules. Uses the current organization and existing API permissions. Test-mode sandbox only; a live key is rejected by the API. Review the intended change and set confirm=true to execute; otherwise no API request is sent. API: DELETE /sandbox/failure-injection
Inputs
{ "properties": { "channel": { "anyOf": [ { "type": "string" }, { "type": "null" } ], "default": null, "description": "Clear one channel only; omit for all", "title": "Channel" }, "confirm": { "default": false, "title": "Confirm", "type": "boolean" } }, "title": "g8_sandbox_sandbox_clear_failure_rulesArguments", "type": "object"}g8_sandbox_sandbox_list_failure_rules
List failure rules. Uses the current organization and existing API permissions. Test-mode sandbox only; a live key is rejected by the API. API: GET /sandbox/failure-injection
Inputs
{ "properties": {}, "title": "g8_sandbox_sandbox_list_failure_rulesArguments", "type": "object"}g8_sandbox_sandbox_outbox
List simulated outbox. Uses the current organization and existing API permissions. Test-mode sandbox only; a live key is rejected by the API. API: GET /sandbox/outbox
Inputs
{ "properties": { "channel": { "anyOf": [ { "type": "string" }, { "type": "null" } ], "default": null, "description": "Filter by channel", "title": "Channel" }, "limit": { "anyOf": [ { "maximum": 200, "minimum": 1, "type": "integer" }, { "type": "null" } ], "default": null, "title": "Limit" }, "offset": { "anyOf": [ { "minimum": 0, "type": "integer" }, { "type": "null" } ], "default": null, "title": "Offset" } }, "title": "g8_sandbox_sandbox_outboxArguments", "type": "object"}g8_sandbox_sandbox_reset_fixtures
Reset fixture data. Uses the current organization and existing API permissions. Test-mode sandbox only; a live key is rejected by the API. Review the intended change and set confirm=true to execute; otherwise no API request is sent. API: POST /sandbox/fixtures/reset
Inputs
{ "properties": { "confirm": { "default": false, "title": "Confirm", "type": "boolean" } }, "title": "g8_sandbox_sandbox_reset_fixturesArguments", "type": "object"}g8_sandbox_sandbox_restore
Restore a snapshot. Uses the current organization and existing API permissions. Test-mode sandbox only; a live key is rejected by the API. Review the intended change and set confirm=true to execute; otherwise no API request is sent. API: POST /sandbox/fixtures/restore
Inputs
{ "properties": { "name": { "anyOf": [ { "maxLength": 64, "minLength": 1, "pattern": "^[A-Za-z0-9_\\-]+$", "type": "string" }, { "type": "null" } ], "default": null, "title": "Name" }, "confirm": { "default": false, "title": "Confirm", "type": "boolean" } }, "title": "g8_sandbox_sandbox_restoreArguments", "type": "object"}g8_sandbox_sandbox_seed_fixtures
Seed sample data. Uses the current organization and existing API permissions. Test-mode sandbox only; a live key is rejected by the API. Review the intended change and set confirm=true to execute; otherwise no API request is sent. API: POST /sandbox/fixtures/seed
Inputs
{ "properties": { "confirm": { "default": false, "title": "Confirm", "type": "boolean" } }, "title": "g8_sandbox_sandbox_seed_fixturesArguments", "type": "object"}g8_sandbox_sandbox_set_failure_rule
Set a failure rule. Uses the current organization and existing API permissions. Test-mode sandbox only; a live key is rejected by the API. Review the intended change and set confirm=true to execute; otherwise no API request is sent. API: PUT /sandbox/failure-injection
Inputs
{ "$defs": { "ApiFailureRuleRequest": { "additionalProperties": false, "properties": { "channel": { "description": "Channel the injected failure applies to: email, sms, whatsapp, voice, linkedin, crm, ads, calendar, or '*' for every channel.", "title": "Channel", "type": "string" }, "failure_mode": { "description": "One of: hard_bounce, provider_error, timeout, rate_limited, invalid_recipient.", "title": "Failure Mode", "type": "string" }, "remaining": { "anyOf": [ { "type": "integer" }, { "type": "null" } ], "default": null, "description": "Fail this many sends, then auto-clear. Omit to fail until cleared.", "title": "Remaining" } }, "required": [ "channel", "failure_mode" ], "title": "ApiFailureRuleRequest", "type": "object" } }, "properties": { "body": { "$ref": "#/$defs/ApiFailureRuleRequest" }, "confirm": { "default": false, "title": "Confirm", "type": "boolean" } }, "required": [ "body" ], "title": "g8_sandbox_sandbox_set_failure_ruleArguments", "type": "object"}g8_sandbox_sandbox_snapshot
Snapshot fixture tables. Uses the current organization and existing API permissions. Test-mode sandbox only; a live key is rejected by the API. Review the intended change and set confirm=true to execute; otherwise no API request is sent. API: POST /sandbox/fixtures/snapshot
Inputs
{ "properties": { "name": { "anyOf": [ { "maxLength": 64, "minLength": 1, "pattern": "^[A-Za-z0-9_\\-]+$", "type": "string" }, { "type": "null" } ], "default": null, "title": "Name" }, "confirm": { "default": false, "title": "Confirm", "type": "boolean" } }, "title": "g8_sandbox_sandbox_snapshotArguments", "type": "object"}g8_sandbox_sandbox_status
Sandbox status. Uses the current organization and existing API permissions. Test-mode sandbox only; a live key is rejected by the API. API: GET /sandbox/status
Inputs
{ "properties": {}, "title": "g8_sandbox_sandbox_statusArguments", "type": "object"}g8_search_save_company_search
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
{ "$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_sequence_get_sequence
Get Sequence. Uses the current organization and existing API permissions. API: GET /sequences/{sequence_id}
Inputs
{ "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
{ "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
{ "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_snippet_get_form_template
Get Form Template. Uses the current organization and existing API permissions. API: GET /snippet/form
Inputs
{ "properties": {}, "title": "g8_snippet_get_form_templateArguments", "type": "object"}g8_usage_get_usage
Get Usage. Uses the current organization and existing API permissions. API: GET /usage
Inputs
{ "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
{ "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
{ "$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
{ "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
{ "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
{ "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
{ "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
{ "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
{ "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
{ "$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_workflow_list_workflow_executions
List workflow executions for the caller’s org (recover a lost execution_id). Uses the current organization and existing API permissions. API: GET /workflows/executions
Inputs
{ "properties": { "action_id": { "anyOf": [ { "type": "string" }, { "type": "null" } ], "default": null, "description": "Filter to a single workflow's executions.", "title": "Action Id" }, "status_filter": { "anyOf": [ { "type": "string" }, { "type": "null" } ], "default": null, "description": "Filter by execution status (equality match \u2014 one status per call). The backend writes seven values: pending|running|completed|failed|paused|pending_approval|stopped. The four terminal-or-early states are pending, running, completed, failed; paused and pending_approval are resumable, stopped is terminal.", "title": "Status Filter" }, "triggered_by": { "anyOf": [ { "type": "string" }, { "type": "null" } ], "default": null, "description": "Filter by the identity that started the run (user email, agent id, 'api', ...).", "title": "Triggered By" }, "limit": { "anyOf": [ { "maximum": 200, "minimum": 1, "type": "integer" }, { "type": "null" } ], "default": null, "description": "Page size (1..200).", "title": "Limit" }, "offset": { "anyOf": [ { "minimum": 0, "type": "integer" }, { "type": "null" } ], "default": null, "description": "Rows to skip for pagination.", "title": "Offset" } }, "title": "g8_workflow_list_workflow_executionsArguments", "type": "object"}g8_workflow_plan_inline_workflow
Preview a normalized execution plan for an inline workflow graph. 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 /workflows/plan
Inputs
{ "properties": { "body": { "additionalProperties": true, "title": "Body", "type": "object" }, "confirm": { "default": false, "title": "Confirm", "type": "boolean" } }, "required": [ "body" ], "title": "g8_workflow_plan_inline_workflowArguments", "type": "object"}g8_workflow_plan_workflow
Preview a normalized execution plan for a saved workflow. 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 /workflows/{action_id}/plan
Inputs
{ "properties": { "action_id": { "description": "Workflow action_id.", "minLength": 1, "title": "Action Id", "type": "string" }, "body": { "anyOf": [ { "additionalProperties": true, "type": "object" }, { "type": "null" } ], "default": null, "title": "Body" }, "confirm": { "default": false, "title": "Confirm", "type": "boolean" } }, "required": [ "action_id" ], "title": "g8_workflow_plan_workflowArguments", "type": "object"}Additional reads in 0.59.0
Visitor and company signal reads require an API key explicitly granting intent:read. Supply the visitor IPv4 or IPv6 address; the server does not infer it from its own connection. Existing browser SDK write-key calls remain supported by the API.
Knowledge export requires the existing knowledge export and MCP access grants. The result is an embedded ZIP resource with a base64 blob; decode it to save the archive. Archives above 1 MiB return an error; use the authenticated API download for larger exports.
g8_app_public_verification_keys
Read app-token public verification keys (JWKS), not private keys or tokens. Uses the configured graph8 API host. An empty keyset means the backend has no active verification keys; an app-platform gate may return 404.
Inputs
{ "properties": {}, "title": "g8_app_public_verification_keysArguments", "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
{ "properties": {}, "title": "g8_knowledge_exportArguments", "type": "object"}g8_company_intent_signals
Read a company’s buying signals from the authenticated organization’s visitor events. Requires an API key with explicit intent:read. Supply a company domain such as example.com. No browser Origin or write-key impersonation is used.
Inputs
{ "properties": { "domain": { "maxLength": 253, "minLength": 1, "title": "Domain", "type": "string" } }, "required": [ "domain" ], "title": "g8_company_intent_signalsArguments", "type": "object"}g8_visitor_company
Resolve an explicitly supplied visitor IP to company information. Requires an API key with explicit intent:read. Uses the supplied visitor IP, never the MCP server’s outbound IP. Does not accept browser write keys.
Inputs
{ "properties": { "visitor_ip": { "format": "ipvanyaddress", "title": "Visitor Ip", "type": "string" } }, "required": [ "visitor_ip" ], "title": "g8_visitor_companyArguments", "type": "object"}g8_visitor_score
Read engagement signals for a visitor IP within the authenticated organization. Requires an API key with explicit intent:read. Visitor events remain scoped to that organization; the IP does not select a different tenant.
Inputs
{ "properties": { "visitor_ip": { "format": "ipvanyaddress", "title": "Visitor Ip", "type": "string" } }, "required": [ "visitor_ip" ], "title": "g8_visitor_scoreArguments", "type": "object"}Operator reports in 0.60.0
These five tools are for internal operators with an already-issued operator API key. Configure that key using your MCP client’s credential settings and connect in developer or all-tools mode. Never paste the key into a tool argument. Search for the exact tool name with g8_tool_search, inspect its schema, then call it directly or with g8_execute.
Ordinary customer keys, agency keys and Owner/Admin roles cannot grant operator access. The organization-user bridge refuses these reports and points to the separate MCP connection. If access is denied, verify that the configured key is an existing operator key for the intended backend; no tool creates or upgrades credentials.
Start with g8_ops_index. For reports, use a known legacy organization ID or PropelAuth organization UUID. The target is explicit and every report read is audited by the API. Reports can include contact details and rendered messages. They do not send messages, change bindings or start sequences.
All reports return JSON. Actions preserve pagination: use page and limit (maximum 200), and follow pagination.has_next. Missing LinkedIn tables yield empty reports. Null invitation notes are normal for bare invitations; skipped_too_distant describes eligibility, not an outage. Webhook summaries report counts and timing, not stored payloads.
g8_ops_index
Describe the internal cross-organization LinkedIn operations reports. Requires an existing internally minted operator API key. Ordinary org keys, agency keys, and Owner/Admin roles do not grant this identity. Configure the credential on the MCP connection; never put it in tool arguments. These tools neither mint credentials nor send LinkedIn actions.
Inputs
{ "properties": {}, "title": "g8_ops_indexArguments", "type": "object"}g8_ops_linkedin_actions
Read paginated LinkedIn action diagnostics for an explicitly selected organization. Internal operator key required; cross-organization reads are audited by the API. Returns JSON with pagination, including rendered messages and contact details. Use a known legacy org ID or PropelAuth UUID. since and until are ISO timestamps. A null note is normal for bare invitations; skipped_too_distant is an eligibility skip, not a provider outage.
Inputs
{ "properties": { "org_id": { "maxLength": 128, "pattern": "^(?:org_[A-Za-z0-9]+|[a-fA-F0-9]{8}-[a-fA-F0-9]{4}-[a-fA-F0-9]{4}-[a-fA-F0-9]{4}-[a-fA-F0-9]{12})$", "title": "Org Id", "type": "string" }, "status": { "anyOf": [ { "type": "string" }, { "type": "null" } ], "default": null, "title": "Status" }, "kind": { "anyOf": [ { "type": "string" }, { "type": "null" } ], "default": null, "title": "Kind" }, "account_id": { "anyOf": [ { "type": "string" }, { "type": "null" } ], "default": null, "title": "Account Id" }, "sequence_id": { "anyOf": [ { "type": "string" }, { "type": "null" } ], "default": null, "title": "Sequence Id" }, "since": { "anyOf": [ { "type": "string" }, { "type": "null" } ], "default": null, "title": "Since" }, "until": { "anyOf": [ { "type": "string" }, { "type": "null" } ], "default": null, "title": "Until" }, "page": { "default": 1, "minimum": 1, "title": "Page", "type": "integer" }, "limit": { "default": 100, "maximum": 200, "minimum": 1, "title": "Limit", "type": "integer" } }, "required": [ "org_id" ], "title": "g8_ops_linkedin_actionsArguments", "type": "object"}g8_ops_linkedin_actions_summary
Read LinkedIn action counts by sequence, sender, kind and status for one organization. Requires an internally minted operator key. Target organization is explicit and audited. Returns the API’s JSON report without truncation.
Inputs
{ "properties": { "org_id": { "maxLength": 128, "pattern": "^(?:org_[A-Za-z0-9]+|[a-fA-F0-9]{8}-[a-fA-F0-9]{4}-[a-fA-F0-9]{4}-[a-fA-F0-9]{4}-[a-fA-F0-9]{12})$", "title": "Org Id", "type": "string" } }, "required": [ "org_id" ], "title": "g8_ops_linkedin_actions_summaryArguments", "type": "object"}g8_ops_linkedin_sequence_bindings
Read sequence-to-LinkedIn-sender bindings and unbound live sequences for one organization. Internal operator key required; target organization is explicit and audited. An unbound live sequence cannot send its LinkedIn steps. This report does not change bindings, start sequences or send messages.
Inputs
{ "properties": { "org_id": { "maxLength": 128, "pattern": "^(?:org_[A-Za-z0-9]+|[a-fA-F0-9]{8}-[a-fA-F0-9]{4}-[a-fA-F0-9]{4}-[a-fA-F0-9]{4}-[a-fA-F0-9]{12})$", "title": "Org Id", "type": "string" } }, "required": [ "org_id" ], "title": "g8_ops_linkedin_sequence_bindingsArguments", "type": "object"}g8_ops_linkedin_webhook_events
Read inbound LinkedIn webhook counts and first/last-seen times for one organization. Internal operator key required; target organization is audited. This is a deduplication ledger, not stored webhook payloads. lead.message_received means a tracked lead reply; inbox.message_received does not imply one.
Inputs
{ "properties": { "org_id": { "maxLength": 128, "pattern": "^(?:org_[A-Za-z0-9]+|[a-fA-F0-9]{8}-[a-fA-F0-9]{4}-[a-fA-F0-9]{4}-[a-fA-F0-9]{4}-[a-fA-F0-9]{12})$", "title": "Org Id", "type": "string" } }, "required": [ "org_id" ], "title": "g8_ops_linkedin_webhook_eventsArguments", "type": "object"}App-token connection
Use the separate local g8-app-mcp-server command with an existing app token. This requires MCP package 0.61.0 or later. It uses stdio; the ordinary hosted MCP connection and organization-user bridge cannot execute these app-token tools. They will explain which connection is required.
Configure the command in your MCP client’s local-server settings. For example:
{ "mcpServers": { "graph8-app-objects": { "command": "uvx", "args": ["--from", "g8-mcp-server==0.61.0", "g8-app-mcp-server"], "env": { "G8_API_URL": "https://be.graph8.com", "G8_APP_TOKEN": "<existing-app-token>" } } }}Set the backend origin to the environment for that token. It must use HTTPS without an API path, query or embedded credentials. Keep the token in the client’s credential configuration; never paste it into a tool argument. This connection does not use G8_API_KEY or saved organization login credentials and cannot create or refresh tokens. If a token expires or is revoked, obtain a replacement through the existing authorized app flow and restart the connection.
The token determines the app and tenant. API checks for app scopes, installation, consent, tenant readiness, record references and app metering still apply. The connection exposes only the ten app-object tools, search and dispatch. It does not expose normal organization records, operator reports or credential issuance.
Start with g8_app_objects_list, then read the chosen object’s attributes. Use returned object slugs and record IDs. Record listing preserves pagination and accepts a returned cursor, which takes precedence over page numbers. History is newest first.
For create, update and restore, the first call produces a review preview without an API request. Check the values and target, then set confirm to true. On update, omitted attributes remain unchanged and an explicit null clears an allowed nullable attribute. Supply expected_revision from a prior record to reject stale edits. Schema, uniqueness or reference errors remain visible instead of being silently dropped.
g8_app_objects_list
List the objects declared by the authenticated app for its token’s tenant. Requires the separate g8-app-mcp-server stdio connection and an existing app token with objects:read. Installation, consent, tenant readiness and metering stay enforced by the API. Ordinary org-owned objects are separate.
Inputs
{ "properties": {}, "title": "g8_app_objects_listArguments", "type": "object"}g8_app_object_get
Get one app-owned object definition. Requires the app-token connection and objects:read. App and tenant are derived from the existing token, never tool arguments.
Inputs
{ "properties": { "object_slug": { "maxLength": 256, "minLength": 1, "pattern": "^[A-Za-z0-9_-]+$", "title": "Object Slug", "type": "string" } }, "required": [ "object_slug" ], "title": "g8_app_object_getArguments", "type": "object"}g8_app_object_attributes
Read the app object’s attribute schema before shaping record values. Requires the separate app-token connection and attributes:read. The API enforces the app’s manifest, installation, consent and current schema.
Inputs
{ "properties": { "object_slug": { "maxLength": 256, "minLength": 1, "pattern": "^[A-Za-z0-9_-]+$", "title": "Object Slug", "type": "string" } }, "required": [ "object_slug" ], "title": "g8_app_object_attributesArguments", "type": "object"}g8_app_object_records
List active app-owned records. Requires the app-token connection and records:read. Preserve pagination and use a cursor from the prior response when present; cursor takes precedence over page. App and tenant come only from the token.
Inputs
{ "properties": { "object_slug": { "maxLength": 256, "minLength": 1, "pattern": "^[A-Za-z0-9_-]+$", "title": "Object Slug", "type": "string" }, "page": { "default": 1, "minimum": 1, "title": "Page", "type": "integer" }, "limit": { "default": 50, "maximum": 200, "minimum": 1, "title": "Limit", "type": "integer" }, "cursor": { "anyOf": [ { "type": "string" }, { "type": "null" } ], "default": null, "title": "Cursor" } }, "required": [ "object_slug" ], "title": "g8_app_object_recordsArguments", "type": "object"}g8_app_object_record_get
Read an app-owned record’s current values. Requires the app-token connection and records:read.
Inputs
{ "properties": { "object_slug": { "maxLength": 256, "minLength": 1, "pattern": "^[A-Za-z0-9_-]+$", "title": "Object Slug", "type": "string" }, "record_id": { "maxLength": 256, "minLength": 1, "pattern": "^[A-Za-z0-9_-]+$", "title": "Record Id", "type": "string" } }, "required": [ "object_slug", "record_id" ], "title": "g8_app_object_record_getArguments", "type": "object"}g8_app_object_record_history
Read an app-owned record’s value history, newest first. Requires the app-token connection and records:read.
Inputs
{ "properties": { "object_slug": { "maxLength": 256, "minLength": 1, "pattern": "^[A-Za-z0-9_-]+$", "title": "Object Slug", "type": "string" }, "record_id": { "maxLength": 256, "minLength": 1, "pattern": "^[A-Za-z0-9_-]+$", "title": "Record Id", "type": "string" }, "limit": { "default": 100, "maximum": 500, "minimum": 1, "title": "Limit", "type": "integer" } }, "required": [ "object_slug", "record_id" ], "title": "g8_app_object_record_historyArguments", "type": "object"}g8_app_object_record_update
Update supplied app-record attributes after review and confirm=true. Requires the app-token connection and records:write. Omitted attributes remain unchanged; explicit null clears an allowed nullable attribute. Supply expected_revision from the record to reject stale edits with 409.
Inputs
{ "properties": { "object_slug": { "maxLength": 256, "minLength": 1, "pattern": "^[A-Za-z0-9_-]+$", "title": "Object Slug", "type": "string" }, "record_id": { "maxLength": 256, "minLength": 1, "pattern": "^[A-Za-z0-9_-]+$", "title": "Record Id", "type": "string" }, "values": { "additionalProperties": true, "title": "Values", "type": "object" }, "expected_revision": { "anyOf": [ { "minimum": 1, "type": "integer" }, { "type": "null" } ], "default": null, "title": "Expected Revision" }, "confirm": { "default": false, "title": "Confirm", "type": "boolean" } }, "required": [ "object_slug", "record_id", "values" ], "title": "g8_app_object_record_updateArguments", "type": "object"}g8_app_object_record_create
Create an app-owned record after reviewing its values and setting confirm=true. Requires the separate app-token connection and records:write. Read the attribute schema first. The API rejects unknown attributes and invalid cross-app or cross-tenant references, and applies app metering.
Inputs
{ "properties": { "object_slug": { "maxLength": 256, "minLength": 1, "pattern": "^[A-Za-z0-9_-]+$", "title": "Object Slug", "type": "string" }, "values": { "additionalProperties": true, "title": "Values", "type": "object" }, "confirm": { "default": false, "title": "Confirm", "type": "boolean" } }, "required": [ "object_slug", "values" ], "title": "g8_app_object_record_createArguments", "type": "object"}g8_app_object_record_restore
Restore an archived app-owned record under its original ID after review and confirm=true. Requires the app-token connection and records:write. Current schema, uniqueness, reference, installation and consent checks remain authoritative.
Inputs
{ "properties": { "object_slug": { "maxLength": 256, "minLength": 1, "pattern": "^[A-Za-z0-9_-]+$", "title": "Object Slug", "type": "string" }, "record_id": { "maxLength": 256, "minLength": 1, "pattern": "^[A-Za-z0-9_-]+$", "title": "Record Id", "type": "string" }, "confirm": { "default": false, "title": "Confirm", "type": "boolean" } }, "required": [ "object_slug", "record_id" ], "title": "g8_app_object_record_restoreArguments", "type": "object"}Public-widget connection
MCP package 0.62.0 or later includes g8-public-mcp-server, a separate local stdio connection for the public widget API. Configure an existing write key and the HTTPS origin of a site you are authorized to integrate. The backend checks the site’s domain allowlist and selects the organization associated with the write key. An organization API key does not substitute for this connection.
{ "mcpServers": { "graph8-public-widgets": { "command": "uvx", "args": ["--from", "g8-mcp-server==0.62.0", "g8-public-mcp-server"], "env": { "G8_API_URL": "https://be.graph8.com", "G8_PUBLIC_ORIGIN": "https://your-authorized-site.example", "G8_PUBLIC_WRITE_KEY": "YOUR_EXISTING_PUBLIC_WRITE_KEY" } } }}Use the appropriate backend origin for your environment, without an API path. Keep credentials in your client’s protected environment configuration. Neither credentials nor the site origin can be changed in tool arguments. Missing configuration stops startup; an expired or rejected key does not trigger credential exchange or an organization-key fallback.
This connection exposes the two public tools below plus g8_tool_search and g8_execute. Both calls first return a preview. Review the target and potential usage costs, then call with confirm: true. The client makes one request and does not follow redirects or automatically retry. After an uncertain failure, check the result before repeating a potentially billable call. Existing API rate limits apply.
Public enrichment returns fields from the public enrichment endpoint, not an organization CRM record. Public copilot uses the widget’s non-streaming knowledge assistant. Its current API accepts but does not consume the context field; session_id is echoed rather than proof of persisted conversation history.
TLS readiness is available on the ordinary developer/all MCP connection. It reports whether the public edge ask endpoint currently permits TLS for a domain. It does not issue a certificate, verify DNS, or prove an installed certificate is healthy. Unknown and unverified domains both return tls_eligible: false; other errors remain errors.
g8_app_tls_readiness
Check whether the configured edge currently permits TLS for a hostname.
This read calls the public TLS ask endpoint. It does not issue a certificate, verify DNS or prove a deployed certificate is healthy. A 404 means not eligible, with unknown and unverified hosts kept indistinguishable. Infrastructure outages remain errors.
Inputs
{ "properties": { "domain": { "maxLength": 253, "minLength": 1, "title": "Domain", "type": "string" } }, "required": [ "domain" ], "title": "g8_app_tls_readinessArguments", "type": "object"}g8_public_copilot_chat
Ask the public widget copilot using the separate g8-public-mcp-server connection.
Requires an existing public write key and a configured allowed site origin. The API selects the organization from the key; arguments cannot select it. Uses the public non-streaming knowledge assistant; context is forwarded as supplied but the current API does not consume it. Requires confirmation because model usage may be billable. No automatic retry is performed.
Inputs
{ "properties": { "message": { "minLength": 1, "title": "Message", "type": "string" }, "session_id": { "anyOf": [ { "type": "string" }, { "type": "null" } ], "default": null, "title": "Session Id" }, "context": { "anyOf": [ { "additionalProperties": true, "type": "object" }, { "type": "null" } ], "default": null, "title": "Context" }, "confirm": { "default": false, "title": "Confirm", "type": "boolean" } }, "required": [ "message" ], "title": "g8_public_copilot_chatArguments", "type": "object"}g8_public_enrich_lookup
Look up known progressive-form contact fields through the public-widget API.
Requires g8-public-mcp-server with an existing public write key and an allowed site origin. Returns the public endpoint’s known/missing fields, not an organization CRM record. Confirm this potentially billable lookup. No automatic retry is performed; API authentication and rate limits apply.
Inputs
{ "properties": { "email": { "minLength": 1, "title": "Email", "type": "string" }, "confirm": { "default": false, "title": "Confirm", "type": "boolean" } }, "required": [ "email" ], "title": "g8_public_enrich_lookupArguments", "type": "object"}Trusted connections
MCP package 0.63.0 adds credential-provider connections for app tokens and a controller connection for observed build reporting. Configure existing credentials through your MCP host’s protected environment. Do not put secrets into tool arguments, prompts, screenshots, or shared configuration files.
App credential providers
Use g8-browser-app-mcp-server with an existing authenticated browser session, or g8-service-app-mcp-server with existing app client credentials. These are local stdio connections. They do not initiate browser login, create client credentials, grant new scopes, or silently fall back to an organization key.
Both require the following fixed configuration:
| Variable | Value |
|---|---|
G8_API_URL | HTTPS backend origin for the environment, without an API path. |
G8_APP_ID | The intended app ID. |
G8_APP_ORG_ID | The intended organization ID. The browser API validates membership; service credentials remain tenant-bound. |
G8_APP_AUDIENCE | The app’s exact token audience for this environment, from the app configuration. |
G8_APP_SCOPES | A nonempty JSON array of explicit approved app scopes, such as ["objects:read", "records:read"]. Wildcards are refused. |
For the browser provider, add G8_BROWSER_SESSION_TOKEN, supplied through a protected channel by an already authenticated client. For the service provider, add G8_APP_CLIENT_ID and G8_APP_CLIENT_SECRET. Configure only credentials you are authorized to use. A browser session expiring or losing access requires the existing sign-in flow; MCP cannot impersonate that session or bypass installation consent.
A service connection can be configured as follows, with placeholders supplied from your protected credential configuration:
{ "mcpServers": { "graph8-service-app": { "command": "uvx", "args": ["--from", "g8-mcp-server==0.63.0", "g8-service-app-mcp-server"], "env": { "G8_API_URL": "https://be.graph8.com", "G8_APP_ID": "YOUR_APP_ID", "G8_APP_ORG_ID": "YOUR_ORGANIZATION_ID", "G8_APP_AUDIENCE": "YOUR_APP_AUDIENCE", "G8_APP_SCOPES": "[\"objects:read\",\"records:read\"]", "G8_APP_CLIENT_ID": "YOUR_EXISTING_CLIENT_ID", "G8_APP_CLIENT_SECRET": "YOUR_EXISTING_CLIENT_SECRET" } } }}For a browser connection, change the command argument to g8-browser-app-mcp-server and replace the two client-credential variables with G8_BROWSER_SESSION_TOKEN.
Each connection exposes its single acquisition tool, ten app-object tools, search and dispatch. First call the acquisition tool without confirmation to review the fixed app, tenant, audience and scopes. Call again with confirm: true to acquire the token. Only grant metadata is returned. The token stays in memory and is used by app-object calls on the same connection; it is never returned to the agent or written to disk.
API installation, consent, revocation, scope ceilings, rate limits and token verification remain authoritative. Unexpected token app, tenant, audience or scopes are refused. An exchange failure clears the prior token. Expiry does not trigger automatic acquisition; explicitly review a new acquisition. The existing g8-app-mcp-server remains available when an authorized caller already has an app token.
Build-controller connection
Run g8-controller-mcp-server as an isolated stdio process inside the authorized controller environment, with an explicit HTTPS G8_API_URL and existing APP_BUILD_CONTROLLER_TOKEN of at least 32 characters. It also requires the standard Kubernetes service-account token and CA mounts, and authorized read access to build Jobs. The cluster API address and credential mount locations are fixed; tools cannot supply replacement addresses or files.
g8_app_report_observed_build accepts only app ID, deployment ID and confirmation. It derives the namespace and Job name from validated IDs and verifies the returned Job identity. A running Job reports building, a completed Job reports promoting, and a failed Job reports failed. Missing, unreadable, mismatched or contradictory evidence does not update progress. No image digest or user-supplied error text is invented.
The API retains controller authentication, app/deployment binding and legal state transitions. A 409 is returned for an out-of-order report; the tool does not force intermediate transitions or retry. This operation does not promote an app to live traffic, create Jobs or configure cluster access.
Human approval handoff
Set G8_APP_URL on the ordinary MCP connection to the HTTPS frontend origin matching its backend environment. g8_agent_human_approval_handoff accepts an approval UUID and searches caller-visible pending approvals and the latest 100 decisions. An exact match produces a review link that selects only that approval in the existing authenticated human UI. Missing or older records are reported as unavailable; a different approval is never selected.
The human review screen retains its access guard and existing decision controls. Expired approvals remain expired. Call the handoff tool again after review to inspect the recorded decision and available receipts. A decision is not proof that the action executed. The tool has no decision, edit, actor or confirmation argument and never sends the decision POST. MCP elicitation is not treated as proof of a human decision.
g8_app_exchange_browser_session
Acquire an app token from this connection’s existing authenticated browser session.
Requires g8-browser-app-mcp-server with a protected existing session token and fixed app, tenant, audience and scope configuration. This is not a login flow. The API validates user identity, organization membership, app installation and consent. Confirm the grant first. The issued token stays in connection memory for app-object calls. No secrets, tenant or scope overrides are accepted as arguments.
Inputs
{ "properties": { "confirm": { "default": false, "title": "Confirm", "type": "boolean" } }, "title": "g8_app_exchange_browser_sessionArguments", "type": "object"}g8_app_issue_service_token
Acquire an app token with this connection’s existing service client credentials.
Requires g8-service-app-mcp-server with fixed app, tenant, audience and explicit scopes. Confirm the grant first. API credential validity, revocation, scope ceilings and tenant clamp remain authoritative. Returns grant metadata only; secrets and issued tokens remain inside the connection for app-object calls. No automatic retries, refresh or organization-key fallback.
Inputs
{ "properties": { "confirm": { "default": false, "title": "Confirm", "type": "boolean" } }, "title": "g8_app_issue_service_tokenArguments", "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
{ "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_agent_human_approval_handoff
Open an exact approval for human review, or inspect a recorded decision.
Requires G8_APP_URL configured to this connection’s frontend origin. Reads caller-visible pending approvals and the most recent 100 decisions. A missing result does not prove deletion or denial. Follow the review URL in an authenticated browser; the human UI alone makes the decision. Call again after review to inspect recorded status and available receipts. This tool never approves, rejects, edits, or treats MCP elicitation as proof of a human decision. A decision does not prove downstream execution.
Inputs
{ "properties": { "approval_id": { "format": "uuid", "title": "Approval Id", "type": "string" } }, "required": [ "approval_id" ], "title": "g8_agent_human_approval_handoffArguments", "type": "object"}Human-authorized decision relay
g8_agent_submit_human_decision requires MCP server 0.64.0, a personal API key with workflows:write and approval permissions, and G8_APP_URL set to the graph8 HTTPS origin. Discover it with g8_tool_search or invoke it through g8_execute after checking its schema.
| Input | Required | Type | Description |
|---|---|---|---|
approval_id | Yes | UUID | Exact approval ID returned by the approval listing or handoff. |
Call with the approval ID. If authorization is missing, the tool returns an exact review link. The human signs into graph8, reviews the action and explicitly authorizes approval, rejection or edited approval. Call the tool again within five minutes with the personal key belonging to that human. The one-use authorization remains on the server; do not copy a token into chat.
The tool accepts no decision, edit, actor or confirmation arguments. It refuses expired, changed or already-consumed authorizations. Organization keys cannot substitute for a personal identity. On an uncertain response, inspect approval status before trying again. Success records a decision; it does not prove execution. The read-only g8_agent_human_approval_handoff remains available to inspect status and available receipts.
App-record change history
g8_app_object_record_changes reads mutation history through the separate app-token connection with records:read. Supply object_slug and record_id from prior app results. Optional limit is 1–200 (default 100); pass the API-returned cursor unchanged for the next page. App, tenant, installation and metering remain controlled by the API. This is separate from the existing attribute-value history call. See the complete input schema.