curl --request GET \
--url https://hpay-api.host-sl.com/api/v1/transactions/wallet/YOUR_WALLET_ID \
--header 'api-key: YOUR_API_KEY' \
--header 'secret-key: YOUR_SECRET_KEY'
curl --request GET \
--url 'https://hpay-api.host-sl.com/api/v1/transactions/wallet/YOUR_WALLET_ID?limit=50&offset=0&include_summary=true' \
--header 'api-key: YOUR_API_KEY' \
--header 'secret-key: YOUR_SECRET_KEY' \
--include
from hostpay import HostPay
client = HostPay(api_key="YOUR_API_KEY", secret_key="YOUR_SECRET_KEY")
txns = client.transactions.for_wallet("YOUR_WALLET_ID")
for txn in txns:
print(txn["id"], txn["status"])
import { HostPay } from "@hostpay/sdk";
const client = new HostPay({ apiKey: "YOUR_API_KEY", secretKey: "YOUR_SECRET_KEY" });
const txns = await client.transactions.forWallet("YOUR_WALLET_ID");
for (const txn of txns) console.log(txn.id, txn.status);
<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://hpay-api.host-sl.com/api/v1/transactions/wallet/YOUR_WALLET_ID",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_HTTPHEADER => [
"api-key: YOUR_API_KEY",
"secret-key: YOUR_SECRET_KEY"
],
]);
$response = curl_exec($curl);
curl_close($curl);
echo $response;
[
{
"id": "trans_111...",
"wallet_id": "wall_789...",
"recipient_wallet_id": "wall_000...",
"amount": 20.0,
"currency": "USD",
"transaction_type": "transfer",
"status": "completed",
"created_at": "2025-01-16T12:00:00Z"
},
{
"id": "trans_222...",
"wallet_id": "wall_000...",
"recipient_wallet_id": "wall_789...",
"amount": 15.0,
"currency": "USD",
"transaction_type": "transfer",
"status": "completed",
"created_at": "2025-01-16T13:00:00Z"
}
]
Transactions
Get Wallet Transactions
Retrieve wallet history with optional pagination, search and full matching totals.
GET
/
api
/
v1
/
transactions
/
wallet
/
{wallet_id}
curl --request GET \
--url https://hpay-api.host-sl.com/api/v1/transactions/wallet/YOUR_WALLET_ID \
--header 'api-key: YOUR_API_KEY' \
--header 'secret-key: YOUR_SECRET_KEY'
curl --request GET \
--url 'https://hpay-api.host-sl.com/api/v1/transactions/wallet/YOUR_WALLET_ID?limit=50&offset=0&include_summary=true' \
--header 'api-key: YOUR_API_KEY' \
--header 'secret-key: YOUR_SECRET_KEY' \
--include
from hostpay import HostPay
client = HostPay(api_key="YOUR_API_KEY", secret_key="YOUR_SECRET_KEY")
txns = client.transactions.for_wallet("YOUR_WALLET_ID")
for txn in txns:
print(txn["id"], txn["status"])
import { HostPay } from "@hostpay/sdk";
const client = new HostPay({ apiKey: "YOUR_API_KEY", secretKey: "YOUR_SECRET_KEY" });
const txns = await client.transactions.forWallet("YOUR_WALLET_ID");
for (const txn of txns) console.log(txn.id, txn.status);
<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://hpay-api.host-sl.com/api/v1/transactions/wallet/YOUR_WALLET_ID",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_HTTPHEADER => [
"api-key: YOUR_API_KEY",
"secret-key: YOUR_SECRET_KEY"
],
]);
$response = curl_exec($curl);
curl_close($curl);
echo $response;
[
{
"id": "trans_111...",
"wallet_id": "wall_789...",
"recipient_wallet_id": "wall_000...",
"amount": 20.0,
"currency": "USD",
"transaction_type": "transfer",
"status": "completed",
"created_at": "2025-01-16T12:00:00Z"
},
{
"id": "trans_222...",
"wallet_id": "wall_000...",
"recipient_wallet_id": "wall_789...",
"amount": 15.0,
"currency": "USD",
"transaction_type": "transfer",
"status": "completed",
"created_at": "2025-01-16T13:00:00Z"
}
]
This endpoint returns all transactions where the specified wallet is either the sender or the recipient.
Sent and received counts include every status. Amounts include only transactions
whose current status is
Path Parameters
string
required
The unique identifier of the wallet to fetch transactions for.
Query parameters
number
Return at most 1–1000 transactions. Omit this parameter for the existing full-history response.
number
default:"0"
Number of matching transactions to skip; must be zero or greater.
string
Case-insensitive literal substring search across transaction ID, reference ID,
type, status and description. Maximum 200 characters; surrounding whitespace
is ignored. Search applies to the full history, not just the returned page.
boolean
default:"false"
Return X-Total-Count and X-Transaction-Summary headers describing all matching
transactions before pagination. The body remains an array.
Paging and compatibility
Use?limit=50&offset=0&include_summary=true, then increment offset by 50.
New-option reads are ordered by creation time descending, then ID descending.
Each transaction appears once even when the wallet is both sender and recipient.
Empty and out-of-range pages return HTTP 200 with [].
Requests without the new options retain the legacy full array, outgoing-then-incoming
ordering and HTTP 404 for empty history. A legacy self-transfer can appear twice.
Invalid limits, negative offsets and searches longer than 200 characters return
HTTP 422. The API key still determines the application and live/test mode.
Offset pages are not a snapshot: new transactions can shift records between requests.
Existing SDK wallet-history methods keep their current signatures and behavior.
To opt into paging now, send the query parameters over HTTP. Deploy the updated
wallet API before the dashboard. No database migration is required.
Summary headers
X-Total-Count counts unique matching transactions. X-Transaction-Summary
contains JSON in this format:
{
"sent": 120,
"received": 80,
"completed": 180,
"amounts_by_currency": {
"USD": { "sent": "150.50", "received": "25.00" },
"SLE": { "sent": "10.00", "received": "5.00" }
}
}
completed, as decimal strings in each original currency;
they are transaction amounts, not net amounts after fees or converted balances.
Never add different currencies together. A self-transfer counts once in the total
and completed count, but once in each direction. Null currencies are labelled
UNKNOWN. No matches produce zero counts and an empty amounts_by_currency object.
Summary scans still cover matching history; the page limit bounds returned records,
not all database work. Counts and rows can change between queries under concurrent writes.
Response
The response is an array of transaction objects.string
The unique identifier for the transaction.
number
The transaction amount.
string
The currency code.
string
The type of transaction.
string
The current status.
[
{
"id": "trans_111...",
"wallet_id": "wall_789...",
"recipient_wallet_id": "wall_000...",
"amount": 20.0,
"currency": "USD",
"transaction_type": "transfer",
"status": "completed",
"created_at": "2025-01-16T12:00:00Z"
},
{
"id": "trans_222...",
"wallet_id": "wall_000...",
"recipient_wallet_id": "wall_789...",
"amount": 15.0,
"currency": "USD",
"transaction_type": "transfer",
"status": "completed",
"created_at": "2025-01-16T13:00:00Z"
}
]
curl --request GET \
--url https://hpay-api.host-sl.com/api/v1/transactions/wallet/YOUR_WALLET_ID \
--header 'api-key: YOUR_API_KEY' \
--header 'secret-key: YOUR_SECRET_KEY'
curl --request GET \
--url 'https://hpay-api.host-sl.com/api/v1/transactions/wallet/YOUR_WALLET_ID?limit=50&offset=0&include_summary=true' \
--header 'api-key: YOUR_API_KEY' \
--header 'secret-key: YOUR_SECRET_KEY' \
--include
from hostpay import HostPay
client = HostPay(api_key="YOUR_API_KEY", secret_key="YOUR_SECRET_KEY")
txns = client.transactions.for_wallet("YOUR_WALLET_ID")
for txn in txns:
print(txn["id"], txn["status"])
import { HostPay } from "@hostpay/sdk";
const client = new HostPay({ apiKey: "YOUR_API_KEY", secretKey: "YOUR_SECRET_KEY" });
const txns = await client.transactions.forWallet("YOUR_WALLET_ID");
for (const txn of txns) console.log(txn.id, txn.status);
<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://hpay-api.host-sl.com/api/v1/transactions/wallet/YOUR_WALLET_ID",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_HTTPHEADER => [
"api-key: YOUR_API_KEY",
"secret-key: YOUR_SECRET_KEY"
],
]);
$response = curl_exec($curl);
curl_close($curl);
echo $response;