Passa al contenuto principale

Panoramica

L'API Askme Sign v2 permette di gestire processi di firma digitale di documenti PDF attraverso chiamate REST. L'API supporta l'invio di documenti da firmare, il monitoraggio dello stato, il download e la gestione completa del ciclo di vita dei file.

Autenticazione

L'API utilizza un sistema di autenticazione basato su API Key attraverso header HTTP:

  • X-SignToken: Token API per l'autenticazione (es. 8GvIU4U1xZ36VXbxOVwxgU1jBgFlPQBPWbUZ)
  • X-SignUser: Username o identificativo utente (es. A462252)
X-SignToken: your-api-token
X-SignUser: your-username

Endpoint Base

https://sign.askme.it

Casi d'Uso

1. Avvio del Processo di Firma

Endpoint: POST /api/v2/files/send

Questo endpoint è il punto di ingresso principale per creare una nuova pratica (processo di firma) in Askme Sign. Permette di inviare uno o più documenti (PDF o altri formati supportati) per la firma elettronica, specificando i firmatari, le coordinate dove apporre la firma, la scadenza, le notifiche email e opzionalmente webhook, placeholder e parametri di workflow.

Caso d'uso: Un'azienda deve far firmare un contratto a un cliente. Il documento viene caricato (in Base64 o tramite URL), vengono specificate le coordinate della firma e il cliente riceve una notifica email per procedere con la firma. Lo stesso endpoint supporta anche invii a contatti/gruppi, più firmatari in sequenza, scadenza, invio di copia a completamento e notifiche webhook per integrazioni esterne.


Autenticazione e headers

La richiesta deve includere gli header di autenticazione API:

HeaderObbligatorioDescrizione
X-SignTokenToken API (es. 8GvIU4U1xZ36VXbxOVwxgU1jBgFlPQBPWbUZ)
X-SignUserUsername o identificativo utente (es. A462252)

Esempio:

POST /api/v2/files/send HTTP/1.1
Host: sign.askme.it
Content-Type: application/json
X-SignToken: your-api-token
X-SignUser: your-username

{ ... body JSON ... }

Corpo della richiesta (body)

Il body è un oggetto JSON (FileInsertSimpleDTO). Tutti i campi sono opzionali eccetto gli elementi minimi per definire documenti e firmatari: almeno documents (array non vuoto) e signers (array non vuoto) oppure destinationContacts (array non vuoto), a seconda del flusso desiderato.

Struttura generale

SezioneCampo / gruppoObbligatorietàDescrizione breve
DocumentidocumentsArray di documenti da firmare (Base64 o URL)
FirmatarisignersCondizionale*Array di firmatari (nome, email, azione, coordinate firma). *Obbligatorio se non si usano firmatari definiti in una tipologia di processo
DestinataridestinationContactsNoArray di utenti (email) da inserire in copia conoscenza alla pratica
Identificazionename, notes, summaryCondizionale*Nome pratica, note, riepilogo. *Obbligatorio name a meno che non sia specificato già nella tipologia.
ScadenzaexpirationDate, expirationDateDaysNoData scadenza o giorni alla scadenza
NotifichesendNotifications, sendCopyIterCompletedNoInvio email ai firmatari / copia a completamento
Webhookwebhook, webhooksNoURL da notificare a eventi (creazione, firma, rifiuto, scadenza)
PlaceholderplaceholdersNoCampi da compilare (testo, data, firma) sul documento
ParametriparamsNoMetadati/parametri del workflow
Mail certificatocertificateMailNoOggetto, messaggio, PEC, CC per invio con certificato. Nota: questa funzionalità deve essere precedentemente configurata.
Opzionidraft, urgent, privacy, protocol, visibilityModeNoBozza, urgente, privacy, protocollo, visibilità
LimitazionilimitationUsernames, limitationDepartmentCodes, limitationSerialNumbersNoArray di utenti/UO ai quali è limitata la visibilità della pratica.

Parametri nel dettaglio

1. documents (obbligatorio)

Array di oggetti UploadDocumentDTO. Ogni elemento rappresenta un documento da allegare alla pratica.

AttributoTipoObbligatorioDescrizione
base64contentstringNo*Contenuto del file codificato in Base64. *Obbligatorio se non si usa externalUrl o uploadedFilename
filenamestringConsigliatoNome del file (es. contratto.pdf)
externalUrlstringNoURL pubblico da cui il sistema scaricherà il documento (alternativa a base64content)
orderintegerNoOrdine del documento nella pratica (0-based)
convertbooleanCondizionale*Se true, il sistema può convertire il file in formato standard (es. PDF). *Nota: deve essere attiva l'integrazione e una licenza valida di Aspose.
verifySignaturesbooleanNoSe true, verifica le firme eventualmente già presenti sul documento
docExternalIdstringNoID esterno del documento
uploadedFilenamestringNo*Nome file dopo upload. *Nota: il file deve essere preventivamente caricato tramite l’apposita API dedicata; il nome file restituito in risposta può quindi essere impostato in questo parametro per utilizzare il documento nella pratica.

Nota: Per PDF, il contenuto deve essere codificato in Base64 senza inserire interruzioni di riga nel mezzo della stringa.


2. signers (obbligatorio per invio a persone specifiche)

Array di oggetti SimpleSignerDTO. Ogni elemento è un firmatario che prenderà parte al processo di firma.

