CLI & SDKs
The command-line tool, the TypeScript and Python SDKs and the MCP server all use the API these pages document, with the same keys, metering and request log. Create an API key in Settings → Developer.
CLI
npx @sendflo/cli send report.pdf # or: npm install -g @sendflo/cli
export SENDFLO_API_KEY=sk_live_…
# Send a file, get a link (7 days by default)
sendflo send report.pdf --expires 7d --password "a passphrase"
# End-to-end encrypted: the printed link holds half the key; SendFlo gives the other half only to
# someone who knows the password, and deletes it when the link is revoked or expires
sendflo send contract.pdf --encrypt --password "a passphrase"
sendflo get "https://sendflo.app/l/abc123#k=2.…" --password "a passphrase"
# ...with your mark stamped into it on this machine first (images and PDFs)
sendflo send contract.pdf --encrypt --stamp --stamp-label "Acme — confidential"
# Download a link (no key needed); resumes when interrupted
sendflo get https://sendflo.app/l/abc123 --out ./downloads
# Ask someone for a file
sendflo request "Please upload the signed contract"
# Make this computer one of your encryption devices: approve it in the app (Settings → Encryption)
# when it shows the same six digits — then open end-to-end files people uploaded to you
sendflo keys enrol
sendflo received
sendflo received get <id> --out ./downloads
# Send a file to someone's upload page (sealed here when the page encrypts uploads)
sendflo upload https://sendflo.app/u/acme-intake statement.pdf
# Manage what you sent
sendflo links
sendflo activity <link-id> # who opened and downloaded what, with proof of delivery
sendflo people <link-id> --remove someone@example.com
sendflo pause <link-id> # and: resume, revoke [--all]
sendflo creditsOutput is JSON when piped (or with --json); --quiet prints only the essential value. Exit codes: 0 ok, 1 usage, 2 authentication, 3 out of API & Agent credits, 4 transfer failed.
TypeScript SDK
npm install @sendflo/sdkimport { SendFlo } from "@sendflo/sdk";
import { readFile } from "node:fs/promises";
const flo = new SendFlo({ apiKey: process.env.SENDFLO_API_KEY! });
// Send a file, get a link
const sent = await flo.sendFile(await readFile("report.pdf"), { name: "report.pdf" });
console.log(sent.url);
// Ask a human for a file
const ask = await flo.requestFile({ prompt: "Please upload the signed contract", maxFiles: 1 });
console.log("send this to the human:", ask.url);
// Balance check before a big job: out of credits is a 402, never a surprise bill
const { balance } = await flo.credits();Python SDK
pip install sendflofrom sendflo import SendFlo
flo = SendFlo() # reads SENDFLO_API_KEY
sent = flo.send_file("report.pdf")
print(sent.url)
ask = flo.request_file("Upload your Q3 expense CSV")Standard library only — nothing else to install.
MCP server
{
"mcpServers": {
"sendflo": {
"command": "npx",
"args": ["-y", "@sendflo/mcp@1.7.0"],
"env": { "SENDFLO_API_KEY": "sk_live_…" }
}
}
}49 tools: sending files, asking people for files, inboxes and team inboxes, events and webhooks, links and whole transfers (activity, people, pause, revoke), recipient feedback, notification channels, agent tasks, credits and the Drive. The same package runs the Claude Code channel the desktop app sets up (Settings → Agents → Connect). Or connect without installing anything to the hosted server, https://mcp.sendflo.app/mcp — MCP server.