Prepare a PDF, place fields, send a link, remind signers, and download the signed file. Templates, Web Forms, bulk send, and an API are there when you need them.
Signature, date, text, initials, checkbox, and select. Assign a recipient slot. Coordinates are stored as page percentages so the same marks land on the completed file.
Save a PDF and its field marks as a workspace template at /desk/templates. Create at /desk/templates/new, edit at /desk/templates/:id, then Use template to copy type, page, position, size, label, required, recipient slot, and select options into a new draft. Pick the signer and send — without placing fields again. Saving a template does not count toward the monthly packet limit; sending the draft does.
Upload a CSV or paste names and emails, map the columns, and send one template to the list. Open Bulk send on the desk (/desk/bulk). Each recipient gets a separate envelope with the same field layout and shared reminder and expiration settings. Retries skip rows that already sent. Each sent row counts toward the monthly packet limit (Free 5); a row that would exceed it returns HTTP 402, ENVELOPE_LIMIT. A sent row means the envelope exists — if invite email was not sent, open that envelope and copy the signing link.
Publish a public web form from a template at /desk/forms and share /form/SLUG. Save the template first at /desk/templates — place at least one field — then publish at /desk/forms#publish. Inkpacket generates the slug from the title. The filler does not sign in. They complete required fields plus signer name and email; Inkpacket creates the envelope and sends the invite. Free includes 1 published Web Form; Starter includes 3, Growth 10, Agency 25. Each fill counts as one packet toward the monthly cap. Free is 5 packets a month. Starter is 20 packets a month, more packets than Free. Optional access code, reminder, and expiration defaults live on the form. Disable a form to stop new fills (Form closed). Billing checkout is not open, so this workspace stays on Free.
Each signer gets a tokenized URL. Sequential routing waits for the current order; parallel invites everyone at once. They view the PDF, complete their fields, and submit. Email is sent when Resend is configured; otherwise the desk shows the link. Text-message (SMS) reminders are coming soon, and reminders go out by email today. Desk help: /desk/help#invite-email.
Coming soon. Text-message (SMS) reminders are coming soon, and reminders go out by email today. Inkpacket does not text a signing link. Desk help: /desk/help#sms.
After you send an envelope, the desk copies Embed URL (How to embed this envelope). Iframe /embed/sign/TOKEN — or the same /sign/TOKEN page — on a host page you already operate. POST /api/v1/packets/:id/send returns embedUrl. Signing surfaces send Content-Security-Policy frame-ancestors for inkpacket.com plus EMBED_ALLOWED_ORIGINS. The iframe posts viewed, signed, and completed to the parent. This path is live and does not wait on Drive or payment keys. Text-message (SMS) is coming soon — live card checkout is not part of this path. Desk help (/desk/help#embed) has the snippet.
Optionally require a PIN before anyone can view or sign the PDF. The desk shows and copies the code for the sender. Inkpacket stores only a hash. Wrong guesses lock the page after a few tries. The same optional code can cover every row in a bulk send.
On send, choose how often to remind an outstanding signer and when the link expires. The hourly cron emails reminders when Resend is configured (otherwise it logs them) and marks overdue envelopes expired. Expired envelopes cannot be signed.
Void an in-flight envelope so every signing and embed link stops. Correct the recipient on the same envelope — a new invite goes out, and the old token is retired if the email changes. Resend the existing link without creating a second envelope. Signers can decline with a reason; the sender is notified. Completed, expired, or declined envelopes cannot be voided, corrected, or resent.
Inkpacket stamps values onto the original with pdf-lib and stores a second object. Preview pages in the field editor and download the signed copy from the envelope. Empty or unreadable uploads are rejected. Missing, empty, or unavailable stored files return those errors instead of a blank PDF — re-upload a valid file, or check File storage in Settings (/desk/settings#storage). Desk help: /desk/help#files.
Coming soon. Optionally copy the completed PDF and the audit JSON into a Drive folder you choose in Settings. When GOOGLE_DRIVE_CLIENT_ID, GOOGLE_DRIVE_CLIENT_SECRET, and GOOGLE_DRIVE_REFRESH_TOKEN — or GOOGLE_SERVICE_ACCOUNT_JSON — are set, the files are uploaded. Without those credentials the desk reports Drive not configured and does not pretend the upload happened. Settings shows driveConfigured. Archive to Drive on a completed envelope retries; without keys it soft-fails again. A non-completed envelope returns Only completed envelopes can be archived to Drive — that is not Drive not configured. Desk help: /desk/help#drive.
Coming soon. Optionally request a payment when you send an envelope. The amount, currency, and description sit on the envelope. collectPayment with no positive amount returns Collecting a payment requires a positive amount — that is not a payment-not-live state. When Stripe keys are absent or STRIPE_CHECKOUT is disabled, the desk and the signer see Payments not live / not configured. Inkpacket does not charge a card and does not pretend the payment succeeded. Settings shows paymentsLive. Signing still completes. Desk help: /desk/help#payments.
Mint an org-scoped Bearer token in Settings (/desk/settings#tokens). List, create (from a template), fill, get, and send envelopes at /api/v1/packets. Last-used time updates on success. Retries can send an Idempotency-Key. Desk help (/desk/help#api) lists the live routes.
Set a workspace webhook URL or a per-packet URL. Inkpacket POSTs a signed JSON body on sent, viewed, signed, completed, expired, declined, voided, and corrected. The first POST is immediate. Failed deliveries retry on the hourly job, up to 5 attempts, then the row is marked failed. Settings keeps a delivery log and a Send test event button. Production refuses non-HTTPS and private-network URLs.
Owners create the workspace. Admins invite a teammate from Team (/desk/team#invite). Members send. How many seats / seat limit: published planning numbers are Free 1, Starter 3, Growth 10, Agency 50 — invite does not refuse when a workspace is full. Monthly packets and published Web Forms remain the live gates. Invite links are a real link you can copy even before mail is live — Team shows Invite email was not sent when Resend is missing.