AttributoTipoObbligatorioDescrizione
emailstringCondizionale*Email del firmatario. *Obbligatorio se non specificato il parametro username
firstNamestringCondizionale*Nome del firmatario. *Obbligatorio se non specificato il parametro username
lastNamestringCondizionale*Cognome del firmatario. *Obbligatorio se non specificato il parametro username
actionstringAzione richiesta: S Firma semplice, E FES, T FES con OTP, V FEA, Q Firma Elettronica Qualificata, P Visto, O FEQ One-Shot, J Firma IO.
usernamestringCondizionale*Username se il firmatario è un utente interno Askme Sign. *Se l'username non è valorizzato, devono essere compilati i campi email, firstName, lastName.
sendNotificationsbooleanNoSe true, invia notifiche email al firmatario.
notificationTypestringNoTipo di notifica (email, push, ecc.)
signatureCoordinatesarrayNoCoordinate e modalità di firma (vedi tabella sotto). Usato sia per firma grafica visibile (document, page, positionX, positionY, width, height, signatureType) sia per firma invisibile (elemento nell’array con signatureType idoneo.).
placeholdersarrayNoPlaceholder assegnati a questo firmatario. Per tipi supportati e struttura degli elementi vedi la sezione dedicata.
requirePasswordbooleanNoRichiedi password per firmare
requireOtpbooleanNoRichiedi OTP
passwordstringNoPassword di accesso alla pratica per questo firmatario. Se requirePassword è true: valorizzandola l’integrazione imposta la password che il firmatario dovrà inserire per aprire il link e firmare; se omessa, il sistema ne genera una casuale e la comunica al firmatario (es. via email/SMS).
phone, phonePrefixstringNoTelefono e prefisso (per OTP o contatto)
hostUsernamestringNoUsername dell’utente che ospita la sessione di firma di persona: il firmatario opera sul dispositivo dell’host, che viene identificato da questo username.
digitalSignatureTypestringNoFormato della firma digitale. Valori ammessi: PAdES (PDF, default), CAdES, XAdES. Se omesso, si usa PAdES.
webhookobjectNoWebhook specifico per questo firmatario (stessa struttura di webhook a livello pratica)
customMessagestringNoTesto personalizzato del corpo dell’email di invito al firmatario. Si applica solo all’invio tramite email.
customMessageObjectstringNoTesto personalizzato dell’oggetto dell’email di invito al firmatario. Si applica solo all’invio tramite email.
acrofieldsarrayNoCampi acroform PDF da mappare a firma o placeholder per questo firmatario. Ogni elemento: acrofieldKeyword (nome/pattern del campo nel PDF), acrofieldSignatureType (tipo firma se il campo è di firma), acrofieldMatch (modalità match: full, prefix, postfix, contains). I campi trovati nei documenti vengono usati come coordinate di firma o come placeholder testo.
Oggetto coordinate firma (signatureCoordinates)

Ogni elemento dell’array definisce un’area dove verrà apposta la firma grafica sul documento.

AttributoTipoObbligatorioDescrizione
documentintegerIndice del documento nell’array documents (0-based). Es. 0 = primo documento
pageintegerNumero della pagina (1-based). Es. 1 = prima pagina
signatureTypestringNoTipo firma: S Firma semplice, E FES, T Fes con OTP, V FEA, Q Firma Elettronica Qualificata, P Visto, O FEQ One-Shot, J Firma IO.
positionXnumberPosizione orizzontale del rettangolo, normalizzata tra 0 e 1 (0 = sinistra, 1 = destra). Es. 0.6 = 60% dalla sinistra
positionYnumberPosizione verticale del rettangolo, normalizzata tra 0 e 1 (0 = in alto, 1 = in basso). Es. 0.4 = 40% dall’alto
widthnumberNoLarghezza del rettangolo, normalizzata 0–1. Es. 0.2 = 20% della larghezza pagina
heightnumberNoAltezza del rettangolo, normalizzata 0–1. Es. 0.08 = 8% dell’altezza pagina
anchorKeywordstringNoParola chiave nel PDF per posizionare automaticamente la firma (alternativa a positionX/Y)
invisiblebooleanNoFirma invisibile
textContentstringNoTesto mostrato nell’area di firma (firma grafica o digitale). Via API si imposta in ogni elemento di signatureCoordinates. Sono supportati i placeholder: {{signedByText}} (nome firmatario), {{signDate}} (data/ora firma), {{checkedByText}}, {{approvedByText}}, {{digitalSignedByText}} (testo azione). Es.: "Firmato digitalmente da {{signedByText}}\n{{signDate}}".
reasonstringNoMotivo della firma: testo inserito nei metadati PDF della firma (campo “Reason”, es. “Approvazione documento”, “Firma per accettazione”). Usato soprattutto in firma digitale.
locationstringNoLuogo della firma: testo inserito nei metadati PDF (campo “Location”, es. città o sede). Usato soprattutto in firma digitale.
rotationintegerNoRotazione dell’immagine di firma in gradi (es. 0, 90, 180, 270). Si applica al specimen prima del posizionamento nel riquadro. Default: 0.
scalenumberNoFattore di scala dell’immagine/contenuto della firma nel riquadro (es. 1 = 100%, 0.5 = 50%). Default: 1.
offsetLeft, offsetTopintegerNoOffset in pixel rispetto alla posizione di riferimento. Usati quando la coordinata è posizionata tramite ancora (anchorKeyword): si sommano alle coordinate (in pixel) del punto in cui è stato trovato il testo/ancora nel PDF. Consentono di spostare il riquadro rispetto all’ancora.
offsetX, offsetYnumberNoOffset normalizzati (stessa convenzione di positionX/positionY, valori 0–1 rispetto a larghezza/altezza pagina). Aggiunti alla posizione già calcolata (coordinate fisse o da ancora + offsetLeft/offsetTop) per un aggiustamento fine.
groupIdintegerNoID di gruppo: stesso valore su più coordinate le associa allo stesso gruppo (es. per campi condizionali o per gestione congiunta di più riquadri). Valore numerico libero (es. 1, 2, 3).

Sistema di coordinate normalizzate (0–1): Per ottenere i pixel assoluti su una pagina PDF, moltiplicare positionX e width per la larghezza della pagina in punti, e positionY e height per l’altezza. Esempio: pagina A4 595×842 pt, rettangolo al 60% in orizzontale e 40% in verticale, larghezza 20%, altezza 8% → positionX: 0.6, positionY: 0.4, width: 0.2, height: 0.08.


3. destinationContacts (opzionale)

Consente di associare alla pratica uno o più contatti destinatari. Tali contatti ricevono notifiche via email nei seguenti casi:

EventoDescrizione
Pratica completataTutte le firme sono state apposte; i destinatari ricevono un’email di completamento (con eventuali allegati secondo la configurazione).
Pratica rifiutataUn firmatario ha rifiutato; i destinatari ricevono un’email di notifica del rifiuto.

I destinatari non ricevono invece notifiche in fase di creazione della pratica né sugli inviti ai firmatari (questi restano riservati ai singoli firmatari indicati in signers).

AttributoTipoObbligatorioDescrizione
emailstringEmail del contatto destinatario.

ParametroTipoDescrizione
namestringNome identificativo della pratica
notesstringNote aggiuntie da evidenziare nell'iter di firma (es. “Contratto Q4 2024”)
summarystringSommario da inserire nel dettaglio pratica

5. Scadenza

