---
title: "Emitir diplomas (apenas emissora)"
description: "Emissão de diplomas pela API do Digiploma por instituições emissoras, com o registro feito por outra instituição, a registradora, e o registrationType."
canonical: "https://docs.lacunasoftware.com/articles/digiploma/api/emissions"
locale: "pt-BR"
product: "Digiploma"
last_updated: "2026-10-11"
---

# Emitir diplomas (apenas emissora)

Esta página é para instituições que **emitem** diplomas e deixam o registro a cargo de outra instituição, a registradora. A organização
precisa ser do tipo **Emissora** ou **Emissora e Registradora**.

A **emissão** é a parte do diploma que cabe à emissora:

1. O Digiploma gera o **XML da documentação acadêmica** a partir dos dados que você envia e coleta as assinaturas da emissora no Lacuna Signer.
1. O XML assinado vai para a registradora, que registra o diploma e assina o **XML do diploma**.
1. O XML do diploma volta, e o Digiploma cria o **diploma**, com a representação visual (RVDD) e o histórico escolar final.

## Como a emissão chega à registradora

O `registrationType` de cada emissão define como acontecem os passos 2 e 3:

| `registrationType` | Como funciona |
|---|---|
| `Manual` | Fora do Digiploma. Você baixa o XML da documentação acadêmica assinado, envia esse arquivo à registradora e depois [faz upload do XML do diploma](https://docs.lacunasoftware.com/articles/digiploma/api/emissions#concluir-a-emissão-com-o-xml-do-diploma) que a registradora devolver. |
| `Subscription` | A registradora é outra organização na mesma instância do Digiploma (**Registradora credenciada**). A requisição vai para ela automaticamente, você acompanha o andamento pela emissão, e o diploma é criado quando a requisição é registrada. A parceria entre as duas organizações é configurada pelo administrador da instância; `registryId` é o id da organização registradora. |
| `Integration` | A registradora usa outra instância do Digiploma. Funciona como `Subscription`, mas entre aplicações separadas, por exemplo `diplomas.emissora.edu.br` e `diplomas.registradora.edu.br`. Antes, as duas instituições configuram a integração nas configurações das respectivas organizações, trocando chaves de API. |

Para registrar os diplomas na própria organização, veja [Emissão e registro](https://docs.lacunasoftware.com/articles/digiploma/api/degrees).

## Antes de começar

* A chave de API do Signer precisa estar definida nas **Configurações** da organização (`SignerApiKeyNotSet`).
* Você precisa de um **modelo de histórico escolar**, para o histórico final gerado quando o diploma é registrado, e, opcionalmente, de um
  **modelo de diploma**: sem ele, o diploma não tem RVDD. Veja [Modelos](https://docs.lacunasoftware.com/articles/digiploma/api/templates-and-flows#modelos).
* Você precisa dos signatários: um [fluxo de assinatura](https://docs.lacunasoftware.com/articles/digiploma/api/templates-and-flows#fluxos-de-assinatura) salvo, do tipo `Emission`, ou os
  signatários informados na própria requisição.
* Com `Subscription`, a parceria com a registradora (caso contrário, `EmisionForbiddenRegistry`); com `Integration`, a integração com a
  instância da registradora (`IntegrationRegistryNotFound`, `IntegrationRegistryInvalid`).

## Criar uma emissão

`POST /api/emissions` cria uma emissão. Para criar várias a partir de um arquivo JSON, use um [lote](https://docs.lacunasoftware.com/articles/digiploma/api/batches).

```json
{
  "registrationType": "Manual",
  "templateId": "0f8b1c2e-…",
  "academicTranscriptTemplateId": "6a1d9e44-…",
  "documentFlowId": "c2f0e7a1-…",
  "emission": {
    "degreeType": "Default",
    "dadosDiploma": { "diplomado": { … }, "dadosCurso": { … }, "iesEmissora": { … }, "dataConclusao": "2026-06-30", … },
    "documentacaoAcademica": {
      "registro": { "dadosPrivadosDiplomado": { … }, "termoResponsabilidade": { … }, "documentacaoComprobatoria": [ … ] }
    }
  }
}
```

| Campo | Obrigatório | Descrição |
|---|---|---|
| `registrationType` | Sim | `Manual`, `Subscription` ou `Integration` (veja acima). |
| `registryId` | Com `Subscription` | A organização registradora. |
| `emission` | Sim | Os dados do MEC: `dadosDiploma` e `documentacaoAcademica.registro` (os dados privados do diplomado, o termo de responsabilidade e a documentação comprobatória, em arquivos PDF/A em Base64), além de `degreeType` e `visualRepresentationFieldsContent`, como em [Emissão e registro](https://docs.lacunasoftware.com/articles/digiploma/api/degrees#criar-um-diploma). Não há `dadosRegistro`: quem fornece esses dados é a registradora. |
| `academicTranscriptTemplateId` | Sim | O modelo de histórico escolar. |
| `templateId` | Não | O modelo de diploma. Sem ele, o diploma não tem RVDD. |
| `documentFlowId` / `documentFlow` | Um dos dois | Os signatários. Só podem ser preenchidos `issuingFlow` (os representantes da emissora, com e-CPF, e a própria emissora, com e-CNPJ) e `academicTranscriptFlow` (`DocumentFlowInvalidEmissionData`). |
| `newFolderName` / `signerFolderId` | Não | A pasta do Signer para o documento, nova ou existente. |

Há um exemplo completo dos dados no [arquivo JSON de exemplo](https://www.digiploma.com.br/assets/files/emission-json-template3.json).

A resposta é `{success, id, errors}`. Como nas outras operações de criação, falhas na geração, como dados rejeitados pelo schema XML do
MEC, retornam **HTTP 200** com `"success": false` e o log de processamento em `errors`. Veja
[Resultado da criação](https://docs.lacunasoftware.com/articles/digiploma/api#resultado-da-criação).

## Status

| `status` | Significado |
|---|---|
| `Created` | Criada; aguardando as assinaturas da emissora. |
| `Signed` | O XML da documentação acadêmica está assinado. |
| `SentToRegistry` | Enviada à registradora (`Subscription` e `Integration`). |
| `AcceptedByRegistry` | A registradora aceitou a requisição, quando a instância dela exige aceitação. |
| `Registered` | O XML do diploma foi recebido: o diploma existe. |
| `Canceled` | Cancelada pela emissora, ou porque a registradora recusou ou cancelou a requisição. |

Com `Subscription` e `Integration`, `GET /api/emissions/{id}` também mostra o lado da registradora: `registryName`, `registrationStatus`,
`registrationStatusDescription` e `registrationUpdateDate`.

## Obter o XML da documentação acadêmica

`GET /api/emissions/{id}/academic-documentation-ticket` retorna um [ticket](https://docs.lacunasoftware.com/articles/digiploma/api#downloads-e-tickets) para baixar o XML da
documentação acadêmica assinado. O download falha com `DegreeAcademicDocumentationNotSigned` até o XML ser assinado. Com
`registrationType` `Manual`, é esse o arquivo que você envia à registradora.

## Concluir a emissão com o XML do diploma

Com `registrationType` `Manual`, conclua a emissão quando a registradora devolver o XML do diploma assinado:

1. [Faça upload](https://docs.lacunasoftware.com/articles/digiploma/api#uploads) do arquivo XML com `POST /api/uploads` ou `POST /api/uploads/bytes`.
1. Chame `POST /api/emissions/{id}/degree-xml` com o upload:

    ```json
    { "id": "5d3b…", "name": "diploma.xml", "contentType": "application/xml" }
    ```

A emissão precisa estar `Signed`, `SentToRegistry` ou `AcceptedByRegistry` (`EmissionInvalidStatus`); chamar a operação de novo para uma
emissão `Registered` não tem efeito. Em seguida, o Digiploma verifica se:

* o XML é o diploma **desta** emissão: o `IdDocumentacaoAcademica` dele precisa corresponder à documentação acadêmica gerada para ela
  (`EmissionInvalidIdDocumentacaoAcademica`);
* os dados seguem as regras do MEC e o schema XML;
* as assinaturas estão completas: os representantes e o e-CNPJ da emissora em `DadosDiploma`, os representantes da registradora em
  `DadosRegistro`, conferindo com os signatários listados no XML, e a assinatura de arquivamento da registradora (e-CNPJ, política AD-RA)
  no arquivo inteiro.

A resposta é `{success, errors, structureErrors, signatureErrors}`. Um arquivo que não passa nessas verificações retorna **HTTP 200** com
`"success": false`, e os problemas são listados nos três arrays.

Quando o arquivo é aceito, a emissão passa a `Registered` e o Digiploma cria o **diploma**, já `Active`, com o RVDD se a emissão tiver um
modelo de diploma. `GET /api/emissions/{id}` retorna o `degreeId` e o `degreeVerificationCode` do diploma, que a partir daí é gerenciado
pela [API de diplomas](https://docs.lacunasoftware.com/articles/digiploma/api/degrees#consultar-diplomas). O Digiploma também gera o [histórico escolar](https://docs.lacunasoftware.com/articles/digiploma/api/academic-transcripts) final,
exceto para segunda via ou diploma por decisão judicial.

Com `Subscription` e `Integration`, esta etapa acontece automaticamente quando o XML do diploma da registradora é assinado.

## Cancelar uma emissão

`POST /api/emissions/{id}/cancellation`, com um `reason` de até 500 caracteres, cancela uma emissão `Created` ou `Signed`. Se o documento
ainda não estiver assinado, ele é excluído do Signer. Depois que a emissão é enviada à registradora, só a registradora pode recusá-la ou
cancelá-la (`EmissionCannotBeCanceled`). Para anular um diploma que já existe, altere o
[status do diploma](https://docs.lacunasoftware.com/articles/digiploma/api/degrees#anular-ou-restaurar-um-diploma).

## Consultar e pesquisar

* `GET /api/emissions/{id}` retorna a emissão; `GET /api/emissions/{id}/information` retorna os dados públicos dela (`dadosDiploma`), lidos
  do XML da documentação acadêmica.
* `GET /api/emissions/{id}/history` retorna as mudanças de status, da mais recente para a mais antiga.
* `GET /api/emissions` retorna uma página de emissões. Além dos [parâmetros de paginação](https://docs.lacunasoftware.com/articles/digiploma/api#paginação), filtra por `Status`,
  `BatchId`, data de criação (`StartDateUtc` inclusive, `EndDateUtc` exclusive), `IsSigned=true` e `Q` (CPF, nome ou nome social do
  aluno, ou curso). Os resultados são ordenados pela data de atualização.

## Webhooks

| Evento | Quando |
|---|---|
| `EmissionCreated` | A emissão foi criada. |
| `EmissionSigned` | O XML da documentação acadêmica foi assinado. |
| `EmissionSentToRegistry` | A emissão foi enviada à registradora. |
| `EmissionRegistrationAccepted`, `EmissionRegistrationApproved`, `EmissionRegistrationRegistered` | A registradora aceitou, aprovou ou registrou a requisição (`Subscription` e `Integration`). |
| `EmissionRegistrationRejected`, `EmissionRegistrationCanceled` | A registradora recusou ou cancelou a requisição. A emissão passa a `Canceled`, e `EmissionCanceled` **não** é enviado. |
| `EmissionRegistered` | O XML do diploma foi aceito. Os dados do evento trazem o `degreeId`. |
| `EmissionCanceled` | A emissora cancelou a emissão. |

Os dados de cada evento estão em [Webhooks](https://docs.lacunasoftware.com/articles/digiploma/api/webhooks).

## Referência das operações

| Operação | Descrição |
|---|---|
| `POST /api/emissions` | Criar uma emissão |
| `GET /api/emissions` | Listar emissões |
| `GET /api/emissions/{id}` | Obter uma emissão |
| `GET /api/emissions/{id}/information` | Obter os dados públicos de uma emissão |
| `GET /api/emissions/{id}/history` | Obter o histórico de status |
| `GET /api/emissions/{id}/academic-documentation-ticket` | Baixar o XML da documentação acadêmica assinado |
| `POST /api/emissions/{id}/degree-xml` | Concluir a emissão com o XML do diploma |
| `POST /api/emissions/{id}/cancellation` | Cancelar uma emissão |
