Formstack API & Custom Integrations

Anyone Can Call an API. The Engineering Is in What Happens When It Fails.

Formstack exposes a REST API and webhooks for everything the packaged connectors do not cover. Twopir Consulting builds on them the way integration code should be built: OAuth 2.0 credentials handled properly, webhook payloads verified, retries made safe to repeat, rate limits budgeted rather than discovered, and a failure queue that can be replayed instead of reconstructed by hand.

Custom Integration Model
FORMSTACK INTERFACES REST API Forms · Submissions · Fields Webhooks Push on submission OAuth 2.0 Signed Payloads Daily Rate Limits TWOPIR ENGINEERING LAYER Transport & Security Secret handling Signature verification Idempotency & Retry Dedupe keys Backoff · Dead letters Observability Structured logs Alerts · Replay BUILT FOR THE FAILURE CASE, NOT THE DEMO 2πr ENGINEERING PROPERTIES Exactly-Once Effect A retry cannot create a second record Predictable Failure Degrades in a way that was specified Replayable Recovery is a command, not a spreadsheet AUTHENTICATE · VERIFY · DEDUPE · RETRY · LOG · REPLAY
Definition

When Do You Need a Custom Formstack Integration?

You need a custom integration when the packaged connector cannot express what the business actually requires — not merely when a connector does not exist. The common triggers are a destination with no connector, transformation logic the connector cannot perform, a reliability requirement stronger than the connector's own error handling, a volume pattern that needs batching, or an approval condition that has to be evaluated before the write happens.

Formstack supports this through a REST API covering forms, submissions, fields, webhooks, folders and partial submissions, with product-specific surfaces for Documents, Sign and Workflows, authenticated with OAuth 2.0. Webhooks push submission data to a URL you control at the moment of submission, and can be secured with a shared secret or an HMAC key that signs the payload so you can verify its authenticity and integrity.

Platform specifics on this page last reviewed September 2026

Platform Capability

What the Formstack API Gives You to Build On

These are platform facts, not Twopir capabilities. They are also the facts most likely to change between releases, so verify them against Formstack's developer documentation before you design against them.

Interface A REST API covering forms, submissions, fields, webhooks, folders and partial submissions, with additional product-specific surfaces for Formstack Documents, Formstack Sign and Formstack Workflows.
Authentication OAuth 2.0. You register an API application, which issues a client ID, client secret and access token. Treat all three as production secrets with a rotation plan.
Rate limiting Daily rate limiting applied per access token, with the limit varying by plan type. Exceeding the quota returns HTTP 429, and quotas reset daily.
Webhook delivery Formstack posts submission data to a URL you specify at the moment a submission occurs — a push model, so latency is low and your endpoint must be available.
Webhook security Two options. A Shared Secret is a key sent with each request so you can confirm it came from Formstack. An HMAC Key signs the payload so you can verify both its authenticity and that it has not been altered.
Partial submissions Exposed as a resource, which matters when Save & Resume is in use and you need to reason about incomplete data — including whether your integration should see it at all.

Budget the quota before you design. A daily per-token rate limit is a capacity constraint, not an edge case. A polling integration that checks every minute consumes quota whether or not anything has changed, and a webhook-driven design consumes almost none — which is frequently the deciding argument between the two patterns regardless of what the requirements document says about latency.

Security

Shared Secret or HMAC? They Are Not Equivalent.

A webhook endpoint is a publicly reachable URL that writes to your systems. Both options are better than neither, and they defend against different things.

Webhook verification options
ConsiderationShared SecretHMAC Key
How it worksA key is sent with each request so your endpoint can confirm the caller knows it.The payload itself is signed, so your endpoint can verify both the sender and that the content is unmodified.
Proves the senderYesYes
Proves the payload is unalteredNoYes
Exposure if interceptedThe secret travels with every request; anyone who obtains it can impersonate the sender until it is rotated.The signing key is not transmitted, only a signature derived from it.
Verification costA string comparison — trivial, and should be constant-time.Recompute the signature over the raw body and compare. Slightly more work, and the raw body must be preserved before parsing.
Our recommendationAcceptable for low-sensitivity payloads over TLS.The default for anything carrying personal, financial or health data.

Verification is necessary but not sufficient. A verified webhook can still be a replay of an earlier valid request. Endpoints we build reject payloads outside a timestamp window, deduplicate on a submission identifier, and return a success response quickly while processing asynchronously — so a slow downstream system cannot cause redelivery of work that has, in fact, already been accepted.

The Decision

When Custom Code Is Right, and When It Is Avoidable Work

Custom code is an asset with a maintenance cost attached. It is worth paying when it buys something the alternatives cannot, and not otherwise.