ParametroTipoDescrizione
expirationDatestringData e ora di scadenza in formato ISO 8601 (es. 2024-12-31T23:59:59+01:00)
expirationDateDaysintegerAlternativa: numero di giorni dalla creazione dopo i quali la pratica scade

6. Notifiche e invio copia

ParametroTipoDefaultDescrizione
sendNotificationsbooleantrueSe true, il sistema invia email ai firmatari con il link per firmare (invito a firma). Se false, non vengono inviate queste email.
sendCopyIterCompletedbooleantrueSe true, al completamento della pratica (tutte le firme apposte) viene inviata l’email di completamento (con eventuali allegati) ai destinatari configurati: mittente/sottoscrittore, firmatari, contatti in destinationContacts, ecc. Se false, non viene inviata questa comunicazione di completamento. L’effetto può dipendere dalla configurazione tenant (es. sendCopyIterCompletedEnabled) e dal tipo di workflow.

7. Webhook

Permettono al vostro sistema di ricevere notifiche HTTP quando cambiano gli stati della pratica (creata, firmata, rifiutata, scaduta, ecc.). Ogni evento viene inviato al vostro endpoint con metodo POST, corpo JSON e eventuale autenticazione in base a authMode.

ParametroTipoDescrizione
webhookobjectSingolo webhook (vedi sotto). Usato per una sola URL di callback.
webhooksarrayPiù webhook (stessa struttura). Consentono di notificare più endpoint per lo stesso evento.

Oggetto WebhookDTO

AttributoTipoObbligatorioDescrizione
urlstringURL da chiamare. La richiesta è sempre POST con corpo JSON. Nell’URL sono supportati i placeholder: {{idFile}}, {{tenantCode}}, {{signerEmail}}, {{status}}, {{action}}.
authModestringNoModalità di autenticazione. Valori: basic (Basic Auth), header (token in header, nome/valore da configurazione), oauth2 (Bearer token da configurazione). Se omesso, viene usato il default del tenant.
authConfigstringNoChiave di configurazione per le credenziali (per tenant). Usata con authMode header o oauth2 per recuperare header/token dalla configurazione; con basic si possono usare direttamente username e password.
usernamestringNoUsername per Basic Auth (usato se authMode = basic).
passwordstringNoPassword per Basic Auth (usato se authMode = basic).

Corpo della richiesta (POST)
Il sistema invia al vostro endpoint un JSON con una struttura di questo tipo (per riferimento):

{
"idFile": 1234,
"tenantCode": "TENANT01",
"name": "Contratto cliente",
"status": "L",
"action": "S",
"signerEmail": "[email protected]",
"notes": "Eventuali note dell'azione",
"protocol": "HTTPS",
"externalId": "ID_ESTERNO_OPZIONALE",
"time": "2024-10-23T10:09:00.000+02:00"
}

8. Placeholder e parametri

placeholders (opzionale)
Array di oggetti DocumentsPlaceholderDTO che definiscono campi da compilare sul documento (testo libero, data, firma grafica, checkbox, allegato, ecc.) in posizioni fisse o tramite ancora.

Posizione nell’API di invio:

  • In FileInsertSimpleDTO: placeholders a livello di pratica (comuni a tutti i documenti/firmatari) e/o per ogni firmatario in signers[].placeholders.

Campi principali (per il dettaglio completo si rimanda allo Swagger / DocumentsPlaceholderDTO):

CampoTipoDescrizione
typechar/stringTipo placeholder: T testo libero, S firma grafica, D data firma, O data/ora, E data di nascita, I checkbox, Z allegato, F nome completo, 1/2 nome/cognome, X email, K telefono, U combo, R radio.
documentintIndice del documento (0-based).
pageintegerNumero pagina.
positionX, positionY, width, heightnumberPosizione e dimensioni (normalizzate 0–1).
codestringCodice identificativo del placeholder.
requiredbooleanSe obbligatorio.
idSignerlongID del firmatario a cui è assegnato (se per signer).
anchorKeywordstringTesto/ancora nel PDF per il posizionamento.
defaultValuestringValore predefinito.
regex / regexErrorMessagestringValidazione e messaggio di errore.

params (opzionale)
Array di WorkflowParameterSimpleDTO che definiscono parametri/metadati del workflow (chiave/valore, tipo, obbligatorietà). Servono a passare dati contestuali alla pratica (es. numero contratto, data, selezione) senza posizionarli sul PDF.

Posizione nell’API di invio: in FileInsertSimpleDTO come params a livello di pratica.

Campi principali (ereditati da WorkflowParameterInfoDTO + WorkflowParameterSimpleDTO; dettaglio completo in Swagger):

CampoTipoDescrizione
codestringCodice univoco del parametro (chiave).
valuestringValore (max 250 byte).
labelstringEtichetta visualizzata.
typestringTipo: string, number, date, select.
requiredbooleanSe obbligatorio.
visiblebooleanSe visibile in UI.
lookupValuesstringOpzioni per tipo select (JSON array di { value, label }).
formatstringFormato (es. per date).
maxLengthintegerLunghezza massima.

9. Altre opzioni

