Skip to content

Doelstellingen

Twee endpoints om doelstellingen naar SalesDash te schrijven vanuit de plek waar je ze plant — een spreadsheet, een HR-systeem, je eigen planningstool.

  • POST /goal maakt of werkt een doelstelling bij voor één of meer teams.
  • POST /agent-goal zet de persoonlijke doelstelling van één agent voor een week, maand, kwartaal of jaar.

Allebei zijn het upserts: stuur dezelfde doelstelling nog eens en je werkt bij wat er al staat in plaats van er een tweede naast te zetten. Daardoor kun je ze veilig op een schema laten lopen.

Allebei weigeren ze met een 422 een metric die geen cijfer per agent heeft — dezelfde metrics die metric-scores weigert. Filter je metriclijst op can_rank: true en je loopt bijna geen enkele daarvan tegen het lijf. Een paar soorten metrics kunnen sowieso geen doelstelling dragen, hoe ze ook ranken — een getrapte metric bijvoorbeeld, waar een doelstelling tussen twee treden in valt en dus niets betekent — en die zeggen dat in de 422.

Eerst de eenheid

value is een kaal getal, en SalesDash neemt aan wat je stuurt. Stuur je de verkeerde eenheid, dan klaagt er niets — de doelstelling staat dan gewoon op een honderdste van wat je bedoelde, of duizend keer zo hoog, tot iemand ziet dat de voortgangsbalk nergens op slaat.

De twee endpoints zijn het onderling oneens over geld. Leg deze tabel naast de display_mode uit de metriclijst voordat je iets stuurt:

display_modePOST /goal (team)POST /agent-goal (persoonlijk)
currencyEuro's — 50000 is €50.000Centen5000000 is €50.000
durationSeconden — 7200 is twee uurSeconden — 7200 is twee uur
percentageEen fractie — 0.4 is 40%Een fractie — 0.4 is 40%
number, score, ratio, rawHet getal zoals de metric het meldtHet getal zoals de metric het meldt

Tijd sluit overal op elkaar aan: een duur-doelstelling staat in seconden, dezelfde eenheid die metric-scores meldt, dus een cijfer gaat één-op-één van het een naar het ander. Geld niet — een bedrag staat in euro's bij een team en in centen bij een persoon.

Controleer een doelstelling nadat je hem voor het eerst wegschrijft

Open hem in de admin, of op het profiel van de agent, en kijk of het bedrag staat zoals je het bedoelde. Dit is de meest voorkomende manier waarop een doelstellingskoppeling stilletjes misgaat, en het verschil tussen €500 en €50.000 zie je niet aan het verzoek zelf.

Een doelstelling voor teams zetten

POST /integrations/api/v1/goal
Content-Type: application/json
json
{
  "name": "Q4 contractwaarde",       // Verplicht
  "metric_id": 2,                    // Verplicht
  "active_from": "2026-10-01",       // Verplicht
  "active_to": "2026-12-31",         // Verplicht, op of na active_from
  "team_goals": [                    // Verplicht, minstens één team
    { "team_id": 2, "value": 500000 },
    { "team_id": 3, "value": 350000 }
  ]
}
json
{
  "message": "Goal created successfully.",
  "goal_id": 3
}

Je krijgt 201 als de doelstelling is aangemaakt en 200 als een bestaande is bijgewerkt, en het bericht zegt welke van de twee.

De naam is de identiteit. SalesDash zoekt op name over al je doelstellingen, dus dezelfde naam opnieuw sturen werkt die doelstelling bij — de periode, de metric en de teamwaarden gaan allemaal mee naar wat je zojuist stuurde. Twee doelstellingen die uit elkaar moeten blijven hebben twee verschillende namen nodig, en een naam die je hergebruikt voor iets anders overschrijft de oude in plaats van er een toe te voegen.

De waarde 0 haalt de doelstelling van dat team weg, net als het veld leegmaken in de admin. Zo haal je een team van een doelstelling af zonder de doelstelling zelf te verwijderen.

Gemiddelden en ratio's kunnen maar één team dragen

Een metric die middelt of deelt — gemiddelde contractwaarde, conversiepercentage — kun je niet over teams verdelen, omdat de uitkomsten niet bij elkaar op te tellen zijn tot een geheel. Stuur je voor zo'n metric meer dan één team met een waarde boven nul, dan krijg je een 422. Geef hem één team, of maak een doelstelling per team.

De doelstelling verschijnt onder Doelstellingen in de admin, waar je de onderdelen kunt toevoegen die dit endpoint bewust laat liggen — muntbeloningen en opvolgende doelstellingen.

Een persoonlijke doelstelling zetten

POST /integrations/api/v1/agent-goal
Content-Type: application/json
json
{
  "agent_id": 7,       // Verplicht
  "metric_id": 2,      // Verplicht
  "value": 5000000,    // Verplicht — let op de eenhedentabel hierboven
  "month": "2026-09"   // Verplicht: precies één van week, month, quarter, year
}

Noem precies één periode. Er geen noemen, of er twee noemen, levert een 422 op — een doelstelling zonder periode is er een die niemand kan dateren en niemand ooit terugvindt.

PeriodeWat je stuurtWat je terugkrijgt
weekEen datum in die week — 2026-09-16De maandag van die week — 2026-09-14
month2026-092026-09
quarterEen maand in dat kwartaal — 2026-09De eerste maand van het kwartaal — 2026-07
year20262026

Elke datum binnen de periode werkt: stuur 2026-09-14 als month en hij landt op september, precies alsof je 2026-09 had gestuurd. Je kunt dus een echte datum uit je eigen systeem doorgeven zonder eerst uit te rekenen bij welke week of welk kwartaal die hoort — maar lees de waarde terug, want het is niet de tekst die je stuurde.

Het antwoord is de opgeslagen doelstelling:

json
{
  "data": {
    "unit": "euro",
    "display_mode": "currency",
    "year": null,
    "quarter": null,
    "month": "2026-09",
    "week": null,
    "value": 5000000,
    "is_locked": false
  }
}

Lees month/quarter/week/year terug om te zien op welke periode je werkelijk uitkwam, en value om te zien of de eenheid is geworden wat je bedoelde.

Eén persoonlijke doelstelling per agent per periode

Een agent heeft één doelstelling per periode, niet één per metric. Een doelstelling voor september zetten vervangt wat er stond — ook een doelstelling op een andere metric. Lees het antwoord terug als dat voor jou uitmaakt.

Het slot van één uur geldt hier niet. In de app kan een agent zijn eigen doelstelling alleen binnen een uur na het zetten nog wijzigen, zodat resultaten niet achteraf passend gemaakt kunnen worden. Een API sleutel hoort bij een admin, dus dit endpoint schrijft sowieso — wat je wilt voor een geplande synchronisatie, en goed om te weten als agents daarnaast zelf doelstellingen zetten.

actual en is_locked komen mee als onderdeel van de doelstelling, maar zijn bedoeld voor de schermen van de app zelf; actual wordt hier niet ingevuld. Wil je zien hoe een agent ervoor staat, vraag dan metric-scores op voor dezelfde metric over dezelfde datums.