Quickstart
Five minutes: get a token, install the client for your language, make your first API call.
1. Get a WB API token
The client libraries are transports — you still need a Wildberries seller account and a personal API token.
- Sign in at seller.wildberries.ru and open the Интеграции по API (API integrations) section.
- Click + Создать токен (+ Create token) and pick the Для интеграции вручную (Manual integration) tab.
- Choose the token type — персональный (personal) or базовый (base) for normal work, тестовый (test) for the sandbox.
- Fill in the name, pick the method categories and the access level (Чтение и запись — read & write, or Только чтение — read only). For a first test, Контент (Content) is enough — that's what powers the
itemssub-module. - For a personal token, tick the Я понимаю, что не следует передавать токен третьим лицам ("I understand the token must not be shared with third parties") checkbox and click Создать (Create).
- Click Скопировать и закрыть (Copy and close) — the token lands on your clipboard. You won't be able to view it again.
Only pick the categories you plan to work with. If you need to call multiple API categories (items, orders_fbs, analytics, …) create a token with the union of categories — or one token per category to keep blast radius small.
2. Install
Every SDK ships one package per language. All 13 API categories are inside as sub-modules.
pip install valeryverkhoturov-wb-api-clientnpm install @valeryverkhoturov/wb-api-clientgo get github.com/ValeryVerkhoturov/wb-api-client-go@latest<dependency>
<groupId>io.github.valeryverkhoturov</groupId>
<artifactId>wb-api-client</artifactId>
<version>LATEST</version>
</dependency>composer require valeryverkhoturov/wb-api-clientopm install wb-api-clientdotnet add package ValeryVerkhoturov.WbApiClientcargo add wb-api-clientLATEST for Java: check the releases page for the current 1.YYYYMMDD.N version and paste it in.
3. First call — list your seller info
The general sub-module has a getV1SellerInfo endpoint that's cheap to call and confirms both your token and your network path.
from wb_api_client.general import Configuration, ApiClient
from wb_api_client.general.api import GeneralApi
cfg = Configuration(access_token="<your WB JWT>")
api = GeneralApi(ApiClient(cfg))
info = api.get_v1_seller_info()
print(info)import {
Configuration,
GeneralApi,
} from "@valeryverkhoturov/wb-api-client/general";
const cfg = new Configuration({});
cfg.setAccessToken("<your WB JWT>");
const api = new GeneralApi(cfg);
const info = await api.getV1SellerInfo();
console.log(info.data);package main
import (
"context"
"fmt"
wbgeneral "github.com/ValeryVerkhoturov/wb-api-client-go/general"
)
func main() {
cfg := wbgeneral.NewConfiguration()
cfg.SetAccessToken("<your WB JWT>")
client := wbgeneral.NewAPIClient(cfg)
info, _, err := client.GeneralAPI.GetV1SellerInfo(context.Background()).Execute()
if err != nil {
panic(err)
}
fmt.Printf("%+v\n", info)
}import io.github.valeryverkhoturov.wbapi.general.ApiClient;
import io.github.valeryverkhoturov.wbapi.general.api.GeneralApi;
ApiClient client = new ApiClient();
client.setAccessToken("<your WB JWT>");
GeneralApi api = new GeneralApi(client);
System.out.println(api.getV1SellerInfo());use ValeryVerkhoturov\WbApiClient\General\Configuration;
use ValeryVerkhoturov\WbApiClient\General\Api\GeneralApi;
use GuzzleHttp\Client;
$config = (new Configuration())
->setAccessToken('<your WB JWT>');
$api = new GeneralApi(new Client(), $config);
print_r($api->getV1SellerInfo());#Использовать "wb-api-client"
Настройки = Новый Конфигурация();
Настройки.УстановитьТокен("<your WB JWT>");
Клиент = Новый GeneralApi(Настройки);
Сообщить(Клиент.GetV1SellerInfo().Тело);using ValeryVerkhoturov.WbApiClient.General.Api;
using ValeryVerkhoturov.WbApiClient.General.Client;
var config = new Configuration();
config.SetAccessToken("<your WB JWT>");
var api = new GeneralApi(config);
Console.WriteLine(api.GetV1SellerInfo());use wb_api_client::general::apis::{configuration::Configuration, general_api};
#[tokio::main]
async fn main() {
let mut cfg = Configuration::new();
cfg.set_access_token("<your WB JWT>");
let info = general_api::get_v1_seller_info(&cfg).await;
println!("{:#?}", info);
}If that returns your seller data — you're wired up.
4. Where to go next
- Authentication — how the secret-string wrapper works, why you should never print your token, and how to expose the raw value when you actually need to.
- Error handling — WB's status codes, retry strategy for 429/5xx, and how errors surface in each language.
- Language pages — every sub-module, install snippet, and the shape of each
Apiclass.
Troubleshooting the first call
| Symptom | Likely cause | Fix |
|---|---|---|
401 Unauthorized | Token wrong / expired / not for this category | Regenerate in Seller portal; ensure the category matches the module (e.g. Контент for items) |
403 Forbidden | Token valid but category missing | Add the required category to the token, or make a new one |
429 Too Many Requests | You've hit WB's rate limit | Wait X-Ratelimit-Retry seconds from the response and back off; the SDK does not auto-retry |
| Connection hangs | Corporate proxy / TLS interception | Set HTTPS_PROXY env var; most clients honor it |
ImportError / Cannot find module | Installed the wrong package name | Package is valeryverkhoturov-wb-api-client / @valeryverkhoturov/wb-api-client — the bare wb-api-client name is a different project |