ParametroTipoDescrizione
draftbooleanSe true, la pratica viene salvata come bozza: non si avvia il flusso di firma e non vengono inviate notifiche. Sarà possibile riprendere la modifica della pratica da interfaccia.
urgentbooleanSegna la pratica come urgente. Default: false.
privacystringLivello di privacy della pratica. Valori ammessi: P (pubblico), A (aziendale, default), C (confidenziale), S (strettamente confidenziale).
idFlowlongID del flusso (se la pratica deve essere associata a un flusso esistente).
idWorkflowTypelongID della tipologia di processo. Alternativa a workflowTypeCode.
workflowTypeCodestringCodice della tipologia di processo. Se valorizzato e idWorkflowType è null, viene risolto l’ID corrispondente.
idModulelongID modulo (se la pratica usa un modulo).
idDocumentFormatlongID del formato documento (classificazione/tipologia documento).
documentFormatstringNome del formato (es. "PDF", "Contratto"). Usato per cercare il formato per nome/tenant se idDocumentFormat non è valorizzato.
limitationUsernamesarrayUsername degli utenti ai quali è limitata la visibilità della pratica.
limitationDepartmentCodesarrayCodici reparto per limitare la visibilità della pratica ai soli utenti di quelle unità organizzative.
limitationSerialNumbersarrayMatricole degli utenti ai quali è limitata la visibilità della pratica. Richiede che l'ambiente sia attivato per l'utilizzo delle matricole invece degli username
mpibooleanModalità MPI (Massiva/Integrata): se true, la pratica è gestita in contesto MPI.
attachedReportbooleanSe true, allega il audit log (es. in download o in email di completamento).
afterCompletedRedirectstringURL di redirect a cui reindirigere il firmatario dopo il completamento della pratica.
afterDeniedRedirectstringURL di redirect a cui reindirigere il firmatario dopo il rifiuto della pratica.
additionalDocumentsarrayDocumenti aggiuntivi (allegati). Stessa struttura di documents (UploadDocumentDTO); permette di aggiungere degli allegati alla pratica.
certificateMailobjectConfigurazione invio mail con certificato (PEC). Oggetto CertificateMailDTO: pecSender (ContactDTO), pecRecipients (lista email), subject, message, ccUsers, ccUsersBackup, documentOrderNumber, filenamesToSend. Questa modalità deve essere abilitata a livello di installazione
templateParamsobjectParametri template (mappa chiave/valore) per la pratica. Sostituiti nelle email/notifiche e nei template documento. Anche per firmatario in signers[].templateParams.
firstAnchorDelimiterstringDelimitatore di inizio per il posizionamento automatico di firma/placeholder tramite ancora nel testo del PDF (coppia con secondAnchorDelimiter).
secondAnchorDelimiterstringDelimitatore di fine per il posizionamento automatico tramite ancora nel PDF.

Risposta (successo)

  • Codice HTTP: 200 OK.
  • Body: oggetto SigningProcessInfoDTO.
CampoTipoDescrizione
idFilenumber (long)ID della pratica creata.
signersarrayElenco dei firmatari che prenderanno parte all'iter di firma appena creato
canAutoAdvancebooleanSe true, il workflow può avanzare automaticamente allo step successivo quando tutte le azioni dello step corrente sono state eseguite (es. firma in parallelo completata). Se false, è richiesto un avanzamento esplicito.

Campi principali di ogni elemento di signers (SimpleSignerOutputDTO):

CampoTipoDescrizione
signingUrlstringLink per firmare (per firmatario esterno o con magic link). Valorizzato solo per i firmatari che devono ancora firmare.
emailstringEmail del firmatario.
firstName, lastNamestringNome e cognome del firmatario.
actionstringTipo di azione (un carattere: es. E = Firma Elettronica Semplice, P = Visto).
passwordstringEventuale password di accesso alla pratica (se richiesta e generata/inviata dal sistema).

Esempio di risposta:

{
"idFile": 12345,
"canAutoAdvance": false,
"signers": [
{
"email": "[email protected]",
"firstName": "Mario",
"lastName": "Rossi",
"action": "S",
"signingUrl": "https://sign.askme.it/external-sign?token=...",
"external": true
}
]
}

Codici di errore

CodiceSignificato
400Bad Request – body malformato o validazione fallita (es. documenti mancanti, coordinate non valide, parametri obbligatori mancanti, codici duplicati nei params).
401Unauthorized – token, Basic Auth o API Key mancanti o non validi.
403Forbidden – utente non autorizzato all'azione (es. DOC_SUBMIT) o tenant non abilitato.
404Not Found – risorsa non trovata (es. tipo workflow da workflowTypeCode/idWorkflowType, modulo, formato documento).
500Internal Server Error – errore lato server; riprovare o contattare il supporto.

In caso di errore il body può contenere un oggetto con:

CampoTipoDescrizione
statusintegerCodice HTTP.
detailsstringMessaggio di errore (testo leggibile).
messageKeystringChiave messaggio per i18n.
codestringCodice errore.
referencestringIdentificativo univoco della richiesta (per supporto).
timestampstringData/ora dell'errore.
typestringTipo errore (es. common).

Esempi di richiesta

Esempio 1 – Minimo (un documento, un firmatario, coordinate firma)

{
"documents": [
{
"filename": "contratto.pdf",
"base64content": "JVBERi0xLjMNCiXi48/T..."
}
],
"name": "Contratto Cliente Rossi",
"notes": "Contratto di vendita Q4 2024",
"sendNotifications": true,
"signers": [
{
"firstName": "Mario",
"lastName": "Rossi",
"email": "[email protected]",
"action": "S",
"signatureCoordinates": [
{
"document": 0,
"page": 1,
"signatureType": "S",
"positionX": 0.6,
"positionY": 0.4,
"width": 0.2,
"height": 0.08
}
]
}
]
}

Esempio 2 – Con scadenza e webhook

{
"documents": [
{
"filename": "documento.pdf",
"base64content": "JVBERi0xLjMNCi..."
}
],
"name": "Pratica con scadenza e webhook",
"sendNotifications": true,
"expirationDateDays": 30,
"webhook": {
"url": "https://your-server.com/webhook/askmesign",
"authMode": "basic",
"username": "webhook_user",
"password": "webhook_secret"
},
"signers": [
{
"email": "[email protected]",
"firstName": "Luigi",
"lastName": "Verdi",
"action": "S",
"signatureCoordinates": [
{
"document": 0,
"page": 1,
"signatureType": "S",
"positionX": 0.5,
"positionY": 0.8,
"width": 0.25,
"height": 0.1
}
]
}
]
}

Esempio 3 – Documento da URL esterno

{
"documents": [
{
"filename": "documento-da-url.pdf",
"externalUrl": "https://your-cdn.example.com/files/contratto.pdf"
}
],
"name": "Pratica da URL",
"sendNotifications": true,
"signers": [
{
"email": "[email protected]",
"action": "S",
"signatureCoordinates": [
{
"document": 0,
"page": 1,
"signatureType": "S",
"positionX": 0.6,
"positionY": 0.4,
"width": 0.2,
"height": 0.08
}
]
}
]
}

Esempio 4 – Due documenti, due firmatari in sequenza

