{
  "info": {
    "_postman_id": "5d0c7a52-8f1e-4c47-9b2a-6a3f1e0d9c41",
    "name": "KovaPDF API",
    "description": "Every endpoint of the KovaPDF API (1.6.0), from https://www.kovapdf.com/developers/openapi.json. Put your test key in the apiKey variable. A test key starts with kova_test_ and runs 10 tasks within 14 days; every signing email it sends goes only to your own address and every file is marked TEST. Every POST sends a fresh Idempotency-Key. Reference: https://www.kovapdf.com/developers/docs",
    "schema": "https://schema.getpostman.com/json/collection/v2.1.0/collection.json"
  },
  "auth": {
    "type": "bearer",
    "bearer": [
      {
        "key": "token",
        "value": "{{apiKey}}",
        "type": "string"
      }
    ]
  },
  "variable": [
    {
      "key": "baseUrl",
      "value": "https://api.kovapdf.com/api/v1"
    },
    {
      "key": "apiKey",
      "value": "kova_test_YOUR_KEY"
    },
    {
      "key": "requestId",
      "value": ""
    },
    {
      "key": "pfxPassword",
      "value": ""
    },
    {
      "key": "fileId",
      "value": ""
    },
    {
      "key": "jobId",
      "value": ""
    },
    {
      "key": "downloadToken",
      "value": ""
    }
  ],
  "item": [
    {
      "name": "Account",
      "item": [
        {
          "name": "Who am I",
          "request": {
            "method": "GET",
            "header": [],
            "url": {
              "raw": "{{baseUrl}}/me",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "me"
              ]
            },
            "description": "The account and key this call is made with: the key's name, scopes, expiry, the workspace it works in, and today's calls against its daily cap."
          }
        },
        {
          "name": "This description",
          "request": {
            "method": "GET",
            "header": [],
            "url": {
              "raw": "{{baseUrl}}/openapi.json",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "openapi.json"
              ]
            },
            "description": "The OpenAPI 3.1 description of the API. No key needed.",
            "auth": {
              "type": "noauth"
            }
          }
        }
      ]
    },
    {
      "name": "Signature requests",
      "item": [
        {
          "name": "Send a document for signature",
          "request": {
            "method": "POST",
            "header": [
              {
                "key": "Idempotency-Key",
                "value": "{{$guid}}",
                "description": "A new value for each new request. Send the same one again only to repeat the very same request."
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/sign-requests",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "sign-requests"
              ]
            },
            "description": "Upload one PDF as `file` and the request details as `spec` (a JSON string). The request is checked, limited and audited exactly like one sent from the website, and goes out in the account's name. Made with a workspace key, it belongs to that workspace.",
            "body": {
              "mode": "formdata",
              "formdata": [
                {
                  "key": "file",
                  "type": "file",
                  "src": [],
                  "description": "The PDF."
                },
                {
                  "key": "spec",
                  "type": "text",
                  "value": "{\"title\": \"Lease agreement\", \"sequential\": false, \"expiresInDays\": 14, \"signers\": [{\"name\": \"Emily Carter\", \"email\": \"emily@example.com\", \"order\": 1}], \"fields\": [{\"signer\": 0, \"kind\": \"SIGNATURE\", \"page\": 1, \"x\": 72, \"y\": 90, \"width\": 180, \"height\": 48}]}",
                  "description": "The request details as JSON."
                }
              ]
            }
          }
        },
        {
          "name": "List signature requests",
          "request": {
            "method": "GET",
            "header": [],
            "url": {
              "raw": "{{baseUrl}}/sign-requests",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "sign-requests"
              ]
            },
            "description": "Newest first, up to 200. A personal key lists the account's requests; a workspace's own key lists every request of its workspace; a member's workspace key lists that member's requests in the workspace.",
            "body": {
              "mode": "formdata",
              "formdata": [
                {
                  "key": "file",
                  "type": "file",
                  "src": [],
                  "description": "The PDF."
                },
                {
                  "key": "spec",
                  "type": "text",
                  "value": "{\"title\": \"Lease agreement\", \"sequential\": false, \"expiresInDays\": 14, \"signers\": [{\"name\": \"Emily Carter\", \"email\": \"emily@example.com\", \"order\": 1}], \"fields\": [{\"signer\": 0, \"kind\": \"SIGNATURE\", \"page\": 1, \"x\": 72, \"y\": 90, \"width\": 180, \"height\": 48}]}",
                  "description": "The request details as JSON."
                }
              ]
            }
          }
        },
        {
          "name": "Get one signature request",
          "request": {
            "method": "GET",
            "header": [],
            "url": {
              "raw": "{{baseUrl}}/sign-requests/{{requestId}}",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "sign-requests",
                "{{requestId}}"
              ]
            },
            "description": "Its documents, signers (with their private signing links while it is open), and the full audit trail."
          }
        },
        {
          "name": "Remind signers",
          "request": {
            "method": "POST",
            "header": [
              {
                "key": "Idempotency-Key",
                "value": "{{$guid}}",
                "description": "A new value for each new request. Send the same one again only to repeat the very same request."
              },
              {
                "key": "Content-Type",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/sign-requests/{{requestId}}/remind",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "sign-requests",
                "{{requestId}}",
                "remind"
              ]
            },
            "description": "Emails the signers whose turn it is again. Send `signerId` to remind one person only. Counts toward the hourly sending limit.",
            "body": {
              "mode": "raw",
              "raw": "{}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            }
          }
        },
        {
          "name": "Cancel a signature request",
          "request": {
            "method": "POST",
            "header": [
              {
                "key": "Idempotency-Key",
                "value": "{{$guid}}",
                "description": "A new value for each new request. Send the same one again only to repeat the very same request."
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/sign-requests/{{requestId}}/cancel",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "sign-requests",
                "{{requestId}}",
                "cancel"
              ]
            },
            "description": "Closes it. Signers can no longer open it, and they are told."
          }
        },
        {
          "name": "Download the document",
          "request": {
            "method": "GET",
            "header": [],
            "url": {
              "raw": "{{baseUrl}}/sign-requests/{{requestId}}/document?version=final",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "sign-requests",
                "{{requestId}}",
                "document"
              ],
              "query": [
                {
                  "key": "version",
                  "value": "final",
                  "description": ""
                }
              ]
            },
            "description": "`original` is the file as sent, `current` has every signature so far, `final` is the finished, sealed file (only once everyone has signed)."
          }
        }
      ]
    },
    {
      "name": "Signatures",
      "item": [
        {
          "name": "Verify the signatures in a PDF",
          "request": {
            "method": "POST",
            "header": [
              {
                "key": "Idempotency-Key",
                "value": "{{$guid}}",
                "description": "A new value for each new request. Send the same one again only to repeat the very same request."
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/verify",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "verify"
              ]
            },
            "description": "Upload a PDF as `file`. The answer is the same report the Verify tool shows: each signature, who signed, whether the document changed after signing, the certificate chain and the timestamp.",
            "body": {
              "mode": "formdata",
              "formdata": [
                {
                  "key": "file",
                  "type": "file",
                  "src": [],
                  "description": "The signed PDF."
                }
              ]
            }
          }
        },
        {
          "name": "Sign a PDF with your certificate",
          "request": {
            "method": "POST",
            "header": [
              {
                "key": "Idempotency-Key",
                "value": "{{$guid}}",
                "description": "A new value for each new request. Send the same one again only to repeat the very same request."
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/digital-sign",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "digital-sign"
              ]
            },
            "description": "Upload the PDF as `file` and a .pfx or .p12 certificate as `certificate`, with its `password`. The certificate and password are used once, in memory, and never stored or logged. The answer is the signed PDF; headers describe the signature.",
            "body": {
              "mode": "formdata",
              "formdata": [
                {
                  "key": "file",
                  "type": "file",
                  "src": [],
                  "description": "The PDF."
                },
                {
                  "key": "certificate",
                  "type": "file",
                  "src": [],
                  "description": "Your .pfx or .p12 certificate."
                },
                {
                  "key": "password",
                  "type": "text",
                  "value": "{{pfxPassword}}",
                  "description": "The certificate's password. Used once, never stored."
                },
                {
                  "key": "reason",
                  "type": "text",
                  "value": "Approved",
                  "disabled": true
                },
                {
                  "key": "location",
                  "type": "text",
                  "value": "London",
                  "disabled": true
                }
              ]
            }
          }
        }
      ]
    },
    {
      "name": "Files and jobs",
      "description": "Upload a file, run a tool on it as a job, and download the result. These calls work with an API key that has the tools permission (verify jobs need the verify permission).",
      "item": [
        {
          "name": "Upload a file",
          "request": {
            "method": "POST",
            "header": [
              {
                "key": "Idempotency-Key",
                "value": "{{$guid}}",
                "description": "A new value for each new request. Send the same one again only to repeat the very same request."
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/files",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "files"
              ]
            },
            "description": "Upload one file as `file`. It is kept for one hour. Small files can also be sent as JSON `{ \"name\", \"contentBase64\" }`, and a file on the web as JSON `{ \"url\" }` (https only).",
            "body": {
              "mode": "formdata",
              "formdata": [
                {
                  "key": "file",
                  "type": "file",
                  "src": [],
                  "description": "The file."
                }
              ]
            }
          }
        },
        {
          "name": "A file's details",
          "request": {
            "method": "GET",
            "header": [],
            "url": {
              "raw": "{{baseUrl}}/files/{{fileId}}",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "files",
                "{{fileId}}"
              ]
            },
            "description": "The file's name, type, size and when it expires."
          }
        },
        {
          "name": "Start a job",
          "request": {
            "method": "POST",
            "header": [
              {
                "key": "Idempotency-Key",
                "value": "{{$guid}}",
                "description": "A new value for each new request. Send the same one again only to repeat the very same request."
              },
              {
                "key": "Content-Type",
                "value": "application/json"
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/jobs",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "jobs"
              ]
            },
            "description": "Run one tool on files you uploaded. The answer is the job, queued. Tools: compress, merge, split, organize, convert, ocr, redact, verify, bijoy_to_unicode, unicode_to_bijoy, kruti_to_unicode.",
            "body": {
              "mode": "raw",
              "raw": "{\n  \"tool\": \"compress\",\n  \"inputs\": [\n    \"{{fileId}}\"\n  ],\n  \"options\": {\n    \"level\": \"strong\"\n  }\n}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            }
          }
        },
        {
          "name": "A job's state and result",
          "request": {
            "method": "GET",
            "header": [],
            "url": {
              "raw": "{{baseUrl}}/jobs/{{jobId}}",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "jobs",
                "{{jobId}}"
              ]
            },
            "description": "queued or running (wait for Retry-After seconds and ask again), failed with a code, or done with download links that work for 15 minutes."
          }
        },
        {
          "name": "The tools",
          "request": {
            "method": "GET",
            "header": [],
            "url": {
              "raw": "{{baseUrl}}/tools",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "tools"
              ]
            },
            "description": "Every tool a job can run, the permission it needs and the files it takes. No key needed.",
            "auth": {
              "type": "noauth"
            }
          }
        },
        {
          "name": "Download a result",
          "request": {
            "method": "GET",
            "header": [],
            "url": {
              "raw": "{{baseUrl}}/downloads/{{downloadToken}}",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "downloads",
                "{{downloadToken}}"
              ]
            },
            "description": "Use the url from a done job's result. No key needed; the link works for 15 minutes.",
            "auth": {
              "type": "noauth"
            }
          }
        }
      ]
    }
  ]
}
