Xem trướcREST và JSON, đặc tả dự kiến
API đưa đón sân bay cho đại lý du lịch và OTA
Báo giá, đặt, theo dõi và hủy chuyến đưa đón sân bay qua một REST API, mọi giá đều theo tiền tệ của đại lý bạn. API đang ở bản xem trước: chưa mở cho khóa API, và trang này trình bày đặc tả dự kiến. Hãy cho nhóm API biết bạn định xây dựng gì.
Tài liệu được viết bằng tiếng Anh.
- Trạng thái
- Bản xem trước, chưa mở cho khóa API
- Đặc tả
- 8 endpoint dự kiến
- Giá
- Theo tiền tệ của đại lý bạn
- Mã mẫu
- 9 ngôn ngữ
Xem một chuyến đưa đón được đặt, từng lệnh gọi một
Console phát lại các yêu cầu dự kiến trong cửa sổ của một ứng dụng khách API. Hãy chọn một kịch bản, xem từng yêu cầu được dựng và gửi đi, rồi đọc phản hồi. Không có gì trên trang này gọi tới dịch vụ thật: mọi yêu cầu và phản hồi đều là dữ liệu mẫu mô phỏng, và console chỉ chạy trên Sandbox.
3 yêu cầu: Tìm sân bay, Yêu cầu báo giá, Đặt một báo giá.
Xem trước: đặc tả API này chưa hoạt động. Phiên minh họa: phần body là ví dụ lấy từ tài liệu, ngày được dời về sau để luôn nằm sau hôm nay, và thời gian chỉ mang tính minh họa. Trang này không gửi yêu cầu nào.
Báo giá và đặt chuyến đưa đón sân bay
Xem trước
Tìm sân bay đến, yêu cầu báo giá và đặt một báo giá. Yêu cầu báo giá trả về một mã báo giá cho mỗi loại xe, và đơn đặt dùng mã đó.
Tìm sân bay
Gõ ít nhất ba ký tự và endpoint sẽ gợi ý các sân bay, mỗi sân bay kèm mã IATA. Yêu cầu báo giá gọi tên sân bay bằng mã đó.
Yêu cầu GET /transfers/locations curl 'https://api.fx-port.com/api/v1/transfers/locations?query=ams&types=airport&limit=5' \ -H "Authorization: Bearer fxp_test_YOUR_KEY"Phản hồi 200 OK · 140 ms · 272 B 200 OK Content-Type: application/json Cache-Control: private, no-store X-Environment: sandbox { "environment": "sandbox", "success": true, "data": { "locations": [ { "location_id": "apt:AMS", "type": "airport", "iata_code": "AMS", "place_id": null, "name": "Amsterdam Airport Schiphol", "description": null, "city": "Amsterdam", "country_code": "NL", "latitude": 52.3105, "longitude": 4.7683 } ] } }- PASS Mã trạng thái là 200
- PASS $.data.locations[0].iata_code bằng AMS
- PASS $.data.locations[0].location_id tồn tại
Yêu cầu báo giá
Gửi điểm đón, điểm trả, giờ đón địa phương và hành khách. Phản hồi chứa một báo giá cho mỗi loại xe, mỗi báo giá có mã riêng, giá theo tiền tệ đại lý của bạn và thời hạn.
Yêu cầu POST /transfers/quotes curl https://api.fx-port.com/api/v1/transfers/quotes \ -H "Authorization: Bearer fxp_test_YOUR_KEY" \ -H "Content-Type: application/json" \ -d '{ "pickup": { "type": "airport", "iata_code": "AMS" }, "dropoff": { "type": "point", "latitude": 52.3676, "longitude": 4.9041, "name": "Amsterdam City Centre" }, "pickup_datetime": "2027-06-23T14:30", "passengers": { "adults": 2, "children": 0, "infants": 0 } }'Phản hồi 200 OK · 820 ms · 655 B 200 OK Content-Type: application/json Cache-Control: private, no-store X-Environment: sandbox { "environment": "sandbox", "success": true, "data": { "search_id": "tsr_01JC5T9ZK4Y2Q8M3V7N6B1A0XD", "distance_km": 20, "currency": "DZD", "expires_at": "2026-11-09T10:13:12Z", "quotes": [ { "quote_id": "tq_01JC5T9ZK4Y2Q8M3V7N6B1A0XE", "vehicle": { "make": "Toyota", "model": "Corolla", "type": "Sedan", "image_url": null, "max_passengers": 4, "suitcases": 2, "small_bags": 2 }, "operator": { "name": "Sandbox Transfers" }, "price": { "currency": "DZD", "total_price": 17823.33, "b2b_price": 17823.33, "agency_commission": 0 }, "extras": [], "cancellation": { "free_cancellation": true, "hours_before_pickup": 24, "source": "platform_default" }, "expires_at": "2026-11-09T10:13:12Z" } ], "meta": { "no_availability": false } } }- PASS Mã trạng thái là 200
- PASS $.data.quotes có 1 phần tử
- PASS $.data.currency bằng DZD
Đặt một báo giá
Gửi mã báo giá cùng hành khách chính và số hiệu chuyến bay. Đơn đặt ở trạng thái đang chờ trong lúc nhà cung cấp xác nhận. Cần khóa đọc + ghi.
Yêu cầu POST /transfers/bookings curl https://api.fx-port.com/api/v1/transfers/bookings \ -H "Authorization: Bearer fxp_test_YOUR_KEY" \ -H "Content-Type: application/json" \ -d '{ "quote_id": "tq_01JC5T9ZK4Y2Q8M3V7N6B1A0XE", "passenger": { "first_name": "Jane", "last_name": "Doe", "email": "[email protected]", "phone": "+31612345678" }, "flight_number": "KL1234", "notes": "Arrival terminal 2", "luggage": { "suitcases": 1, "small_bags": 0 } }'Phản hồi 200 OK · 760 ms · 1.3 KB 200 OK Content-Type: application/json Cache-Control: private, no-store X-Environment: sandbox { "environment": "sandbox", "success": true, "data": { "idempotent_replay": false, "booking": { "id": "5b5b0e1c-6f7a-4c2d-9a53-0d2d4a0f9c11", "booking_id": "SBX-0000000001-AAB", "reference": "FXT-5B5B0E1C6F7A", "status": "pending", "state_detail": "awaiting_supplier_approval", "supplier_status": "PENDING_APPROVAL", "environment": "sandbox", "simulated": true, "pickup": { "type": "airport", "name": "Amsterdam Airport Schiphol", "iata_code": "AMS" }, "dropoff": { "type": "point", "name": "Amsterdam City Centre", "latitude": 52.3676, "longitude": 4.9041 }, "pickup_datetime": "2027-06-23T14:30", "flight_number": "KL1234", "notes": "Arrival terminal 2", "passengers": { "adults": 2, "children": 0, "infants": 0 }, "lead_passenger": { "first_name": "Jane", "last_name": "Doe", "email": "[email protected]", "phone": "+31612345678" }, "luggage": { "suitcases": 1, "small_bags": 0 }, "vehicle": { "make": "Toyota", "model": "Corolla", "type": "Sedan", "image_url": null, "max_passengers": 4 }, "operator": { "name": "Sandbox Transfers" }, "driver": null, "price": { "currency": "DZD", "total_price": 17823.33, "b2b_price": 17823.33, "agency_commission": 0 }, "refund": null, "documents": { "receipt_url": null, "voucher_url": null }, "is_cancelable": true, "can_cancel": true, "trip_group_id": null, "quote_id": "tq_01JC5T9ZK4Y2Q8M3V7N6B1A0XE", "status_updated_at": "2026-11-09T10:02:05Z", "created_at": "2026-11-09T10:02:05Z", "warnings": [] } } }- PASS Mã trạng thái là 200
- PASS $.data.booking.status bằng pending
- PASS $.data.booking.simulated bằng true
- PASS $.data.booking.reference tồn tại
Theo dõi đơn đặt đến khi được xác nhận
Xem trước
Đọc một đơn đặt mới, đọc lại sau đó và hủy đơn. Mỗi phản hồi cho biết khi nào nên hỏi lại, và Sandbox xác nhận đơn đặt sau một lúc chờ ngắn.
Đọc một đơn đặt mới
Đơn đặt mới đang chờ và chưa có tài xế. Phản hồi cho biết sau bao nhiêu giây nên hỏi lại.
Yêu cầu GET /transfers/bookings/{booking_id} curl https://api.fx-port.com/api/v1/transfers/bookings/5b5b0e1c-6f7a-4c2d-9a53-0d2d4a0f9c11 \ -H "Authorization: Bearer fxp_test_YOUR_KEY"Phản hồi 200 OK · 190 ms · 1.4 KB 200 OK { "environment": "sandbox", "success": true, "data": { "booking": { "id": "5b5b0e1c-6f7a-4c2d-9a53-0d2d4a0f9c11", "booking_id": "SBX-0000000001-AAB", "reference": "FXT-5B5B0E1C6F7A", "status": "pending", "state_detail": "awaiting_supplier_approval", "supplier_status": "PENDING_APPROVAL", "environment": "sandbox", "simulated": true, // ... 2 more "pickup_datetime": "2027-06-23T14:30", "flight_number": "KL1234", "notes": "Arrival terminal 2", // ... 16 more } }, "meta": { "next_poll_after_seconds": 120 } }- PASS Mã trạng thái là 200
- PASS $.data.booking.status bằng pending
- PASS $.meta.next_poll_after_seconds bằng 120
Đọc lại sau đó
Một lúc sau, cùng lệnh đọc cho thấy đơn đặt đã xác nhận, kèm tài xế khi đã được phân công.
Yêu cầu GET /transfers/bookings/{booking_id} curl https://api.fx-port.com/api/v1/transfers/bookings/5b5b0e1c-6f7a-4c2d-9a53-0d2d4a0f9c11 \ -H "Authorization: Bearer fxp_test_YOUR_KEY"Phản hồi 200 OK · 170 ms · 1.6 KB 200 OK { "environment": "sandbox", "success": true, "data": { "booking": { "id": "5b5b0e1c-6f7a-4c2d-9a53-0d2d4a0f9c11", "booking_id": "SBX-0000000001-AAB", "reference": "FXT-5B5B0E1C6F7A", "status": "confirmed", "state_detail": "confirmed", "supplier_status": "APPROVED", "environment": "sandbox", // ... 11 more "driver": { "name": "Simulated Driver", // ... 4 more }, // ... 10 more } }, "meta": { "next_poll_after_seconds": 21600 } }- PASS Mã trạng thái là 200
- PASS $.data.booking.status bằng confirmed
- PASS $.data.booking.driver.name tồn tại
- PASS $.meta.next_poll_after_seconds bằng 21600
Hủy kèm lý do
Hủy với mã của một lý do. Sandbox phản hồi đơn đặt đã hoàn tiền, và không có tiền nào di chuyển vì chưa trừ khoản nào.
Yêu cầu POST /transfers/bookings/{booking_id}/cancel curl https://api.fx-port.com/api/v1/transfers/bookings/5b5b0e1c-6f7a-4c2d-9a53-0d2d4a0f9c11/cancel \ -H "Authorization: Bearer fxp_test_YOUR_KEY" \ -H "Content-Type: application/json" \ -d '{ "reason_id": 6, "note": "customer request" }'Phản hồi 200 OK · 520 ms · 1.4 KB 200 OK { "environment": "sandbox", "success": true, "data": { "booking": { "id": "5b5b0e1c-6f7a-4c2d-9a53-0d2d4a0f9c11", "booking_id": "SBX-0000000001-AAB", "reference": "FXT-5B5B0E1C6F7A", "status": "refunded", "state_detail": "completed", "supplier_status": "REFUNDED", "environment": "sandbox", "simulated": true, // ... 2 more "pickup_datetime": "2027-06-23T14:30", "flight_number": "KL1234", // ... 17 more }, "refund": { // ... 4 more "status": "not_applicable" } } }- PASS Mã trạng thái là 200
- PASS $.data.booking.status bằng refunded
- PASS $.data.refund.status bằng not_applicable
Xử lý khi giá thay đổi
Xem trước
Số hiệu chuyến bay PRICEUP khiến Sandbox tăng giá giữa lúc báo giá và lúc đặt. API từ chối đặt với giá cao hơn cho đến khi bạn yêu cầu báo giá mới.
Yêu cầu báo giá
Báo giá giữ một mức giá cho chuyến đi. Hãy lưu mã báo giá và tổng tiền.
Yêu cầu POST /transfers/quotes curl https://api.fx-port.com/api/v1/transfers/quotes \ -H "Authorization: Bearer fxp_test_YOUR_KEY" \ -H "Content-Type: application/json" \ -d '{ "pickup": { "type": "airport", "iata_code": "AMS" }, "dropoff": { "type": "point", "latitude": 52.3676, "longitude": 4.9041, "name": "Amsterdam City Centre" }, "pickup_datetime": "2027-06-23T14:30", "passengers": { "adults": 2, "children": 0, "infants": 0 } }'Phản hồi 200 OK · 820 ms · 655 B 200 OK { "environment": "sandbox", "success": true, "data": { "search_id": "tsr_01JC5T9ZK4Y2Q8M3V7N6B1A0XD", "distance_km": 20, "currency": "DZD", "expires_at": "2026-11-09T10:13:12Z", "quotes": [ { "quote_id": "tq_01JC5T9ZK4Y2Q8M3V7N6B1A0XE", // ... 2 more "price": { "currency": "DZD", "total_price": 17823.33, // ... 2 more }, "extras": [], // ... 2 more } ], // ... 1 more } }- PASS Mã trạng thái là 200
- PASS $.data.quotes[0].price.total_price bằng 17823.33
Đặt, và giá đã thay đổi
Sandbox tăng giá khi số hiệu chuyến bay là
PRICEUP. API trả về409vớiprice_changed, tổng tiền trước đó và tổng tiền hiện tại. Không có gì được đặt.Yêu cầu POST /transfers/bookings curl https://api.fx-port.com/api/v1/transfers/bookings \ -H "Authorization: Bearer fxp_test_YOUR_KEY" \ -H "Content-Type: application/json" \ -d '{ "quote_id": "tq_01JC5T9ZK4Y2Q8M3V7N6B1A0XE", "passenger": { "first_name": "Jane", "last_name": "Doe", "email": "[email protected]", "phone": "+31612345678" }, "flight_number": "PRICEUP", "notes": "Arrival terminal 2", "luggage": { "suitcases": 1, "small_bags": 0 } }'Phản hồi 409 Conflict · 410 ms · 482 B 409 Conflict { "environment": "sandbox", "success": false, "errors": [ { "code": "price_changed", "type": "conflict", "title": "Price changed", "message": "The price changed since the quote was issued. Request a new quote and confirm the new price.", "field": null, "details": { "previous_total_price": 17823.33, "current_total_price": 18715.1, "currency": "DZD" }, "documentation_url": "https://fx-port.com/docs/errors#price_changed" } ], "meta": { "request_id": "req_3c1f9a7be204", "status": 409 }, "request_id": "req_3c1f9a7be204" }- PASS Mã trạng thái là 409
- PASS Mã lỗi là price_changed
- PASS $.errors[0].details.previous_total_price bằng 17823.33
- PASS $.errors[0].details.current_total_price bằng 18715.1
Yêu cầu báo giá mới
Báo giá lại cùng chuyến đi. Báo giá mới có mã mới và mức giá cao hơn, giờ đây du khách có thể chấp nhận hoặc từ chối.
Yêu cầu POST /transfers/quotes curl https://api.fx-port.com/api/v1/transfers/quotes \ -H "Authorization: Bearer fxp_test_YOUR_KEY" \ -H "Content-Type: application/json" \ -d '{ "pickup": { "type": "airport", "iata_code": "AMS" }, "dropoff": { "type": "point", "latitude": 52.3676, "longitude": 4.9041, "name": "Amsterdam City Centre" }, "pickup_datetime": "2027-06-23T14:30", "passengers": { "adults": 2, "children": 0, "infants": 0 } }'Phản hồi 200 OK · 790 ms · 653 B 200 OK { "environment": "sandbox", "success": true, "data": { "search_id": "tsr_01JC5TA2M7R9W4X6Z8B3C5D7F1", "distance_km": 20, "currency": "DZD", "expires_at": "2026-11-09T10:15:31Z", "quotes": [ { "quote_id": "tq_01JC5TA2M7R9W4X6Z8B3C5D7F2", // ... 2 more "price": { "currency": "DZD", "total_price": 18715.1, // ... 2 more }, "extras": [], // ... 2 more } ], // ... 1 more } }- PASS Mã trạng thái là 200
- PASS $.data.quotes[0].price.total_price bằng 18715.1
Đặt báo giá mới
Đặt với mã báo giá mới. Giá lúc này khớp, và đơn đặt được tạo.
Yêu cầu POST /transfers/bookings curl https://api.fx-port.com/api/v1/transfers/bookings \ -H "Authorization: Bearer fxp_test_YOUR_KEY" \ -H "Content-Type: application/json" \ -d '{ "quote_id": "tq_01JC5TA2M7R9W4X6Z8B3C5D7F2", "passenger": { "first_name": "Jane", "last_name": "Doe", "email": "[email protected]", "phone": "+31612345678" }, "flight_number": "PRICEUP", "notes": "Arrival terminal 2", "luggage": { "suitcases": 1, "small_bags": 0 } }'Phản hồi 200 OK · 740 ms · 1.3 KB 200 OK { "environment": "sandbox", "success": true, "data": { "idempotent_replay": false, "booking": { "id": "5b5b0e1c-6f7a-4c2d-9a53-0d2d4a0f9c11", "booking_id": "SBX-0000000001-AAB", "reference": "FXT-5B5B0E1C6F7A", "status": "pending", "state_detail": "awaiting_supplier_approval", "supplier_status": "PENDING_APPROVAL", "environment": "sandbox", "simulated": true, // ... 2 more "pickup_datetime": "2027-06-23T14:30", "flight_number": "PRICEUP", "notes": "Arrival terminal 2", // ... 5 more "driver": null, // ... 10 more } } }- PASS Mã trạng thái là 200
- PASS $.data.booking.status bằng pending
- PASS $.data.booking.price.total_price bằng 18715.1
Khắc phục khi mất phản hồi
Xem trước
Họ Timeout khiến Sandbox làm mất phản hồi của một đơn đặt. Bạn khắc phục bằng cách đọc đơn đặt, không bao giờ đặt lại.
Phản hồi bị mất
Sandbox làm mất phản hồi khi họ là
Timeout. API trả về202: đơn đặt đang chờ, trạng thái làreconciling, và thông báo nói không được đặt lại.Yêu cầu POST /transfers/bookings curl https://api.fx-port.com/api/v1/transfers/bookings \ -H "Authorization: Bearer fxp_test_YOUR_KEY" \ -H "Content-Type: application/json" \ -d '{ "quote_id": "tq_01JC5T9ZK4Y2Q8M3V7N6B1A0XE", "passenger": { "first_name": "Jane", "last_name": "Timeout", "email": "[email protected]", "phone": "+31612345678" }, "flight_number": "KL1234", "notes": "Arrival terminal 2", "luggage": { "suitcases": 1, "small_bags": 0 } }'Phản hồi 202 Accepted · 880 ms · 441 B 202 Accepted { "environment": "sandbox", "success": true, "data": { "booking": { "id": "5b5b0e1c-6f7a-4c2d-9a53-0d2d4a0f9c11", "booking_id": null, "reference": "FXT-5B5B0E1C6F7A", "status": "pending", "state_detail": "reconciling", "quote_id": "tq_01JC5T9ZK4Y2Q8M3V7N6B1A0XE" }, "message": "We could not confirm this booking with the transport network yet. Your balance is reserved. Do not book again; poll GET /api/v1/transfers/bookings/5b5b0e1c-6f7a-4c2d-9a53-0d2d4a0f9c11" } }- PASS Mã trạng thái là 202
- PASS $.data.booking.state_detail bằng reconciling
- PASS $.data.booking.booking_id bằng null
Tìm đơn đặt
Liệt kê đơn đặt với mã báo giá làm bộ lọc. Danh sách trả về đơn đặt mà phản hồi bị mất thuộc về, nên không có lý do để đặt lại.
Yêu cầu GET /transfers/bookings curl 'https://api.fx-port.com/api/v1/transfers/bookings?quote_id=tq_01JC5T9ZK4Y2Q8M3V7N6B1A0XE' \ -H "Authorization: Bearer fxp_test_YOUR_KEY"Phản hồi 200 OK · 230 ms · 1.3 KB 200 OK { "environment": "sandbox", "success": true, "data": { "bookings": [ { "id": "5b5b0e1c-6f7a-4c2d-9a53-0d2d4a0f9c11", "booking_id": null, "reference": "FXT-5B5B0E1C6F7A", // ... 25 more } ] }, "pagination": { "page": 1, "limit": 50, "total": 1, "total_pages": 1, "has_more": false }, "meta": { "as_of": "2026-11-09T10:03:40Z" } }- PASS Mã trạng thái là 200
- PASS $.pagination.total bằng 1
- PASS $.data.bookings[0].state_detail bằng reconciling
Đặt lại quá sớm
Gửi lại cùng đơn đặt khi đơn đầu vẫn đang xử lý sẽ bị từ chối với
409vàbooking_in_progress, kèm headerRetry-After. Hãy đọc đơn đặt thay vì đặt lại.Yêu cầu POST /transfers/bookings curl https://api.fx-port.com/api/v1/transfers/bookings \ -H "Authorization: Bearer fxp_test_YOUR_KEY" \ -H "Content-Type: application/json" \ -d '{ "quote_id": "tq_01JC5T9ZK4Y2Q8M3V7N6B1A0XE", "passenger": { "first_name": "Jane", "last_name": "Timeout", "email": "[email protected]", "phone": "+31612345678" }, "flight_number": "KL1234", "notes": "Arrival terminal 2", "luggage": { "suitcases": 1, "small_bags": 0 } }'Phản hồi 409 Conflict · 150 ms · 423 B 409 Conflict Retry-After: 3 { "environment": "sandbox", "success": false, "errors": [ { "code": "booking_in_progress", "type": "conflict", "title": "Booking in progress", "message": "This quote is already being booked. Wait a few seconds, then read the booking.", "field": null, "details": { "retry_after": 3 }, "documentation_url": "https://fx-port.com/docs/errors#booking_in_progress" } ], "meta": { "request_id": "req_8a47d05e91bc", "status": 409 }, "request_id": "req_8a47d05e91bc" }- PASS Mã trạng thái là 409
- PASS Mã lỗi là booking_in_progress
- PASS Có header Retry-After
Hủy đơn, và điều gì chặn việc hủy
Xem trước
Đọc các lý do hủy, tạo một đơn đặt với số hiệu chuyến bay NOCANCEL và xem API từ chối hủy đơn đó.
Liệt kê các lý do
Các lý do được trả về dưới dạng danh sách mã và tên. Bạn gửi mã của một lý do cùng lệnh hủy.
Yêu cầu GET /transfers/cancellation-reasons curl https://api.fx-port.com/api/v1/transfers/cancellation-reasons \ -H "Authorization: Bearer fxp_test_YOUR_KEY"Phản hồi 200 OK · 120 ms · 487 B 200 OK { "environment": "sandbox", "success": true, "data": { "source": "supplier", "reasons": [ { "id": 1, "name": "Flight cancelled", // ... 2 more }, { // ... 4 more }, { // ... 4 more }, { // ... 4 more }, // ... 2 more ] } }- PASS Mã trạng thái là 200
- PASS $.data.reasons có 6 phần tử
- PASS $.data.reasons[5].name bằng Other
Tạo đơn đặt
Sandbox tạo một đơn đặt không thể hủy khi số hiệu chuyến bay là
NOCANCEL. Đơn đặt cho biết điều này ở trườngcan_cancel.Yêu cầu POST /transfers/bookings curl https://api.fx-port.com/api/v1/transfers/bookings \ -H "Authorization: Bearer fxp_test_YOUR_KEY" \ -H "Content-Type: application/json" \ -d '{ "quote_id": "tq_01JC5T9ZK4Y2Q8M3V7N6B1A0XE", "passenger": { "first_name": "Jane", "last_name": "Doe", "email": "[email protected]", "phone": "+31612345678" }, "flight_number": "NOCANCEL", "notes": "Arrival terminal 2", "luggage": { "suitcases": 1, "small_bags": 0 } }'Phản hồi 200 OK · 770 ms · 1.3 KB 200 OK { "environment": "sandbox", "success": true, "data": { "idempotent_replay": false, "booking": { "id": "5b5b0e1c-6f7a-4c2d-9a53-0d2d4a0f9c11", "booking_id": "SBX-0000000001-AAB", "reference": "FXT-5B5B0E1C6F7A", "status": "pending", "state_detail": "awaiting_supplier_approval", "supplier_status": "PENDING_APPROVAL", "environment": "sandbox", "simulated": true, // ... 2 more "pickup_datetime": "2027-06-23T14:30", "flight_number": "NOCANCEL", "notes": "Arrival terminal 2", // ... 10 more "can_cancel": false, // ... 5 more } } }- PASS Mã trạng thái là 200
- PASS $.data.booking.can_cancel bằng false
- PASS $.data.booking.is_cancelable bằng false
Thử hủy đơn
Việc hủy bị từ chối với
409vàcancellation_not_allowed, và phần chi tiết nêu lý do. Đơn đặt có thể hủy sẽ phản hồi kèm khoản hoàn tiền.Yêu cầu POST /transfers/bookings/{booking_id}/cancel curl https://api.fx-port.com/api/v1/transfers/bookings/5b5b0e1c-6f7a-4c2d-9a53-0d2d4a0f9c11/cancel \ -H "Authorization: Bearer fxp_test_YOUR_KEY" \ -H "Content-Type: application/json" \ -d '{ "reason_id": 6, "note": "customer request" }'Phản hồi 409 Conflict · 260 ms · 403 B 409 Conflict { "environment": "sandbox", "success": false, "errors": [ { "code": "cancellation_not_allowed", "type": "conflict", "title": "Cancellation not allowed", "message": "This booking cannot be cancelled.", "field": null, "details": { "reason": "not_cancelable" }, "documentation_url": "https://fx-port.com/docs/errors#cancellation_not_allowed" } ], "meta": { "request_id": "req_d2e60b3f7a18", "status": 409 }, "request_id": "req_d2e60b3f7a18" }- PASS Mã trạng thái là 409
- PASS Mã lỗi là cancellation_not_allowed
- PASS $.errors[0].details.reason bằng not_cancelable
Số tiền, mã định danh, tên, ngày và thời gian trong các ví dụ này chỉ mang tính minh họa, và đơn vị vận hành trong đó là đơn vị Sandbox hư cấu.
Các endpoint dự kiến và khóa mà mỗi endpoint cần
API đưa đón dự kiến có 8 endpoint. Các endpoint đang ở bản xem trước nên chưa có endpoint nào liên kết tới trang tham chiếu.
| Endpoint | Chức năng | Khóa |
|---|---|---|
GET /api/v1/transfers/locationsXem trước | Gợi ý sân bay khi người dùng gõ, mỗi sân bay kèm mã IATA, thành phố, quốc gia và tọa độ. | Đọc |
POST /api/v1/transfers/quotesXem trước | Định giá một chuyến đưa đón một chiều cho đại lý của bạn: mỗi loại xe một báo giá, mỗi báo giá có mã và hạn riêng. | Đọc |
GET /api/v1/transfers/quotes/{quote_id}Xem trước | Đọc lại một báo giá đang được giữ: giá, hạn và trạng thái. | Đọc |
POST /api/v1/transfers/bookingsXem trước | Đặt một báo giá. Đơn đặt thường bắt đầu ở trạng thái đang chờ cho đến khi nhà cung cấp xác nhận. | Đọc + ghi |
GET /api/v1/transfers/bookingsXem trước | Liệt kê đơn đặt của bạn, lọc theo trạng thái, ngày, báo giá hoặc nhóm chuyến, theo các trang không bị lệch. | Đọc |
GET /api/v1/transfers/bookings/{booking_id}Xem trước | Đọc một đơn đặt theo mã định danh, mã tham chiếu hoặc số đặt chỗ: trạng thái, tài xế, chứng từ và thời điểm nên hỏi lại. | Đọc |
POST /api/v1/transfers/bookings/{booking_id}/cancelXem trước | Hủy đơn đặt kèm lý do. Phản hồi cho biết khoản hoàn tiền đã xong hay vẫn đang chờ. | Đọc + ghi |
GET /api/v1/transfers/cancellation-reasonsXem trước | Liệt kê các lý do bạn có thể nêu khi hủy đơn đặt. | Đọc |
Mọi endpoint dự kiến đều nằm dưới Base URL chung của các API FX-Port là https://api.fx-port.com/api/v1, trong đường dẫn bắt đầu bằng /transfers.
Yêu cầu báo giá
Yêu cầu báo giá nêu điểm đón, điểm trả, giờ đón và hành khách. Một trong hai đầu phải là sân bay, ghi bằng mã IATA ba chữ cái. Hãy ghi giờ đón theo giờ địa phương tại điểm đón, không kèm múi giờ: giờ có độ lệch hoặc có
Zsẽ bị từ chối. Trẻ sơ sinh được tính vào sức chứa của xe.Tạo đơn đặt
Một đơn đặt cần một
quote_id, tên, email và số điện thoại (định dạng quốc tế) của hành khách chính, cùng số hiệu chuyến bay. Bạn có thể thêm ghi chú, số hành lý, mã tham chiếu riêng và nhóm chuyến. Giá luôn lấy từ báo giá: giá gửi trong yêu cầu sẽ bị bỏ qua.
Như các API khác của FX-Port, khóa được đặt trong header Authorization dưới dạng bearer token. Khóa chỉ đọc có thể tra cứu địa điểm, yêu cầu báo giá, đọc đơn đặt và lý do hủy. Tạo đơn đặt và hủy đơn cần khóa đọc + ghi. Giới hạn tốc độ cho dịch vụ đưa đón chưa được công bố.
Thiết kế để một chuyến đưa đón không bị đặt hai lần
Đặt chuyến liên quan đến tiền, nên đặc tả dự kiến xoay quanh những tình huống dễ sai: phản hồi bị mất, giá thay đổi và gửi lại yêu cầu. Ba quy tắc xử lý các tình huống này.
Một báo giá, một đơn đặt
Mỗi báo giá có
quote_idriêng, và máy chủ giữ giá của báo giá trong 15 phút. Một đơn đặt chỉ dùng đúng một báo giá, và chính báo giá đó ngăn đơn bị đặt hai lần, nên không có khóa idempotency. Sau khi lệnh gọi đặt đầu tiên hoàn tất, gửi lại cùng đơn đặt sẽ trả về đơn đã lưu, được đánh dấuidempotent_replay. Gửi nội dung khác cho cùng một báo giá sẽ bị từ chối.Phản hồi không rõ không phải lý do để đặt lại
Khi nhà cung cấp không xác nhận kịp, API trả về
202với đơn đang chờ và trạng tháireconciling. Hãy coi đó là một đơn có thể đã tồn tại. Đừng đặt lại: hãy đọc đơn đặt với mã báo giá làm bộ lọc, rồi đọc lại định kỳ cho đến khi đơn được xác nhận hoặc thất bại. Điều này cũng áp dụng khi yêu cầu bị quá thời gian phía bạn.Giá thay đổi sẽ được báo, không bị tính tiền
Ngay trước khi đặt, giá được kiểm tra lại với nhà cung cấp. Nếu giá đã tăng so với báo giá, sẽ không có gì được đặt và API trả về
409vớiprice_changed, tổng tiền trước đó và tổng tiền hiện tại. Hãy cho du khách xem giá mới, yêu cầu báo giá mới rồi đặt báo giá đó.
| Phản hồi | Ý nghĩa | Việc cần làm |
|---|---|---|
200 idempotent_replay | Cùng báo giá và cùng nội dung này đã được đặt trước đó. | Dùng đơn đặt nhận về. Không có đơn mới nào được tạo. |
202 booking_pending_confirmation | Kết quả chưa rõ và số dư đang bị giữ. | Không bao giờ đặt lại. Đọc đơn đặt theo mã báo giá, rồi đọc lại định kỳ. |
409 booking_in_progress | Cùng báo giá này vẫn đang được đặt. | Chờ theo thời gian ghi trong header Retry-After, rồi đọc đơn đặt. |
409 duplicate_booking | Báo giá đã được đặt trước đó với thông tin khác. | Đừng thử lại. Hãy đọc đơn đặt hiện có. |
409 price_changed | Giá đã tăng so với báo giá. | Hiển thị giá mới, yêu cầu báo giá mới rồi đặt báo giá đó. |
409 quote_expired, vehicle_unavailable | Báo giá không tồn tại, đã hết hạn hoặc đã dùng, hoặc loại xe của báo giá không còn được cung cấp. | Yêu cầu báo giá mới. |
503 supplier_busy | Nhà cung cấp đang bận. Chưa có gì được đặt. | Gửi lại cùng yêu cầu sau khoảng thời gian Retry-After. |
402 insufficient_balance | Số dư đại lý không đủ để thanh toán đơn đặt. | Nạp tiền vào số dư, rồi đặt lại. |
Kiểm thử mọi nhánh trong Sandbox
Sandbox dự kiến là một trình mô phỏng. Những gì bạn gửi quyết định điều xảy ra, nên mọi nhánh của một đơn đặt đều kiểm thử được mà không cần nhà cung cấp thật và không di chuyển tiền.
Cách nhận biết đơn đặt trên Sandbox
Đơn đặt trên Sandbox được đánh dấu
simulatedvà có số đặt chỗ bắt đầu bằngSBX-. Không trừ số dư nào, và không có gì được gửi tới nhà cung cấp thật.Sân bay và loại xe
Sandbox có sẵn một tập cố định gồm 25 sân bay. Sân bay ngoài tập này bị từ chối vì mã sân bay không hợp lệ. Loại xe, đơn vị vận hành và giá đều là dữ liệu mẫu. Giờ đón rất gần hiện tại sẽ không có báo giá nào, còn giờ đón muộn hơn một chút sẽ có ít loại xe hơn.
| Trường | Giá trị | Điều xảy ra |
|---|---|---|
passenger.last_name | Pending | Đơn đặt ở trạng thái đang chờ rất lâu, để bạn kiểm thử việc hủy đơn đang chờ và đọc lại định kỳ lâu hơn. |
passenger.last_name | Declined | Đơn vị vận hành từ chối ngay sau khi đặt, và đơn đặt kết thúc ở trạng thái thất bại. |
passenger.last_name | Rejected | Đơn đặt bị từ chối ngay với 422 và supplier_rejected. |
passenger.last_name | Timeout | Phản hồi của lệnh đặt bị mất: 202 với trạng thái reconciling. Đơn đặt tự xác nhận sau đó một lúc. |
passenger.last_name | Cancelled | Đơn vị vận hành hủy không lâu sau khi đặt, và đơn đặt kết thúc ở trạng thái đã hủy. |
flight_number | NOCANCEL | Đơn đặt không thể hủy: lệnh hủy trả về 409 với cancellation_not_allowed. |
flight_number | PRICEUP | Giá tăng giữa lúc báo giá và lúc đặt: 409 với price_changed. |
notes | [sim:slow] | Lệnh đặt được phản hồi chậm, để bạn kiểm thử thời gian chờ của ứng dụng khách. |
notes | [sim:busy] | Lệnh đặt thất bại với 503 và supplier_busy, kèm header Retry-After, để bạn kiểm thử cơ chế thử lại có giãn cách. |
Không có webhook: đọc lại định kỳ đơn đặt để theo dõi
Trong đặc tả dự kiến, FX-Port không gọi tới một URL của bạn khi đơn đặt thay đổi. Bạn đọc đơn đặt, và mỗi phản hồi cho biết khi nào nên hỏi lại.
Hỏi lại khi phản hồi cho biết
Mỗi lần đọc đơn đặt đều kèm meta.next_poll_after_seconds, là số giây sau đó nên hỏi lại, hoặc null khi đơn đã kết thúc. Hỏi sớm hơn chỉ nhận lại cùng phản hồi.
| Khi nào | Thời gian chờ |
|---|---|
| Khi đơn đặt đang chờ, bất kể giờ đón | 120 |
| Giờ đón còn dưới 48 giờ | 900 |
| Giờ đón còn từ 48 giờ đến một tuần | 3600 |
| Giờ đón còn hơn một tuần | 21600 |
| Đơn đặt đã kết thúc: ngừng đọc lại định kỳ | null |
| Trạng thái | Chi tiết | Ý nghĩa |
|---|---|---|
pending | awaiting_supplier_approval | Đơn đặt đã tồn tại, nhưng nhà cung cấp chưa chấp thuận. Vẫn có thể hủy. |
pending | reconciling | Kết quả chưa rõ và số dư đang bị giữ. Chưa thể hủy, và bạn không được đặt lại. |
confirmed | confirmed | Nhà cung cấp đã chấp thuận đơn đặt. Có thể chưa phân công tài xế. |
confirmed | completed | Chuyến đi đã xong. Bạn có thể ngừng đọc lại định kỳ. |
cancelled | refund_pending | Đã hủy với nhà cung cấp, nhưng số dư chưa được hoàn lại. |
refunded | completed | Đã hủy và hoàn lại đầy đủ vào số dư. |
partial_refund | completed | Đã hủy, và một phần số tiền đã được hoàn lại. |
failed | declined, failed | Đơn đặt chưa từng được xác nhận, và số tiền bị giữ đã được trả lại. |
Tài xế và chứng từ
Khối tài xế để trống cho đến khi đơn vị vận hành phân công tài xế, nên hãy tiếp tục đọc lại định kỳ khi giờ đón đến gần. Khi đã có tài xế, khối này chứa tên, số điện thoại, biển số và hãng xe. Liên kết biên nhận xuất hiện ngay sau khi đặt, và liên kết voucher xuất hiện khi đã phân công tài xế.
Đọc từ nhà cung cấp ngay
Thêm
refresh=trueđể đọc trạng thái từ nhà cung cấp thay vì từ bản ghi riêng của FX-Port. Mỗi đơn đặt được phép làm vậy một lần trong mỗi 30 giây.Việc đọc giới hạn trong đại lý của bạn
Đọc đơn đặt theo mã định danh, theo mã tham chiếu
FXT-hoặc theo số đặt chỗ. Đơn đặt của đại lý khác trả về cùng lỗi404như đơn không tồn tại. Để liệt kê đơn đặt, hãy lọc theo trạng thái, ngày, báo giá hoặc nhóm chuyến, và truyềnmeta.as_oflại thànhas_ofở các trang tiếp theo để đơn đặt mới không làm lệch danh sách.
Những việc API đưa đón không làm
Biết sớm các giới hạn giúp tiết kiệm thời gian tích hợp. Đây là ranh giới của đặc tả dự kiến.
Một chiều cho mỗi báo giá
Một báo giá chỉ gồm một chuyến. Với chuyến khứ hồi, hãy yêu cầu hai báo giá, tạo hai đơn đặt và liên kết chúng bằng
trip_group_id.Một đầu là sân bay
Mọi chuyến đưa đón đều bắt đầu hoặc kết thúc tại sân bay. Chuyến giữa hai địa chỉ bị từ chối, nên dịch vụ đưa đón từ thành phố đến thành phố không được cung cấp.
Không đặt được dịch vụ bổ sung
Một báo giá có thể liệt kê dịch vụ bổ sung để tham khảo. Gửi dịch vụ bổ sung cùng đơn đặt sẽ bị từ chối với
extras_not_supported.Không có endpoint để sửa đơn đặt
Không có lệnh gọi nào để sửa đơn đặt. Để thay đổi, hãy hủy đơn rồi đặt lại với báo giá mới.
Không có webhook
FX-Port không gọi tới một URL của bạn khi đơn đặt thay đổi. Thay vào đó, hãy đọc lại định kỳ đơn đặt.
Địa điểm cần tọa độ
Đầu không phải sân bay được gửi dưới dạng một điểm: vĩ độ, kinh độ và tên. Tìm địa điểm theo tên chưa được cung cấp.
Giá, hoa hồng và những gì số dư của bạn thanh toán
Trong đặc tả dự kiến, mọi báo giá, đơn đặt và lần hủy đều mang cùng một khối giá, theo tiền tệ của số dư đại lý bạn.
| Trường | Ý nghĩa |
|---|---|
currency | Tiền tệ của số dư đại lý bạn. |
total_price | Số tiền du khách thanh toán. |
b2b_price | Số tiền trừ khỏi số dư đại lý của bạn khi đặt. |
agency_commission | Hoa hồng đại lý của bạn nhận được từ đơn đặt. |
Cách các trường cộng lại
total_pricebằngb2b_pricecộngagency_commission, tức làb2b_price = total_price - agency_commission. Số tiền là số JSON với hai chữ số thập phân, làm tròn lên.Những gì giá không hiển thị
Giá và tiền tệ riêng của nhà cung cấp, tỷ giá và hoa hồng nội bộ của FX-Port không xuất hiện trong bất kỳ phản hồi nào. Bạn thấy số tiền đại lý của bạn trả và số tiền du khách trả.
Thanh toán từ số dư đại lý
Đơn đặt được thanh toán từ số dư đại lý. Khi số dư không đủ, API từ chối đơn đặt với
402vàinsufficient_balance, và chi tiết lỗi cho biết số dư bạn có và số tiền bạn cần.
Ai xây dựng với API đưa đón
Cùng các lệnh gọi này phục vụ ba kiểu đội ngũ, và quy tắc về tiền và gửi lại yêu cầu đều giống nhau cho cả ba.
Hệ thống nội bộ của đại lý du lịch
Nhân viên tìm từ sân bay đến, hiển thị các báo giá kèm loại xe, sức chứa và giá, rồi đặt báo giá mà du khách chọn. Các lệnh gọi chính là
GET /transfers/locations,POST /transfers/quotesvàPOST /transfers/bookings.Đại lý du lịch trực tuyến và nền tảng
OTA bán chuyến đưa đón cùng với chuyến bay và khách sạn. Họ đặt bằng số hiệu chuyến bay của vé vừa bán, liệt kê đơn đặt theo trạng thái và khoảng ngày, rồi hủy kèm lý do. Chuyến khứ hồi là hai đơn đặt gắn với nhau bằng một nhóm chuyến.
Công cụ du lịch doanh nghiệp
Công cụ đặt chuyến của doanh nghiệp thêm chuyến đón khi đến nơi lúc chuyến công tác được duyệt, lưu mã tham chiếu riêng vào đơn đặt, và đọc lại đơn đặt trước chuyến đi để hiển thị tài xế.
Điều đang hoạt động và điều sắp tới
Mọi nội dung trên trang này đều mô tả đặc tả dự kiến, trừ hai thao tác đọc dưới đây.
Chuyến đưa đón đặt trong bảng điều khiển
Thao tác đọc lịch sử đặt và chi tiết đơn đặt đã chấp nhận
product=transfers. Chúng trả về các chuyến đưa đón đặt trong bảng điều khiển FX-Port, kèm ngày đến, số hiệu chuyến bay và liên kết voucher, biên nhận.Kế hoạch tiếp theo
Kế hoạch là mở các endpoint đưa đón cho khóa API, cung cấp trình mô phỏng Sandbox cho các khóa đó và công bố các trang tham chiếu trong tài liệu. Chưa có ngày cụ thể.
Những gì chưa được công bố
Số liệu phạm vi phủ, danh sách đơn vị vận hành, giới hạn tốc độ và cam kết dịch vụ chưa được công bố cho dịch vụ đưa đón, và số tiền trong các ví dụ chỉ là dữ liệu mẫu. Nếu một trong số đó quan trọng với kế hoạch của bạn, hãy hỏi nhóm API.
API đưa đón sân bay: câu hỏi thường gặp
API đưa đón sân bay của FX-Port là gì?
Đây là một REST API dự kiến cho phép đại lý du lịch hoặc OTA báo giá, đặt, theo dõi và hủy chuyến đưa đón sân bay. Bạn yêu cầu báo giá với điểm đón, điểm trả, giờ đón và hành khách, đặt một trong các báo giá mà máy chủ giữ cho bạn, rồi đọc đơn đặt cho đến khi được xác nhận. Yêu cầu và phản hồi là JSON, và giá theo tiền tệ của đại lý bạn.
Hiện nay tôi có dùng được API đưa đón không?
Chưa. API đưa đón đang ở bản xem trước: các endpoint chưa mở cho khóa API, và trang này mô tả đặc tả dự kiến. Các lệnh gọi đưa đón duy nhất hoạt động hiện nay là thao tác đọc lịch sử đặt, trả về các chuyến đưa đón đặt trong bảng điều khiển FX-Port. Hãy cho nhóm API biết bạn định xây dựng gì, họ có thể trao đổi về những gì đã dự kiến.
Làm sao liên hệ nhóm API, và tôi nên nói gì với họ?
Gửi email cho nhóm API tại [email protected]. Hãy cho họ biết bạn kinh doanh loại hình nào, phục vụ những sân bay nào và muốn đặt gì, chẳng hạn chuyến đón một chiều hay khứ hồi. Điều đó cho họ thấy phần nào của đặc tả quan trọng nhất với bạn. Bạn cũng có thể tạo tài khoản FX-Port trước.
Tôi có thể báo giá cho những sân bay và tuyến nào?
Mỗi chuyến đưa đón có một đầu là sân bay, ghi bằng mã IATA. Đầu còn lại là một sân bay khác hoặc một điểm có tọa độ và tên. Một báo giá chỉ gồm một chiều, nên chuyến khứ hồi là hai báo giá và hai đơn đặt. FX-Port chưa công bố số liệu phạm vi phủ hay danh sách đơn vị vận hành cho dịch vụ đưa đón, và Sandbox chỉ có một tập sân bay cố định.
Giá tính bằng tiền tệ nào, và tôi trả bao nhiêu?
Giá theo tiền tệ của số dư đại lý bạn. Mỗi mức giá cho biết tổng tiền du khách trả, hoa hồng của bạn và số tiền trừ khỏi số dư, tức là tổng tiền trừ hoa hồng. Số tiền được làm tròn lên hai chữ số thập phân, và giá cùng tỷ giá riêng của nhà cung cấp không được hiển thị.
Tôi nên làm gì nếu yêu cầu đặt bị quá thời gian?
Đừng gửi lại. Yêu cầu bị quá thời gian có thể đã được xử lý, và đơn đặt đã được nhận nhưng chưa xác nhận sẽ trả về ở trạng thái đang chờ. Hãy đọc đơn đặt của bạn lọc theo mã báo giá: kết quả sẽ có đơn đặt nếu nó tồn tại. Sau đó đọc lại định kỳ cho đến khi đơn được xác nhận hoặc thất bại. Đặt lại với báo giá mới có thể tạo ra đơn đặt thứ hai.
Điều gì xảy ra nếu giá thay đổi trước khi tôi đặt?
Giá được kiểm tra lại với nhà cung cấp ngay trước khi đặt. Nếu giá đã tăng, sẽ không có gì được đặt và API trả về tổng tiền trước đó cùng tổng tiền hiện tại. Hãy cho du khách xem giá mới, yêu cầu báo giá mới rồi đặt báo giá đó. Một báo giá được giữ trong 15 phút, nên đừng giữ báo giá quá lâu.
Tôi có thể sửa hoặc hủy một đơn đặt không?
Không có lệnh gọi nào để sửa đơn đặt: hãy hủy rồi đặt lại. Việc hủy cần một lý do lấy từ danh sách mà API cung cấp. Phản hồi cho biết khoản hoàn tiền đã xong hay còn chờ nhà cung cấp, và đơn đặt không thể hủy sẽ bị từ chối kèm lý do. Báo giá hiển thị ước tính thời hạn hủy và nguồn của ước tính, nên hãy coi đó là con số ước tính.
FX-Port có gửi webhook không, và tôi theo dõi đơn đặt thế nào?
Không. FX-Port không gọi tới URL của bạn. Hãy đọc đơn đặt: mỗi lần đọc cho biết cần chờ bao nhiêu giây trước khi hỏi lại, và thời gian chờ phụ thuộc vào trạng thái và mức độ gần của giờ đón. Khi đơn đặt đã kết thúc, phản hồi sẽ báo bạn ngừng đọc lại định kỳ.
Có Sandbox để kiểm thử không?
Sandbox được dự kiến là một trình mô phỏng với các giá trị kiểm thử dành riêng. Các giá trị đó tạo ra đơn đặt đang chờ, đơn bị từ chối, phản hồi bị mất, giá thay đổi và đơn không thể hủy, nên mọi nhánh đều kiểm thử được mà không cần đơn vị vận hành thật và không di chuyển tiền. Mọi đơn đặt trên Sandbox đều được đánh dấu là mô phỏng. Sandbox chưa mở cho khóa API.
API và trang liên quan
Một chuyến đi không chỉ có đưa đón. Các API chuyến bay, khách sạn và eSIM dùng chung Base URL, định dạng khóa và nội dung lỗi mà API đưa đón được thiết kế theo, nên một ứng dụng khách và một bộ xử lý lỗi có thể phục vụ tất cả.
Tìm kiếm, định giá và đặt vé máy bay, thanh toán đơn đang giữ, hủy và đọc vé.
Tìm khách sạn, kiểm tra giá phòng, đặt trước và đặt phòng, đọc voucher và hủy.
- eSIM APIMới
Duyệt các gói eSIM, tạo đơn hàng, nạp thêm, xem mức sử dụng và nhận hướng dẫn cài đặt.
- Xe đưa đón sân bay trong bảng điều khiển FX-Port
Thích dùng màn hình hơn API? Nhân viên đại lý có thể đặt chuyến đưa đón sân bay trong bảng điều khiển FX-Port mà không cần viết mã.
- Cách đặt chuyến đưa đón sân bay với FX-Port
Hướng dẫn từng bước để đặt chuyến đưa đón sân bay với FX-Port.
- Tài liệu API FX-Port
Tài liệu giải thích khóa, lỗi và giới hạn tốc độ mà mọi API FX-Port dùng chung.
- llms.txt cho công cụ AI
Hãy cho nhóm API biết bạn định xây dựng gì
Dịch vụ đưa đón đang ở bản xem trước, nên bước tiếp theo là một cuộc trao đổi. Hãy cho biết bạn kinh doanh loại hình nào, phục vụ những sân bay nào và muốn đặt gì. Bạn cũng có thể tạo tài khoản FX-Port trước.