{
"documents": [
{ "filename": "allegato1.pdf", "base64content": "..." },
{ "filename": "allegato2.pdf", "base64content": "...", "order": 1 }
],
"name": "Doppia firma",
"sendNotifications": true,
"signers": [
{
"email": "[email protected]",
"firstName": "Primo",
"lastName": "Firmatario",
"action": "S",
"signatureCoordinates": [
{ "document": 0, "page": 1, "signatureType": "S", "positionX": 0.6, "positionY": 0.4, "width": 0.2, "height": 0.08 }
]
},
{
"email": "[email protected]",
"firstName": "Secondo",
"lastName": "Firmatario",
"action": "S",
"signatureCoordinates": [
{ "document": 0, "page": 1, "signatureType": "S", "positionX": 0.6, "positionY": 0.5, "width": 0.2, "height": 0.08 },
{ "document": 1, "page": 1, "signatureType": "S", "positionX": 0.6, "positionY": 0.4, "width": 0.2, "height": 0.08 }
]
}
]
}

2. Invio Email con Copia del File

Endpoint: POST /api/v2/files/send-copy

Questo endpoint permette di inviare via email una copia dei documenti di una pratica a uno o più destinatari. Il sistema allega automaticamente i file della pratica all'email, utilizzando un template di notifica dedicato. È possibile personalizzare oggetto e corpo del messaggio, e opzionalmente inviare una copia in CC al mittente (l'utente autenticato).

Caso d'uso: Dopo che un contratto è stato firmato da tutti i firmatari, l'azienda vuole inviare una copia del documento firmato al cliente e al responsabile amministrativo, con un messaggio personalizzato (es. "In allegato il contratto firmato"). L'operatore può anche ricevere una copia in CC per conferma dell'invio.


Autenticazione e headers

La richiesta deve includere gli header di autenticazione API:

HeaderObbligatorioDescrizione
X-SignTokenToken API (es. 8GvIU4U1xZ36VXbxOVwxgU1jBgFlPQBPWbUZ)
X-SignUserUsername o identificativo utente (es. A462252)

Esempio:

POST /api/v2/files/send-copy HTTP/1.1
Host: sign.askme.it
Content-Type: application/json
X-SignToken: your-api-token
X-SignUser: your-username

{ ... body JSON ... }

Corpo della richiesta (body)

Il body è un oggetto JSON (SendFileCopyDTO).

AttributoTipoObbligatorioDescrizione
idFilenumber (long)ID della pratica di cui inviare la copia dei documenti.
emailsarray[string]Array di indirizzi email dei destinatari. Deve contenere almeno un elemento.
subjectstringNoOggetto dell'email. Se omesso, viene usato l'oggetto predefinito dal template.
messagestringNoCorpo del messaggio email personalizzato.
sendCopySenderbooleanNoSe true, invia una copia in CC anche all'utente autenticato che effettua la richiesta. Default: false.

Risposta (successo)

  • Codice HTTP: 200 OK
  • Body: true (boolean) — indica che l'invio è avvenuto con successo.
true

Codici di errore

CodiceSignificato
400Bad Request – idFile mancante oppure emails vuoto o non specificato.
401Unauthorized – token o API Key mancanti o non validi.
403Forbidden – utente non autenticato o non autorizzato ad accedere alla pratica specificata.
500Internal Server Error – errore lato server (es. invio email fallito); riprovare o contattare il supporto.

Esempi di richiesta

Esempio 1 – Invio a un destinatario

{
"idFile": 12345,
"emails": [
"[email protected]"
],
"subject": "Copia del contratto firmato",
"message": "In allegato trova il contratto firmato da tutti i firmatari.",
"sendCopySender": false
}

Esempio 2 – Invio a più destinatari con copia al mittente

{
"idFile": 12345,
"emails": [
"[email protected]",
"[email protected]",
"[email protected]"
],
"subject": "Documentazione firmata - Pratica #12345",
"message": "Si trasmette in allegato la documentazione firmata per gli archivi.",
"sendCopySender": true
}

3. Verifica Stato Account

Endpoint: GET /api/v2/account

Questo endpoint restituisce le informazioni complete sull'utente autenticato e sul suo account in Askme Sign. Include dati anagrafici, permessi, tenant disponibili, configurazioni di firma e preferenze di notifica. È utile sia per verificare la validità delle credenziali API sia per ottenere il contesto dell'utente corrente (permessi, tenant, configurazioni).

Caso d'uso: Un'applicazione esterna vuole verificare periodicamente che le credenziali API siano valide, ottenere i permessi dell'utente per abilitare/disabilitare funzionalità nella propria interfaccia, oppure recuperare l'elenco dei tenant disponibili per un utente multi-tenant.


Autenticazione e headers

La richiesta deve includere gli header di autenticazione API:

HeaderObbligatorioDescrizione
X-SignTokenToken API (es. 8GvIU4U1xZ36VXbxOVwxgU1jBgFlPQBPWbUZ)
X-SignUserUsername o identificativo utente (es. A462252)

Esempio:

GET /api/v2/account HTTP/1.1
Host: sign.askme.it
X-SignToken: your-api-token
X-SignUser: your-username

Parametri della richiesta

Nessun parametro aggiuntivo: l'utente viene identificato automaticamente dagli header di autenticazione.


Risposta (successo)

  • Codice HTTP: 200 OK
  • Body: oggetto UserAccountDTO.
Campi principali
CampoTipoDescrizione
idUsernumber (long)ID univoco dell'utente.
usernamestringUsername dell'utente.
firstNamestringNome.
lastNamestringCognome.
emailstringEmail dell'utente.
phonestringNumero di telefono.
phonePrefixstringPrefisso telefonico.
fiscalCodestringCodice fiscale.
externalbooleanSe true, l'utente è un firmatario esterno.
enabledbooleanSe true, l'utente è attivo.
langKeystringLingua preferita (es. it, en).
statuscharStato utente: A (presente), O (assente).
lastOnlinestring (date)Data/ora dell'ultimo accesso.
permissionsarray[string]Elenco dei permessi/autorità dell'utente (es. AS_DOC_SUB, AS_DOC_LST).
currentTenantobjectInformazioni sul tenant corrente (vedi sotto).
availableTenantsarrayElenco dei tenant disponibili per l'utente.
ldapUserbooleanSe true, l'utente è di tipo LDAP.
twoFactorAuthEnabledbooleanSe true, l'autenticazione a due fattori è abilitata.
feqRemoteEnabledbooleanSe true, la firma elettronica qualificata remota è abilitata.
feqLocalEnabledbooleanSe true, la firma elettronica qualificata locale è abilitata.
notificationsEnabledbooleanSe true, le notifiche sono abilitate per l'utente.
Oggetto currentTenant
CampoTipoDescrizione
idTenantnumber (long)ID del tenant.
codestringCodice tenant.
namestringNome del tenant.

