curl --request GET \
--url https://api.scrip.dev/v1/journal-entries \
--header 'X-API-Key: <api-key>'import requests
url = "https://api.scrip.dev/v1/journal-entries"
headers = {"X-API-Key": "<api-key>"}
response = requests.get(url, headers=headers)
print(response.text)const options = {method: 'GET', headers: {'X-API-Key': '<api-key>'}};
fetch('https://api.scrip.dev/v1/journal-entries', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://api.scrip.dev/v1/journal-entries",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "GET",
CURLOPT_HTTPHEADER => [
"X-API-Key: <api-key>"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"net/http"
"io"
)
func main() {
url := "https://api.scrip.dev/v1/journal-entries"
req, _ := http.NewRequest("GET", url, nil)
req.Header.Add("X-API-Key", "<api-key>")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.get("https://api.scrip.dev/v1/journal-entries")
.header("X-API-Key", "<api-key>")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.scrip.dev/v1/journal-entries")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Get.new(url)
request["X-API-Key"] = '<api-key>'
response = http.request(request)
puts response.read_body{
"data": [
{
"action_type": "HOLD",
"created_at": "2024-01-15T10:30:00Z",
"description": "Purchase reward: 10 POINTS",
"entry_hash": "b3a1d9f8c2e4a7b6d1e3f5a8c9b2d4e6f7a1b3c5d7e9f2a4b6c8d0e1f3a5b7c9",
"event_id": "550e8400-e29b-41d4-a716-446655440002",
"id": "550e8400-e29b-41d4-a716-446655440000",
"postings": [
{
"amount": "100.00",
"asset_symbol": "POINTS",
"bucket": "AVAILABLE",
"created_at": "2024-01-15T10:30:00Z",
"entity_type": "PARTICIPANT",
"group_id": "550e8400-e29b-41d4-a716-446655440011",
"id": "550e8400-e29b-41d4-a716-446655440003",
"participant_id": "550e8400-e29b-41d4-a716-446655440010",
"program_id": "550e8400-e29b-41d4-a716-446655440012"
}
],
"program_id": "550e8400-e29b-41d4-a716-446655440001",
"program_name": "Q1 Sales Bonus",
"reference_id": "auth_12345",
"rule_id": "950e8400-e29b-41d4-a716-446655440004"
}
],
"pagination": {
"has_more": true,
"next_cursor": "YWJjMTIz"
}
}{
"code": "bad_request",
"details": {
"expected": "<string>",
"field": "<string>",
"fields": [
{
"expected": "<unknown>",
"field": "<string>",
"message": "This field is required",
"reason": "required",
"received": "<string>"
}
],
"reason": "invalid",
"received": "<string>"
},
"message": "Invalid request parameters"
}{
"code": "unauthorized",
"details": {
"expected": "<string>",
"field": "<string>",
"fields": [
{
"expected": "<unknown>",
"field": "<string>",
"message": "This field is required",
"reason": "required",
"received": "<string>"
}
],
"reason": "invalid",
"received": "<string>"
},
"message": "Missing or invalid credentials"
}{
"code": "not_found",
"details": {
"expected": "<string>",
"field": "<string>",
"fields": [
{
"expected": "<unknown>",
"field": "<string>",
"message": "This field is required",
"reason": "required",
"received": "<string>"
}
],
"reason": "invalid",
"received": "<string>"
},
"message": "Resource not found"
}{
"code": "internal_error",
"message": "An internal error occurred"
}List journal entries
List journal entries (double-entry audit trail).
curl --request GET \
--url https://api.scrip.dev/v1/journal-entries \
--header 'X-API-Key: <api-key>'import requests
url = "https://api.scrip.dev/v1/journal-entries"
headers = {"X-API-Key": "<api-key>"}
response = requests.get(url, headers=headers)
print(response.text)const options = {method: 'GET', headers: {'X-API-Key': '<api-key>'}};
fetch('https://api.scrip.dev/v1/journal-entries', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://api.scrip.dev/v1/journal-entries",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "GET",
CURLOPT_HTTPHEADER => [
"X-API-Key: <api-key>"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"net/http"
"io"
)
func main() {
url := "https://api.scrip.dev/v1/journal-entries"
req, _ := http.NewRequest("GET", url, nil)
req.Header.Add("X-API-Key", "<api-key>")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.get("https://api.scrip.dev/v1/journal-entries")
.header("X-API-Key", "<api-key>")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.scrip.dev/v1/journal-entries")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Get.new(url)
request["X-API-Key"] = '<api-key>'
response = http.request(request)
puts response.read_body{
"data": [
{
"action_type": "HOLD",
"created_at": "2024-01-15T10:30:00Z",
"description": "Purchase reward: 10 POINTS",
"entry_hash": "b3a1d9f8c2e4a7b6d1e3f5a8c9b2d4e6f7a1b3c5d7e9f2a4b6c8d0e1f3a5b7c9",
"event_id": "550e8400-e29b-41d4-a716-446655440002",
"id": "550e8400-e29b-41d4-a716-446655440000",
"postings": [
{
"amount": "100.00",
"asset_symbol": "POINTS",
"bucket": "AVAILABLE",
"created_at": "2024-01-15T10:30:00Z",
"entity_type": "PARTICIPANT",
"group_id": "550e8400-e29b-41d4-a716-446655440011",
"id": "550e8400-e29b-41d4-a716-446655440003",
"participant_id": "550e8400-e29b-41d4-a716-446655440010",
"program_id": "550e8400-e29b-41d4-a716-446655440012"
}
],
"program_id": "550e8400-e29b-41d4-a716-446655440001",
"program_name": "Q1 Sales Bonus",
"reference_id": "auth_12345",
"rule_id": "950e8400-e29b-41d4-a716-446655440004"
}
],
"pagination": {
"has_more": true,
"next_cursor": "YWJjMTIz"
}
}{
"code": "bad_request",
"details": {
"expected": "<string>",
"field": "<string>",
"fields": [
{
"expected": "<unknown>",
"field": "<string>",
"message": "This field is required",
"reason": "required",
"received": "<string>"
}
],
"reason": "invalid",
"received": "<string>"
},
"message": "Invalid request parameters"
}{
"code": "unauthorized",
"details": {
"expected": "<string>",
"field": "<string>",
"fields": [
{
"expected": "<unknown>",
"field": "<string>",
"message": "This field is required",
"reason": "required",
"received": "<string>"
}
],
"reason": "invalid",
"received": "<string>"
},
"message": "Missing or invalid credentials"
}{
"code": "not_found",
"details": {
"expected": "<string>",
"field": "<string>",
"fields": [
{
"expected": "<unknown>",
"field": "<string>",
"message": "This field is required",
"reason": "required",
"received": "<string>"
}
],
"reason": "invalid",
"received": "<string>"
},
"message": "Resource not found"
}{
"code": "internal_error",
"message": "An internal error occurred"
}program_id, participant_id, external_id, group_id, asset_id, bucket, event_id, rule_id, action_type, reference_id, time range, and amount range. Entity filters (participant_id, external_id, group_id) are mutually exclusive; include at most one per request. Amount filters apply to the signed posting value, where credits are positive and debits are negative. Use action_type to isolate specific ledger operations (for example HOLD, RELEASE, or FORFEIT). Use rule_id to isolate journal entries created by a specific rule. Use reference_id to find all journal entries associated with a specific hold, release, or settle correlation.
action_type is one of CREDIT, DEBIT, TRANSFER, HOLD, RELEASE, VOID_HOLD, FORFEIT, EXPIRATION, MATURITY, REDEMPTION, REVERSAL, FUND, or BURN. There is no adjustment action type. To find manual adjustments, filter on CREDIT or DEBIT and look for entries whose event_id and rule_id are both null. For a pending redemption on a LOT asset, the HOLD, RELEASE, and REDEMPTION entries share one reference_id, so filtering on it returns all of them.
Authorizations
API key passed in the X-API-Key header.
Query Parameters
Maximum number of results (default 50, max 200)
x >= 1Pagination cursor from previous response
Filter by program ID
Filter by event ID
Filter by rule ID
Filter by participant ID (mutually exclusive with group_id and external_id)
Filter by group ID (mutually exclusive with participant_id and external_id)
Filter by external ID (mutually exclusive with participant_id and group_id)
Filter by asset ID
Filter by bucket (AVAILABLE, HELD, DEFERRED)
Filter by created_at >= from (RFC 3339)
Filter by created_at <= to (RFC 3339)
Filter by posting amount >= min_amount (signed: positive=credit, negative=debit)
Filter by posting amount <= max_amount (signed: positive=credit, negative=debit)
Filter by action type (e.g. CREDIT, DEBIT, HOLD, RELEASE, FORFEIT)
Filter by reference_id correlation key