Skip to content

Public API ​

These endpoints need no session or key, and the profile endpoints allow any origin (Access-Control-Allow-Origin: *). Answers are cached for up to 60 seconds. Escrow previews for share links are in Escrows.

Endpoints ​

MethodPathEndpointAuth
GET/v1/public/auth-configGet sign-in optionsNone
GET/v1/public/usersBrowse usersNone
GET/v1/public/users/:usernameGet a user profileNone
GET/v1/public/users/:username/ratingsList a user's ratingsNone

Get sign-in options ​

GET/v1/public/auth-config

Whether Turnstile is required on sign-in and sign-up forms (with the public site key) and whether Google sign-in is available.

  • Auth: None. Anyone can call it.
  • Rate limit: 100 requests a minute per IP address.
  • Idempotency: Not needed. Reading has no side effects.

Example request ​

bash
curl https://api.rekberpay.com/v1/public/auth-config
js
const res = await fetch('https://api.rekberpay.com/v1/public/auth-config', {
});
const data = await res.json();
python
import os

import requests

resp = requests.get(
    "https://api.rekberpay.com/v1/public/auth-config",
    timeout=30,
)
print(resp.status_code, resp.json())
php
<?php

$ch = curl_init('https://api.rekberpay.com/v1/public/auth-config');
curl_setopt_array($ch, [
    CURLOPT_RETURNTRANSFER => true,
]);
$response = json_decode(curl_exec($ch), true);
$status = curl_getinfo($ch, CURLINFO_RESPONSE_CODE);
curl_close($ch);

Example response ​

200 OK

json
{
    "success": true,
    "data": {
        "turnstile": {
            "enabled": false,
            "site_key": "0x4AAAAAADX7jI6HY9KtLyoN"
        },
        "google": {
            "enabled": true
        }
    }
}

Errors ​

StatusCodeCause
429RATE_LIMITEDOver the rate limit. Wait for Retry-After seconds

Browse users ​

GET/v1/public/users

The public user directory. Admin accounts are never listed.

  • Auth: None. Anyone can call it.
  • Rate limit: 100 requests a minute per IP address.
  • Idempotency: Not needed. Reading has no side effects.

Query parameters ​

NameTypeRequiredDescription
pageintegerNo1 to 10,000. Default 1
limitintegerNo1 to 50. Default 24
searchstringNoUp to 32 characters, matched against username and name
sortstringNotop (default), new or verified. newest is accepted as new
verifiedstringNo1 or true to list verified users only

Example request ​

bash
curl "https://api.rekberpay.com/v1/public/users?search=budi.santoso&limit=5"
js
const res = await fetch('https://api.rekberpay.com/v1/public/users?search=budi.santoso&limit=5', {
});
const data = await res.json();
python
import os

import requests

resp = requests.get(
    "https://api.rekberpay.com/v1/public/users?search=budi.santoso&limit=5",
    timeout=30,
)
print(resp.status_code, resp.json())
php
<?php

$ch = curl_init('https://api.rekberpay.com/v1/public/users?search=budi.santoso&limit=5');
curl_setopt_array($ch, [
    CURLOPT_RETURNTRANSFER => true,
]);
$response = json_decode(curl_exec($ch), true);
$status = curl_getinfo($ch, CURLINFO_RESPONSE_CODE);
curl_close($ch);

Example response ​

200 OK

json
{
    "success": true,
    "data": {
        "users": [
            {
                "username": "budi.santoso",
                "full_name": "Budi Santoso",
                "is_verified": false,
                "joined_at": "2026-10-13T14:23:17.597Z",
                "total_escrows_completed": 0,
                "average_rating": null,
                "rating_count": 0
            }
        ],
        "page": 1,
        "limit": 5,
        "total": 1,
        "has_more": false
    }
}

Errors ​

StatusCodeCause
400INVALID_QUERYA query value is out of range
429RATE_LIMITEDOver the rate limit. Wait for Retry-After seconds

