openapi: 3.0.3
servers:
  - url: https://app-dev.vigo.ist/api/v2
    description: Development server
  - url: https://app.vigo.ist/api/v2
    description: Production server
info:
  title: Vigo API Dokümantasyonu
  description: >

    Bu dökümantasyon, **Vigo API** sürümüne ait endpointleri ve entegrasyon
    detaylarını içermektedir. API, sipariş yönetimi ve sistemler arası veri
    entegrasyonu gibi işlevler için kullanılabilir.


    ---

    <b>İletişim</b> <br><br>

    Başvuru ve sorularınız için <b>integration@vigo.ist</b> adresine mail
    iletebilirsiniz.
  version: ''
  contact:
    name: Vigo Integration Support
    email: integration@vigo.ist
tags:
  - name: Kimlik Doğrulama
    description: >-
      Kimlik ve Yetkilendirme ile ilgili işlemleri içermektedir. <hr> API'yi
      kullanabilmek için bir erişim token'ı alınmalıdır. Hesabınız
      oluşturulduğunda size özel **clientId** ve **clientSecret** bilgileri
      e-posta yoluyla iletilir. Bu bilgiler kullanılarak token alınması
      gerekmektedir.

      <br>Token alındıktan sonra, tüm yetkili isteklerde header bilgisi içinde
      `x-auth-token` key'i ile iletilmelidir.
  - name: Sipariş
    description: >-
      Sipariş ile ilgili işlemleri içermektedir. Sipariş için gerekli olan statü
      güncelleme işlemleri için bu endpointleri inceleyebilirsiniz.
  - name: Alım Noktası
    description: >-
      Siparişlerin kurye tarafından alınacağı noktayı ifade eder

      <br><br> Mevcut `pickUp onboardingStatus` (alım noktası durumları)
      değerleri:
        - candidate (Aday)
        - approved (Onaylandı)
        - rejected (Reddedildi)
        - pending (Belge Onay Bekliyor)
  - name: Sipariş Geri Bildirimleri
    description: Tarafınıza iletilen callback örnekleri içermektedir.
