Genie Snap® API Reference

Integrations and 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

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
NameA short label for the key. Use the name of the integration or system that will use it.
DescriptionA free-text note on what the key is used for, so its purpose stays clear when a team runs more than one integration.
KeyThe value to send in the Authorization: Bearer header.
Last UsedThe 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.
CreatedThe date the key was created.
Status / ActionActive 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 Authorization header.

  • 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.

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.

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.
Submissions can also be removed by a form's records retention rule once they have been closed for the retention period. After that, Retrieve no longer returns them. Submissions on legal hold are never removed this way.
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
  • 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.

  • 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.

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 _signers array 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):
    • _signLanguage is the sender's language, used for the emails sent to the requester. Without it, the site's default language is used.
    • Language on each _signers entry 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 as es-MX is read as es, and a code the site doesn't offer is treated as if it were left out.
    • Leave Instructions empty 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
_signReminderIntervalDays0 to 30Days between reminders to the signer whose turn it is. 0 sends no reminders.
_signMaxReminders0 to 10Reminders per signer. 0 sends no reminders.
_signExpireDays0 to 365Days after the request starts before it expires. 0 never expires.
Values outside the range are brought to the nearest limit. If the site has turned automatic reminders off, these entries are ignored. An expired request is reported to the Callback URL as an 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.

  • _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 .pdf extension.
    • - FileBase64: the base64-encoded PDF bytes for that document.
[
    { "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\"}]"
    }
]
A signer only needs tags on some of the documents, not every one — each document is scoped to whichever signer orders actually appear in its own text tags. The response shape and 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).
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.

  • 1. StartUploadSession — POST to https://web.geniesnap.com/WebSubmissionGenie/StartUploadSession, with the Authorization header 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/UploadChunk once per chunk, in any order, with the Authorization header set on every call, and a body of { "UploadSessionId", "SequenceNumber", "ChunkBase64" }. Encode the full JSON body to UTF-8 bytes once, then slice it into chunkSizeBytes-sized byte ranges by position SequenceNumber × 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/CompleteUploadSession with 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.

Uploaded chunks that don't add up to a complete envelope within the configured idle window are discarded automatically — there's nothing to clean up on your end if an upload is abandoned partway through. Chunking is entirely optional: if your payload comfortably fits in one request, just post it directly as shown earlier in this section. Chunking also isn't limited to eSignature submissions — the same three endpoints work for any 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
CreateSubmission Created for eSignatureNo PDF is supplied on this step.
SigneSign SignedNo PDF is supplied on this step.
AborteSign AbortedNo PDF is supplied on this step.
AborteSign ExpiredThe request reached its expiration before all signers finished. No PDF is supplied on this step.
CompleteeSign CompletedContains the completed and tamper-resistant PDF in base64.
SubmissionUniqueId is the parent record — keep this for renewals or any future eSignature events, since it groups all eSign activity for the record.

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.