Editor de embed y tokens
Crea y edita sobres con EmbedCreateEnvelope, EmbedUpdateEnvelope y tokens de integración.
El editor de embed permite crear y editar sobres dentro de otra aplicación mediante EmbedCreateEnvelope y EmbedUpdateEnvelope. Los sobres de la API V2 representan documentos y plantillas. Su autorización utiliza un token de integración, llamado presign token en la API. Una clave de API y un token de integración son credenciales distintas.
Crea el token en el servidor
curl --fail-with-body \
'https://business.digito.do/api/v2/embedding/create-presign-token' \
-H "Authorization: $DIGITO_API_TOKEN" \
-H 'Content-Type: application/json' \
--data '{}'La respuesta contiene token, expiresAt y expiresIn. Usa expiresAt para gestionar el vencimiento. El contrato admite expiresIn y scope, pero no define en el esquema la unidad del primero ni un catálogo de ámbitos. El ejemplo conserva la configuración predeterminada y no inventa un ámbito.
Tu servidor debe autenticar al usuario de tu aplicación y comprobar su acceso al equipo antes de crear o entregar un token. No publiques un endpoint de emisión de tokens accesible sin autorización.
Verifica el token
curl --fail-with-body \
'https://business.digito.do/api/v2/embedding/verify-presign-token' \
-H "Authorization: $DIGITO_API_TOKEN" \
-H 'Content-Type: application/json' \
--data '{
"token": "token_de_integracion_de_ejemplo"
}'{
"success": true
}La respuesta documentada contiene success, un booleano. No contiene una clave de API que debas extraer o reenviar al navegador.
Monta el editor de embed
Instala el paquete de embed de tu framework. Los ejemplos siguientes utilizan React y el contrato previsto de los paquetes de Digito, cuya publicación está en preparación. Indica siempre host="https://business.digito.do" y pasa el presignToken emitido por tu servidor.
| Componente | Función |
|---|---|
EmbedCreateEnvelope | Crear un sobre como documento o plantilla. |
EmbedUpdateEnvelope | Editar un sobre existente mediante su envelopeId. |

