Aidelly Docs
Integrations

REST API

Call the Aidelly API directly from your code or any HTTP client.

The Aidelly REST API lets you integrate social publishing into any stack. Use it from server-side code, CI/CD pipelines, custom GPT actions, or any tool that can make HTTP requests.

Base URL

https://app.aidelly.ai/api/public/v1

Authentication

Authorization: Bearer aidelly_live_xxx

All write endpoints also require:

Idempotency-Key: <unique-string>
x-aidelly-workspace-id: <workspace-uuid>  # if scoping to a workspace

Create a post

curl -sS "https://app.aidelly.ai/api/public/v1/posts" \
  -X POST \
  -H "Authorization: Bearer $AIDELLY_API_KEY" \
  -H "Idempotency-Key: post-$(uuidgen)" \
  -H "x-aidelly-workspace-id: $WORKSPACE_ID" \
  -H "Content-Type: application/json" \
  -d '{
    "brand_id": "'$BRAND_ID'",
    "content": "Hello from the Aidelly API!",
    "platforms": ["linkedin", "instagram"],
    "publish_now": true
  }'

Schedule a post

curl -sS "https://app.aidelly.ai/api/public/v1/posts" \
  -X POST \
  -H "Authorization: Bearer $AIDELLY_API_KEY" \
  -H "Idempotency-Key: scheduled-post-001" \
  -H "x-aidelly-workspace-id: $WORKSPACE_ID" \
  -H "Content-Type: application/json" \
  -d '{
    "brand_id": "'$BRAND_ID'",
    "content": "This posts on Friday morning.",
    "platforms": ["x", "linkedin"],
    "schedule_at": "2026-04-18T09:00:00Z"
  }'

List posts

curl "https://app.aidelly.ai/api/public/v1/posts?status=scheduled&limit=20" \
  -H "Authorization: Bearer $AIDELLY_API_KEY" \
  -H "x-aidelly-workspace-id: $WORKSPACE_ID"

Upload media

# Step 1: get a signed upload URL
curl -sS "https://app.aidelly.ai/api/public/v1/media/upload-url" \
  -X POST \
  -H "Authorization: Bearer $AIDELLY_API_KEY" \
  -H "Idempotency-Key: media-$(uuidgen)" \
  -H "x-aidelly-workspace-id: $WORKSPACE_ID" \
  -H "Content-Type: application/json" \
  -d '{"filename": "photo.jpg", "content_type": "image/jpeg"}'

# Step 2: upload directly to the signed URL
curl -X PUT "$UPLOAD_URL" \
  -H "Content-Type: image/jpeg" \
  --data-binary @photo.jpg

# Step 3: include media_ids in your post

TypeScript / Node.js example

const response = await fetch('https://app.aidelly.ai/api/public/v1/posts', {
  method: 'POST',
  headers: {
    Authorization: `Bearer ${process.env.AIDELLY_API_KEY}`,
    'Idempotency-Key': crypto.randomUUID(),
    'x-aidelly-workspace-id': process.env.WORKSPACE_ID!,
    'Content-Type': 'application/json',
  },
  body: JSON.stringify({
    brand_id: process.env.BRAND_ID,
    content: 'Posting from TypeScript!',
    platforms: ['linkedin', 'x'],
    publish_now: true,
  }),
});

const { success, data, error } = await response.json();
if (!success) throw new Error(error.code);
console.log('Post ID:', data.post_id);

Python example

import os, uuid, requests

response = requests.post(
    "https://app.aidelly.ai/api/public/v1/posts",
    headers={
        "Authorization": f"Bearer {os.environ['AIDELLY_API_KEY']}",
        "Idempotency-Key": str(uuid.uuid4()),
        "x-aidelly-workspace-id": os.environ["WORKSPACE_ID"],
        "Content-Type": "application/json",
    },
    json={
        "brand_id": os.environ["BRAND_ID"],
        "content": "Posting from Python!",
        "platforms": ["linkedin", "instagram"],
        "publish_now": True,
    },
)
data = response.json()
print(data["data"]["post_id"])

Interactive reference

The full endpoint reference with live Try-It console:

Open API Reference →

Or download the OpenAPI spec:

curl https://app.aidelly.ai/api/public/v1/openapi -o aidelly-openapi.yaml