Deciding between packaged, platform and custom
RequirementStart hereGo custom when
Field-to-field mapping into a supported appThe native connector.The mapping needs logic the connector cannot express, or the path is critical enough to need your own error handling.
Real-time push to your own serviceA webhook with HMAC verification.Immediately — but the custom work is the receiving endpoint, not a replacement for the webhook.
Scheduled batch into a legacy systemThe REST API with a scheduled job.The transformation is substantial, or the legacy interface needs a protocol adapter.
Several destinations, one submissionAn integration platform or middleware.Routing depends on business logic that is easier to express and test in code than in a low-code canvas.
Writing into Salesforce with complex rulesThe Salesforce-native package.Logic must run inside the transaction — Apex callouts, custom validation, or orchestration that must be atomic with the record write.
High volume against a quotaWebhooks, which consume far less quota than polling.You need batching, queuing and back-pressure that the packaged path does not provide.
Scope of Work

What a Custom Integration Engagement Delivers

Webhook Receivers

Endpoints built to survive the internet: verified, idempotent, fast to acknowledge and safe to redeliver.

  • HMAC signature verification over the raw body
  • Timestamp window and replay rejection
  • Deduplication on submission identifier
  • Fast acknowledgement with asynchronous processing
  • Dead-letter queue with replay tooling

API Clients & Sync Jobs

Scheduled and on-demand integration jobs that behave predictably against a daily quota.

  • OAuth 2.0 client with secure token handling
  • Quota budgeting and consumption monitoring
  • Exponential backoff on 429 and transient errors
  • Incremental sync with a durable watermark
  • Resumable runs after partial failure

Middleware & Orchestration

A transformation and routing layer when several systems need the same submission in different shapes.

  • Transformation and enrichment logic
  • Fan-out routing with per-destination retry
  • Back-pressure handling under load
  • Environment separation and promotion path
  • Deployment and configuration as code

Salesforce-Side Development

Where the logic has to run inside the org, in the transaction, under governor limits.

  • Apex callouts and REST service endpoints
  • Bulkified, governor-safe processing
  • Queueable and Batch Apex for volume
  • Platform Events for decoupled handoff
  • Test coverage that exercises the failure paths

Security Engineering

The parts a security review will ask about, designed in rather than retrofitted.

  • Secret storage and rotation procedure
  • Least-privilege credentials per integration
  • Personal data minimised in transit and in logs
  • TLS enforcement and endpoint hardening
  • Audit logging of what moved and when

Observability & Handover

So the team that inherits this can operate it without reading the source.

  • Structured logging with a correlation identifier
  • Alerting on failure rate and quota consumption
  • Replay tooling for the dead-letter queue
  • Runbooks for each failure case we tested
  • Source, tests and deployment documented and handed over
Common Questions

Answers Before the First Call

Formstack applies daily rate limiting per access token, with the specific limit depending on your plan type. Exceeding the quota returns an HTTP 429 response, and quotas reset daily. Because the exact figure is plan-dependent and changes, we verify it for your account during design rather than quoting a number. The design consequence is more important than the number: a daily quota rewards event-driven designs and punishes polling, so if your integration is currently polling on a short interval, that is usually the first thing to change.

Formstack offers two mechanisms: a Shared Secret sent with each request so you can confirm it came from Formstack, and an HMAC Key that signs the payload so you can verify both authenticity and integrity. We default to HMAC for anything carrying personal, financial or health data, because a shared secret proves who sent the request but not that the content is unaltered. Verification alone is not enough, though — a valid request can be replayed, so an endpoint should also reject payloads outside a timestamp window and deduplicate on the submission identifier.

This is the question that determines the whole design, and it should be answered before anything is built. Never assume a push delivery will be retried indefinitely — confirm the actual retry behaviour for your configuration rather than relying on a general expectation. Where the data matters, we pair the webhook with a reconciliation job that periodically queries the API for submissions in a window and fills any gaps. That combination gives you the low latency of a push model and the recoverability of a pull model, and it is the pattern we recommend for anything a business process depends on.

By making the write idempotent, which means a repeated delivery has no additional effect. In practice that is a stable key derived from the submission — its identifier — recorded at the point of processing and checked before any write, combined with an upsert against that key in the destination rather than a blind create. This matters most for ambiguous failures: a timeout does not tell you whether the first call succeeded, so without idempotency the safe-looking choice of retrying is exactly what creates the duplicate.

You do. Source, tests, deployment configuration and runbooks are handed over as deliverables, in your repository, and we walk your engineers through the failure cases we deliberately tested. You can retain us for ongoing maintenance, and many clients do, but the handover is complete whether or not you take that option. A custom integration that only its author can operate is a liability we are not willing to leave behind.

Next Step

Bring the Requirement the Connector Cannot Meet. We Will Tell You If It Needs Code.

Describe the integration, its volume and how bad it would be if a submission were lost. Those three answers usually determine the pattern — and quite often the conclusion is that a configuration change gets you there without custom code at all.

Code, tests, deployment configuration and runbooks handed over in your repository. We will also tell you when custom code is avoidable work.