Redemptions & Discount Codes
Update discount code status
PUT
/
api
/
external
/
update-discount
Update discount code status
curl --request PUT \
--url https://loyalty-admin.appstle.com/api/external/update-discount \
--header 'Content-Type: application/json' \
--data '
{
"customerId": 67890,
"discountCode": "LOYALTY15OFF",
"status": "USED"
}
'import requests
url = "https://loyalty-admin.appstle.com/api/external/update-discount"
payload = {
"customerId": 67890,
"discountCode": "LOYALTY15OFF",
"status": "USED"
}
headers = {"Content-Type": "application/json"}
response = requests.put(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'PUT',
headers: {'Content-Type': 'application/json'},
body: JSON.stringify({customerId: 67890, discountCode: 'LOYALTY15OFF', status: 'USED'})
};
fetch('https://loyalty-admin.appstle.com/api/external/update-discount', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));const url = 'https://loyalty-admin.appstle.com/api/external/update-discount';
const options = {
method: 'PUT',
headers: {'Content-Type': 'application/json'},
body: JSON.stringify({customerId: 67890, discountCode: 'LOYALTY15OFF', status: 'USED'})
};
fetch(url, options)
.then(res => res.json())
.then(json => console.log(json))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://loyalty-admin.appstle.com/api/external/update-discount",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "PUT",
CURLOPT_POSTFIELDS => json_encode([
'customerId' => 67890,
'discountCode' => 'LOYALTY15OFF',
'status' => 'USED'
]),
CURLOPT_HTTPHEADER => [
"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://loyalty-admin.appstle.com/api/external/update-discount"
payload := strings.NewReader("{\n \"customerId\": 67890,\n \"discountCode\": \"LOYALTY15OFF\",\n \"status\": \"USED\"\n}")
req, _ := http.NewRequest("PUT", url, payload)
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))
}require 'uri'
require 'net/http'
url = URI("https://loyalty-admin.appstle.com/api/external/update-discount")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Put.new(url)
request["Content-Type"] = 'application/json'
request.body = "{\n \"customerId\": 67890,\n \"discountCode\": \"LOYALTY15OFF\",\n \"status\": \"USED\"\n}"
response = http.request(request)
puts response.read_body{
"createAt": "2025-01-15T10:30:00Z",
"customerId": 67890,
"discountCode": "LOYALTY15OFF",
"discountType": "PERCENTAGE",
"discountValue": 15,
"expiryDate": "2025-06-30T23:59:59Z",
"id": 12345,
"pointsRedeemed": 100,
"status": "USED",
"usedAt": "2025-01-29T10:45:00Z"
}{
"currentStatus": "USED",
"error": "Discount code already marked as used",
"usedAt": "2025-01-20T14:30:00Z"
}{
"error": "Invalid API key"
}Body
application/json
Request containing customer ID, discount code, and new status
Shopify customer ID (numeric). Identifies which customer owns the discount code. Used to verify the discount code belongs to this customer before updating. Example: 67890
Example:
67890
The discount code to update. Case-insensitive. Must be a valid loyalty discount code that belongs to the specified customer. Examples: "LOYALTY15OFF", "VIP20", "WELCOME10"
Maximum string length:
100Example:
"LOYALTY15OFF"
New status for the discount code. Valid values:
- USED: Mark code as used after checkout (most common)
- SUBSCRIPTION_ACTIVE: Mark code as active for subscription renewals
- UNUSED: Reset code to unused state (use carefully)
- EXPIRED: Manually expire a code
Status transitions:
- UNUSED → USED: Normal checkout flow
- UNUSED → SUBSCRIPTION_ACTIVE: Subscription created
- SUBSCRIPTION_ACTIVE → USED: Subscription ended
- Any → EXPIRED: Manual expiration
Note: Cannot mark already USED codes as USED again.
Available options:
USED, UNUSED, REFUNDED, EXPIRED, SUBSCRIPTION_ACTIVE, CANCELED, USED, UNUSED, SUBSCRIPTION_ACTIVE, EXPIRED Example:
"USED"
Response
Discount code status successfully updated
Available options:
USED, UNUSED, REFUNDED, EXPIRED, SUBSCRIPTION_ACTIVE, CANCELED Available options:
STORE_CREDIT, DISCOUNT_CODE, POINTS ⌘I
Update discount code status
curl --request PUT \
--url https://loyalty-admin.appstle.com/api/external/update-discount \
--header 'Content-Type: application/json' \
--data '
{
"customerId": 67890,
"discountCode": "LOYALTY15OFF",
"status": "USED"
}
'import requests
url = "https://loyalty-admin.appstle.com/api/external/update-discount"
payload = {
"customerId": 67890,
"discountCode": "LOYALTY15OFF",
"status": "USED"
}
headers = {"Content-Type": "application/json"}
response = requests.put(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'PUT',
headers: {'Content-Type': 'application/json'},
body: JSON.stringify({customerId: 67890, discountCode: 'LOYALTY15OFF', status: 'USED'})
};
fetch('https://loyalty-admin.appstle.com/api/external/update-discount', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));const url = 'https://loyalty-admin.appstle.com/api/external/update-discount';
const options = {
method: 'PUT',
headers: {'Content-Type': 'application/json'},
body: JSON.stringify({customerId: 67890, discountCode: 'LOYALTY15OFF', status: 'USED'})
};
fetch(url, options)
.then(res => res.json())
.then(json => console.log(json))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://loyalty-admin.appstle.com/api/external/update-discount",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "PUT",
CURLOPT_POSTFIELDS => json_encode([
'customerId' => 67890,
'discountCode' => 'LOYALTY15OFF',
'status' => 'USED'
]),
CURLOPT_HTTPHEADER => [
"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://loyalty-admin.appstle.com/api/external/update-discount"
payload := strings.NewReader("{\n \"customerId\": 67890,\n \"discountCode\": \"LOYALTY15OFF\",\n \"status\": \"USED\"\n}")
req, _ := http.NewRequest("PUT", url, payload)
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))
}require 'uri'
require 'net/http'
url = URI("https://loyalty-admin.appstle.com/api/external/update-discount")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Put.new(url)
request["Content-Type"] = 'application/json'
request.body = "{\n \"customerId\": 67890,\n \"discountCode\": \"LOYALTY15OFF\",\n \"status\": \"USED\"\n}"
response = http.request(request)
puts response.read_body{
"createAt": "2025-01-15T10:30:00Z",
"customerId": 67890,
"discountCode": "LOYALTY15OFF",
"discountType": "PERCENTAGE",
"discountValue": 15,
"expiryDate": "2025-06-30T23:59:59Z",
"id": 12345,
"pointsRedeemed": 100,
"status": "USED",
"usedAt": "2025-01-29T10:45:00Z"
}{
"currentStatus": "USED",
"error": "Discount code already marked as used",
"usedAt": "2025-01-20T14:30:00Z"
}{
"error": "Invalid API key"
}