curl --request GET \
--url https://api.orbit.devotel.io/api/v1/quality/gamification/me \
--header 'Authorization: Bearer <token>'import requests
url = "https://api.orbit.devotel.io/api/v1/quality/gamification/me"
headers = {"Authorization": "Bearer <token>"}
response = requests.get(url, headers=headers)
print(response.text)const options = {method: 'GET', headers: {Authorization: 'Bearer <token>'}};
fetch('https://api.orbit.devotel.io/api/v1/quality/gamification/me', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://api.orbit.devotel.io/api/v1/quality/gamification/me",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "GET",
CURLOPT_HTTPHEADER => [
"Authorization: Bearer <token>"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"net/http"
"io"
)
func main() {
url := "https://api.orbit.devotel.io/api/v1/quality/gamification/me"
req, _ := http.NewRequest("GET", url, nil)
req.Header.Add("Authorization", "Bearer <token>")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.get("https://api.orbit.devotel.io/api/v1/quality/gamification/me")
.header("Authorization", "Bearer <token>")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.orbit.devotel.io/api/v1/quality/gamification/me")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Get.new(url)
request["Authorization"] = 'Bearer <token>'
response = http.request(request)
puts response.read_body{
"data": {
"window": {
"from": "2026-08-12T09:00:00.000Z",
"to": "2026-08-19T09:00:00.000Z",
"period": "week"
},
"rules_source": "default",
"me": {
"agentId": "user_2mN4zR7Ld",
"agentName": "Dana Okafor",
"rank": 1,
"totalAgents": 24,
"totalPoints": 337,
"breakdown": [
{
"ruleId": "calls-volume",
"label": "Calls handled",
"points": 236
},
{
"ruleId": "qa-quality",
"label": "QA score",
"points": 55
},
{
"ruleId": "csat-satisfaction",
"label": "Customer satisfaction",
"points": 26
},
{
"ruleId": "aht-efficiency",
"label": "Efficient handle time",
"points": 20
}
],
"badges": [
{
"id": "top-performer",
"name": "Top Performer",
"description": "Ranked #1 on the leaderboard for this period.",
"icon": "trophy"
}
],
"metrics": {
"agentId": "user_2mN4zR7Ld",
"agentName": "Dana Okafor",
"callsHandled": 118,
"avgHandleSeconds": 264,
"qaCount": 7,
"avgQaScore": 92.14,
"csatCount": 31,
"avgCsat": 4.4
},
"hasActivity": true
}
},
"meta": {
"request_id": "req_1a2b3c4d5e",
"timestamp": "2026-08-19T09:00:00.000Z"
}
}{
"error": {
"code": "<string>",
"message": "<string>",
"status": 123,
"details": {}
},
"meta": {
"request_id": "<string>",
"timestamp": "2023-11-07T05:31:56Z",
"docs_url": "<string>"
}
}{
"error": {
"code": "<string>",
"message": "<string>",
"status": 123,
"details": {}
},
"meta": {
"request_id": "<string>",
"timestamp": "2023-11-07T05:31:56Z",
"docs_url": "<string>"
}
}{
"error": {
"code": "<string>",
"message": "<string>",
"status": 123,
"details": {}
},
"meta": {
"request_id": "<string>",
"timestamp": "2023-11-07T05:31:56Z",
"docs_url": "<string>"
}
}{
"error": {
"code": "<string>",
"message": "<string>",
"status": 123,
"details": {}
},
"meta": {
"request_id": "<string>",
"timestamp": "2023-11-07T05:31:56Z",
"docs_url": "<string>"
}
}{
"error": {
"code": "<string>",
"message": "<string>",
"status": 123,
"details": {}
},
"meta": {
"request_id": "<string>",
"timestamp": "2023-11-07T05:31:56Z",
"docs_url": "<string>"
}
}{
"error": {
"code": "RATE_LIMITED",
"message": "<string>",
"status": 429,
"retry_after": 2
},
"meta": {
"request_id": "<string>",
"timestamp": "2023-11-07T05:31:56Z",
"docs_url": "<string>"
}
}{
"error": {
"code": "<string>",
"message": "<string>",
"status": 123,
"details": {}
},
"meta": {
"request_id": "<string>",
"timestamp": "2023-11-07T05:31:56Z",
"docs_url": "<string>"
}
}Get my gamification card
An agent reads THEIR OWN performance card — points, earned badges, and anonymised org rank — for a named lookback period (defaults to week). The rank is computed against the full org roster with the DEFAULT ruleset, identical to the supervisor default board, so an agent’s rank can never disagree with the supervisor view; only the caller’s own slice is returned, never another agent’s identity. Any authenticated agent scope: reviewer-scope roles (owner / admin / supervisor) may pass agent_id to inspect another agent, while a non-reviewer asking for someone else’s card gets a 403.
curl --request GET \
--url https://api.orbit.devotel.io/api/v1/quality/gamification/me \
--header 'Authorization: Bearer <token>'import requests
url = "https://api.orbit.devotel.io/api/v1/quality/gamification/me"
headers = {"Authorization": "Bearer <token>"}
response = requests.get(url, headers=headers)
print(response.text)const options = {method: 'GET', headers: {Authorization: 'Bearer <token>'}};
fetch('https://api.orbit.devotel.io/api/v1/quality/gamification/me', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://api.orbit.devotel.io/api/v1/quality/gamification/me",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "GET",
CURLOPT_HTTPHEADER => [
"Authorization: Bearer <token>"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"net/http"
"io"
)
func main() {
url := "https://api.orbit.devotel.io/api/v1/quality/gamification/me"
req, _ := http.NewRequest("GET", url, nil)
req.Header.Add("Authorization", "Bearer <token>")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.get("https://api.orbit.devotel.io/api/v1/quality/gamification/me")
.header("Authorization", "Bearer <token>")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.orbit.devotel.io/api/v1/quality/gamification/me")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Get.new(url)
request["Authorization"] = 'Bearer <token>'
response = http.request(request)
puts response.read_body{
"data": {
"window": {
"from": "2026-08-12T09:00:00.000Z",
"to": "2026-08-19T09:00:00.000Z",
"period": "week"
},
"rules_source": "default",
"me": {
"agentId": "user_2mN4zR7Ld",
"agentName": "Dana Okafor",
"rank": 1,
"totalAgents": 24,
"totalPoints": 337,
"breakdown": [
{
"ruleId": "calls-volume",
"label": "Calls handled",
"points": 236
},
{
"ruleId": "qa-quality",
"label": "QA score",
"points": 55
},
{
"ruleId": "csat-satisfaction",
"label": "Customer satisfaction",
"points": 26
},
{
"ruleId": "aht-efficiency",
"label": "Efficient handle time",
"points": 20
}
],
"badges": [
{
"id": "top-performer",
"name": "Top Performer",
"description": "Ranked #1 on the leaderboard for this period.",
"icon": "trophy"
}
],
"metrics": {
"agentId": "user_2mN4zR7Ld",
"agentName": "Dana Okafor",
"callsHandled": 118,
"avgHandleSeconds": 264,
"qaCount": 7,
"avgQaScore": 92.14,
"csatCount": 31,
"avgCsat": 4.4
},
"hasActivity": true
}
},
"meta": {
"request_id": "req_1a2b3c4d5e",
"timestamp": "2026-08-19T09:00:00.000Z"
}
}{
"error": {
"code": "<string>",
"message": "<string>",
"status": 123,
"details": {}
},
"meta": {
"request_id": "<string>",
"timestamp": "2023-11-07T05:31:56Z",
"docs_url": "<string>"
}
}{
"error": {
"code": "<string>",
"message": "<string>",
"status": 123,
"details": {}
},
"meta": {
"request_id": "<string>",
"timestamp": "2023-11-07T05:31:56Z",
"docs_url": "<string>"
}
}{
"error": {
"code": "<string>",
"message": "<string>",
"status": 123,
"details": {}
},
"meta": {
"request_id": "<string>",
"timestamp": "2023-11-07T05:31:56Z",
"docs_url": "<string>"
}
}{
"error": {
"code": "<string>",
"message": "<string>",
"status": 123,
"details": {}
},
"meta": {
"request_id": "<string>",
"timestamp": "2023-11-07T05:31:56Z",
"docs_url": "<string>"
}
}{
"error": {
"code": "<string>",
"message": "<string>",
"status": 123,
"details": {}
},
"meta": {
"request_id": "<string>",
"timestamp": "2023-11-07T05:31:56Z",
"docs_url": "<string>"
}
}{
"error": {
"code": "RATE_LIMITED",
"message": "<string>",
"status": 429,
"retry_after": 2
},
"meta": {
"request_id": "<string>",
"timestamp": "2023-11-07T05:31:56Z",
"docs_url": "<string>"
}
}{
"error": {
"code": "<string>",
"message": "<string>",
"status": 123,
"details": {}
},
"meta": {
"request_id": "<string>",
"timestamp": "2023-11-07T05:31:56Z",
"docs_url": "<string>"
}
}Authorizations
Dashboard JWT token from Clerk
Headers
Sandbox opt-in for Clerk-session-authenticated requests. Set to true to route the call through the test-mode pipeline: no real provider delivery, no credits deducted, response meta.test_mode: true. Ignored for live API keys (dv_live_sk_*) — server-to-server clients must use a test-prefixed key (dv_test_sk_*) to exercise sandbox. Test-prefixed keys unconditionally enable sandbox regardless of this header.
true, false Response
The caller's own performance card for the resolved window: points, earned badges and anonymised org rank. Only the caller's slice is returned — no other agent's identity is exposed.