IpInkpacket

Blog

When webhook delivery fails

Inkpacket still sends the envelope when a webhook POST misses. Pending rows retry on the hourly job, up to 5 attempts, then failed. There is no replay button. Read the last-12 log, fix the URL, and wait for the next real event.

A webhook miss is not a failed send. Inkpacket POSTs a signed JSON body when an envelope is sent, viewed, signed, completed, expired, declined, voided, or corrected. If your endpoint times out, refuses, or returns a non-2xx, the envelope is still wherever the signer left it. The signing link does not wait on your server. Settings will show the delivery as pending, then failed after the retries are spent.

How the queue is built is webhook retries explained. How to verify the signature and persist completed is listen for envelope status webhooks. Desk help is Docs. This guide is the miss: what pending and failed mean, why there is no replay button, and what to do instead of cloning the envelope.

Pending, then failed

The first POST is attempted immediately when the event happens. A 2xx finishes the row. Anything else stays pending. The hourly envelope job retries pending rows, up to 5 attempts in total. After 5 failures the row is marked failed. Settings shows the last 12 deliveries with status, attempt count, and last error. Pending still has tries left. Failed does not.

A missing URL means no delivery is queued — Inkpacket does not invent a destination. HTTPS is required except on localhost or .test hosts. Saving a URL after the event does not backfill that event. There is no test-send or replay button in this pass. Send an envelope after saving a URL if you want a real envelope.sent.

The send already happened

  • The envelope id does not change.
  • The signer still has a token — or the desk still shows the URL when Resend is missing.
  • Void, correct, and resend still sit on that document.
  • A failed completed delivery does not un-stamp the PDF.

Do not mint a second envelope because viewed never arrived. That is a second audit trail and a second spend toward the monthly cap. Read the envelope on the desk or GET /api/v1/packets/:id with your Bearer token if you still need the state.

What to do after a failed row

  1. Read the last error in Settings. HTTP versus HTTPS, a dropped POST, a handler that parsed the body before HMAC, and a long sync that timed out are the usual lines.
  2. Fix the URL or the handler. Verify X-Inkpacket-Signature as t=<unix>,v1=<hex> with HMAC-SHA256 of timestamp.body.
  3. Return 2xx once you have persisted the event. Fan out after the acknowledge so a retry is safe to see twice.
  4. Wait for the next real event. Do not void a live envelope just to generate traffic.

A retry is the same event trying to reach you again. Do not create a twin invoice because signed arrived twice. The desk audit trail is still the human record — reading an audit trail. Iframe postMessage is for a parent tab. Those three are not interchangeable.

What failure is not

  • Not a void. Links stay live until you void, the signer declines, or the window expires.
  • Not an envelope-cap error. HTTP 402 ENVELOPE_LIMIT is a send that did not go out.
  • Not a PIN lockout. Access-code 429 is a different door.
  • Not an Idempotency-Key conflict. That 409 is your worker reusing a send header with a new body.

Workspace URL versus per-packet webhookUrl still applies. An envelope override does not repair a bad workspace destination for other envelopes. Rotate the signing secret in Settings if it leaks. Staging should not share production’s secret or destination.

If Resend is missing, the desk still shows the signing URL after send. A webhook miss plus a skipped invite email is still one live envelope. Copy the link. Do not POST send again with a new Idempotency-Key — that header retries the same create, not a missed delivery to your app. Idempotency-Key on API sends is the client retry. This page is the outbound miss.

Caps and what is not open yet

A webhook delivery is not a send. The send that created the envelope already counted. Free allows 5 packets a month. Free at 5 packets a month is the live cap desk send, bulk rows, Web Form fills, and API send share. Hitting it returns HTTP 402 ENVELOPE_LIMIT. Starter is 20 envelopes — more than Free — plus 3 published Web Forms. Seat counts are planning numbers; invite does not refuse when a workspace is full.

Billing is published, not charging. Checkout is not open. Text-message (SMS) is coming soon. Drive missing: Drive not configured. Stripe off: Payments not live. Those flags do not pause or invent the webhook queue. The FAQ and outbound webhooks on Features say the envelope send still succeeds if the POST fails.

Save the URL. Send one envelope. Watch the last-12 log. If a row fails, fix the handler and wait. Stay on the same envelope. Then file the stamped PDF from the envelope — the webhook was only the signal. Open a workspace on Free — see published pricing — and point a localhost or .test handler at a real send before you promise a production destination.

Open a workspace on Free

Billing is published, not charging. Send an envelope from the desk without a card.

Open a workspace