Skip to main content

About Typeform

Typeform is a conversational form and survey platform. The Serval Typeform integration lets your workflows manage forms and quizzes, pull and clean up form responses, organize workspaces and themes, upload images, and register webhooks that notify other systems about new submissions. Serval only ever talks to Typeform’s official API address (api.typeform.com), and the integration currently carries a Beta label in the Serval app catalog. Authentication: OAuth 2.0 with your own Typeform app (“bring your own app”). Your team registers an app in Typeform’s Developer Apps panel and supplies its Client ID and Client Secret in Serval’s connect form - Serval does not operate a shared Typeform app. Once connected, Serval keeps access fresh automatically, so a healthy connection never needs periodic re-authorization. Data sync: On-demand only. Serval reads from and writes to Typeform exclusively when a workflow step runs. There is no background sync, no entity ingestion, and no prebuilt workflows are installed with this integration.

What the Typeform integration enables

Anything defined in the Typeform API can be accessed through Serval.

Get your credentials

You need your own Typeform OAuth app - a Client ID and Client Secret - registered in Typeform’s Developer Apps panel. Typeform’s registration form requires Serval’s redirect URI up front, so the setup interleaves with the Serval side: start in Serval, register in Typeform, then finish back in Serval. See Typeform’s Applications guide for background.
1

Start the connection in Serval first

Open the Connect Typeform form in Serval. It displays the environment-specific Redirect URI with a Copy button - copy it now, and leave this form open while you work in Typeform.
2

Open Typeform's Developer Apps panel

