Issue diplomas (issuer only)
This page is for institutions that issue diplomas and have them registered by another institution, the registrar. The organization must be of type Emissora (issuer) or Emissora e Registradora.
An emission (emissão) is the issuer's side of a diploma:
- Digiploma generates the academic documentation XML from your data, and collects the issuer's signatures in Lacuna Signer.
- The signed XML goes to the registrar, which registers the diploma and signs the diploma XML.
- The diploma XML comes back, and Digiploma creates the diploma, with its visual representation (RVDD) and its final academic transcript.
How the registrar receives the emission
The registrationType of each emission decides how steps 2 and 3 happen:
registrationType | How it works |
|---|---|
Manual | Outside Digiploma. You download the signed academic documentation XML, send it to the registrar, and later upload the diploma XML the registrar sends back. |
Subscription | The registrar is another organization in the same Digiploma instance (registradora credenciada). The request goes to it automatically, you follow its progress on the emission, and the diploma is created when it is registered. The partnership between the two organizations is set up by the instance administrator; registryId is the registrar organization's id. |
Integration | The registrar uses another Digiploma instance. It works like Subscription, between separate applications, for example diplomas.issuer.edu.br and diplomas.registrar.edu.br. Both institutions configure the integration in their organization settings first, exchanging API keys. |
To register the diplomas yourself, in the same organization, see Issue and register instead.
Before you start
- The Signer API key must be set in the organization's Configurações (Settings) (
SignerApiKeyNotSet). - You need an academic transcript template, for the final transcript generated when the diploma is registered, and optionally a diploma template: without one, the diploma has no RVDD. See Templates.
- You need the signers: a saved signature flow of type
Emission, or the signers inline in each request. - For
Subscription, the partnership with the registrar (EmisionForbiddenRegistryotherwise); forIntegration, the integration with the registrar's instance (IntegrationRegistryNotFound,IntegrationRegistryInvalid).
Create an emission
POST /api/emissions creates one emission. To create many from a JSON file, use a batch.
{
"registrationType": "Manual",
"templateId": "0f8b1c2e-…",
"academicTranscriptTemplateId": "6a1d9e44-…",
"documentFlowId": "c2f0e7a1-…",
"emission": {
"degreeType": "Default",
"dadosDiploma": { "diplomado": { … }, "dadosCurso": { … }, "iesEmissora": { … }, "dataConclusao": "2026-06-30", … },
"documentacaoAcademica": {
"registro": { "dadosPrivadosDiplomado": { … }, "termoResponsabilidade": { … }, "documentacaoComprobatoria": [ … ] }
}
}
}
| Field | Required | Description |
|---|---|---|
registrationType | Yes | Manual, Subscription or Integration (see above). |
registryId | For Subscription | The registrar organization. |
emission | Yes | The MEC data: dadosDiploma and documentacaoAcademica.registro (the graduate's private data, the statement of responsibility and the supporting documents, as Base64 PDF/A files), plus degreeType and visualRepresentationFieldsContent, as in Issue and register. There is no dadosRegistro: the registrar provides it. |
academicTranscriptTemplateId | Yes | The academic transcript template. |
templateId | No | The diploma template. Without it, the diploma has no RVDD. |
documentFlowId / documentFlow | One of the two | The signers. Only issuingFlow (the issuer's representatives with e-CPF and the issuer itself with e-CNPJ) and academicTranscriptFlow may be filled (DocumentFlowInvalidEmissionData). |
newFolderName / signerFolderId | No | The Signer folder for the document, new or existing. |
A complete example of the data is in the JSON sample file.
The response is {success, id, errors}. As with the other creation operations, generation failures, such as data rejected by the MEC XML
schema, return HTTP 200 with "success": false and the processing log in errors. See Creation results.
Statuses
status | Meaning |
|---|---|
Created | Created; waiting for the issuer's signatures. |
Signed | The academic documentation XML is signed. |
SentToRegistry | Sent to the registrar (Subscription and Integration). |
AcceptedByRegistry | The registrar accepted the request, when its instance requires acceptance. |
Registered | The diploma XML was received: the diploma exists. |
Canceled | Canceled, by the issuer or because the registrar rejected or canceled the request. |
With Subscription and Integration, GET /api/emissions/{id} also shows the registrar's side: registryName, registrationStatus,
registrationStatusDescription and registrationUpdateDate.
Get the academic documentation XML
GET /api/emissions/{id}/academic-documentation-ticket returns a ticket to download the signed
academic documentation XML. The download fails with DegreeAcademicDocumentationNotSigned until it is signed. With registrationType
Manual, this is the file you send to the registrar.
Complete the emission with the diploma XML
With registrationType Manual, complete the emission when the registrar sends back the signed diploma XML:
-
Upload the XML file with
POST /api/uploadsorPOST /api/uploads/bytes. -
Call
POST /api/emissions/{id}/degree-xmlwith the upload:{ "id": "5d3b…", "name": "diploma.xml", "contentType": "application/xml" }
The emission must be Signed, SentToRegistry or AcceptedByRegistry (EmissionInvalidStatus); calling it again for a Registered
emission does nothing. Digiploma then checks that:
- the XML is the diploma of this emission: its
IdDocumentacaoAcademicamust match the academic documentation generated for it (EmissionInvalidIdDocumentacaoAcademica); - the data follows the MEC rules and the XML schema;
- the signatures are complete: the issuer's representatives and e-CNPJ on
DadosDiploma, the registrar's representatives onDadosRegistro, matching the signers listed in the XML, and the registrar's archiving signature (e-CNPJ, AD-RA policy) on the whole file.
The response is {success, errors, structureErrors, signatureErrors}. A file that fails these checks returns HTTP 200 with
"success": false, and the problems listed in the three arrays.
When the file is accepted, the emission becomes Registered and Digiploma creates the diploma, already Active, with its RVDD if the
emission has a diploma template. GET /api/emissions/{id} returns its degreeId and degreeVerificationCode, and from then on it is
managed with the Degrees API. Digiploma also generates the final academic transcript,
except for a second copy or a judicial-decision diploma.
With Subscription and Integration, this step happens automatically when the registrar's diploma XML is signed.
Cancel an emission
POST /api/emissions/{id}/cancellation, with a reason of up to 500 characters, cancels an emission that is Created or Signed. If the
document is not signed yet, it is deleted from Signer. Once the emission has been sent to the registrar, only the registrar can reject or
cancel it (EmissionCannotBeCanceled). To annul a diploma that already exists, change the diploma's status.
Read and search
GET /api/emissions/{id}returns the emission;GET /api/emissions/{id}/informationreturns its public data (dadosDiploma), read from the academic documentation XML.GET /api/emissions/{id}/historyreturns the status changes, newest first.GET /api/emissionsreturns a page of emissions. Besides the paging parameters, it filters byStatus,BatchId, creation date (StartDateUtcinclusive,EndDateUtcexclusive),IsSigned=trueandQ(student's CPF, name or social name, or course). Results are sorted by update date.
Webhooks
| Event | When |
|---|---|
EmissionCreated | The emission was created. |
EmissionSigned | The academic documentation XML was signed. |
EmissionSentToRegistry | The emission was sent to the registrar. |
EmissionRegistrationAccepted, EmissionRegistrationApproved, EmissionRegistrationRegistered | The registrar accepted, approved or registered the request (Subscription and Integration). |
EmissionRegistrationRejected, EmissionRegistrationCanceled | The registrar rejected or canceled the request. The emission becomes Canceled, and EmissionCanceled is not sent. |
EmissionRegistered | The diploma XML was accepted. The payload carries the degreeId. |
EmissionCanceled | The issuer canceled the emission. |
See Webhooks for the payloads.
Operation reference
| Operation | Description |
|---|---|
POST /api/emissions | Create an emission |
GET /api/emissions | List emissions |
GET /api/emissions/{id} | Get an emission |
GET /api/emissions/{id}/information | Get the public data of an emission |
GET /api/emissions/{id}/history | Get the status history |
GET /api/emissions/{id}/academic-documentation-ticket | Download the signed academic documentation XML |
POST /api/emissions/{id}/degree-xml | Complete the emission with the diploma XML |
POST /api/emissions/{id}/cancellation | Cancel an emission |