Skip to content
Developers

Your agency, wired to your AI

Ask Claude for this week's revenue per creator, or send a shoot reminder from Make. You choose what each key can do.

What you can do

Ask your numbers

"Who sold the most on MYM this month?" Claude reads the totals and answers in one sentence.

Prepare content

The AI writes posts for the feed. They land as drafts, your team reviews and publishes.

Notify a creator

A shoot reminder, a time change: the message goes out in the app. No mass sending, 50 notifications a day at most.

Automate

Make, Zapier, n8n or your own script read sales and shoots through the REST API.

Create your key

  1. Sign in to the console as Owner or Admin, with two-factor authentication on.
  2. Open Settings, then Developers, and click Create a key.
  3. Give it a clear name. Tick only what your tool needs.
  4. Type your two-factor code. The key shows only once: copy it right away.
  5. Paste it in your tool's Authorization header: Bearer, then the key.

A key starts with vlr_live_ followed by 43 characters. After that, the console only shows its start, so you can spot it.

Connect an AI through MCP

MCP is the standard that lets an AI use tools. The server address is the same for every client. In the examples, replace <domaine> with your console's address, and the key with yours.

https://<domaine>/api/mcp

Claude Code

One command in your terminal, then /mcp to check that Velora is connected.

claude mcp add --transport http velora https://<domaine>/api/mcp \
  --header "Authorization: Bearer vlr_live_…"

Claude Desktop

Open Settings, Developer, Edit Config. Paste this block into claude_desktop_config.json, then restart Claude. The mcp-remote relay adds your key to every call.

{
  "mcpServers": {
    "velora": {
      "command": "npx",
      "args": [
        "-y", "mcp-remote", "https://<domaine>/api/mcp",
        "--header", "Authorization:${VELORA_AUTH}"
      ],
      "env": { "VELORA_AUTH": "Bearer vlr_live_…" }
    }
  }
}

Cursor

In ~/.cursor/mcp.json (or .cursor/mcp.json in a project). The tools show up in Settings, MCP.

{
  "mcpServers": {
    "velora": {
      "url": "https://<domaine>/api/mcp",
      "headers": { "Authorization": "Bearer vlr_live_…" }
    }
  }
}

ChatGPT

ChatGPT's MCP connectors can't send a key yet. Use a custom GPT. In Actions, import the schema from the address below. Then pick Authentication, API Key, type Bearer, and paste your key.

https://<domaine>/api/v1/openapi.json

The MCP tools

A key only sees the tools its rights allow. Read tools are marked read-only, so your AI can use them without asking you.

MCP toolScope
list_creators
The agency's creators, newest first. No e-mail or phone.
read:creators
get_creator
One creator, with her connected selling platforms.
read:creators
list_sales
OnlyFans (via Infloww), MYM and Reveal sales, newest first. Never the fans' names.
read:sales
sales_summary
Totals for a period, per creator and per platform, manual corrections included.
read:stats
send_notification
An in-app notification, to one creator or all of them. Quiet hours and the per-creator limit apply. 50 a day at most for the agency.
write:notifications
list_shoots
Shoots planned over a period, earliest first. Never internal notes.
read:shoots
list_feed
Posts of the agency feed, pinned first.
read:feed
create_feed_draft
Creates a feed draft. Creators see nothing until your team publishes it.
write:feed

REST API

For your scripts and automations. Responses in JSON, amounts in cents.

Every call carries the Authorization: Bearer vlr_live_… header. Calls from a browser are refused: call from a server.

curl https://<domaine>/api/v1/stats/summary?from=2026-10-01&to=2026-10-31 \
  -H "Authorization: Bearer vlr_live_…"

A list returns 50 items at most and a nextCursor. Pass it as cursor for the next page. It's null at the end.

On error, the answer gives a code and a message. The codes: unauthorized (401), insufficient_scope and browser_not_allowed (403), not_found (404), invalid_request (400), rate_limited and notification_cap_reached (429).

{ "error": { "code": "insufficient_scope", "message": "This key lacks the read:sales scope." } }

The full OpenAPI 3.1 schema

Reference

GET/api/v1/creators

The agency's creators, newest first. No e-mail or phone.

Scope read:creators · MCP tool list_creators

ParameterTypeWhere
status
Only creators in this state.
INVITED | ACTIVE | PAUSEDquery, optional
tag
Only creators with this tag.
stringquery, optional
cursor
The nextCursor of the previous page.
stringquery, optional
limit
Page size, 1 to 50 (default 25).
integerquery, optional

