Provider

How your org connects third-party accounts like Slack, and revokes them.

Also for this capability: API · CLI · MCP · SDKs

How your org connects third-party accounts like Slack, and revokes them.

Base URLhttps://api.hanzo.ai
Operations71
AuthAuthorization: Bearer $HANZO_API_KEY

Specification

Specification pending — no HIP in hanzoai/hips declares capability: provider yet. What this capability serves is below, from the API document; what it is — the store it owns, how it meters, what it publishes — is written as a HIP under HIP-0139.

Four surfaces

SurfaceReaches this capability asCoverage
RESTprovider at its own prefix71 operations
CLIhanzo connection …63 of 71 — the CLI pins the document on its own clock
SDKProviderApi in every published client71 methods
MCPtool provider on https://api.hanzo.ai/v1/mcp38 operations, 2 under the document's own id — ask describe for the rest

Quickstart

export HANZO_API_KEY=sk-...   # console.hanzo.ai → API keys

Then the first call — a read that needs nothing but the key. GET /v1/provider, operation get_provider:

hanzo provider list
import { Configuration, ProviderApi } from 'hanzoai';

const api = new ProviderApi(new Configuration({ accessToken: process.env.HANZO_API_KEY }));
const { data } = await api.getProvider();
from hanzoai.cloud import ApiClient, Configuration
from hanzoai.cloud.api import ProviderApi

client = ApiClient(Configuration(access_token=os.environ["HANZO_API_KEY"]))
result = ProviderApi(client).get_provider()
cfg := hanzoai.NewConfiguration()
cfg.AddDefaultHeader("Authorization", "Bearer "+os.Getenv("HANZO_API_KEY"))
client := hanzoai.NewAPIClient(cfg)

resp, _, err := client.ProviderAPI.GetProvider(context.Background()).Execute()
if err != nil {
	return err
}
use hanzo_client::apis::{configuration::Configuration, provider_api};

let mut cfg = Configuration::new();
cfg.bearer_access_token = std::env::var("HANZO_API_KEY").ok();

let result = provider_api::get_provider(&cfg, Default::default()).await?;
import ai.hanzo.cloud.ApiClient;
import ai.hanzo.cloud.api.ProviderApi;

ApiClient client = new ApiClient();
client.setBearerToken(System.getenv("HANZO_API_KEY"));

var result = new ProviderApi(client).getProvider();
curl https://api.hanzo.ai/v1/provider \
  -H "Authorization: Bearer $HANZO_API_KEY"

MCP reaches provider through the provider tool, which names its 38 operations with its own verbs — this one among them, under a name only MCP declares. describe explains any of them:

curl -X POST https://api.hanzo.ai/v1/mcp \
  -H "Content-Type: application/json" \
  -d '{
       "jsonrpc": "2.0",
       "id": 1,
       "method": "tools/call",
       "params": {
         "name": "describe",
         "arguments": {
           "op": "list_connections"
         }
       }
     }'

Answers 200 with object — ok.

Endpoints

