Overzicht

Een campagne stuurt de prompts van een thema naar een of meer LLM-modellen en haalt de merkvermeldingen uit de antwoorden. Credits worden verbruikt bij het starten, op basis van het aantal prompts en de slotkosten van de modellen — uitvoeringen per model worden NIET apart in credits gefactureerd.

Endpoints

MethodePadBeschrijving
GET/brands/{brandId}/campaignsCampagnes weergeven
POST/brands/{brandId}/campaignsEen campagne starten
GET/brands/{brandId}/campaigns/{campaignId}Status van een campagne opvragen

GET /brands//campaigns

Geeft alle campagnes van een merk weer, gesorteerd op aanmaakdatum (nieuwste eerst).

Queryparameters

ParameterTypeStandaardBeschrijving
limitinteger50Maximumaantal resultaten (max. 200)
offsetinteger0Offset voor paginering
curl "https://mentova.ai/api/v1/brands/clxabc123/campaigns?limit=10" \
  -H "X-API-Key: mtv_live_votre_cle"

Antwoord 200

{
  "data": [
    {
      "id": "clxcampaign1",
      "status": "COMPLETED",
      "createdAt": "2026-06-01T09:00:00.000Z",
      "completedAt": "2026-06-01T09:08:00.000Z",
      "models": ["GPT4O_MINI", "CLAUDE_HAIKU"],
      "runsPerModel": 3,
      "topic": {
        "id": "clxtopic1",
        "seed": "Quel est le meilleur outil de gestion de projet pour les équipes à distance ?"
      },
      "_count": { "runs": 6 }
    }
  ],
  "total": 12,
  "limit": 10,
  "offset": 0
}

POST /brands//campaigns

Start een nieuwe campagne voor een thema. De campagne wordt asynchroon verwerkt.

Aanvraagbody

VeldTypeVerplichtBeschrijving
topicIdstringJaID van het thema waarvoor de campagne wordt gestart
modelsstring[]NeeEnum-waarden van de te gebruiken LLM-modellen. Standaard: de voor het merk geselecteerde modellen
runsPerModelintegerNeeAantal uitvoeringen per model (1-20). Standaard: abonnementsinstelling (3 op alle abonnementen)
maxPromptsintegerNeeMaximumaantal op te nemen prompts. Standaard: alle prompts van het thema
curl -X POST https://mentova.ai/api/v1/brands/clxabc123/campaigns \
  -H "X-API-Key: mtv_live_votre_cle" \
  -H "Content-Type: application/json" \
  -d '{
    "topicId": "clxtopic1",
    "models": ["GPT4O_MINI", "CLAUDE_HAIKU"],
    "runsPerModel": 3
  }'

Antwoord 201

{
  "data": {
    "id": "clxcampaign2",
    "status": "PENDING",
    "createdAt": "2026-06-01T10:00:00.000Z",
    "completedAt": null,
    "models": ["GPT4O_MINI", "CLAUDE_HAIKU"],
    "runsPerModel": 3,
    "topic": {
      "id": "clxtopic1",
      "seed": "Quel est le meilleur outil de gestion de projet pour les équipes à distance ?"
    },
    "_count": { "runs": 0 }
  }
}

Fouten

HTTPcodeOorzaak
404NOT_FOUNDThema niet gevonden of behoort niet tot dit merk
422QUOTA_EXCEEDEDOnvoldoende credits om de campagne te starten
422VALIDATION_ERROROngeldige aanvraagbody

GET /brands//campaigns/

Haalt de huidige status en details van een campagne op. Raadpleeg dit endpoint om de voortgang te volgen.

curl https://mentova.ai/api/v1/brands/clxabc123/campaigns/clxcampaign2 \
  -H "X-API-Key: mtv_live_votre_cle"

Antwoord 200

{
  "data": {
    "id": "clxcampaign2",
    "status": "RUNNING",
    "createdAt": "2026-06-01T10:00:00.000Z",
    "completedAt": null,
    "models": ["GPT4O_MINI", "CLAUDE_HAIKU"],
    "runsPerModel": 3,
    "topic": {
      "id": "clxtopic1",
      "seed": "Quel est le meilleur outil de gestion de projet pour les équipes à distance ?"
    },
    "_count": { "runs": 4 }
  }
}

Statuswaarden

StatusBeschrijving
PENDINGGeaccepteerd, wacht om de verwerkingswachtrij in te gaan
QUEUEDOpgepikt door de worker, wacht op een uitvoeringsslot
RUNNINGLLM-aanroepen worden uitgevoerd
COMPLETEDAlle uitvoeringen voltooid, vermeldingen geëxtraheerd
FAILEDVerwerkingsfout - credits worden terugbetaald
TIMEOUTDe worker is verlopen (timeout) - credits worden terugbetaald

Pollingpatroon

const API_KEY = "mtv_live_votre_cle";
const BASE = "https://mentova.ai/api/v1";

// Lancer
const { data: campaign } = await fetch(`${BASE}/brands/${brandId}/campaigns`, {
  method: "POST",
  headers: { "X-API-Key": API_KEY, "Content-Type": "application/json" },
  body: JSON.stringify({ topicId }),
}).then(r => r.json());

// Interroger jusqu'à la fin
let status = campaign.status;
while (status === "PENDING" || status === "QUEUED" || status === "RUNNING") {
  await new Promise(r => setTimeout(r, 5000));
  const { data } = await fetch(
    `${BASE}/brands/${brandId}/campaigns/${campaign.id}`,
    { headers: { "X-API-Key": API_KEY } }
  ).then(r => r.json());
  status = data.status;
}