Genie Snap® API Reference
Integrations and API
Guidance:
Genie Snap supports APIs for submissions, responses, and document generation.
Postman - Genie Snap API
One API Shape, Every Application, Never Broken by an Edit
Every workflow Genie Snap generates — whether it started as a typed sentence, an AI-drafted prompt, or an uploaded DOCX/PDF — is compiled through the same pipeline into three synchronized outputs: the HTML Form, the REST API, and the Document Template. They are not three systems that happen to be wired together; they are one specification rendered three ways in the same pass.
That's why the API's mechanics never change from one generated application to the next: the endpoint you call (WebSubmissionGenie for submissions, WebDocumentGenieGenerate for document-only generation), the Bearer authorization model, the contract structure, and the response shape are identical whether this is your first generated workflow or your five-hundredth. Only the data elements inside the contract differ. Learn the integration pattern once and you already know how to integrate every workflow this compiler will ever produce.
Editing a form doesn't retire the integrations built against it. Every contract you download carries its own version identifiers in the payload — _genieApplicationVersion, _genieVersion, and _genieSubmissionVersion — rather than the server assuming every caller wants whatever the form looks like today. A contract you integrated against a year ago still posts successfully now, even after that form has since been edited and republished several times over. There's no /v2/ endpoint to migrate to, no deprecation calendar, and no coordinated cutover window to schedule with every client already live on the old contract.
The same guarantee covers document generation. WebDocumentGenieGenerate is the same deterministic templating engine behind every generated document, for every generated application — and a document contract built against an older template version still renders the exact output structure it always has, unaffected by later template revisions.
Your First Call
To create a submission: download the form's contract from Dashboard Forms, fill in the values after _webGenieControl, and post the contract as the request body. The query parameters and keys are explained below.
POST https://web.geniesnap.com/WebSubmissionGenie?Username=[team member email]&Description=[up to 250 characters]&FUID=[form id]&TUID=[team id]&Operation=new Authorization: Bearer [apiKey] Content-Type: application/json [the downloaded contract, with your values filled in]
A successful call returns JSON whose Result is the new submission's ID, and the submission appears in Dashboard Submissions. Every other operation uses the same endpoint with a different Operation value.
API Authorization
Every API call must include an
Authorization header, using a Bearer token, at the top of the request:
Authorization: Bearer [apiKey]The apiKey is issued per Team. A team can hold several active API keys at once — each one authorizes the same set of calls for that team, independently of the others. The key authorizes the call for the team; the
Username parameter described under each API call must still be a member of that team with the required permission.
Managing API Keys
API keys are managed from the team they belong to. Go to Teams, select the edit icon for the team, and scroll to the API Keys section at the bottom of the dialog. Every key the team has ever been issued is listed there:
| Column | Description |
|---|---|
| Name | A short label for the key. Use the name of the integration or system that will use it. |
| Description | A free-text note on what the key is used for, so its purpose stays clear when a team runs more than one integration. |
| Key | The value to send in the Authorization: Bearer header. |
| Last Used | The date and time the key was last used to call the API. Use it to spot keys that are no longer in use, and to confirm that an integration has switched over to a new key. |
| Created | The date the key was created. |
| Status / Action | Active keys show a Revoke button. Revoked keys remain in the list, marked Revoked, so there is a record of what was issued. |
-
Add a Key: Select Add API Key, give it a name and description (useful when a team runs more than one integration, so each key's purpose stays clear), and a new key is generated immediately. Existing keys are entirely unaffected — a team is never limited to one active key.
-
Revoke a Key: Select Revoke next to the specific key you want to stop using. This takes effect immediately and only affects that one key — every other API key on the team keeps working exactly as before. There's no need to update or restart any other integration when retiring one key. Requests that present a revoked key are no longer authorized.
Rotating a Key Without Downtime
Because a team can hold more than one active key, a key can be replaced without interrupting the integration that uses it:
Step 1: Select Add API Key and create a new key for the integration.
Step 2: Update the integration to send the new key in its
Authorizationheader.Step 3: Reopen the team and check Last Used. The new key's date should be current, and the old key's date should stop advancing.
Step 4: Select Revoke on the old key.
Guidance: Issue one key per integration or consuming system rather than sharing a single key, so that revoking one never disturbs the others and Last Used tells you which system is calling. Treat API keys like passwords: keep them in a secrets store or server-side configuration, and never place them in web pages, client-side scripts, or shared documents. If a key may have been exposed, add a replacement and revoke the exposed key right away.
Submissions & Responses
All forms are ready for integration and have contracts to make it easy. When integrated, the submissions land in Dashboard Submissions same as when users select the submit button on the forms. Follow these instructions to integrate submissions and responses.
Authentication and Authorization:
- The Username parameter on all Submission APIs must be a member of the Form's Team from which the request has been made.
- The member's role must have 'Manage Submissions' checked.
- The TUID & FUID must be obtained from the Dashboard -> Forms list page by selecting the Form's hyperlink in the Name column.
- When the Form opens, the TUID and FUID are located on the URL. Pass these values in the API requests.
New Submission
-
Step 1: Download the contract for the specific form from the list located at Dashboard Forms.
-
Step 2: The contract lists the form's elements and includes the certificate needed to post to it.
-
Step 3: POST to URL endpoint https://web.geniesnap.com/WebSubmissionGenie
-
Step 4: Pass contract as raw body: Supply values to the form's elements listed after '_webGenieControl'. Element values are applied to record and document.
-
Step 5: Pass these Query parameters:
- - Username: must provide a user from that Form's Team Members.
- - Description: must provide a description up to 250 characters.
- - FUID: must match exactly what is expected on submission. FUID is obtained by selecting the 'Name' link from Dashboard Forms list and copied from the URL.
- - TUID: must match exactly what is expected on submission. TUID is obtained by selecting the 'Name' link from Dashboard Forms list and copied from the URL.
- - Operation: for a new submission, the operation parameter is 'new'.
- - Callback URL: is optional and is called with a submission response when the submission is created.
-
Step 6: When the service request is successful, the submission record is created and JSON is returned.
The JSON Response:
- - FileName: the filename and extension specifying the file type.
- - Base64Content: the file contents in a base64 stream.
- - Result: the successful submission is the new submissionUniqueId.
- - Comment: is empty.
- - Payload: is empty.
-
Step 7: When the service request is queued. Also, see Retrieve Queued Submission
The JSON Response:
- - Message: Request accepted and will be processed asynchronously. A temporary QueuedUniqueId has been assigned. Use this to correlate when notified.
- - QueuedUniqueId: A guid is assigned for queued submission creation. Provide a callback URL for the system to respond when the submission is created.
Update Submission
-
Step 1: Download the contract for the specific form from the list located at Dashboard Forms.
-
Step 2: The contract lists the form's elements and includes the certificate needed to post to it.
-
Step 3: POST to URL endpoint https://web.geniesnap.com/WebSubmissionGenie
-
Step 4: Pass contract as raw body: Supply values to the form's elements listed after '_webGenieControl'. Element values are applied to record and document.
-
Step 5: Pass these Query parameters:
- - Username: must provide a user from that Form's Team Members.
- - FUID: must match exactly what is expected on submission. FUID is obtained by selecting the 'Name' link from Dashboard Forms list and copied from the URL.
- - TUID: must match exactly what is expected on submission. TUID is obtained by selecting the 'Name' link from Dashboard Forms list and copied from the URL.
- - Operation: for an update, the operation parameter is 'update'.
- - SubmissionUniqueId: this operation parameter is the uniqueId that was generated when the submission was created.
-
Step 6: When the service request is successful, the submission record is updated and JSON is returned.
The JSON Response:
- - FileName: the filename and extension specifying the file type.
- - Base64Content: the file contents in a base64 stream.
- - Result: the successful submission is 'updated'.
- - Comment: is empty.
- - Payload: is empty.
Delete Submission
-
Step 1: Download the contract for the specific form from the list located at Dashboard Forms.
-
Step 2: The contract lists the form's elements and includes the certificate needed to post to it.
-
Step 3: POST to URL endpoint https://web.geniesnap.com/WebSubmissionGenie
-
Step 4: Pass contract as raw body: No values are required for the Form's elements listed after '_webGenieControl'.
-
Step 5: Pass these Query parameters:
- - Username: must provide a user from that Form's Team Members.
- - FUID: must match exactly what is expected on submission. FUID is obtained by selecting the 'Name' link from Dashboard Forms list and copied from the URL.
- - TUID: must match exactly what is expected on submission. TUID is obtained by selecting the 'Name' link from Dashboard Forms list and copied from the URL.
- - Operation: for a delete, the operation parameter is 'delete'.
- - SubmissionUniqueId: this operation parameter is the uniqueId that was generated when the submission was created.
-
Step 6: When the service request is successful, the submission record is deleted and JSON is returned.
The JSON Response:
- - FileName: is empty.
- - Base64Content: is empty.
- - Result: the successful submission is 'deleted' or a message if there is a failure. If the submission is on legal hold, nothing is deleted and the message is: This submission is under legal hold and can't be deleted. A team owner must release the hold first.
- - Comment: is empty.
- - Payload: is empty.
Retrieve Submission
-
Step 1: Download the contract for the specific form from the list located at Dashboard Forms.
-
Step 2: The contract lists the form's elements and includes the certificate needed to post to it.
-
Step 3: POST to URL endpoint https://web.geniesnap.com/WebSubmissionGenie
-
Step 4: Pass contract as raw body: No values are required for the Form's elements listed after '_webGenieControl'.
-
Step 5: Pass these Query parameters:
- - Username: must provide a user from that Form's Team Members.
- - FUID: must match exactly what is expected on submission. FUID is obtained by selecting the 'Name' link from Dashboard Forms list and copied from the URL.
- - TUID: must match exactly what is expected on submission. TUID is obtained by selecting the 'Name' link from Dashboard Forms list and copied from the URL.
- - Operation: for a retrieve, the operation parameter is 'retrieve'.
- - SubmissionUniqueId: this operation parameter is the uniqueId that was generated when the submission was created.
-
Step 6: When the service request is successful, JSON is returned.
The JSON Response:
- - FileName: the filename and extension specifying the file type.
- - Base64Content: the file contents in base64 stream.
- - Result: the successful submission is 'retrieved'.
- - Comment: JSON list of comments in base64 stream.
- - Payload: JSON data elements in base64 stream.
Retrieve Queued Submission
-
Step 1: Download the contract for the specific form from the list located at Dashboard Forms.
-
Step 2: The contract lists the form's elements and includes the certificate needed to post to it.
-
Step 3: POST to URL endpoint https://web.geniesnap.com/WebSubmissionGenie
-
Step 4: Pass contract as raw body: No values are required for the Form's elements listed after '_webGenieControl'.
-
Step 5: Pass these Query parameters:
- - Username: must provide a user from that Form's Team Members.
- - FUID: must match exactly what is expected on submission. FUID is obtained by selecting the 'Name' link from Dashboard Forms list and copied from the URL.
- - TUID: must match exactly what is expected on submission. TUID is obtained by selecting the 'Name' link from Dashboard Forms list and copied from the URL.
- - Operation: for a queued retrieve, the operation parameter is 'retrieve'.
- - QueuedUniqueId: this operation parameter is the queuedUniqueId that is returned when a new submission request is queued. Use this to correlate when a queued submission is created by using callback URL.
-
Step 6: When the service request is successful, JSON is returned.
The JSON Response:
- - QueuedUniqueId: is the queuedUniqueId that was issued when the new submission was queued during creation.
- - Operation: new or created
- - Status: "Submission Created"
- - Timestamp: Utc.
- - Result: JSON submission record.
Retrieve Submission List
The list retrieves all submissions related to the Username's teams' associations. This means that even though the contract was downloaded for a form, the list is obtained by the team relationships.
-
Step 1: Download the contract for a specific form from the list located at Dashboard Forms.
-
Step 2: The contract lists the form's elements and includes the certificate needed to post to it.
-
Step 3: POST to URL endpoint https://web.geniesnap.com/WebSubmissionGenie
-
Step 4: Pass contract as raw body: No values are required for the Form's elements listed after '_webGenieControl'.
-
Step 5: Pass these Query parameters:
- - Username: must provide a user from that Form's Team Members.
- - FUID: must match exactly what is expected on submission. FUID is obtained by selecting the 'Name' link from Dashboard Forms list and copied from the URL.
- - TUID: must match exactly what is expected on submission. TUID is obtained by selecting the 'Name' link from Dashboard Forms list and copied from the URL.
- - Operation: for retrieve, the operation parameter is 'retrievelist'.
-
- StartId: The submission id to begin request.
- StartId is 0 to get from the first submission.
- StartId can start from any number
- When retrieving records sets, get the last Id from the previous data set and set StartId to that value.
- - Rows: The number of submissions to retrieve on each request.
- - Description: Search submissions for a specific description.
- - RequestorEmailAddress: Search submissions for a specific requestor's email address.
- - SearchFormUniqueId: Search submissions for a specific form.
- - State: Search submissions for open, closed, pend.
- - DateFrom: Search submissions from a specific date.
- - DateTo: Search submissions up to a specific date.
-
Step 6: When the service request is successful, a JSON list of responses with SubmissionId, FileName and Description is returned. To retrieve details, use the Retrieve Submission service.
- - FileName: this is empty.
- - Base64Content: this is empty.
- - Result: the successful submission is 'retrieved list'.
- - Comment: this is empty.
- - Payload: JSON list of submissions in base64 stream.
Document Generation
All forms are ready for integration and have contracts to make it easy. This contract can also be used solely for the purpose of document generation without creating a submission. Follow these instructions to generate documents.
Authentication and Authorization:
- The Username parameter on all Submission APIs must be a member of the Form's Team from which the request has been made.
- The member's role must have 'Manage Submissions' checked.
- The TUID must be obtained from the Dashboard -> Forms list page by selecting the Form's hyperlink in the Name column.
- When the Form opens, the TUID is located on the URL. Pass the value in the API requests.
-
Step 1: Download the contract for the specific form from the list located at Dashboard Forms.
-
Step 2: The contract lists the form's elements and includes the certificate needed to post to it.
-
Step 3: POST to URL endpoint https://web.geniesnap.com/WebDocumentGenieGenerate
-
Step 4: Pass contract as raw body: Supply values to the form's elements listed after '_webGenieControl', which are the element names you'll find in the HTML page. Element values are applied to document and no record is created.
-
Step 5: Pass these Query parameters:
- - Username: must provide a user from that Form's Team Members.
- - TUID: must match exactly what is expected on submission. TUID is obtained by selecting the 'Name' link from Dashboard Forms list and copied from the URL.
-
Step 6: When the service request is successful, the document is the service response.
eSignature API
The eSignature API lets you create, route, and retrieve eSignature requests directly through WebSubmissionGenie, without building a Genie Snap form template first.
See eSignature Guide for the PDF tagging syntax and the manual signing workflow — these API calls produce and manage the same submissions and routing.
Username: a team member's email address that must have 'Manage Submissions' access.
FUID: these calls are not tied to a specific form. Copy and paste the all-zero GUID exactly:
00000000-0000-0000-0000-000000000000.TUID: the teamUniqueId that owns the record — found by editing the Team.
New eSign
Create a new eSignature process from a PDF (or Word document converted to PDF) supplied in the request.
-
Step 1: POST to URL endpoint https://web.geniesnap.com/WebSubmissionGenie
-
Step 2: Pass these Query parameters:
- - Username: team member email address that must have 'Manage Submissions' access.
- - Description: displayed on the record.
- - FUID: 00000000-0000-0000-0000-000000000000 — copy and paste the all-zero GUID exactly.
- - TUID: the teamUniqueId that owns the record — found by editing the Team.
- - Operation: for a new eSign, the operation parameter is
new_esign. - - Callback URL: optional. Reports on Create, Sign, Abort, and Complete events — see Webhook Callbacks.
-
Step 3: Pass this Post Body as raw JSON:
[ { "Name": "_webGenieDocumentGenerateIgnoreValidation", "Value": "True" }, // leave alone { "Name": "_webGenieReferenceDocument", "Value": "[the base64 PDF]" }, { "Name": "_webGenieFileName", "Value": "[the base64 PDF file name]" }, { "Name": "_genieApplicationVersion", "Value": "1" }, // leave alone { "Name": "_webGenieParser", "Value": "{{,}}" }, // leave alone { "Name": "_webGenieValidation", "Value": "" }, // leave alone { "Name": "_webGenieDataContract", "Value": "" }, // leave alone { "Name": "_genieId", "Value": "00000000-0000-0000-0000-000000000000" }, // leave alone { "Name": "_genieVersion", "Value": "1" }, // leave alone { "Name": "_genieSubmissionVersion", "Value": "1" }, // leave alone { "Name": "_genieFormHREF", "Value": "" }, // leave alone { "Name": "_signLanguage", "Value": "en" }, // optional: the sender's language { "Name": "_signers", "Value": "[{\"Order\": 1, \"Role\": \"Signer 1\", \"Name\": \"Joe\", \"Email\": \"[email protected]\", \"Instructions\": \"\", \"Language\": \"en\"}, {\"Order\": 2, \"Role\": \"Signer 2\", \"Name\": \"Sally\", \"Email\": \"[email protected]\", \"Instructions\": \"Please sign page 3.\", \"Language\": \"es\"}]" } ]Fields marked "leave alone" must be passed exactly as shown. The_signersarray must have one matching entry for each signer order tagged in the base64 PDF — see PDF Text Tags Syntax if the document isn't tagged yet.Languages (optional):_signLanguageis the sender's language, used for the emails sent to the requester. Without it, the site's default language is used.Languageon each_signersentry is the language of that signer's request email. Without it, the sender's language is used. When the signer opens the link, their browser's language is used instead, if the site has it. See Languages.- Use a two-letter code the site offers:
en,es,de,fr,it,pt, or one your administrator added. A regional code such ases-MXis read ases, and a code the site doesn't offer is treated as if it were left out. - Leave
Instructionsempty to show each signer the standard instruction in their own language. - The same entries work in the multi-document and chunked-upload requests below. Webhook statuses stay in English.
-
Step 4: When the request is successful, JSON is returned:
- - fileName: the filename that was sent in the body.
- - base64Content: the base64 PDF that was sent in the body.
- - payload: empty.
-
- result: a JSON-encoded string containing:
- - SubmissionUniqueId: the parent record ID — keep it for renewals, since it groups any future eSignature events for this document. Use it to look up the record.
- - SignDocumentUniqueId: the document's unique ID. Use it, together with the SubmissionUniqueId, to look up information on the eSign.
- - comment: empty.
{ "fileName": null, "base64Content": null, "payload": "", "result": "{\"SubmissionUniqueId\":\"f247630b-399a-f111-972f-cc47406ca203\",\"SignDocumentUniqueId\":\"dc2a8b9a-5c99-4320-b726-e3db5e06e042\"}", "comment": "" }
Reminders and Expiration (Optional)
Signers who haven't signed are reminded automatically, using the site's settings. To set different values for one request, add any of these entries to the new_esign body. They work the same way in the multi-document and chunked-upload requests below. An entry left out uses the site's setting.
{ "Name": "_signReminderIntervalDays", "Value": "3" },
{ "Name": "_signMaxReminders", "Value": "3" },
{ "Name": "_signExpireDays", "Value": "30" },
| Name | Range | Meaning |
|---|---|---|
_signReminderIntervalDays | 0 to 30 | Days between reminders to the signer whose turn it is. 0 sends no reminders. |
_signMaxReminders | 0 to 10 | Reminders per signer. 0 sends no reminders. |
_signExpireDays | 0 to 365 | Days after the request starts before it expires. 0 never expires. |
Abort event with the status eSign Expired; see Webhook Callbacks and the eSignature Guide.
Multi-Document eSign
A single eSign envelope can route more than one document through the same signer sequence in one request. Add a _webGenieDocuments entry to the same new_esign body described above — every other field, including _webGenieReferenceDocument / _webGenieFileName (which becomes document 1, the lead document) and _signers, stays the same.
.docx source to PDF before base64-encoding it, or the request will fail once a signer opens it.
-
_webGenieDocuments: a JSON-encoded string (same convention as
_signers) containing an array of documents, in order:- - Order: 1-based position in the envelope. Document 1 should be the same file as
_webGenieReferenceDocument. - - Title: display name for the document — used to build its stored filenames (e.g.
sign_2_Exhibit_A.pdf,completed_Exhibit_A.pdf) and shown in the Submission's file list. - - FileName: the original filename, including its
.pdfextension. - - FileBase64: the base64-encoded PDF bytes for that document.
- - Order: 1-based position in the envelope. Document 1 should be the same file as
[
{ "Name": "_webGenieDocumentGenerateIgnoreValidation", "Value": "True" }, // leave alone
{ "Name": "_webGenieReferenceDocument", "Value": "[base64 of document 1 - the lead document]" },
{ "Name": "_webGenieFileName", "Value": "NDA.pdf" },
{ "Name": "_genieApplicationVersion", "Value": "1" }, // leave alone
{ "Name": "_webGenieParser", "Value": "{{,}}" }, // leave alone
{ "Name": "_webGenieValidation", "Value": "" }, // leave alone
{ "Name": "_webGenieDataContract", "Value": "" }, // leave alone
{ "Name": "_genieId", "Value": "00000000-0000-0000-0000-000000000000" }, // leave alone
{ "Name": "_genieVersion", "Value": "1" }, // leave alone
{ "Name": "_genieSubmissionVersion", "Value": "1" }, // leave alone
{ "Name": "_genieFormHREF", "Value": "" }, // leave alone
{
"Name": "_webGenieDocuments",
"Value": "[{\"Order\":1,\"Title\":\"NDA\",\"FileName\":\"NDA.pdf\",\"FileBase64\":\"[base64 of document 1]\"},{\"Order\":2,\"Title\":\"Exhibit A\",\"FileName\":\"ExhibitA.pdf\",\"FileBase64\":\"[base64 of document 2]\"}]"
},
{
"Name": "_signers",
"Value": "[{\"Order\": 1, \"Role\": \"Signer 1\", \"Name\": \"Joe\", \"Email\": \"[email protected]\", \"Instructions\": \"\", \"Language\": \"en\"}, {\"Order\": 2, \"Role\": \"Signer 2\", \"Name\": \"Sally\", \"Email\": \"[email protected]\", \"Instructions\": \"Please sign page 3.\", \"Language\": \"es\"}]"
}
]
SignDocumentUniqueId behave exactly as in the single-document case above; that ID now identifies the whole multi-document envelope, and the completion package delivered by email contains every document in the envelope (any document larger than the email attachment limit, 10MB by default, is included as a secure download link instead of an attachment).
400 Bad Request and a message naming the document or envelope that is too large.
Large Envelopes: Chunked Upload
A request whose JSON body is small enough can be posted directly, exactly as shown above. For a very large envelope — the combined base64 of several sizable documents can easily exceed what a single HTTP request should carry — post the same JSON body in pieces instead, using three additional endpoints under the same https://web.geniesnap.com/WebSubmissionGenie path.
Authorization: Bearer [apiKey]. This applies to StartUploadSession and UploadChunk individually, not just CompleteUploadSession at the end.
-
1. StartUploadSession — POST to
https://web.geniesnap.com/WebSubmissionGenie/StartUploadSession, with theAuthorizationheader set, and a body of{ "TotalSizeBytes": <byte length of the full JSON body, UTF-8 encoded> }. Returns{ "uploadSessionId", "chunkSizeBytes", "totalChunks" }. -
2. UploadChunk — POST to
https://web.geniesnap.com/WebSubmissionGenie/UploadChunkonce per chunk, in any order, with theAuthorizationheader set on every call, and a body of{ "UploadSessionId", "SequenceNumber", "ChunkBase64" }. Encode the full JSON body to UTF-8 bytes once, then slice it intochunkSizeBytes-sized byte ranges by positionSequenceNumber × chunkSizeBytes— slicing raw bytes rather than the text itself means a chunk boundary can safely fall in the middle of a multi-byte character; base64-encode each byte slice for transport. -
3. CompleteUploadSession — once every chunk has been sent, POST to
https://web.geniesnap.com/WebSubmissionGenie/CompleteUploadSessionwith the same query parameters (Username, Description, FUID, TUID, Operation, CallbackUrl) and Authorization header the direct call above would have used, plus a body of{ "UploadSessionId" }. The response is identical in shape to posting the whole body directly.
WebSubmissionGenie operation whose JSON body is too large for a single request, since CompleteUploadSession feeds the reassembled body through the exact same processing as a direct post.
Retrieve eSign Documents
Retrieve the list of eSign documents for a submission by its submissionUniqueId.
-
Step 1: POST to URL endpoint https://web.geniesnap.com/WebSubmissionGenie
-
Step 2: Pass these Query parameters:
- - Username: team member email address that must have 'Manage Submissions' access.
- - FUID: 00000000-0000-0000-0000-000000000000 — copy and paste the all-zero GUID exactly.
- - TUID: the teamUniqueId that owns the record — found by editing the Team.
- - SubmissionUniqueId: the record ID returned from New eSign.
- - Operation:
retrieveesigndocuments
-
Step 3: Pass this Post Body as raw JSON:
[{ "Name": "SubmissionUniqueId", "Value": "69be885c-6399-f111-972e-cc47406ca203" }] -
Step 4: When the request is successful, a JSON array is returned — one entry per eSign document on the submission:
- - uniqueIdentifier: the document's unique identifier.
- - signDocumentTaggedUniqueId: the DocumentUniqueId used with Retrieve Document Route and Retrieve Document File.
- - documentSource: the document name.
- - documentSourceId: the submissionUniqueId the document belongs to.
- - dateCreated / dateUpdated: UTC timestamps.
- - status: the current eSign status (for example, Aborted or Completed).
- - signDocumentRouteUniqueId / signDocumentRouteOrderUniqueId: internal routing identifiers.
- - createdByEmail / createdByName: the user that created the request.
- - callbackURL: the callback URL configured for the request, if any.
Retrieve eSign Document Route
Retrieve the signing order and per-signer status for a specific document.
-
Step 1: POST to URL endpoint https://web.geniesnap.com/WebSubmissionGenie
-
Step 2: Pass these Query parameters:
- - Username: team member email address that must have 'Manage Submissions' access.
- - FUID: 00000000-0000-0000-0000-000000000000 — copy and paste the all-zero GUID exactly.
- - TUID: the teamUniqueId that owns the record — found by editing the Team.
- - DocumentUniqueId: the signDocumentTaggedUniqueId from Retrieve eSign Documents.
- - Operation:
retrieveesigndocumentroute
-
Step 3: Pass this Post Body as raw JSON:
[{ "Name": "DocumentUniqueId", "Value": "D3391A4A-19E6-491A-8F87-1456707F9EAC" }] -
Step 4: When the request is successful, a JSON array is returned — one entry per signer in the routing order:
- - signDocumentUniqueId: the DocumentUniqueId this route belongs to.
- - emailAddress / name / role / order: the signer's details and position in the signing order.
- - instructions: the instructions shown to that signer.
- - dateDelivered / dateOpened / dateSigned / dateAborted: UTC timestamps for each step; null until the step occurs.
- - dateCreated: UTC timestamp the route was created.
- - base64PDF / base64PDFFile: not populated by this operation — use Retrieve eSign Document File instead.
Retrieve eSign Document File
Retrieve the completed, signed PDF file for a document.
-
Step 1: POST to URL endpoint https://web.geniesnap.com/WebSubmissionGenie
-
Step 2: Pass these Query parameters:
- - Username: team member email address that must have 'Manage Submissions' access.
- - FUID: 00000000-0000-0000-0000-000000000000 — copy and paste the all-zero GUID exactly.
- - TUID: the teamUniqueId that owns the record — found by editing the Team.
- - DocumentUniqueId: the signDocumentTaggedUniqueId from Retrieve eSign Documents, which is the same as the DocumentUniqueId used in Step 2 of Retrieve eSign Document Route. A record can have multiple signed documents.
- - SubmissionUniqueId: the record ID.
- - Operation:
retrieveesigndocumentfile
-
Step 3: Pass this Post Body as raw JSON:
[ { "Name": "DocumentUniqueId", "Value": "1628BC4B-8199-4128-97FE-7E6A5DDFD255" }, { "Name": "SubmissionUniqueId", "Value": "a8793386-5e99-f111-972e-cc47406ca203" } ] -
Step 4: When the request is successful, the response body is the completed, signed PDF as a base64 string.
Webhook Callbacks
When a Callback URL is supplied on New eSign, Genie Snap reports eSignature lifecycle events to that URL as they occur. All reported times are UTC.
| Operation | Status | Notes |
|---|---|---|
Create | Submission Created for eSignature | No PDF is supplied on this step. |
Sign | eSign Signed | No PDF is supplied on this step. |
Abort | eSign Aborted | No PDF is supplied on this step. |
Abort | eSign Expired | The request reached its expiration before all signers finished. No PDF is supplied on this step. |
Complete | eSign Completed | Contains the completed and tamper-resistant PDF in base64. |
SignDocumentUniqueId is returned on the Create event — record this against your system and use it to correlate the Sign, Abort, and Complete events for that specific document.