Sample code for 30+ languages & platforms
Lua

Create Restricted Data Token (RDT)

See more Amazon SP-API Examples

Returns a Restricted Data Token (RDT) for one or more restricted resources that you specify.

Chilkat Lua Downloads

Lua
local chilkat = require("chilkat")

-- This example requires the Chilkat API to have been previously unlocked.
-- See Global Unlock Sample for sample code.

local authAws = chilkat.AuthAws.new()
authAws.access_key = "AWS_ACCESS_KEY"
authAws.secret_key = "AWS_SECRET_KEY"
authAws.service_name = "execute-api"
-- Use the region that is correct for your needs.
authAws.region = "eu-west-1"

local rest = chilkat.Rest.new()
local bTls = true
local port = 443
local bAutoReconnect = true
-- The sandbox endpoint (sandbox.sellingpartnerapi-eu.amazon.com) fails.
-- Use the production endpoint and see the note below.
local success = rest:connect("sellingpartnerapi-eu.amazon.com", port, bTls, bAutoReconnect)
if not success then
    print(rest.last_error_text)
    return
end

success = rest:set_auth_aws(authAws)

-- Load the previously obtained LWA access token.
-- See Fetch SP-API LWA Access Token
local jsonToken = chilkat.JsonObject.new()
success = jsonToken:load_file("qa_data/tokens/sp_api_lwa_token.json")
if not success then
    print("Failed to load LWA access token.")
    return
end

-- Add the x-amz-access-token request header.
local lwa_token = jsonToken:string_of("access_token")
rest:clear_all_headers()
rest:add_header("x-amz-access-token", lwa_token)

-- We're going to send a POST with the following JSON body:

-- {
--   "restrictedResources": [
--     {
--       "method": "GET",
--       "path": "/orders/v0/orders",
--       "dataElements": ["buyerInfo", "shippingAddress"]
--     }
--   ]
-- }

-- Use this online tool to generate code from sample JSON:
-- Generate Code to Create JSON

local json = chilkat.JsonObject.new()
json:update_string("restrictedResources[0].method", "GET")
json:update_string("restrictedResources[0].path", "/orders/v0/orders")
json:update_string("restrictedResources[0].dataElements[0]", "buyerInfo")
json:update_string("restrictedResources[0].dataElements[1]", "shippingAddress")

local sbRequest = chilkat.StringBuilder.new()
json:emit_sb(sbRequest)

local sbResponse = chilkat.StringBuilder.new()
local uri = "/tokens/2021-03-01/restrictedDataToken"
success = rest:full_request_sb("POST", uri, sbRequest, sbResponse)
if not success then
    print(rest.last_error_text)
    return
end

-- ------------------------------------------------------------------------------------
-- Note: Using the sandbox endpoint, such as sandbox.sellingpartnerapi-eu.amazon.com
-- results in a response status code of 400 with the following error:
-- [{"code":"InvalidInput","message":"Could not match input arguments"}]
-- Getting a restricted data token seems to only work with the production endpoint.
-- ------------------------------------------------------------------------------------

-- Examine the response status.
local statusCode = rest.response_status_code
if statusCode ~= 200 then
    print("Response status code: " .. statusCode)
    print("Response status text: " .. rest.response_status_text)
    print("Response body: ")
    print(sbResponse:get_as_string())
    print("Failed.")
    return
end

print(sbResponse:get_as_string())

-- If successful, gets a JSON response such as the following:

-- {
--   "expiresIn": 3600,
--   "restrictedDataToken": "Atz.sprdt|AYAB.....TQ="
-- }

-- Use this online tool to generate parsing code from sample JSON:
-- Generate Parsing Code from JSON

local jsonResp = chilkat.JsonObject.new()
jsonResp:load_sb(sbResponse)

local expiresIn = jsonResp:int_of("expiresIn")
local restrictedDataToken = jsonResp:string_of("restrictedDataToken")

-- Save the RDT for subsequent use..
success = jsonResp:write_file("qa_data/tokens/sp_api_rdt_token.json")

print("Success!")