Launch a Form
What this does
Generate a Quik! form using the REST API. The response gives you back a URL (or HTML markup) you can show to your user, plus a UNID that identifies the generation. This is the most common Quik! API call and the foundation of every integration.
When to use this
Any time you need to render a Quik! form to an end user. This includes:
- Showing a new account opening form to a financial advisor.
- Pre-filling a transfer form with client data and presenting it for signature.
- Generating a household package with multiple forms across multiple accounts.
If you need a finished PDF without a viewer step (for archiving or upload to an e-signature vendor that takes PDFs), use execute/pdf instead. See HTML vs PDF Execution for the decision criteria.
Before you start
You need three things to launch a form:
- A Quik! account with at least one library subscription. See Library Subscription if your account is new.
- An OAuth access token. See Authentication for how to generate one.
- The Form ID of the form you want to generate.
How to do it
Endpoint
POST https://websvcs.quikforms.com/rest/quikformsengine/qfe/execute/html
Headers
Authorization: Bearer <access_token>
Content-Type: application/json
Minimum request
The only required parameter is QuikFormID. Everything else has defaults.
{
"QuikFormID": "12"
}
This generates Form 12 with no prefill data and returns the form viewer URL.
Request with prefill data
Most real integrations include prefill data so the form arrives populated for the user.
{
"HostFormOnQuik": true,
"QuikFormID": "12",
"FormFields": [
{ "FieldName": "1own.FName", "FieldValue": "John" },
{ "FieldName": "1own.LName", "FieldValue": "Doe" },
{ "FieldName": "1own.H.Email", "FieldValue": "john.doe@example.com" }
]
}
Request with multiple forms in one package
Pass a comma-separated list of Form IDs in QuikFormID. Quik! returns one URL for the whole package.
json
{
"HostFormOnQuik": true,
"QuikFormID": "12,449,5659",
"FormFields": [
{ "FieldName": "1own.FName", "FieldValue": "John" },
{ "FieldName": "1own.LName", "FieldValue": "Doe" }
]
}
If you need separate sets of data within one package (households, multiple accounts), use Form Group Instances. See Grouping and Bundling.
Response
A successful generation returns:
{
"ResultData": {
"UNID": "5ehKj1bJHs6Ljfcyxr4OoY%2fhwymqHC8Cu5P3EVwmf4%2b1FLN0BPGWps3Ce5yfbZKJ",
"HTML": "https://quikforms.com/viewform/zqRR-TKIAGfZ5F",
"FormIDs": "12,449,5659"
},
"ErrorCode": 0,
"Message": "Forms generated successfully.",
"Errors": null
}
Three things to know about the response:
UNIDidentifies this generated package. Save it if you want to resume the form later. See Sessions and UNIDs.HTMLcontains either a URL to the form viewer (whenHostFormOnQuikistrue) or the full HTML markup (whenfalse). The viewer is what your user opens to fill out the form.FormIDsis the list of Form IDs that were successfully generated. Invalid Form IDs are dropped silently. Compare against the IDs you sent if you need to confirm everything generated.
Common variations
Host on Quik! vs host yourself
The HostFormOnQuik property controls where the form viewer lives.
|
Setting |
What you get back in |
When to use |
|---|---|---|
|
|
A URL to the form viewer at |
You want Quik! to handle hosting. Fastest to integrate. |
|
|
The full HTML markup of the form |
You want to host the form on your own domain (in an iframe or your own page). |
Test mode (preview an unpublished form)
If you have access to an unpublished form (in Final test status), set TestFinalFormsMode to true to generate that version.
{
"QuikFormID": "12",
"TestFinalFormsMode": true
}
This is useful for validating new forms before they go to production. See Test, Final, and Draft Mode for details on each form state.
Draft mode (adds a watermark)
Set DraftMode to true to generate the form with a DRAFT watermark visible across every page.
{
"QuikFormID": "12",
"DraftMode": true
}
The response message includes a reminder: forms in draft mode are not intended for production use.
Prefill more than just FormFields
FormFields is the most common way to prefill, but it is not the only one. For larger payloads, you can use LoadXML with an XML field set, or call AddFieldToForm repeatedly in the SDK. See Field Mapping for the comparison and when to use each.
Pitfalls
- Invalid Form IDs are silently dropped. If you send
"QuikFormID": "12,449,99999"and Form 99999 does not exist, the response will return"FormIDs": "12,449"without an error. Always compare the requested IDs with the returned IDs if you need certainty. HostFormOnQuik: falsedoes not give you a URL. When self-hosting, theHTMLfield contains the full markup, often hundreds of kilobytes. Your application has to render this. See Hosted vs Self-Hosted Forms for tradeoffs.- The UNID in the response is URL-encoded. You will see
%2band%2fcharacters. When you pass the UNID back to Quik! in a query string (for attachments, re-launches, etc.), it needs to be properly encoded so the value does not get decoded twice. In .NET, useHttpUtility.UrlEncode(unid)before building the URL. - The form viewer URL is single-use by default. It is meant to be opened by your end user once they click into the workflow. If you need to recreate the same form package later, regenerate with the saved UNID rather than holding the URL.
- Prefill data for fields that do not exist on the form is silently ignored. If you send
1own.SpouseFNameto a form that does not have that field, it does not error. It just does not prefill. Use/forms/fieldsto confirm which fields are available on a form before integrating.
Related articles
Continue with these articles to understand the related concepts and workflows:
-
Library Subscription — Confirm how form access works before launching a form.
-
Authentication — Review the secure setup required before making launch requests.
-
Fields and Field Names — Learn how prefilled values are matched to the correct fields.
-
HTML vs PDF Execution — Understand the difference between launching an interactive form and generating a PDF.
