Connect provider

Acquires the org's credential for one provider.

POST /v1/provider/{provider}/connect

Addresshttps://api.hanzo.ai/v1/provider/{provider}/connect
MethodPOST
Operationpost_provider_by_provider_connect
AuthAuthorization: Bearer $HANZO_API_KEY

Acquires the org's credential for one provider. It has TWO paths and the REQUEST picks which: a "token" key in the body seals that credential directly (verify-before-store), and its absence begins the 3-legged OAuth flow — minting a single-use nonce plus an HMAC-signed state that binds this org to this provider, and answering with the provider's authorize URL for the caller to redirect to.

Fail-closed order, unchanged: no principal → 403; unknown provider → 404; an AdminOnly connector without the caller's own-org admin bit → 403; not configured → 503; KMS not ready → 503 (the flow WILL need to seal a token, so refuse now rather than dead-end at the callback).

Request

7 fields, body application/json (required).

FieldInTypeRequiredDescription
providerpathstringyesProvider is the connector's registry id, from the :provider path segment.
accountIdbodystring—AccountID is the provider account the credential should be scoped to, for the providers whose Verify needs one (Cloudflare).
fieldsbodyobject—Fields are the named inputs of a credential connector whose form is more than one key (the connector's published fields).
fields.*bodystring—
providerbodystring—Provider is the connector's registry id, from the :provider path segment.
returnbodystring—Return is the page the OAuth callback sends the person back to, with connected=<provider>&account=<label> or error=<provider>&reason=<why> added to its query.
tokenbodystring—Token is the customer's provider credential.

Response

StatusBodyMeaning
200provider.connectOutok
defaultproblem-detailsrefused

200 body — 6 fields.

FieldInTypeAlwaysDescription
accountbodystring—Account is the account label the provider reported for the credential.
authorizeUrlbodystring—AuthorizeURL is the provider consent URL to send the user to.
connectedbodyboolean—Connected is true on the apikey path once the credential verified and sealed.
externalIdbodystring—ExternalID is the provider's account id for the credential.
providerbodystring—Provider is the connector's registry id.
scopesbodystring[]—Scopes are the permissions the credential carries.

Failure carries the platform error shape — see Errors.

Examples

hanzo provider connect <provider>
import { Configuration, ProviderApi } from 'hanzoai';

const api = new ProviderApi(new Configuration({ accessToken: process.env.HANZO_API_KEY }));
const { data } = await api.postProviderByProviderConnect({ provider: 'provider', accountId: "<accountId>", fields: {} });
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).post_provider_by_provider_connect(provider='provider', account_id="<accountId>", fields={})
cfg := hanzoai.NewConfiguration()
cfg.AddDefaultHeader("Authorization", "Bearer "+os.Getenv("HANZO_API_KEY"))
client := hanzoai.NewAPIClient(cfg)

resp, _, err := client.ProviderAPI.PostProviderByProviderConnect(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::post_provider_by_provider_connect(&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).postProviderByProviderConnect();
curl -X POST https://api.hanzo.ai/v1/provider/<provider>/connect \
  -H "Authorization: Bearer $HANZO_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
       "accountId": "<accountId>",
       "fields": {}
     }'

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"
         }
       }
     }'

Provider API · All Hanzo APIs · Interactive reference

Was this page useful?