Result declared → one statement per student, the same day

The examination system has the marks. The student needs a document an employer will believe.

Trigger → artefact

A result is declared for a cohorta statement of marks per student, with the result derived from the marks

Every institution has the marks in a table already. What takes the weeks is the document: one per student, each with its own grades, its own credit arithmetic, its own average — and a mistake in any of them is one a family notices and a registrar has to answer for.

Here the caller sends the marks and the grade scale. The document computes the percentage, picks the band, weights the grade points by credits, and states the result in words. Send a grade or an SGPA of your own and the render is refused with the field named, because a grade typed by the payload is a grade nobody downstream can verify.

Built with the HTML API. Need a designed image or certificate instead? Use the Canvas API — same data, same free year.

A statement of marks PDF rendered by PixlDocs, showing subject grades, SGPA and the derived result
Statement of marks — rendered by the template this page calls.

What ships in this category

The documents, and the part of each that is hard.

A statement of marks PDF rendered by PixlDocs, showing subject grades, SGPA and the derived result

Statement of marks

Subject-wise internal and external marks, credits, the derived percentage and grade, the credit-weighted SGPA and CGPA, credits earned, and the pass-or-reappear result — with the grade scale printed so the reader can repeat the derivation.

Hard part The credit-weighted SGPA and the pass-or-reappear result, derived from the marks and the scale — never sent by the caller.

template_id 33a5725e-1e53-4ad1-b4a5-58c5ae7f50ce

A certificate of completion PDF rendered by PixlDocs, with the learner name, programme and a verification QR code

Certificate of completion

The document a learner shares: programme, completion date, study hours, result and credential id, with the assessments that were passed listed underneath and a QR to the verification page.

Hard part A credential id and verification URL printed as a QR the issuer controls, so the certificate can be checked years later.

template_id 86e6ac36-875c-4518-b175-6feb1685c2d1

The whole integration

One call. Named fields. No SDK to install.

the call your product makesbash
# once per student, when the result is declared
curl https://api.pixldocs.com/v1/render \
  -H "Authorization: Bearer $PIXLDOCS_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "template_id": "33a5725e-1e53-4ad1-b4a5-58c5ae7f50ce",
    "format": "pdf",
    "data": {
      "student_name": "Sofia Marchetti",
      "semester": "Semester 5",
      "pass_percent": 40,
      "subjects": [
        { "code": "3150706", "title": "Computer Networks", "credits": 3,
          "max_marks": 70, "marks": 22, "max_internal": 30, "internal_marks": 14 }
      ],
      "grade_scale": [
        { "min_percent": 40, "grade": "DD", "points": 4 },
        { "min_percent": 0, "grade": "FF", "points": 0, "is_fail": "yes" }
      ]
    }
  }' --output marksheet.pdf

Run against the API before publishing: 200, application/pdf — and that subject comes back at 36.0%, grade FF, no credits earned and the statement reading REAPPEAR, without the payload saying so anywhere.

The contract

Exactly what you send, exactly what you get.

These templates take named keys — no positional arguments, no layout to describe. Send a row array and the pagination follows it.

Statement of marks

33a5725e-1e53-4ad1-b4a5-58c5ae7f50ce

Fields · 26

institution_nameinstitution_addressinstitution_emailinstitution_phoneaffiliationstatement_titlestatement_numberissue_datestudent_nameenrolment_noroll_nodate_of_birthguardian_nameprogrammebranchsemesteracademic_yearexam_sessiondeclared_onpass_percent #remarksverification_notedisclaimerregistrar_nameregistrar_titlelocale

Rows · subjects[]

code · title · category · credits · max_marks · marks · max_internal · internal_marks

Send as many as you have. Pagination, running totals and the carried-forward header are the renderer's problem, not yours.

Rows · grade_scale[]

min_percent · grade · points · descriptor

Send as many as you have. Pagination, running totals and the carried-forward header are the renderer's problem, not yours.

Rows · previous_semesters[]

label · credits · points

Send as many as you have. Pagination, running totals and the carried-forward header are the renderer's problem, not yours.

Certificate of completion

86e6ac36-875c-4518-b175-6feb1685c2d1

Fields · 18

brand_coloraccent_colorissuer_nameissuer_urleyebrowpreamblerecipient_namestatementcourse_titlecourse_subtitlecompleted_onhoursgradecredential_idverify_urlverify_labelcriteria_titlefooter_note

Rows · criteria[]

item

Send as many as you have. Pagination, running totals and the carried-forward header are the renderer's problem, not yours.

Rows · signatories[]

name · role

Send as many as you have. Pagination, running totals and the carried-forward header are the renderer's problem, not yours.

What you would ask next.

Our ERP already computes the grades. Why send a scale instead?

Because then two systems decide a student’s result, and one day they disagree on a document with a registrar’s name on it. Send the marks and the scale and there is one answer, printed beside the scale it came from. A row carrying its own grade is a 400 with the field named.

Every board and university grades differently.

The scale is data, not code. Bands, thresholds, grade points, which band counts as a fail, and the pass mark are all fields on the request, so one template serves several programmes. Send no scale at all and the document prints marks and percentages and states plainly that no grade was awarded — it will not invent one.

What about cumulative averages across semesters?

Send the previous semesters as credits and grade points and the CGPA is the credit-weighted mean. If one of them is missing either figure, no CGPA is printed at all and the statement says why — an average quietly short a semester is worse than no average.

A backlog cohort has sixty subjects on one statement.

We tested sixty: six pages, the column header repeating on each, the running header carrying the student and statement number, and totals and SGPA that still reconcile.

Do results have to be right the first time?

Templates are versioned. Publish a new version when the ordinance changes and pin the old one to reproduce a historical statement byte for byte — which is what a verification request years later actually needs.

Your system already knows when the document is owed.

Free to start · No credit card required