cURL
# Export KINTRA_API for your environment first; the base URL is on the introduction page.
KEY="YOUR_TENANT_KEY_ID"
SECRET="YOUR_SIGNING_SECRET"
# The signature covers the path and query exactly as sent, so both are split
# off the base URL and reused for the request line below.
API_PATH="/${KINTRA_API#*://*/}"
API_HOST="${KINTRA_API%"$API_PATH"}"
METHOD="GET"
PATH_AND_QUERY="$API_PATH/gateway/customers/YOUR_USER_ID/transactions"
# No body on this method, so the signature covers an empty body string.
BODY=''
TIMESTAMP="$(date +%s)"
SIGNATURE="$(printf '%s' "$TIMESTAMP$METHOD$PATH_AND_QUERY$BODY" \
| openssl dgst -sha256 -hmac "$SECRET" | awk '{print $NF}')"
curl -sS -w '\n%{http_code}' -X "$METHOD" "$API_HOST$PATH_AND_QUERY" \
-H "X-Tenant-Key: $KEY" \
-H "X-Tenant-Timestamp: $TIMESTAMP" \
-H "X-Tenant-Signature: $SIGNATURE"const options = {
method: 'GET',
headers: {
'X-Tenant-Signature': '<x-tenant-signature>',
'X-Tenant-Timestamp': '<x-tenant-timestamp>',
'x-tenant-key': '<api-key>'
}
};
fetch('https://api.kintra.io/api/v1/gateway/customers/{userId}/transactions', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));import requests
url = "https://api.kintra.io/api/v1/gateway/customers/{userId}/transactions"
headers = {
"X-Tenant-Signature": "<x-tenant-signature>",
"X-Tenant-Timestamp": "<x-tenant-timestamp>",
"x-tenant-key": "<api-key>"
}
response = requests.get(url, headers=headers)
print(response.text){
"success": true,
"data": {
"has_next_page": true,
"items": [
{
"amount": "<string>",
"created_at": "2023-11-07T05:31:56Z",
"id": "<string>",
"metadata": null,
"notes": "<string>",
"onchain_asset_id": "<string>",
"redemption_id": "<string>",
"tenant_id": "<string>",
"updated_at": "2023-11-07T05:31:56Z",
"user_id": "<string>",
"blockchain_transaction_links": {
"blockchain_transaction": [
{
"id": "<string>",
"chain_id": 123,
"created_at": "2023-11-07T05:31:56Z",
"metadata": null,
"receipt_block_hash": "<string>",
"receipt_block_number": "<string>",
"receipt_block_timestamp": 123,
"receipt_gas_price": "<string>",
"receipt_gas_used": "<string>",
"receipt_status": 123,
"receipt_transaction_index": 123,
"tx_data": "<string>",
"tx_from": "<string>",
"tx_gas_limit": "<string>",
"tx_gas_price": "<string>",
"tx_hash": "<string>",
"tx_max_fee_per_gas": "<string>",
"tx_max_priority_fee_per_gas": "<string>",
"tx_nonce": 123,
"tx_to": "<string>",
"tx_type": 123,
"tx_value": "<string>",
"updated_at": "2023-11-07T05:31:56Z"
}
]
},
"onchain_asset": {
"asset_address": "<string>",
"chain_id": 123,
"created_at": "2023-11-07T05:31:56Z",
"decimals": 123,
"deploy_tx_hash": "<string>",
"deployed_at": "2023-11-07T05:31:56Z",
"id": "<string>",
"key": "<string>",
"metadata": null,
"name": "<string>",
"status": "<string>",
"symbol": "<string>",
"total_owners": 123,
"total_txns": 123,
"type": "<string>",
"updated_at": "2023-11-07T05:31:56Z"
},
"reward": {
"id": "<string>",
"title": "<string>"
},
"tenant": {
"id": "<string>",
"name": "<string>",
"slug": "<string>"
},
"user": {
"email": "<string>",
"id": "<string>",
"username": "<string>"
}
}
],
"limit": 123,
"page": 123,
"total_count": 123,
"total_pages": 123
},
"errors": [
{
"message": "<string>",
"path": "<string>"
}
],
"message": "<string>"
}{
"success": true,
"data": null,
"errors": [
{
"message": "<string>",
"path": "<string>"
}
],
"message": "<string>"
}{
"success": true,
"data": null,
"errors": [
{
"message": "<string>",
"path": "<string>"
}
],
"message": "<string>"
}{
"success": true,
"data": null,
"errors": [
{
"message": "<string>",
"path": "<string>"
}
],
"message": "<string>"
}Customers
List customer transactions
Lists the internal transactions recorded against one customer, which is the per-customer view of the same ledger the tenant-wide list returns. Call it to show a customer their own history. Filter with type, status, created_from and created_to, and page with page and limit. The response data carries items alongside total_count, page, limit, total_pages and has_next_page. Returns 404 when the customer is not found under your tenant.
GET
/
gateway
/
customers
/
{userId}
/
transactions
cURL
# Export KINTRA_API for your environment first; the base URL is on the introduction page.
KEY="YOUR_TENANT_KEY_ID"
SECRET="YOUR_SIGNING_SECRET"
# The signature covers the path and query exactly as sent, so both are split
# off the base URL and reused for the request line below.
API_PATH="/${KINTRA_API#*://*/}"
API_HOST="${KINTRA_API%"$API_PATH"}"
METHOD="GET"
PATH_AND_QUERY="$API_PATH/gateway/customers/YOUR_USER_ID/transactions"
# No body on this method, so the signature covers an empty body string.
BODY=''
TIMESTAMP="$(date +%s)"
SIGNATURE="$(printf '%s' "$TIMESTAMP$METHOD$PATH_AND_QUERY$BODY" \
| openssl dgst -sha256 -hmac "$SECRET" | awk '{print $NF}')"
curl -sS -w '\n%{http_code}' -X "$METHOD" "$API_HOST$PATH_AND_QUERY" \
-H "X-Tenant-Key: $KEY" \
-H "X-Tenant-Timestamp: $TIMESTAMP" \
-H "X-Tenant-Signature: $SIGNATURE"const options = {
method: 'GET',
headers: {
'X-Tenant-Signature': '<x-tenant-signature>',
'X-Tenant-Timestamp': '<x-tenant-timestamp>',
'x-tenant-key': '<api-key>'
}
};
fetch('https://api.kintra.io/api/v1/gateway/customers/{userId}/transactions', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));import requests
url = "https://api.kintra.io/api/v1/gateway/customers/{userId}/transactions"
headers = {
"X-Tenant-Signature": "<x-tenant-signature>",
"X-Tenant-Timestamp": "<x-tenant-timestamp>",
"x-tenant-key": "<api-key>"
}
response = requests.get(url, headers=headers)
print(response.text){
"success": true,
"data": {
"has_next_page": true,
"items": [
{
"amount": "<string>",
"created_at": "2023-11-07T05:31:56Z",
"id": "<string>",
"metadata": null,
"notes": "<string>",
"onchain_asset_id": "<string>",
"redemption_id": "<string>",
"tenant_id": "<string>",
"updated_at": "2023-11-07T05:31:56Z",
"user_id": "<string>",
"blockchain_transaction_links": {
"blockchain_transaction": [
{
"id": "<string>",
"chain_id": 123,
"created_at": "2023-11-07T05:31:56Z",
"metadata": null,
"receipt_block_hash": "<string>",
"receipt_block_number": "<string>",
"receipt_block_timestamp": 123,
"receipt_gas_price": "<string>",
"receipt_gas_used": "<string>",
"receipt_status": 123,
"receipt_transaction_index": 123,
"tx_data": "<string>",
"tx_from": "<string>",
"tx_gas_limit": "<string>",
"tx_gas_price": "<string>",
"tx_hash": "<string>",
"tx_max_fee_per_gas": "<string>",
"tx_max_priority_fee_per_gas": "<string>",
"tx_nonce": 123,
"tx_to": "<string>",
"tx_type": 123,
"tx_value": "<string>",
"updated_at": "2023-11-07T05:31:56Z"
}
]
},
"onchain_asset": {
"asset_address": "<string>",
"chain_id": 123,
"created_at": "2023-11-07T05:31:56Z",
"decimals": 123,
"deploy_tx_hash": "<string>",
"deployed_at": "2023-11-07T05:31:56Z",
"id": "<string>",
"key": "<string>",
"metadata": null,
"name": "<string>",
"status": "<string>",
"symbol": "<string>",
"total_owners": 123,
"total_txns": 123,
"type": "<string>",
"updated_at": "2023-11-07T05:31:56Z"
},
"reward": {
"id": "<string>",
"title": "<string>"
},
"tenant": {
"id": "<string>",
"name": "<string>",
"slug": "<string>"
},
"user": {
"email": "<string>",
"id": "<string>",
"username": "<string>"
}
}
],
"limit": 123,
"page": 123,
"total_count": 123,
"total_pages": 123
},
"errors": [
{
"message": "<string>",
"path": "<string>"
}
],
"message": "<string>"
}{
"success": true,
"data": null,
"errors": [
{
"message": "<string>",
"path": "<string>"
}
],
"message": "<string>"
}{
"success": true,
"data": null,
"errors": [
{
"message": "<string>",
"path": "<string>"
}
],
"message": "<string>"
}{
"success": true,
"data": null,
"errors": [
{
"message": "<string>",
"path": "<string>"
}
],
"message": "<string>"
}Authorizations
Tenant API key
Headers
Hex HMAC-SHA256 of the timestamp, the uppercase method, the url as sent and the request body, keyed by the signing secret.
Unix seconds. Checked before the signature.
Path Parameters
Query Parameters
core.internal_transactions.type
Available options:
xp_earn, xp_bonus, xp_admin_adjust, xp_redeem core.internal_transactions.status
Available options:
initialized, pending, completed, failed ⌘I