GET/api/v1/creators/{id}

One creator, with her connected selling platforms.

Scope read:creators · MCP tool get_creator

ParameterTypeWhere
id
Creator id.
stringpath, required

GET/api/v1/sales

OnlyFans (via Infloww), MYM and Reveal sales, newest first. Never the fans' names.

Scope read:sales · MCP tool list_sales

ParameterTypeWhere
creatorId
Only this creator's sales.
stringquery, optional
platform
Only this platform.
ONLYFANS | MYM | REVEALquery, optional
from
Sales from this instant (ISO 8601).
date-timequery, optional
to
Sales before this instant (ISO 8601).
date-timequery, optional
cursor
The nextCursor of the previous page.
stringquery, optional
limit
Page size, 1 to 50 (default 25).
integerquery, optional

GET/api/v1/stats/summary

Totals for a period, per creator and per platform, manual corrections included.

Scope read:stats · MCP tool sales_summary

ParameterTypeWhere
from
First day, YYYY-MM-DD, in the agency's time zone (default 29 days ago).
stringquery, optional
to
Last day included (default today). 366 days at most.
stringquery, optional

POST/api/v1/notifications

An in-app notification, to one creator or all of them. Quiet hours and the per-creator limit apply. 50 a day at most for the agency.

Scope write:notifications · MCP tool send_notification

ParameterTypeWhere
title
Title, 60 characters at most.
stringJSON body, required
body
Text, 240 characters at most.
stringJSON body, required
creatorId
Send to this creator only.
stringJSON body, optional
all
true to send to every active creator. Give creatorId or all, not both.
booleanJSON body, optional
linkPath
App screen to open, for example /feed.
stringJSON body, optional

GET/api/v1/shoots

Shoots planned over a period, earliest first. Never internal notes.

Scope read:shoots · MCP tool list_shoots

ParameterTypeWhere
from
Shoots starting from this instant (default now).
date-timequery, optional
to
Shoots starting before this instant (default 31 days later, 62 at most).
date-timequery, optional
creatorId
Only this creator's shoots.
stringquery, optional
status
Only shoots in this state.
SCHEDULED | DONE | CANCELEDquery, optional
cursor
The nextCursor of the previous page.
stringquery, optional
limit
Page size, 1 to 50 (default 25).
integerquery, optional

GET/api/v1/feed

Posts of the agency feed, pinned first.

Scope read:feed · MCP tool list_feed

ParameterTypeWhere
status
Only posts in this state (default everything but ARCHIVED).
DRAFT | SCHEDULED | PUBLISHED | ARCHIVEDquery, optional
cursor
The nextCursor of the previous page.
stringquery, optional
limit
Page size, 1 to 50 (default 25).
integerquery, optional

POST/api/v1/feed

Creates a feed draft. Creators see nothing until your team publishes it.

Scope write:feed · MCP tool create_feed_draft

ParameterTypeWhere
type
ANNOUNCEMENT by default.
ANNOUNCEMENT | POLL | WIN | TIP | EVENTJSON body, optional
title
Title, 120 characters at most.
stringJSON body, required
body
Text, 4,000 characters at most.
stringJSON body, optional
emoji
An emoji shown with the post.
stringJSON body, optional
audienceCreatorIds
Creators who will see it. Empty = everyone.
string[]JSON body, optional
pollOptions
Required for a POLL: 2 to 6 answers.
string[]JSON body, optional

Limits

  • 120 calls per minute per key, 600 per minute for the whole agency.
  • 50 notifications a day for the agency, across all keys. The per-creator limit set in the console applies on top.
  • Beyond that: a 429 response with a Retry-After header. Wait that many seconds.
  • 20 active keys at most per agency.

Security

  • We only keep a fingerprint of your key. Even we cannot read it back.
  • Each key is tied to your agency. The database itself refuses to show another agency's data.
  • A key only has the rights you ticked. A read key changes nothing.
  • If the admin who created it leaves the team or loses their role, the key stops working.
  • Every send and every draft is recorded in the agency's log, with the key used.
  • The API never returns e-mails, phone numbers, fan names, internal notes or files.
  • Key lost or shared by mistake? Revoke it in the console, it takes effect at once.

Ready to connect your AI?

Your first key in two minutes, from the console.