Copilot Chat
AI Copilot
Copilot Chat
AI-powered creative assistance for ad strategy, captions, and ideation
POST
Copilot Chat
Send messages to the Nouvel AI copilot for help with ad strategy, caption writing, product research, and creative ideation. This is the API version of the dashboard copilot — it returns a complete JSON response instead of a server-sent event stream.
Authentication
Your Nouvel API key with
copilot:chat permission. Format: Bearer nvl_xxxxRequest Body
Chat message history. Each message must have
role and content.Include the full conversation history to maintain context. The copilot is stateless — each request is independent.
Product URL for competitor ad research. When provided, the copilot fetches competitor ad intelligence to inform its responses.
UUID of an active project. When provided, the copilot has context about the project’s settings, scenes, scripts, and style configuration.
Response
The copilot’s full text response.
The AI model used (determined by your plan, not configurable via API).
Example Requests
Response Examples
Error Codes
| Code | Description |
|---|---|
| 400 | Missing messages array or invalid format |
| 401 | Invalid or missing API key |
| 402 | Plan doesn’t include API access |
| 403 | API key missing copilot:chat permission |
| 429 | Daily message limit reached. Check resetAt for when the limit resets (midnight UTC) |
| 500 | Internal server error |
Context Injection
The copilot automatically enriches its responses with context from your account:| Context Source | When Included |
|---|---|
| Brand kit | Always — business name, description, tone of voice, target audience, color palette, visual style, guardrails |
| Available avatars | Always — platform actors + custom avatars you’ve uploaded |
| Scraped URLs | When the last user message contains product URLs — they’re scraped, classified, and only product pages are included |
| Competitor ads | When productUrl is provided — fetches competitor ad intelligence from our ad research database |
| Project context | When projectId is provided — includes project style settings, scenes, and scripts |
Daily Limits
The copilot enforces a daily message limit per user, determined by your plan. The limit resets at midnight UTC. When the limit is reached, the API returns a429 response with:
resetAt— ISO timestamp when the limit resetscount— number of messages used todaylimit— maximum messages allowed per day
Differences from Dashboard Copilot
| Feature | Dashboard | API |
|---|---|---|
| Auth | Browser session (cookies) | API key |
| Response format | Server-Sent Events (SSE stream) | JSON (complete response) |
| File attachments | Supported | Not supported |
| Product context | Full form (actor, language, images) | productUrl parameter only |
| Max duration | N/A (streaming) | 60 seconds |
Best Practices
Include conversation history
Include conversation history
The copilot is stateless. To maintain context across turns, include all previous messages in the
messages array. This lets the copilot refine and build on previous responses.Use productUrl for competitive insights
Use productUrl for competitive insights
When asking about ad strategy or creative angles, include a
productUrl to give the copilot access to competitor ad intelligence.Monitor daily limits
Monitor daily limits
Check the
X-RateLimit-Remaining header to track your API rate limit, and handle 429 responses gracefully with the resetAt timestamp.
