Penbox allows you to embed forms directly in your website using iframes, so your users never leave your application.Documentation Index
Fetch the complete documentation index at: https://docs.penbox.io/llms.txt
Use this file to discover all available pages before exploring further.
How It Works
Instead of redirecting users to a Penbox URL, you load the form inside an<iframe> on your own page. Penbox communicates back to your page using postMessage events.
Configure allowed origins
In your workspace Branding settings, add the origins (domains) that are allowed to embed Penbox forms. For example:
https://app.yourcompany.com.Enable embedding per form
On each form template, toggle Embedding on in the settings panel. Only forms with this toggle enabled can be embedded.
Configuration
Embedding requires a double opt-in:- Workspace level: declare which origins are allowed to embed forms (in Settings > Branding)
- Form level: enable embedding on each individual form template
Allowed Origins
Origins must be exact matches — no wildcards, no paths, no trailing slashes. HTTPS is required in production.http://localhost (with optional port) is allowed for development.
| Valid | Invalid |
|---|---|
https://app.example.com | https://app.example.com/ (trailing slash) |
https://portal.example.com | https://*.example.com (wildcard) |
http://localhost:3000 | https://app.example.com/path (path) |
Query Parameters
| Parameter | Description |
|---|---|
embed_v=1 | Required. Activates embed mode: hides the top navigation bar and enables postMessage events. |
autostart | Optional. Skips the welcome page and starts the form automatically. Recommended for embedded forms. |
Events
Penbox sends events to the parent window usingpostMessage. All events share the same envelope:
ready
Sent when the form layout has mounted and is ready to be displayed.
completed
Sent exactly once when the form is submitted. Includes the request_id for reference.
The
completed event fires regardless of whether an auto-redirect is
configured on the form. It is sent before any redirect delay.Integration Example
Security
Penbox uses theContent-Security-Policy: frame-ancestors header to control which origins can embed forms. When embedding is properly configured, the X-Frame-Options: DENY header is replaced with a CSP header listing only your allowed origins.
If a page tries to embed a form from an unauthorized origin, the browser blocks it — the iframe will show an error or remain blank.
Known Limitations
- Exact origins only — wildcards and regex patterns are not supported. Each origin must be declared explicitly.
- 20 origins max — contact support if you need more.
- Token visible to parent — the parent page can read the iframe URL. This is standard iframe behavior and does not expose additional data.
- Third-party cookie restrictions — Safari ITP and Chrome strict mode may block third-party cookies. Penbox uses sessionStorage-based authentication, so this is generally not an issue.
- Custom form domains — embedding currently only works with
fill.penbox.ioURLs. Custom domain support is planned.
Next Steps
Form Security
Protect forms with access controls
Form Templates
Build and configure form templates