Recipes
Recipes are ready-made requests that Prson writes and keeps up to date: what to ask for, and the message the person sees in 8 languages. Start a verification from one instead of choosing requirements yourself, or open one in the Prson app.
What a recipe is
- Written by Prson only. Nobody else can create, change or store a recipe, through the API, MCP or the app. You only ever create verifications and challenges, optionally starting from one.
- Fixed requirements in the same shape as
POST /v1/verifications, checked like any other. - Typed settings for the few things you choose: a country, a region (ISO 3166-2), a domain or an age. Never free text: each value is checked like the fact it makes.
- Words in en, pt, es, pl, fr, de, it, nl: a title, what it proves and doesn't, and the message shown to the person.
- Prson may write a recipe for one business (it then says "Recipe for acme.com"); it is still written and kept by Prson.
The recipes
18 today, generated from the API's source. GET /v1/recipes returns the same list, with every language.
Prson recipe · age-18 · version 1
18 or older
Proves the person is at least 18, from the date of birth on the passport or ID card whose chip Prson checked. You learn only yes or no, never the date.
Asks for: 18 or older.
Message: “Please confirm with Prson that you're 18 or older.”
Prson recipe · age-21 · version 1
21 or older
Proves the person is at least 21, from the date of birth on the passport or ID card whose chip Prson checked. You learn only yes or no, never the date.
Asks for: 21 or older.
Message: “Please confirm with Prson that you're 21 or older.”
Prson recipe · minimum-age · version 1
At least a given age
Proves the person is at least the age you choose, from the date of birth on the passport or ID card whose chip Prson checked. You learn only yes or no, never the date.
Asks for: 18 or older (for example; you choose the age).
Settings:age (an age in whole years)
Message: “Please confirm with Prson that you're {age} or older.”
Prson recipe · verified-human · version 1
Verified human
Proves Prson checked the chip of the person's passport or ID card (identity level 5 or more). You learn nothing about who they are: no name and no document details.
Asks for: Verified human (identity level 5 or higher).
Message: “Please confirm with Prson that you're a verified human.”
Prson recipe · real-person · version 1
Real person, live
A verified human (Prson checked their passport or ID card chip) who also takes a live selfie for you in the Prson camera. Uploads and screenshots are refused. You receive the selfie.
Asks for: Verified human (identity level 5 or higher); A live selfie.
Message: “Please confirm with Prson that you're a real person and take a live selfie.”
Prson recipe · eu-citizen · version 1
EU citizen
Proves the person's nationality, as written in the passport or ID card whose chip Prson checked, is that of an EU country. You don't learn which one.
Asks for: EU citizen.
Message: “Please confirm with Prson that you're a citizen of an EU country.”
Prson recipe · citizen-of · version 1
Citizen of a country
Proves the person's nationality, as written in the passport or ID card whose chip Prson checked, is the country you choose. You learn only yes or no.
Asks for: Citizen of Portugal (for example; you choose the country).
Settings:country (a country, ISO 3166-1 alpha-3 (PRT))
Message: “Please confirm your nationality with Prson: {country}.”
Prson recipe · eu-residence-permit · version 1
EU residence permit
Proves the person verified a residence permit issued by an EU country, read from the permit's chip. You don't learn which country.
Asks for: Residence permit from an EU country.
Message: “Please confirm with Prson that you hold a residence permit from an EU country.”
Prson recipe · verified-address · version 1
Verified postal address
Proves the person has a postal address verified with a code in a letter Prson posted to it. You don't learn the address.
Asks for: Postal address verified.
Message: “Please confirm with Prson that you have a verified postal address.”
Prson recipe · lives-in-country · version 1
Lives in a country
Proves the person's verified postal address (checked with a letter Prson posted to it) is in the country you choose. You learn only yes or no.
Asks for: Postal address in Portugal (for example; you choose the country).
Settings:country (a country, ISO 3166-1 alpha-2 (PT))
Message: “Please confirm with Prson the country you live in: {country}.”
Prson recipe · lives-in-region · version 1
Lives in a region
Proves the person's verified postal address is in the region, state or province you choose. Only addresses verified with their region chosen from Prson's list can answer; others get no answer.
Asks for: Lives in the region PT-11, Portugal (for example; you choose the region).
Settings:region (a region, state or province, ISO 3166-2 (PT-11, US-CA))
Message: “Please confirm with Prson the region you live in: {region}.”
Prson recipe · verified-phone · version 1
Verified phone number
Proves the person has a phone number they confirmed with a code sent by SMS. You don't learn the number.
Asks for: Phone number verified.
Message: “Please confirm with Prson that you have a verified phone number.”
Prson recipe · verified-email · version 1
Verified email address
Proves the person has an email address they confirmed with a code. You don't learn the address.
Asks for: Email address verified.
Message: “Please confirm with Prson that you have a verified email address.”
Prson recipe · work-email · version 1
Work email address
Proves the person confirmed an email address on an organisation's own domain, not a free or throwaway provider. You don't learn the address or the domain, and it doesn't prove they still work there.
Asks for: Work email address (not a free or throwaway provider).
Message: “Please confirm with Prson that you have a work email address.”
Prson recipe · email-at-domain · version 1
Email address at a domain
Proves the person confirmed an email address at exactly the domain you choose, such as your company's. You learn only yes or no, not the address, and it doesn't prove they still work there.
Asks for: Email address at example.com (for example; you choose the domain).
Settings:domain (a domain name (example.com))
Message: “Please confirm with Prson that you have an email address at {domain}.”
Prson recipe · website-owner · version 1
Controls a website
Proves the person controls the domain you choose: they added a DNS record to it that Prson checked.
Asks for: Controls the website example.com (for example; you choose the domain).
Settings:domain (a domain name (example.com))
Message: “Please confirm with Prson that you control {domain}.”
Prson recipe · marketplace-seller · version 1
Marketplace seller check
For buying from someone you don't know: proves they're a verified human (Prson checked their passport or ID card chip) with a verified phone number. You don't learn their name, number or document details.
Asks for: Verified human (identity level 5 or higher); Phone number verified.
Message: “Before we go ahead, please confirm with Prson that you're a verified human with a verified phone number.”
Prson recipe · tenant-check · version 1
Tenant check
For landlords: the person's given names and family name as written in the passport or ID card whose chip Prson checked, that they're 18 or older, and that the document hasn't expired. You learn their name, not their date of birth or document number.
Asks for: Given names (the value); Family name (the value); 18 or older; Identity document not expired.
Message: “Please confirm your name and age with Prson for the rental.”
Use one with the API
Send recipe (and recipe_settings) to POST /v1/verifications. The recipe's requirements come first; any requirements you add follow (10 in all). Without a title, the recipe's message in recipe_language (default en) is what the person sees. The response is the usual verification, priced and answered like any other. POST /v1/verifications/quote takes the same fields.
Errors: an unknown recipe is 404 recipe_not_found, a retired one 410 recipe_retired, a missing or wrong setting 400 invalid_recipe_settings (with setting). GET /v1/recipes/{slug}?country=PT shows a recipe with its settings filled in, as the verification would use it. Both GETs are public and cacheable.
curl https://api.prson.net/v1/verifications \
-H "Authorization: Bearer $PRSON_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"recipe": "lives-in-country",
"recipe_settings": { "country": "PT" },
"title": "Confirm you live in Portugal to join the local offer",
"requirements": [{ "type": "selfie", "optional": true }]
}'// On your server: the API key never goes to the browser or an app.
const res = await fetch("https://api.prson.net/v1/verifications", {
method: "POST",
headers: { Authorization: `Bearer ${process.env.PRSON_API_KEY}`, "Content-Type": "application/json" },
body: JSON.stringify({
recipe: "age-18",
recipe_language: "pt", // without a title, the recipe's message in this language is the title
}),
});
const { verification, share_url } = await res.json();
// Send share_url to the person yourself.curl https://api.prson.net/v1/recipes
curl "https://api.prson.net/v1/recipes/lives-in-country?country=PT"Or put the request together in Build your request, starting from a recipe.
Use one over MCP
On Prson Verify, list_recipes returns the list and create_verification (and quote_verification) take recipe and recipe_settings.
Agent → list_recipes
← { recipes: [{ slug: "age-18", … }, { slug: "lives-in-country", settings: [{ name: "country", kind: "country2" }], … }, …] }
Agent → create_verification { recipe: "lives-in-country", recipe_settings: { country: "PT" } }
← { share_url: "https://app.prson.net/challenge/…", verification: { title: "Please confirm with Prson the country you live in: Portugal.", … } }Open one in the Prson app
Each recipe has a link, https://app.prson.net/r/<slug>, with its settings in the query (?country=PT). Opened on a phone with Prson, the app's challenge composer starts filled in: the person checks it, can change anything, and sends it themselves, from their own account. Elsewhere the page shows a QR code to scan with the phone. Put it behind a button or a QR code in your product for people who ask others from their own phone. The link carries only what to ask, nothing about anyone.
Versions and changes
A recipe's version goes up whenever what it asks or says changes. Links and recipe always use the current version. A recipe Prson retires answers 410 recipe_retired; its slug is never reused for something else. Prson looks at which combinations of requirements are asked for most (counts only, nothing about who) to decide which recipes to write next.