{
  "info": {
    "_postman_id": "9ed8a0b9-9f1d-4b1d-b3d8-2f8a2192a8c4",
    "name": "SignBolt API",
    "description": "Ready-to-import Postman collection for the SignBolt public REST API. Start with the sandbox request using sb_sandbox_2026, then add a live API key from Dashboard -> API Keys when you are ready to test production signing.",
    "schema": "https://schema.getpostman.com/json/collection/v2.1.0/collection.json"
  },
  "event": [
    {
      "listen": "prerequest",
      "script": {
        "type": "text/javascript",
        "exec": [
          "// No-op."
        ]
      }
    }
  ],
  "item": [
    {
      "name": "/api/v1/sandbox/sign",
      "description": "Public sandbox endpoint for validating your SignBolt integration without creating an account. Use this folder first to confirm variables, headers, and response parsing before provisioning a live API key.",
      "item": [
        {
          "name": "POST sandbox sign",
          "event": [
            {
              "listen": "prerequest",
              "script": {
                "type": "text/javascript",
                "exec": [
                  "// No-op."
                ]
              }
            },
            {
              "listen": "test",
              "script": {
                "type": "text/javascript",
                "exec": [
                  "pm.test(\"Status code is 200\", function () {",
                  "  pm.expect(pm.response.code).to.eql(200);",
                  "});",
                  "",
                  "pm.test(\"Body is not empty\", function () {",
                  "  pm.expect(pm.response.text()).to.not.be.empty;",
                  "});"
                ]
              }
            }
          ],
          "request": {
            "description": "Returns a deterministic mock signing response using the public sandbox token. Use this request before signup so your team can verify the collection works end to end in under 60 seconds. The {{sandboxToken}} variable defaults to sb_sandbox_2026.",
            "method": "POST",
            "header": [
              {
                "key": "Authorization",
                "value": "Bearer {{sandboxToken}}",
                "type": "text"
              },
              {
                "key": "Content-Type",
                "value": "application/json",
                "type": "text"
              }
            ],
            "body": {
              "mode": "raw",
              "raw": "{\n  \"document_url\": \"https://signbolt.au/sample.pdf\",\n  \"filename\": \"sandbox-test.pdf\",\n  \"signer_email\": \"sandbox@example.com\",\n  \"signer_name\": \"Sandbox User\"\n}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            },
            "url": {
              "raw": "{{baseUrl}}/api/v1/sandbox/sign",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "api",
                "v1",
                "sandbox",
                "sign"
              ]
            }
          },
          "response": []
        },
        {
          "name": "GET sandbox metadata",
          "event": [
            {
              "listen": "prerequest",
              "script": {
                "type": "text/javascript",
                "exec": [
                  "// No-op."
                ]
              }
            },
            {
              "listen": "test",
              "script": {
                "type": "text/javascript",
                "exec": [
                  "pm.test(\"Status code is 200\", function () {",
                  "  pm.expect(pm.response.code).to.eql(200);",
                  "});",
                  "",
                  "pm.test(\"Body is not empty\", function () {",
                  "  pm.expect(pm.response.text()).to.not.be.empty;",
                  "});"
                ]
              }
            }
          ],
          "request": {
            "description": "Returns sandbox endpoint metadata, including the auth token and example cURL request. Use this when onboarding a developer or checking that the sandbox route is reachable from your network.",
            "method": "GET",
            "header": [],
            "url": {
              "raw": "{{baseUrl}}/api/v1/sandbox/sign",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "api",
                "v1",
                "sandbox",
                "sign"
              ]
            }
          },
          "response": []
        }
      ]
    },
    {
      "name": "/api/v1/sign",
      "description": "Production signing endpoint for adding typed, drawn, uploaded, brand, or stamp signatures to PDF/image documents. A live Bearer API key is required.",
      "item": [
        {
          "name": "GET sign endpoint field reference",
          "event": [
            {
              "listen": "prerequest",
              "script": {
                "type": "text/javascript",
                "exec": [
                  "// No-op."
                ]
              }
            },
            {
              "listen": "test",
              "script": {
                "type": "text/javascript",
                "exec": [
                  "pm.test(\"Status code is 200\", function () {",
                  "  pm.expect(pm.response.code).to.eql(200);",
                  "});",
                  "",
                  "pm.test(\"Body is not empty\", function () {",
                  "  pm.expect(pm.response.text()).to.not.be.empty;",
                  "});"
                ]
              }
            }
          ],
          "request": {
            "description": "Returns the public field reference for POST /api/v1/sign without requiring authentication. Use this to inspect available signing modes, positioning fields, response formats, and rate-limit headers.",
            "method": "GET",
            "header": [],
            "url": {
              "raw": "{{baseUrl}}/api/v1/sign",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "api",
                "v1",
                "sign"
              ]
            }
          },
          "response": []
        },
        {
          "name": "POST sign PDF with typed signature",
          "event": [
            {
              "listen": "prerequest",
              "script": {
                "type": "text/javascript",
                "exec": [
                  "// No-op."
                ]
              }
            },
            {
              "listen": "test",
              "script": {
                "type": "text/javascript",
                "exec": [
                  "pm.test(\"Status code is 200\", function () {",
                  "  pm.expect(pm.response.code).to.eql(200);",
                  "});",
                  "",
                  "pm.test(\"Body is not empty\", function () {",
                  "  pm.expect(pm.response.text()).to.not.be.empty;",
                  "});"
                ]
              }
            }
          ],
          "request": {
            "description": "Signs a PDF using a typed signature and returns base64 JSON instead of binary PDF bytes. Use this for backend tests, CI checks, and integrations that need to store the signed PDF in object storage.",
            "method": "POST",
            "header": [
              {
                "key": "Authorization",
                "value": "Bearer {{apiKey}}",
                "type": "text"
              }
            ],
            "body": {
              "mode": "formdata",
              "formdata": [
                {
                  "key": "file",
                  "type": "file",
                  "src": ""
                },
                {
                  "key": "mode",
                  "value": "type",
                  "type": "text"
                },
                {
                  "key": "typedName",
                  "value": "Jane Smith",
                  "type": "text"
                },
                {
                  "key": "positions",
                  "value": "[{\"x\":75,\"y\":88,\"page\":0,\"width\":20}]",
                  "type": "text"
                },
                {
                  "key": "sigColor",
                  "value": "#1e3a8a",
                  "type": "text"
                },
                {
                  "key": "format",
                  "value": "base64",
                  "type": "text"
                }
              ]
            },
            "url": {
              "raw": "{{baseUrl}}/api/v1/sign",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "api",
                "v1",
                "sign"
              ]
            }
          },
          "response": []
        }
      ]
    },
    {
      "name": "/api/v1/templates",
      "description": "Template catalogue endpoint for listing available generated documents. A live Bearer API key is required.",
      "item": [
        {
          "name": "GET list legal templates",
          "event": [
            {
              "listen": "prerequest",
              "script": {
                "type": "text/javascript",
                "exec": [
                  "// No-op."
                ]
              }
            },
            {
              "listen": "test",
              "script": {
                "type": "text/javascript",
                "exec": [
                  "pm.test(\"Status code is 200\", function () {",
                  "  pm.expect(pm.response.code).to.eql(200);",
                  "});",
                  "",
                  "pm.test(\"Body is not empty\", function () {",
                  "  pm.expect(pm.response.text()).to.not.be.empty;",
                  "});"
                ]
              }
            }
          ],
          "request": {
            "description": "Lists SignBolt document templates, optionally filtered by category. Use this before template generation so your UI can show valid slugs and required fields.",
            "method": "GET",
            "header": [
              {
                "key": "Authorization",
                "value": "Bearer {{apiKey}}",
                "type": "text"
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/api/v1/templates?category=legal",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "api",
                "v1",
                "templates"
              ],
              "query": [
                {
                  "key": "category",
                  "value": "legal"
                }
              ]
            }
          },
          "response": []
        }
      ]
    },
    {
      "name": "/api/v1/templates/generate",
      "description": "Template generation endpoint for producing a filled PDF from a supported template slug. A live Bearer API key is required.",
      "item": [
        {
          "name": "POST generate NDA PDF",
          "event": [
            {
              "listen": "prerequest",
              "script": {
                "type": "text/javascript",
                "exec": [
                  "// No-op."
                ]
              }
            },
            {
              "listen": "test",
              "script": {
                "type": "text/javascript",
                "exec": [
                  "pm.test(\"Status code is 200\", function () {",
                  "  pm.expect(pm.response.code).to.eql(200);",
                  "});",
                  "",
                  "pm.test(\"Body is not empty\", function () {",
                  "  pm.expect(pm.response.text()).to.not.be.empty;",
                  "});"
                ]
              }
            }
          ],
          "request": {
            "description": "Generates a filled PDF from a template and returns the document as base64 JSON. Use this when your product needs to assemble standard agreements before sending or signing them.",
            "method": "POST",
            "header": [
              {
                "key": "Authorization",
                "value": "Bearer {{apiKey}}",
                "type": "text"
              },
              {
                "key": "Content-Type",
                "value": "application/json",
                "type": "text"
              }
            ],
            "body": {
              "mode": "raw",
              "raw": "{\n  \"template\": \"nda\",\n  \"format\": \"base64\",\n  \"fields\": {\n    \"partyA\": \"Acme Pty Ltd\",\n    \"partyB\": \"Jane Smith\",\n    \"effectiveDate\": \"2026-05-22\",\n    \"duration\": \"2 years\",\n    \"jurisdiction\": \"Western Australia\"\n  }\n}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            },
            "url": {
              "raw": "{{baseUrl}}/api/v1/templates/generate",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "api",
                "v1",
                "templates",
                "generate"
              ]
            }
          },
          "response": []
        }
      ]
    },
    {
      "name": "/api/v1/documents",
      "description": "Document listing endpoint for reading signed document history. A live Bearer API key is required.",
      "item": [
        {
          "name": "GET list signed documents",
          "event": [
            {
              "listen": "prerequest",
              "script": {
                "type": "text/javascript",
                "exec": [
                  "// No-op."
                ]
              }
            },
            {
              "listen": "test",
              "script": {
                "type": "text/javascript",
                "exec": [
                  "pm.test(\"Status code is 200\", function () {",
                  "  pm.expect(pm.response.code).to.eql(200);",
                  "});",
                  "",
                  "pm.test(\"Body is not empty\", function () {",
                  "  pm.expect(pm.response.text()).to.not.be.empty;",
                  "});"
                ]
              }
            }
          ],
          "request": {
            "description": "Lists signed documents for the authenticated account with pagination, sorting, and optional search filters. Use this to power an audit-log screen or to sync signed document metadata into your own system.",
            "method": "GET",
            "header": [
              {
                "key": "Authorization",
                "value": "Bearer {{apiKey}}",
                "type": "text"
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/api/v1/documents?page=1&limit=20&sortBy=signed_at&sortDir=desc",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "api",
                "v1",
                "documents"
              ],
              "query": [
                {
                  "key": "page",
                  "value": "1"
                },
                {
                  "key": "limit",
                  "value": "20"
                },
                {
                  "key": "sortBy",
                  "value": "signed_at"
                },
                {
                  "key": "sortDir",
                  "value": "desc"
                }
              ]
            }
          },
          "response": []
        }
      ]
    },
    {
      "name": "/api/v1/send",
      "description": "Email sending endpoint for requesting a signature from a recipient. A live Bearer API key is required.",
      "item": [
        {
          "name": "POST send document for signature",
          "event": [
            {
              "listen": "prerequest",
              "script": {
                "type": "text/javascript",
                "exec": [
                  "// No-op."
                ]
              }
            },
            {
              "listen": "test",
              "script": {
                "type": "text/javascript",
                "exec": [
                  "pm.test(\"Status code is 200\", function () {",
                  "  pm.expect(pm.response.code).to.eql(200);",
                  "});",
                  "",
                  "pm.test(\"Body is not empty\", function () {",
                  "  pm.expect(pm.response.text()).to.not.be.empty;",
                  "});"
                ]
              }
            }
          ],
          "request": {
            "description": "Emails a PDF to a recipient with a signing request and returns the signing URL plus sent status. Use this when the signer is outside your app and should receive the document by email.",
            "method": "POST",
            "header": [
              {
                "key": "Authorization",
                "value": "Bearer {{apiKey}}",
                "type": "text"
              }
            ],
            "body": {
              "mode": "formdata",
              "formdata": [
                {
                  "key": "file",
                  "type": "file",
                  "src": ""
                },
                {
                  "key": "recipientEmail",
                  "value": "client@example.com",
                  "type": "text"
                },
                {
                  "key": "recipientName",
                  "value": "Client Example",
                  "type": "text"
                },
                {
                  "key": "message",
                  "value": "Please review and sign this document.",
                  "type": "text"
                }
              ]
            },
            "url": {
              "raw": "{{baseUrl}}/api/v1/send",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "api",
                "v1",
                "send"
              ]
            }
          },
          "response": []
        }
      ]
    },
    {
      "name": "/api/v1/status",
      "description": "Status endpoint for checking the signing state of a document by audit ID. A live Bearer API key is required.",
      "item": [
        {
          "name": "GET signing status",
          "event": [
            {
              "listen": "prerequest",
              "script": {
                "type": "text/javascript",
                "exec": [
                  "// No-op."
                ]
              }
            },
            {
              "listen": "test",
              "script": {
                "type": "text/javascript",
                "exec": [
                  "pm.test(\"Status code is 200\", function () {",
                  "  pm.expect(pm.response.code).to.eql(200);",
                  "});",
                  "",
                  "pm.test(\"Body is not empty\", function () {",
                  "  pm.expect(pm.response.text()).to.not.be.empty;",
                  "});"
                ]
              }
            }
          ],
          "request": {
            "description": "Fetches the signed status, file hash, verification URL, and metadata for one audit ID. Use this after signing or sending a document so your app can poll until the workflow is complete.",
            "method": "GET",
            "header": [
              {
                "key": "Authorization",
                "value": "Bearer {{apiKey}}",
                "type": "text"
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/api/v1/status?auditId=SB-A1B2-C3D4-E5F6",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "api",
                "v1",
                "status"
              ],
              "query": [
                {
                  "key": "auditId",
                  "value": "SB-A1B2-C3D4-E5F6"
                }
              ]
            }
          },
          "response": []
        }
      ]
    }
  ],
  "variable": [
    {
      "key": "baseUrl",
      "value": "https://signbolt.au",
      "type": "string"
    },
    {
      "key": "apiKey",
      "value": "",
      "type": "string"
    },
    {
      "key": "sandboxToken",
      "value": "sb_sandbox_2026",
      "type": "string"
    }
  ]
}
