<script> widget to load. For browsers and native mobile apps, Bondify exposes two public endpoints that need only your project_id — no secret key on the client. This is what the React and Flutter SDKs call under the hood, and what you call directly when you have no SDK for your stack.
Enable Mobile SDK under Project → Settings to turn on the public endpoints. Without it,
/generate/public and /verify/public return PUBLIC_ACCESS_DISABLED.Endpoints
Base URL:https://api.bondify.dev
POST /api/v1/generate/public
Create a pending session.
POST /api/v1/verify/public
Poll for the session result. On the first confirmed read, the session becomes used.
Recommended client loop
1
Generate
Call
/generate/public. Keep the session_token.2
Open the deep link
Open
deeplink (new tab on web, url_launcher/Linking on mobile).3
Poll
Call
/verify/public every ~2 seconds. Stop on confirmed, cancelled, or expired. The session’s TTL is 10 minutes; you’ll typically also stop polling after a couple of minutes of inactivity.4
Verify on your server
Send the
proof to your backend and verify it with your webhook_secret.Error responses
Public endpoints return a4xx with { "error": "…" } for these conditions:
Prefer an SDK when you have one
If you’re on React/Next.js or Flutter, use the official SDK instead of calling these endpoints by hand — it manages the generate/poll/expiry lifecycle, timeouts, and state for you:React / Next.js
@bondify/reactFlutter
bondify_flutter — GitHubREST API reference
All endpoints