Get a user profile ​

GET/v1/public/users/:username

A public profile: name, verification, completed escrows, average rating, linked shops and the latest published ratings.

  • Auth: None. Anyone can call it.
  • Rate limit: 100 requests a minute per IP address.
  • Idempotency: Not needed. Reading has no side effects.

Path parameters ​

NameTypeDescription
usernamestringLowercase username, 1 to 32 characters

Example request ​

bash
curl https://api.rekberpay.com/v1/public/users/budi.santoso
js
const res = await fetch('https://api.rekberpay.com/v1/public/users/budi.santoso', {
});
const data = await res.json();
python
import os

import requests

resp = requests.get(
    "https://api.rekberpay.com/v1/public/users/budi.santoso",
    timeout=30,
)
print(resp.status_code, resp.json())
php
<?php

$ch = curl_init('https://api.rekberpay.com/v1/public/users/budi.santoso');
curl_setopt_array($ch, [
    CURLOPT_RETURNTRANSFER => true,
]);
$response = json_decode(curl_exec($ch), true);
$status = curl_getinfo($ch, CURLINFO_RESPONSE_CODE);
curl_close($ch);

Example response ​

200 OK

json
{
    "success": true,
    "data": {
        "username": "budi.santoso",
        "full_name": "Budi Santoso",
        "is_verified": false,
        "joined_at": "2026-10-13T14:23:17.597Z",
        "total_escrows_completed": 0,
        "average_rating": null,
        "rating_count": 0,
        "social_instagram": null,
        "social_shopee": null,
        "social_tiktokshop": null,
        "recent_ratings": []
    }
}

Errors ​

StatusCodeCause
404USER_NOT_FOUNDNo user with this username
429RATE_LIMITEDOver the rate limit. Wait for Retry-After seconds

A real USER_NOT_FOUND answer:

404 Not Found

json
{
    "success": false,
    "error": {
        "code": "USER_NOT_FOUND",
        "message": "Pengguna tidak ditemukan."
    }
}

List a user's ratings ​

GET/v1/public/users/:username/ratings

Published ratings the user received, newest first. A rating is published once both sides have rated, or after 3 days, so a new rating can take a while to appear.

  • Auth: None. Anyone can call it.
  • Rate limit: 100 requests a minute per IP address.
  • Idempotency: Not needed. Reading has no side effects.

Path parameters ​

NameTypeDescription
usernamestringLowercase username

Query parameters ​

NameTypeRequiredDescription
pageintegerNo1 to 10,000. Default 1
limitintegerNo1 to 50. Default 20

Example request ​

bash
curl "https://api.rekberpay.com/v1/public/users/budi.santoso/ratings?limit=5"
js
const res = await fetch('https://api.rekberpay.com/v1/public/users/budi.santoso/ratings?limit=5', {
});
const data = await res.json();
python
import os

import requests

resp = requests.get(
    "https://api.rekberpay.com/v1/public/users/budi.santoso/ratings?limit=5",
    timeout=30,
)
print(resp.status_code, resp.json())
php
<?php

$ch = curl_init('https://api.rekberpay.com/v1/public/users/budi.santoso/ratings?limit=5');
curl_setopt_array($ch, [
    CURLOPT_RETURNTRANSFER => true,
]);
$response = json_decode(curl_exec($ch), true);
$status = curl_getinfo($ch, CURLINFO_RESPONSE_CODE);
curl_close($ch);

Example response ​

200 OK

json
{
    "success": true,
    "data": {
        "page": 1,
        "limit": 5,
        "total": 0,
        "items": []
    }
}

Errors ​

StatusCodeCause
400INVALID_QUERYpage or limit is out of range
404USER_NOT_FOUNDNo user with this username
429RATE_LIMITEDOver the rate limit. Wait for Retry-After seconds

Escrow, payment services and B2B deals for Indonesian businesses.