Esempio di risposta:

{
"idUser": 1001,
"username": "A462252",
"firstName": "Mario",
"lastName": "Rossi",
"email": "[email protected]",
"phone": "3331234567",
"enabled": true,
"external": false,
"langKey": "it",
"status": "A",
"permissions": [
"AS_DOC_SUB",
"AS_DOC_LST",
"AS_DOC_DOW",
"AS_DOC_DEL"
],
"currentTenant": {
"idTenant": 1,
"code": "TENANT01",
"name": "Azienda SpA"
},
"availableTenants": [
{
"idTenant": 1,
"code": "TENANT01",
"name": "Azienda SpA"
}
],
"notificationsEnabled": true,
"twoFactorAuthEnabled": false,
"feqRemoteEnabled": true,
"feqLocalEnabled": false,
"ldapUser": false
}

Codici di errore

CodiceSignificato
401Unauthorized – token o API Key mancanti o non validi, oppure utente non trovato.
500Internal Server Error – errore lato server; riprovare o contattare il supporto.

4. Lista File nell'Archivio

Endpoint: GET /api/v2/files/

Questo endpoint restituisce l'elenco paginato delle pratiche (file) visibili all'utente autenticato, con supporto per numerosi filtri (per stato, data, firmatario, urgenza, ecc.) e ordinamento. Utilizza il sistema di paginazione standard di Spring Data: i parametri page, size e sort vengono passati come query string.

Caso d'uso: Un'applicazione di gestione documentale vuole mostrare all'utente tutti i documenti inviati per la firma, con possibilità di filtrarli per stato, data di creazione, firmatario o nome pratica. Un sistema esterno può anche usare questo endpoint per monitorare periodicamente lo stato delle pratiche e sincronizzare il proprio database.


Autenticazione e headers

HeaderObbligatorioDescrizione
X-SignTokenToken API (es. 8GvIU4U1xZ36VXbxOVwxgU1jBgFlPQBPWbUZ)
X-SignUserUsername o identificativo utente (es. A462252)

Esempio:

GET /api/v2/files/?page=0&size=20&sort=idFile,desc HTTP/1.1
Host: sign.askme.it
X-SignToken: your-api-token
X-SignUser: your-username

Parametri query (paginazione e ordinamento)

ParametroTipoDefaultDescrizione
pageinteger0Numero della pagina (0-based).
sizeinteger100Numero di elementi per pagina.
sortstringidFile,descCampo e direzione di ordinamento (es. tsIns,desc, name,asc). È possibile specificare più campi separandoli con &sort=.

Parametri query (filtri)

Tutti i filtri sono opzionali e vengono passati come query string.

ParametroTipoDescrizione
idFilenumber (long)Filtra per ID pratica specifico.
querystringRicerca testuale su nome pratica e altri campi.
statusarray[string]Filtra per stato/i della pratica (es. status=L&status=R). Valori: L In lavorazione, F Firmato, R Rifiutato, E Scaduto, S Sospeso, V Annullato, U Caricato, A Completato, C Cestinato.
tsInsFromstring (date)Data inizio creazione (formato yyyy-MM-dd).
tsInsTostring (date)Data fine creazione (formato yyyy-MM-dd).
tsUpdFromstring (date)Data inizio ultimo aggiornamento.
tsUpdTostring (date)Data fine ultimo aggiornamento.
expirationDateMinstring (date)Data scadenza minima.
expirationDateMaxstring (date)Data scadenza massima.
idUsernumber (long)Filtra per ID utente creatore.
userEmailstringFiltra per email dell'utente creatore.
idSignerarray[long]Filtra per ID firmatario/i.
urgentbooleanSe true, mostra solo le pratiche urgenti.
digitalSignedbooleanSe true, mostra solo pratiche con firma digitale.
protocolstringFiltra per numero di protocollo.
flowstringFiltra per flusso.
idFlownumber (long)Filtra per ID flusso.
externalIdstringFiltra per ID sistema esterno.
metadataKeystringFiltra per chiave metadato (parametro workflow).
metadataValuestringFiltra per valore metadato (usare insieme a metadataKey).

Risposta (successo)

  • Codice HTTP: 200 OK
  • Body: oggetto Page contenente l'elenco delle pratiche e i metadati di paginazione.
Struttura della risposta paginata
CampoTipoDescrizione
contentarrayArray di oggetti pratica (vedi sotto).
totalElementsnumberNumero totale di elementi corrispondenti ai filtri.
totalPagesnumberNumero totale di pagine.
sizenumberDimensione della pagina richiesta.
numbernumberNumero della pagina corrente (0-based).
numberOfElementsnumberNumero di elementi nella pagina corrente.
firstbooleantrue se è la prima pagina.
lastbooleantrue se è l'ultima pagina.
Campi principali di ogni elemento in content
CampoTipoDescrizione
idFilenumber (long)ID univoco della pratica.
namestringNome della pratica.
statuscharStato della pratica (vedi sezione Codici Stato).
numDocumentsintegerNumero di documenti nella pratica.
expirationDatestring (date)Data di scadenza.
protocolstringNumero di protocollo (se presente).
urgentbooleanSe true, la pratica è contrassegnata come urgente.
privacystringLivello di privacy (P, A, C, S).
digitalSignedbooleanSe true, contiene firme digitali.
sealedbooleanSe true, la pratica è sigillata.
tsInsstring (date)Data/ora di creazione.
tsUpdstring (date)Data/ora ultimo aggiornamento.
userobjectInformazioni sull'utente creatore (idUser, firstName, lastName, email).
signersarrayElenco dei firmatari con stato dell'azione.
workflowTypeobjectInformazioni sulla tipologia di processo (se presente).
tenantobjectInformazioni sul tenant (in ambienti multi-tenant).

Esempio di risposta:

{
"content": [
{
"idFile": 12345,
"name": "Contratto Cliente Rossi",
"status": "L",
"numDocuments": 1,
"expirationDate": "2025-06-30T23:59:59+02:00",
"urgent": false,
"privacy": "A",
"digitalSigned": false,
"tsIns": "2025-01-15T10:30:00+01:00",
"tsUpd": "2025-01-15T10:30:00+01:00",
"user": {
"idUser": 1001,
"firstName": "Mario",
"lastName": "Rossi",
"email": "[email protected]"
},
"signers": [
{
"email": "[email protected]",
"firstName": "Luigi",
"lastName": "Verdi",
"action": "S"
}
]
}
],
"totalElements": 150,
"totalPages": 8,
"size": 20,
"number": 0,
"numberOfElements": 20,
"first": true,
"last": false
}

