B2B API v1
Vitt Taxi B2B API Dokümantasyonu
Kimlik doğrulama, fiyat teklifleri, rezervasyonlar, meta veriler ve takip için iş ortağı dokümanları.
Test Temel URL
https://test123.vittaxi.com
Temel URL
https://vittaxi.com
Genel Bakış
- Authentication uses Sanctum Bearer tokens.
- Access is limited to linked currents with external API enabled.
- Responses are in English.
- Partner reservation contract maps to internal Operation flow.
Postman Koleksiyonu İndir
Bu modül için kullanılan güncel koleksiyonu indirin.
/api/external/v1/auth/login
Login with username and password. Returns the Bearer token, abilities and linked user/current payload.
{
"username": "customer",
"password": "secret-password"
}{
"success": true,
"message": "Login successful.",
"data": {
"token": "43|M61NL50OB37AWflrDa24JomLdozhHqAkQdphvJeAd7362b89",
"token_type": "Bearer",
"abilities": [
"external-api"
],
"user": {
"id": 13,
"name": "İstanbul",
"surname": "Transfer Services",
"username": "customer",
"email": "api@istanbultransfer.com",
"phone": "+905556666666",
"role": "customer",
"current": {
"id": 8,
"name": "İstanbul",
"surname": "Transfer Services",
"code": "SUP004",
"category_type": "customer",
"external_api": {
"enabled": true,
"scopes": []
}
}
},
"current": {
"id": 8,
"name": "İstanbul",
"surname": "Transfer Services",
"code": "SUP004",
"category_type": "customer",
"external_api": {
"enabled": true,
"scopes": []
}
}
}
}{
"success": false,
"message": "Username or password is invalid."
}/api/external/v1/auth/me
Returns the authenticated partner user, linked current and token abilities.
{
"Authorization": "Bearer {{token}}",
"Accept": "application/json"
}{
"success": true,
"data": {
"user": {
"id": 13,
"name": "İstanbul",
"surname": "Transfer Services",
"username": "customer",
"email": "api@istanbultransfer.com",
"phone": "+905556666666",
"role": "customer",
"current": {
"id": 8,
"name": "İstanbul",
"surname": "Transfer Services",
"code": "SUP004",
"category_type": "customer",
"external_api": {
"enabled": true,
"scopes": []
}
}
},
"current": {
"id": 8,
"name": "İstanbul",
"surname": "Transfer Services",
"code": "SUP004",
"category_type": "customer",
"external_api": {
"enabled": true,
"scopes": []
}
},
"abilities": [
"external-api"
]
}
}/api/external/v1/auth/refresh
Refreshes the current Bearer token and keeps the same abilities.
{
"Authorization": "Bearer {{token}}",
"Accept": "application/json"
}{
"success": true,
"message": "Token refreshed.",
"data": {
"token": "45|YCpg5wOjiBIWMg3ZlAs38aS8hPzlcs150TW5yHAjd43d5e30",
"token_type": "Bearer",
"abilities": [
"external-api"
]
}
}/api/external/v1/auth/logout
Deletes the active partner token.
{
"Authorization": "Bearer {{token}}",
"Accept": "application/json"
}{
"success": true,
"message": "Logout successful."
}/api/external/v1/quotes/search
Nested from/to payloads are used for polygon-based pricing. Optional location metadata can also persist a location record.
{
"from": {
"name": "Fatih",
"address": "Fatih / Istanbul",
"google_place_id": "ChIJxxxxxxxxxxxx",
"latitude": 41.0082,
"longitude": 28.9784
},
"to": {
"name": "Sabiha Gokcen Airport",
"address": "Pendik / Istanbul",
"google_place_id": "ChIJyyyyyyyyyyyy",
"latitude": 40.976,
"longitude": 29.079
},
"transfer_date": "2026-08-30",
"transfer_time": "14:30",
"passenger_count": 2,
"car_category_id": 1,
"currency_code": "EUR",
"notes": "Optional note for audit."
}{
"price_mark": "...",
"price_mark_expires_at": "ISO-8601",
"direction": "one_way",
"transfer_date": "ISO-8601",
"transfer_time": "14:30",
"return_date": null,
"return_time": null,
"passenger_count": 2,
"currency_code": "EUR",
"from_location": {
"name": "Haliç Kongre Merkezi",
"full_address": "Sütlüce, Karaağaç Cd Haliç Kongre Merkezi No:19 İdari Bina, 34445 Beyoğlu/İstanbul",
"latitude": "41.0529202",
"longitude": "28.9434531"
},
"to_location": {
"name": "İstanbul Sabiha Gökçen Uluslararası Havalimanı",
"full_address": "Sanayi, 34906 Pendik/İstanbul",
"latitude": "40.9066492",
"longitude": "29.3133517"
},
"options": [
{
"car_category_id": 1,
"car_category_name": "Economy",
"trip_type": "one_way",
"price": 2.05,
"currency": {
"code": "EUR",
"symbol": "€"
}
}
]
}- Quote result is created from polygon-based pricing.
- Price mark is persisted in the database and expires after 1 hour.
- Location records are created when enough location metadata is present.
- Internal identifiers are not exposed in the partner response.
/api/external/v1/quotes/{identifier}
Returns a stored quote by identifier. The identifier can resolve either a price_mark or a quote_id.
{
"success": true,
"message": "Quote retrieved successfully.",
"data": {
"price_mark": "NqOJgIOkHaqy81NEk9qLRV7yvAHXYpxfQ19A3WcG",
"price_mark_expires_at": "2026-08-30T18:54:02+03:00",
"direction": "one_way",
"transfer_date": "2026-09-10T14:30:00+03:00",
"transfer_time": "14:30",
"return_date": null,
"return_time": null,
"passenger_count": 2,
"currency_code": "EUR",
"from_location": {
"name": "Haliç Kongre Merkezi",
"full_address": "Sütlüce, Karaağaç Cd Haliç Kongre Merkezi No:19 İdari Bina, 34445 Beyoğlu/İstanbul",
"latitude": "41.0529202",
"longitude": "28.9434531"
},
"to_location": {
"name": "İstanbul Sabiha Gökçen Uluslararası Havalimanı",
"full_address": "Sanayi, 34906 Pendik/İstanbul",
"latitude": "40.9066492",
"longitude": "29.3133517"
},
"options": [
{
"car_category_id": 1,
"car_category_name": "Economy",
"trip_type": "one_way",
"price": 2.05,
"currency": {
"code": "EUR",
"symbol": "€"
}
}
]
}
}/api/external/v1/quotes/{identifier}/validate
Checks whether the stored quote is still active and unexpired.
{
"success": true,
"message": "Quote validation successful.",
"data": {
"price_mark": "NqOJgIOkHaqy81NEk9qLRV7yvAHXYpxfQ19A3WcG",
"price_mark_expires_at": "2026-08-30T18:54:02+03:00",
"is_valid": true
}
}/api/external/v1/quotes/{identifier}/refresh
Reprices the stored quote and returns a new price mark.
{
"success": true,
"message": "Quote refreshed successfully.",
"data": {
"price_mark": "NEW_PRICE_MARK",
"previous_price_mark": "OLD_PRICE_MARK",
"price_mark_expires_at": "2026-08-30T18:54:02+03:00"
}
}/api/external/v1/reservations
Creates the partner-facing reservation and persists it as an internal Operation from an active price_mark.
{
"price_mark": "{{price_mark}}",
"car_category_id": 1,
"transfer_type": "oneway",
"operation_type": "transfer",
"operation_name": "Fatih to Airport",
"customer_reference": "PARTNER-2026-0001",
"transfer_date": "2026-08-30",
"transfer_time": "14:30",
"name": "John Doe",
"phone": "+905555555555",
"email": "john@example.com",
"whatsapp": "+905555555555",
"passenger_count": 2,
"passengers": [
{
"name": "John Doe",
"phone": "+905555555555",
"email": "john@example.com",
"identity_no": "12345678901",
"gender": "M",
"nationality": "TR"
}
],
"flight_code": "TK123",
"flight_date": "2026-08-30",
"flight_time": "14:30",
"notes": "Optional note for audit.",
"driver_notes": null
}{
"success": true,
"message": "Reservation created successfully.",
"data": {
"reservation_code": "OP-20260830-7289",
"operation_id": 192,
"operation_code": "OP-20260830-7289",
"status": "request",
"operation_name": "Fatih to Airport",
"operation_type": "transfer",
"transfer_date": "2026-09-30",
"transfer_time": "14:30",
"from_location": {
"id": 67,
"name": "From",
"full_address": null,
"latitude": "41.0082",
"longitude": "28.9784"
},
"to_location": {
"id": 73,
"name": "To",
"full_address": null,
"latitude": "40.896087341333",
"longitude": "29.312638152151"
},
"passenger_count": 2,
"passengers": [
{
"name": "John Doe",
"phone": "+905555555555",
"email": "john@example.com",
"identity_no": "12345678901",
"gender": "M",
"nationality": "TR"
}
],
"flight": {
"code": "TK123",
"date": "2026-08-30",
"time": "14:30"
},
"contact": {
"name": "John Doe",
"email": "john@example.com",
"phone": "+905555555555",
"whatsapp": "+905555555555"
},
"car_category": {
"id": 1,
"name": "Economy"
},
"customer_currency_code": "EUR",
"driver_currency_code": null,
"price_mark": "fdmfGuju5GPDV0eSrednYm878wGYT6p6F1wcsUHH",
"quote_id": "b133c55d-50bb-42d0-ab9d-86910ccfa366",
"partner_reference": "PARTNER-2026-0001",
"customer_price": 2.05,
"notes": "Optional note for audit.",
"driver_notes": null,
"created_at": "2026-08-30T19:40:24+03:00",
"updated_at": "2026-08-30T19:40:24+03:00",
"return_operation_id": null,
"outbound_operation_id": null
}
}/api/external/v1/reservations/{reservation_code}/information
Updates only low-risk fields on the underlying Operation such as contact, passenger, flight and note information.
{
"name": "John Doe",
"phone": "+905555555555",
"email": "john@example.com",
"whatsapp": "+905555555555",
"passenger_count": 2,
"passengers": [
{
"name": "John Doe",
"phone": "+905555555555",
"email": "john@example.com",
"identity_no": "12345678901",
"gender": "M",
"nationality": "TR"
}
],
"flight_code": "TK123",
"flight_date": "2026-08-30",
"flight_time": "14:30",
"notes": "Updated note."
}{
"success": true,
"message": "Reservation information updated successfully.",
"data": {
"reservation_code": "OP-20260830-7289",
"operation_code": "OP-20260830-7289",
"status": "request",
"operation_name": "Fatih to Airport",
"transfer_date": "2026-09-30T14:30:00+03:00",
"contact": {
"name": "John Doe",
"email": "john@example.com",
"phone": "+905555555555",
"whatsapp": "+905555555555"
}
}
}/api/external/v1/reservations/{reservation_code}
Performs a comprehensive reservation update on the underlying Operation using a fresh price_mark and the same Operation-style payload.
{
"price_mark": "{{price_mark}}",
"car_category_id": 1,
"transfer_type": "roundtrip",
"operation_type": "transfer",
"transfer_date": "2026-08-30",
"transfer_time": "14:30",
"name": "John Doe",
"phone": "+905555555555",
"email": "john@example.com",
"passenger_count": 2,
"passengers": [
{
"name": "John Doe"
}
],
"flight_code": "TK123",
"flight_date": "2026-08-30",
"flight_time": "14:30",
"return_transfer_date": "2026-08-31",
"return_transfer_time": "10:00",
"notes": "Approved change."
}{
"success": true,
"message": "Reservation updated successfully.",
"data": {
"reservation_code": "OP-20260830-7289",
"operation_code": "OP-20260830-7289",
"status": "request",
"operation_name": "Fatih to Airport",
"operation_type": "transfer",
"transfer_date": "2026-09-30",
"transfer_time": "14:30",
"return_transfer_date": "2026-08-31",
"return_transfer_time": "10:00",
"price_mark": "{{price_mark}}",
"partner_reference": "PARTNER-2026-0001"
}
}/api/external/v1/reservations/{reservation_code}/cancel
Cancels the underlying Operation and stores the cancellation reason in the audit trail.
{
"reason": "Customer requested cancellation."
}{
"success": true,
"message": "Reservation cancelled successfully.",
"data": {
"reservation_code": "OP-20260830-7289",
"operation_code": "OP-20260830-7289",
"status": "cancelled",
"operation_name": "Fatih to Airport"
}
}/api/external/v1/reservations/{reservation_code}/summary
Returns partner-safe reservation summary with status, car, driver and tracking availability.
{
"success": true,
"message": "Reservation summary retrieved successfully.",
"data": {
"reservation_code": "OP-20260830-7289",
"operation_code": "OP-20260830-7289",
"status": {
"value": "operation",
"label": "Operation"
},
"operation_event": {
"id": 1,
"name": "Operation",
"slug": "operation",
"color": "#2F80ED"
},
"car": {
"id": 10,
"name": "BMW 5 Series",
"plate": "34ABC123",
"brand": "BMW",
"model": "5 Series",
"year": 2024,
"category": {
"id": 1,
"name": "Economy"
}
},
"driver": {
"id": 13,
"name": "Ahmet",
"surname": "Keskin",
"full_name": "Ahmet Keskin",
"phone": "+905555555555",
"image": null
},
"tracking_available": true,
"latest_location_at": "2026-08-30T19:40:24+03:00"
}
}/api/external/v1/reservations/{reservation_code}/live-location
Returns the latest live location and route context for the reservation.
{
"success": true,
"message": "Live location retrieved successfully.",
"data": {
"reservation_code": "OP-20260830-7289",
"tracking_available": true,
"from": {
"id": 67,
"name": "From",
"latitude": 41.0082,
"longitude": 28.9784
},
"to": {
"id": 73,
"name": "To",
"latitude": 40.896087341333,
"longitude": 29.312638152151
},
"latest_location": {
"latitude": 41.0223,
"longitude": 29.0412,
"timestamp": "2026-08-30T19:42:24+03:00",
"accuracy": 8.4,
"speed": 42.1,
"heading": 95,
"driver_id": 13
}
}
}/api/external/v1/reservations/{reservation_code}/live-location/history
Returns historical live location points.
{
"success": true,
"message": "Live location history retrieved successfully.",
"data": {
"reservation_code": "OP-20260830-7289",
"tracking_available": true,
"location_history": [
{
"latitude": 41.0082,
"longitude": 28.9784,
"timestamp": "2026-08-30T19:40:24+03:00",
"accuracy": 9.1,
"speed": 0,
"heading": 0,
"driver_id": 13
}
]
}
}/api/external/v1/metadata/operation-events
Returns internal operation event definitions.
{
"success": true,
"message": "Metadata retrieved successfully.",
"data": [
{
"id": 1,
"name": "Operation",
"slug": "operation",
"color": "#2F80ED"
},
{
"id": 2,
"name": "Reservation",
"slug": "reservation",
"color": "#10B981"
}
]
}/api/external/v1/metadata/operation-statuses
Returns operation status dictionary.
{
"success": true,
"message": "Metadata retrieved successfully.",
"data": [
{
"value": "request",
"label": "Request"
},
{
"value": "reservation",
"label": "Reservation"
},
{
"value": "operation",
"label": "Operation"
},
{
"value": "cancelled",
"label": "Cancelled"
},
{
"value": "completed",
"label": "Completed"
}
]
}/api/external/v1/metadata/operation-types
Returns operation type dictionary.
{
"success": true,
"message": "Metadata retrieved successfully.",
"data": [
{
"value": "transfer",
"label": "Transfer"
},
{
"value": "shuttle",
"label": "Shuttle"
},
{
"value": "departure",
"label": "Airport Drop-off"
},
{
"value": "arrival",
"label": "Airport Pickup"
},
{
"value": "intercity",
"label": "Intercity"
},
{
"value": "city_transfer",
"label": "City Transfer"
}
]
}/api/external/v1/metadata/transfer-types
Returns partner-facing transfer type options.
{
"success": true,
"message": "Metadata retrieved successfully.",
"data": [
{
"value": "oneway",
"label": "One Way"
},
{
"value": "roundtrip",
"label": "Round Trip"
}
]
}/api/external/v1/metadata/genders
Returns basic passenger gender options.
{
"success": true,
"message": "Metadata retrieved successfully.",
"data": [
{
"value": "M",
"label": "Male"
},
{
"value": "F",
"label": "Female"
}
]
}/api/external/v1/metadata/nationalities
Returns nationality lookup data backed by countries.
{
"Authorization": "Bearer {{token}}",
"Accept": "application/json"
}{
"success": true,
"message": "Metadata retrieved successfully.",
"data": [
{
"id": 1,
"name": "Türkiye",
"name_en": "Turkey",
"code": "TR",
"uetds_code": "TR"
}
]
}/api/external/v1/metadata/car-categories
Returns car categories with trimmed details payload.
{
"success": true,
"message": "Metadata retrieved successfully.",
"data": [
{
"id": 1,
"name": "Economy",
"slug": "economy",
"details": {
"type": "Sedan",
"summary": "Suitable for 1-3 passengers."
}
}
]
}/api/external/v1/metadata/currencies
Returns supported currency definitions.
{
"success": true,
"message": "Metadata retrieved successfully.",
"data": [
{
"id": 1,
"code": "TRY",
"symbol": "₺",
"name": "Turkish Lira"
},
{
"id": 3,
"code": "EUR",
"symbol": "€",
"name": "Euro"
}
]
}/api/external/v1/metadata/countries
Returns country lookup data.
{
"Authorization": "Bearer {{token}}",
"Accept": "application/json"
}{
"success": true,
"message": "Metadata retrieved successfully.",
"data": [
{
"id": 1,
"name": "Türkiye",
"name_en": "Turkey",
"code": "TR",
"uetds_code": "TR"
}
]
}/api/external/v1/metadata/cities
Returns city lookup data.
{
"Authorization": "Bearer {{token}}",
"Accept": "application/json"
}{
"success": true,
"message": "Metadata retrieved successfully.",
"data": [
{
"id": 1,
"name": "İstanbul",
"country_id": 1,
"uetds_code": "34"
}
]
}