Skip to content
Visa API

Visa API

Operational

Visa 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

GET/visa/v1/countries/{iso2}

Entry overview for a destination: embassies, currency, passport validity rules.

Parameters

ParameterInDescription
iso2
stringrequired
pathDestination ISO 3166-1 alpha-2 code.
Example: JP

Errors

  • 400validation_errorOne or more request parameters are invalid.
  • 401unauthorizedThe API key is missing, revoked or invalid.
  • 429rate_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"
Response · 200
{
  "data": {
    "iso2": "JP",
    "name": "Japan",
    "passport_validity_months": 0,
    "blank_pages": 1,
    "evisa_available": true
  }
}
Error · 400
{
  "error": {
    "code": "validation_error",
    "message": "One or more request parameters are invalid.",
    "request_id": "req_01JD8Z4X2N7Q"
  }
}

Reference

List visa categories

GET/visa/v1/countries/{iso2}/visa-types

Visa types available for a destination, with fees, validity and length of stay.

Parameters

ParameterInDescription
iso2
stringrequired
pathDestination code.
Example: JP
nationality
stringrequired
queryTraveller nationality (ISO2).
Example: BD

Errors

  • 400validation_errorOne or more request parameters are invalid.
  • 401unauthorizedThe API key is missing, revoked or invalid.
  • 429rate_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"
Response · 200
{
  "data": [
    {
      "code": "tourist_single",
      "name": "Tourist (single entry)",
      "max_stay_days": 90,
      "fee": "25.00",
      "processing_days": {
        "min": 5,
        "max": 7
      }
    }
  ]
}
Error · 400
{
  "error": {
    "code": "validation_error",
    "message": "One or more request parameters are invalid.",
    "request_id": "req_01JD8Z4X2N7Q"
  }
}

Requirements

Check visa requirements

GET/visa/v1/requirements

Whether a visa is required for a nationality, destination and trip purpose.

Parameters

ParameterInDescription
nationality
stringrequired
queryTraveller nationality (ISO2).
Example: BD
destination
stringrequired
queryDestination (ISO2).
Example: JP
purpose
stringoptional
querytourism, business or transit.
Example: tourism

Errors

  • 400validation_errorOne or more request parameters are invalid.
  • 401unauthorizedThe API key is missing, revoked or invalid.
  • 429rate_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"
Response · 200
{
  "data": {
    "requirement": "visa_required",
    "evisa": true,
    "visa_on_arrival": false,
    "notes": [
      "Passport must be valid for the length of stay."
    ]
  }
}
Error · 400
{
  "error": {
    "code": "validation_error",
    "message": "One or more request parameters are invalid.",
    "request_id": "req_01JD8Z4X2N7Q"
  }
}

Requirements

Get document checklist

GET/visa/v1/countries/{iso2}/visa-types/{code}/documents

Required and optional documents, with format and size rules.

Parameters

ParameterInDescription
iso2
stringrequired
pathDestination code.
Example: JP
code
stringrequired
pathVisa type code.
Example: tourist_single

Errors

  • 400validation_errorOne or more request parameters are invalid.
  • 401unauthorizedThe API key is missing, revoked or invalid.
  • 429rate_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"
Response · 200
{
  "data": [
    {
      "name": "Passport bio page",
      "required": true,
      "format": [
        "pdf",
        "jpg"
      ],
      "max_size_mb": 5
    },
    {
      "name": "Bank statement (6 months)",
      "required": true
    }
  ]
}
Error · 400
{
  "error": {
    "code": "validation_error",
    "message": "One or more request parameters are invalid.",
    "request_id": "req_01JD8Z4X2N7Q"
  }
}

Applications

Submit an application

POST/visa/v1/applications

Lodges 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

ParameterInDescription
Idempotency-Key
stringrequired
headerUnique key (UUID v4) that makes retries safe. Reusing a key returns the original result.
Example: 4f9a2c3e-6b1d-4e8a-9c7f-2d5b8e1a0c34
destination
stringrequired
bodyDestination (ISO2).
Example: JP
visa_type
stringrequired
bodyVisa type code.
Example: tourist_single
applicant
Applicantrequired
bodyApplicant identity and passport details.
document_ids
string[]required
bodyIDs of uploaded documents.

Errors

  • 400validation_errorOne or more request parameters are invalid.
  • 401unauthorizedThe API key is missing, revoked or invalid.
  • 429rate_limitedToo many requests. Retry after the time given in the Retry-After header.
  • 422documents_incompleteRequired documents are missing or invalid.
  • 502supplier_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"
  }
}'
Response · 200
{
  "data": {
    "reference": "VSA-2026-118204",
    "status": "submitted",
    "partner": "connected_processor",
    "fee_charged": "25.00",
    "currency": "USD"
  }
}
Error · 400
{
  "error": {
    "code": "validation_error",
    "message": "One or more request parameters are invalid.",
    "request_id": "req_01JD8Z4X2N7Q"
  }
}

Applications

Track an application

GET/visa/v1/applications/{reference}

Status timeline of an application lodged through a connected processing partner.

Parameters

ParameterInDescription
reference
stringrequired
pathApplication reference.
Example: VSA-2026-118204

Errors

  • 400validation_errorOne or more request parameters are invalid.
  • 401unauthorizedThe API key is missing, revoked or invalid.
  • 429rate_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"
Response · 200
{
  "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 · 400
{
  "error": {
    "code": "validation_error",
    "message": "One or more request parameters are invalid.",
    "request_id": "req_01JD8Z4X2N7Q"
  }
}