CONNECT APP
Build with Sapling.ai
Artificial Intelligence (AI)
- API key
MCP
Give your agent Sapling.ai tools
Every Sapling.ai 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 Sapling.ai 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": "sapling_ai",
},
},
},
)
const mcp = new Client({ name: "my-agent", version: "1.0.0" })
await mcp.connect(transport)
const { tools } = await mcp.listTools()
// e.g. run Accept Completion:
const result = await mcp.callTool({
name: "sapling_ai-accept-completion",
arguments: {
completionId: "Completion ID",
sessionId: "Session ID",
},
})# 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": "sapling_ai",
}
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 Accept Completion:
result = await session.call_tool("sapling_ai-accept-completion", {
"completionId": "Completion ID",
"sessionId": "Session ID",
})API PROXY
Call the Sapling.ai API directly
For an endpoint with no pre-built tool, the Connect proxy forwards your request to the Sapling.ai 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.sapling.ai/api/v1/team",
})
// Any allowed Sapling.ai 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.sapling.ai/api/v1/team
curl "https://api.pipedream.com/v1/connect/{project_id}/proxy/aHR0cHM6Ly9hcGkuc2FwbGluZy5haS9hcGkvdjEvdGVhbQ?external_user_id={external_user_id}&account_id=apn_xxxxxxx" \
-H "Authorization: Bearer {access_token}" \
-H "x-pd-environment: production"SDK
Run Sapling.ai actions from your backend
Connect a user's Sapling.ai account once, then run Accept Completion 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: "sapling_ai-accept-completion",
externalUserId: "{external_user_id}", // any stable ID for this user in your system
configuredProps: {
sapling_ai: { authProvisionId: "apn_xxxxxxx" },
completionId: "Completion ID",
sessionId: "Session ID",
},
})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="sapling_ai-accept-completion",
external_user_id="{external_user_id}", # any stable ID for this user in your system
configured_props={
"sapling_ai": {"authProvisionId": "apn_xxxxxxx"},
"completionId": "Completion ID",
"sessionId": "Session ID",
},
)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": "sapling_ai-accept-completion",
"configured_props": {
"sapling_ai": { "authProvisionId": "apn_xxxxxxx" },
"completionId": "Completion ID",
"sessionId": "Session ID"
}
}'TOOLS
Sapling.ai actions
On-demand operations your product or agent can configure and run on behalf of a connected user.
-
Accept Completion
actionHave Sapling adapt its system over time. Each suggested completion has a completion UUID. You can pass this information back to Sapling to indicate the completion suggestion was helpful. See the documentation here.Writev0.0.2 -
Accept Edit
actionHave Sapling adapt its system over time. Each suggested edit has an edit UUID. You can pass this information back to Sapling to indicate the edit suggestion was helpful. See the documentation here.Writev0.0.2 -
Reject Edit
actionHave Sapling not recommend the same edit anymore. Each suggested edit has an edit UUID. You can pass this information back to Sapling to indicate the edit suggestion was not helpful. See the documentation here.Writev0.0.2 -
Request Completion
actionProvides predictions of the next few characters or words given the current context in a particular editable. The predictions are based on the previous text. See the documentation here.Writev0.0.2 -
Request Edits
actionProvides grammar, spelling, and stylistic edits for text. It is customizable through a dictionary and custom mappings; for custom language models, please contact sapling.ai. Sapling has prebuilt models for applications such as healthcare/medicine. See the documentation here.Writev0.0.2
EVENTS
Sapling.ai triggers
Event sources your backend can deploy for users and receive through a webhook.
No Sapling.ai triggers are available yet.
- App slug
- sapling_ai
- Authentication
- API key
- Categories
- Artificial Intelligence (AI)
- Actions
- 5
- Triggers
- 0
- API proxy
- Available