API для партнёров

API для партнёров

Для интеграции вашей CRM/ERP с smetach.ru — программная загрузка цен без ручного ввода в дашборде.

База

ПараметрЗначение
Base URLhttps://smetach.ru/partners/api/v1/
АутентификацияOAuth 2.0 через Яндекс ID
ФорматJSON (request и response)
Лимит1000 запросов/час на токен

Аутентификация

GET https://oauth.yandex.ru/authorize?
    response_type=code
    &client_id=<ваш_client_id>
    &redirect_uri=https://smetach.ru/partners/api/callback/
    &scope=login:email+login:info+login:avatar
    &state=<csrf_token>

После редиректа с ?code=<auth_code> обмениваете на токен:

curl -X POST https://oauth.yandex.ru/token \
  -d "grant_type=authorization_code" \
  -d "code=<auth_code>" \
  -d "client_id=<your_client_id>" \
  -d "client_secret=<your_client_secret>"

Получаете access_token — используете в Authorization: Bearer ... header.

Endpoints

GET /profile

Текущий профиль партнёра.

{
  "yandex_id": "yandex-uid-xxx",
  "company_name": "ООО Окна-Плюс",
  "city": "rostov-na-donu",
  "categories": ["okna", "uteplitel"],
  "website": "https://oknaplus.ru",
  "email": "info@oknaplus.ru",
  "verified": true,
  "created_at": "2026-07-30T15:00:00Z",
  "updated_at": "2026-07-30T15:00:00Z"
}

PUT /profile

Обновить профиль (кроме yandex_id, verified).

GET /prices

Список цен по категориям и городам.

{
  "okna": {
    "rostov-na-donu": {
      "profile_58mm_standart": {"price": 12000, "unit": "rub/m2"},
      "profile_70mm_premium": {"price": 18500, "unit": "rub/m2"},
      "installation": {"price": 2500, "unit": "rub/m2"}
    },
    "krasnodar": { ... }
  },
  "uteplitel": { ... }
}

PUT /prices/{category}/{city}

Обновить цены для конкретной категории в конкретном городе.

{
  "profile_58mm_standart": {"price": 11500, "unit": "rub/m2"},
  "profile_70mm_premium": {"price": 18000, "unit": "rub/m2"}
}

GET /stats

Статистика показов за период.

{
  "from": "2026-07-01",
  "to": "2026-07-31",
  "impressions": 1247,
  "clicks_to_profile": 89,
  "clicks_to_website": 23
}

Webhooks

Можно подписаться на события:

Webhook URL указывается в дашборде.

Коды ошибок

КодОписание
400Невалидный JSON
401Нет или невалидный токен
403Не верифицированный аккаунт
404Категория/город не найдены
429Превышен rate limit
500Внутренняя ошибка

OpenAPI спецификация

Скачать OpenAPI 3.0 файл — содержит полную схему всех endpoints.

Примеры на разных языках

Python

import requests

TOKEN = "y0_Ag..."
r = requests.get(
    "https://smetach.ru/partners/api/v1/prices",
    headers={"Authorization": f"Bearer {TOKEN}"}
)
prices = r.json()

curl

curl -H "Authorization: Bearer y0_Ag..." \
     https://smetach.ru/partners/api/v1/prices

Поддержка

support@smetach.ru — по вопросам интеграции.

Try it out (интерактивный playground)

Эта секция работает только когда вы залогинены через Яндекс ID. Токен сохранится в localStorage и используется для запросов.

Response

// нажмите "Send request" чтобы увидеть ответ

OpenAPI спецификация

Полная схема API в формате OpenAPI 3.0:

{
  "openapi": "3.0.0",
  "info": {
    "title": "Smetach.ru Partners API",
    "version": "1.0.0",
    "description": "API для партнёров — управление ценами и статистика"
  },
  "servers": [{"url": "https://smetach.ru/partners/api/v1"}],
  "components": {
    "securitySchemes": {
      "oauth2": {
        "type": "oauth2",
        "flows": {
          "authorizationCode": {
            "authorizationUrl": "https://oauth.yandex.ru/authorize",
            "tokenUrl": "https://oauth.yandex.ru/token",
            "scopes": {
              "login:email": "Email аккаунта Яндекс",
              "login:info": "Публичные данные профиля",
              "login:avatar": "URL аватара"
            }
          }
        }
      }
    }
  },
  "paths": {
    "/profile": {
      "get": {
        "summary": "Получить профиль партнёра",
        "security": [{"oauth2": ["login:email login:info"]}],
        "responses": {"200": {"description": "OK"}}
      },
      "put": {
        "summary": "Обновить профиль партнёра",
        "security": [{"oauth2": ["login:email login:info"]}],
        "responses": {"200": {"description": "OK"}}
      }
    },
    "/prices/{category}/{city}": {
      "get": {"summary": "Получить цены категории в городе"},
      "put": {"summary": "Обновить цены категории в городе"}
    },
    "/stats": {
      "get": {
        "summary": "Статистика за период",
        "parameters": [
          {"name": "from", "in": "query", "schema": {"type": "string", "format": "date"}},
          {"name": "to", "in": "query", "schema": {"type": "string", "format": "date"}}
        ]
      }
    }
  }
}