Firma lets you add legally binding e-signatures to any React Native / Expo app generated with a0.dev. Mobile apps need signing constantly: service agreements, parental consent, gig-worker contracts, rental and delivery confirmations. Because a0.dev generates Expo apps, you can present the Firma signing experience in a native WebView while keeping your API key safe on a backend you control. This guide covers two integration paths:Documentation Index
Fetch the complete documentation index at: https://docs.firma.dev/llms.txt
Use this file to discover all available pages before exploring further.
- Backend endpoint + WebView (recommended) - Send signing requests from a server-side endpoint and present the signing experience in a native WebView. Best for production mobile apps.
- Deep link (lightweight) - Open the Firma signing URL in the system browser. Best for very simple flows.
Prerequisites
- A Firma account with an API key
- An a0.dev project (uses Expo + React Native)
react-native-webviewinstalled in the project (add it via a0.dev’s AI chat or the import panel)- At least one Firma template with signing fields configured
- A backend service for your API calls (e.g., Express, Fastify, or a Supabase Edge Function)
Firma uses the raw API key as the
Authorization header value - do not prefix it with Bearer. This differs from many other APIs.Getting started
- Backend endpoint + WebView
- Deep link
This is the recommended approach. Your app calls a server-side endpoint to create the signing request, then opens the signing URL in a WebView that lives inside your app. Because a0.dev apps are frontend-only, you need an external backend to keep your API key secure.The Make sure You can also ask the a0.dev AI chat to wire this up: “When the user taps Send Contract on the contract screen, call my backend at /api/signing-requests with the template ID and the user’s details, then show the Firma signing WebView.”
Step 1: Set up a backend endpoint
Create a backend endpoint that calls the Firma API. This can be an Express server, a Supabase Edge Function, or any server-side environment where you can store secrets. Here is an example using Express:create-and-send endpoint creates the signing request and sends it to recipients atomically. If you need to review or modify the request before sending, use POST /signing-requests to create a draft, then POST /signing-requests/{id}/send separately.Step 2: Store your backend URL in the app
In your a0.dev project, create a.env file and add your backend URL:.env is in .gitignore.Step 3: Call the endpoint and open the WebView
From any React Native screen, call the backend endpoint and store the returnedsigning_request_user_id. Then render the Firma signing experience inside a WebView:Webhook integration
To track when documents are signed, add a webhook endpoint to your backend:Embedded signing
The WebView shown in the getting started section is the mobile equivalent of Firma’s embedded signing experience. Once you have the recipient’ssigning_request_user_id from the API (returned as first_signer.id in the create-and-send response), load it in a WebView:
Next steps
- API authentication - API keys and workspace scoping
- Webhooks guide - Event types, payloads, and signature verification
- Embedded signing - In-app signing experience
- Creating workspaces - Multi-tenant setups for SaaS apps
- Complete setup guide - End-to-end Firma integration walkthrough
- API reference - Full endpoint documentation