Add Voucher History
curl --request POST \
--url https://api.vellaro.io/api/v1/admin/vouchers/{id}/history \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"order_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"amount": 1
}
'import requests
url = "https://api.vellaro.io/api/v1/admin/vouchers/{id}/history"
payload = {
"order_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"amount": 1
}
headers = {
"Authorization": "Bearer <token>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {Authorization: 'Bearer <token>', 'Content-Type': 'application/json'},
body: JSON.stringify({order_id: '3c90c3cc-0d44-4b50-8888-8dd25736052a', amount: 1})
};
fetch('https://api.vellaro.io/api/v1/admin/vouchers/{id}/history', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://api.vellaro.io/api/v1/admin/vouchers/{id}/history",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "POST",
CURLOPT_POSTFIELDS => json_encode([
'order_id' => '3c90c3cc-0d44-4b50-8888-8dd25736052a',
'amount' => 1
]),
CURLOPT_HTTPHEADER => [
"Authorization: Bearer <token>",
"Content-Type: application/json"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"strings"
"net/http"
"io"
)
func main() {
url := "https://api.vellaro.io/api/v1/admin/vouchers/{id}/history"
payload := strings.NewReader("{\n \"order_id\": \"3c90c3cc-0d44-4b50-8888-8dd25736052a\",\n \"amount\": 1\n}")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("Authorization", "Bearer <token>")
req.Header.Add("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.post("https://api.vellaro.io/api/v1/admin/vouchers/{id}/history")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"order_id\": \"3c90c3cc-0d44-4b50-8888-8dd25736052a\",\n \"amount\": 1\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.vellaro.io/api/v1/admin/vouchers/{id}/history")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["Authorization"] = 'Bearer <token>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"order_id\": \"3c90c3cc-0d44-4b50-8888-8dd25736052a\",\n \"amount\": 1\n}"
response = http.request(request)
puts response.read_body{
"data": {
"id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"voucher_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"order_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"amount": 123,
"created_at": "2023-11-07T05:31:56Z",
"order_customer_email": "<string>",
"order_status": "<string>",
"order_payment_status": "<string>"
},
"meta": {
"page": 123,
"page_size": 123,
"total": 123,
"total_pages": 123
},
"error": "<string>",
"error_code": "<string>"
}{
"detail": [
{
"loc": [
"<string>"
],
"msg": "<string>",
"type": "<string>",
"input": "<unknown>",
"ctx": {}
}
]
}Promotions & coupons
Add Voucher History
Admin: record a redemption by hand (amount > 0, order of this store).
VEN-19: a negative amount raised the balance and the order was not checked. The voucher row is locked, like at checkout, so a manual entry and a checkout cannot spend the same balance twice.
ORD-6: the ORDER is locked first (FOR UPDATE), then the voucher, as in the lock sequence of every path (§10.6: order → coupon / voucher → variants): an entry written while the order goes to the trash waits for the trash and then finds it in the trash (404), or the trash waits for the entry and gives the amount back. Read without the lock, the entry could land on an order the trash had just hidden.
POST
/
api
/
v1
/
admin
/
vouchers
/
{id}
/
history
Add Voucher History
curl --request POST \
--url https://api.vellaro.io/api/v1/admin/vouchers/{id}/history \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"order_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"amount": 1
}
'import requests
url = "https://api.vellaro.io/api/v1/admin/vouchers/{id}/history"
payload = {
"order_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"amount": 1
}
headers = {
"Authorization": "Bearer <token>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {Authorization: 'Bearer <token>', 'Content-Type': 'application/json'},
body: JSON.stringify({order_id: '3c90c3cc-0d44-4b50-8888-8dd25736052a', amount: 1})
};
fetch('https://api.vellaro.io/api/v1/admin/vouchers/{id}/history', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://api.vellaro.io/api/v1/admin/vouchers/{id}/history",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "POST",
CURLOPT_POSTFIELDS => json_encode([
'order_id' => '3c90c3cc-0d44-4b50-8888-8dd25736052a',
'amount' => 1
]),
CURLOPT_HTTPHEADER => [
"Authorization: Bearer <token>",
"Content-Type: application/json"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"strings"
"net/http"
"io"
)
func main() {
url := "https://api.vellaro.io/api/v1/admin/vouchers/{id}/history"
payload := strings.NewReader("{\n \"order_id\": \"3c90c3cc-0d44-4b50-8888-8dd25736052a\",\n \"amount\": 1\n}")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("Authorization", "Bearer <token>")
req.Header.Add("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.post("https://api.vellaro.io/api/v1/admin/vouchers/{id}/history")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"order_id\": \"3c90c3cc-0d44-4b50-8888-8dd25736052a\",\n \"amount\": 1\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.vellaro.io/api/v1/admin/vouchers/{id}/history")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["Authorization"] = 'Bearer <token>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"order_id\": \"3c90c3cc-0d44-4b50-8888-8dd25736052a\",\n \"amount\": 1\n}"
response = http.request(request)
puts response.read_body{
"data": {
"id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"voucher_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"order_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"amount": 123,
"created_at": "2023-11-07T05:31:56Z",
"order_customer_email": "<string>",
"order_status": "<string>",
"order_payment_status": "<string>"
},
"meta": {
"page": 123,
"page_size": 123,
"total": 123,
"total_pages": 123
},
"error": "<string>",
"error_code": "<string>"
}{
"detail": [
{
"loc": [
"<string>"
],
"msg": "<string>",
"type": "<string>",
"input": "<unknown>",
"ctx": {}
}
]
}Autorizzazioni
Corpo
application/json