Log in at admin.typeform.com and open the Developer Apps panel: click the icon drop-down next to your organization name in the upper-left corner, then Developer Apps under the Organization section (direct link: admin.typeform.com/account#/section/apps). Click Register a new app.
3

Register the app

Fill in App name (e.g. “Serval Integration”), App website (cosmetic - it appears on the consent screen), Redirect URI(s) (paste the exact URI you copied from Serval), and Developer email. Click Register app.
4

Copy the Client Secret immediately

Typeform shows the Client Secret only once, at registration time. Copy it now. The Client ID stays visible in the panel afterward.
5

Approve all 14 scopes

On the new app’s OAuth 2.0 scopes settings, approve every scope Serval requests: accounts:read, forms:read, forms:write, images:read, images:write, themes:read, themes:write, workspaces:read, workspaces:write, responses:read, responses:write, webhooks:read, webhooks:write, and offline. A missing scope makes the authorization step fail.
The Client Secret is shown a single time. If you navigate away without copying it, you must regenerate it - which immediately invalidates the old value and breaks any Serval connection still using it.
Always copy the Redirect URI from the Serval form rather than typing it by hand. It must match exactly, and it differs per environment.

Connect in Serval

1

Open the Connect Typeform form

In Serval, add the Typeform integration (it carries a Beta label in the app catalog) to open the connect form.
2

Copy the Redirect URI if you have not already

The read-only Redirect URI field shows the value to register in Typeform, with a Copy button (it briefly switches to “Copied”). Its helper text reads “Add this as a Redirect URI in your Typeform app settings.”
3

Enter the Client ID

Fill in Client ID (required) - placeholder “Enter your Typeform Client ID”. Stray whitespace is trimmed automatically.
4

Enter the Client Secret

Fill in Client Secret (required) - a masked, password-style field with placeholder “Enter your Typeform Client Secret”. Stray whitespace is trimmed automatically.
5

Connect and approve

Click Connect to Typeform. The button stays disabled until both fields are filled in; if a blank value slips through anyway, the form shows “Please fill in all required fields” and the server rejects it with “clientId is required” or “clientSecret is required”. Serval sends you to Typeform’s consent screen - approve it to finish. The connection is named after your Typeform account.
Complete Typeform’s consent screen within 10 minutes of clicking Connect to Typeform. The credentials you entered are held only briefly, and taking longer shows “Invalid or expired OAuth state” or “OAuth session expired, please try again” - just restart from the connect form.
There is no separate edit-credentials form for this integration. To rotate the Client Secret or update the app’s settings, run the connect flow again with the same Typeform account - it updates the existing connection in place and keeps your workflows wired up.

Verifying the connection

The Typeform integration includes three named health checks:
  • Test Typeform Connection - verifies Serval can authenticate by looking up the connected account, and reports it by name, email, or user ID (whichever is available first; “unknown user” if none are). On success: “Successfully connected to Typeform as [name]”. On failure: “Unable to connect to Typeform. Verify your OAuth credentials are valid, the app has the accounts:read scope approved, and the token has not been revoked.”
  • List Typeform Forms - verifies form read access by listing a small sample of forms. On success: “Found [number] form(s): [up to 3 sample titles].” If the account has no forms yet: “API access verified but this account has no forms yet. Create a form in Typeform to start automating responses.” On failure: “Unable to list forms. Verify your Typeform app has the forms:read scope approved on the OAuth scopes settings.”
  • List Typeform Workspaces - verifies workspace read access by listing a small sample of workspaces. On success: “Found [number] workspace(s): [up to 3 sample names].” If the account has no workspaces yet: “API access verified but this account has no workspaces yet.” On failure: “Unable to list workspaces. Verify your Typeform app has the workspaces:read scope approved on the OAuth scopes settings.”
Behind the scenes, Serval also re-verifies authentication with the same account lookup used by the first check. A failure there means the token was revoked, the app was deleted, or its scopes changed on the Typeform side.
If all three checks are green but workflows later start failing, the cause is almost always on the Typeform side: the app was revoked or deleted, or its Client Secret was regenerated after you connected. Re-run the connect flow with fresh credentials to repair the connection.

Gotchas and troubleshooting

Serval requests the same fixed set of 14 scopes on every connection: accounts:read, forms:read, forms:write, images:read, images:write, themes:read, themes:write, workspaces:read, workspaces:write, responses:read, responses:write, webhooks:read, webhooks:write, and offline. If any one of them is not enabled on your app’s OAuth scopes settings, Typeform rejects the authorization with invalid_scope. Enable the missing scope(s) in the Developer Apps panel and connect again.
The Client ID and Client Secret you enter are held for only 10 minutes between clicking Connect to Typeform and returning from Typeform’s consent screen. If the approval takes longer, the attempt expires. Restart the connection from the Serval connect form - your Typeform app itself is unaffected.
Typeform access tokens expire after about one week by default. The offline scope - which Serval always requests - is what lets Serval refresh access automatically with a long-lived refresh token that lasts until revoked. If offline was not approved on your app when you connected, the connection breaks after roughly a week. Approve offline in the Developer Apps panel and reconnect.
Serval stores your app’s Client ID and Client Secret with the connection and uses them to refresh access. If the secret is regenerated in Typeform, refreshes fail as soon as the current access lapses. There is no separate update-credentials form - re-run the connect flow with the fresh Client Secret, and the existing connection is repaired in place.
Typeform displays the Client Secret only once, at app registration, and Serval never reveals it back to you. If you did not copy it, regenerate it in the Developer Apps panel - note this immediately invalidates the old value and breaks any Serval connection still using it - then re-run the connect flow with the new secret.
Typeform’s Register app button stays disabled until Redirect URI(s) is filled in. That is why the setup starts in Serval: open the connect form first to reveal and copy the environment-specific Redirect URI, register the Typeform app with it in a second tab, then return to the still-open Serval form with your credentials. Always copy the URI from the form - it must match exactly.
Connections are keyed on the Typeform account you authorize. Reconnecting with the same account - for example after rotating the Client Secret or approving more scopes - updates the existing connection in place and preserves the workflows wired to it. Reconnecting with a different Typeform account creates a separate connection instead.
Workflows can list the account’s image library and upload new images (from a file or a public URL), but there is no way to retrieve or delete an individual image through the integration. Remove images in Typeform directly if needed.
The integration is marked Beta in the Serval app catalog. That reflects its catalog status, not a problem with your connection - everything on this page describes its current behavior.

Need help? Contact support@serval.com for assistance with your Typeform integration.