The Mirubiki API
Create a survey, launch it, read the results, run a focus group, from code. The API is the same surface the application uses. Platform administration routes are not published.
Request field names are in French (titre, contexte,
questions). They stay that way: renaming them would break every existing
integration. This page is where they are documented in English.
Before the first call
Authentication
Every call carries a key in the X-API-Key header. Keys are issued on the
API page of your dashboard, on the Enterprise and Admin plans only.
Rate limit
100 requests per minute per key by default. Above that the API answers
429 with X-RateLimit-Reset, the number of seconds to wait.
One host
Everything lives under https://www.mirubiki.com. There is no separate
US endpoint: the panel is the one the account is bound to.
curl -H "X-API-Key: mirubi...key" https://www.mirubiki.com/api/v1/surveys
Response envelope
Every endpoint answers the same shape, success or failure. There is no HTTP 200 carrying an error.
{ "data": { ... }, "error": null } // success
{ "data": null, "error": "message" } // failure
401 means the key is missing, invalid or revoked. 429 means the
limit above. 404 on a survey you do not own is the same answer as a survey
that does not exist.
Surveys
A survey is created as a draft, then launched. Results are available once the run is finished; polling the status endpoint is how you know.
/api/v1/surveysCreates a draft. Returns its id and status.
curl -X POST -H "X-API-Key: mirubi...key" \
-H "Content-Type: application/json" \
-d '{
"titre": "New checkout flow",
"contexte": "We are testing a two-step checkout against the current one.",
"questions": [
{ "texte": "Which checkout would you complete?", "type": "choix_unique", "options": ["Two-step", "Current", "Neither"] },
{ "texte": "What would stop you?", "type": "libre" }
],
"nb_personas": 50,
"filtres": { "age": ["25-34"], "sex": "F" }
}' \
https://www.mirubiki.com/api/v1/surveys
| Field | Type | What it does |
|---|---|---|
titre | string | Survey title. Optional, derived from the context when empty. |
contexte | string | What the survey is about. Optional. |
questions | array | Required. Each item carries texte, type and options. |
nb_personas | int | How many profiles answer. Default 50, between 1 and 100. |
filtres | object | Optional demographic selection. |
/api/v1/surveys/{id}/launchMoves a draft to running. A survey already running, done or failed is refused.
curl -X POST -H "X-API-Key: mirubi...key" \
https://www.mirubiki.com/api/v1/surveys/abc123/launch
/api/v1/surveys/{id}/statusStatus and progress. Poll this rather than guessing a delay.
curl -H "X-API-Key: mirubi...key" \
https://www.mirubiki.com/api/v1/surveys/abc123/status
/api/v1/surveys/{id}/resultsAnswers of a finished survey. Empty or refused while the run is in progress.
curl -H "X-API-Key: mirubi...key" \
https://www.mirubiki.com/api/v1/surveys/abc123/results
/api/v1/surveysLists your surveys, paged with limit and offset.
curl -H "X-API-Key: mirubi...key" \
"https://www.mirubiki.com/api/v1/surveys?limit=20&offset=0"
/api/v1/surveys/{id}Deletes a survey. There is no undelete.
curl -X DELETE -H "X-API-Key: mirubi...key" \
https://www.mirubiki.com/api/v1/surveys/abc123
Focus groups
Two to eight profiles discuss over rounds, moderated by the model. A session is created, then read: there is no separate launch call, turns run when you ask for the transcript.
/api/v1/focusCreates a session and selects its profiles. Returns the session id and the profiles drawn.
curl -X POST -H "X-API-Key: mirubi...key" \
-H "Content-Type: application/json" \
-d '{
"titre": "Insurance email review",
"guide": "Compare the two proposals",
"nb_personas": 4,
"max_turns": 6,
"filtres": { "sexe": "F", "ages": ["25-40"] }
}' \
https://www.mirubiki.com/api/v1/focus
| Field | Type | What it does |
|---|---|---|
titre | string | Session title. |
guide | string | Moderator guide, optional. |
nb_personas | int | Between 2 and 8, default 6. |
max_turns | int | Rounds to run, default 6. |
filtres | object | Optional: ages, sexe, densites, occupations. |
/api/v1/focusLists your sessions, paged with limit and offset.
curl -H "X-API-Key: mirubi...key" \
"https://www.mirubiki.com/api/v1/focus?limit=20&offset=0"
/api/v1/focus/{id}One session, with its profiles and settings.
curl -H "X-API-Key: mirubi...key" \
https://www.mirubiki.com/api/v1/focus/abc123
/api/v1/focus/{id}/transcriptThe discussion as text. Empty until turns have run.
curl -H "X-API-Key: mirubi...key" \
https://www.mirubiki.com/api/v1/focus/abc123/transcript
/api/v1/focus/{id}Deletes a session, its profiles and its messages. There is no undelete.
curl -X DELETE -H "X-API-Key: mirubi...key" \
https://www.mirubiki.com/api/v1/focus/abc123
API keys
Keys can be managed from code as well as from the dashboard.
/api/v1/api-keysLists the keys of the account.
curl -H "X-API-Key: mirubi...key" https://www.mirubiki.com/api/v1/api-keys
/api/v1/api-keysCreates a key. The secret is returned once: it is not readable afterwards.
curl -X POST -H "X-API-Key: mirubi...key" \
-H "Content-Type: application/json" \
-d '{"nom": "production"}' \
https://www.mirubiki.com/api/v1/api-keys
/api/v1/api-keys/{id}Revokes a key. Calls already in flight with it are refused at the next request.
curl -X DELETE -H "X-API-Key: mirubi...key" \
https://www.mirubiki.com/api/v1/api-keys/42
What the API does not do
No human panel
Nothing here fields a questionnaire to real respondents. There is no incidence, no cooperation rate, no field date.
No population estimate
Results are not a share of a population and carry no margin of error. Reporting them as one is a misuse of the tool.
Filters are selection, not quotas
filtres picks profiles from the panel. It does not weight them to match a target distribution.
Answers still need a field check
What a synthetic run is good at is finding a defective item or a wording that pushes an answer. Claim-level numbers are a different job.
For agents and integrations
The same surface, written for a machine.
- OpenAPI specification: the published surface only. Field descriptions in the spec are still in French; paths and schemas are language-neutral.
- API catalog (RFC 9727): points to this page, the spec and the status endpoint.
- auth.md: how to authenticate, what is refused, how to request access.
- /api/status: service state, in JSON.
- llms.txt: the site map written for an agent.
Last updated 18 October 2026.