For AI agents: a documentation index is available at https://developers.jarsave.com/llms.txt, this page as Markdown at https://developers.jarsave.com/certificates.md, and the OpenAPI description at https://developers.jarsave.com/openapi.json.
The certificate object
v1The certificate a student gets for finishing a course or passing a level. In JarSave it becomes a lasting entry in the child's record, so send the file the family would print, and a page that proves it is real.
Attributes
certificate_no string Required
The number printed on the certificate. It is the item's id.
course_id string Required
Your id for the course.
course_name string Required
The course or level as printed, for example Junior Coding 2.
subject string Required
What the course teaches, in one or two words: Coding, English, Piano.
level string, nullable
The level as printed, for example Level 2 or A2 Flyers.
started_on date Required
The first day of the course.
completed_on date Required
The day the student finished it.
issued_on date Required
The date printed on the certificate.
study_hours number Required
The course's teaching hours, as you publish them, for example 20.
final_grade string, nullable
The overall grade, only if the certificate prints one.
rank string, nullable
A place or distinction, only if the certificate prints one, for example 1st place.
issuer string Required
The course provider's legal name, as printed.
file_url string Required
The certificate as PDF or PNG. See files.
verify_url string, nullable
A public page on your site that confirms this certificate. A course that issues verifiable digital badges can send that badge's link.
The certificate object
{
"certificate_no": "EXA-2026-004517",
"course_id": "crs_junior_coding_2",
"course_name": "Junior Coding 2",
"subject": "Coding",
"level": "Level 2",
"started_on": "2026-09-03",
"completed_on": "2027-01-28",
"issued_on": "2027-02-01",
"study_hours": 20,
"final_grade": "A",
"rank": null,
"issuer": "PT Contoh Akademi Digital",
"file_url": "https://files.academy.example/c/004517.pdf?sig=...",
"verify_url": "https://academy.example/verify/EXA-2026-004517"
}Send a certificate
POST /v1/links/:id/certificates
Send a certificate when it is issued. For the history, send every certificate the student already has when the link becomes active.
Parameters
The certificate object's attributes, one certificate per request.
Returns
The item with its JarSave id, link, status and received.
Request
curl https://api.jarsave.com/v1/links/lnk_8Gm2QxT4/certificates \
-H "Authorization: Bearer $JARSAVE_SECRET_KEY" \
-H "JarSave-Version: 2026-10-29" \
-H "Content-Type: application/json" \
-d @certificate.jsonuse Illuminate\Support\Facades\Http;
// config/services.php: 'jarsave' => ['key' => env('JARSAVE_SECRET_KEY')]
// $certificate: an array with the fields shown above
$response = Http::withToken(config('services.jarsave.key'))
->withHeaders(['JarSave-Version' => '2026-10-29'])
->post('https://api.jarsave.com/v1/links/lnk_8Gm2QxT4/certificates', $certificate);// certificate: an object with the fields shown above
const response = await fetch("https://api.jarsave.com/v1/links/lnk_8Gm2QxT4/certificates", {
method: "POST",
headers: {
Authorization: `Bearer ${process.env.JARSAVE_SECRET_KEY}`,
"JarSave-Version": "2026-10-29",
"Content-Type": "application/json",
},
body: JSON.stringify(certificate),
});
const result = await response.json();import os
import requests
# certificate: a dict with the fields shown above
response = requests.post(
"https://api.jarsave.com/v1/links/lnk_8Gm2QxT4/certificates",
headers={
"Authorization": f"Bearer {os.environ['JARSAVE_SECRET_KEY']}",
"JarSave-Version": "2026-10-29",
},
json=certificate,
timeout=30,
)
result = response.json()Response
{
"id": "itm_9Tq4Ze7A",
"object": "certificate",
"link": "lnk_8Gm2QxT4",
"certificate_no": "EXA-2026-004517",
"status": "pending",
"received": "2027-02-01T09:02:31+07:00"
}