GET/api/v1/me
Check a key: the workspace it acts on and how it shows in the audit log.
curl https://traceeai.com/api/v1/me \
-H "Authorization: Bearer $TRACEE_API_KEY"Post, upload and read results from your own code, a script or the tools you already use. Your approval rules apply, and every call shows in the audit log.
In Tracee, open Settings → Workspace keys. Name it after what will use it and copy it. It's shown once.
export TRACEE_API_KEY=<your key>
curl https://traceeai.com/api/v1/me \
-H "Authorization: Bearer $TRACEE_API_KEY"curl https://traceeai.com/api/v1/posts \
-H "Authorization: Bearer $TRACEE_API_KEY" \
-H "Content-Type: application/json" \
-d '{ "body": "Hello from the API",
"channels": ["<channel id>"] }'Calls act as an agent named after the key. If your workspace asks for approval, a publish waits in a person's inbox and the API says so.
https://traceeai.com/api/v1Authorization: Bearer <key>pending_approvalCheck a key: the workspace it acts on and how it shows in the audit log.
curl https://traceeai.com/api/v1/me \
-H "Authorization: Bearer $TRACEE_API_KEY"The social accounts you can post to, with the id each post needs.
curl https://traceeai.com/api/v1/channels \
-H "Authorization: Bearer $TRACEE_API_KEY"Create a draft for one or more channels. Add "publish": "now" (or a time) to send it.
curl https://traceeai.com/api/v1/posts \
-H "Authorization: Bearer $TRACEE_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"body": "Our new dashboard is live.",
"channels": ["$CHANNEL_ID"],
"linkUrl": "https://example.com/launch",
"thread": [{ "body": "Details in the first comment." }],
"publish": "now"
}'Posts, newest first. Filter by status and by when they go out; page with cursor.
curl "https://traceeai.com/api/v1/posts?status=scheduled&from=2026-11-01&to=2026-11-30" \
-H "Authorization: Bearer $TRACEE_API_KEY"One post with each channel's status and link once it's live.
curl https://traceeai.com/api/v1/posts/$POST_ID \
-H "Authorization: Bearer $TRACEE_API_KEY"Edit a post that hasn't gone out. It becomes a draft again.
curl -X PATCH https://traceeai.com/api/v1/posts/$POST_ID \
-H "Authorization: Bearer $TRACEE_API_KEY" \
-H "Content-Type: application/json" \
-d '{ "body": "Our new dashboard is live, for every plan." }'Publish now, or at scheduledFor. Waits for approval if your workspace asks for it.
curl https://traceeai.com/api/v1/posts/$POST_ID/publish \
-H "Authorization: Bearer $TRACEE_API_KEY" \
-H "Content-Type: application/json" \
-d '{ "scheduledFor": "2026-11-20T09:00:00Z" }'Delete a post that never went out. A person approves it in Tracee first.
curl -X DELETE "https://traceeai.com/api/v1/posts/$POST_ID?note=Duplicate" \
-H "Authorization: Bearer $TRACEE_API_KEY"Upload a photo (JPG, PNG, GIF, WebP, 15 MB) or a video (MP4, MOV, WebM, 100 MB).
curl https://traceeai.com/api/v1/media \
-H "Authorization: Bearer $TRACEE_API_KEY" \
-F "file=@launch.png" \
-F "altText=The new dashboard"Copy an image from a public link into your library.
curl https://traceeai.com/api/v1/media/from-url \
-H "Authorization: Bearer $TRACEE_API_KEY" \
-H "Content-Type: application/json" \
-d '{ "url": "https://example.com/launch.png" }'Images and videos in your library, newest first.
curl "https://traceeai.com/api/v1/media?kind=image&limit=20" \
-H "Authorization: Bearer $TRACEE_API_KEY"What waits for a person, and what was decided.
curl "https://traceeai.com/api/v1/approvals?status=pending" \
-H "Authorization: Bearer $TRACEE_API_KEY"Ad spend, CRM contacts and MQLs per campaign and per post.
curl "https://traceeai.com/api/v1/analytics/performance?days=30" \
-H "Authorization: Bearer $TRACEE_API_KEY"Every error has the same shape. message is plain enough to show a person; branch on code.
{
"error": {
"code": "forbidden",
"message": "Not allowed for this workspace: X."
}
}Lists come back as { data, nextCursor }. Pass cursor for the next page. Over the limit, wait the seconds in Retry-After.
Each one signs in with a workspace key.
Typed calls for every endpoint, errors you can catch by kind, and retries when you hit the limit. No dependencies; runs in Node, browsers and extensions.
import { Tracee } from "@tracee/sdk";
const tracee = new Tracee({ apiKey: process.env.TRACEE_API_KEY });
const { data: channels } = await tracee.channels.list();
const { post, publish } = await tracee.posts.create({
body: "Our new dashboard is live.",
channels: [channels[0].id],
publish: "now",
});
// publish.status: "published", "scheduled" or "pending_approval"Post from the terminal or a script. Add --json for machine-readable output.
npm install -g @tracee/cli
tracee login
tracee channels
tracee posts create \
--body "Our new dashboard is live." \
--channel linkedin --publish nowCreate, publish and list posts, upload media, and start a workflow when a post goes out.
n8n-nodes-traceeA trigger for each newly published post, actions to create and publish a post, and a search to find one. Connect it with your workspace key.
Modules to create and publish posts and list channels, and a trigger that watches for published posts.
Tracee for Chrome puts your version of any post right on the network.Set it up
Start free, create a workspace key, and make your first call in a minute.