Atualizar/editar Volume Pricing usando APIs
Atualize uma regra de Volume Pricing existente pela API pública, com a referência completa do corpo da requisição.
Este documento explica como atualizar uma regra de Volume Pricing existente usando a API pública.
1. Endpoint
Seção intitulada “1. Endpoint”Para atualizar um registro de Volume Pricing existente, use o seguinte endpoint:
PUT https://wholesale.samita.io/api/v1/volume-pricings/{id}{id}é o ID do registro de Volume Pricing- O ID pode ser obtido na interface do app (sem o símbolo “#”)
- Exemplo de referência:

Exemplo:
Seção intitulada “Exemplo:”PUT https://wholesale.samita.io/api/v1/volume-pricings/12. Cabeçalhos da requisição
Seção intitulada “2. Cabeçalhos da requisição”Todas as requisições à API devem incluir os seguintes cabeçalhos obrigatórios:
| Cabeçalho | Descrição | Obrigatório |
|---|---|---|
X-SAMITA-API-KEY |
Chave de API fornecida no app Wholesale | Sim |
X-SAMITA-SHOP-URL |
Domínio da loja Shopify no formato xxx.myshopify.com | Sim |
CONTENT-TYPE |
Deve ser application/json |
Sim |
Se algum cabeçalho obrigatório estiver ausente, a requisição será rejeitada.
3. Corpo da requisição
Seção intitulada “3. Corpo da requisição”_ Os dados usados para atualizar o Volume Pricing devem ser enviados em formato JSON. Um exemplo de estrutura JSON é apresentado no final deste documento.
_ Somente os campos que precisam ser atualizados são necessários na requisição. Não é obrigatório enviar todos os campos, como no método de criação da API.
_ Os campos não informados permanecem inalterados
Exemplo de JSON da requisição:
{ "title": "New Volume Pricing", "status": true, "type": "quantity", "apply_customer": { "type": "all", "tags": [] }, "exclude_customer": { "type": "none", "tags": [] }, "apply_product": { "type": "all", "product_ids": [], "product_tags": [], "collection_ids": [], "apply_for_variants": false }, "exclude_product": { "type": "none", "product_ids": [], "collection_ids": [] }, "discount_for_variants": [ { "id": 8516448190631, "duplicated": false, "variant_pricing": true, "from_qty": "0", "from_amount": "0", "to_qty": "10", "to_amount": "0", "discount_groups": [ { "name": "all", "type": "percent", "value": "10" } ], "variants": [ { "id": 46747346763943, "duplicated": false, "from_qty": "0", "from_amount": "0", "to_qty": "10", "to_amount": "0", "discount_groups": [ { "name": "all", "type": "percent", "value": "10" } ] } ] } ], "apply_market": { "type": "all", "handle": [] }, "discount_method": "variant", "discount_groups": [ { "from_qty": "0", "from_amount": "0", "to_qty": "10", "to_amount": "0", "type": "percent", "value": "10" } ], "active_date": { "types": ["start date", "end date"], "start_at": "2026-01-15T10:00:00", "end_at": "2026-01-15T10:00:00" }}b. title
Seção intitulada “b. title”- O nome usado para identificar o registro de Volume Pricing
- Deve ser uma string
- Tamanho máximo: 255 caracteres
c. status
Seção intitulada “c. status”- Define se o registro está ativo ou não
- Aceita apenas os seguintes valores:
| Valor | Descrição |
|---|---|
true |
A regra de preço está ativa |
false |
A regra de preço está inativa |
d. type
Seção intitulada “d. type”Define se o preço por volume é calculado por quantidade ou por valor.
Valores aceitos:
quantityamount
e. apply_customer
Seção intitulada “e. apply_customer”Define quais clientes são elegíveis para esta regra de preço.
Estrutura:
"apply_customer": { "type": "all", "tags": []}type
Valores aceitos (apenas um dos seguintes):
all– Aplica a todos os clienteslogged– Aplica somente a clientes conectadosnon-logged– Aplica somente a clientes visitantescustomer-tags– Aplica somente a clientes com tags específicas
tags
- Obrigatório somente quando
type == customer-tags - Deve ser um array separado por vírgulas
- Exemplo:
["wholesale","b2b"]
Se o type não for customer-tags, este campo pode ser ignorado.
f. exclude_customer
Seção intitulada “f. exclude_customer”Usado para excluir clientes específicos da regra de preço.
Estrutura:
"exclude_customer": { "type": "none", "tags": []}type
- Valor padrão:
none - Valores aceitos:
| Valor | Descrição |
|---|---|
none |
Não exclui nenhum cliente |
customer-tags |
Exclui clientes por tags |
tags
- Obrigatório somente quando
type == customer-tags - Array separado por vírgulas
- Exemplo:
["vip","internal"]
g. apply_product
Seção intitulada “g. apply_product”Define a quais produtos a regra de preço será aplicada.
Estrutura:
"apply_product": { "type": "all", "product_ids": [], "product_tags": [], "collection_ids": [], "apply_for_variants": false },type
Valores aceitos:
allproductscollectionsproduct-tags
product_ids
- Obrigatório somente quando
type == products - Lista de IDs de produtos separados por vírgulas
- Exemplo:
[1,2,3]
product_tags
- Obrigatório somente quando
type == product-tags - Exemplo:
["tag1","tag2"]
collection_ids
- Obrigatório somente quando
type == collections - Exemplo:
[1,2,3]
apply_for_variants
- Determina se os descontos podem ser configurados por variante
- Valores aceitos:
trueoufalse - Valor padrão:
false
h. exclude_product
Seção intitulada “h. exclude_product”Define os produtos a serem excluídos da regra.
Estrutura:
"exclude_product": { "type": "none", "product_ids": [], "collection_ids": [] },type
- Padrão:
none - Valores aceitos:
| Valor | Descrição |
|---|---|
none |
Não exclui nenhum produto |
products |
Exclui produtos específicos |
collections |
Exclui coleções específicas |
Os demais campos são obrigatórios apenas conforme o type selecionado.
i. discount_for_variants
Seção intitulada “i. discount_for_variants”Define a configuração de desconto no nível de produto e/ou de variante.
- Deixe este campo vazio se
apply_product.apply_for_variants == false. - Se
apply_product.apply_for_variants == true, este campo é obrigatório. - A estrutura deve ser um array de configurações de produto.
Estrutura:
"discount_for_variants": [ { "id": 8516448190631, "duplicated": false, "variant_pricing": true, "from_qty": "0", "from_amount": "0", "to_qty": "10", "to_amount": "0", "discount_groups": [ { "name": "all", "type": "percent", "value": "10" } ], "variants": [ { "id": 46747346763943, "duplicated": false, "from_qty": "0", "from_amount": "0", "to_qty": "10", "to_amount": "0", "discount_groups": [ { "name": "all", "type": "percent", "value": "10" } ] } ] } ],i.1. id (obrigatório)
- ID do produto.
- Deve corresponder a um produto existente.
i.2. duplicated
Indica se o produto tem várias faixas de quantidade/valor.
Valores aceitos:
truefalse
Regras:
- Se
true: o produto contém várias faixas de quantidade/valor. - Se
false: o produto tem apenas uma faixa de quantidade/valor.
i.3. from_qty / from_amount
Quantidade ou valor inicial da faixa.
Regras:
- O primeiro item pode ficar vazio (o padrão é 1).
- Todos os itens seguintes são obrigatórios.
i.4. to_qty / to_amount
Quantidade ou valor final da faixa.
Regras:
- Pode ficar vazio (será calculado automaticamente como o valor de
fromdo próximo item menos 1). - Se informado, deve ser menor que o valor de
fromdo próximo item.
Exemplos:
- Item 1: 0–10 → Item 2: 11–20
- Item 1: 0–em branco → Item 2: 10–em branco
- Item 1: em branco–10 → Item 2: 11–em branco
i.5. discount_groups (nível de produto)
Define a configuração de desconto de cada faixa de quantidade/valor no nível de produto.
- Obrigatório se
variant_pricing == false. - Deixe vazio se
variant_pricing == true. - Deve ser um array de objetos de desconto correspondente ao
apply_customer.typeconfigurado.
Estrutura:
{ "name": "all", "type": "percent", "value": "10"}+ name
Valores aceitos:
all(seapply_customer.type == all)logged(seapply_customer.type == logged)non-logged(seapply_customer.type == non-logged)
Se outro valor for informado, ele será tratado como uma tag de cliente e deve corresponder a uma das tags definidas em apply_customer.tags.
+ type
Define o tipo de desconto.
Valores aceitos:
percent– Desconto percentualamount– Valor fixo deduzido do preçofixed-amount– Preço final fixo
+ value
- Deve ser um número
- Deve ser maior que 0
- Se
type == percent, o valor deve ser menor que 100
i.6. variant_pricing
Indica se o desconto é aplicado no nível de variante.
Valores aceitos:
truefalse
i.7. variants
Define a configuração de desconto no nível de variante.
- Obrigatório se
variant_pricing == true - Deixe vazio se
variant_pricing == false - Deve ser um array de configurações de variante
Estrutura:
{ "id": 46747346763943, "duplicated": false, "from_qty": "0", "from_amount": "0", "to_qty": "10", "to_amount": "0", "discount_groups": [ { "name": "all", "type": "percent", "value": "10" } ]}+ id (obrigatório)
- ID da variante.
+ duplicate
Indica se a variante tem várias faixas de quantidade/valor.
Valores aceitos:
truefalse
Regras:
- Se
true: a variante contém várias faixas. - Se
false: a variante tem apenas uma faixa.
+ from_qty / from_amount
Quantidade ou valor inicial.
Regras:
- O primeiro item pode ficar vazio (o padrão é 1).
- Todos os itens seguintes são obrigatórios.
+ to_qty / to_amount
Quantidade ou valor final.
Regras:
- Pode ficar vazio (calculado automaticamente como o
fromdo próximo item menos 1). - Se informado, deve ser menor que o valor de
fromdo próximo item.
Exemplos:
- Item 1: 0–10 → Item 2: 11–20
- Item 1: 0–em branco → Item 2: 10–em branco
- Item 1: em branco–10 → Item 2: 11–em branco
+ discount_groups (nível de variante)
Define a configuração de desconto por faixa de quantidade/valor no nível de variante.
Regras:
- Se
apply_customer.typefor:allloggednon-logged
→ O array deve conter apenas um item.
- Se
apply_customer.type == customer-tags
→ O array deve conter vários itens (um por tag de cliente).
name
Valores aceitos:
allloggednon-logged
Se outro valor for informado, ele será tratado como uma tag de cliente e deve corresponder a uma tag definida em apply_customer.tags.
type
Valores aceitos:
percentamountfixed-amount
value
- Deve ser um número
- Deve ser maior que 0
- Se
type == percent, o valor deve ser menor que 100
j. apply_market
Seção intitulada “j. apply_market”Define a quais mercados da Shopify a regra se aplica.
Estrutura:
"apply_market": { "type": "all", "handle": []}type
Valores aceitos:
allspecific-market
handle
- Obrigatório somente quando
type == specific-market - Lista de handles de mercados separados por vírgulas
- Exemplo:
["japan","us"]
k. discount_methods
Seção intitulada “k. discount_methods”Valores aceitos:
variant→ Same Variantacross_group→ Mix Variantswithin_each_group→ Mix Products
Eles correspondem às opções disponíveis no app.
Exemplo:
"discount_method": "variant",l. discount_group
Seção intitulada “l. discount_group”Define as faixas de quantidade/valor e os valores de desconto.
from_qty / from_amount
to_qty / to_amount
Mesmas regras de validação descritas acima.
Valores de “type” aceitos:
percentamountfixed-amount
value:
- Deve ser > 0
- Se percent → deve ser < 100
Estrutura:
"discount_groups": [ { "from_qty": "0", "from_amount": "0", "to_qty": "10", "to_amount": "0", "type": "percent", "value": "10" } ],As regras são as mesmas descritas acima para os tipos e valores de desconto.
m. active_date
Seção intitulada “m. active_date”Usado para configurar o início e o fim da regra de preço.
Estrutura:
"active_date": { "types": ["start_date", "end_date"], "start_at": "2026-01-15 10:00:00", "end_at": "2026-01-15 10:00:00"}types
- Opcional
- Valores aceitos:
start_date,end_date - Pode incluir um ou ambos, separados por vírgula
- Exemplo:
["start_date","end_date"]
start_at
- Obrigatório se
typesincluirstart_date - Formato:
YYYY-MM-DD HH:MM:SS
end_at
- Obrigatório se
typesincluirend_date - Formato:
YYYY-MM-DD HH:MM:SS
4. Resposta da API
Seção intitulada “4. Resposta da API”a. Respostas de erro
Seção intitulada “a. Respostas de erro”401 – Unauthorized
Possíveis motivos:
- URL da loja ausente
- Chave de API ausente
- URL da loja inválida
- Chave de API inválida
- A chave de API não corresponde à loja
403 – This action is unauthorized
- A chave de API não tem a permissão Update
- Cada chave de API pode ter as permissões: View, Create, Update, Delete
- Esta API exige a permissão Update
- Também é retornado quando o ID informado não existe
429 – Too Many Requests
Limite de requisições excedido:
- No máximo 1 requisição a cada 5 minutos
- No máximo 50 requisições por dia
b. Resposta de sucesso
Seção intitulada “b. Resposta de sucesso”200 – API Success
- Registro de Volume Pricing atualizado com sucesso
- Resposta retornada em formato JSON
Exemplo de JSON da resposta:
{ "id": 1, "title": "New Volume Pricing", "status": true, "type": "quantity", "apply_customer": { "type": "all", "tags": [] }, "exclude_customer": { "type": "none", "tags": [] }, "apply_product": { "type": "all", "product_ids": [], "product_tags": [], "collection_ids": [], "apply_for_variants": false }, "exclude_product": { "type": "none", "product_ids": [], "collection_ids": [] }, "discount_for_variants": [ { "id": 8516448190631, "duplicated": false, "variant_pricing": true, "from_qty": "0", "from_amount": "0", "to_qty": "10", "to_amount": "0", "discount_groups": [ { "name": "all", "type": "percent", "value": "10" } ], "variants": [ { "id": 46747346763943, "duplicated": false, "from_qty": "0", "from_amount": "0", "to_qty": "10", "to_amount": "0", "discount_groups": [ { "name": "all", "type": "percent", "value": "10" } ] } ] } ], "apply_market": { "type": "all", "handle": [] }, "discount_method": "variant", "discount_groups": [ { "from_qty": "0", "from_amount": "0", "to_qty": "10", "to_amount": "0", "type": "percent", "value": "10" } ], "active_date": { "types": [], "start_at": "", "end_at": "" }, "created_at": "2026-01-15T10:00:00", "updated_at": "2026-01-15T10:00:00"}