---
title: "Thank-you and redirects"
description: "Configure the built-in success screen, or send the respondent to an HTTP or HTTPS destination."
group: "Build forms"
order: 6
type: "feature"
keywords:
  - "successTitle"
  - "successMessage"
  - "redirectUrl"
  - "completion"
updated: "2026-07-14"
---

Completion settings decide what the respondent sees after Fillo accepts a response.

## In the dashboard

Open the form editor and find the completion settings.

1. Set the success title.
2. Add a short success message that explains what happens next.
3. Add a redirect only when the next step belongs on another route.
4. Publish the draft and submit a test response.

Success copy should confirm the action without echoing sensitive answers back. A redirect only runs after a live submission — not when the renderer restores state in a browser that already responded.

## In code

```ts
const requestForm = defineForm({
  id: "request-demo",
  pages: [{
    id: "request",
    blocks: [{ id: "email", kind: "email", label: "Work email", required: true }],
  }],
  settings: {
    successTitle: "Request received",
    successMessage: "We'll reply by email within two working days.",
    redirectUrl: "https://app.example.com/requests/complete",
  },
});
```

`redirectUrl` must use `http:` or `https:`. Other protocols are rejected.

## Own the after-submit behavior

An embedded renderer can also run host code with `onSubmitted`. Use it for local navigation, analytics, or a product-specific confirmation — Fillo still stores the response either way.

```tsx
<FilloForm
  formId="request-demo"
  onSubmitted={(responseId) => {
    const query = responseId ? `?response=${encodeURIComponent(responseId)}` : "";
    router.push(`/requests/complete${query}`);
  }}
/>
```

Don't put secrets or private answer values in a query string.

## Current routing limit

`FormSettings` has one success title, one success message, and one redirect URL. It can't currently pick a different completion screen or redirect based on an answer. Use page jumps for an early end, or handle response-based routing in the host app after submission.

## Related

- [Logic](/docs/logic): End a reachable path before later pages.
- [Quickstart](/docs/embed): Handle submitted and error states in an embed.
- [Webhooks](/docs/webhooks): Start reliable server-side work after storage succeeds.
