API ya washirika, toleo la 1

Tathmini ndani ya tovuti yako mwenyewe

Onyesha mitihani yetu ya mazoezi kwenye kurasa zako, au tumia majaribio uliyoandika mwenyewe: seva yako inaanzisha jaribio, mtahiniwa analifanya kwenye ukurasa wako, na matokeo yanarudi kwako.

Anwani ya API
https://www.supergb.com/cbt/partner-api/v1

Jinsi yote yanavyoungana

  1. Unda funguo na uongeze tovuti zako kwenye koni.
  2. Kwa mitihani ya mazoezi, bandika kipande cha msimbo kwenye ukurasa wako.
  3. Kwa majaribio yako, seva yako inaanzisha jaribio na kupokea anwani ya kuanzia.
  4. Ukurasa wako unaifungua, mtahiniwa anafanya jaribio, na matokeo yanakufikia kupitia webhook au API.

Funguo

pk_test_ pk_live_
Funguo zinazoweza kuchapishwa huwekwa kwenye kurasa zako za wavuti. Zinafungua mitihani ya mazoezi pekee, kwenye tovuti ulizoorodhesha.
sk_test_ sk_live_
Funguo za seva zinafanya kazi kwa niaba ya shirika lako. Zihifadhi kwenye seva yako na usizitume kamwe kwa kivinjari.

Funguo za majaribio zinafanya kazi mara moja na hazihesabiwi kwenye mpango wako. Funguo za live zinahitaji akaunti yako iidhinishwe.

Mitihani ya mazoezi

Ongeza hati mara moja, kisha weka mtihani popote unapotaka. Fremu hujirekebisha yenyewe kulingana na maudhui.

<div id="gb-test"></div>
<script src="https://www.supergb.com/cbt/js/embed/v1.js"></script>
<script>
  GreenBridge.mount("#gb-test", { key: "pk_live_...", paper: "PAPER_ID" });
</script>

Mtihani ni kitambulisho kinachoonyeshwa na kijenzi cha kipande cha msimbo kwenye koni yako. Ongeza mode: "exam" kwa masharti ya mtihani wenye muda.

Majaribio yako

Andika majaribio kwenye koni chini ya Majaribio na uyafungue. Mtahiniwa akiwa tayari, seva yako inaanzisha jaribio:

curl -X POST https://www.supergb.com/cbt/partner-api/v1/sessions \
  -H "Authorization: Bearer $GREEN_BRIDGE_KEY" \
  -H "Content-Type: application/json" \
  -d '{"test_id": "TEST_ID", "language": "fr", "candidate": {"id": "learner-42", "name": "Ada Obi", "email": "ada@example.com"}}'

candidate.id ni kitambulisho chako mwenyewe cha mtu huyo, hadi herufi 128. Jina na barua pepe si lazima; tunahifadhi tu unachotuma.

language si lazima: mojawapo ya de, en, es, fr, yo, ig, ha, nl, pt, sw. Vitufe, kipima muda na ujumbe wa jaribio vitaonekana kwa lugha hiyo; maswali yako yatabaki kama ulivyoyaandika. Bila sehemu hii, jaribio litakuwa kwa Kiingereza.

Jibu lina anwani ya kuanzia inayofanya kazi mara moja, ndani ya dakika 10. Ifungue kwenye ukurasa wako:

HTTP/1.1 201 Created

{
  "attempt_id": "att_...",
  "launch_token": "lt_...",
  "launch_url": "https://www.supergb.com/cbt/fr/embed/v1/test?launch=lt_...",
  "launch_expires_at": "2026-10-23T09:10:00Z",
  "live": true,
  "language": "fr"
}
<div id="gb-test"></div>
<script src="https://www.supergb.com/cbt/js/embed/v1.js"></script>
<script>
  GreenBridge.mountTest("#gb-test", {
    launchUrl: "LAUNCH_URL_FROM_YOUR_SERVER",
    onEvent: function (event) {
      if (event.type === "submitted") {
        showThanks(event.detail.attempt_id);
      }
    }
  });
</script>

Baada ya kufunguliwa, jaribio hudumu hadi saa 24 na kupakia upya kunaliendeleza. Kila mtahiniwa hufanya kila jaribio mara moja.

Kuorodhesha majaribio yako na vitambulisho vyake:

curl https://www.supergb.com/cbt/partner-api/v1/tests -H "Authorization: Bearer $GREEN_BRIDGE_KEY"

Ujumbe kutoka kwenye fremu

