1. Trang chủ
  2. API đưa đón

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ì.

Trao đổi với nhóm APITạo tài khoản của bạn

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 trước
API đưa đón chưa mở cho khóa API. Trang này mô tả đặc tả dự kiến, và mọi yêu cầu hay phản hồi hiển thị trên đây đều là dữ liệu mẫu mô phỏng.

Trong trang này

  • Console
  • Endpoint
  • Đặt chuyến an toàn
  • Sandbox
  • Theo dõi đơn đặt
  • Giới hạn
  • Giá
  • Ai xây dựng với API
  • Hiện tại và sắp tới
  • FAQ
  • Liên quan
  • Bước tiếp theo

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ã đó.

  1. 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
  2. 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
  3. Đặ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.

  1. Đọ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
  2. Đọ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
  3. 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.

  1. 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
  2. Đặt, và giá đã thay đổi

    Sandbox tăng giá khi số hiệu chuyến bay là PRICEUP. API trả về 409 với price_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
  3. 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
  4. Đặ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.

  1. 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
  2. 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
  3. Đặ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 409 và booking_in_progress, kèm header Retry-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 đó.

  1. 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
  2. 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ường can_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
  3. Thử hủy đơn

    Việc hủy bị từ chối với 409 và 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.

Các endpoint đưa đón dự kiến cùng quyền của khóa mà mỗi endpoint cần
EndpointChức năngKhóa
GET /api/v1/transfers/locationsXem trướcGợ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ướcLiệ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ướcHủ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ướcLiệ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ó Z sẽ 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ố.

  • Khóa và các mức quyền
  • Giới hạn tốc độ và sử dụng hợp lý
  • Quy ước về tên gọi, tiền và ngày
  • Cách môi trường và khóa hoạt động

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_id riê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ấu idempotent_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ề 202 với đơn đang chờ và trạng thái reconciling. 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ề 409 với price_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á đó.

Cách xử lý từng phản hồi của lệnh gọi đặt
Phản hồiÝ nghĩaViệc cần làm
200 idempotent_replayCù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_confirmationKế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_progressCù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_bookingBá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_changedGiá đã 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_unavailableBá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_busyNhà 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_balanceSố dư đại lý không đủ để thanh toán đơn đặt.Nạp tiền vào số dư, rồi đặt lại.
  • Thử lại an toàn sau khi gặp lỗi
  • Quy ước về tên gọi, tiền và ngày

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 simulated và có số đặt chỗ bắt đầu bằng SBX-. 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.

Các giá trị kiểm thử dành riêng và việc Sandbox làm với chúng
TrườngGiá trịĐiều xảy ra
passenger.last_namePendingĐơ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_nameDeclinedĐơ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_nameRejectedĐơn đặt bị từ chối ngay với 422 và supplier_rejected.
passenger.last_nameTimeoutPhả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_nameCancelledĐơ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_numberNOCANCELĐơn đặt không thể hủy: lệnh hủy trả về 409 với cancellation_not_allowed.
flight_numberPRICEUPGiá 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.
  • Cách môi trường và khóa hoạt động
  • Cách Sandbox hoạt động

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.

Số giây cần chờ trước khi đọc lại đơn đặt
Khi nàoThời gian chờ
Khi đơn đặt đang chờ, bất kể giờ đón120
Giờ đón còn dưới 48 giờ900
Giờ đón còn từ 48 giờ đến một tuần3600
Giờ đón còn hơn một tuần21600
Đơn đặt đã kết thúc: ngừng đọc lại định kỳnull
Trạng thái đơn đặt và ý nghĩa
Trạng tháiChi tiếtÝ nghĩa
pendingawaiting_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.
pendingreconcilingKế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.
confirmedconfirmedNhà cung cấp đã chấp thuận đơn đặt. Có thể chưa phân công tài xế.
confirmedcompletedChuyến đi đã xong. Bạn có thể ngừng đọc lại định kỳ.
cancelledrefund_pendingĐã hủy với nhà cung cấp, nhưng số dư chưa được hoàn lại.
refundedcompletedĐã hủy và hoàn lại đầy đủ vào số dư.
partial_refundcompletedĐã hủy, và một phần số tiền đã được hoàn lại.
faileddeclined, 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ỗi 404 như đơ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ền meta.as_of lại thành as_of ở các trang tiếp theo để đơn đặt mới không làm lệch danh sách.

  • Quy ước về tên gọi, tiền và ngày

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.

Các trường của khối giá
TrườngÝ nghĩa
currencyTiền tệ của số dư đại lý bạn.
total_priceSố tiền du khách thanh toán.
b2b_priceSố tiền trừ khỏi số dư đại lý của bạn khi đặt.
agency_commissionHoa 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_price bằng b2b_price cộng agency_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 402 và insufficient_balance, và chi tiết lỗi cho biết số dư bạn có và số tiền bạn cần.

  • Quy ước về tên gọi, tiền và ngày

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/quotes và 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.

  • Tham chiếu lịch sử đặt
  • Tham chiếu chi tiết đơn đặt
  • Xe đưa đón sân bay trong bảng điều khiển FX-Port
  • Nhà cung cấp được bật cho khóa của bạn
  • Giới hạn tốc độ và sử dụng hợp lý

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ả.

  • API chuyến bay

    Tìm kiếm, định giá và đặt vé máy bay, thanh toán đơn đang giữ, hủy và đọc vé.

  • API khách sạn

    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.

