Prerequisites. Installed SDK · API key · Python 3.10+. The
vectorshift CLI ships with the SDK. About 15 minutes.What you’ll build
You connect a service once, then reference that single connection from anything that needs it:Install the CLI and log in
The In CI, skip the browser and pass the key directly:
vectorshift command ships with the SDK. login stores your API key in ~/.vectorshift/config.toml, so you only do it once per machine.vectorshift login --api-key vs-…. Any command also accepts --api-key, or reads VECTORSHIFT_API_KEY from the environment — see the resolution order.Connect the service
Every service authenticates one of two ways, and that decides how you connect it:
Not sure which a service uses? Check the full catalogue, or ask in code: On a headless box, add Confirm what’s connected — from the CLI or in Python:See the CLI reference for every command, and the Python reference for every
| Auth mode | How you connect | Examples |
|---|---|---|
| OAuth | Approve access on the provider’s site in a browser — no secrets to copy | Slack, Gmail, Notion, Google Drive, HubSpot, Salesforce · 60 services |
| Form | Supply credentials yourself (host, keys, tokens) — no browser needed | Postgres, MySQL, MongoDB, Snowflake, S3, Pinecone · 16 services |
IntegrationType.SLACK.auth_mode → oauth.You can connect from the terminal or in Python — they do exactly the same thing. Pick the tab for your service’s auth mode:- OAuth (CLI)
- OAuth (Python)
- Form (CLI)
- Form (Python)
connect opens a hosted page, waits while you authorize, and prints the new id when it goes live:--no-browser to print the URL instead of opening it.connect option.Grab the integration in Python
If you connected from the terminal, get a handle to that connection in Python before wiring it into anything (if you connected in Python above, you already have it). Either way, check it’s healthy first.
get_status() returns done, loading, or unhealthy. If it’s unhealthy, refresh the auth in place with slack.reauth().wait() (or vectorshift reauth <id>).Let an Agent act on it
An integration tool binds a connected service to an Agent. Pass the Run one turn through a session and the model will call
Integration object for a static binding (the agent always uses this workspace) and pin the action; let the model fill the rest at call time with a ToolInput.post_to_slack on its own:…or run it deterministically in a Pipeline
When the flow is fixed — no model deciding when to fire — a Pipeline is the better shape. The same integration slots in as a node; wire an input into its Nodes dedup by
message.name, so the fetch-or-create guard keeps re-runs idempotent. Every service exposes its own node builder (integration_gmail, integration_notion, …) with per-action parameters — browse them in the integration nodes reference.Operational tips
- Connect once, reference everywhere. A single connection can back many agents and pipelines at the same time — you don’t re-connect per project. Store the
object_idand pass it around. - Static vs. dynamic binding. Pin
integration=<Integration>when one team owns the connection; useToolInput(DYNAMIC)for multi-tenant agents where each caller brings their own. See example 22. - Handle
ConnectionTimeout.connect(...).wait()raises it when the user is slow to authorize — it’s not a failure. The attempt is still live; re-opene.connect_urlor re-poll. Full hierarchy in the errors reference. - Delegate a connection. Need a teammate to authorize a service you don’t have credentials for?
vectorshift connect slack --share --link-expires-in 86400prints a long-lived link you can hand off; reconcile it later withIntegration.from_session. - Refresh Knowledge Base sources. If an integration feeds a KB,
slack.sync()(orkb.resync_integration(id)) pulls the latest — see the resync example.
What’s next
CLI reference
Every
vectorshift command and flag.Integrations reference
The
Integration API, types, and errors.Customer support bot
Combine integration tools with retrieval and approvals.