paths:
  /auth/token:
    post:
      operationId: token-alma
      summary: Token Alma
      description: >
        Vigo API endpointlerine istek atabilmek için  gerekli olan token'ı bu
        endpoint üzerinden alabilir.<br>
      tags:
        - Kimlik Doğrulama
      security: []
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
              properties:
                clientId:
                  type: string
                  description: Api kullanıcısının kimliği
                clientSecret:
                  type: string
                  description: Api kullanıcısının gizli anahtarı
              required:
                - clientId
                - clientSecret
      responses:
        '200':
          description: Token başarılı bir şekilde yaratıldı.
          content:
            application/json:
              schema:
                type: object
                properties:
                  token:
                    type: string
                    description: Anahtar bilgisi
                  expiresAt:
                    type: integer
                    description: >-
                      Timestamp formatında token geçerliliğinin sonlanma zaman
                      bilgisi
        '400':
          description: Hatalı İstek - Client ID ya da Secret eksik ya da hatalı
          content:
            application/json:
              schema:
                type: object
                properties:
                  message:
                    type: string
                    example: Hata Mesajı
  /order:
    post:
      tags:
        - Sipariş
      security:
        - XAuthToken: []
      operationId: siparis-olusturma
      summary: Sipariş Oluşturma
      description: >
        Bu endpoint sipariş oluşturmanız için kullanılmaktadır.

        Oluşturulan sipariş bir kuryeye atanır ve kurye siparişi alım
        noktasından teslim alır.

        Teslim alma işlemi tamamlandıktan sonra sipariş müşteriye teslim edilmek
        üzere yola çıkar.

        Bazı durumlarda, kurye teslim alma noktasına bazı ürünleri geri bırakmak
        için dönebilir.

        <br><br>Endpoint Özellikleri:

        - Siparişler, birden çok ürün içerebilir.

        - Teslimat sırasında kurye ürün iade edilmesi üzerine  bir bildirim
        alırsa iade süreci başlatılabilir.

        - **Sipariş Geri Bildirimleri**  için url paylaşmanız durumunda,
        teslimat ile ilgili  statü güncellemeleri tarafınıza bildirilecektir.
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/OrderRequest'
            examples:
              basic:
                $ref: '#/components/examples/body-post-delivery-basic'
              without-location:
                $ref: '#/components/examples/body-post-without-location'
              pickup-to-pickup:
                $ref: >-
                  #/components/examples/body-post-delivery-receiver-pickup-point-id
              return-product:
                $ref: '#/components/examples/body-post-delivery-return-product'
      responses:
        '200':
          description: |
            Başarılı Sipariş Oluşturma Response'u
          content:
            application/json:
              schema:
                type: object
                properties:
                  order:
                    type: object
                    properties:
                      id:
                        $ref: '#/components/schemas/ID'
                      orderNumber:
                        type: string
                      state:
                        type: string
                        example: inQueue
                  serverTime:
                    $ref: '#/components/schemas/ServerTime'
              examples:
                sample:
                  summary: Örnek Sipariş Cevabı
                  value:
                    order:
                      id: 627d0a69dc1f4a3d10ff5db5
                      orderNumber: '12345'
                      state: inQueue
                    serverTime: '2022-05-12T13:23:54.632Z'
        '400':
          description: Sipariş Oluşturulamadı
          content:
            application/json:
              schema:
                type: object
                properties:
                  message:
                    type: string
                    example: Hata Mesajı
        '401':
          $ref: '#/components/responses/401Error'
    get:
      tags:
        - Sipariş
      security:
        - XAuthToken: []
      operationId: siparis-bilgisi
      summary: Sipariş Bilgisi (OrderId veya OrderNumber İle)
      description: id veya orderNumber parametrelerinden en az biri zorunludur.
      parameters:
        - in: query
          name: id
          required: false
          schema:
            type: string
            description: Sipariş Kimliği
            example: 57954c6f02182308d7000008
        - in: query
          name: orderNumber
          required: false
          schema:
            type: string
            description: Sipariş Numarası
            example: 123456
      responses:
        '200':
          description: |
            Teslimat Bilgisi
          content:
            application/json:
              schema:
                type: object
                properties:
                  pickupPointState:
                    type: object
                    properties:
                      index:
                        type: integer
                      name:
                        type: string
                      state:
                        type: string
                        enum:
                          - waiting
                          - picked
                  orderState:
                    type: object
                    properties:
                      index:
                        type: integer
                      receiverName:
                        type: string
                        example: mehmet
                      state:
                        type: string
                        enum:
                          - waitingForDelivery
                          - delivered
                          - reOrdered
                          - waitingForReturn
                          - returned
                          - canceled
                          - onDelivery
                          - onDeliveryAddress
                      orderPrice:
                        type: number
                  stepStates:
                    type: array
                    items:
                      type: object
                      properties:
                        index:
                          type: integer
                        deliveryState:
                          type: string
                          enum:
                            - waiting
                            - onTheWayForPickUp
                            - onPickUpAddress
                            - onDelivery
                            - onDeliveryAddress
                            - onTheWayForReturn
                            - onReturnAddress
                            - onTheWayForTransfer
                            - onTransferAddress
                            - inQueue
                        startDate:
                          type: string
                          example: 05-03-2021 18:26:48
                        endDate:
                          type: string
                          example: 05-03-2021 19:26:48
                  courierLocation:
                    $ref: '#/components/schemas/Location'
                  serverTime:
                    $ref: '#/components/schemas/ServerTime'
              examples:
                inQueue:
                  $ref: '#/components/examples/get-delivery-200-inqueue'
        '400':
          description: Hata
          content:
            application/json:
              schema:
                type: object
        '401':
          $ref: '#/components/responses/401Error'
  /order/cancel:
    put:
      tags:
        - Sipariş
      security:
        - XAuthToken: []
      operationId: siparis-iptal
      summary: Sipariş İptali
      parameters:
        - in: query
          name: id
          schema:
            type: string
            example: 57954c6f02182308d7000008
          description: >
            Sipariş Kimliği;

            bu parametre `orderNumber` parametresi ile birlikte
            gönderilmemelidir.
        - in: query
          name: orderNumber
          schema:
            type: string
            example: 123456
          description: |
            Sipariş Numarası;
            bu parametre `id` parametresi ile birlikte gönderilmemelidir.
        - in: query
          name: cancelText
          schema:
            type: string
            example: Siparişteki ürünler stokta kalmadı.
          description: |
            İptal sebebi.
      responses:
        '200':
          description: |
            Sipariş İptal Bilgisi
          content:
            application/json:
              schema:
                type: object
                properties:
                  success:
                    type: boolean
                    example: true
                  message:
                    type: string
                    example: Sipariş iptal edildi
        '400':
          description: Hata
          content:
            application/json:
              schema:
                type: object
                properties:
                  message:
                    type: string
                    example: Hata Mesajı
        '401':
          $ref: '#/components/responses/401Error'
  /order/prepared:
    put:
      tags:
        - Sipariş
      security:
        - XAuthToken: []
      operationId: siparis-hazirlandi
      summary: Sipariş Hazırlandı
      parameters:
        - in: query
          name: id
          schema:
            type: string
            example: 57954c6f02182308d7000008
          description: >
            Sipariş Kimliği.

            Bu parametre `orderNumber` parametresi ile birlikte
            gönderilmemelidir.
        - in: query
          name: orderNumber
          schema:
            type: string
            example: 123456
          description: |
            Sipariş Numarası.
            Bu parametre `id` parametresi ile birlikte gönderilmemelidir.
      responses:
        '200':
          description: |
            Sipariş Hazırlandı Bilgisi
          content:
            application/json:
              schema:
                type: object
                properties:
                  success:
                    type: boolean
                    example: true
                  message:
                    type: string
                    example: Sipariş hazırlandı
        '400':
          description: Hata
          content:
            application/json:
              schema:
                type: object
                properties:
                  message:
                    type: string
                    example: Hata Mesajı
        '401':
          $ref: '#/components/responses/401Error'
  /pickupPoint:
    post:
      operationId: alim-noktasi-olusturma
      security:
        - XAuthToken: []
      tags:
        - Alım Noktası
      summary: Alım Noktası Oluşturma
      description: >
        Sipariş isteği sadece önceden tanımlı ve onaylı alım noktaları için
        yapılmalıdır. 

        Başarılı sipariş isteği için mutlaka alım noktası yaratmalısınız ve 

        alım noktanızın durumunun aktif olması gereklidir.
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
              properties:
                name:
                  type: string
                  description: Pickup Noktası Adı
                  example: Test şubesi
                address:
                  type: string
                  description: Pickup Noktası Adresi
                  example: Kadıköy Kozyatağı Gelişim Sokak No:12
                city:
                  type: string
                  description: Şehir Bilgisi
                  example: İstanbul
                district:
                  type: string
                  description: İlçe Bilgisi
                  example: Kadıköy
                location:
                  type: object
                  description: Konum bilgisi
                  properties:
                    longitude:
                      type: number
                      example: 42
                    latitude:
                      type: number
                      example: 42
                  required:
                    - longitude
                    - latitude
                authorizedPhone:
                  type: string
                  description: Yetkili telefon numarası
                  example: 5320000000
                authorizedEmail:
                  type: string
                  description: Yetkili e-posta adresi
                  example: ornek@firma.com
                callback:
                  type: object
                  description: >
                    Durum güncellemelerinde bildirim yapılacak callback
                    bilgileri.


                    Eğer callback bilgisi iletilirse, pickup noktası
                    **onaylandığında**, aşağıdaki body ile `POST` methodu
                    kullanılarak belirtilen `url`'e bir istek gönderilir:


                    ```json

                    {
                      "id": "6881e2c77d092a3b9377f048",
                      "externalId": "externalId95",
                      "onboardingStatus": "approved",
                      "name": "fındık - Test - pickuptest955",
                      "city": "istanbul",
                      "district": "Fındıklı",
                      "authorizedEmail": "test@mail.vigo",
                      "authorizedPhone": "05327981731",
                      "address": "fındıklı mahallesi senem sokak no:39-31",
                      "location": {
                        "latitude": 40.9735869,
                        "longitude": 29.1393237
                      },
                      "serverTime": "2025-07-24T07:39:17.929Z"
                    }

                    ```
                  properties:
                    url:
                      type: string
                      example: https://ornek-callback.com/pickup-status
                    tokenHeader:
                      type: string
                      example: Authorization
                    token:
                      type: string
                      example: Bearer abcdef123456
                externalId:
                  type: string
                  description: Dış sistemdeki referans ID
                  example: EXT123456
              required:
                - name
                - authorizedPhone
                - authorizedEmail
      responses:
        '200':
          description: Başarılı
          content:
            application/json:
              schema:
                type: object
                properties:
                  success:
                    type: boolean
                    example: true
                  message:
                    type: string
                    example: Pick up noktası oluşturuldu
        '400':
          description: Hata
          content:
            application/json:
              schema:
                type: object
                properties:
                  message:
                    type: string
              examples:
                invalidRequest:
                  summary: İsim zaten mevcut
                  value:
                    message: Bu isimde alım noktası zaten bulunmaktadır
                missingField:
                  summary: External Id Zaten Mevcut
                  value:
                    message: Bu external ID zaten mevcut
                unauthorized:
                  summary: Genel Hata
                  value:
                    message: Pick up noktası oluşturulamadı
        '401':
          $ref: '#/components/responses/401Error'
    get:
      operationId: alim-noktasi-listeleme
      security:
        - XAuthToken: []
      tags:
        - Alım Noktası
      summary: Alım Noktaları Listeleme
      description: |
        Sistemde kayıtlı olan alım noktalarınız ile ilgili ayrıntıları 
        bu endpoint'in response'unda görebilirsiniz.
      responses:
        '200':
          description: Başarılı
          content:
            application/json:
              schema:
                type: object
                properties:
                  pickupPoints:
                    type: array
                    items:
                      type: object
                      properties:
                        id:
                          type: string
                          example: 6881dcf9219d5b001e54d17a
                        externalId:
                          type: string
                          example: '123'
                        onboardingStatus:
                          type: string
                          enum:
                            - candidate
                            - approved
                            - rejected
                            - pending
                          example: candidate
                        name:
                          type: string
                          example: string
                        city:
                          type: string
                          example: guria
                        district:
                          type: string
                          example: ''
                        authorizedEmail:
                          type: string
                          example: string
                        authorizedPhone:
                          type: string
                          example: string
                        location:
                          type: object
                          properties:
                            longitude:
                              type: number
                              example: 42
                            latitude:
                              type: number
                              example: 42
                        address:
                          type: string
                          example: string
                  serverTime:
                    type: string
                    format: date-time
                    example: '2025-07-24T09:22:08.546Z'
        '400':
          description: Hata
          content:
            application/json:
              schema:
                type: object
                properties:
                  message:
                    type: string
                    example: Hata Mesajı
        '401':
          $ref: '#/components/responses/401Error'
  /pickupPoint/{id}/calculatePrice:
    post:
      tags:
        - Alım Noktası
      security:
        - XAuthToken: []
      operationId: fiyat-hesaplama
      summary: Alım Noktası Fiyat Hesaplama
      parameters:
        - in: path
          name: id
          required: true
          schema:
            type: string
            example: 6881dcf9219d5b001e54d17a
          description: Alım Noktası Id
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
              properties:
                receiver:
                  type: object
                  properties:
                    address:
                      type: string
                      example: Gülbahar Mahallesi, Şahinler sokak, Şişli, İstanbul
                    location:
                      type: object
                      properties:
                        latitude:
                          type: number
                          example: 41.012345
                        longitude:
                          type: number
                          example: 28.987654
                      required:
                        - latitude
                        - longitude
                  required:
                    - location
              required:
                - receiver
      responses:
        '200':
          description: Başarılı
          content:
            application/json:
              schema:
                type: object
                properties:
                  price:
                    type: number
                    example: 100
        '400':
          description: Hata
          content:
            application/json:
              schema:
                type: object
                properties:
                  message:
                    type: string
                    example: Hata Mesajı
        '401':
          $ref: '#/components/responses/401Error'
  /__examples/delivery-callbacks:
    post:
      security:
        - SampleCallbackHeader: []
      summary: '[Mock] Sipariş Geri Bildirimleri'
      tags:
        - Sipariş Geri Bildirimleri
      description: >
        ⚠️ **Not:** Bu endpoint sadece API dokümantasyonumuzda ilettiğimiz örnek
        callback'leri göstermek içindir.  

        Gerçek bir API çağrısı değildir. Payload'lar sistemimiz tarafından
        ilettiğiniz callback endpointine gönderilir.

        <hr>

        <b>Düzenli durumlar:</b> Bir siparişin normal akışında bu durumlar
        sırayla iletilir.

        <ul>

        <li>inQueue</li>

        <li>waiting</li>

        <li>onTheWayForPickUp</li>

        <li>onPickUpAddress</li>

        <li>onDelivery</li>

        <li>onDeliveryAddress</li>

        <li>delivered</li>

        </ul>

        <b>İade Durumları:</b> Siparişin teslim alınıp yoldayken iptal edilme
        durumları. Siparişi kurye teslim aldıktan sonra teslim edene kadar bu
        durumlar iletilebilir.

        <ul>

        <li>waitingForReturn</li>

        <li>onTheWayForReturn</li>

        <li>onReturnAddress</li>

        <li>returned</li>

        </ul>

        <b>Transfer Durumları:</b> Siparişin başka kuryeye transfer edilme
        durumları. Siparişi kurye teslim aldıktan sonra teslim edene kadar bu
        durumlar iletilebilir.

        <ul>

        <li>waitingForTransfer</li>

        <li>onTheWayForTransfer</li>

        <li>onTransferAddress</li>

        </ul>

        <b>İptal Durumları:</b> Sipariş herhangi bir durumda iken bu durum
        gelebilir.

        <ul>

        <li>canceled</li>

        </ul>
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/DeliveryCallback'
            examples:
              inQueue:
                summary: inQueue
                description: Sipariş oluşturuldu, kuryeye atanmayı bekliyor.
                value:
                  order:
                    id: 627e56856649f152aa31f385
                    orderNumber: '12345'
                    state: inQueue
                    description: ''
                    platform: trendyol
                    tracking:
                      url: ''
                      shortURL: ''
                    assignedCourier: null
                  serverTime: '2022-05-13T13:01:14.946Z'
              waiting:
                summary: waiting
                description: Sipariş kuryeye atandı, kurye onayı bekliyor.
                value:
                  order:
                    id: 627e56856649f152aa31f385
                    orderNumber: '12345'
                    state: waiting
                    description: ''
                    platform: trendyol
                    tracking:
                      url: ''
                      shortURL: ''
                    assignedCourier:
                      fullname: Fırat Taşkın
                      location:
                        lat: 41.015137
                        lon: 28.97953
                  serverTime: '2022-05-13T13:01:14.946Z'
              onTheWayForPickUp:
                summary: onTheWayForPickUp
                description: Kurye paketleri almak için yola çıktı.
                value:
                  order:
                    id: 627e56856649f152aa31f385
                    orderNumber: '12345'
                    state: onTheWayForPickUp
                    description: ''
                    platform: trendyol
                    tracking:
                      url: ''
                      shortURL: ''
                    assignedCourier:
                      fullname: Fırat Taşkın
                      location:
                        lat: 41.015137
                        lon: 28.97953
                  serverTime: '2022-05-13T13:01:14.946Z'
              onPickUpAddress:
                summary: onPickUpAddress
                description: Kurye alım noktasında.
                value:
                  order:
                    id: 627e56856649f152aa31f385
                    orderNumber: '12345'
                    state: onPickUpAddress
                    description: ''
                    platform: trendyol
                    tracking:
                      url: ''
                      shortURL: ''
                    assignedCourier:
                      fullname: Fırat Taşkın
                      location:
                        lat: 41.015137
                        lon: 28.97953
                  serverTime: '2022-05-13T13:01:14.946Z'
              onDelivery:
                summary: onDelivery
                description: Kurye paketleri teslim etmek için yola çıktı.
                value:
                  order:
                    id: 627e56856649f152aa31f385
                    orderNumber: '12345'
                    state: onDelivery
                    description: ''
                    platform: trendyol
                    tracking:
                      url: ''
                      shortURL: ''
                    assignedCourier:
                      fullname: Fırat Taşkın
                      location:
                        lat: 41.015137
                        lon: 28.97953
                  serverTime: '2022-05-13T13:01:14.946Z'
              onDeliveryAddress:
                summary: onDeliveryAddress
                description: Kurye teslim noktasında.
                value:
                  order:
                    id: 627e56856649f152aa31f385
                    orderNumber: '12345'
                    state: onDeliveryAddress
                    description: ''
                    platform: trendyol
                    tracking:
                      url: ''
                      shortURL: ''
                    assignedCourier:
                      fullname: Fırat Taşkın
                      location:
                        lat: 41.015137
                        lon: 28.97953
                  serverTime: '2022-05-13T13:01:14.946Z'
              delivered:
                summary: delivered
                description: Kurye paketleri teslim etti.
                value:
                  order:
                    id: 627e56856649f152aa31f385
                    orderNumber: '12345'
                    state: delivered
                    description: ''
                    platform: trendyol
                    tracking:
                      url: ''
                      shortURL: ''
                    assignedCourier:
                      fullname: Fırat Taşkın
                      location:
                        lat: 41.015137
                        lon: 28.97953
                  serverTime: '2022-05-13T13:01:14.946Z'
              waitingForReturn:
                summary: waitingForReturn
                description: Kurye paketleri iade etmeyi onaylanması bekleniyor.
                value:
                  order:
                    id: 627e56856649f152aa31f385
                    orderNumber: '12345'
                    state: waitingForReturn
                    description: ''
                    platform: trendyol
                    tracking:
                      url: ''
                      shortURL: ''
                    assignedCourier:
                      fullname: Fırat Taşkın
                      location:
                        lat: 41.015137
                        lon: 28.97953
                  serverTime: '2022-05-13T13:01:14.946Z'
              onTheWayForReturn:
                summary: onTheWayForReturn
                description: Kurye paketleri iade etmek için yola çıktı.
                value:
                  order:
                    id: 627e56856649f152aa31f385
                    orderNumber: '12345'
                    state: waitingForReturn
                    description: ''
                    platform: trendyol
                    tracking:
                      url: ''
                      shortURL: ''
                    assignedCourier:
                      fullname: Fırat Taşkın
                      location:
                        lat: 41.015137
                        lon: 28.97953
                  serverTime: '2022-05-13T13:01:14.946Z'
              onReturnAddress:
                summary: onReturnAddress
                description: Kurye iade noktasında.
                value:
                  order:
                    id: 627e56856649f152aa31f385
                    orderNumber: '12345'
                    state: onReturnAddress
                    description: ''
                    platform: trendyol
                    tracking:
                      url: ''
                      shortURL: ''
                    assignedCourier:
                      fullname: Fırat Taşkın
                      location:
                        lat: 41.015137
                        lon: 28.97953
                  serverTime: '2022-05-13T13:01:14.946Z'
              returned:
                summary: returned
                description: Kurye paketleri iade etti.
                value:
                  order:
                    id: 627e56856649f152aa31f385
                    orderNumber: '12345'
                    state: returned
                    description: ''
                    platform: trendyol
                    tracking:
                      url: ''
                      shortURL: ''
                    assignedCourier:
                      fullname: Fırat Taşkın
                      location:
                        lat: 41.015137
                        lon: 28.97953
                  serverTime: '2022-05-13T13:01:14.946Z'
              waitingForTransfer:
                summary: waitingForTransfer
                description: Sipariş başka kuryeye transfer bekliyor.
                value:
                  order:
                    id: 627e56856649f152aa31f385
                    orderNumber: '12345'
                    state: waitingForTransfer
                    description: ''
                    platform: trendyol
                    tracking:
                      url: ''
                      shortURL: ''
                    assignedCourier:
                      fullname: Fırat Taşkın
                      location:
                        lat: 41.015137
                        lon: 28.97953
                  serverTime: '2022-05-13T13:01:14.946Z'
              onTheWayForTransfer:
                summary: onTheWayForTransfer
                description: Transfer edilen kurye yola çıktı.
                value:
                  order:
                    id: 627e56856649f152aa31f385
                    orderNumber: '12345'
                    state: onTheWayForTransfer
                    description: ''
                    platform: trendyol
                    tracking:
                      url: ''
                      shortURL: ''
                    assignedCourier:
                      fullname: Fırat Taşkın
                      location:
                        lat: 41.015137
                        lon: 28.97953
                  serverTime: '2022-05-13T13:01:14.946Z'
              onTransferAddress:
                summary: onTransferAddress
                description: Tranfer edilen kurye transfer adresinde.
                value:
                  order:
                    id: 627e56856649f152aa31f385
                    orderNumber: '12345'
                    state: onTransferAddress
                    description: ''
                    platform: trendyol
                    tracking:
                      url: ''
                      shortURL: ''
                    assignedCourier:
                      fullname: Fırat Taşkın
                      location:
                        lat: 41.015137
                        lon: 28.97953
                  serverTime: '2022-05-13T13:01:14.946Z'
              canceled:
                summary: canceled
                description: Sipariş iptal edildi.
                value:
                  order:
                    id: 627e56856649f152aa31f385
                    orderNumber: '12345'
                    state: canceled
                    description: İptal Sebebi
                    tracking:
                      url: ''
                      shortURL: ''
                    assignedCourier:
                      fullname: Fırat Taşkın
                      location:
                        lat: 41.015137
                        lon: 28.97953
                  serverTime: '2022-05-13T13:01:14.946Z'
      responses:
        '200':
          description: Başarılı response. Vigo için callback iletildi anlamına gelmektedir.
        '400':
          description: Başarısız response. Vigo callback göndermeyi tekrar deneyecek.
