Set up a test user
A live read needs a user whose Personal Server is ready and has synced data for the source you request. You don’t need Vana to provision one — create your own:1
Open the Vana app and sign in
Open the Vana app sources page at
app.vana.org/sources, sign in as a user, and set the app’s network selector to the same network your app uses (Testnet or Mainnet). This is a user account, separate from your app identity — but it can be your own account.2
Connect the source you request
Connect the same source your app requests (for example Spotify) and let it sync. This provisions the user’s Personal Server and populates the scopes you’ll read.
You can approve your own app with this account — an app can grant to itself, so one person can be both the builder and the approving user. Use the same environment on both sides (
VANA_ENV/VANA_NETWORK on the app must match the Vana app you sign into); testnet and mainnet data do not mix.Run the flow
1
Start your app and connect
Start your app in the matching Vana environment, then click the connect button.
2
Approve
Confirm the Vana approval screen shows your app name, app address, source, and scopes, then approve.
3
Confirm the result
Your app should render the JSON from
/api/vana/data, including scope, data, and a payment object (opType, opId, amount, asset, paidAt).4
Confirm the escrow change
Check that the app identity’s escrow balance changed in Vana Account — for a paid read, available balance decreases or authorized amount increases.
/api/vana/data response (with its payment receipt) and the escrow balance in Vana Account are your immediate end-to-end confirmation.
Before you ship
The guide’s routes are unauthenticated so you can test with zero setup. Before production:- Bind the routes to a user session. Anyone who can reach
/api/vana/requestcan create access requests, and anyone holding arequestIdcan call/api/vana/data. - Cache reads per
requestId. RepeatreadApprovedDatacalls can each settle a fee from escrow — cache the first successful result server-side so a replayed request ID can’t drain your balance. - Rate-limit
/api/vana/request. - Expect optional schema fields to be missing. Only a scope’s required fields are guaranteed; build an empty state for optional ones (a real connector may return records without them).