Skip to content

Create an application

An application is one applicant’s run through one flow. Creating it is a single call, and it returns the URL you hand to the applicant.

Every call carries a bearer token that belongs to your workspace.

  1. Open the Portal and select your workspace.

  2. In the left-hand menu, open API Token.

  3. Generate a token. It is shown once — copy it now.

  4. Store it in your secret manager, and expose it to your backend as an environment variable:

    Terminal window
    export UPPASS_API_TOKEN='...'

Keep it server-side only — never in browser or mobile-app code. See Authentication for the 401 / 403 behaviour.

Terminal window
curl --request POST \
'https://app.uppass.io/en/api/forms/{form_slug}/create/' \
--header 'Authorization: Bearer '"$UPPASS_API_TOKEN" \
--header 'Content-Type: application/json' \
--data '{ "answers": {} }'
201 Created
{
"info": "https://app.uppass.io/en/api/forms/{form_slug}/applied-forms/{slug}/info/",
"detail": {
"form": "{form_slug}",
"step": "personal",
"section": "personal",
"submitted_at": null,
"slug": "{slug}"
},
"form_url": "https://app.uppass.io/en/form/{form_slug}/{slug}/"
}
  1. The status is 201, not 200. A client asserting 200 fails on every successful create.

  2. detail.slug is your correlation key — store it now. It comes back in the webhook as application.slug, and nothing else reliably ties the result to your record.

  3. step and section are flow-specific. Read them from the response; do not hard-code them. They are whatever the first step of your flow happens to be.

Send the applicant to form_url. The verification experience is mobile web only — a desktop visitor is prompted to switch devices, so if your own journey starts on desktop, present the link as a QR code rather than a redirect that dead-ends.

Then wait for the submission webhook. Polling is for progress indicators, not for driving business logic.

The {lang} path segment sets the locale the form renders in. It accepts en, th, zh-hans, zh-hant, km, my, lo, ms, vi, id, ja, hi, ar, ru, de, es and fr.