Codici di errore

CodiceSignificato
401Unauthorized – token o API Key mancanti o non validi.
403Forbidden – utente non autorizzato alla visualizzazione dell'archivio.
500Internal Server Error – errore lato server; riprovare o contattare il supporto.

5. Download File Firmato

Endpoint: GET /api/v2/files/download/{idFile}

Questo endpoint consente di scaricare i documenti di una pratica. Se la pratica contiene un solo documento, il download restituisce il file direttamente (es. PDF). Se la pratica contiene più documenti, il sistema restituisce un archivio ZIP contenente tutti i file. In base alla configurazione del tenant, il download può includere anche il report di audit. Per i documenti con firma digitale CAdES, il file restituito avrà estensione .p7m.

Caso d'uso: Dopo che tutti i firmatari hanno completato il processo di firma (stato F), l'applicazione scarica automaticamente il documento firmato per archiviarlo nel sistema documentale aziendale. Il download può essere integrato in un workflow automatico attivato da un webhook di completamento.


Autenticazione e headers

HeaderObbligatorioDescrizione
X-SignTokenToken API (es. 8GvIU4U1xZ36VXbxOVwxgU1jBgFlPQBPWbUZ)
X-SignUserUsername o identificativo utente (es. A462252)

Esempio:

GET /api/v2/files/download/12345 HTTP/1.1
Host: sign.askme.it
X-SignToken: your-api-token
X-SignUser: your-username

Parametri

ParametroPosizioneTipoObbligatorioDescrizione
idFilepathnumber (long)ID della pratica di cui scaricare i documenti.

Risposta (successo)

  • Codice HTTP: 200 OK
  • Body: contenuto binario del file (stream).
  • Content-Type: application/pdf (documento singolo), application/zip (più documenti) o altro in base al tipo di file.
Headers della risposta
HeaderDescrizione
Content-TypeMIME type del file (es. application/pdf, application/zip).
Content-LengthDimensione del file in byte.
Content-Dispositionattachment; filename="nomefile.pdf" — indica il nome del file per il download.

Note:

  • Se il file è in formato CAdES (firma digitale P7M), il filename avrà estensione .p7m aggiunta automaticamente.
  • Se la pratica contiene più documenti, il Content-Type sarà application/zip e il file conterrà tutti i documenti in un archivio ZIP.
  • Se la configurazione prevede il download sempre in formato ZIP (documentsDownloadAlwaysZip), anche i file singoli verranno restituiti come archivio ZIP.

Codici di errore

CodiceSignificato
401Unauthorized – token o API Key mancanti o non validi.
403Forbidden – utente non autorizzato al download (DOC_DOWNLOAD) o non ha accesso alla pratica.
404Not Found – pratica non trovata o dati del documento eliminati.
500Internal Server Error – errore lato server; riprovare o contattare il supporto.

6. Eliminazione File

Endpoint: DELETE /api/v2/files/{idFile}

Questo endpoint esegue l'eliminazione logica di una pratica dal sistema. L'operazione non rimuove fisicamente il record dal database, ma disabilita la pratica e cancella i dati dei documenti associati (contenuti, storico, annotazioni). I dati eliminati non sono recuperabili. L'operazione registra anche un evento di rimozione e, se configurati, esegue eventuali plugin/hook post-eliminazione.

Caso d'uso: Un documento inviato per errore o non più necessario deve essere rimosso dal sistema per motivi di privacy o conformità GDPR. Un sistema esterno può integrare la cancellazione nel proprio workflow di gestione del ciclo di vita dei documenti.


Autenticazione e headers

HeaderObbligatorioDescrizione
X-SignTokenToken API (es. 8GvIU4U1xZ36VXbxOVwxgU1jBgFlPQBPWbUZ)
X-SignUserUsername o identificativo utente (es. A462252)

Esempio:

DELETE /api/v2/files/12345 HTTP/1.1
Host: sign.askme.it
X-SignToken: your-api-token
X-SignUser: your-username

Parametri

ParametroPosizioneTipoObbligatorioDescrizione
idFilepathnumber (long)ID della pratica da eliminare.

Risposta (successo)

  • Codice HTTP: 200 OK
  • Body: true (boolean) — indica che l'eliminazione è avvenuta con successo.
true

Operazioni eseguite dal sistema:

  1. Eliminazione dei contenuti dei documenti (dati binari, storico).
  2. Impostazione del flag deletedData a true con timestamp di eliminazione.
  3. Rimozione dei punti utente associati alla pratica.
  4. Disabilitazione del record pratica nel database.
  5. Esecuzione di eventuali plugin/hook configurati per l'evento REMOVE.

Codici di errore

CodiceSignificato
401Unauthorized – token o API Key mancanti o non validi.
403Forbidden – utente non autorizzato all'eliminazione (DOC_DELETE) o non ha accesso alla pratica.
404Not Found – pratica non trovata con l'ID specificato.
500Internal Server Error – errore lato server; riprovare o contattare il supporto.

7. Webhook per Notifiche Stato

Endpoint: Configurabile dall'utente (specificato nel campo webhook o webhooks in fase di invio pratica)

Il sistema Askme Sign invia notifiche HTTP POST all'endpoint webhook configurato quando si verificano eventi significativi nel ciclo di vita della pratica: creazione, firma, rifiuto, scadenza, annullamento, ecc. Ogni notifica contiene un payload JSON con le informazioni sull'evento, sulla pratica e sul firmatario coinvolto.

I webhook vengono configurati al momento dell'invio della pratica (endpoint POST /api/v2/files/send) tramite i campi webhook (singolo endpoint) o webhooks (più endpoint). Per la struttura di configurazione si rimanda alla sezione Webhook del punto 1.

Caso d'uso: Un'applicazione vuole essere notificata in tempo reale quando un documento viene firmato, rifiutato o scade, per aggiornare automaticamente lo stato nel proprio database e avviare workflow successivi (es. archiviazione automatica del documento firmato, notifica interna al reparto, avvio di una nuova pratica).


Formato della notifica

Quando un evento si verifica, il sistema invia una richiesta HTTP POST all'URL configurato nel webhook, con corpo JSON e l'eventuale autenticazione specificata (authMode).

