curl --request POST \
--url https://api.pid.peridotvault.com/v1/fiat/test-credit \
--header 'Content-Type: application/json' \
--cookie pid_access= \
--data '
{
"amountMinor": 50000
}
'const options = {
method: 'POST',
headers: {cookie: 'pid_access=', 'Content-Type': 'application/json'},
body: JSON.stringify({amountMinor: 50000})
};
fetch('https://api.pid.peridotvault.com/v1/fiat/test-credit', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));import requests
url = "https://api.pid.peridotvault.com/v1/fiat/test-credit"
payload = { "amountMinor": 50000 }
headers = {
"cookie": "pid_access=",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)package main
import (
"fmt"
"strings"
"net/http"
"io"
)
func main() {
url := "https://api.pid.peridotvault.com/v1/fiat/test-credit"
payload := strings.NewReader("{\n \"amountMinor\": 50000\n}")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("cookie", "pid_access=")
req.Header.Add("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}{
"ok": true,
"creditId": "3fa85f64-5717-4562-b3fc-2c963f66afa6",
"amountMinor": "50000",
"currency": "IDR",
"env": "sandbox",
"dailyRemainingMinor": "50000"
}Sandbox faucet — mint test credit (sandbox only, 201)
Sandbox-only instant test money. Credits the caller’s ledger through the
same fiat_issue path as corroborated DOKU deposits (identical
balance/webhook behavior) without touching DOKU — works even when DOKU
sandbox is down. Every mint is audited. Per-identity caps: Rp50.000 per
call, Rp100.000/day, 10 calls/day (proposed — CTO confirms). The route
is registered only when the server flag PID_FAUCET_ENABLED is exactly
"true" (fail-closed; unset/false ⇒ absent). On production the route
does not exist: 404 (not 401/403 — no oracle).
curl --request POST \
--url https://api.pid.peridotvault.com/v1/fiat/test-credit \
--header 'Content-Type: application/json' \
--cookie pid_access= \
--data '
{
"amountMinor": 50000
}
'const options = {
method: 'POST',
headers: {cookie: 'pid_access=', 'Content-Type': 'application/json'},
body: JSON.stringify({amountMinor: 50000})
};
fetch('https://api.pid.peridotvault.com/v1/fiat/test-credit', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));import requests
url = "https://api.pid.peridotvault.com/v1/fiat/test-credit"
payload = { "amountMinor": 50000 }
headers = {
"cookie": "pid_access=",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)package main
import (
"fmt"
"strings"
"net/http"
"io"
)
func main() {
url := "https://api.pid.peridotvault.com/v1/fiat/test-credit"
payload := strings.NewReader("{\n \"amountMinor\": 50000\n}")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("cookie", "pid_access=")
req.Header.Add("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}{
"ok": true,
"creditId": "3fa85f64-5717-4562-b3fc-2c963f66afa6",
"amountMinor": "50000",
"currency": "IDR",
"env": "sandbox",
"dailyRemainingMinor": "50000"
}Authorizations
JWT access token set by /auth/google/callback or /auth/refresh
Body
1 <= x <= 5000050000
Response
Test credit minted
Ledger entryGroup of the minted faucet credit
Minted amount, whole IDR (decimal string, same convention as FiatBalance.balanceIdr)
IDR sandbox Faucet quota left for this identity today, whole IDR (decimal string)