Developer Experience
Exchange your application’s credentials for an access token, then POST to /api/v1/disbursements to deliver load to any Philippine mobile number across Globe, Smart, DITO, Sun, TM, and TNT. Recipients are 09XXXXXXXXX — eleven digits, leading zero.
Before your first send
- An application with ACTIVE credentials
- Its sub-wallet funded
- The SKU assigned to that specific application — company-level provisioning is a separate, earlier step and is not enough on its own
- Sandbox applications are stubbed at the adapter — their sends reach no provider and deliver no load
- REST API secured with OAuth 2.0 client credentials (no SDK required)
- Poll GET /api/v1/disbursements/{id} for the delivery outcome — a 2xx on send is acceptance, not delivery
Request Sandbox AccessRequest examples
cURL
# 1. Exchange your application's credentials for an access token,
# and keep it. Tokens last 900 seconds -- re-run this whenever a
# send answers 401.
ACCESS_TOKEN=$(curl -s -X POST https://globe-loadup.stratodigital.io/gw/api/v1/oauth/token \
-H "Content-Type: application/x-www-form-urlencoded" \
-d grant_type=client_credentials \
-d client_id=$LOADUP_CLIENT_ID \
-d client_secret=$LOADUP_CLIENT_SECRET | jq -r .access_token)
# 2. Send. A fresh Idempotency-Key per send, so a retry replays
# rather than sending twice.
curl -X POST https://globe-loadup.stratodigital.io/gw/api/v1/disbursements \
-H "Authorization: Bearer $ACCESS_TOKEN" \
-H "Content-Type: application/json" \
-H "Idempotency-Key: $(uuidgen)" \
-d '{
"skuCode": "SKU-LOAD-1",
"recipients": ["09171234567"]
}'
Node.js
const BASE = "https://globe-loadup.stratodigital.io/gw";
// 1. Exchange credentials for an access token (900s lifetime).
const token = await fetch(`${BASE}/api/v1/oauth/token`, {
method: "POST",
headers: { "Content-Type": "application/x-www-form-urlencoded" },
body: new URLSearchParams({
grant_type: "client_credentials",
client_id: process.env.LOADUP_CLIENT_ID,
client_secret: process.env.LOADUP_CLIENT_SECRET,
}),
}).then((r) => r.json());
// 2. Send.
const response = await fetch(`${BASE}/api/v1/disbursements`, {
method: "POST",
headers: {
Authorization: `Bearer ${token.access_token}`,
"Content-Type": "application/json",
"Idempotency-Key": crypto.randomUUID(),
},
body: JSON.stringify({
skuCode: "SKU-LOAD-1",
recipients: ["09171234567"],
}),
});
const { data } = await response.json();
const [first] = data.children;
console.log(first.disbursementId, first.status); // ... AWAITING_STATUS
Python
import os, uuid, requests
BASE = "https://globe-loadup.stratodigital.io/gw"
# 1. Exchange credentials for an access token (900s lifetime).
token = requests.post(
f"{BASE}/api/v1/oauth/token",
data={
"grant_type": "client_credentials",
"client_id": os.environ["LOADUP_CLIENT_ID"],
"client_secret": os.environ["LOADUP_CLIENT_SECRET"],
},
).json()
# 2. Send.
response = requests.post(
f"{BASE}/api/v1/disbursements",
headers={
"Authorization": f"Bearer {token['access_token']}",
"Content-Type": "application/json",
"Idempotency-Key": str(uuid.uuid4()),
},
json={
"skuCode": "SKU-LOAD-1",
"recipients": ["09171234567"],
},
)
first = response.json()["data"]["children"][0]
print(first["disbursementId"], first["status"]) # ... AWAITING_STATUS
201 Created — Response
{
"data": {
"parentRequestId": "3b7e9c10-52a4-4c8d-9f61-70b2ad4c8e93",
"resolvedWalletId": "WAL-COMP-20260101-00042-APP-1",
"total": 1,
"children": [
{
"itemIndex": 0,
"recipient": "09171234567",
"status": "AWAITING_STATUS",
"disbursementId": "9f2c1a84-5d33-4f0e-bb27-6c1f0a9d41e7"
}
]
},
"correlationId": "b1d9c0f2-7a54-4c1e-9f38-2ad5e6b7c890"
}