EndpointWhat it does
POST /v1/connection/{id}/refreshForces a token rotation for a connected connector, ahead of the automatic rotation a token read would do inside the expiry window.
GET /v1/connection/{id}/tokenHands the custodied access token to its owner — the ONE place custody exits.
DELETE /v1/connection/{id}Forgets a connector: every custodied secret, then the row.
POST /v1/connection/{provider}/credentialThe direct intake path: a customer-held token/setup-token (Verify) or an externally obtained OAuth bundle from the CLI's local PKCE (Adopt).
POST /v1/connection/{provider}/device/{flow}/pollAdvances a device sign-in.
POST /v1/connection/{provider}/deviceBegins a device sign-in and returns the code to show the user plus how to poll for completion.
GET /v1/connection/providersLists the USER-plane provider cards.
GET /v1/connectionLists the caller's OWN connectors across every provider — the set hanzo connector ls prints.
GET /v1/provider/{provider}/callbackOAuth return for any connector
POST /v1/provider/{provider}/connectAcquires the org's credential for one provider.
POST /v1/provider/{provider}/disconnectRevokes (best-effort) and forgets an org's connection: it deletes every custodied KMS secret and the connection row.
GET /v1/provider/{provider}/logoServes a connector's logo from the catalog.
POST /v1/provider/{provider}/runRuns one action of a connector as the caller's org, with the credential the org connected, and answers what the action returned.
POST /v1/provider/{provider}/verifyRe-checks a CONNECTED apikey connector's stored credential against the provider, live (hanzo connector verify).
GET /v1/provider/{provider}Returns ONE provider with this org's connection status — the same view list carries, for a single id.
POST /v1/provider/discord/interactionsDiscord interactions endpoint
GET /v1/provider/discord/link/callbackComplete the Discord account link
GET /v1/provider/discord/link/discordDiscord sign-in return leg
GET /v1/provider/discord/linkBegin linking a Hanzo account from Discord
POST /v1/provider/forge/webhookForge workflow_job webhook
POST /v1/provider/github/forkForks a granted repository.
GET /v1/provider/github/installationsLists the GitHub accounts the caller may see the App installed on, each confirmed against the App's own list, plus where to add another.
POST /v1/provider/github/issues/backfillSeeds the native todo with the EXISTING issues across the org's granted repos (default state=open); the webhook keeps them live thereafter.
GET /v1/provider/github/repos/{owner}/{repo}/branchesLists a repository's branches, the default first, with prefix search.
POST /v1/provider/github/repos/{repo}/pages/buildsRequests a Pages rebuild and returns the queued build's status.
GET /v1/provider/github/repos/{repo}/pagesReturns the repo's Pages status, live URL, custom domain and build source.
POST /v1/provider/github/repos/{repo}/pagesCreates the repo's Pages site and answers 201 Created with it.
PUT /v1/provider/github/repos/{repo}/pagesSets or clears the custom domain (cname) and updates HTTPS enforcement, build type, or source.
DELETE /v1/provider/github/repos/{repo}/pagesDeletes the repo's Pages site.
POST /v1/provider/github/repos/importImports the selected (or all) granted repos into git.hanzo.ai.
GET /v1/provider/github/reposLists the GitHub repositories the caller may work on, most recently pushed first, searched and paged on the server.
POST /v1/provider/github/searchFinds repositories on GitHub.
GET /v1/provider/github/user/callbackWhere GitHub returns the person.
POST /v1/provider/github/user/completeFinishes connecting the caller's GitHub account: it takes the authorization the callback parked, trades it for the person's token, and seals it.
POST /v1/provider/github/user/connectBegins connecting the caller's own GitHub account: it answers the App's authorization page, carrying a state signed for this org and this person.
POST /v1/provider/github/user/disconnectForgets the caller's GitHub connection in this org: the token is revoked at GitHub, and the sealed secrets and the row go.
GET /v1/provider/github/userReports whether the caller has connected their own GitHub account in the org they act in, and as whom.
POST /v1/provider/github/webhookGitHub App webhook
GET /v1/provider/gitlab/projectsLists the projects the org's GitLab connection can reach — membership projects, most recently active first.
POST /v1/provider/linear/claimBinds the caller's Linear organization to the org and seals the webhook secret.
POST /v1/provider/linear/commentsPosts a comment on a Linear issue with the caller's own key, so it carries their name.
POST /v1/provider/linear/issues/backfillSeeds the native todo with the EXISTING Linear issues the caller's key can see (default state=open); the webhook keeps them live thereafter.
POST /v1/provider/linear/webhookLinear webhook
POST /v1/provider/openrouter/webhookReceive OpenRouter Broadcast traces as usage rows
GET /v1/provider/slack/channelsLists Slack conversations for the caller's connected workspace.
POST /v1/provider/slack/commandsSlack slash command webhook
POST /v1/provider/slack/eventsSlack Events API webhook
GET /v1/provider/slack/fileRead one Slack file's bytes.
GET /v1/provider/slack/installInstall the Hanzo app into a Slack workspace
POST /v1/provider/slack/joinJoins every public channel in the caller org's workspace.
GET /v1/provider/slack/link/callbackComplete the Slack account link
GET /v1/provider/slack/link/slackSlack sign-in return leg
GET /v1/provider/slack/linkBegin linking a Hanzo account from Slack
GET /v1/provider/slack/messagesReads recent messages from a named Slack channel such as #hanzo-gtm.
POST /v1/provider/slack/messagesPosts as Hanzo to the caller's connected Slack workspace.
PUT /v1/provider/slack/messagesRewrites one of this app's messages: PUT /v1/provider/slack/messages.
DELETE /v1/provider/slack/messagesTakes back one of this app's messages: DELETE /v1/provider/slack/messages.
POST /v1/provider/slack/reactionsAdds an emoji reaction: POST /v1/provider/slack/reactions.
POST /v1/provider/slack/searchAnswers a workspace question: POST /v1/provider/slack/search.
POST /v1/provider/teams/eventsMicrosoft Teams Bot Framework webhook
GET /v1/provider/teams/link/aadMicrosoft sign-in return leg
GET /v1/provider/teams/link/callbackComplete the Teams account link
GET /v1/provider/teams/linkBegin linking a Hanzo account from Teams
POST /v1/provider/telegram/connectMints a short, single-use deep-link code bound to the caller's org and returns the t.me link the console navigates to.
GET /v1/provider/telegram/link/authTelegram Login Widget return leg
GET /v1/provider/telegram/link/callbackComplete the Telegram account link
GET /v1/provider/telegram/linkBegin linking a Hanzo account from Telegram
POST /v1/provider/telegram/webhookTelegram Bot API webhook
GET /v1/provider/whatsapp/webhookWhatsApp Cloud API subscription challenge
POST /v1/provider/whatsapp/webhookWhatsApp Cloud API webhook
GET /v1/providerReturns every registered integration provider together with THIS org's connection status for it — the catalog the console's Integrations page renders.

All Hanzo APIs · Interactive reference

Was this page useful?