{"activeVersionTag":"latest","latestAvailableVersionTag":"latest","collection":{"info":{"_postman_id":"602fba8f-e828-47d9-a4e3-f558453cf2a8","name":"API Documentation","description":"# Taxi API Documentation\n\n## General Information\n\n- **Base URL:** `{{SANDBOX_API}}`\n    \n- **Version:** sent as query param `v={{VERSION}}` on every request\n    \n- **Authentication:** API Key required, sent as query param: `api_key={{API_KEY}}`\n    \n\n## Location Input: Place ID / Address / Coordinates\n\nSearch endpoints accept **at least one of three inputs** for origin and destination:\n\n| Method | Parameters | Behavior |\n| --- | --- | --- |\n| Place ID | `originPlaceID`, `destinationPlaceID` | Route is calculated from the given places |\n| Address only | `origin`, `destination` | Route is calculated from the given addresses |\n| Coordinates only | `originLat`+`originLng`, `destinationLat`+`destinationLng` | Route is calculated from the given coordinates; the display address is resolved automatically |\n| Combined | any of the above together | **Priority: place ID > coordinates > address text.** The text is a fallback for the display address |\n\n**Place ID rules:**\n\n- Both `ChIJ...` and `place_id:ChIJ...` are accepted\n- Sending a place id makes the address text and the coordinates for that side optional\n- In `HOURLY_RENTAL` mode `originPlaceID` alone is enough\n\n**Coordinate rules:**\n\n- `lat`/`lng` must always be sent **as a pair** — a missing half returns `400`\n    \n- Ranges: lat `-90..90`, lng `-180..180`; invalid values return `400`\n    \n- An empty string (`originLat=`) is treated as _no coordinate_\n    \n- A raw coordinate string in the text field (`origin=41.03,29.01`) is **not accepted** (`400`) — coordinates must be sent via the lat/lng parameters only\n    \n- In `HOURLY_RENTAL` mode no destination (address or coordinates) is required\n    \n\n## Recommended Flow\n\n`Search → Search Detail → Transfer Accept → Transfer Detail → Rate / Cancel`\n\nThe variable chain is wired automatically by test scripts: `SEARCH_ID` and `TRIP_ID` are set from the Search response, `TRANSFER_ID` and `PNR` from the Accept response.\n\n## Variables\n\n| Variable | Description |\n| --- | --- |\n| `SANDBOX_API` | Environment base URL (fill in manually) |\n| `VERSION` | API version (`v` query param) |\n| `API_KEY` | Partner API key (fill in manually) |\n| `SEARCH_DATE` / `SEARCH_DATE_END` | Auto-generated on every run: today+7 days / +9 days (ISO-8601) |\n| `ORIGIN_LAT/LNG`, `DEST_LAT/LNG` | Default values for the coordinate examples (Istanbul Airport → Kadıköy) |\n| `ORIGIN_PLACE_ID`, `DEST_PLACE_ID` | Google place ids for the place-id example — **ship empty, fill in manually** |\n| `SEARCH_ID`, `TRIP_ID`, `TRANSFER_ID`, `PNR` | Set automatically by test scripts |\n\n## Common Error Codes\n\n- **400 Bad Request:** Validation error (missing/invalid parameter, incomplete coordinate pair, no location provided)\n    \n- **403 Forbidden:** No permission, or the allowed time window for the operation has passed\n    \n- **404 Not Found:** Record not found\n    \n- **traceID:** Include the `traceID` from an error response when contacting support\n    \n\n## DTO Rule Summary\n\n- `origin`: `originPlaceID` **or** address **or** `originLat`+`originLng` — one of the three is required\n    \n- `destination`: `destinationPlaceID` **or** address **or** `destinationLat`+`destinationLng` — one of the three is required in `PARTNER` mode, not required in `HOURLY_RENTAL`\n    \n- `currency`: `TRY | USD | EUR`\n    \n- `transferType`: `PARTNER | HOURLY_RENTAL` (defaults to `PARTNER` when omitted)\n    \n- `seats`: required for `PARTNER`, `1..36`\n    \n- `hours`: required for `HOURLY_RENTAL`, `1..36`\n    \n- `dateTime`: required, ISO-8601; `dateTimeEnd`: optional (multi-day hourly rental)\n    \n- `luggageCapacity`: required, `0..10`\n    \n- accept passenger: `firstName`/`lastName` required; at least one of `phone` (E.164) or `email` required\n    \n- rate: `rate` required `1..5` (integer); `comment` optional, max 500\n    \n- cancel: `reason` required (customer cancellation reasons); `note` required when `reason=CUSTOMER_OTHER_REASON`\n\n---\n\n## Validation & compatibility notes\n\nInput validation on the Taxi API was tightened. Every string is trimmed, every collection and\nfree-form JSON field is bounded. Below is what changed, split by whether it can break an existing\nintegration.\n\n### ⚠️ Breaking — review before upgrading\n\n| Endpoint | Change | What to do |\n| --- | --- | --- |\n| `POST /taxi/additional-service` | `transferID` is now **required**. The free-form fields `points`, `transferRequestID`, `partnerID`, `subcontractID` and `dateTime` are no longer accepted. | Always pass `transferID`. They are all derived from the transfer; `partnerID` is taken from your own API key. |\n| `POST /taxi/additional-service` | `currency` is restricted to `TRY`, `USD`, `EUR`. | Stop sending other codes. |\n| `POST /taxi/accept/transfer/:id` | `passengers` accepts at most **36** entries. | No action unless you send more than 36. |\n| `POST /taxi/accept/transfer/:id` | `firstName` / `lastName` max **100** characters; whitespace-only values are rejected. | No action for real names. |\n| `POST /taxi/accept/transfer/:id` | `metadata` max **4096 characters**, **5** levels deep, **40** keys. | Trim oversized metadata. |\n| `GET /taxi/search` | `origin` / `destination` max **500** characters. | No action for real addresses. |\n\nUnknown fields were already dropped silently by the API and still are — sending an extra field\ndoes not fail, but it is ignored.\n\n### Normalization — not breaking, but the stored value may differ\n\n| Field | Behaviour |\n| --- | --- |\n| all text fields | leading/trailing whitespace is trimmed; a whitespace-only value is treated as empty |\n| `email` | trimmed **and lowercased** before storage and lookup |\n| `phone` | spaces, dashes and parentheses stripped, then validated as E.164 |\n| `flightNumber` | uppercased, spaces and dashes stripped |\n\n### Additive — no action needed\n\n| Endpoint | Change |\n| --- | --- |\n| `GET /taxi/search` | New optional `originPlaceID` / `destinationPlaceID`. Priority is `placeID` > coordinates > address text. A `place_id:` prefix is accepted. |\n| `PATCH /taxi/transfer/:id/guest` | New endpoint — replaces the passenger list. Requires role `AT04`. |\n| `GET|POST /taxi/transfer/:id/additional-service`, `DELETE .../:itemId` | New endpoints. Require roles `AT05` (add) and `AT06` (remove); listing uses `AT01`. |\n\n### New business rules that can reject a previously accepted call\n\n| Rule | Error |\n| --- | --- |\n| An offer can be accepted at most **1 hour** after the search that produced it. | `400 B42463` |\n| A transfer can be cancelled up to **12 hours** before its start time. | `403 B42462` |\n| An additional service can be removed up to **12 hours** before the transfer. Adding is not restricted. | `403 B42467` |\n| Passengers, additional services: completed or cancelled transfers cannot be modified. | `400 B42464` / `400 B42465` |\n\n\n### Passenger `metadata` — closed field list\n\n`metadata` is **not free-form JSON**. Only these two fields are accepted; every other key is\ndropped silently (the API does not fail, the key simply never reaches storage).\n\n| Field | Rule |\n| --- | --- |\n| `identityNumber` | Turkish national ID — exactly **11 digits**, cannot start with `0`. Trimmed. |\n| `passportNumber` | **5-20** letters/digits, no spaces or dashes. Uppercased before storage. |\n\n> Previously `metadata` accepted any object up to 4096 characters. If you were sending other\n> keys they are now dropped — move them out of `metadata` or they will be lost.\n\n### New roles\n\n`AT04` (passenger update), `AT05` (add additional service), `AT06` (remove additional service).\n**Existing API keys do not have them** — the endpoints return `403` until the roles are granted.\n","schema":"https://schema.getpostman.com/json/collection/v2.0.0/collection.json","isPublicCollection":true,"owner":"32607372","team":6000322,"collectionId":"602fba8f-e828-47d9-a4e3-f558453cf2a8","publishedId":"2sBY4TrJbx","public":true,"publicUrl":"https://docs.united.tech","privateUrl":"https://go.postman.co/documentation/32607372-602fba8f-e828-47d9-a4e3-f558453cf2a8","customColor":{"top-bar":"FFFFFF","right-sidebar":"303030","highlight":"094325"},"documentationLayout":"classic-double-column","customisation":{"metaTags":[{"name":"description","value":""},{"name":"title","value":"United Tech Taxi Api"}],"appearance":{"default":"light","themes":[{"name":"dark","logo":"https://content.pstmn.io/4b73a079-5beb-41c8-9fb7-a43a1f516237/bG9nby5wbmc=","colors":{"top-bar":"212121","right-sidebar":"303030","highlight":"094325"}},{"name":"light","logo":"https://content.pstmn.io/4b73a079-5beb-41c8-9fb7-a43a1f516237/bG9nby5wbmc=","colors":{"top-bar":"FFFFFF","right-sidebar":"303030","highlight":"094325"}}]}},"version":"8.12.6","publishDate":"2026-08-03T22:38:32.000Z","activeVersionTag":"latest","documentationTheme":"light","metaTags":{"title":"United Tech Taxi Api","description":""},"logos":{"logoLight":"https://content.pstmn.io/4b73a079-5beb-41c8-9fb7-a43a1f516237/bG9nby5wbmc=","logoDark":"https://content.pstmn.io/4b73a079-5beb-41c8-9fb7-a43a1f516237/bG9nby5wbmc="}},"statusCode":200},"environments":[{"name":"Sandbox","id":"9e027828-de8a-408e-b46a-bb2a792255b3","owner":"32607372","values":[{"key":"SANDBOX_API","value":"","enabled":true,"type":"default"},{"key":"API_KEY","value":"","enabled":true,"type":"default"},{"key":"VERSION","value":"","enabled":true,"type":"default"}],"published":true}],"user":{"authenticated":false,"permissions":{"publish":false}},"run":{"button":{"js":"https://run.pstmn.io/button.js","css":"https://run.pstmn.io/button.css"}},"web":"https://www.getpostman.com/","team":{"logo":"https://res.cloudinary.com/postman/image/upload/t_team_logo_pubdoc/v1/team/0bfb30b5ccef04f60434118f43adb3469c68b9828ff58185d8b759d45be3904e","favicon":"https://united.tech/favicon.ico"},"isEnvFetchError":false,"languages":"[{\"key\":\"csharp\",\"label\":\"C#\",\"variant\":\"HttpClient\"},{\"key\":\"csharp\",\"label\":\"C#\",\"variant\":\"RestSharp\"},{\"key\":\"curl\",\"label\":\"cURL\",\"variant\":\"cURL\"},{\"key\":\"dart\",\"label\":\"Dart\",\"variant\":\"http\"},{\"key\":\"go\",\"label\":\"Go\",\"variant\":\"Native\"},{\"key\":\"http\",\"label\":\"HTTP\",\"variant\":\"HTTP\"},{\"key\":\"java\",\"label\":\"Java\",\"variant\":\"OkHttp\"},{\"key\":\"java\",\"label\":\"Java\",\"variant\":\"Unirest\"},{\"key\":\"javascript\",\"label\":\"JavaScript\",\"variant\":\"Fetch\"},{\"key\":\"javascript\",\"label\":\"JavaScript\",\"variant\":\"jQuery\"},{\"key\":\"javascript\",\"label\":\"JavaScript\",\"variant\":\"XHR\"},{\"key\":\"c\",\"label\":\"C\",\"variant\":\"libcurl\"},{\"key\":\"nodejs\",\"label\":\"NodeJs\",\"variant\":\"Axios\"},{\"key\":\"nodejs\",\"label\":\"NodeJs\",\"variant\":\"Native\"},{\"key\":\"nodejs\",\"label\":\"NodeJs\",\"variant\":\"Request\"},{\"key\":\"nodejs\",\"label\":\"NodeJs\",\"variant\":\"Unirest\"},{\"key\":\"objective-c\",\"label\":\"Objective-C\",\"variant\":\"NSURLSession\"},{\"key\":\"ocaml\",\"label\":\"OCaml\",\"variant\":\"Cohttp\"},{\"key\":\"php\",\"label\":\"PHP\",\"variant\":\"cURL\"},{\"key\":\"php\",\"label\":\"PHP\",\"variant\":\"Guzzle\"},{\"key\":\"php\",\"label\":\"PHP\",\"variant\":\"HTTP_Request2\"},{\"key\":\"php\",\"label\":\"PHP\",\"variant\":\"pecl_http\"},{\"key\":\"powershell\",\"label\":\"PowerShell\",\"variant\":\"RestMethod\"},{\"key\":\"python\",\"label\":\"Python\",\"variant\":\"http.client\"},{\"key\":\"python\",\"label\":\"Python\",\"variant\":\"Requests\"},{\"key\":\"r\",\"label\":\"R\",\"variant\":\"httr\"},{\"key\":\"r\",\"label\":\"R\",\"variant\":\"RCurl\"},{\"key\":\"ruby\",\"label\":\"Ruby\",\"variant\":\"Net::HTTP\"},{\"key\":\"shell\",\"label\":\"Shell\",\"variant\":\"Httpie\"},{\"key\":\"shell\",\"label\":\"Shell\",\"variant\":\"wget\"},{\"key\":\"swift\",\"label\":\"Swift\",\"variant\":\"URLSession\"}]","languageSettings":[{"key":"csharp","label":"C#","variant":"HttpClient"},{"key":"csharp","label":"C#","variant":"RestSharp"},{"key":"curl","label":"cURL","variant":"cURL"},{"key":"dart","label":"Dart","variant":"http"},{"key":"go","label":"Go","variant":"Native"},{"key":"http","label":"HTTP","variant":"HTTP"},{"key":"java","label":"Java","variant":"OkHttp"},{"key":"java","label":"Java","variant":"Unirest"},{"key":"javascript","label":"JavaScript","variant":"Fetch"},{"key":"javascript","label":"JavaScript","variant":"jQuery"},{"key":"javascript","label":"JavaScript","variant":"XHR"},{"key":"c","label":"C","variant":"libcurl"},{"key":"nodejs","label":"NodeJs","variant":"Axios"},{"key":"nodejs","label":"NodeJs","variant":"Native"},{"key":"nodejs","label":"NodeJs","variant":"Request"},{"key":"nodejs","label":"NodeJs","variant":"Unirest"},{"key":"objective-c","label":"Objective-C","variant":"NSURLSession"},{"key":"ocaml","label":"OCaml","variant":"Cohttp"},{"key":"php","label":"PHP","variant":"cURL"},{"key":"php","label":"PHP","variant":"Guzzle"},{"key":"php","label":"PHP","variant":"HTTP_Request2"},{"key":"php","label":"PHP","variant":"pecl_http"},{"key":"powershell","label":"PowerShell","variant":"RestMethod"},{"key":"python","label":"Python","variant":"http.client"},{"key":"python","label":"Python","variant":"Requests"},{"key":"r","label":"R","variant":"httr"},{"key":"r","label":"R","variant":"RCurl"},{"key":"ruby","label":"Ruby","variant":"Net::HTTP"},{"key":"shell","label":"Shell","variant":"Httpie"},{"key":"shell","label":"Shell","variant":"wget"},{"key":"swift","label":"Swift","variant":"URLSession"}],"languageOptions":[{"label":"C# - HttpClient","value":"csharp - HttpClient - C#"},{"label":"C# - RestSharp","value":"csharp - RestSharp - C#"},{"label":"cURL - cURL","value":"curl - cURL - cURL"},{"label":"Dart - http","value":"dart - http - Dart"},{"label":"Go - Native","value":"go - Native - Go"},{"label":"HTTP - HTTP","value":"http - HTTP - HTTP"},{"label":"Java - OkHttp","value":"java - OkHttp - Java"},{"label":"Java - Unirest","value":"java - Unirest - Java"},{"label":"JavaScript - Fetch","value":"javascript - Fetch - JavaScript"},{"label":"JavaScript - jQuery","value":"javascript - jQuery - JavaScript"},{"label":"JavaScript - XHR","value":"javascript - XHR - JavaScript"},{"label":"C - libcurl","value":"c - libcurl - C"},{"label":"NodeJs - Axios","value":"nodejs - Axios - NodeJs"},{"label":"NodeJs - Native","value":"nodejs - Native - NodeJs"},{"label":"NodeJs - Request","value":"nodejs - Request - NodeJs"},{"label":"NodeJs - Unirest","value":"nodejs - Unirest - NodeJs"},{"label":"Objective-C - NSURLSession","value":"objective-c - NSURLSession - Objective-C"},{"label":"OCaml - Cohttp","value":"ocaml - Cohttp - OCaml"},{"label":"PHP - cURL","value":"php - cURL - PHP"},{"label":"PHP - Guzzle","value":"php - Guzzle - PHP"},{"label":"PHP - HTTP_Request2","value":"php - HTTP_Request2 - PHP"},{"label":"PHP - pecl_http","value":"php - pecl_http - PHP"},{"label":"PowerShell - RestMethod","value":"powershell - RestMethod - PowerShell"},{"label":"Python - http.client","value":"python - http.client - Python"},{"label":"Python - Requests","value":"python - Requests - Python"},{"label":"R - httr","value":"r - httr - R"},{"label":"R - RCurl","value":"r - RCurl - R"},{"label":"Ruby - Net::HTTP","value":"ruby - Net::HTTP - Ruby"},{"label":"Shell - Httpie","value":"shell - Httpie - Shell"},{"label":"Shell - wget","value":"shell - wget - Shell"},{"label":"Swift - URLSession","value":"swift - URLSession - Swift"}],"layoutOptions":[{"value":"classic-single-column","label":"Single Column"},{"value":"classic-double-column","label":"Double Column"}],"versionOptions":[],"environmentOptions":[{"value":"0","label":"No Environment"},{"label":"Sandbox","value":"32607372-9e027828-de8a-408e-b46a-bb2a792255b3"}],"canonicalUrl":"https://docs.united.tech/view/metadata/2sBY4TrJbx"}