Vitt Taxi

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.

Postman Koleksiyonunu İndir
POST /api/external/v1/auth/login

Login with username and password. Returns the Bearer token, abilities and linked user/current payload.

İstek
{
    "username": "customer",
    "password": "secret-password"
}
Success Response
{
    "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": []
            }
        }
    }
}
Fail Response
{
    "success": false,
    "message": "Username or password is invalid."
}
GET /api/external/v1/auth/me

Returns the authenticated partner user, linked current and token abilities.

İstek Başlıkları
{
    "Authorization": "Bearer {{token}}",
    "Accept": "application/json"
}
Success Response
{
    "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"
        ]
    }
}
POST /api/external/v1/auth/refresh

Refreshes the current Bearer token and keeps the same abilities.

İstek Başlıkları
{
    "Authorization": "Bearer {{token}}",
    "Accept": "application/json"
}
Success Response
{
    "success": true,
    "message": "Token refreshed.",
    "data": {
        "token": "45|YCpg5wOjiBIWMg3ZlAs38aS8hPzlcs150TW5yHAjd43d5e30",
        "token_type": "Bearer",
        "abilities": [
            "external-api"
        ]
    }
}
POST /api/external/v1/auth/logout

Deletes the active partner token.

İstek Başlıkları
{
    "Authorization": "Bearer {{token}}",
    "Accept": "application/json"
}
Success Response
{
    "success": true,
    "message": "Logout successful."
}
POST /api/external/v1/quotes/search

Nested from/to payloads are used for polygon-based pricing. Optional location metadata can also persist a location record.

İstek
{
    "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."
}
Current Response Shape
{
    "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": "€"
            }
        }
    ]
}
Yanıt Notları
  • 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.
GET /api/external/v1/quotes/{identifier}

Returns a stored quote by identifier. The identifier can resolve either a price_mark or a quote_id.

Success Response
{
    "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": "€"
                }
            }
        ]
    }
}
POST /api/external/v1/quotes/{identifier}/validate

Checks whether the stored quote is still active and unexpired.

Success Response
{
    "success": true,
    "message": "Quote validation successful.",
    "data": {
        "price_mark": "NqOJgIOkHaqy81NEk9qLRV7yvAHXYpxfQ19A3WcG",
        "price_mark_expires_at": "2026-08-30T18:54:02+03:00",
        "is_valid": true
    }
}
POST /api/external/v1/quotes/{identifier}/refresh

Reprices the stored quote and returns a new price mark.

Success Response
{
    "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"
    }
}
POST /api/external/v1/reservations

Creates the partner-facing reservation and persists it as an internal Operation from an active price_mark.

İstek
{
    "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 Response
{
    "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
    }
}
PATCH /api/external/v1/reservations/{reservation_code}/information

Updates only low-risk fields on the underlying Operation such as contact, passenger, flight and note information.

İstek
{
    "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 Response
{
    "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"
        }
    }
}
PATCH /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.

İstek
{
    "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 Response
{
    "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"
    }
}
POST /api/external/v1/reservations/{reservation_code}/cancel

Cancels the underlying Operation and stores the cancellation reason in the audit trail.

İstek
{
    "reason": "Customer requested cancellation."
}
Success Response
{
    "success": true,
    "message": "Reservation cancelled successfully.",
    "data": {
        "reservation_code": "OP-20260830-7289",
        "operation_code": "OP-20260830-7289",
        "status": "cancelled",
        "operation_name": "Fatih to Airport"
    }
}
GET /api/external/v1/reservations/{reservation_code}/summary

Returns partner-safe reservation summary with status, car, driver and tracking availability.

Success Response
{
    "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"
    }
}
GET /api/external/v1/reservations/{reservation_code}/live-location

Returns the latest live location and route context for the reservation.

Success Response
{
    "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
        }
    }
}
GET /api/external/v1/reservations/{reservation_code}/live-location/history

Returns historical live location points.

Success Response
{
    "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
            }
        ]
    }
}
GET /api/external/v1/metadata/operation-events

Returns internal operation event definitions.

Success Response
{
    "success": true,
    "message": "Metadata retrieved successfully.",
    "data": [
        {
            "id": 1,
            "name": "Operation",
            "slug": "operation",
            "color": "#2F80ED"
        },
        {
            "id": 2,
            "name": "Reservation",
            "slug": "reservation",
            "color": "#10B981"
        }
    ]
}
GET /api/external/v1/metadata/operation-statuses

Returns operation status dictionary.

Success Response
{
    "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"
        }
    ]
}
GET /api/external/v1/metadata/operation-types

Returns operation type dictionary.

Success Response
{
    "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"
        }
    ]
}
GET /api/external/v1/metadata/transfer-types

Returns partner-facing transfer type options.

Success Response
{
    "success": true,
    "message": "Metadata retrieved successfully.",
    "data": [
        {
            "value": "oneway",
            "label": "One Way"
        },
        {
            "value": "roundtrip",
            "label": "Round Trip"
        }
    ]
}
GET /api/external/v1/metadata/genders

Returns basic passenger gender options.

Success Response
{
    "success": true,
    "message": "Metadata retrieved successfully.",
    "data": [
        {
            "value": "M",
            "label": "Male"
        },
        {
            "value": "F",
            "label": "Female"
        }
    ]
}
GET /api/external/v1/metadata/nationalities

Returns nationality lookup data backed by countries.

İstek Başlıkları
{
    "Authorization": "Bearer {{token}}",
    "Accept": "application/json"
}
Success Response
{
    "success": true,
    "message": "Metadata retrieved successfully.",
    "data": [
        {
            "id": 1,
            "name": "Türkiye",
            "name_en": "Turkey",
            "code": "TR",
            "uetds_code": "TR"
        }
    ]
}
GET /api/external/v1/metadata/car-categories

Returns car categories with trimmed details payload.

Success Response
{
    "success": true,
    "message": "Metadata retrieved successfully.",
    "data": [
        {
            "id": 1,
            "name": "Economy",
            "slug": "economy",
            "details": {
                "type": "Sedan",
                "summary": "Suitable for 1-3 passengers."
            }
        }
    ]
}
GET /api/external/v1/metadata/currencies

Returns supported currency definitions.

Success Response
{
    "success": true,
    "message": "Metadata retrieved successfully.",
    "data": [
        {
            "id": 1,
            "code": "TRY",
            "symbol": "₺",
            "name": "Turkish Lira"
        },
        {
            "id": 3,
            "code": "EUR",
            "symbol": "€",
            "name": "Euro"
        }
    ]
}
GET /api/external/v1/metadata/countries

Returns country lookup data.

İstek Başlıkları
{
    "Authorization": "Bearer {{token}}",
    "Accept": "application/json"
}
Success Response
{
    "success": true,
    "message": "Metadata retrieved successfully.",
    "data": [
        {
            "id": 1,
            "name": "Türkiye",
            "name_en": "Turkey",
            "code": "TR",
            "uetds_code": "TR"
        }
    ]
}
GET /api/external/v1/metadata/cities

Returns city lookup data.

İstek Başlıkları
{
    "Authorization": "Bearer {{token}}",
    "Accept": "application/json"
}
Success Response
{
    "success": true,
    "message": "Metadata retrieved successfully.",
    "data": [
        {
            "id": 1,
            "name": "İstanbul",
            "country_id": 1,
            "uetds_code": "34"
        }
    ]
}