components:
  securitySchemes:
    SampleCallbackHeader:
      type: apiKey
      in: header
      name: SampleCallbackHeader
      description: >
        Yeni sipariş isteğinde ilettiğiniz callback bilgisi burada
        kullanılacaktır.<br>   Header key: `callback.tokenHeader` <br>  Header
        value: `callback.token`<br><br><hr>
    XAuthToken:
      type: apiKey
      in: header
      name: x-auth-token
  schemas:
    OrderRequest:
      type: object
      properties:
        pickupPoint:
          type: object
          anyOf:
            - $ref: '#/components/schemas/PickupPoint'
            - $ref: '#/components/schemas/SavedPickupPoint'
        courierType:
          $ref: '#/components/schemas/CourierType'
        orderType:
          description: >-
            Bu alan siparişin normal bir sipariş mi yoksa siparişin iade mi
            olduğunu anlamak için kullanılır.
          type: string
          default: delivery
          enum:
            - delivery
            - productReturn
        callback:
          description: Teslimat Süreçleri için Geri Bildirim
          type: object
          properties:
            url:
              type: string
              description: url için callback
              example: http://callbackurl.example.com
            token:
              type: string
              description: Token Callback
              example: XXXYYYXXXVVVZZZ
            tokenHeader:
              type: string
              description: header key için token
              example: x-api-key
          required:
            - url
            - token
            - tokenHeader
        orderNumber:
          type: string
        note:
          type: string
        desi:
          type: number
          minimum: 0.001
        paymentType:
          type: string
          description: |
            Payment type enum alanları:

            - `paid`: Paid

            - `creditCard`: Credit Card

            - `cash`: Cash

            - `ticketRestaurant`: Ticket Restaurant

            - `sodexo`: Sodexo

            - `multinet`: Multinet

            - `setCard`: SetCard

            - `yemekmatik`: Yemekmatik

            - `metropol`: Metropol

            - `cioCard`: CIO Card

            - `paye`: Paye Card

            - `winWin`: WinWin

            - `tokenFlex`: TokenFlex
        paymentMethod:
          type: string
          enum:
            - cod
            - online
          description: >
            Kapıda ödeme almak istiyorsanız, "cod" ödeme yöntemini göndermeniz
            zorunludur.

            - `online`: Ödeme kredi/banka kartı veya dijital cüzdan aracılığıyla
            online olarak tamamlanır.

            - `cod`: Kapıda Ödeme; sipariş teslim edildiği zaman müşteriden
            tahsil edilir.
        price:
          type: string
        dontRingTheBell:
          type: boolean
        barcode:
          type: string
        receiptNumber:
          type: string
        platform:
          type: string
        products:
          type: array
          items:
            $ref: '#/components/schemas/Product'
      required:
        - pickupPoint
        - courierType
        - orderType
        - orderNumber
        - paymentType
        - paymentMethod
        - platform
        - products
      oneOf:
        - $ref: '#/components/schemas/WithoutPickupPoint'
        - $ref: '#/components/schemas/WithPickupPoint'
    DeliveryCallback:
      type: object
      properties:
        order:
          type: object
          properties:
            id:
              type: string
            orderNumber:
              type: string
            state:
              type: string
            description:
              type: string
            platform:
              type: string
            tracking:
              type: object
              properties:
                url:
                  type: string
                shortURL:
                  type: string
            assignedCourier:
              type: object
              nullable: true
              properties:
                fullname:
                  type: string
                location:
                  type: object
                  properties:
                    lat:
                      type: number
                    lon:
                      type: number
        serverTime:
          type: string
          format: date-time
    CourierType:
      type: string
      description: Belirtilen kurye seçenekleri
      enum:
        - motorCourier
        - carCourier
        - pedestrian
        - bicycleCourier
    Location:
      type: object
      properties:
        longitude:
          type: number
          example: 45.2345
        latitude:
          type: number
          example: 45.2345
      required:
        - longitude
        - latitude
    LocationForReceiver:
      type: object
      properties:
        lat:
          type: number
          example: 45.2345
        lon:
          type: number
          example: 45.2345
      required:
        - lat
        - lon
    PickupPoint:
      title: Belirsiz alım noktası
      type: object
      properties:
        name:
          type: string
        address:
          type: string
        location:
          $ref: '#/components/schemas/Location'
        phone:
          type: string
          example: '05323456789'
      required:
        - index
        - name
        - address
        - location
        - phone
    SavedPickupPoint:
      title: Kayıtlı Alım Noktası
      oneOf:
        - type: object
          properties:
            id:
              $ref: '#/components/schemas/ID'
          required:
            - id
        - type: object
          properties:
            externalId:
              type: string
          required:
            - externalId
    WithPickupPoint:
      title: '-> Alım Noktasına'
      type: object
      properties:
        receiverPickupPointId:
          type: string
        receiverPickupPointExternalId:
          type: string
      oneOf:
        - title: Pickup Point ID ile
          required:
            - receiverPickupPointId
          type: object
          properties:
            receiverPickupPointId:
              type: string
        - title: Pickup Point External ID ile
          required:
            - receiverPickupPointExternalId
          type: object
          properties:
            receiverPickupPointExternalId:
              type: string
    WithoutPickupPoint:
      title: '-> Müşteriye'
      type: object
      properties:
        receiverName:
          type: string
        receiverLocation:
          $ref: '#/components/schemas/LocationForReceiver'
        receiverAddress:
          type: string
        receiverAddressDetail:
          type: string
        receiverPhone:
          type: string
      required:
        - receiverName
        - receiverLocation
        - receiverAddress
        - receiverPhone
    Product:
      type: object
      properties:
        productName:
          type: string
        ingredients:
          type: string
        amount:
          type: integer
        return:
          type: boolean
        price:
          type: string
        desi:
          type: number
          minimum: 0.001
      required:
        - productName
        - ingredients
        - amount
    ID:
      type: string
      description: Sipariş v.b. unsurlar için eşşiz referans değeri.
      minLength: 24
      maxLength: 24
      example: 57954c6f02182308d7000008
    ServerTime:
      description: senkronizasyon amaçlı sunucu zamanı
      type: string
      format: date-time
      example: '2020-07-14T17:29:15.646Z'
  examples:
    post-delivery-400-no-courier-to-assign:
      description: >
        Şu anda uygun bir kurye bulamadık.

        Teslimatınız **kabul edilmeyecektir**. Bir süre sonra bu API'yi tekrar
        çağırmanız gerekecektir.


        We recommend you to activate queue option, so your order will be in a
        queue for a while (you can set a maximum time for queue option from the
        panel).
      value:
        message: no couriers to assign
    post-delivery-400-exceeded-20-attempts-redis-error:
      description: >
        Bu hata kodu 500 kodlu senaryoları içerebilir.

        Göz ardı edebilirsiniz. Ancak teslimatınız kuyrukta değil veya
        başlatılmamış.

        Bir süre sonra bu API'yi tekrar çağırmanız gerekiyor.


        We recommend you to reach out to our support team.
      value:
        message: Exceeded 20 attempts to lock the resource "lock:allocate-courier".
    post-delivery-200-in-queue:
      description: |
        Sıraya alma özelliği ektinleştirildi, teslimat şu an sırada. 

        **Not** Teslimatı her zaman kuyruğa ekleriz 
        Kuyruk **etkin** ise, müsait bir kurye olsa bile bu durum değişmez.
        Teslimat yaklaşık 10 saniye sonra kuryeye atanacaktır.
      value:
        deliveryId: 627d0a6adc1f4a3d10ff5db9
        orderIds:
          - 627d0a69dc1f4a3d10ff5db5
        orders:
          - id: 627d0a69dc1f4a3d10ff5db5
            orderNumber: '12345'
        deliveryState: inQueue
        serverTime: '2022-05-12T13:23:54.632Z'
    post-delivery-200-waiting:
      description: >
        Yaklaşık 10 saniye sonra kuryeye atanacaktır.


        **deliveryState** görüldüğü üzere bu alanın güncellenmesini
        beklemenmektedir.

        Bu teslimatın ilk durumudur.
      value:
        deliveryId: 627d0a6adc1f4a3d10ff5db9
        orderIds:
          - 627d0a69dc1f4a3d10ff5db5
        orders:
          - id: 627d0a69dc1f4a3d10ff5db5
            orderNumber: '12345'
        deliveryState: waiting
        serverTime: '2022-05-12T13:23:54.632Z'
    get-delivery-200-inqueue:
      description: >
        Bu şirket kuyruğu seçeneği etkin.

        Teslimatların kuyrukta olması için her zaman maksimum bir süre değeri
        vardır. 

        Teslimat, bu süre aşıldıktan sonra kuyrukta olmayacaktır.

        Bu zaman değerini uygulama panelinden öğrenebilirsiniz.

        Bu teslimat, teslim alacak bir **kurye** bulunana kadar bir süre
        beklenecektir.

        Diğer bir ihtimal ise sürenin dolmasıdır.

        **Note**: Teslimatın her aşaması hakkında bilgilendirileceksiniz. 

        Eğer bir callback url belirlediyseniz.
      value:
        order:
          id: 627d0a69dc1f4a3d10ff5db5
          orderNumber: '12345'
          state: inQueue
          description: ''
          tracking:
            url: ''
            shortURL: ''
          assignedCourier: null
        serverTime: '2022-05-12T13:42:02.506Z'
    body-post-delivery-basic:
      summary: Basit Sipariş İsteği
      description: |
        Bu istek ile alım noktası id üzerinden belirlenir
        Müşteri koordinatları entegrasyon tarafından alınır.
      value:
        pickupPoint:
          id: 6881e0dd1a5da2001e118180
        callback:
          url: http://callbackurl.example.com
          token: XXXYYYXXXVVVZZZ
          tokenHeader: x-api-key
        receiverName: Müşteri Adı Soyadı
        receiverAddress: Gülbahar Mahallesi, Şahinler sokak, Şişli, İstanbul
        receiverAddressDetail: Yazılım Apartmanı
        receiverLocation:
          lon: 45.2345
          lat: 45.2345
        receiverPhone: '05550000000'
        courierType: motorCourier
        orderType: delivery
        orderNumber: '12345'
        note: Çatal Bıçak İstemiyorum
        paymentType: cash
        paymentMethod: online
        price: '12.00'
        dontRingTheBell: true
        barcode: ''
        receiptNumber: FİŞNO123
        platform: trendyol
        products:
          - productName: Kola
            ingredients: şekersiz
            amount: 0
            return: false
            price: '12.00'
            desi: 0.001
    body-post-without-location:
      summary: Belirsiz Müşteri Koordinatları
      description: >
        Eğer müşterinin koordinatlarını bilmiyorsanız lat lon değerlerini 0
        göndermeniz durumunda receiverAddress bilgisi üzerinden otomatik
        bulunacaktır
      value:
        pickupPoint:
          id: 6881e0dd1a5da2001e118180
        receiverName: Müşteri Adı Soyadı
        receiverAddress: Gülbahar Mahallesi, Şahinler sokak, Şişli, İstanbul
        receiverAddressDetail: Yazılım Apartmanı
        receiverLocation:
          lon: 0
          lat: 0
        receiverPhone: '05550000000'
        courierType: motorCourier
        orderType: delivery
        orderNumber: '12345'
        note: Çatal Bıçak İstemiyorum
        paymentType: cash
        paymentMethod: online
        price: '12.00'
        dontRingTheBell: true
        barcode: ''
        receiptNumber: FİŞNO123
        platform: trendyol
        products:
          - productName: Kola
            ingredients: şekersiz
            amount: 0
            return: false
            price: '12.00'
            desi: 0.001
    body-post-delivery-receiver-pickup-point-id:
      summary: Pickupdan Pickup'a teslimat
      description: >
        Alım Noktasından başka bir Alım Noktasına ürün taşırken
        kullanabilirsiniz.
      value:
        pickupPoint:
          id: 6881e0dd1a5da2001e118180
        receiverPickupPointId: 6881e0dd1a5da2001e118182
        courierType: motorCourier
        orderType: delivery
        orderNumber: '12345'
        note: Çatal Bıçak İstemiyorum
        paymentType: cash
        paymentMethod: online
        price: '12.00'
        dontRingTheBell: true
        barcode: ''
        receiptNumber: FİŞNO123
        platform: trendyol
        products:
          - productName: Kola
            ingredients: şekersiz
            amount: 0
            return: false
            price: '12.00'
            desi: 0.001
    body-post-delivery-return-product:
      summary: Alım noktasına geri gitmesi gereken ürün
      description: |
        Kurye ürünü alım noktasına geri getirecek.
        - Bu ürün, imzalanması gereken bir belge olabilir.
        - Bu ürün, ödeme için kullanılabilecek bir POS cihazı olabilir.
      value:
        pickupPoint:
          id: 6881e0dd1a5da2001e118180
        receiverName: Müşteri Adı Soyadı
        receiverAddress: Gülbahar Mahallesi, Şahinler sokak, Şişli, İstanbul
        receiverAddressDetail: Yazılım Apartmanı
        receiverLocation:
          lon: 45.2345
          lat: 45.2345
        receiverPhone: '05550000000'
        courierType: motorCourier
        orderType: delivery
        orderNumber: '12345'
        note: Çatal Bıçak İstemiyorum
        paymentType: cash
        paymentMethod: online
        price: '12.00'
        dontRingTheBell: true
        barcode: ''
        receiptNumber: FİŞNO123
        platform: trendyol
        products:
          - productName: Kola
            ingredients: şekersiz
            amount: 1
            return: true
            price: '12.00'
            desi: 0.001
          - productName: Pos Cihazı
            ingredients: ''
            amount: 1
            return: true
            price: '0'
            desi: 0.001
  responses:
    400Error:
      description: Hata
      content:
        application/json:
          schema:
            type: object
            properties:
              message:
                type: string
    401Error:
      description: Geçersiz token.
      content:
        application/json:
          schema:
            type: object
            properties:
              message:
                type: string
                description: yetkisiz işlem
