
Visa API
OperationalVisa rules, document checklists and application tracking by passport and destination.
Version v1.0 · 6 endpoints
Examples use the sandbox base URL https://sandbox.flightota.com. Requirement data is provided for information only. Applications are lodged and tracked only through a connected processing partner. FlightOTA does not decide or guarantee visa outcomes.
Reference
Get country information
/visa/v1/countries/{iso2}Entry overview for a destination: embassies, currency, passport validity rules.
Parameters
| Parameter | In | Description |
|---|---|---|
iso2stringrequired | path | Destination ISO 3166-1 alpha-2 code. Example: JP |
Errors
- 400
validation_errorOne or more request parameters are invalid. - 401
unauthorizedThe API key is missing, revoked or invalid. - 429
rate_limitedToo many requests. Retry after the time given in the Retry-After header.
curl -X GET "https://sandbox.flightota.com/visa/v1/countries/JP" \
-H "Authorization: Bearer $FLIGHTOTA_API_KEY"{
"data": {
"iso2": "JP",
"name": "Japan",
"passport_validity_months": 0,
"blank_pages": 1,
"evisa_available": true
}
}{
"error": {
"code": "validation_error",
"message": "One or more request parameters are invalid.",
"request_id": "req_01JD8Z4X2N7Q"
}
}Reference
List visa categories
/visa/v1/countries/{iso2}/visa-typesVisa types available for a destination, with fees, validity and length of stay.
Parameters
| Parameter | In | Description |
|---|---|---|
iso2stringrequired | path | Destination code. Example: JP |
nationalitystringrequired | query | Traveller nationality (ISO2). Example: BD |
Errors
- 400
validation_errorOne or more request parameters are invalid. - 401
unauthorizedThe API key is missing, revoked or invalid. - 429
rate_limitedToo many requests. Retry after the time given in the Retry-After header.
curl -X GET "https://sandbox.flightota.com/visa/v1/countries/JP/visa-types?nationality=BD" \
-H "Authorization: Bearer $FLIGHTOTA_API_KEY"{
"data": [
{
"code": "tourist_single",
"name": "Tourist (single entry)",
"max_stay_days": 90,
"fee": "25.00",
"processing_days": {
"min": 5,
"max": 7
}
}
]
}{
"error": {
"code": "validation_error",
"message": "One or more request parameters are invalid.",
"request_id": "req_01JD8Z4X2N7Q"
}
}Requirements
Check visa requirements
/visa/v1/requirementsWhether a visa is required for a nationality, destination and trip purpose.
Parameters
| Parameter | In | Description |
|---|---|---|
nationalitystringrequired | query | Traveller nationality (ISO2). Example: BD |
destinationstringrequired | query | Destination (ISO2). Example: JP |
purposestringoptional | query | tourism, business or transit. Example: tourism |
Errors
- 400
validation_errorOne or more request parameters are invalid. - 401
unauthorizedThe API key is missing, revoked or invalid. - 429
rate_limitedToo many requests. Retry after the time given in the Retry-After header.
curl -X GET "https://sandbox.flightota.com/visa/v1/requirements?nationality=BD&destination=JP&purpose=tourism" \
-H "Authorization: Bearer $FLIGHTOTA_API_KEY"{
"data": {
"requirement": "visa_required",
"evisa": true,
"visa_on_arrival": false,
"notes": [
"Passport must be valid for the length of stay."
]
}
}{
"error": {
"code": "validation_error",
"message": "One or more request parameters are invalid.",
"request_id": "req_01JD8Z4X2N7Q"
}
}Requirements
Get document checklist
/visa/v1/countries/{iso2}/visa-types/{code}/documentsRequired and optional documents, with format and size rules.
Parameters
| Parameter | In | Description |
|---|---|---|
iso2stringrequired | path | Destination code. Example: JP |
codestringrequired | path | Visa type code. Example: tourist_single |
Errors
- 400
validation_errorOne or more request parameters are invalid. - 401
unauthorizedThe API key is missing, revoked or invalid. - 429
rate_limitedToo many requests. Retry after the time given in the Retry-After header.
curl -X GET "https://sandbox.flightota.com/visa/v1/countries/JP/visa-types/tourist_single/documents" \
-H "Authorization: Bearer $FLIGHTOTA_API_KEY"{
"data": [
{
"name": "Passport bio page",
"required": true,
"format": [
"pdf",
"jpg"
],
"max_size_mb": 5
},
{
"name": "Bank statement (6 months)",
"required": true
}
]
}{
"error": {
"code": "validation_error",
"message": "One or more request parameters are invalid.",
"request_id": "req_01JD8Z4X2N7Q"
}
}Applications
Submit an application
/visa/v1/applicationsLodges a visa application with a connected processing partner. Upload documents first with the documents endpoint and pass their IDs here.
This operation creates or changes a booking with a supplier. Always send an Idempotency-Key. In production it runs only when a supplier is connected. In the sandbox it is simulated.
Parameters
| Parameter | In | Description |
|---|---|---|
Idempotency-Keystringrequired | header | Unique key (UUID v4) that makes retries safe. Reusing a key returns the original result. Example: 4f9a2c3e-6b1d-4e8a-9c7f-2d5b8e1a0c34 |
destinationstringrequired | body | Destination (ISO2). Example: JP |
visa_typestringrequired | body | Visa type code. Example: tourist_single |
applicantApplicantrequired | body | Applicant identity and passport details. |
document_idsstring[]required | body | IDs of uploaded documents. |
Errors
- 400
validation_errorOne or more request parameters are invalid. - 401
unauthorizedThe API key is missing, revoked or invalid. - 429
rate_limitedToo many requests. Retry after the time given in the Retry-After header. - 422
documents_incompleteRequired documents are missing or invalid. - 502
supplier_unavailableThe upstream supplier did not respond. No booking was created.
curl -X POST "https://sandbox.flightota.com/visa/v1/applications" \
-H "Authorization: Bearer $FLIGHTOTA_API_KEY" \
-H "Idempotency-Key: $(uuidgen)" \
-H "Content-Type: application/json" \
-d '{
"destination": "JP",
"visa_type": "tourist_single",
"applicant": {
"given_name": "Nadia",
"family_name": "Karim",
"nationality": "BD",
"passport_number": "A0•••••21",
"born_on": "1994-02-08"
},
"document_ids": [
"doc_01JDD1",
"doc_01JDD2"
],
"travel_dates": {
"from": "2027-03-02",
"to": "2027-03-12"
}
}'{
"data": {
"reference": "VSA-2026-118204",
"status": "submitted",
"partner": "connected_processor",
"fee_charged": "25.00",
"currency": "USD"
}
}{
"error": {
"code": "validation_error",
"message": "One or more request parameters are invalid.",
"request_id": "req_01JD8Z4X2N7Q"
}
}Applications
Track an application
/visa/v1/applications/{reference}Status timeline of an application lodged through a connected processing partner.
Parameters
| Parameter | In | Description |
|---|---|---|
referencestringrequired | path | Application reference. Example: VSA-2026-118204 |
Errors
- 400
validation_errorOne or more request parameters are invalid. - 401
unauthorizedThe API key is missing, revoked or invalid. - 429
rate_limitedToo many requests. Retry after the time given in the Retry-After header.
curl -X GET "https://sandbox.flightota.com/visa/v1/applications/VSA-2026-118204" \
-H "Authorization: Bearer $FLIGHTOTA_API_KEY"{
"data": {
"reference": "VSA-2026-118204",
"status": "under_review",
"timeline": [
{
"status": "submitted",
"at": "2026-10-30T09:12:00Z"
},
{
"status": "under_review",
"at": "2026-11-01T14:03:00Z"
}
]
}
}{
"error": {
"code": "validation_error",
"message": "One or more request parameters are invalid.",
"request_id": "req_01JD8Z4X2N7Q"
}
}