onEvent hupokea hizi, kutoka kwenye fremu yetu pekee:

TukioMaana
readyUkurasa umepakia.
resizeUrefu wa maudhui umebadilika. Fremu inafuata yenyewe.
completedMtihani wa mazoezi umesahihishwa. detail ina score na max_score.
submittedJaribio limewasilishwa. detail ina attempt_id. Pata matokeo kutoka kwenye seva yako, si kwenye kivinjari.

Matokeo

Majaribio yaliyowasilishwa, mapya kwanza, 50 kwa kila ukurasa. Chuja kwa test_id, candidate_id au vyote viwili.

curl "https://www.supergb.com/cbt/partner-api/v1/attempts?test_id=TEST_ID&page=0" -H "Authorization: Bearer $GREEN_BRIDGE_KEY"
curl https://www.supergb.com/cbt/partner-api/v1/attempts/ATTEMPT_ID -H "Authorization: Bearer $GREEN_BRIDGE_KEY"

Jaribio linaonekana hivi. questions hujumuishwa kuanzia mpango wa Growth.

{
  "id": "att_...",
  "test_id": "TEST_ID",
  "candidate_id": "learner-42",
  "live": true,
  "language": "fr",
  "started_at": "2026-10-23T09:02:11Z",
  "submitted_at": "2026-10-23T09:41:57Z",
  "integrity_events": 0,
  "score": 34.0,
  "max_score": 40.0,
  "percent": 85.0,
  "grading_status": "fully_graded",
  "questions": [
    {"question_id": "q1", "type": "multiple_choice_question", "score": 1.0, "max_score": 1.0}
  ]
}

grading_status ni fully_graded wakati hakuna kilichobaki cha kusahihisha kwa mkono, vinginevyo pending_manual_review au pending_transcription.

Webhook

Ongeza hadi anwani 5 za https kwenye koni yako. Kila tukio hutumwa kama POST iliyotiwa saini na hujaribiwa tena kwa siku 3 hadi seva yako ijibu kwa hali ya 2xx.

TukioMaana
attempt.startedMtahiniwa amefungua jaribio.
attempt.submittedMtahiniwa amewasilisha.
attempt.gradedAlama zote ni za mwisho. Hutumwa tena kila alama inapobadilika.
attempt.integrity_flaggedMtahiniwa ameondoka kwenye jaribio au amejaribu kunakili au kubandika mara 3.
pingTukio la majaribio lililotumwa kutoka kwenye koni yako.
POST /hooks/green-bridge
Content-Type: application/json
Green-Bridge-Event: attempt.graded
Green-Bridge-Delivery: whd_...
Green-Bridge-Signature: t=1792834917,v1=5f0c...

{
  "id": "evt_graded_att_..._1",
  "type": "attempt.graded",
  "created_at": "2026-10-23T10:21:57Z",
  "data": { "id": "att_...", "candidate_id": "learner-42", "score": 34.0, "max_score": 40.0, "grading_status": "fully_graded" }
}

Kitambulisho cha tukio hakibadiliki, kwa hivyo unaweza kupuuza kwa usalama tukio ulilokwisha kushughulikia.

Kukagua saini

Kokotoa HMAC-SHA256 ya t, nukta moja na mwili wa ombi kama ulivyo, kwa siri yako ya kutia saini, kisha ulinganishe na v1. Kataa muhuri wa muda uliozidi dakika tano.

Node.js

const crypto = require("crypto");

function isFromGreenBridge(header, rawBody, secret) {
  const parts = Object.fromEntries(header.split(",").map(part => part.split("=")));
  if (!parts.t || !parts.v1 || Math.abs(Date.now() / 1000 - Number(parts.t)) > 300) {
    return false;
  }
  const expected = crypto.createHmac("sha256", secret).update(parts.t + "." + rawBody).digest("hex");
  return expected.length === parts.v1.length
    && crypto.timingSafeEqual(Buffer.from(expected), Buffer.from(parts.v1));
}

Python

import hashlib, hmac, time

def is_from_green_bridge(header, raw_body, secret):
    parts = dict(part.split("=", 1) for part in header.split(","))
    if "t" not in parts or abs(time.time() - int(parts["t"])) > 300:
        return False
    signed = parts["t"].encode() + b"." + raw_body
    expected = hmac.new(secret.encode(), signed, hashlib.sha256).hexdigest()
    return hmac.compare_digest(expected, parts.get("v1", ""))

Hitilafu

Hitilafu hurudi kama JSON yenye msimbo usiobadilika:

