Minform · Pipedream API
OAuth 2.0 authorization code flow used by the Pipedream integration.
Minform issues access tokens as HS256 JWTs signed with the OAuth client secret. The JWT includes a pipedream claim (clientId + scopes). All /api/pipedream/* routes verify that claim.
Flow is standard authorization code (not PKCE). Scopes granted on consent are always read:forms and read:submissions.
client_id, redirect_uri, response_type=code, and state.redirect_uri with code and state.access_token + refresh_token.Authorization: Bearer <access_token>.Browser page — not an /api JSON route.
GET https://minform.io/oauth/authorize| Query param | Required | Notes |
|---|---|---|
client_id | Yes | Registered OAuth client |
redirect_uri | Yes | Must match a URI allowlisted on the client |
response_type | Yes | Must be code |
state | Yes | CSRF / correlation token |
scope | No | Accepted by the UI; granted scopes are fixed server-side |
POST https://minform.io/api/oauth/tokenAccepts application/x-www-form-urlencoded or application/json.
grant_type=authorization_code code=... client_id=... client_secret=... redirect_uri=...
Same URL — there is no separate /oauth/refresh route.
grant_type=refresh_token refresh_token=... client_id=... client_secret=...
{
"access_token": "<jwt>",
"token_type": "bearer",
"expires_in": 3600,
"refresh_token": "<opaque>"
}Access tokens expire in 1 hour. Refresh returns a new access token (same refresh token value is returned on refresh).
POST https://minform.io/api/oauth/revokeClears the refresh token for the client. Body fields: token (refresh token), client_id, client_secret.
{ "success": true }Authorization: Bearer <access_token>
pipedream.clientId). Send them only to /api/pipedream/* endpoints.