Integration Notes
Audience: Engineers wiring Adros into their stack - whether via MCP, REST, webhooks, or the dashboard.
This page covers behaviors and constraints that are easy to miss if you only read the OpenAPI surface.
1. What Adros is
Adros is a hybrid marketing OS: FastAPI on Railway, React dashboard on Vercel, Supabase Postgres, Cloudflare R2 for scoped files, plus MCP (Streamable HTTP). It includes patterns, memory, creative generation, monitoring, and first-class operator workflows on app.adros.ai (opens in a new tab): Command Center, Strategy Workspace, Files, Campaigns, and Adros CEO.
If you run a custom conductor on top, Adros remains the marketing capability + data plane; your layer can own cross-tool sequencing, human assignment, or policies Adros does not encode.
Research stack direction: product direction is Perplexity + DataForSEO + Firecrawl + platform-native account data. Verify exact deployment support before documenting a specific environment as fully live-native.
2. Auth is the same everywhere
| Context | Header |
|---|---|
| REST | Authorization: Bearer lyr_YOUR_TOKEN |
| MCP | X-User-Token: lyr_YOUR_TOKEN |
| WebSocket | ?token=lyr_YOUR_TOKEN |
| Webhook delivery | Inbound to your server; you verify X-Adros-Signature |
One token, one user, one permission model.
3. MCP connection: the #1 support issue
Checklist:
- Token is
lyr_... X-User-Tokenheader, notAuthorization: Bearer- URL is
https://api.adros.ai/mcp - Transport is Streamable HTTP
- Restart the MCP client fully after config change
4. Memory is append-only (mostly)
business_contextandpersonascan be overwrittenweekly_logsshould be appended, not replaced- Memory is scoped by
(user_id, client_id)
5. Multi-tenant scoping
Every data access should be scoped to user_id. Where client context matters, also scope by client_id.
Common examples:
- approve/reject flows
- file access
- campaign data
6. Webhook delivery is fire-and-forget
- No retries
- Signature: HMAC-SHA256 using your webhook secret
- Deduping: use
dedupe_key - Design your receiver to be idempotent
7. Contract layer - important details
recommended_specialistvalues are runtime actor IDs:adros_ceo,adros_research,adros_cmo,adros_cd,adros_deployer- Branch on those IDs, not display names
next_stagein the contract is advisory; the orchestrator owns task lifecycle
8. Creative generation guardrails
- Always use the documented generator/mode defaults for your deployment
generate_creativehas an idempotency window- Creative generation is rate-limited
- Pattern blueprints anchor generation quality
9. File upload flow
- Client calls
POST /files/upload - Backend validates scope
- Object is written to R2 under a scoped prefix
- Metadata is stored in task artifacts
- Browse/download/delete via corresponding endpoints
10. Task event timeline
- Events are append-only
- Query latest activity with
ORDER BY created_at DESC - WebSocket at
/ws/events/{task_id}?token=lyr_...streams new events - Task status is broader than file upload. A task can still be in review, paused, or failed after artifacts appear if package completion, approvals, or revisions are still pending.
11. Campaign scope and fallback
- Google/Meta campaign data depends on the accounts the user has connected and selected
- If the selected account is unavailable, the system may fall back to another accessible account
- Fallback behavior should be surfaced in the UI or API consumer
12. Quality track prerequisites
Before scorecards, guardrails, or audit artifact persistence work:
- Migration
025_audit_quality_trackmust be applied AUDIT_QUALITY_TRACK_ENABLEDmust be enabled in the target environment- The task must be an audit-type task that completed the quality path
13. What NOT to do
- Do not hardcode specialist display names
- Do not assume all tasks share the same lifecycle
- Do not skip ownership checks in custom orchestration
- Do not replace weekly logs
- Do not expect webhook retries