/api/v1/jurisdictions1 единицаList jurisdictions
Public jurisdictions with their current zone memberships (eu, eea, schengen, ch_fmop).
- Ответ
- { release_id, as_of, data: Jurisdiction[] }
- Ошибки
- 401 · 422 · 429 · 503
Эта страница строится из того же документа OpenAPI 3.1, который отдаёт API, поэтому расходиться с ним она не может. Каждый ответ содержит release_id и as_of. Ошибки — документы RFC 9457 со стабильным кодом.
/api/v1/jurisdictions1 единицаPublic jurisdictions with their current zone memberships (eu, eea, schengen, ch_fmop).
/api/v1/purposes1 единицаThe purpose taxonomy; `study` is the root of the first slice.
/api/v1/requirement-concepts1 единицаThe 12 requirement concepts. `eligibility` concepts affect fit; `document` and `procedural` ones are listed as to_provide.
/api/v1/programs1 единицаProgram summaries of the live release, filtered by destination, zone and purpose.
| Параметр | Где | Тип | Описание |
|---|---|---|---|
| destination | query | string ^[A-Z]{2}$ | ISO 3166-1 alpha-2. |
| zone | query | string (eu | eea | schengen | ch_fmop) | |
| purpose | query | string | e.g. `study` or `study.degree`; ancestors and descendants match. |
| release | query | integer | Pin a past release for reproducible answers. Defaults to the latest. |
/api/v1/programs/{slug}1 единицаOne program version with every fact (identity, lifecycle, max stay, requirements, fees, processing, rights), each with freshness and evidence. `checks` lists requirement concepts that were checked, checked-but-unknown, and not yet catalogued.
| Параметр | Где | Тип | Описание |
|---|---|---|---|
| slug * | path | string ^[a-z]{2}-[a-z0-9-]+$ | |
| release | query | integer | Pin a past release for reproducible answers. Defaults to the latest. |
/api/v1/match5 единицStateless. The body is never stored or logged. Results only for destinations whose coverage is `covered`; others are listed in `coverage.in_progress`. Missing inputs yield `unknown`, never a guess.
/api/v1/coverage1 единица§11 quality-gate status of every slice country. With `destination`, also the material-fact inventory: what is evidenced, explicitly unknown, stale, unsupported or missing.
| Параметр | Где | Тип | Описание |
|---|---|---|---|
| destination | query | string ^[A-Z]{2}$ |
/api/v1/openapi.jsonОшибки приходят в формате application/problem+json. Поле code стабильно, а pointer указывает на ошибочный фрагмент входных данных.
| code | Значение |
|---|---|
| invalid_input | Запрос не соответствует контракту. См. pointer. |
| unsupported_scope | Направление вне опубликованной публичной области. |
| not_found | В запрошенном релизе нет действующей программы с таким slug. |
| unauthorized | Ключ API отсутствует, недействителен или отозван. |
| rate_limited | Превышен лимит запросов аккаунта в минуту. Повторите через число секунд из заголовка Retry-After. |
| quota_exceeded | Единицы за период израсходованы на тарифе без оплаты сверх лимита. Лимит обнулится в момент из X-Units-Reset. |
| unavailable | Релизов ещё нет или сервис данных недоступен. |
| no_evidence | Зарезервировано: факт нельзя отдать без подтверждения. |
| conflicted | Зарезервировано: официальные источники сейчас противоречат друг другу. |
TravelerContext и MatchResult — замороженные контракты, которыми пользуются валидаторы, включены без изменений.
{ "type": "object", "description": "RFC 9457 problem details.", "required": [ "type", "title", "status", "code", "detail" ], "properties": { "type": { "type": "string" }, "title": { "type": "string" }, "status": { "type": "integer" }, "code": { "type": "string", "enum": [ "invalid_input", "unsupported_scope", "no_evidence", "conflicted", "unavailable", "rate_limited", "quota_exceeded", "unauthorized", "not_found" ] }, "detail": { "type": "string" }, "pointer": { "type": "string", "description": "JSON pointer to the offending input." } }}{ "type": "object", "required": [ "code", "name", "kind", "zones" ], "properties": { "code": { "type": "string" }, "name": { "type": "string" }, "kind": { "type": "string" }, "zones": { "type": "array", "items": { "type": "string" } } }}{ "type": "object", "required": [ "code", "name", "kind" ], "properties": { "code": { "type": "string" }, "name": { "type": "string" }, "kind": { "type": "string" } }}{ "type": "object", "required": [ "code", "name" ], "properties": { "code": { "type": "string" }, "parent_code": { "type": [ "string", "null" ] }, "name": { "type": "string" }, "description": { "type": [ "string", "null" ] } }}{ "type": "object", "required": [ "code", "category", "name" ], "properties": { "code": { "type": "string" }, "category": { "type": "string", "enum": [ "eligibility", "document", "procedural" ] }, "name": { "type": "string" }, "explanation": { "type": [ "string", "null" ] }, "param_schema": { "type": "object", "description": "JSON Schema of this concept's params (contracts/requirement-params.schema.json)." } }}{ "type": "object", "required": [ "source_url", "origin", "observed_at" ], "properties": { "source_url": { "type": "string", "format": "uri" }, "authority": { "type": [ "string", "null" ] }, "origin": { "type": "string", "enum": [ "official_primary", "official_secondary", "legacy_research", "legacy_unverified", "demo_derived" ] }, "observed_at": { "type": "string", "format": "date-time" }, "section_id": { "type": [ "string", "null" ] }, "quote": { "type": [ "string", "null" ], "description": "Verbatim, in the source language. Null when the source's terms forbid quoting." }, "quote_withheld": { "type": "boolean" } }}{ "type": "object", "required": [ "fact_key", "kind", "value", "freshness", "evidence" ], "properties": { "fact_key": { "type": "string", "description": "identity · lifecycle · max_stay · req:<concept> · fee:<kind>:<role> · processing:<statistic> · right:<kind>" }, "kind": { "type": "string", "enum": [ "program_identity", "program_lifecycle", "max_stay", "fee_component", "processing_estimate", "program_right", "program_requirement", "requirement_absent", "requirement_unknown" ] }, "value": { "type": "object", "description": "Shape per kind: contracts/candidate.schema.json $defs; requirements per requirement-params.schema.json." }, "freshness": { "$ref": "#/components/schemas/Common_freshness" }, "verified_at": { "type": [ "string", "null" ], "format": "date-time" }, "evidence": { "type": "array", "items": { "$ref": "#/components/schemas/Evidence" } } }}{ "type": "object", "required": [ "slug", "destination", "official_name", "authority", "legal_instrument", "channels", "purposes", "lifecycle", "max_stay", "origin", "freshness" ], "properties": { "slug": { "type": "string" }, "destination": { "type": "string" }, "official_name": { "type": "string", "description": "In the official language." }, "official_name_en": { "type": [ "string", "null" ] }, "official_code": { "type": [ "string", "null" ] }, "authority": { "type": "string" }, "official_url": { "type": [ "string", "null" ] }, "legal_instrument": { "type": "string" }, "channels": { "type": "array", "items": { "type": "string" } }, "purposes": { "type": "array", "items": { "type": "string" } }, "lifecycle": { "type": "string", "enum": [ "announced", "open", "suspended", "closed", "replaced" ] }, "max_stay": { "$ref": "#/components/schemas/Common_duration" }, "origin": { "type": "string" }, "freshness": { "$ref": "#/components/schemas/Common_freshness" } }}{ "allOf": [ { "$ref": "#/components/schemas/ProgramSummary" }, { "type": "object", "required": [ "version", "applicability", "checks", "facts" ], "properties": { "version": { "type": "object", "required": [ "version_id", "published_in", "valid_during" ], "properties": { "version_id": { "type": "string", "format": "uuid" }, "published_in": { "type": "integer" }, "valid_during": { "type": "string", "description": "Postgres daterange, e.g. `[2026-01-01,)`." } } }, "applicability": { "$ref": "#/components/schemas/Predicate" }, "checks": { "type": "object", "required": [ "checked", "unknown", "uncatalogued" ], "properties": { "checked": { "type": "array", "items": { "type": "string" }, "description": "Bound (required/conditional/optional) or evidenced not required." }, "unknown": { "type": "array", "items": { "type": "string" }, "description": "Checked; the official sources are silent." }, "uncatalogued": { "type": "array", "items": { "type": "string" }, "description": "Not yet checked. Never read as 'not required'." } } }, "facts": { "type": "array", "items": { "$ref": "#/components/schemas/Fact" } } } } ]}{ "type": "object", "required": [ "destination", "name", "purpose_root", "status", "programs", "material_facts", "gate_green" ], "properties": { "destination": { "type": "string" }, "name": { "type": "string" }, "purpose_root": { "type": "string" }, "status": { "type": "string", "enum": [ "in_progress", "covered", "withdrawn" ] }, "programs": { "type": "integer" }, "material_facts": { "type": "object", "properties": { "total": { "type": "integer" }, "evidenced": { "type": "integer" }, "pct": { "type": "number" } } }, "unsupported_positives": { "type": "integer" }, "scenarios": { "type": "object", "properties": { "total": { "type": "integer" }, "passing": { "type": "integer" } } }, "adapters": { "type": "object", "properties": { "total": { "type": "integer" }, "verified": { "type": "integer" } } }, "recheck_done": { "type": "boolean" }, "gate_green": { "type": "boolean" }, "decided_at": { "type": [ "string", "null" ], "format": "date-time" } }}{ "type": "object", "required": [ "slug", "fact", "state" ], "properties": { "slug": { "type": "string" }, "fact": { "type": "string" }, "state": { "type": "string", "enum": [ "evidenced", "explicit_unknown", "stale", "unsupported", "missing" ] }, "last_support": { "type": [ "string", "null" ], "format": "date-time" } }}{ "title": "TravelerContext — request body of POST /v1/match and MCP match_programs", "description": "Stateless and never persisted (only hashed usage metering). No names, document numbers, scans or exact birth dates. Every field except purpose and scope is optional; a missing field produces 'unknown' for the requirements that need it, plus an entry in missing_inputs. Spec §6.", "type": "object", "required": [ "purpose", "scope" ], "properties": { "purpose": { "$ref": "#/components/schemas/Common_purpose" }, "scope": { "type": "object", "description": "Destinations to evaluate. Exactly one of destinations / zone.", "oneOf": [ { "required": [ "destinations" ], "properties": { "destinations": { "type": "array", "minItems": 1, "maxItems": 31, "uniqueItems": true, "items": { "$ref": "#/components/schemas/Common_iso2" } } }, "additionalProperties": false }, { "required": [ "zone" ], "properties": { "zone": { "$ref": "#/components/schemas/Common_zone" } }, "additionalProperties": false } ] }, "citizenships": { "type": "array", "maxItems": 4, "uniqueItems": true, "items": { "$ref": "#/components/schemas/Common_iso2" } }, "citizenships_complete": { "type": "boolean", "default": true, "description": "Caller asserts the list contains ALL of the person's citizenships. If false, citizenship non-matches evaluate to unknown." }, "residence": { "$ref": "#/components/schemas/Common_iso2" }, "birth_year": { "type": "integer", "minimum": 1900, "maximum": 2100 }, "age": { "type": "integer", "minimum": 0, "maximum": 120, "description": "Alternative to birth_year; exact age at as_of." }, "languages": { "type": "array", "maxItems": 8, "items": { "type": "object", "required": [ "language" ], "properties": { "language": { "$ref": "#/components/schemas/Common_language" }, "cefr": { "$ref": "#/components/schemas/Common_cefr" }, "native": { "type": "boolean", "default": false }, "tests": { "type": "array", "maxItems": 4, "items": { "type": "object", "required": [ "test", "score" ], "properties": { "test": { "$ref": "#/components/schemas/RequirementParams_language_test" }, "score": { "type": "string", "minLength": 1, "maxLength": 20 }, "taken_on": { "$ref": "#/components/schemas/Common_date" } }, "additionalProperties": false } } }, "additionalProperties": false } }, "funds": { "type": "object", "description": "Liquid funds available for the stay. A range is allowed (min ≤ max); a single figure has max omitted.", "required": [ "min", "currency" ], "properties": { "min": { "$ref": "#/components/schemas/Common_decimal" }, "max": { "$ref": "#/components/schemas/Common_decimal" }, "currency": { "$ref": "#/components/schemas/Common_currency" }, "forms": { "type": "array", "uniqueItems": true, "items": { "type": "string", "enum": [ "blocked_account", "bank_statement", "scholarship", "sponsor_declaration", "deposit_guarantee", "income_proof" ] } } }, "additionalProperties": false }, "education_isced": { "type": "integer", "minimum": 0, "maximum": 8, "description": "Highest completed ISCED 2011 level." }, "stay_months": { "type": "number", "exclusiveMinimum": 0, "maximum": 120 }, "stay_days": { "type": "integer", "minimum": 1, "maximum": 3660, "description": "Length of stay in days; preferred for short stays. Requirements per day of stay fall back to stay_months × [28, 31] when absent." }, "accommodation_proof": { "$ref": "#/components/schemas/RequirementParams_accommodation_proof" }, "salary": { "type": "object", "description": "Offered salary for the destination job. A range is allowed (min ≤ max).", "required": [ "min", "currency", "period" ], "properties": { "min": { "$ref": "#/components/schemas/Common_decimal" }, "max": { "$ref": "#/components/schemas/Common_decimal" }, "currency": { "$ref": "#/components/schemas/Common_currency" }, "period": { "type": "string", "enum": [ "per_month", "per_year" ] }, "gross": { "type": "boolean", "default": true } }, "additionalProperties": false }, "family_links": { "type": "array", "maxItems": 5, "uniqueItems": true, "description": "All of the traveller's family links to people in the destination. An empty array asserts there are none.", "items": { "$ref": "#/components/schemas/RequirementParams_family_relation" } }, "experience_years": { "type": "number", "minimum": 0, "maximum": 60 }, "dependents": { "type": "object", "properties": { "spouse": { "type": "boolean" }, "children": { "type": "integer", "minimum": 0, "maximum": 12 } }, "additionalProperties": false }, "passport_expiry": { "$ref": "#/components/schemas/Common_date" }, "as_of": { "$ref": "#/components/schemas/Common_date", "description": "Evaluation date; defaults to today (UTC)." }, "release": { "type": "integer", "minimum": 1, "description": "Pin to a past release for reproducibility; defaults to latest." } }, "not": { "required": [ "birth_year", "age" ] }, "additionalProperties": false}{ "title": "MatchResult — response of POST /v1/match and MCP match_programs", "description": "Deterministic: identical (TravelerContext, release, as_of, engine_version) ⇒ byte-identical results. Never contains approval probabilities. Spec §5–§6.", "type": "object", "required": [ "release_id", "as_of", "engine_version", "schema_version", "missing_inputs", "assumptions", "results", "coverage" ], "properties": { "release_id": { "type": "integer", "minimum": 1 }, "as_of": { "$ref": "#/components/schemas/Common_date" }, "engine_version": { "type": "string", "pattern": "^\\d+\\.\\d+\\.\\d+$" }, "schema_version": { "const": "1" }, "missing_inputs": { "type": "array", "uniqueItems": true, "description": "TravelerContext fields whose absence made at least one eligibility requirement unknown, ordered by how many results they would resolve.", "items": { "type": "string" } }, "assumptions": { "type": "array", "description": "Every default the engine applied instead of caller input (e.g. 'dependents: none', 'as_of: today'). Never silent.", "items": { "type": "object", "required": [ "field", "assumed", "affects" ], "properties": { "field": { "type": "string" }, "assumed": {}, "affects": { "type": "array", "items": { "type": "string" }, "description": "program slugs whose result depends on this assumption" } }, "additionalProperties": false } }, "results": { "type": "array", "items": { "$ref": "#/components/schemas/MatchResult_programResult" } }, "free_movement": { "type": "array", "description": "Destinations where a declared citizenship grants free movement (EU/EEA/CH), so no study permit program applies.", "items": { "type": "object", "required": [ "destination", "basis_zone", "evidence" ], "properties": { "destination": { "$ref": "#/components/schemas/Common_iso2" }, "basis_zone": { "$ref": "#/components/schemas/Common_zone" }, "registration_note": { "type": "string", "maxLength": 500 }, "evidence": { "type": "array", "items": { "$ref": "#/components/schemas/Common_evidenceRef" } } }, "additionalProperties": false } }, "coverage": { "type": "object", "required": [ "in_scope", "covered", "in_progress" ], "properties": { "in_scope": { "type": "array", "items": { "$ref": "#/components/schemas/Common_iso2" } }, "covered": { "type": "array", "items": { "$ref": "#/components/schemas/Common_iso2" } }, "in_progress": { "type": "array", "items": { "$ref": "#/components/schemas/Common_iso2" }, "description": "In scope but not past the quality gate: no results are returned for these." } }, "additionalProperties": false } }, "additionalProperties": false}