curl --request GET \
--url https://api.juo.io/admin/v1/events \
--header 'X-Juo-Admin-Api-Key: <api-key>' \
--header 'X-Tenant-ID: <x-tenant-id>'import requests
url = "https://api.juo.io/admin/v1/events"
headers = {
"X-Tenant-ID": "<x-tenant-id>",
"X-Juo-Admin-Api-Key": "<api-key>"
}
response = requests.get(url, headers=headers)
print(response.text)const options = {
method: 'GET',
headers: {'X-Tenant-ID': '<x-tenant-id>', 'X-Juo-Admin-Api-Key': '<api-key>'}
};
fetch('https://api.juo.io/admin/v1/events', 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.juo.io/admin/v1/events",
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-Juo-Admin-Api-Key: <api-key>",
"X-Tenant-ID: <x-tenant-id>"
],
]);
$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.juo.io/admin/v1/events"
req, _ := http.NewRequest("GET", url, nil)
req.Header.Add("X-Tenant-ID", "<x-tenant-id>")
req.Header.Add("X-Juo-Admin-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.juo.io/admin/v1/events")
.header("X-Tenant-ID", "<x-tenant-id>")
.header("X-Juo-Admin-Api-Key", "<api-key>")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.juo.io/admin/v1/events")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Get.new(url)
request["X-Tenant-ID"] = '<x-tenant-id>'
request["X-Juo-Admin-Api-Key"] = '<api-key>'
response = http.request(request)
puts response.read_body{
"resource": "list",
"hasNextPage": true,
"hasPrevPage": true,
"endCursor": "<string>",
"startCursor": "<string>",
"data": [
{
"id": "<string>",
"stream": "activity",
"category": "<string>",
"severity": "info",
"occurredAt": "2023-11-07T05:31:56Z",
"owner": {
"entity": "<string>",
"id": "<string>"
},
"actor": {
"type": "staff",
"id": "<string>",
"name": "<string>",
"source": "<string>"
},
"operationId": "<string>",
"subscriptionId": "<string>",
"customerId": "<string>",
"summary": "<string>",
"type": "subscription:paused",
"payloadFormat": "typed",
"data": {
"previousStatus": "<string>"
}
}
]
}List events
Returns a list of events.
curl --request GET \
--url https://api.juo.io/admin/v1/events \
--header 'X-Juo-Admin-Api-Key: <api-key>' \
--header 'X-Tenant-ID: <x-tenant-id>'import requests
url = "https://api.juo.io/admin/v1/events"
headers = {
"X-Tenant-ID": "<x-tenant-id>",
"X-Juo-Admin-Api-Key": "<api-key>"
}
response = requests.get(url, headers=headers)
print(response.text)const options = {
method: 'GET',
headers: {'X-Tenant-ID': '<x-tenant-id>', 'X-Juo-Admin-Api-Key': '<api-key>'}
};
fetch('https://api.juo.io/admin/v1/events', 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.juo.io/admin/v1/events",
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-Juo-Admin-Api-Key: <api-key>",
"X-Tenant-ID: <x-tenant-id>"
],
]);
$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.juo.io/admin/v1/events"
req, _ := http.NewRequest("GET", url, nil)
req.Header.Add("X-Tenant-ID", "<x-tenant-id>")
req.Header.Add("X-Juo-Admin-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.juo.io/admin/v1/events")
.header("X-Tenant-ID", "<x-tenant-id>")
.header("X-Juo-Admin-Api-Key", "<api-key>")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.juo.io/admin/v1/events")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Get.new(url)
request["X-Tenant-ID"] = '<x-tenant-id>'
request["X-Juo-Admin-Api-Key"] = '<api-key>'
response = http.request(request)
puts response.read_body{
"resource": "list",
"hasNextPage": true,
"hasPrevPage": true,
"endCursor": "<string>",
"startCursor": "<string>",
"data": [
{
"id": "<string>",
"stream": "activity",
"category": "<string>",
"severity": "info",
"occurredAt": "2023-11-07T05:31:56Z",
"owner": {
"entity": "<string>",
"id": "<string>"
},
"actor": {
"type": "staff",
"id": "<string>",
"name": "<string>",
"source": "<string>"
},
"operationId": "<string>",
"subscriptionId": "<string>",
"customerId": "<string>",
"summary": "<string>",
"type": "subscription:paused",
"payloadFormat": "typed",
"data": {
"previousStatus": "<string>"
}
}
]
}Authorizations
Long-lived Admin API key issued from the Juo merchant portal. Pass as the X-Juo-Admin-Api-Key header.
Headers
Unique identifier of the tenant in the system (usually a store identifier)
Query Parameters
Search query. Terms are field:value; comparisons field:>value, :<, :>=, :<=. Quote values in single or double quotes unless they are only letters and digits, with single dots between them, or a UUID as a filter value. Combine terms with AND (binds tighter) and OR, group with parentheses, negate a term or group with NOT or a leading -. Fields: type, stream, occurredAt, category, severity, subscriptionId, customerId, owner.entity, owner.id, actor.type, actor.id, operationId. Example: stream:audit AND occurredAt:>='2026-09-01'. See search query language and the field reference. Only type and occurredAt support comparisons; other fields support equality. Date-only values cover the shop-local day; timestamps require an offset. subscriptionId matches the row owner only and takes the subscription id, not its serial. owner.entity accepts any non-empty, case-sensitive stored name, including historical names; a name with no matching public events returns an empty page. Changing query restarts pagination. customerId includes the customer's subscriptions, orders, workflow runs, payment methods, refunds and chargebacks. actor.type: staff, customer, system, bulk-action, api, unknown.
1See pagination for more details on how to paginate the results.
1 <= x <= 100See pagination for more details on how to paginate the results. Use endCursor of the current page to read the page after it.
1See pagination for more details on how to paginate the results. Use startCursor of the current page to read the page before it.
1Response
Default Response
list - EventPayload_subscription_paused
- EventPayload_subscription_resumed
- EventPayload_subscription_reactivated
- EventPayload_subscription_cancelled
- EventPayload_subscription_skipped
- EventPayload_subscription_next_billing_date_changed
- EventPayload_subscription_payment_method_changed
- EventPayload_subscription_delivery_address_changed
- EventPayload_customer_updated
- EventPayload_customer_payment_method_created
- EventPayload_customer_payment_method_revoked
- EventPayload_customer_logged_in
- EventPayload_customer_login_failed
- EventPayload_settings_updated
- EventPayload_export_created
- EventPayload_api_access_granted
- EventPayload_staff_data_access_spike
- Event
Show child attributes
Show child attributes