{"name":"Aevamo Rules API","description":"Cross-border entry and stay rules, every answer carrying the quoted passage from the governing instrument, that document's URL, and the date we last verified the rule against it.","version":"2026-10-09","dataVersion":"69d37c0fbe99c5b63f679abba9b75a52a4b3fc24","docs":"https://aevamo.com/developers/","openapi":{"yaml":"https://api.aevamo.com/openapi.yaml","json":"https://api.aevamo.com/openapi.json"},"mcp":{"url":"https://api.aevamo.com/mcp","transport":"streamable-http","auth":"optional"},"auth":{"scheme":"Authorization: Bearer <key>","required":false,"getKey":"https://aevamo.com/developers/#keys","note":"Optional. Without a key you are on the keyless demo tier; a key raises the limit and unlocks the bulk snapshot."},"tiers":{"demo":{"auth":"none","limit":"100 requests per UTC day per IP","endpoints":["GET /v1/entry/check","GET /v1/entry/requirements","POST /v1/entry/check","POST /v1/entry/requirements","POST /v1/stay/check","POST /v1/stay/remaining","POST /v1/trips/check","GET /v1/rules/{id}","POST /v1/rules/search","GET /v1/sources/{id}"],"answer":"identical to the keyed answer, including evidence passages, which are returned by default on this tier"},"key":{"auth":"Authorization: Bearer <key>","limit":"120 burst, 40/second sustained","endpoints":["GET /v1/entry/check","GET /v1/entry/requirements","POST /v1/entry/check","POST /v1/entry/requirements","POST /v1/stay/check","POST /v1/stay/remaining","POST /v1/trips/check","GET /v1/rules/{id}","POST /v1/rules/search","GET /v1/sources/{id}","GET /v1/snapshot"]}},"endpoints":[{"method":"GET","path":"/v1/entry/check","sdk":"entry.check","summary":"Query-string entry question."},{"method":"GET","path":"/v1/entry/requirements","sdk":"entry.requirements","summary":"Query-string requirements question."},{"method":"POST","path":"/v1/entry/check","sdk":"entry.check","summary":"Can this passport enter, and for how long?"},{"method":"POST","path":"/v1/entry/requirements","sdk":"entry.requirements","summary":"Every applicable rule, not just the headline one."},{"method":"POST","path":"/v1/stay/check","sdk":"stay.check","summary":"Evaluate a visit history against the held stay rule."},{"method":"POST","path":"/v1/stay/remaining","sdk":"stay.remaining","summary":"Days left under the held stay rule."},{"method":"POST","path":"/v1/trips/check","sdk":"trips.check","summary":"A whole route; worst-of status across legs."},{"method":"GET","path":"/v1/rules/{id}","sdk":"rules.get","summary":"One rule verbatim, with citations and the regime's referee record."},{"method":"POST","path":"/v1/rules/search","sdk":"rules.search","summary":"Filter held rules; carries the coverage story."},{"method":"GET","path":"/v1/sources/{id}","sdk":"sources.get","summary":"A source document's authority, fetch record and cited passages."},{"method":"GET","path":"/v1/snapshot","sdk":"(offline copy)","summary":"The whole held ruleset, ETagged by dataVersion. Key required."},{"method":"GET","path":"/health","sdk":"-","summary":"Liveness and the loaded dataVersion."}],"versioning":{"major":"in the path (/v1). A breaking change ships as /v2, never in place.","revision":"the Aevamo-Version response header, an ISO date. Additive fields ship without a major bump; treat unknown fields as forward compatibility.","dataVersion":"the Aevamo-Data-Version response header and every answer body: the store commit the answer derives from, so any answer is reproducible and disputable.","deprecation":"a deprecated version serves RFC 9745 Deprecation and RFC 8594 Sunset headers with at least 12 months between them, plus Link rel=deprecation to the notice.","policy":"https://aevamo.com/developers/#versioning-and-deprecation"},"examples":"https://aevamo.com/developers/","support":{"disputes":"support@aevamo.com"}}