Translated

REST API

Full reference for the AdFlow REST API v1.

⏱ 2 min · ↻ mai. de 2026

Programmatic access to all AdFlow resources via HTTP.

Base URL and version

https://app.cloudadflow.com/api/v1

Current version: v1. Breaking changes only happen in major versions. Non-breaking additions (new fields, new endpoints) are added without a version bump.

Authentication

JWT Bearer token. Login to get the token:

curl -X POST https://app.cloudadflow.com/api/v1/auth/login \
  -H "Content-Type: application/json" \
  -d '{"email": "[email protected]", "password": "yourpassword"}'

Response:

{
  "token": "eyJ...",
  "expires_at": "2026-05-04T12:00:00Z"
}

Use the token in all requests:

Authorization: Bearer eyJ...

Tokens expire in 24h. Use /auth/refresh to renew without logging in again.

Rate limits

PlanLimit
Free100 req/min per organization
Operator500 req/min
Captain / Zion1,000 req/min

Response when limit is hit: 429 Too Many Requests with Retry-After header in seconds.

Endpoints

ResourceEndpointMethods
Auth/auth/loginPOST
Auth/auth/refreshPOST
Auth/auth/logoutDELETE
Campaigns/campaignsGET, POST
Campaigns/campaigns/:idGET, PUT, DELETE
Profiles/profilesGET, POST
Profiles/profiles/:idGET, PUT, DELETE
Proxies/proxiesGET, POST
Proxies/proxies/:idGET, PUT, DELETE
Templates/templatesGET, POST
Templates/templates/:idGET, PUT, DELETE
Audit Logs/audit_logsGET
Webhooks/webhook_endpointsGET, POST
Webhooks/webhook_endpoints/:idGET, DELETE

Example: create a campaign

curl -X POST https://app.cloudadflow.com/api/v1/campaigns \
  -H "Authorization: Bearer eyJ..." \
  -H "Content-Type: application/json" \
  -d '{
    "name": "product_conversions_20260503",
    "objective": "conversions",
    "profile_id": "prf_abc123",
    "daily_budget": 25.00,
    "currency": "USD"
  }'

Response 201 Created:

{
  "id": "cmp_xyz789",
  "name": "product_conversions_20260503",
  "status": "draft",
  "created_at": "2026-05-03T10:00:00Z"
}

Pagination

Lists return paginated with cursor:

{
  "data": [...],
  "meta": {
    "next_cursor": "eyJpZCI6MTAwfQ==",
    "has_more": true
  }
}

Pass ?cursor=eyJpZCI6MTAwfQ== in the next request for the following page.