HTTP/1.1 404 Not Found

{"error": {"code": "test_not_found"}}
Msimbo HTTP Maana
invalid_key 401 Ufunguo haupo, haujulikani au umebatilishwa.
partner_suspended 403 Akaunti yako imesimamishwa. Wasiliana nasi.
live_keys_need_approval 403 Funguo za live hufanya kazi akaunti yako ikishaidhinishwa.
not_on_plan 403 Mpango wako haujumuishi hiki.
test_not_found 404 Hakuna jaribio lako lenye kitambulisho hicho.
attempt_not_found 404 Hakuna jaribio lililofanywa lako lenye kitambulisho hicho.
candidate_not_found 404 Huna mtahiniwa mwenye kitambulisho hicho.
test_not_open 409 Jaribio bado halijafunguliwa au limefungwa.
already_submitted 409 Mtahiniwa huyu amekwisha kuwasilisha jaribio hili.
invalid_request 400 Sehemu fulani haipo au haiko katika muundo unaotarajiwa.
monthly_limit_reached 429 Kiwango cha mwezi huu kimeisha. Funguo za majaribio bado zinafanya kazi.
internal_error 500 Kuna hitilafu upande wetu. Jaribu tena.

Mipaka na data

  • Hadi maombi 300 kwa dakika kwa kila ufunguo wa seva. Zaidi ya hapo jibu ni 429 bila maudhui; subiri dakika moja ujaribu tena.
  • Majaribio ya live na usahihishaji wa AI huhesabiwa kwenye kiwango cha kila mwezi cha mpango wako. Majaribio yaliyoanzishwa kwa ufunguo wa majaribio hayahesabiwi.

Data yako

Tunachohifadhi kuhusu majaribio na watahiniwa wako, kwa muda gani, na jinsi ya kukirejesha.

Majaribio na maswali yako
Huhifadhiwa hadi uyafute au ufunge akaunti yako.
Watahiniwa
Kitambulisho unachotuma, na jina na barua pepe ikiwa tu unazituma. Huhifadhiwa kwa mwaka mmoja tangu mtahiniwa alipoonekana mara ya mwisho.
Majaribio yaliyofanywa na matokeo
Majibu, rekodi, alama na matukio ya uadilifu. Huhifadhiwa kwa mwaka mmoja tangu jaribio lilipoanza, kisha hufutwa.
Mitihani ya mazoezi
Huhifadhiwa kwa mwaka mmoja, ili kuhesabu matumizi yako tu. Alama hufika kwenye ukurasa wako katika tukio la completed.
Uwasilishaji wa webhook
Huhifadhiwa kwa siku 30, kwenye kumbukumbu ya uwasilishaji ya dashibodi yako.
Matumizi ya API
Hesabu za kila siku kwa kila ufunguo, huhifadhiwa kwa siku 400, kwenye skrini ya Matumizi ya dashibodi yako.

Pata matokeo wakati wowote kwa GET /attempts. Kwenye mipango ya Growth na Institution unaweza pia kupakua matokeo ya kila jaribio kama CSV kutoka kwenye menyu ya jaribio katika dashibodi yako: mstari mmoja kwa kila jaribio lililofanywa pamoja na alama ya kila swali, na jibu la mtahiniwa kwa maswali uliyoandika. Maswali kutoka benki ya maswali ya Green Bridge huonyesha alama zao tu.

Ili kumfuta mtahiniwa mmoja mapema:

curl -X POST https://www.supergb.com/cbt/partner-api/v1/candidates/erase \
  -H "Authorization: Bearer $GREEN_BRIDGE_KEY" \
  -H "Content-Type: application/json" \
  -d '{"candidate_id": "learner-42"}'

Matokeo ambayo mtahiniwa anahifadhi kwenye akaunti yake mwenyewe ya Green Bridge ni yake kuanzia hapo. Kumfuta mtahiniwa au kufunga akaunti yako hakuyaondoi.

Mmiliki wa akaunti yako anaweza kuifunga chini ya Tovuti na funguo. Funguo na webhook husimama mara moja na kila kitu kilicho hapo juu hufutwa ndani ya siku moja, kwa hivyo pakua unachohitaji kwanza.

Ahadi zinazosimamia hili zimo katika Washirika na Uchakataji wa Data katika Sheria na Masharti yetu.

Unahitaji kitu ambacho mipango haijumuishi? Tumia Wasiliana nasi kwenye skrini ya Mpango kwenye koni yako.