curl --request POST \
--url https://api.pid.peridotvault.com/v1/fiat/deposits/quote \
--header 'Content-Type: application/json' \
--cookie pid_access= \
--data '
{
"netAmountIdr": "<string>",
"clientId": "<string>",
"paymentMethod": "<string>"
}
'const options = {
method: 'POST',
headers: {cookie: 'pid_access=', 'Content-Type': 'application/json'},
body: JSON.stringify({netAmountIdr: '<string>', clientId: '<string>', paymentMethod: '<string>'})
};
fetch('https://api.pid.peridotvault.com/v1/fiat/deposits/quote', 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/deposits/quote"
payload = {
"netAmountIdr": "<string>",
"clientId": "<string>",
"paymentMethod": "<string>"
}
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/deposits/quote"
payload := strings.NewReader("{\n \"netAmountIdr\": \"<string>\",\n \"clientId\": \"<string>\",\n \"paymentMethod\": \"<string>\"\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))
}{
"amountIdr": "<string>",
"netIdr": "<string>",
"peridotFeeIdr": "<string>",
"peridotTaxIdr": "<string>",
"appFeeIdr": "<string>",
"appCategory": "verified",
"gatewayFeeEnabled": true,
"gatewayFeeIdr": "<string>",
"gatewayTaxIdr": "<string>",
"transferFeeIdr": "<string>",
"totalIdr": "<string>",
"feePolicyVersion": 123,
"paymentMethods": [
{
"key": "<string>",
"label": "<string>",
"category": "<string>",
"enabled": true,
"gatewayFeeIdr": "<string>",
"gatewayTaxIdr": "<string>",
"rateKey": "<string>",
"source": "doku",
"totalIdr": "<string>"
}
],
"paymentMethod": "<string>"
}{
"statusCode": 400,
"message": [
"handle must be 3-20 chars: lowercase letters, numbers, underscore"
]
}{
"statusCode": 401,
"message": "Unauthorized"
}Quote a top-up (moves no money) — the PeridotID checkout summary
Returns the transparent breakdown shown before DOKU: Amount, PeridotID
Fee (Rp0 for verified apps), App Fee, per-method Payment Gateway Fee and
Total Payment, plus paymentMethods[] (per-category fee + total) so the
summary updates on selection. Only enabled methods are listed; the
wallet blocks the top-up when the list is empty.
curl --request POST \
--url https://api.pid.peridotvault.com/v1/fiat/deposits/quote \
--header 'Content-Type: application/json' \
--cookie pid_access= \
--data '
{
"netAmountIdr": "<string>",
"clientId": "<string>",
"paymentMethod": "<string>"
}
'const options = {
method: 'POST',
headers: {cookie: 'pid_access=', 'Content-Type': 'application/json'},
body: JSON.stringify({netAmountIdr: '<string>', clientId: '<string>', paymentMethod: '<string>'})
};
fetch('https://api.pid.peridotvault.com/v1/fiat/deposits/quote', 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/deposits/quote"
payload = {
"netAmountIdr": "<string>",
"clientId": "<string>",
"paymentMethod": "<string>"
}
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/deposits/quote"
payload := strings.NewReader("{\n \"netAmountIdr\": \"<string>\",\n \"clientId\": \"<string>\",\n \"paymentMethod\": \"<string>\"\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))
}{
"amountIdr": "<string>",
"netIdr": "<string>",
"peridotFeeIdr": "<string>",
"peridotTaxIdr": "<string>",
"appFeeIdr": "<string>",
"appCategory": "verified",
"gatewayFeeEnabled": true,
"gatewayFeeIdr": "<string>",
"gatewayTaxIdr": "<string>",
"transferFeeIdr": "<string>",
"totalIdr": "<string>",
"feePolicyVersion": 123,
"paymentMethods": [
{
"key": "<string>",
"label": "<string>",
"category": "<string>",
"enabled": true,
"gatewayFeeIdr": "<string>",
"gatewayTaxIdr": "<string>",
"rateKey": "<string>",
"source": "doku",
"totalIdr": "<string>"
}
],
"paymentMethod": "<string>"
}{
"statusCode": 400,
"message": [
"handle must be 3-20 chars: lowercase letters, numbers, underscore"
]
}{
"statusCode": 401,
"message": "Unauthorized"
}Authorizations
JWT access token set by /auth/google/callback or /auth/refresh
Response
Top-up quote
PeridotID platform fee — Rp0 for verified apps (excludes PPN)
PPN on the PeridotID fee (wallet folds all fees into one "Transfer Fee" line)
verified, public Selected method's gateway fee is enabled (show the line only when true)
DOKU PPN on the gateway fee (wallet folds all fees into one "Transfer Fee" line)
Combined display line — PeridotID fee+PPN + DOKU gateway fee+PPN
Show child attributes
Show child attributes