Eligible
eligibleThe sourced rules indicate ownership is available for this declared context.
Check what a person may own using only a declared country, residency, and asset—without sending names, IDs, or wallet addresses.
Ask Vestail for a test key. Test keys begin with vst_test_; live keys begin with vst_live_.
The mental model
Use the buyer’s stated country and role. Vestail does not infer either.
Turn a company, product, or everyday phrase into a known asset class.
Apply the country rule and preserve conditional outcomes as their own state.
Offer a venue only when the verdict allows it and required conditions are acknowledged.
Quickstart
Get an API key from Vestail, keep it on your server, and send only the declared eligibility context.
Use the bearer key in the Authorization header. Never expose a live key in browser code.
curl "$VESTAIL_API_BASE_URL/api/v1/check" \
-H "Authorization: Bearer $VESTAIL_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"country": "NG",
"residency": "citizen",
"asset": { "class": "gold_bullion" }
}'const response = await fetch(`${process.env.VESTAIL_API_BASE_URL}/api/v1/check`, {
method: "POST",
headers: {
"Authorization": `Bearer ${process.env.VESTAIL_API_KEY}`,
"Content-Type": "application/json"
},
body: JSON.stringify({
country: "NG",
residency: "citizen",
asset: { class: "gold_bullion" }
})
});
const eligibility = await response.json();These are structural examples, not claims about a country or asset. Real reasons and sources always come from Vestail’s stored rule data.
// Shape examples — placeholders are replaced by sourced rule data.
{ "verdict": "eligible", "reasons": ["<sourced reason>"], "conditions": [],
"sources": [{ "label": "<source label>", "url": "<source URL>" }] }
{ "verdict": "conditional", "reasons": ["<sourced reason>"],
"conditions": ["<condition from the rule>"],
"sources": [{ "label": "<source label>", "url": "<source URL>" }] }
{ "verdict": "restricted", "reasons": ["<sourced reason>"], "conditions": [],
"sources": [{ "label": "<source label>", "url": "<source URL>" }] }Resolver
Vestail evaluates named entities before generic aliases, so “Tesla shares” resolves to Tesla instead of the broader shares category.
A resolution can include a per-country rule when the same entity maps differently by location. For example, a listed company can be domestic equity in its home country and foreign equity elsewhere.
Verdict model
eligibleThe sourced rules indicate ownership is available for this declared context.
conditional · 1A licence, cap, approval, residency rule, or other condition applies.
restrictedThe sourced rules indicate ownership is restricted for this declared context.
Conditional routes require acknowledged: true. Cannot-own routes are always refused.
If a rule has no source, the public API returns unverified. It never promotes missing research to an eligibility verdict.
Rule engine
The baseline ownership status for the asset class.
Eligibility evidence for a tokenized or issued product.
An unassessed product is never treated as eligible or buyable.
Rules are keyed by asset ID under each buyer type. Every country must contain every supported asset.
{
"status": 1,
"sources": [],
"verified_at": null
}API reference
All responses are JSON. Reference data is designed to be cacheable; activity data is live.
/api/v1The running service publishes its generated OpenAPI 3.1 document at /api/v1/openapi.json./checkCheck one asset for a declared country and residency.
/check/batchRun up to 100 independent checks in one request.
/assetsList every class and issuer version with its profile-specific verdict.
/countriesRead supported countries and sourced-rule coverage.
/rules/{id}Read one rule with sources and available history.
Integration guide
unverified as unknown, never eligible.ruleId to retrieve the current rule and available history.429 and the Retry-After header.await fetch(`${process.env.VESTAIL_API_BASE_URL}/api/v1/check/batch`, {
method: "POST",
headers: { Authorization: `Bearer ${key}`, "Content-Type": "application/json" },
body: JSON.stringify({ checks: [firstCheck, secondCheck] })
});Trust and limits
Vestail does not infer citizenship, residency, or identity. Results depend on the values supplied by the buyer or integrating product.
A result without a source is returned as unverified, regardless of the internal rule status.
Every response includes a disclaimer. Vestail informs; it does not certify compliance or guarantee a transaction.
Vestail counts requests per API key per day for limits and future billing. Request bodies are not retained.
The current rule set distinguishes citizens and foreigners. Requests for residents return unverified until resident-specific sourced rules are added.
Glossary
Plain-language meanings for the instrument and ownership terms used across Vestail.
Changelog
Added bearer-key access, single and batch checks, profile-scoped assets, coverage statistics, rule history, unverified handling, and generated OpenAPI documentation.
Added the resolver, matrix, verdict, rule schema, route gating, provenance, API reference, and deployment-limit guidance in one connected path.