在创建产品之前找到或创建品牌
如果行空,请创建品牌,然后存储产品卡的品牌ID.
- 通过查询和count=true来调用GET /api/brand/find.
- 在申请中,请比较姓名.
- 如果没有匹配,请将 POST /api/brand的名称发送.
- 在创建产品模型时使用响应的品牌Id.
对于未标志品,首先创建一个专用的无品牌记录,并在产品卡上使用标识符.
/api/brand
准备使用的工作流程
如果行空,请创建品牌,然后存储产品卡的品牌ID.
保存1C键在一个CId中,并搜集页面,而不是在一个请求中加载整个目录.
合并将产品模型从复制品转移到主要品牌,然后删除复制.
数据模型
图像上传后,标志字段会出现.不参与这个API的共享模型字段是故意省略的.
brandIdinteger现行SelSup账户中的品牌标识符.
read-onlynamestring标签名称. 保存时,将领先和后续空间移除.
必填logoUrlstring现行标志的公开URL.
read-onlylogoSizeinteger标志量在字节中.
read-onlylogoWidthinteger标志宽度在像素中.
read-onlylogoHeightinteger标志高度在像素中.
read-onlydeletedboolean品牌是否被存档.
ozonNamestring标签名 标识名
nullableozonIdinteger · int64标识标识符在奥森.
nullableoneCIdstring标志表 1C 中的外部标志标志.
nullable错误合同
编程的代码在每个地方都相同,而用户面向的消息由服务器翻译. 建立在error周围的应用逻辑,仅用于显示.
鱼类稳定机器可读的代码用于集成逻辑.
鱼类在API代币用户语言中显示准备的消息.
鱼类服务器在本地化消息模板中插入的值.
localMessage使用了 API代币的用户的lang字段.文档语言和 Accept-Language标题不会改变它;当用户没有语言配置时,使用俄语.
{
"error": "error_brand_already_exists",
"localMessage": "Бренд Base уже существует",
"params": {
"name": "Base"
}
}{
"error": "error_brand_already_exists",
"localMessage": "品牌 Base 已经存在",
"params": {
"name": "Base"
}
}终点
/api/brand/find列表,搜索和同步的主要终端点. 它将品牌从流动账户返回,并支持稳定的页面化.
只有当 count=true 时返回总数.
| 字段 | 类型 | 必填 | 描述 |
|---|---|---|---|
query |
string | 否 | 在品牌名称中搜索字符串. |
deleted |
boolean | 否 | 假的为活跃,不要返回两者. |
brandOneCId |
string | 否 | 确切的外部1C标识符. |
hasOzonId |
boolean | 否 | 只有标记为Ozon的品牌才会返回. |
limit默认值: 50 |
integer | 否 | 每页的记录,高达500个. |
page默认值: 1 |
integer | 否 | 页面号码从1开始. |
count默认值: false |
boolean | 否 | 包含总匹配的总数. |
sortBy |
stringNAME, BRANDID | 否 | 品牌名称的名称,内部标识符的标志. |
ascending默认值: false |
boolean | 否 | 对于上升的说法是真实的,而下降的说法的说法则是假的. |
curl --request GET 'https://api.selsup.ru/api/brand/find?query=Base&limit=50&page=1&count=true&sortBy=NAME&ascending=true' \
--header 'Authorization: YOUR_API_TOKEN'
const response = await fetch('https://api.selsup.ru/api/brand/find?query=Base&limit=50&page=1&count=true&sortBy=NAME&ascending=true', {
method: 'GET',
headers: { Authorization: process.env.SELSUP_API_TOKEN },
});
if (!response.ok) {
const error = await response.json();
throw new Error(error.error || 'selsup_request_failed');
}
const result = await response.json();
const response: Response = await fetch('https://api.selsup.ru/api/brand/find?query=Base&limit=50&page=1&count=true&sortBy=NAME&ascending=true', {
method: 'GET',
headers: { Authorization: process.env.SELSUP_API_TOKEN! },
});
if (!response.ok) {
const error = await response.json() as { error?: string };
throw new Error(error.error ?? 'selsup_request_failed');
}
const result: unknown = await response.json();
import os
import requests
response = requests.get(
'https://api.selsup.ru/api/brand/find?query=Base&limit=50&page=1&count=true&sortBy=NAME&ascending=true',
headers={'Authorization': os.environ['SELSUP_API_TOKEN']},
)
response.raise_for_status()
result = response.json()
<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => 'https://api.selsup.ru/api/brand/find?query=Base&limit=50&page=1&count=true&sortBy=NAME&ascending=true',
CURLOPT_CUSTOMREQUEST => 'GET',
CURLOPT_RETURNTRANSFER => true,
CURLOPT_HTTPHEADER => ['Authorization: ' . getenv('SELSUP_API_TOKEN')],
]);
$response = curl_exec($curl);
$status = curl_getinfo($curl, CURLINFO_HTTP_CODE);
curl_close($curl);
if ($response === false || $status >= 400) {
throw new RuntimeException($response ?: 'selsup_request_failed');
}
echo $response;
package main
import (
"fmt"
"io"
"net/http"
"os"
)
func main() {
req, err := http.NewRequest("GET", "https://api.selsup.ru/api/brand/find?query=Base&limit=50&page=1&count=true&sortBy=NAME&ascending=true", nil)
if err != nil { panic(err) }
req.Header.Set("Authorization", os.Getenv("SELSUP_API_TOKEN"))
response, err := http.DefaultClient.Do(req)
if err != nil { panic(err) }
defer response.Body.Close()
result, _ := io.ReadAll(response.Body)
fmt.Printf("%d\n%s\n", response.StatusCode, result)
}
import java.net.URI;
import java.net.http.HttpClient;
import java.net.http.HttpRequest;
import java.net.http.HttpResponse;
public class SelSupExample {
public static void main(String[] args) throws Exception {
HttpRequest request = HttpRequest.newBuilder(URI.create("https://api.selsup.ru/api/brand/find?query=Base&limit=50&page=1&count=true&sortBy=NAME&ascending=true"))
.header("Authorization", System.getenv("SELSUP_API_TOKEN"))
.method("GET", HttpRequest.BodyPublishers.noBody())
.build();
HttpResponse<String> response = HttpClient.newHttpClient()
.send(request, HttpResponse.BodyHandlers.ofString());
System.out.println(response.statusCode());
System.out.println(response.body());
}
}
| 字段 | 类型 | 必填 | 描述 | ||||||||||||||||||||||||||||||||||||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
rows |
Brand[] | 是 | 在当前页面上的品牌. | ||||||||||||||||||||||||||||||||||||||||||||
阵列项结构
|
|||||||||||||||||||||||||||||||||||||||||||||||
| 字段 | 类型 | 必填 | 描述 |
|---|---|---|---|
brandId |
integer | 否 | 现行SelSup账户中的品牌标识符. |
name |
string | 是 | 标签名称. 保存时,将领先和后续空间移除. |
logoUrl |
string | 否 | 现行标志的公开URL. |
logoSize |
integer | 否 | 标志量在字节中. |
logoWidth |
integer | 否 | 标志宽度在像素中. |
logoHeight |
integer | 否 | 标志高度在像素中. |
deleted默认值: false |
boolean | 否 | 品牌是否被存档. |
ozonName |
string | 否 | 标签名 标识名 |
ozonId |
integer · int64 | 否 | 标识标识符在奥森. |
oneCId |
string | 否 | 标志表 1C 中的外部标志标志. |
total情况: count=truepagehasNextPage{
"rows": [
{
"brandId": 8124,
"name": "Base",
"deleted": false,
"ozonName": "BASE"
}
],
"total": 1,
"page": 1,
"hasNextPage": false
}应用错误通常以 JSON, error,localMessage和 params为回归. 如何返回应用错误 ↑
auth_requiredAuthorization 缺失,空,或包含无效的代币.
error_access_denied代币存在,但它的作用不能执行这个操作.
error_unknown节省请求时间和联系支持;不要盲目重新尝试突变.
/api/brand/all返回账户中的每一个品牌,按姓名排序.
对于大型目录和重复同步,使用/find与页面化.
curl --request GET 'https://api.selsup.ru/api/brand/all' \
--header 'Authorization: YOUR_API_TOKEN'
const response = await fetch('https://api.selsup.ru/api/brand/all', {
method: 'GET',
headers: { Authorization: process.env.SELSUP_API_TOKEN },
});
if (!response.ok) {
const error = await response.json();
throw new Error(error.error || 'selsup_request_failed');
}
const result = await response.json();
const response: Response = await fetch('https://api.selsup.ru/api/brand/all', {
method: 'GET',
headers: { Authorization: process.env.SELSUP_API_TOKEN! },
});
if (!response.ok) {
const error = await response.json() as { error?: string };
throw new Error(error.error ?? 'selsup_request_failed');
}
const result: unknown = await response.json();
import os
import requests
response = requests.get(
'https://api.selsup.ru/api/brand/all',
headers={'Authorization': os.environ['SELSUP_API_TOKEN']},
)
response.raise_for_status()
result = response.json()
<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => 'https://api.selsup.ru/api/brand/all',
CURLOPT_CUSTOMREQUEST => 'GET',
CURLOPT_RETURNTRANSFER => true,
CURLOPT_HTTPHEADER => ['Authorization: ' . getenv('SELSUP_API_TOKEN')],
]);
$response = curl_exec($curl);
$status = curl_getinfo($curl, CURLINFO_HTTP_CODE);
curl_close($curl);
if ($response === false || $status >= 400) {
throw new RuntimeException($response ?: 'selsup_request_failed');
}
echo $response;
package main
import (
"fmt"
"io"
"net/http"
"os"
)
func main() {
req, err := http.NewRequest("GET", "https://api.selsup.ru/api/brand/all", nil)
if err != nil { panic(err) }
req.Header.Set("Authorization", os.Getenv("SELSUP_API_TOKEN"))
response, err := http.DefaultClient.Do(req)
if err != nil { panic(err) }
defer response.Body.Close()
result, _ := io.ReadAll(response.Body)
fmt.Printf("%d\n%s\n", response.StatusCode, result)
}
import java.net.URI;
import java.net.http.HttpClient;
import java.net.http.HttpRequest;
import java.net.http.HttpResponse;
public class SelSupExample {
public static void main(String[] args) throws Exception {
HttpRequest request = HttpRequest.newBuilder(URI.create("https://api.selsup.ru/api/brand/all"))
.header("Authorization", System.getenv("SELSUP_API_TOKEN"))
.method("GET", HttpRequest.BodyPublishers.noBody())
.build();
HttpResponse<String> response = HttpClient.newHttpClient()
.send(request, HttpResponse.BodyHandlers.ofString());
System.out.println(response.statusCode());
System.out.println(response.body());
}
}
Brand[]
| 字段 | 类型 | 必填 | 描述 |
|---|---|---|---|
brandId |
integer | 否 | 现行SelSup账户中的品牌标识符. |
name |
string | 是 | 标签名称. 保存时,将领先和后续空间移除. |
logoUrl |
string | 否 | 现行标志的公开URL. |
logoSize |
integer | 否 | 标志量在字节中. |
logoWidth |
integer | 否 | 标志宽度在像素中. |
logoHeight |
integer | 否 | 标志高度在像素中. |
deleted默认值: false |
boolean | 否 | 品牌是否被存档. |
ozonName |
string | 否 | 标签名 标识名 |
ozonId |
integer · int64 | 否 | 标识标识符在奥森. |
oneCId |
string | 否 | 标志表 1C 中的外部标志标志. |
[
{
"brandId": 8124,
"name": "Base",
"deleted": false
},
{
"brandId": 8125,
"name": "Air",
"deleted": false
}
]应用错误通常以 JSON, error,localMessage和 params为回归. 如何返回应用错误 ↑
auth_requiredAuthorization 缺失,空,或包含无效的代币.
error_access_denied代币存在,但它的作用不能执行这个操作.
error_unknown节省请求时间和联系支持;不要盲目重新尝试突变.
/api/brand/{brandId}通过内部识别符,从经常账户返回品牌.
现在的实现返回一个未知的brandId的空值,而不是HTTP 404. 处理空响应.
| 字段 | 类型 | 必填 | 描述 |
|---|---|---|---|
brandId |
integer | 是 | 在SelSup中标志标志. |
curl --request GET 'https://api.selsup.ru/api/brand/8124' \
--header 'Authorization: YOUR_API_TOKEN'
const response = await fetch('https://api.selsup.ru/api/brand/8124', {
method: 'GET',
headers: { Authorization: process.env.SELSUP_API_TOKEN },
});
if (!response.ok) {
const error = await response.json();
throw new Error(error.error || 'selsup_request_failed');
}
const result = await response.json();
const response: Response = await fetch('https://api.selsup.ru/api/brand/8124', {
method: 'GET',
headers: { Authorization: process.env.SELSUP_API_TOKEN! },
});
if (!response.ok) {
const error = await response.json() as { error?: string };
throw new Error(error.error ?? 'selsup_request_failed');
}
const result: unknown = await response.json();
import os
import requests
response = requests.get(
'https://api.selsup.ru/api/brand/8124',
headers={'Authorization': os.environ['SELSUP_API_TOKEN']},
)
response.raise_for_status()
result = response.json()
<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => 'https://api.selsup.ru/api/brand/8124',
CURLOPT_CUSTOMREQUEST => 'GET',
CURLOPT_RETURNTRANSFER => true,
CURLOPT_HTTPHEADER => ['Authorization: ' . getenv('SELSUP_API_TOKEN')],
]);
$response = curl_exec($curl);
$status = curl_getinfo($curl, CURLINFO_HTTP_CODE);
curl_close($curl);
if ($response === false || $status >= 400) {
throw new RuntimeException($response ?: 'selsup_request_failed');
}
echo $response;
package main
import (
"fmt"
"io"
"net/http"
"os"
)
func main() {
req, err := http.NewRequest("GET", "https://api.selsup.ru/api/brand/8124", nil)
if err != nil { panic(err) }
req.Header.Set("Authorization", os.Getenv("SELSUP_API_TOKEN"))
response, err := http.DefaultClient.Do(req)
if err != nil { panic(err) }
defer response.Body.Close()
result, _ := io.ReadAll(response.Body)
fmt.Printf("%d\n%s\n", response.StatusCode, result)
}
import java.net.URI;
import java.net.http.HttpClient;
import java.net.http.HttpRequest;
import java.net.http.HttpResponse;
public class SelSupExample {
public static void main(String[] args) throws Exception {
HttpRequest request = HttpRequest.newBuilder(URI.create("https://api.selsup.ru/api/brand/8124"))
.header("Authorization", System.getenv("SELSUP_API_TOKEN"))
.method("GET", HttpRequest.BodyPublishers.noBody())
.build();
HttpResponse<String> response = HttpClient.newHttpClient()
.send(request, HttpResponse.BodyHandlers.ofString());
System.out.println(response.statusCode());
System.out.println(response.body());
}
}
Brand
| 字段 | 类型 | 必填 | 描述 |
|---|---|---|---|
brandId |
integer | 否 | 现行SelSup账户中的品牌标识符. |
name |
string | 是 | 标签名称. 保存时,将领先和后续空间移除. |
logoUrl |
string | 否 | 现行标志的公开URL. |
logoSize |
integer | 否 | 标志量在字节中. |
logoWidth |
integer | 否 | 标志宽度在像素中. |
logoHeight |
integer | 否 | 标志高度在像素中. |
deleted默认值: false |
boolean | 否 | 品牌是否被存档. |
ozonName |
string | 否 | 标签名 标识名 |
ozonId |
integer · int64 | 否 | 标识标识符在奥森. |
oneCId |
string | 否 | 标志表 1C 中的外部标志标志. |
{
"brandId": 8124,
"name": "Base",
"deleted": false,
"ozonName": "BASE",
"ozonId": 100582
}应用错误通常以 JSON, error,localMessage和 params为回归. 如何返回应用错误 ↑
auth_requiredAuthorization 缺失,空,或包含无效的代币.
error_access_denied代币存在,但它的作用不能执行这个操作.
error_unknown节省请求时间和联系支持;不要盲目重新尝试突变.
/api/brand创建一个品牌在经常账户.
名称是以不敏感的方式进行比较; Base和 base被视为相同的品牌.
application/json| 字段 | 类型 | 必填 | 描述 |
|---|---|---|---|
name |
string | 是 | 唯一的,不空的品牌名称. |
ozonName |
string | 否 | 已知,来自奥森目录的名称. |
ozonId |
integer · int64 | 否 | 在没有先前进口卡的情况下发送卡时,Ozon品牌身份证. |
oneCId |
string | 否 | 稳定的外部品牌钥匙在1C. |
curl --request POST 'https://api.selsup.ru/api/brand' \
--header 'Authorization: YOUR_API_TOKEN' \
--header 'Content-Type: application/json' \
--data '{
"name": "Base",
"ozonName": "BASE",
"ozonId": 100582,
"oneCId": "BRAND-001"
}'
const response = await fetch('https://api.selsup.ru/api/brand', {
method: 'POST',
headers: {
Authorization: process.env.SELSUP_API_TOKEN,
'Content-Type': 'application/json',
},
body: JSON.stringify({
"name": "Base",
"ozonName": "BASE",
"ozonId": 100582,
"oneCId": "BRAND-001"
}),
});
if (!response.ok) {
const error = await response.json();
throw new Error(error.error || 'selsup_request_failed');
}
const result = await response.json();
const response: Response = await fetch('https://api.selsup.ru/api/brand', {
method: 'POST',
headers: {
Authorization: process.env.SELSUP_API_TOKEN!,
'Content-Type': 'application/json',
},
body: JSON.stringify({
"name": "Base",
"ozonName": "BASE",
"ozonId": 100582,
"oneCId": "BRAND-001"
}),
});
if (!response.ok) {
const error = await response.json() as { error?: string };
throw new Error(error.error ?? 'selsup_request_failed');
}
const result: unknown = await response.json();
import os
import requests
response = requests.post(
'https://api.selsup.ru/api/brand',
headers={'Authorization': os.environ['SELSUP_API_TOKEN']},
json={
'name': 'Base',
'ozonName': 'BASE',
'ozonId': 100582,
'oneCId': 'BRAND-001'
},
)
response.raise_for_status()
result = response.json()
<?php
$payload = <<<'JSON'
{
"name": "Base",
"ozonName": "BASE",
"ozonId": 100582,
"oneCId": "BRAND-001"
}
JSON;
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => 'https://api.selsup.ru/api/brand',
CURLOPT_CUSTOMREQUEST => 'POST',
CURLOPT_RETURNTRANSFER => true,
CURLOPT_HTTPHEADER => ['Authorization: ' . getenv('SELSUP_API_TOKEN'), 'Content-Type: application/json'],
CURLOPT_POSTFIELDS => $payload,
]);
$response = curl_exec($curl);
$status = curl_getinfo($curl, CURLINFO_HTTP_CODE);
curl_close($curl);
if ($response === false || $status >= 400) {
throw new RuntimeException($response ?: 'selsup_request_failed');
}
echo $response;
package main
import (
"fmt"
"io"
"net/http"
"os"
"strings"
)
func main() {
req, err := http.NewRequest("POST", "https://api.selsup.ru/api/brand", strings.NewReader(`{
"name": "Base",
"ozonName": "BASE",
"ozonId": 100582,
"oneCId": "BRAND-001"
}`))
if err != nil { panic(err) }
req.Header.Set("Authorization", os.Getenv("SELSUP_API_TOKEN"))
req.Header.Set("Content-Type", "application/json")
response, err := http.DefaultClient.Do(req)
if err != nil { panic(err) }
defer response.Body.Close()
result, _ := io.ReadAll(response.Body)
fmt.Printf("%d\n%s\n", response.StatusCode, result)
}
import java.net.URI;
import java.net.http.HttpClient;
import java.net.http.HttpRequest;
import java.net.http.HttpResponse;
public class SelSupExample {
public static void main(String[] args) throws Exception {
HttpRequest request = HttpRequest.newBuilder(URI.create("https://api.selsup.ru/api/brand"))
.header("Authorization", System.getenv("SELSUP_API_TOKEN"))
.header("Content-Type", "application/json")
.method("POST", HttpRequest.BodyPublishers.ofString("""
{
"name": "Base",
"ozonName": "BASE",
"ozonId": 100582,
"oneCId": "BRAND-001"
}
"""))
.build();
HttpResponse<String> response = HttpClient.newHttpClient()
.send(request, HttpResponse.BodyHandlers.ofString());
System.out.println(response.statusCode());
System.out.println(response.body());
}
}
Brand
| 字段 | 类型 | 必填 | 描述 |
|---|---|---|---|
brandId |
integer | 否 | 现行SelSup账户中的品牌标识符. |
name |
string | 是 | 标签名称. 保存时,将领先和后续空间移除. |
logoUrl |
string | 否 | 现行标志的公开URL. |
logoSize |
integer | 否 | 标志量在字节中. |
logoWidth |
integer | 否 | 标志宽度在像素中. |
logoHeight |
integer | 否 | 标志高度在像素中. |
deleted默认值: false |
boolean | 否 | 品牌是否被存档. |
ozonName |
string | 否 | 标签名 标识名 |
ozonId |
integer · int64 | 否 | 标识标识符在奥森. |
oneCId |
string | 否 | 标志表 1C 中的外部标志标志. |
{
"brandId": 8124,
"name": "Base",
"deleted": false,
"ozonName": "BASE",
"ozonId": 100582,
"oneCId": "BRAND-001"
}应用错误通常以 JSON, error,localMessage和 params为回归. 如何返回应用错误 ↑
auth_requiredAuthorization 缺失,空,或包含无效的代币.
error_access_denied代币存在,但它的作用不能执行这个操作.
error_empty_brand_name名称缺失,空,或仅包含白色空间.
error_brand_already_exists据了解,该账户已经有了不敏感的情况.
error_subscription_expired为了继续使用服务,支付关税.
error_unknown节省请求时间和联系支持;不要盲目重新尝试突变.
/api/brand/{brandId}取代可编辑的品牌字段. ID 来自URL;不要在 JSON 中发送品牌Id.
标志字段由单独的终端点管理.
| 字段 | 类型 | 必填 | 描述 |
|---|---|---|---|
brandId |
integer | 是 | 品牌更新. |
application/json| 字段 | 类型 | 必填 | 描述 |
|---|---|---|---|
name |
string | 是 | 唯一的新名字. |
deleted默认值: false |
boolean | 否 | 存档状态. |
ozonName |
string | 否 | 子的品牌名字. |
ozonId |
integer · int64 | 否 | 标识标识符在奥森. |
oneCId |
string | 否 | 标志标志 1C |
curl --request PUT 'https://api.selsup.ru/api/brand/8124' \
--header 'Authorization: YOUR_API_TOKEN' \
--header 'Content-Type: application/json' \
--data '{
"name": "Base Studio",
"deleted": false,
"ozonName": "BASE STUDIO",
"ozonId": 100582,
"oneCId": "BRAND-001"
}'
const response = await fetch('https://api.selsup.ru/api/brand/8124', {
method: 'PUT',
headers: {
Authorization: process.env.SELSUP_API_TOKEN,
'Content-Type': 'application/json',
},
body: JSON.stringify({
"name": "Base Studio",
"deleted": false,
"ozonName": "BASE STUDIO",
"ozonId": 100582,
"oneCId": "BRAND-001"
}),
});
if (!response.ok) {
const error = await response.json();
throw new Error(error.error || 'selsup_request_failed');
}
const result = await response.json();
const response: Response = await fetch('https://api.selsup.ru/api/brand/8124', {
method: 'PUT',
headers: {
Authorization: process.env.SELSUP_API_TOKEN!,
'Content-Type': 'application/json',
},
body: JSON.stringify({
"name": "Base Studio",
"deleted": false,
"ozonName": "BASE STUDIO",
"ozonId": 100582,
"oneCId": "BRAND-001"
}),
});
if (!response.ok) {
const error = await response.json() as { error?: string };
throw new Error(error.error ?? 'selsup_request_failed');
}
const result: unknown = await response.json();
import os
import requests
response = requests.put(
'https://api.selsup.ru/api/brand/8124',
headers={'Authorization': os.environ['SELSUP_API_TOKEN']},
json={
'name': 'Base Studio',
'deleted': False,
'ozonName': 'BASE STUDIO',
'ozonId': 100582,
'oneCId': 'BRAND-001'
},
)
response.raise_for_status()
result = response.json()
<?php
$payload = <<<'JSON'
{
"name": "Base Studio",
"deleted": false,
"ozonName": "BASE STUDIO",
"ozonId": 100582,
"oneCId": "BRAND-001"
}
JSON;
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => 'https://api.selsup.ru/api/brand/8124',
CURLOPT_CUSTOMREQUEST => 'PUT',
CURLOPT_RETURNTRANSFER => true,
CURLOPT_HTTPHEADER => ['Authorization: ' . getenv('SELSUP_API_TOKEN'), 'Content-Type: application/json'],
CURLOPT_POSTFIELDS => $payload,
]);
$response = curl_exec($curl);
$status = curl_getinfo($curl, CURLINFO_HTTP_CODE);
curl_close($curl);
if ($response === false || $status >= 400) {
throw new RuntimeException($response ?: 'selsup_request_failed');
}
echo $response;
package main
import (
"fmt"
"io"
"net/http"
"os"
"strings"
)
func main() {
req, err := http.NewRequest("PUT", "https://api.selsup.ru/api/brand/8124", strings.NewReader(`{
"name": "Base Studio",
"deleted": false,
"ozonName": "BASE STUDIO",
"ozonId": 100582,
"oneCId": "BRAND-001"
}`))
if err != nil { panic(err) }
req.Header.Set("Authorization", os.Getenv("SELSUP_API_TOKEN"))
req.Header.Set("Content-Type", "application/json")
response, err := http.DefaultClient.Do(req)
if err != nil { panic(err) }
defer response.Body.Close()
result, _ := io.ReadAll(response.Body)
fmt.Printf("%d\n%s\n", response.StatusCode, result)
}
import java.net.URI;
import java.net.http.HttpClient;
import java.net.http.HttpRequest;
import java.net.http.HttpResponse;
public class SelSupExample {
public static void main(String[] args) throws Exception {
HttpRequest request = HttpRequest.newBuilder(URI.create("https://api.selsup.ru/api/brand/8124"))
.header("Authorization", System.getenv("SELSUP_API_TOKEN"))
.header("Content-Type", "application/json")
.method("PUT", HttpRequest.BodyPublishers.ofString("""
{
"name": "Base Studio",
"deleted": false,
"ozonName": "BASE STUDIO",
"ozonId": 100582,
"oneCId": "BRAND-001"
}
"""))
.build();
HttpResponse<String> response = HttpClient.newHttpClient()
.send(request, HttpResponse.BodyHandlers.ofString());
System.out.println(response.statusCode());
System.out.println(response.body());
}
}
Brand
| 字段 | 类型 | 必填 | 描述 |
|---|---|---|---|
brandId |
integer | 否 | 现行SelSup账户中的品牌标识符. |
name |
string | 是 | 标签名称. 保存时,将领先和后续空间移除. |
logoUrl |
string | 否 | 现行标志的公开URL. |
logoSize |
integer | 否 | 标志量在字节中. |
logoWidth |
integer | 否 | 标志宽度在像素中. |
logoHeight |
integer | 否 | 标志高度在像素中. |
deleted默认值: false |
boolean | 否 | 品牌是否被存档. |
ozonName |
string | 否 | 标签名 标识名 |
ozonId |
integer · int64 | 否 | 标识标识符在奥森. |
oneCId |
string | 否 | 标志表 1C 中的外部标志标志. |
{
"brandId": 8124,
"name": "Base Studio",
"deleted": false,
"ozonName": "BASE STUDIO",
"ozonId": 100582,
"oneCId": "BRAND-001"
}应用错误通常以 JSON, error,localMessage和 params为回归. 如何返回应用错误 ↑
auth_requiredAuthorization 缺失,空,或包含无效的代币.
error_access_denied代币存在,但它的作用不能执行这个操作.
error_empty_brand_name名称缺失,空,或仅包含白色空间.
error_brand_already_exists据了解,该账户已经有了不敏感的情况.
error_subscription_expired为了继续使用服务,支付关税.
error_unknown节省请求时间和联系支持;不要盲目重新尝试突变.
/api/brand/{brandId}在 deleted=true 中,SelSup 尝试硬删除.如果引用存在,它将标志存档. deleted = false 将其恢复.
| 字段 | 类型 | 必填 | 描述 |
|---|---|---|---|
brandId |
integer | 是 | 标志标志. |
| 字段 | 类型 | 必填 | 描述 |
|---|---|---|---|
deleted |
boolean | 是 | 删除或存档的真实;恢复的错误. |
curl --request DELETE 'https://api.selsup.ru/api/brand/8124?deleted=true' \
--header 'Authorization: YOUR_API_TOKEN'
const response = await fetch('https://api.selsup.ru/api/brand/8124?deleted=true', {
method: 'DELETE',
headers: { Authorization: process.env.SELSUP_API_TOKEN },
});
if (!response.ok) {
const error = await response.json();
throw new Error(error.error || 'selsup_request_failed');
}
const result = await response.json();
const response: Response = await fetch('https://api.selsup.ru/api/brand/8124?deleted=true', {
method: 'DELETE',
headers: { Authorization: process.env.SELSUP_API_TOKEN! },
});
if (!response.ok) {
const error = await response.json() as { error?: string };
throw new Error(error.error ?? 'selsup_request_failed');
}
const result: unknown = await response.json();
import os
import requests
response = requests.delete(
'https://api.selsup.ru/api/brand/8124?deleted=true',
headers={'Authorization': os.environ['SELSUP_API_TOKEN']},
)
response.raise_for_status()
result = response.json()
<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => 'https://api.selsup.ru/api/brand/8124?deleted=true',
CURLOPT_CUSTOMREQUEST => 'DELETE',
CURLOPT_RETURNTRANSFER => true,
CURLOPT_HTTPHEADER => ['Authorization: ' . getenv('SELSUP_API_TOKEN')],
]);
$response = curl_exec($curl);
$status = curl_getinfo($curl, CURLINFO_HTTP_CODE);
curl_close($curl);
if ($response === false || $status >= 400) {
throw new RuntimeException($response ?: 'selsup_request_failed');
}
echo $response;
package main
import (
"fmt"
"io"
"net/http"
"os"
)
func main() {
req, err := http.NewRequest("DELETE", "https://api.selsup.ru/api/brand/8124?deleted=true", nil)
if err != nil { panic(err) }
req.Header.Set("Authorization", os.Getenv("SELSUP_API_TOKEN"))
response, err := http.DefaultClient.Do(req)
if err != nil { panic(err) }
defer response.Body.Close()
result, _ := io.ReadAll(response.Body)
fmt.Printf("%d\n%s\n", response.StatusCode, result)
}
import java.net.URI;
import java.net.http.HttpClient;
import java.net.http.HttpRequest;
import java.net.http.HttpResponse;
public class SelSupExample {
public static void main(String[] args) throws Exception {
HttpRequest request = HttpRequest.newBuilder(URI.create("https://api.selsup.ru/api/brand/8124?deleted=true"))
.header("Authorization", System.getenv("SELSUP_API_TOKEN"))
.method("DELETE", HttpRequest.BodyPublishers.noBody())
.build();
HttpResponse<String> response = HttpClient.newHttpClient()
.send(request, HttpResponse.BodyHandlers.ofString());
System.out.println(response.statusCode());
System.out.println(response.body());
}
}
brand_has_been_removed标志被永久删除.
brand_signed_as_deleted引用防止删除,所以品牌被存档.
brand_has_been_restore标志从档案中恢复.
"brand_signed_as_deleted"应用错误通常以 JSON, error,localMessage和 params为回归. 如何返回应用错误 ↑
auth_requiredAuthorization 缺失,空,或包含无效的代币.
error_access_denied代币存在,但它的作用不能执行这个操作.
error_unknown节省请求时间和联系支持;不要盲目重新尝试突变.
/api/brand/{brandId}/image装载图像为多部分/form-data. 已有的标志被取代.
发送二进制文件;这个终端点不接受JSON.
| 字段 | 类型 | 必填 | 描述 |
|---|---|---|---|
brandId |
integer | 是 | 标志标志. |
multipart/form-data| 字段 | 类型 | 必填 | 描述 |
|---|---|---|---|
file |
binary | 是 | 支持格式的图像文件. |
curl --request POST 'https://api.selsup.ru/api/brand/8124/image' \
--header 'Authorization: YOUR_API_TOKEN' \
--form 'file=@./logo.png'
const form = new FormData();
form.append('file', fileInput.files[0]);
const response = await fetch('https://api.selsup.ru/api/brand/8124/image', {
method: 'POST',
headers: { Authorization: process.env.SELSUP_API_TOKEN },
body: form,
});
if (!response.ok) {
const error = await response.json();
throw new Error(error.error || 'selsup_request_failed');
}
const result = await response.json();
const form: FormData = new FormData();
form.append('file', fileInput.files![0]);
const response: Response = await fetch('https://api.selsup.ru/api/brand/8124/image', {
method: 'POST',
headers: { Authorization: process.env.SELSUP_API_TOKEN! },
body: form,
});
if (!response.ok) {
const error = await response.json() as { error?: string };
throw new Error(error.error ?? 'selsup_request_failed');
}
const result: unknown = await response.json();
import os
import requests
response = requests.post(
'https://api.selsup.ru/api/brand/8124/image',
headers={'Authorization': os.environ['SELSUP_API_TOKEN']},
files={'file': open('./logo.png', 'rb')},
)
response.raise_for_status()
result = response.json()
<?php
$payload = ['file' => new CURLFile('./logo.png')];
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => 'https://api.selsup.ru/api/brand/8124/image',
CURLOPT_CUSTOMREQUEST => 'POST',
CURLOPT_RETURNTRANSFER => true,
CURLOPT_HTTPHEADER => ['Authorization: ' . getenv('SELSUP_API_TOKEN')],
CURLOPT_POSTFIELDS => $payload,
]);
$response = curl_exec($curl);
$status = curl_getinfo($curl, CURLINFO_HTTP_CODE);
curl_close($curl);
if ($response === false || $status >= 400) {
throw new RuntimeException($response ?: 'selsup_request_failed');
}
echo $response;
package main
import (
"bytes"
"fmt"
"io"
"mime/multipart"
"net/http"
"os"
"path/filepath"
)
func main() {
var body bytes.Buffer
writer := multipart.NewWriter(&body)
file, err := os.Open("./logo.png")
if err != nil { panic(err) }
defer file.Close()
part, err := writer.CreateFormFile("file", filepath.Base(file.Name()))
if err != nil { panic(err) }
if _, err = io.Copy(part, file); err != nil { panic(err) }
writer.Close()
req, err := http.NewRequest("POST", "https://api.selsup.ru/api/brand/8124/image", &body)
if err != nil { panic(err) }
req.Header.Set("Authorization", os.Getenv("SELSUP_API_TOKEN"))
req.Header.Set("Content-Type", writer.FormDataContentType())
response, err := http.DefaultClient.Do(req)
if err != nil { panic(err) }
defer response.Body.Close()
result, _ := io.ReadAll(response.Body)
fmt.Printf("%d\n%s\n", response.StatusCode, result)
}
import java.net.URI;
import java.net.http.HttpClient;
import java.net.http.HttpRequest;
import java.net.http.HttpResponse;
import java.nio.charset.StandardCharsets;
import java.nio.file.Files;
import java.nio.file.Path;
public class SelSupExample {
public static void main(String[] args) throws Exception {
String boundary = "SelSupBoundary" + System.currentTimeMillis();
byte[] file = Files.readAllBytes(Path.of("./logo.png"));
byte[] head = ("--" + boundary + "\r\n" +
"Content-Disposition: form-data; name=\"file\"; filename=\"logo.png\"\r\n" +
"Content-Type: image/png\r\n\r\n").getBytes(StandardCharsets.UTF_8);
byte[] tail = ("\r\n--" + boundary + "--\r\n").getBytes(StandardCharsets.UTF_8);
byte[] payload = new byte[head.length + file.length + tail.length];
System.arraycopy(head, 0, payload, 0, head.length);
System.arraycopy(file, 0, payload, head.length, file.length);
System.arraycopy(tail, 0, payload, head.length + file.length, tail.length);
HttpRequest request = HttpRequest.newBuilder(URI.create("https://api.selsup.ru/api/brand/8124/image"))
.header("Authorization", System.getenv("SELSUP_API_TOKEN"))
.header("Content-Type", "multipart/form-data; boundary=" + boundary)
.method("POST", HttpRequest.BodyPublishers.ofByteArray(payload))
.build();
HttpResponse<String> response = HttpClient.newHttpClient()
.send(request, HttpResponse.BodyHandlers.ofString());
System.out.println(response.statusCode());
System.out.println(response.body());
}
}
Brand
| 字段 | 类型 | 必填 | 描述 |
|---|---|---|---|
brandId |
integer | 否 | 现行SelSup账户中的品牌标识符. |
name |
string | 是 | 标签名称. 保存时,将领先和后续空间移除. |
logoUrl |
string | 否 | 现行标志的公开URL. |
logoSize |
integer | 否 | 标志量在字节中. |
logoWidth |
integer | 否 | 标志宽度在像素中. |
logoHeight |
integer | 否 | 标志高度在像素中. |
deleted默认值: false |
boolean | 否 | 品牌是否被存档. |
ozonName |
string | 否 | 标签名 标识名 |
ozonId |
integer · int64 | 否 | 标识标识符在奥森. |
oneCId |
string | 否 | 标志表 1C 中的外部标志标志. |
{
"brandId": 8124,
"name": "Base",
"logoUrl": "https://files.selsup.ru/brand/8124.png",
"logoSize": 18420,
"logoWidth": 512,
"logoHeight": 512,
"deleted": false
}应用错误通常以 JSON, error,localMessage和 params为回归. 如何返回应用错误 ↑
auth_requiredAuthorization 缺失,空,或包含无效的代币.
error_access_denied代币存在,但它的作用不能执行这个操作.
error_brand_to_found文件保存error代码,正如API所返回的.
error_wrong_image_format文件无法解码为支持的图像格式.
error_max_upload_size_exceeded多部分请求超过服务器上传限.
error_subscription_expired为了继续使用服务,支付关税.
error_unknown节省请求时间和联系支持;不要盲目重新尝试突变.
/api/brand/{brandId}/image删除标志文件,并在品牌记录中重置其尺寸.
| 字段 | 类型 | 必填 | 描述 |
|---|---|---|---|
brandId |
integer | 是 | 标志标志. |
curl --request DELETE 'https://api.selsup.ru/api/brand/8124/image' \
--header 'Authorization: YOUR_API_TOKEN'
const response = await fetch('https://api.selsup.ru/api/brand/8124/image', {
method: 'DELETE',
headers: { Authorization: process.env.SELSUP_API_TOKEN },
});
if (!response.ok) {
const error = await response.json();
throw new Error(error.error || 'selsup_request_failed');
}
const result = await response.json();
const response: Response = await fetch('https://api.selsup.ru/api/brand/8124/image', {
method: 'DELETE',
headers: { Authorization: process.env.SELSUP_API_TOKEN! },
});
if (!response.ok) {
const error = await response.json() as { error?: string };
throw new Error(error.error ?? 'selsup_request_failed');
}
const result: unknown = await response.json();
import os
import requests
response = requests.delete(
'https://api.selsup.ru/api/brand/8124/image',
headers={'Authorization': os.environ['SELSUP_API_TOKEN']},
)
response.raise_for_status()
result = response.json()
<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => 'https://api.selsup.ru/api/brand/8124/image',
CURLOPT_CUSTOMREQUEST => 'DELETE',
CURLOPT_RETURNTRANSFER => true,
CURLOPT_HTTPHEADER => ['Authorization: ' . getenv('SELSUP_API_TOKEN')],
]);
$response = curl_exec($curl);
$status = curl_getinfo($curl, CURLINFO_HTTP_CODE);
curl_close($curl);
if ($response === false || $status >= 400) {
throw new RuntimeException($response ?: 'selsup_request_failed');
}
echo $response;
package main
import (
"fmt"
"io"
"net/http"
"os"
)
func main() {
req, err := http.NewRequest("DELETE", "https://api.selsup.ru/api/brand/8124/image", nil)
if err != nil { panic(err) }
req.Header.Set("Authorization", os.Getenv("SELSUP_API_TOKEN"))
response, err := http.DefaultClient.Do(req)
if err != nil { panic(err) }
defer response.Body.Close()
result, _ := io.ReadAll(response.Body)
fmt.Printf("%d\n%s\n", response.StatusCode, result)
}
import java.net.URI;
import java.net.http.HttpClient;
import java.net.http.HttpRequest;
import java.net.http.HttpResponse;
public class SelSupExample {
public static void main(String[] args) throws Exception {
HttpRequest request = HttpRequest.newBuilder(URI.create("https://api.selsup.ru/api/brand/8124/image"))
.header("Authorization", System.getenv("SELSUP_API_TOKEN"))
.method("DELETE", HttpRequest.BodyPublishers.noBody())
.build();
HttpResponse<String> response = HttpClient.newHttpClient()
.send(request, HttpResponse.BodyHandlers.ofString());
System.out.println(response.statusCode());
System.out.println(response.body());
}
}
Brand
| 字段 | 类型 | 必填 | 描述 |
|---|---|---|---|
brandId |
integer | 否 | 现行SelSup账户中的品牌标识符. |
name |
string | 是 | 标签名称. 保存时,将领先和后续空间移除. |
logoUrl |
string | 否 | 现行标志的公开URL. |
logoSize |
integer | 否 | 标志量在字节中. |
logoWidth |
integer | 否 | 标志宽度在像素中. |
logoHeight |
integer | 否 | 标志高度在像素中. |
deleted默认值: false |
boolean | 否 | 品牌是否被存档. |
ozonName |
string | 否 | 标签名 标识名 |
ozonId |
integer · int64 | 否 | 标识标识符在奥森. |
oneCId |
string | 否 | 标志表 1C 中的外部标志标志. |
{
"brandId": 8124,
"name": "Base",
"logoSize": 0,
"logoWidth": 0,
"logoHeight": 0,
"deleted": false
}应用错误通常以 JSON, error,localMessage和 params为回归. 如何返回应用错误 ↑
auth_requiredAuthorization 缺失,空,或包含无效的代币.
error_access_denied代币存在,但它的作用不能执行这个操作.
error_brand_to_found文件保存error代码,正如API所返回的.
error_empty_brand_logo对于没有标志的品牌,要求删除标志.
error_cant_remove_brand_logo存储无法删除文件或更新品牌记录.
error_subscription_expired为了继续使用服务,支付关税.
error_unknown节省请求时间和联系支持;不要盲目重新尝试突变.
/api/brand/{brandId}/merge/{removeBrandId}移动产品模型从删除BrandId到BrandID,然后永久删除删除BandId.
取消BrandId是取消的重复文件.
| 字段 | 类型 | 必填 | 描述 |
|---|---|---|---|
brandId |
integer | 是 | 标志标志. |
removeBrandId |
integer | 是 | 复制品牌标识符,要删除. |
curl --request POST 'https://api.selsup.ru/api/brand/8124/merge/9012' \
--header 'Authorization: YOUR_API_TOKEN'
const response = await fetch('https://api.selsup.ru/api/brand/8124/merge/9012', {
method: 'POST',
headers: { Authorization: process.env.SELSUP_API_TOKEN },
});
if (!response.ok) {
const error = await response.json();
throw new Error(error.error || 'selsup_request_failed');
}
const response: Response = await fetch('https://api.selsup.ru/api/brand/8124/merge/9012', {
method: 'POST',
headers: { Authorization: process.env.SELSUP_API_TOKEN! },
});
if (!response.ok) {
const error = await response.json() as { error?: string };
throw new Error(error.error ?? 'selsup_request_failed');
}
import os
import requests
response = requests.post(
'https://api.selsup.ru/api/brand/8124/merge/9012',
headers={'Authorization': os.environ['SELSUP_API_TOKEN']},
)
response.raise_for_status()
<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => 'https://api.selsup.ru/api/brand/8124/merge/9012',
CURLOPT_CUSTOMREQUEST => 'POST',
CURLOPT_RETURNTRANSFER => true,
CURLOPT_HTTPHEADER => ['Authorization: ' . getenv('SELSUP_API_TOKEN')],
]);
$response = curl_exec($curl);
$status = curl_getinfo($curl, CURLINFO_HTTP_CODE);
curl_close($curl);
if ($response === false || $status >= 400) {
throw new RuntimeException($response ?: 'selsup_request_failed');
}
echo $response;
package main
import (
"fmt"
"io"
"net/http"
"os"
)
func main() {
req, err := http.NewRequest("POST", "https://api.selsup.ru/api/brand/8124/merge/9012", nil)
if err != nil { panic(err) }
req.Header.Set("Authorization", os.Getenv("SELSUP_API_TOKEN"))
response, err := http.DefaultClient.Do(req)
if err != nil { panic(err) }
defer response.Body.Close()
result, _ := io.ReadAll(response.Body)
fmt.Printf("%d\n%s\n", response.StatusCode, result)
}
import java.net.URI;
import java.net.http.HttpClient;
import java.net.http.HttpRequest;
import java.net.http.HttpResponse;
public class SelSupExample {
public static void main(String[] args) throws Exception {
HttpRequest request = HttpRequest.newBuilder(URI.create("https://api.selsup.ru/api/brand/8124/merge/9012"))
.header("Authorization", System.getenv("SELSUP_API_TOKEN"))
.method("POST", HttpRequest.BodyPublishers.noBody())
.build();
HttpResponse<String> response = HttpClient.newHttpClient()
.send(request, HttpResponse.BodyHandlers.ofString());
System.out.println(response.statusCode());
System.out.println(response.body());
}
}
答案没有身体.
应用错误通常以 JSON, error,localMessage和 params为回归. 如何返回应用错误 ↑
auth_requiredAuthorization 缺失,空,或包含无效的代币.
error_access_denied代币存在,但它的作用不能执行这个操作.
error_brand_not_found申请合并的品牌之一在流动账户中不存在.
error_subscription_expired为了继续使用服务,支付关税.
error_unknown节省请求时间和联系支持;不要盲目重新尝试突变.