{"openapi":"3.1.0","info":{"title":"Visa API","version":"v1.0","description":"Tell travellers exactly what they need before they book. The Visa API returns entry rules by nationality and destination, the visa types available, a document checklist, processing times and fees, and the status of applications lodged through a connected visa processor."},"servers":[{"url":"https://api.flightota.com","description":"Production"},{"url":"https://sandbox.flightota.com","description":"Sandbox"}],"security":[{"bearerAuth":[]}],"paths":{"/visa/v1/countries/{iso2}":{"get":{"operationId":"visa-countries","summary":"Get country information","description":"Entry overview for a destination: embassies, currency, passport validity rules.","tags":["Reference"],"parameters":[{"name":"iso2","in":"path","required":true,"description":"Destination ISO 3166-1 alpha-2 code.","schema":{"type":"string"},"example":"JP"}],"responses":{"200":{"description":"Successful response","content":{"application/json":{"example":{"data":{"iso2":"JP","name":"Japan","passport_validity_months":0,"blank_pages":1,"evisa_available":true}}}}},"400":{"description":"validation_error: One or more request parameters are invalid.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"},"examples":{"validation_error":{"value":{"error":{"code":"validation_error","message":"One or more request parameters are invalid."}}}}}}},"401":{"description":"unauthorized: The API key is missing, revoked or invalid.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"},"examples":{"unauthorized":{"value":{"error":{"code":"unauthorized","message":"The API key is missing, revoked or invalid."}}}}}}},"429":{"description":"rate_limited: Too many requests. Retry after the time given in the Retry-After header.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"},"examples":{"rate_limited":{"value":{"error":{"code":"rate_limited","message":"Too many requests. Retry after the time given in the Retry-After header."}}}}}}}}}},"/visa/v1/countries/{iso2}/visa-types":{"get":{"operationId":"visa-types","summary":"List visa categories","description":"Visa types available for a destination, with fees, validity and length of stay.","tags":["Reference"],"parameters":[{"name":"iso2","in":"path","required":true,"description":"Destination code.","schema":{"type":"string"},"example":"JP"},{"name":"nationality","in":"query","required":true,"description":"Traveller nationality (ISO2).","schema":{"type":"string"},"example":"BD"}],"responses":{"200":{"description":"Successful response","content":{"application/json":{"example":{"data":[{"code":"tourist_single","name":"Tourist (single entry)","max_stay_days":90,"fee":"25.00","processing_days":{"min":5,"max":7}}]}}}},"400":{"description":"validation_error: One or more request parameters are invalid.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"},"examples":{"validation_error":{"value":{"error":{"code":"validation_error","message":"One or more request parameters are invalid."}}}}}}},"401":{"description":"unauthorized: The API key is missing, revoked or invalid.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"},"examples":{"unauthorized":{"value":{"error":{"code":"unauthorized","message":"The API key is missing, revoked or invalid."}}}}}}},"429":{"description":"rate_limited: Too many requests. Retry after the time given in the Retry-After header.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"},"examples":{"rate_limited":{"value":{"error":{"code":"rate_limited","message":"Too many requests. Retry after the time given in the Retry-After header."}}}}}}}}}},"/visa/v1/requirements":{"get":{"operationId":"visa-requirements","summary":"Check visa requirements","description":"Whether a visa is required for a nationality, destination and trip purpose.","tags":["Requirements"],"parameters":[{"name":"nationality","in":"query","required":true,"description":"Traveller nationality (ISO2).","schema":{"type":"string"},"example":"BD"},{"name":"destination","in":"query","required":true,"description":"Destination (ISO2).","schema":{"type":"string"},"example":"JP"},{"name":"purpose","in":"query","required":false,"description":"tourism, business or transit.","schema":{"type":"string"},"example":"tourism"}],"responses":{"200":{"description":"Successful response","content":{"application/json":{"example":{"data":{"requirement":"visa_required","evisa":true,"visa_on_arrival":false,"notes":["Passport must be valid for the length of stay."]}}}}},"400":{"description":"validation_error: One or more request parameters are invalid.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"},"examples":{"validation_error":{"value":{"error":{"code":"validation_error","message":"One or more request parameters are invalid."}}}}}}},"401":{"description":"unauthorized: The API key is missing, revoked or invalid.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"},"examples":{"unauthorized":{"value":{"error":{"code":"unauthorized","message":"The API key is missing, revoked or invalid."}}}}}}},"429":{"description":"rate_limited: Too many requests. Retry after the time given in the Retry-After header.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"},"examples":{"rate_limited":{"value":{"error":{"code":"rate_limited","message":"Too many requests. Retry after the time given in the Retry-After header."}}}}}}}}}},"/visa/v1/countries/{iso2}/visa-types/{code}/documents":{"get":{"operationId":"visa-documents","summary":"Get document checklist","description":"Required and optional documents, with format and size rules.","tags":["Requirements"],"parameters":[{"name":"iso2","in":"path","required":true,"description":"Destination code.","schema":{"type":"string"},"example":"JP"},{"name":"code","in":"path","required":true,"description":"Visa type code.","schema":{"type":"string"},"example":"tourist_single"}],"responses":{"200":{"description":"Successful response","content":{"application/json":{"example":{"data":[{"name":"Passport bio page","required":true,"format":["pdf","jpg"],"max_size_mb":5},{"name":"Bank statement (6 months)","required":true}]}}}},"400":{"description":"validation_error: One or more request parameters are invalid.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"},"examples":{"validation_error":{"value":{"error":{"code":"validation_error","message":"One or more request parameters are invalid."}}}}}}},"401":{"description":"unauthorized: The API key is missing, revoked or invalid.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"},"examples":{"unauthorized":{"value":{"error":{"code":"unauthorized","message":"The API key is missing, revoked or invalid."}}}}}}},"429":{"description":"rate_limited: Too many requests. Retry after the time given in the Retry-After header.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"},"examples":{"rate_limited":{"value":{"error":{"code":"rate_limited","message":"Too many requests. Retry after the time given in the Retry-After header."}}}}}}}}}},"/visa/v1/applications":{"post":{"operationId":"visa-submit","summary":"Submit an application","description":"Lodges a visa application with a connected processing partner. Upload documents first with the documents endpoint and pass their IDs here.","tags":["Applications"],"parameters":[{"name":"Idempotency-Key","in":"header","required":true,"description":"Unique key (UUID v4) that makes retries safe. Reusing a key returns the original result.","schema":{"type":"string"},"example":"4f9a2c3e-6b1d-4e8a-9c7f-2d5b8e1a0c34"}],"responses":{"200":{"description":"Successful response","content":{"application/json":{"example":{"data":{"reference":"VSA-2026-118204","status":"submitted","partner":"connected_processor","fee_charged":"25.00","currency":"USD"}}}}},"400":{"description":"validation_error: One or more request parameters are invalid.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"},"examples":{"validation_error":{"value":{"error":{"code":"validation_error","message":"One or more request parameters are invalid."}}}}}}},"401":{"description":"unauthorized: The API key is missing, revoked or invalid.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"},"examples":{"unauthorized":{"value":{"error":{"code":"unauthorized","message":"The API key is missing, revoked or invalid."}}}}}}},"422":{"description":"documents_incomplete: Required documents are missing or invalid.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"},"examples":{"documents_incomplete":{"value":{"error":{"code":"documents_incomplete","message":"Required documents are missing or invalid."}}}}}}},"429":{"description":"rate_limited: Too many requests. Retry after the time given in the Retry-After header.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"},"examples":{"rate_limited":{"value":{"error":{"code":"rate_limited","message":"Too many requests. Retry after the time given in the Retry-After header."}}}}}}},"502":{"description":"supplier_unavailable: The upstream supplier did not respond. No booking was created.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"},"examples":{"supplier_unavailable":{"value":{"error":{"code":"supplier_unavailable","message":"The upstream supplier did not respond. No booking was created."}}}}}}}},"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","required":["destination","visa_type","applicant","document_ids"],"properties":{"destination":{"type":"string","description":"Destination (ISO2)."},"visa_type":{"type":"string","description":"Visa type code."},"applicant":{"type":"object","description":"Applicant identity and passport details."},"document_ids":{"type":"array","items":{},"description":"IDs of uploaded documents."}}},"example":{"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"}}}}}}},"/visa/v1/applications/{reference}":{"get":{"operationId":"visa-tracking","summary":"Track an application","description":"Status timeline of an application lodged through a connected processing partner.","tags":["Applications"],"parameters":[{"name":"reference","in":"path","required":true,"description":"Application reference.","schema":{"type":"string"},"example":"VSA-2026-118204"}],"responses":{"200":{"description":"Successful response","content":{"application/json":{"example":{"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"}]}}}}},"400":{"description":"validation_error: One or more request parameters are invalid.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"},"examples":{"validation_error":{"value":{"error":{"code":"validation_error","message":"One or more request parameters are invalid."}}}}}}},"401":{"description":"unauthorized: The API key is missing, revoked or invalid.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"},"examples":{"unauthorized":{"value":{"error":{"code":"unauthorized","message":"The API key is missing, revoked or invalid."}}}}}}},"429":{"description":"rate_limited: Too many requests. Retry after the time given in the Retry-After header.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"},"examples":{"rate_limited":{"value":{"error":{"code":"rate_limited","message":"Too many requests. Retry after the time given in the Retry-After header."}}}}}}}}}}},"components":{"securitySchemes":{"bearerAuth":{"type":"http","scheme":"bearer","description":"Your API key"}},"schemas":{"Error":{"type":"object","required":["error"],"properties":{"error":{"type":"object","required":["code","message"],"properties":{"code":{"type":"string"},"message":{"type":"string"},"request_id":{"type":"string"}}}}}}}}