VendoVendo Docs
Integrations

Instagram

Publish posts, read comments, and view analytics on Instagram

Instagram is wired into Vendo via the Composio bridge. Tool authors connect a tenant's Instagram account through Vendo's UI; once connected, the SDK exposes the credential at runtime so your tool can call the Instagram API on the tenant's behalf.

Auth modes

ProfileDefaultHow it works
composio_managed (Composio-managed)YesConnection brokered through Composio. Tenant connects via the embedded Composio OAuth flow; Vendo issues a Composio session at request time.

Environment variables

These are the env vars Vendo injects into your deployment at boot when this integration is bound. Source values are resolved by resolveConnectionEnvVars in packages/integrations/lib/ from the connection record (credential, metadata) and deployment context (proxy URL, Vendo-issued API key).

VariableProfilesSourceSecret
INSTAGRAM_ACCESS_TOKENallconnection credential (encrypted at rest)Yes

Reading the credential at runtime

Instagram is composio-managed, so Vendo never holds a long-lived copy of the upstream credential — Composio does. That means process.env.INSTAGRAM_ACCESS_TOKEN is not populated in your running container; the env-var row above describes the SDK's credential-projection shape, not a Railway env var.

To read the credential from your tool, call vendo.token("instagram") (the SDK fetches a live access token from Composio at call time) or use the canonical vendo.data.execute path, which handles metering, connected-account resolution, and error normalization for you.

Through Composio

Calls to Instagram are brokered through Vendo's Composio bridge. Your tool issues a vendo.data.execute(ACTION, args) call; Vendo resolves the tenant's connected Instagram account, forwards to Composio, meters one composio.action_call unit, and returns the result. Your code never sees the upstream credential.

See Call a Composio Action for the full pattern, including NotConnected handling.

Quickstart

import vendo
from vendo.errors import NotConnected, UpstreamError

# Vendo brokers the call through Composio against the tenant's connected
# Instagram account. Browse the action catalog at composio.dev for the
# full list of action names.
try:
    result = vendo.data.execute(
        "INSTAGRAM_<ACTION>",
        { /* action-specific arguments — see composio.dev */ },
    )
except NotConnected as e:
    # Tenant hasn't connected Instagram — send them through the connect flow.
    connect_url = vendo.connect_url(e.slug)
except UpstreamError as e:
    # Composio or Instagram returned an error.
    raise
import { Vendo, NotConnected, UpstreamError } from "@vendodev/sdk";

const vendo = new Vendo();

// Vendo brokers the call through Composio against the tenant's connected
// Instagram account. Browse the action catalog at composio.dev for the
// full list of action names.
try {
  const result = await vendo.data.execute(
    "INSTAGRAM_<ACTION>",
    { /* action-specific arguments — see composio.dev */ },
  );
} catch (e) {
  if (e instanceof NotConnected) {
    const connectUrl = vendo.connectUrl(e.slug);
  } else if (e instanceof UpstreamError) {
    throw e;
  }
}
import VendoSDK

let vendo = Vendo()

// Vendo brokers the call through Composio against the tenant's connected
// Instagram account. Browse the action catalog at composio.dev for the
// full list of action names.
do {
  let result = try await vendo.data.execute(
    "INSTAGRAM_<ACTION>",
    [ /* action-specific arguments — see composio.dev */ ]
  )
} catch let error as NotConnected {
  let connectUrl = vendo.connectUrl(slug: error.slug)
} catch {
  throw error
}

Learn more

On this page