Skip to content
Developers

Build on Tracee.

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.

Start

Your first post in three steps.

  1. 1

    Create a key

    In Tracee, open Settings → Workspace keys. Name it after what will use it and copy it. It's shown once.

  2. 2

    Check it

    Terminal
    export TRACEE_API_KEY=<your key>
    curl https://traceeai.com/api/v1/me \
      -H "Authorization: Bearer $TRACEE_API_KEY"
  3. 3

    Post

    Terminal
    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>"] }'
REST API

One API, your rules.

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.

Address
https://traceeai.com/api/v1
Sign in
Authorization: Bearer <key>
Limit
120 requests a minute per key
Waiting for a person
HTTP 202 and pending_approval

Account

GET/api/v1/me

Check a key: the workspace it acts on and how it shows in the audit log.

curl
curl https://traceeai.com/api/v1/me \
  -H "Authorization: Bearer $TRACEE_API_KEY"

Channels

GET/api/v1/channels

The social accounts you can post to, with the id each post needs.

curl
curl https://traceeai.com/api/v1/channels \
  -H "Authorization: Bearer $TRACEE_API_KEY"

Posts

POST/api/v1/posts

Create a draft for one or more channels. Add "publish": "now" (or a time) to send it.

curl
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"
  }'

GET/api/v1/posts

Posts, newest first. Filter by status and by when they go out; page with cursor.

curl
curl "https://traceeai.com/api/v1/posts?status=scheduled&from=2026-11-01&to=2026-11-30" \
  -H "Authorization: Bearer $TRACEE_API_KEY"

GET/api/v1/posts/{id}

One post with each channel's status and link once it's live.

curl
curl https://traceeai.com/api/v1/posts/$POST_ID \
  -H "Authorization: Bearer $TRACEE_API_KEY"

PATCH/api/v1/posts/{id}

Edit a post that hasn't gone out. It becomes a draft again.

curl
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." }'

POST/api/v1/posts/{id}/publish

Publish now, or at scheduledFor. Waits for approval if your workspace asks for it.

curl
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/api/v1/posts/{id}

Delete a post that never went out. A person approves it in Tracee first.

curl
curl -X DELETE "https://traceeai.com/api/v1/posts/$POST_ID?note=Duplicate" \
  -H "Authorization: Bearer $TRACEE_API_KEY"

Media

POST/api/v1/media

Upload a photo (JPG, PNG, GIF, WebP, 15 MB) or a video (MP4, MOV, WebM, 100 MB).

curl
curl https://traceeai.com/api/v1/media \
  -H "Authorization: Bearer $TRACEE_API_KEY" \
  -F "file=@launch.png" \
  -F "altText=The new dashboard"

POST/api/v1/media/from-url

Copy an image from a public link into your library.

curl
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" }'

GET/api/v1/media

Images and videos in your library, newest first.

curl
curl "https://traceeai.com/api/v1/media?kind=image&limit=20" \
  -H "Authorization: Bearer $TRACEE_API_KEY"

Approvals and results

GET/api/v1/approvals

What waits for a person, and what was decided.

curl
curl "https://traceeai.com/api/v1/approvals?status=pending" \
  -H "Authorization: Bearer $TRACEE_API_KEY"

GET/api/v1/analytics/performance

Ad spend, CRM contacts and MQLs per campaign and per post.

curl
curl "https://traceeai.com/api/v1/analytics/performance?days=30" \
  -H "Authorization: Bearer $TRACEE_API_KEY"

Errors

Every error has the same shape. message is plain enough to show a person; branch on code.

HTTP 403
{
  "error": {
    "code": "forbidden",
    "message": "Not allowed for this workspace: X."
  }
}

Lists

Lists come back as { data, nextCursor }. Pass cursor for the next page. Over the limit, wait the seconds in Retry-After.

Every field, in the OpenAPI spec
Tools

Or skip the code.

Each one signs in with a workspace key.

TypeScript SDK

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.

npm install @tracee/sdk
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"

CLI

Post from the terminal or a script. Add --json for machine-readable output.

Terminal
npm install -g @tracee/cli
tracee login
tracee channels
tracee posts create \
  --body "Our new dashboard is live." \
  --channel linkedin --publish now

n8n

Create, publish and list posts, upload media, and start a workflow when a post goes out.

Settings → Community nodes → Install
n8n-nodes-tracee

Zapier

A 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.

Make

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

14-day trial. No credit card.

Your posts, your code.

Start free, create a workspace key, and make your first call in a minute.