Trao đổi với nhóm APITạo tài khoản của bạn

Hỏi trợ lý AI về API này

Mở trang này trong một trợ lý AI và nhờ lập kế hoạch tích hợp từng bước.

FX-PORT

Nền tảng phân phối du lịch B2B đáng tin cậy của bạn. Truy cập kho dự trữ toàn cầu và phát triển doanh nghiệp của bạn với giá cả tốt hơn và các công cụ dễ sử dụng.

  • Điều khoản
  • Quyền riêng tư
  • Liên hệ với chúng tôi
  • Doanh nghiệp
  • Blog
  • API Chuyến Bay B2B
  • API Đưa Đón B2B
  • API Phà B2B
  • API Khách Sạn B2B
  • B2B eSIM API
  • Bed Bank B2B
  • Nhà Cung Cấp Chuyến Bay B2B
  • Hãng Hàng Không
  • Sân Bay
  • Quốc Gia
  • eSIM

Dịch vụ chuyến bay

FX-Port là nền tảng phân phối chuyến bay B2B toàn diện cho phép đại lý du lịch truy cập và bán vé máy bay trên toàn thế giới. Với kết nối với hơn 500 hãng hàng không, đại lý có thể cung cấp giá sỉ cạnh tranh với xác nhận ngay lập tức và quy trình đặt vé tự động.

Nền tảng của chúng tôi cung cấp khả năng có sẵn trong thời gian thực, công cụ so sánh giá và quản lý đặt chỗ tự động. Đại lý du lịch có thể truy cập các giá vé máy bay B2B độc quyền, quản lý hoa hồng và tối ưu hóa hoạt động chuyến bay thông qua hệ thống tích hợp của chúng tôi.

Dịch vụ lưu trú

Truy cập mạng lưới rộng lớn của chúng tôi với hơn 1,5 triệu tài sản trên toàn thế giới thông qua nền tảng đặt khách sạn B2B của chúng tôi. Đại lý du lịch có thể cung cấp giá cạnh tranh với lợi nhuận đảm bảo và xác nhận phòng ngay lập tức trên tất cả các danh mục chỗ ở.

Từ các khu nghỉ dưỡng sang trọng đến các tùy chọn tiết kiệm, nền tảng của chúng tôi cung cấp thông tin chi tiết về tài sản, giá cả linh hoạt và quản lý đặt chỗ tự động cho phân phối khách sạn mượt mà.

Giải pháp du lịch

Dịch vụ chuyển đổi toàn diện với mạng lưới toàn cầu các nhà cung cấp đã xác minh, cung cấp dịch vụ chuyển sân bay, tham quan thành phố và dịch vụ lái xe chuyên nghiệp. Hệ thống đặt vé phà của chúng tôi kết nối các tuyến đường hàng hải chính với khả năng đặt chỗ ngay lập tức và giá B2B cạnh tranh.

Các gói Umrah chuyên biệt với dịch vụ từ đầu đến cuối bao gồm xử lý thị thực, lưu trú và vận tải. Các gói du lịch tùy chỉnh với giá cả linh hoạt và quản lý kho dự trữ tự động cho đại lý du lịch.

FX-Port cách mạng hóa phân phối du lịch B2B với công nghệ tiên tiến và các giải pháp toàn diện. Nền tảng của chúng tôi cho phép đại lý du lịch truy cập kho dự trữ toàn cầu, quản lý đặt chỗ hiệu quả và phát triển doanh nghiệp với giá cả cạnh tranh và các công cụ tự động.

Với hỗ trợ cho nhiều loại tiền tệ, xử lý thanh toán địa phương và dịch vụ khách hàng 24/7, chúng tôi đảm bảo hoạt động mượt mà cho đại lý du lịch trên toàn thế giới. Nền tảng của chúng tôi có các tính năng khả năng có sẵn trong thời gian thực, xác nhận ngay lập tức và các công cụ quản lý đặt chỗ toàn diện.

Đại lý du lịch có thể sử dụng nền tảng của chúng tôi để cung cấp toàn bộ loạt các dịch vụ du lịch, bao gồm đặt chỗ chuyến bay, đặt khách sạn, dịch vụ chuyển đổi, vé phà, các gói Umrah và các trải nghiệm du lịch tùy chỉnh. Chợ B2B của chúng tôi kết nối đại lý với các nhà cung cấp đã xác minh trên toàn thế giới.

FX-Port cung cấp bảo mật cấp doanh nghiệp, quản lý hoa hồng tự động và phân tích chi tiết cho sự phát triển doanh nghiệp. Tham gia cùng hàng trăm đại lý thành công đang sử dụng nền tảng của chúng tôi để tối ưu hóa hoạt động và mở rộng sự hiện diện thị trường của họ.

© 2026 FX-PORT. Tất cả các quyền được bảo lưu.

Chuyển đến nội dung
FX-Port cho nhà cung cấpVé máy bay—Hãng hàng không·Đơn vị gom vé·OTA·Đại lý GDSKhách sạn—Bed bank·PMS/CMS·Khách sạnTất cả nhà cung cấp du lịch
Doanh nghiệpAPI
Đăng Nhập
Truy cập ngay bây giờ
Bảng điều khiển