Get Customization
Retrieve details of a single customization by its unique identifier.
Overview
Important This endpoint requires HMAC authentication.
Retrieve details of a single customization by its unique identifier.
Authentication
This endpoint requires HMAC authentication. You must include the Date and Authorization headers. See Authentication for details.
https://live.luigisbox.tech/v1/recommender/pin/{TRACKER_ID}/scope/{CUSTOMIZATION_ID}
Request Parameters
To retrieve a customization, send a GET request to the endpoint with the tracker_id and customization_id in the path.
Path Parameters
| Parameter | Type | Required | Description |
|---|---|---|---|
TRACKER_ID |
String | ✓ | Your unique tracker identifier. |
CUSTOMIZATION_ID |
UUID | ✓ | The unique ID of the customization to retrieve. |
Request Headers
| Header | Value | Description |
|---|---|---|
Content-Type |
application/json |
Required. |
Date |
HTTP Date | Required for HMAC. |
Authorization |
Signature | Required for HMAC. |
Example Request
tracker_id="1234-5678"
customization_id="199620b4-df1a-46e8-ab59-9e9ed9af7106"
private_key="your_private_api_key"
host="https://live.luigisbox.tech"
path="/v1/recommender/pin/${tracker_id}/scope/${customization_id}"
method="GET"
content_type="application/json; charset=utf-8"
date=$(date -u "+%a, %d %b %Y %H:%M:%S GMT")
string_to_sign="$(printf "${method}\n${content_type}\n${date}\n${path}")"
signature=$(echo -n "${string_to_sign}" | openssl dgst -sha256 -hmac "${private_key}" -binary | base64)
curl -X ${method} "${host}${path}" \
-H "Content-Type: ${content_type}" \
-H "Date: ${date}" \
-H "Authorization: ApiAuth ${tracker_id}:${signature}"
How to make a request
All requests to this endpoint must be authenticated using HMAC SHA-256. The examples on the right demonstrate the implementation in various languages, but the core logic follows these steps:
1. Construct the String to Sign
Create a string using the following components, separated by newlines (\n):
- HTTP Method:
GET - Content-Type:
application/json; charset=utf-8 - Date: The current timestamp in RFC 1123 format (e.g.,
Mon, 20 Jan 2025 12:00:00 GMT). - Request Path: The full resource path including the ID..
2. Generate the HMAC Signature
- Create an HMAC SHA-256 hash of the string above using your Private API Key.
- Encode the result in Base64 and trim whitespace.
3. Send the Headers
Include Date, Content-Type, and Authorization: ApiAuth {TRACKER_ID}:{SIGNATURE} in your request.
Example Code
require 'faraday'
require 'base64'
require 'openssl'
require 'json'
require 'time'
def generate_luigisbox_digest(private_key, http_method, endpoint_path, date_header, content_type_header)
data = "#{http_method}\n#{content_type_header}\n#{date_header}\n#{endpoint_path}"
hash = OpenSSL::HMAC.digest('sha256', private_key, data)
Base64.strict_encode64(hash).strip
end
tracker_id = 'YOUR_TRACKER_ID'
customization_id = '199620b4-df1a-46e8-ab59-9e9ed9af7106'
private_key = 'your_private_api_key'
host = 'https://live.luigisbox.tech'
endpoint_path = "/v1/recommender/pin/#{tracker_id}/scope/#{customization_id}"
conn = Faraday.new(url: host)
http_method = 'GET'
content_type = 'application/json; charset=utf-8'
date_header = Time.now.utc.strftime("%a, %d %b %Y %H:%M:%S GMT")
signature = generate_luigisbox_digest(private_key, http_method, endpoint_path, date_header, content_type)
authorization_header = "ApiAuth #{tracker_id}:#{signature}"
response = conn.get(endpoint_path) do |req|
req.headers['Date'] = date_header
req.headers['Content-Type'] = content_type
req.headers['Authorization'] = authorization_header
end
puts response.body
<?php
require 'vendor/autoload.php';
use GuzzleHttp\Client;
function generateLuigisboxDigest($privateKey, $httpMethod, $endpointPath, $dateHeader, $contentTypeHeader) {
$data = "{$httpMethod}\n{$contentTypeHeader}\n{$dateHeader}\n{$endpointPath}";
$hash = hash_hmac('sha256', $data, $privateKey, true);
return trim(base64_encode($hash));
}
$TRACKER_ID = "YOUR_TRACKER_ID";
$CUSTOMIZATION_ID = "199620b4-df1a-46e8-ab59-9e9ed9af7106";
$YOUR_PRIVATE_KEY = "your_private_api_key";
$LUIGISBOX_HOST = 'https://live.luigisbox.tech';
$ENDPOINT_PATH = "/v1/recommender/pin/{$TRACKER_ID}/scope/{$CUSTOMIZATION_ID}";
$http_method = 'GET';
$content_type = 'application/json; charset=utf-8';
$current_date = gmdate('D, d M Y H:i:s') . ' GMT';
$signature = generateLuigisboxDigest($YOUR_PRIVATE_KEY, $http_method, $ENDPOINT_PATH, $current_date, $content_type);
$authorization_header = "ApiAuth {$TRACKER_ID}:{$signature}";
$client = new GuzzleHttp\Client();
$response = $client->request($http_method, "{$LUIGISBOX_HOST}{$ENDPOINT_PATH}", [
'headers' => [
'Content-Type' => $content_type,
'Date' => $current_date,
'Authorization' => $authorization_header,
]
]);
echo $response->getBody();
?>
const axios = require('axios');
const crypto = require('crypto');
function generateLuigisBoxDigest(privateKey, httpMethod, endpointPath, dateHeader, contentTypeHeader) {
const data = </span><span class="p">${</span><span class="nx">httpMethod</span><span class="p">}</span><span class="s2">\n</span><span class="p">${</span><span class="nx">contentTypeHeader</span><span class="p">}</span><span class="s2">\n</span><span class="p">${</span><span class="nx">dateHeader</span><span class="p">}</span><span class="s2">\n</span><span class="p">${</span><span class="nx">endpointPath</span><span class="p">}</span><span class="s2">;
const hmac = crypto.createHmac('sha256', privateKey);
hmac.update(data);
return hmac.digest('base64').trim();
}
const TRACKER_ID = "YOUR_TRACKER_ID";
const CUSTOMIZATION_ID = "199620b4-df1a-46e8-ab59-9e9ed9af7106";
const YOUR_PRIVATE_KEY = "your_private_api_key";
const LUIGISBOX_HOST = 'https://live.luigisbox.tech';
const ENDPOINT_PATH = /v1/recommender/pin/</span><span class="p">${</span><span class="nx">TRACKER_ID</span><span class="p">}</span><span class="s2">/scope/</span><span class="p">${</span><span class="nx">CUSTOMIZATION_ID</span><span class="p">}</span><span class="s2">;
const httpMethod = 'GET';
const contentType = 'application/json; charset=utf-8';
const dateHeader = new Date().toUTCString();
const signature = generateLuigisBoxDigest(YOUR_PRIVATE_KEY, httpMethod, ENDPOINT_PATH, dateHeader, contentType);
const authorizationHeader = ApiAuth </span><span class="p">${</span><span class="nx">TRACKER_ID</span><span class="p">}</span><span class="s2">:</span><span class="p">${</span><span class="nx">signature</span><span class="p">}</span><span class="s2">;
axios({
method: httpMethod,
url: </span><span class="p">${</span><span class="nx">LUIGISBOX_HOST</span><span class="p">}${</span><span class="nx">ENDPOINT_PATH</span><span class="p">}</span><span class="s2">,
headers: {
'Content-Type': contentType,
'Date': dateHeader,
'Authorization': authorizationHeader
}
})
.then(response => {
console.log(response.data);
})
.catch(error => {
console.error(error);
});
Response Structure
The response body contains the details of the requested customization.
Response Attributes
| Field | Type | Description |
|---|---|---|
id |
UUID | The unique identifier of the customization. |
model |
String | The model (e.g., basket). |
target_type |
String | The type of the target (item, criteria, all). |
target_identity |
String | The identity of the target (if target_type is item). |
target_criteria |
Object | The Criteria Object definition (if target_type is criteria). |
tags |
Array | List of organizational tags. |
pin_definitions |
Array | List of Pin Objects. |
creator |
String | The user who created the customization. |
created_at |
String | Timestamp of creation. |
available |
Boolean | Whether the customization is currently active. |
The Response Object
{
"id": "199620b4-df1a-46e8-ab59-9e9ed9af7106",
"created_at": "2025-01-22T08:49:58Z",
"model": "basket",
"target_type": "item",
"target_identity": "/p/123",
"target_metadata": {
"title": "Fender Telecaster",
"image_link": "https://doe.com/123.jpg"
},
"pin_definitions": [
{
"position": 1,
"pin_type": "item",
"pin_identity": "/p/555",
"active_from": "2025-02-01T00:00:00Z"
}
]
}
Error Handling
| HTTP Status | Description |
|---|---|
| 200 OK | Success. |
| 401 Unauthorized | Missing or invalid authentication. |
| 404 Not Found | Customization not found. |
Error Responses
{
"reason": "Tracker not found",
"exception_details": {}
}