Partners · API documentation

Our developments, in your platform.

A read-only API with the developments and units you see on this website: names, locations, galleries, specifications, prices and the potential returns, as the site shows them. One key per partner, JSON over HTTPS, nothing to install. The machine-readable description is at /api/v1/openapi.json.

1 · Your key

Royal Bali Group gives you a key that starts with rbg_api_. Send it with every call:

curl https://www.royalbaligroup.com/api/v1/developments \
  -H "Authorization: Bearer rbg_api_…"
  • The key is shown to you once. Keep it on your server, never in a browser or an app.
  • It lives 7 days from its last use: every accepted call extends it, so a key in use never lapses. A key unused for 7 days expires.
  • Rotate it whenever you like with POST /api/v1/token/rotate (send the current key as the bearer). The answer carries a new key; the old one keeps answering for 24 hours so you can swap without an outage.
  • Royal Bali Group can revoke a key at any time; a revoked or expired key gets 401.

2 · Endpoints

MethodPathWhat you get
GET/api/v1/developmentsEvery public development. Slug, name, location, coordinates, sales and build status, completion, cover image, unit counts by status, links.
GET/api/v1/developments/{slug}One development in full. Everything the website shows: description, galleries in the stored order, amenities, features, key details, materials, nearby points, video, the Potential ROI range, the estimated nightly rate — and its units.
GET/api/v1/developments/{slug}/unitsThe units of a development. Filters: status (available, reserved, sold, delivered), bedrooms. Paged with offset and limit (max 200).
GET/api/v1/units/{id}One unit. Number, type, status, bedrooms, bathrooms, sizes, floors, pool, furnished, ownership, price and nightly rate as { amount, currency }, payment plan, gallery, floor plan.
POST/api/v1/token/rotateRotate your key. Send the current key as the bearer; the answer carries a new key of the same life. The old key keeps answering for 24 hours.

Every answer wears the same envelope: api, generated_at, attribution, disclaimer and data. The list:

{
  "api": "v1",
  "generated_at": "2026-10-09T13:00:00.000Z",
  "attribution": "Royal Bali Group",
  "disclaimer": { "financial": "…", "general": "…", "labels": "…", "attribution": "Royal Bali Group" },
  "data": {
    "developments": [
      {
        "slug": "raya-residence",
        "name": "Raya Residence",
        "location": "Bingin, Uluwatu",
        "coordinates": { "lat": -8.80, "lng": 115.12 },
        "status": "construction",
        "sales_status": "selling",
        "construction_status": "in_progress",
        "completion": "2027-03-31",
        "cover_image": "https://…/raya-cover.webp",
        "units": { "available": 10, "sold": 20 },
        "links": { "self": "/api/v1/developments/raya-residence", "website": "https://www.royalbaligroup.com/developments/villas/raya-residence" }
      }
    ]
  }
}

A unit, inside a development or on its own. Money is always { amount, currency }, taken from the unit itself:

{
  "id": "6f0e…",
  "development": "raya-residence",
  "unit_number": "Villa 3",
  "type": "villa",
  "status": "available",
  "visibility": "public",
  "public_status": "available",
  "bedrooms": 2,
  "bathrooms": 2,
  "build_size_m2": 204.1,
  "land_size_m2": 180,
  "floors": 2,
  "pool": true,
  "furnished": true,
  "ownership": "leasehold",
  "lease_end_date": "2056-12-31",
  "price": { "amount": 499900, "currency": "USD" },
  "estimated_nightly_rate": { "amount": 250, "currency": "USD" },
  "gallery": [{ "url": "https://…/villa-3-exterior.webp" }],
  "floorplan_url": "https://…/villa-3-plan.pdf"
}

Filters on units: ?status=available, ?bedrooms=2; paging with offset and limit (at most 200). Galleries come in the order the site shows them.

Visibility. Every unit of a development is listed and counts in the totals and the From price. A unit whose visibility is investor or internal is not offered publicly on its own: show public_status (“internal”) where you show a single unit, never its real status.

3 · Caching and limits

  • Every answer carries an ETag. Send it back as If-None-Match and an unchanged answer is a 304 that costs you nothing to parse.
  • Limits per key: 60 calls a minute and 5,000 a day. Past them you get 429 with Retry-After. Syncing every development once an hour is a few dozen calls.
  • Answers may be cached for five minutes (Cache-Control: private, max-age=300). Prices and availability must not be cached beyond 24 hours.

4 · Errors

A problem is JSON too: { "api": "v1", "error": { "status": 404, "message": "No public development \"x\"." } }

  • 400 a filter that makes no sense · 401 no usable key · 404 not a public development or unit · 405 anything but GET (the API is read only) · 429 too fast · 409 a key rotated twice.

5 · Terms of use

Using a key means you accept these. They protect the people who read what you publish.

  1. Labels and disclaimer. Show every financial figure with its Potential label (potential ROI, potential payback, estimated nightly rate) and this text next to it: “The financial projections, potential return on investment (ROI), payback periods, rental income estimates, occupancy rates and operational expense assumptions are estimates based on specific assumptions and market conditions at the time of publication. They are not guarantees or promises of actual returns.”
  2. Attribution. Name Royal Bali Group as the source of the development and unit data.
  3. Freshness. Do not show a price or an availability older than 24 hours; re-read before you quote.
  4. No resale. The feed is for your own platform; do not pass it on or sell it.
  5. Your key is yours. Keep it secret; tell us if it leaks and we rotate it.

Content is for informational and marketing purposes. Potential rental income projections are estimates based on assumptions and are not guarantees. Actual returns depend on market conditions, property management, occupancy rates and other factors. Investors should conduct independent due diligence.

Need a key?

Write to us through the contact page; a partner key is issued by the office and sent to you once.

Disclosure

Important information.

Informational only

Content on this website is for informational and marketing purposes. Potential rental income projections are estimates based on assumptions and are not guarantees. Actual returns depend on market conditions, property management, occupancy rates, and other factors. Investors should conduct independent due diligence.

Foreign investment

Investment in Indonesian property is subject to Indonesian law, including foreign ownership restrictions, tax obligations, and regulatory changes. Consult qualified legal and tax advisors in Indonesia and your home country.

Independent verification

Do not rely solely on this website. Verify all information independently, including property details, financial projections, and legal status, with qualified professionals before committing capital.