Preparación de un borrador desde el editor de embed, con el documento, el destinatario y las herramientas para agregar campos.
Crea un sobre
type="DOCUMENT" crea un documento. externalId permite asociarlo con un proceso de tu sistema; no es una credencial ni sustituye la comprobación de permisos.
import { EmbedCreateEnvelope } from '@digitogroup/embed-react';
export function CrearSobre({
presignToken,
confirmarSobre,
}: {
presignToken: string;
confirmarSobre: (envelopeId: string) => void;
}) {
return (
<div style={{ height: '800px', width: '100%' }}>
<EmbedCreateEnvelope
host="https://business.digito.do"
presignToken={presignToken}
type="DOCUMENT"
language="es"
externalId="expediente-12345"
onEnvelopeCreated={(data) => confirmarSobre(data.envelopeId)}
/>
</div>
);
}confirmarSobre es una función de tu aplicación: debe solicitar a tu servidor la comprobación del sobre y guardar la relación con el usuario y su expediente. Para crear una plantilla reutilizable, cambia type a "TEMPLATE"; luego puedes crear documentos a partir de ella mediante la API.
Edita un sobre existente
Entrega el envelopeId del borrador que el usuario puede editar, junto con un token vigente del equipo correspondiente. No aceptes un ID arbitrario sin autorización.
import { EmbedUpdateEnvelope } from '@digitogroup/embed-react';
export function EditarSobre({
presignToken,
envelopeId,
confirmarSobre,
}: {
presignToken: string;
envelopeId: string;
confirmarSobre: (envelopeId: string) => void;
}) {
return (
<div style={{ height: '800px', width: '100%' }}>
<EmbedUpdateEnvelope
key={envelopeId}
host="https://business.digito.do"
presignToken={presignToken}
envelopeId={envelopeId}
language="es"
externalId="expediente-12345"
onEnvelopeUpdated={(data) => confirmarSobre(data.envelopeId)}
/>
</div>
);
}Puedes preparar el borrador mediante HTTP y abrir después el editor de embed para que una persona autorizada revise sus PDFs, destinatarios y campos. Editar un borrador no firma el documento.
Propiedades del editor
Compartidas
| Propiedad | Tipo | Uso |
|---|---|---|
presignToken | string | Obligatoria. Token de integración emitido por el servidor. |
host | string | Configura https://business.digito.do. |
externalId | string | Referencia externa del sobre en tu sistema. |
language | "es" | "en" | Idioma del editor. |
user | { email?: string; name?: string } | Datos del usuario para la opción de añadirse a la lista de destinatarios. No autentica a esa persona. |
features | object | Configuración de pasos, controles y acciones del editor. |
className | string | Clase CSS del contenedor que monta el SDK. |
css | string | CSS interno, si está habilitada la personalización para la organización. |
cssVars | object | Variables de apariencia, con la misma condición. |
darkModeDisabled | boolean | Desactivar el modo oscuro del embed. |
Para crear
| Propiedad | Tipo | Uso |
|---|---|---|
type | "DOCUMENT" | "TEMPLATE" | Obligatoria. Tipo del sobre nuevo. |
folderId | string | Carpeta de destino; debe pertenecer al equipo y admitir el tipo del sobre. Sin esta propiedad, el sobre se crea en la raíz. |
onEnvelopeCreated | function | Recibe el identificador cuando se crea el sobre. |
Para editar
| Propiedad | Tipo | Uso |
|---|---|---|
envelopeId | string | Obligatoria. ID del sobre existente. |
onEnvelopeUpdated | function | Recibe el identificador después de guardar los cambios. |
Configura los controles con features
Puedes pasar una configuración parcial. Las propiedades omitidas conservan sus valores predeterminados; ocultar un control no cambia los permisos del usuario ni las reglas de firma.
<EmbedUpdateEnvelope
host="https://business.digito.do"
presignToken={presignToken}
envelopeId={envelopeId}
language="es"
features={{
general: { allowConfigureEnvelopeTitle: false },
settings: { allowConfigureLanguage: false, allowConfigureTimezone: false },
recipients: { allowApproverRole: false, allowViewerRole: false },
}}
/>General
Propiedad de general | Predeterminado | Control |
|---|---|---|
allowConfigureEnvelopeTitle | true | Editar el título del sobre. |
allowUploadAndRecipientStep | true | Mostrar el paso de carga y destinatarios. |
allowAddFieldsStep | true | Mostrar el paso de campos. |
allowPreviewStep | true | Mostrar la revisión previa. |
minimizeLeftSidebar | true | Comenzar con el panel lateral minimizado. |
Desactiva un paso solo si el sobre ya contiene lo necesario para continuar. Por ejemplo, no ocultes la carga de PDFs al crear un sobre vacío que todavía necesita archivos.
Configuración del sobre
Todas las propiedades siguientes de settings tienen valor predeterminado true. Usa settings: null para ocultar la sección completa.
| Propiedad | Control |
|---|---|
allowConfigureSignatureTypes | Formas de introducir la rúbrica visible; no cambia el requisito del certificado de firma electrónica cualificada. |
allowConfigureLanguage | Idioma. |
allowConfigureDateFormat | Formato de fecha. |
allowConfigureTimezone | Zona horaria. |
allowConfigureRedirectUrl | URL de retorno. |
allowConfigureDistribution | Configuración de distribución. |
allowConfigureExpirationPeriod | Vencimiento. |
allowConfigureReminders | Recordatorios. |
allowConfigureEmailSender | Remitente de correo. |
allowConfigureEmailReplyTo | Dirección de respuesta. |
Archivos y adjuntos
actions.allowAttachments permite añadir adjuntos y tiene valor predeterminado true. En envelopeItems, las siguientes propiedades también son true de forma predeterminada. Usa envelopeItems: null para impedir modificaciones de los archivos desde la vista.
Propiedad de envelopeItems | Control |
|---|---|
allowConfigureTitle | Título de cada archivo. |
allowConfigureOrder | Orden de los archivos. |
allowUpload | Añadir PDFs. |
allowDelete | Retirar archivos. |
allowReplace | Reemplazar el PDF de un archivo. |
Destinatarios
Usa recipients: null para impedir modificaciones de destinatarios desde la vista. Digito Business aplica sus reglas de firma cualificada incluso si una opción solicita habilitar un control incompatible.
Propiedad de recipients | Estado en el editor de Digito | Control |
|---|---|---|
allowApproverRole | true de forma predeterminada | Rol de aprobación. |
allowViewerRole | true de forma predeterminada | Rol de revisión. |
allowCCerRole | true de forma predeterminada | Destinatario de copia. |
allowConfigureSigningOrder | Deshabilitado por el flujo de firma cualificada | Cambiar entre firma secuencial y paralela. |
allowConfigureDictateNextSigner | Deshabilitado por el flujo de firma cualificada | Elección del siguiente firmante. |
allowAssistantRole | Deshabilitado por el flujo de firma cualificada | Rol de asistencia. |
El editor utiliza el orden secuencial del flujo de firma cualificada. Una opción de features no permite saltarse este requisito.
Oculta secciones completas
Este ejemplo conserva la edición de campos de un borrador preparado, pero oculta la configuración del sobre y las modificaciones de archivos y destinatarios.
<EmbedUpdateEnvelope
host="https://business.digito.do"
presignToken={presignToken}
envelopeId={envelopeId}
language="es"
features={{
settings: null,
envelopeItems: null,
recipients: null,
}}
/>Callbacks y continuación del proceso
onEnvelopeCreated y onEnvelopeUpdated reciben:
| Campo | Tipo | Contenido |
|---|---|---|
envelopeId | string | ID del sobre creado o actualizado. |
externalId | string | null | Referencia externa, si se indicó. |
En un recorrido completo, onEnvelopeCreated permite pasar del creador al editor: conserva envelopeId, confirma el recurso desde tu servidor y monta EmbedUpdateEnvelope con ese ID. Tras onEnvelopeUpdated, consulta de nuevo el sobre antes de actualizar el estado de tu expediente.
Ejemplo de creación y edición
El componente siguiente pasa del creador al editor después de comprobar el sobre. confirmarSobre debe consultar tu servidor y rechazar la operación si el sobre no pertenece al proceso autorizado. Este callback y la sesión del usuario los implementa tu aplicación.
import { useState } from 'react';
import { EmbedCreateEnvelope, EmbedUpdateEnvelope } from '@digitogroup/embed-react';
export function GestorDeSobres({
presignToken,
confirmarSobre,
}: {
presignToken: string;
confirmarSobre: (envelopeId: string) => Promise<void>;
}) {
const [envelopeId, setEnvelopeId] = useState<string | null>(null);
const [estado, setEstado] = useState<'crear' | 'editar' | 'guardado'>('crear');
const [error, setError] = useState<string | null>(null);
async function guardar(id: string, siguiente: 'editar' | 'guardado') {
try {
await confirmarSobre(id);
setEnvelopeId(id);
setEstado(siguiente);
setError(null);
} catch {
setError('No se pudo confirmar el sobre. Consulta su estado antes de continuar.');
}
}
if (estado === 'guardado') return <p>El servidor confirmó los cambios del sobre.</p>;
return (
<div>
{error && <p role="alert">{error}</p>}
<div style={{ height: '800px', width: '100%' }}>
{estado === 'editar' && envelopeId ? (
<EmbedUpdateEnvelope
key={envelopeId}
host="https://business.digito.do"
presignToken={presignToken}
envelopeId={envelopeId}
language="es"
onEnvelopeUpdated={(data) => { void guardar(data.envelopeId, 'guardado'); }}
/>
) : (
<EmbedCreateEnvelope
host="https://business.digito.do"
presignToken={presignToken}
type="DOCUMENT"
language="es"
externalId="expediente-12345"
onEnvelopeCreated={(data) => { void guardar(data.envelopeId, 'editar'); }}
/>
)}
</div>
</div>
);
}El ejemplo termina al guardar el borrador. Distribuirlo o autorizar una firma son acciones posteriores del proceso, con sus propias comprobaciones.
Si el editor se cierra, guarda el identificador del borrador para retomarlo sin crear otro sobre. Comprueba expiresAt antes de abrirlo de nuevo y emite otro token si hace falta. No reutilices el token de otro usuario ni uno vencido. Los callbacks no sustituyen la autorización ni la consulta del servidor.
El firmante se autentica de nuevo con Digito ID antes de cada acción de firma. Una sesión abierta en Business, una clave de API, un token de destinatario o un token de integración no sustituye esta autenticación.
Referencia de tokens · Embed de firma · Paquetes de embed por framework.