Published

A supplier portal sends a new insurance certificate to your document platform. The connection times out, so the portal sends it again. Your intake service needs to identify the supplier, select the right vendor and site, check the file, and create one traceable submission despite the retry.
Secure an inbound document webhook as a controlled intake route: verify the sender, bind its permissions to a destination, validate the submission, and make repeated delivery safe. An HTTP success response should have a defined meaning, with a separate status for the document's business acceptance.
A webhook is an HTTP request sent when another system has something to report. In document intake, that might be a form submission, a document payload, or an event that identifies a file to retrieve. Agree which of these the sender actually delivers; a JSON notification does not necessarily contain the PDF itself.
Use a named service identity with permission for the intended operation and site. This fits a partner application that can obtain and send the required credentials.
A provider's signature may require a verification adapter. An intentionally anonymous form needs restrictive admission rules and abuse controls. Keep these trust models explicit.
Use HTTPS and the sender's documented verification protocol. For signed deliveries, retain the exact request bytes through the proxy and framework, then verify the signature before trusting parsed fields. Use the provider's supported library and a timing-safe comparison where required. Keep signing secrets in a managed secret store and plan rotation.
Providers differ. GitHub signs the payload with HMAC-SHA256; other providers use different envelopes and signed timestamps. Do not invent a common signature format or assume every sender supplies a verifiable timestamp. An IP allowlist can add a restriction, but should complement message or service authentication.
Authenticate the intended integration as well as the sender. A valid credential for supplier A must not authorise submissions for supplier B. Derive the permitted FormKiQ site, supplier identity, document types, and processing route from trusted configuration. Reject conflicting values in the request instead of allowing them to override that mapping.
| Control | What it establishes | What to test |
|---|---|---|
| Service authentication or message signature | The submission came through the authorised identity or signing relationship. | Missing credentials, wrong key, altered body, and key rotation. |
| Freshness and duplicate detection | An old or repeated delivery cannot trigger uncontrolled new work. | Expired signed timestamp where supported, concurrent retries, and a reused ID with different content. |
| Destination and schema rules | The sender can submit only permitted fields to its configured site and workflow. | Another site, unexpected attributes, approval flags, and arbitrary action or callback URLs. |
| File and workload limits | The intake route bounds what it stores, parses, scans, and processes. | Oversized bodies, misleading file types, archive expansion, bursts, and failed scans. |
A valid signature does not prevent the same valid request from arriving twice. Use the sender's stable event identifier, scoped to its integration and destination, as a deduplication key. Where the protocol supplies a signed timestamp, enforce a documented tolerance without treating an unsigned timestamp as proof of freshness. GitHub's delivery guidance, for example, identifies a delivery header that remains the same on redelivery.
Claim the event atomically in durable storage before starting side effects. Record the payload digest and operation state. A duplicate with the same content should return or reference its existing receipt; the same key with different content should produce a conflict for investigation. Keep the entry through the sender's retry and operational replay period.
Handle interrupted work too. If document creation succeeds but the worker crashes before recording the result, a retry must reconcile the existing document using a durable correlation reference rather than blindly create another one. Apply the same principle to downstream notifications and approvals. A queue alone does not provide this guarantee: Amazon SQS standard queues can deliver a message more than once.
Authenticate, bind the destination, enforce admission limits, claim the event, and durably record accepted work before acknowledging it.
Check schema and content, run configured scanning, and keep pending submissions away from ordinary users and business actions.
Publish the accepted document into the intended workflow or record a rejection with an accountable owner and receipt status.
Define the response contract for the adapter. A successful acknowledgement can mean “durably received for processing”; it should not imply that a certificate is valid or a supplier is approved. Give the partner a correlation ID and an authorised status or reconciliation channel. Do not acknowledge work that exists only in process memory.
Use file-type allowlists, size and count limits, safe filenames, and restricted storage and access, following OWASP's file-upload guidance. A claimed MIME type or clean malware result does not establish business validity. FormKiQ's selected Anti-Malware / Antivirus module supplies scanning results; configure access and downstream actions around the required scan outcome. Treat a timeout or unavailable result as pending or failed, with a defined recovery path.
If an event points to a remote file, constrain retrieval to the configured source. Apply destination checks to resolved addresses and redirects, and block access to internal services. OWASP's SSRF guidance explains why a supplied URL needs more than a superficial hostname check. Limit retrieval size, duration, and processing cost before invoking OCR or AI.
In this fictional integration, a supplier portal sends event evt-00421 for a certificate associated with vendor V-0187. The adapter maps that portal to a fixed site and a permitted certificate-intake route.
The adapter verifies the provider's signature and permitted event type, checks the vendor mapping, then claims the scoped event ID and records the payload digest. It acknowledges only after the receipt and processing handoff are durable.
The first response is lost. The portal resends the event; the adapter authenticates it again and returns the same receipt. A simultaneous worker cannot claim a second operation for that key.
The worker retrieves the file through the approved source interface, checks its format and limits, and runs the configured scan. The pending file remains restricted. Failed inspection records a rejection or review task without initiating the supplier-renewal workflow.
A successful submission links the receipt to the FormKiQ document ID and verification workflow. Expiry and coverage checks determine the business outcome. Operations can reconcile stuck receipts and retry incomplete steps without duplicating the supplier record.
Record the sender, integration, event ID, trusted destination, receipt time, payload digest, validation outcome, document IDs, and processing state. Assign an owner to stuck and rejected submissions. Protect receipt and diagnostic access so one partner cannot inspect another's documents or outcomes.
Start with one sender, one document type, and one destination. Prove that the integration identifies the sender, survives repeated delivery, restricts pending content, and explains each outcome. Then connect accepted documents to the business workflow with the same correlation trail.
Technical guidance reviewed: November 12, 2026, against the linked FormKiQ, GitHub, AWS, and OWASP documentation. The receipt states and event IDs above illustrate the integration design.
The open-source foundation — API-first, deployable into your own AWS account, and free to use. Right for architecture validation and early implementation.
Production-ready editions for departments and complex workflows. Start with a Proof-of-Value deployment or go straight to production.
For governance-heavy environments with residency, sovereignty, assurance, and multi-jurisdiction requirements. Talk to us about the right deployment model.