Перейти к основному содержимому

Руководство по Amazon SP-API

Регистрация и доступ

1. Регистрация приложения

Для работы со SP-API необходимо:

  • Аккаунт Amazon Seller Central или Vendor Central
  • Зарегистрированное приложение в Seller Central
  • Заполненный профиль разработчика (Developer Profile)

2. Получение SP-API ролей

Amazon требует указать роли при регистрации приложения:

  • Public — публичные приложения (для других продавцов)
  • Private — приватные приложения (только для вашего аккаунта)

3. Авторизация продавца

Продавец должен авторизовать приложение через:

  1. Авторизационная ссылка — redirect URL на ваш сервер
  2. Seller Central — ручная авторизация в Settings → Authorization

После авторизации вы получаете:

  • refresh_token — для генерации access токенов
  • SPAPI_AWS_ACCESS_KEY_ID — для подписи запросов (устаревший метод)

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

LWA Token Exchange

POST https://api.amazon.com/auth/o2/token
Content-Type: application/x-www-form-urlencoded

grant_type=refresh_token
&refresh_token=<your_refresh_token>
&client_id=<your_client_id>
&client_secret=<your_client_secret>

Ответ:

{
"access_token": "Atza|...",
"token_type": "bearer",
"expires_in": 3600,
"refresh_token": "Atzr|..."
}

Использование токена

curl -X GET \
"https://sellingpartnerapi-na.amazon.com/orders/v0/orders?CreatedAfter=2024-01-01" \
-H "x-amz-access-token: Atza|..."

Rate Limits и обработка 429

Стратегия обработки

import time
import requests

def sp_api_request(url, max_retries=5):
for attempt in range(max_retries):
resp = requests.get(url, headers=headers)

if resp.status_code == 429:
retry_after = int(resp.headers.get("Retry-After", 5))
time.sleep(retry_after)
continue

if resp.status_code == 200:
rate_limit = resp.headers.get("x-amzn-RateLimit-Limit")
# Соблюдение rate limit
if rate_limit:
min_delay = 1.0 / float(rate_limit)
time.sleep(min_delay)

return resp

raise Exception(f"Max retries ({max_retries}) exceeded")

Leaky Bucket

Каждая группа операций имеет свою квоту:

  • Rate — запросов в секунду (пополнение)
  • Burst — максимальный размер очереди
Например: rate=0.016, burst=15
→ можно мгновенно отправить 15 запросов,
затем 1 запрос каждые ~62 секунды

Основные операции

Получение маркетплейсов

GET /sellers/v1/marketplaceParticipations

Возвращает список маркетплейсов, в которых продавец может листить товары.

Управление заказами

GET /orders/v0/orders?CreatedAfter=2024-01-01
GET /orders/v0/orders/{orderId}
POST /orders/v0/orders/{orderId}/acknowledge

Работа с каталогом

GET /catalog/2022-04-01/items/{asin}?marketplaceId=ATVPDKIKX0DER
PUT /listings/2021-08-01/items/{sellerId}/{sku}

Вебхуки (Notifications)

SP-API поддерживает push-уведомления через SQS или EventBridge:

POST /notifications/v1/subscriptions
{
"notificationType": "ORDER_CHANGE",
"destinationArn": "arn:aws:sqs:us-east-1:..."
}

Полезные ссылки