API

Партнерский API для продавцов

Версия 1.5 · 21.07.2026 · роль SELLER

API позволяет создать лот, загрузить фотографии, запустить торги и получить данные своих лотов.

1. Быстрый старт

  1. Получите partyid и password у контактного лица Avtoonline.
  2. Выполните POST /api/login и сохраните JWT-токен.
  3. Отправляйте GraphQL-запросы на POST /api/graphql-public.
  4. Передавайте Authorization: Bearer <token> в каждом GraphQL-запросе.
Окружение Вход GraphQL
Production https://avtoonline.pro/api/login https://avtoonline.pro/api/graphql-public
Sandbox https://int-graphql.avtoonline.tech/api/login https://int-graphql.avtoonline.tech/api/graphql-public

Получение токена

curl -X POST https://int-graphql.avtoonline.tech/api/login \
  -H "Content-Type: application/json" \
  -d '{"partyid":"<PARTY_ID>","password":"<PASSWORD>"}'
{
  "token": "<JWT_TOKEN>",
  "party": {
    "partyId": "<PARTY_ID>",
    "roles": [
      "SELLER"
    ]
  }
}

2. Типовой сценарий

  1. Создайте заготовку лота через createLot.
  2. Сохраните id лота и vehicleId.
  3. Загрузите фотографии через uploadFile и при необходимости отредактируйте подписи.
  4. Заполните данные и активируйте лот через activateLot.
  5. Проверьте результат через getLot или getLots.

3. Создание лота

{
  "query": `
    mutation CreateLot {
      createLot {
        id
        partyId
        vehicleId
      }
    }
  `
}
{
  "data": {
    "createLot": {
      "id": "<LOT_ID>",
      "partyId": "<PARTY_ID>",
      "vehicleId": "<VEHICLE_ID>"
    }
  }
}

4. Активация лота

Обязательны идентификатор лота, vehicle.id, основные характеристики автомобиля, время завершения торгов и уникальный internalCaseNumber.

{
  "query": `
    mutation Activate($input:ActivateLotInput!) {
      activateLot(lotInput:$input) {
        id
        status
        startTime
        endTime
        internalCaseNumber
      }
    }
  `,
  "variables": {
    "input": {
      "id": "<LOT_ID>",
      "internalCaseNumber": "<CASE_NUMBER>",
      "startTime": "2026-07-21T09:00:00Z",
      "endTime": "2026-07-22T09:00:00Z",
      "vehicle": {
        "id": "<VEHICLE_ID>",
        "brand": "<BRAND>",
        "model": "<MODEL>",
        "year": 2022,
        "vin": "<VIN>",
        "mileage": 50000,
        "startingPrice": 1000000,
        "vehicleTypeId": "<VEHICLE_TYPE_ID>",
        "engineTypeId": "<ENGINE_TYPE_ID>",
        "bodyTypeId": "<BODY_TYPE_ID>",
        "transmissionTypeId": "<TRANSMISSION_TYPE_ID>",
        "regionId": "<REGION_ID>",
        "city": "<CITY>"
      }
    }
  }
}

После успешной активации лот получает статус ACTIVE и переходит в COMPLETED после завершения торгов.

5. Загрузка фотографии

Загрузка использует multipart/form-data. В objId передайте vehicleId из createLot.

curl -X POST https://int-graphql.avtoonline.tech/api/graphql-public \
  -H "Authorization: Bearer <JWT_TOKEN>" \
  -F 'operations={"query":"mutation Upload($input:UploadFileInput!){uploadFile(input:$input){fileUrl quotaLeft file{id description tag}}}","variables":{"input":{"objId":"<VEHICLE_ID>","description":"<DESCRIPTION>","tag":"EXTERIOR","file":null}}}' \
  -F 'map={"0":["variables.input.file"]}' \
  -F '0=@/path/to/photo.jpg'
{
  "data": {
    "uploadFile": {
      "fileUrl": "<TEMPORARY_FILE_URL>",
      "quotaLeft": 92.5,
      "file": {
        "id": "<PHOTO_ID>",
        "description": "<DESCRIPTION>",
        "tag": "EXTERIOR"
      }
    }
  }
}

Значение fileUrl временное и действует 7 дней.

  • updateComment(photoID: ID!, comment: String!) — обновить подпись.
  • deletePhotosByIds(ids: [ID!]!) — удалить фотографии.

6. Получение лотов

Список

{
  "query": `
    query Lots($filter:LotFilterInput) {
      getLots(filter:$filter) {
        lots {
          id
          status
          internalCaseNumber
          startTime
          endTime
          vehicle {
            id
            brand
            model
            vin
            mileage
            photos {
              id
              description
              tag
              url
              urlValidTill
            }
          }
        }
        total
      }
    }
  `,
  "variables": {
    "filter": {
      "limit": 100,
      "offset": 0
    }
  }
}

Максимальное значение limit — 1000. В списке по умолчанию возвращается первое фото; полный набор запрашивайте через getLot.

Карточка

{
  "query": `
    query Lot($id:ID!) {
      getLot(lotId:$id) {
        id
        status
        historyStatus
        historyStatusUpdatedAt
        notes
        vehicle {
          brand
          model
          vin
          damages {
            notes
            damageTypeIds
          }
          photos {
            id
            description
            tag
            url
          }
        }
      }
    }
  `,
  "variables": {
    "id": "<LOT_ID>"
  }
}

7. Справочники

Для заполнения автомобиля доступны getVehicleTypes, getEngineTypes, getBodyTypes, getTransmissionTypes, getRegions и getDamageTypes.

{
  "query": `
    query References {
      getVehicleTypes {
        id
        name
      }
      getEngineTypes {
        id
        name
      }
      getBodyTypes {
        id
        name
      }
      getTransmissionTypes {
        id
        name
      }
      getRegions {
        id
        name
      }
      getDamageTypes {
        id
        name
      }
    }
  `
}

8. Ошибки

HTTP/ответ Что проверить
400 JSON, GraphQL query и обязательные variables.
401 Наличие и срок действия Authorization: Bearer <token>.
403 Наличие роли SELLER и доступ к операции.
413 или ошибка квоты Размер файла и остаток квоты.
Массив errors при HTTP 200 Сообщение бизнес-ошибки; HTTP 200 сам по себе не означает успех операции.
5xx Повторить запрос позже.
  • Партнерский API для продавцов
  • 1. Быстрый старт
  • 2. Типовой сценарий
  • 3. Создание лота
  • 4. Активация лота
  • 5. Загрузка фотографии
  • 6. Получение лотов
  • 7. Справочники
  • 8. Ошибки
Стать клиентом
После получения Запроса мы свяжемся с Вами по телефону или e-mail в течение 24 часов в рабочее время.
Вы хотите
Продавать
Покупать
Укажите контактные данные