CONNECT APP
Build with Super Carl
Productivity
- API key
MCP
Give your agent Super Carl tools
Every Super Carl action is exposed as an MCP tool on Pipedream's remote server. Point a client at it with your end user's ID and Connect resolves that user's Super Carl account for each tool call — you store no tokens.
// accessToken: mint a short-lived token with the Connect SDK — see the MCP guide
const transport = new StreamableHTTPClientTransport(
new URL("https://remote.mcp.pipedream.net/v3"),
{
requestInit: {
headers: {
Authorization: `Bearer ${accessToken}`,
"x-pd-project-id": "{project_id}",
"x-pd-environment": "production",
"x-pd-external-user-id": "{external_user_id}", // any stable ID for this user in your system
"x-pd-app-slug": "super_carl",
},
},
},
)
const mcp = new Client({ name: "my-agent", version: "1.0.0" })
await mcp.connect(transport)
const { tools } = await mcp.listTools()
// e.g. run Cancel Communication:
const result = await mcp.callTool({
name: "super_carl-cancel-communication",
arguments: {
communicationId: "Communication ID",
reason: "Reason",
},
})# access_token: mint a short-lived token with the Connect SDK — see the MCP guide
headers = {
"Authorization": f"Bearer {access_token}",
"x-pd-project-id": "{project_id}",
"x-pd-environment": "production",
"x-pd-external-user-id": "{external_user_id}", # any stable ID for this user in your system
"x-pd-app-slug": "super_carl",
}
async with streamablehttp_client("https://remote.mcp.pipedream.net/v3", headers=headers) as (read, write, _):
async with ClientSession(read, write) as session:
await session.initialize()
tools = await session.list_tools()
# e.g. run Cancel Communication:
result = await session.call_tool("super_carl-cancel-communication", {
"communicationId": "Communication ID",
"reason": "Reason",
})API PROXY
Call the Super Carl API directly
For an endpoint with no pre-built tool, the Connect proxy forwards your request to the Super Carl API with the connected user's credentials attached. You store no tokens and write no refresh logic.
const resp = await pd.proxy.get({
externalUserId: "{external_user_id}", // any stable ID for this user in your system
accountId: "apn_xxxxxxx",
url: "https://api.supercarl.ai/api/v1/credits",
})
// Any allowed Super Carl endpoint works here. Pipedream attaches the
// connected account's credentials to the outgoing request.# The path segment is the target URL, URL-safe base64 encoded:
# https://api.supercarl.ai/api/v1/credits
curl "https://api.pipedream.com/v1/connect/{project_id}/proxy/aHR0cHM6Ly9hcGkuc3VwZXJjYXJsLmFpL2FwaS92MS9jcmVkaXRz?external_user_id={external_user_id}&account_id=apn_xxxxxxx" \
-H "Authorization: Bearer {access_token}" \
-H "x-pd-environment: production"SDK
Run Super Carl actions from your backend
Connect a user's Super Carl account once, then run Cancel Communication on their behalf from your own code — TypeScript, Python, or plain HTTP.
import { PipedreamClient } from "@pipedream/sdk"
const pd = new PipedreamClient({
projectId: process.env.PIPEDREAM_PROJECT_ID!,
clientId: process.env.PIPEDREAM_CLIENT_ID!,
clientSecret: process.env.PIPEDREAM_CLIENT_SECRET!,
projectEnvironment: "production",
})
const result = await pd.actions.run({
id: "super_carl-cancel-communication",
externalUserId: "{external_user_id}", // any stable ID for this user in your system
configuredProps: {
super_carl: { authProvisionId: "apn_xxxxxxx" },
communicationId: "Communication ID",
reason: "Reason",
},
})from pipedream import Pipedream
pd = Pipedream(
client_id="{oauth_client_id}",
client_secret="{oauth_client_secret}",
project_id="{project_id}",
project_environment="production",
)
result = pd.actions.run(
id="super_carl-cancel-communication",
external_user_id="{external_user_id}", # any stable ID for this user in your system
configured_props={
"super_carl": {"authProvisionId": "apn_xxxxxxx"},
"communicationId": "Communication ID",
"reason": "Reason",
},
)curl -X POST https://api.pipedream.com/v1/connect/{project_id}/actions/run \
-H "Content-Type: application/json" \
-H "X-PD-Environment: production" \
-H "Authorization: Bearer {access_token}" \
-d '{
"external_user_id": "{external_user_id}",
"id": "super_carl-cancel-communication",
"configured_props": {
"super_carl": { "authProvisionId": "apn_xxxxxxx" },
"communicationId": "Communication ID",
"reason": "Reason"
}
}'TOOLS
Super Carl actions
On-demand operations your product or agent can configure and run on behalf of a connected user.
-
Cancel Communication
actionCancel a queued or in-progress Super Carl communication. Use this when a workflow needs to stop delivery before the communication reaches a terminal status. See the documentationWritev0.0.2 -
Check Communication Capabilities
actionCheck which Super Carl communication channels are available for a target before sending a message. Returns the list of channels with theircan_sendstatus, recipient email, and connector user IDs. Each channel entry carries verbose reason/relationship metadata — pass Fields (e.g.channel,can_send,reason) to keep the result small when you only need the essentials. See the documentationRead-onlyv0.0.2 -
Get Communication
actionFetch a Super Carl communication record, normalized status, recent events, task metadata, and artifact URLs after Send Communication. Use Wait Milliseconds when a workflow should pause for delivery progress. See the documentationRead-onlyv0.0.2 -
Get Communication History
actionFetch prior Super Carl communication history for a target before drafting or sending. Use this to avoid duplicate outreach and to inspect recent Gmail, LinkedIn, X, Instagram, and Super Carl sends. See the documentationRead-onlyv0.0.2 -
Get Network Summary
actionCheck Super Carl network readiness before running Search People, Search Jobs, or Search Companies. Use this to inspect LinkedIn/Gmail/Super Carl graph sync status for the API key owner or a delegated team-seat user via Delegate User ID; low or unsynced counts can explain weak network-aware results. See the documentationRead-onlyv0.0.2 -
Search Companies
actionSearch companies by name, domain, funding, size, industry, location, growth, or technology. Use this to qualify a target company or find companies matching structured Filters before reaching out. Use Search People afterward to find people at a matched company; enable Resolve Only to just disambiguate a single company name, domain, or LinkedIn URL without running a full search — Resolve Only returns identity metadata ONLY (name, domain, a coarseemployee_count,industries), never a company's real size or description. When the task needs to know a company's actual size or what it does, leave Resolve Only off (or set it false) and set Result Mode todetailed; don't fill gaps from outside knowledge when Resolve Only comes back thin — re-call withdetailedinstead. Company rows indetailedmode can be large — pass Fields (e.g.name,domain,employee_count) to keep the result small. See the documentationRead-onlyv0.0.2 -
Search Jobs
actionSearch jobs when the workflow needs hiring-company opportunities, role fit, or warm paths into employers. Use Search People for candidate/advisor discovery, and enable With People when the workflow should return 1st/2nd-degree contacts at each hiring company.filters.locationsscopes the hiring company/people, not the job posting itself — checkapplied_filter_summary.people_company_scopein the response to see how a location filter was actually applied, and don't retry the same query with reworded locations if it comes backapplied_as_job_posting_filters: false, since that's a scope limitation, not a bad query. Job rows can be large — pass Fields (flat field names only, e.g.title,company_name,location,primary_source_url; there is no nestedcompany.namepath) to keep the result small. See the documentationRead-onlyv0.0.2 -
Search People
actionSearch people by role, company history, expertise, location, network relationship, or recent activity. Keep Preview enabled for fast counts and lightweight rows; disable Preview when you need full rows and Evidence Format, since Evidence Format is ignored during preview. Use Search Companies first when a named employer is ambiguous. Person rows carry deep connection/evidence metadata and can be large — pass Fields (e.g.name,linkedin_profile_url,headline) to keep the result small when you only need a few values. Always pass Fields when Preview is off and you set Relationship Detail tointro_pathsor Evidence Format to anything other thannone: that combination alone can exceed the response size limit even with a handful of rows, so don't wait for a truncated first call to add Fields. Read-only against Super Carl's shared external people database: there is no way to edit, hide, or delete a person's profile through this or any other Super Carl tool. See the documentationRead-onlyv0.0.2 -
Search Posts
actionSearch Super Carl post and activity signals, including authored posts, comments, likes, reactions, company mentions, and engagement. Use this before Search People when the workflow is anchored on someone posting or engaging with content; enable With People to return deduped actors from matching activity. Post rows can be large — pass Fields (flat field names only, e.g.author_name,text,url; there is no nestedauthor.namepath) to keep the result small; With People's deduped rows are already trimmed and don't need Fields. See the documentationRead-onlyv0.0.2 -
Send Communication
actionCreate a Super Carl outbound communication and optionally send it through Gmail, LinkedIn, X, Instagram, or Super Carl channels. Dry Run defaults to true; set it to false only after Check Communication Capabilities passes and the user approves live delivery. See the documentationWritev0.0.2
EVENTS
Super Carl triggers
Event sources your backend can deploy for users and receive through a webhook.
No Super Carl triggers are available yet.
- App slug
- super_carl
- Authentication
- API key
- Categories
- Productivity
- Actions
- 10
- Triggers
- 0
- API proxy
- Available