Struttura del payload JSON
CampoTipoDescrizione
idFilenumber (long)ID univoco della pratica.
tenantCodestringCodice del tenant a cui appartiene la pratica.
namestringNome della pratica.
statuscharStato corrente della pratica dopo l'evento (vedi sezione Codici Stato).
actioncharTipo di azione eseguita (vedi sezione Codici Azione).
signerEmailstringEmail del firmatario che ha eseguito l'azione.
notesstringNote associate all'azione (es. motivazione del rifiuto). Presente solo per azioni diverse da sottomissione e rimozione.
protocolstringNumero di protocollo della pratica (se presente).
externalIdstringID esterno della pratica nel sistema sorgente (se presente).
timestring (date)Data/ora dell'evento in formato ISO 8601 (es. 2024-10-23T10:09:00.000+0200).
Esempio di payload
{
"idFile": 12345,
"tenantCode": "TENANT01",
"name": "Contratto Cliente Rossi",
"status": "F",
"action": "S",
"signerEmail": "[email protected]",
"notes": null,
"protocol": "PROT-2024-001",
"externalId": "CRM-98765",
"time": "2024-10-23T10:09:00.000+0200"
}

Eventi che generano notifiche webhook

EventostatusactionDescrizione
Pratica creataLILa pratica è stata sottomessa e il processo di firma è iniziato.
Firma appostaL o FS, E, T, V, Q, O, JUn firmatario ha apposto la propria firma. Se era l'ultimo firmatario, lo stato diventa F (Firmato).
Pratica rifiutataRDUn firmatario ha rifiutato la pratica.
Pratica scadutaELa pratica ha superato la data di scadenza senza essere completata.
Pratica annullataVNLa pratica è stata annullata.
Visto appostoL o FPUn firmatario ha apposto un visto.
ApprovazioneL o FWUn firmatario ha approvato.

Gestione dei tentativi di invio

Il sistema gestisce automaticamente i retry in caso di fallimento della chiamata webhook. Per ogni esecuzione vengono registrati:

CampoDescrizione
numTriesNumero di tentativi effettuati.
responseCodeCodice HTTP della risposta ricevuta dal vostro endpoint.
responseMessageMessaggio della risposta HTTP.
successtrue se l'invio è andato a buon fine.
tsLastExecutionData/ora dell'ultimo tentativo.
tsNextPlannedExecutionData/ora del prossimo tentativo pianificato (se fallito).

Personalizzazione del payload

È possibile configurare un template personalizzato per il body della notifica webhook a livello di tenant, utilizzando la chiave di configurazione webhook.body.[authConfig].content. Nel template sono supportate le seguenti variabili:

VariabileDescrizione
$idFileID della pratica.
$tenantCodeCodice tenant.
$nameNome della pratica.
$statusStato della pratica.
$actionAzione eseguita.
$externalIdID esterno.
$timeTimestamp dell'evento.

Se non è configurato un template personalizzato, viene utilizzato il payload JSON standard descritto sopra.


Codici Stato Comuni

Status della pratica

CodiceCostanteDescrizione
LLAVIn lavorazione – la pratica è attiva e in attesa di firma/azione da parte di uno o più firmatari.
FSIGNEDFirmato – tutti i firmatari hanno completato le azioni richieste. La pratica è chiusa con successo.
RRIFRifiutato – un firmatario ha rifiutato la pratica.
AAPPCompletato – la pratica è stata completata.
SSOSSospeso – la pratica è temporaneamente sospesa.
EEXPScaduto – la pratica ha superato la data di scadenza senza essere completata.
UUPLOADEDCaricato – il documento è stato caricato ma il processo di firma non è ancora avviato.
VVOIDAnnullato – la pratica è stata annullata.
CCESCestinato – la pratica è stata cestinata/eliminata.

Action

CodiceCostanteDescrizione
ISUBMITSottomissione – la pratica è stata creata e inviata.
SSIGNATUREFirma elettronica semplice – firma base senza requisiti di identificazione forte.
ESIGNATURE_FESFES – Firma Elettronica Semplice (conforme eIDAS).
TSIGNATURE_OTPFES con OTP – firma elettronica semplice con verifica via codice OTP.
VSIGNATURE_FEAFEA – Firma Elettronica Avanzata.
QSIGNATURE_FEQFEQ – Firma Elettronica Qualificata.
OONE_SHOTFEQ One-Shot – firma qualificata con certificato usa e getta.
MSIGNATURE_AUTOFirma automatica – firma apposta automaticamente dal sistema.
RREMOTE_DIGITAL_SIGNATUREFirma digitale remota – firma digitale con certificato remoto.
LLOCAL_DIGITAL_SIGNATUREFirma digitale locale PAdES – firma digitale con certificato locale.
JSIGNATURE_IOFirma IO – firma tramite app IO.
PSTAMPVisto – apposizione di un visto/timbro.
WAPPROVALApprovazione – azione di approvazione nel workflow.
DDENYRifiuto – il firmatario ha rifiutato la pratica.
NVOIDEDAnnullamento – la pratica è stata annullata.
ZREMOVERimozione – la pratica è stata rimossa.

Best Practices

  1. Gestione delle credenziali: Conservare in modo sicuro API Key e username, preferibilmente in variabili d'ambiente
  2. Paginazione: Utilizzare sempre la paginazione quando si recuperano liste di file per evitare timeout
  3. Webhook: Implementare endpoint webhook per gestire notifiche asincrone sullo stato dei documenti
  4. Retry logic: Implementare meccanismi di retry per chiamate API che potrebbero fallire temporaneamente
  5. Validazione base64: Assicurarsi che il contenuto PDF sia correttamente codificato in base64 prima dell'invio
  6. Coordinate firma: Le coordinate sono normalizzate (0-1), moltiplicarle per le dimensioni della pagina per ottenere pixel assoluti

Flusso Tipico di Lavoro

  1. Preparazione: Codificare il documento PDF in base64
  2. Invio: Chiamare /api/v2/files/send con documento e firmatari
  3. Notifica: Il sistema invia email ai firmatari (se sendNotifications: true)
  4. Monitoraggio: Ricevere webhook o polling su /api/v2/files/ per verificare lo stato
  5. Download: Quando status diventa "L", scaricare con /api/v2/files/download/:idFile
  6. Archiviazione: Salvare il documento firmato nel proprio sistema
  7. Pulizia: Opzionalmente eliminare il file dal sistema con DELETE