Skip to main content

API for agents

Read-only access to trips, destinations, availability, and business details. Booking is a handoff to the website — this API does not collect payment or run automated checkout.

Public REST API

No token is required for these routes. Pass lang=en or lang=ar so localized fields resolve to strings. Errors use an error field.

MethodPathNotes
GET/api/healthLiveness. { status: "ok" }
GET/api/v1/tripsFilters: supplier_id, destination_id, public_status, include_inactive (admin), lang=en|ar
GET/api/v1/trips/{id}Query: lang=en|ar
GET/api/v1/destinationsQuery: lang, status, public_status
GET/api/v1/destinations/{id}Query: lang
POST/api/v1/imagesAuthenticated image upload; original files up to 20 MB are accepted and compressed before delivery.
GET/api/v1/suppliersQuery: lang
GET/api/v1/suppliers/{id}Query: lang
GET/api/v1/tour-guidesList
GET/api/v1/tour-guides/{id}By id
POST/api/v1/bookings/manualGuest booking. Optional bearer. Requires PII the user supplied.
POST/api/v1/feedbackrating 1–5. Optional comment, name, contact.

Machine-readable description: /openapi.json

MCP (read-only)

Streamable HTTP. Five tools, no writes. Search and get_trip return a /book?trip=id URL so the agent can hand the user to the form.

https://duckegy.com/api/mcp
  • search_tripsFilter by query / max_price / guests. Includes book_url.
  • get_tripSlug or 24-hex id. Includes book_url.
  • list_destinationsMeeting points.
  • check_availabilitykayak | water_cycle | sup on YYYY-MM-DD. Shortage is a result, not a tool error.
  • get_business_infoHours, dual EGP tiers, InstaPay/cash, languages, contact.

There are no booking or payment tools. PII and InstaPay or cash stay on the website form.

Authentication

Catalogue reads need no auth. Supplier and admin routes use a 72-hour JWT in Authorization: Bearer. There is no OAuth authorization server and no automated agent registration. Details: /auth.md.

Discovery documents