Step 3c β Connectivity Layer (GlobalTix) & Indonesian B2B Incumbents
Date of research: 2026-07-26 Β· Frame: supplier + vendor-selection study for SatuSatu, not a competitor scan. Subject constraints held throughout: no dedicated engineering capacity; Pool A ~10% gross / ~7% after payments+FX; Pool B direct-contracted Balinese ~27%; Pool B's blocker is absent real-time availability.
Evidence tiers: A = filings, IR, official docs, live product Β· B = credible trade press Β· C = blogs, LinkedIn, vendor marketing. Tags: [SHIPPED] = observable in a live product today Β· [ANNOUNCED] = stated, not observed Β· [SPECULATION] = mine.
0. What is new in this step
Four findings are new and load-bearing. Everything else is confirmation of the Step-2 map.
| # | Finding | Tier |
|---|---|---|
| 1 | The GlobalTix Partner API 3.0 spec is fully public at apiconnect.globaltix.com (Postman Documenter, collection 3866783, published id 2s935rHMSf). Complete endpoint list, price schema, booking state machine, rate limits, sandbox URLs and test product IDs are readable without credentials. |
A |
| 2 | GlobalTix enforces a resale price floor (minimumSellingPrice, "selling below this price and the agent risk being blacklisted by the merchant") and applies a 1.50% FX markup to every non-SGD currency including IDR (SGD = 0.00). Both are direct, quantified attacks on SatuSatu's ~7% Pool A net. |
A |
| 3 | GlobalTix Pte Ltd holds Singapore Travel Agent Licence TA03367 and markets a reseller-sourcing product to "100,000+ bookable experiences" at "BEST RATES GUARANTEED". It is not a neutral pipe; it is a licensed travel agent running the marketplace its distribution customers resell from. | A |
| 4 | DPP ASITA's own national member directory returns 5,222 members, of which Provinsi Bali = 353. Province counts sum exactly to 5,222 β internally consistent, unlike the ASITA Bali chairman's arrival-share claims. This is the first hard number for D2's addressable Indonesian agent tier. | A |
1. π΄ GlobalTix β vendor deep dive
1.1 Position (carried forward, not re-verified)
Singapore, founded 2013, founders Chan Chee Kong & Chan Chee Chong. Series B S$6.5M led by Tin Men Capital, 2024-10-14 (the 2024-12-19 "$5 Million Series B" release is the same round restated β do not sum). 10 Asian offices including Indonesia; GM Indonesia Helmy Pietersz. Holds the Borobudur channel-manager mandate from InJourney, announced 2025-10-07/08. Carries Waterbom Bali, GWK, Taman Safari Indonesia.
Self-reported scale, company-controlled pages, all Tier A-as-claim / unaudited:
| Page | Experiences | Agents | Tickets |
|---|---|---|---|
| Homepage (fetched Step 2) | 150,000+ | 12,000+ | 25M / yr |
| Series B release, 2024-10-14 | 150,000+ | 12,000 | 12M / yr |
/resellers/ (fetched today) |
100,000+ | β | β |
β οΈ GlobalTix's own pages disagree with each other by 50,000 experiences. The reseller-facing page β the one a buyer like SatuSatu is being sold on β carries the lower number. Treat 150,000 as a marketing ceiling and 100,000 as the sourcing-relevant figure. The only interesting movement is 12M β 25M tickets in ~21 months.
1.2 API surface β [SHIPPED], and the spec is public
Source (Tier A): https://apiconnect.globaltix.com/ β Postman collection titled "Globaltix Partner API 3.0 (Published)". Fetched 2026-07-26.
Gating: the specification is open. Credentials are not β "Get your STG login credentials from your GlobalTix Account Manager." Production credentials are issued only after "our tech consultants validat[e] the test results" of a mandated pre-go-live test: one successful booking plus one successful cancellation on the recommended test SKUs. There is a human gate on go-live, not just a signup form.
Endpoint inventory (verbatim paths)
| Group | Endpoint | Notes |
|---|---|---|
| Auth | POST /api/auth/authorize |
Bearer access token, expires every 24 hours, must be re-minted |
| Taxonomy | GET /api/country/getAllCountriesGET /api/city/getAllCitiesGET /api/merchantCategory/getAllCategories |
|
| Catalog | GET /api/product/list?countryCode=SGGET /api/product/options?id={productID}&isDynamicPrice={boolean}GET /api/product/info?id=GET /api/product/changes?countryId=&dateFrom=&dateTo=GET /api/product/newProducts?startDate=&endDate=GET /api/ticketType/get (deprecated) |
product/changes window: last 24h / 7d / max 30 days |
| Availability | GET /api/ticketType/checkEventAvailability?dateFrom=&dateTo=&id= |
Date range must be < 30 days. Availability published up to 6 months forward. Timeslots returned per day where they exist. |
| Booking | POST /api/booking/reservePOST /api/booking/confirmPOST /api/booking/releaseGET /api/booking/details?referenceNumber=&partnerReferenceNumber= |
Two-phase commit. 15-minute hold, auto-released after. |
| Cancellation | GET /api/transaction/cancel (new)GET /api/transaction/revoke (old β "to be Deprecated") |
Per-ticket cancellationPolicy: {percentReturn, refundDuration} |
| Misc | GET /api/transaction/resendTransactionEmailGET https://product-image.globaltix.com/{env}-gtImage/{name} |
Images served off a separate CDN host |
| Webhooks | /booking-ticket-update, /booking-transaction-update, /booking-ticket-redeem, /booking-ticket-revoke, /product-info-update, /ticket-type-price-update, /ticket-expired |
Spec on SwaggerHub GlobalTix-GT/Webhook/1.0.0 |
Environments: STG https://stg-api.globaltix.com/api/ Β· Production https://sg-api.globaltix.com/api/ Β· staging partner UI https://stg-partner.globaltix.com/. A "Golden Transaction" test runs on production against GlobalTix-owned dummy SKUs so credits can be refunded without touching a merchant.
Rate limits: non-transactional 27,000 requests / 5 minutes / IP address; no stated limit on transactional (reserve/confirm/details). Caching of catalog responses is explicitly recommended by the vendor.
What the API does and does not expose β against the brief's checklist
| Capability | Status |
|---|---|
| Catalog | β
Full. Product β Product Options β Ticket Type ID. Packages (bundles) supported. Delta feed (product/changes) + new-product feed + product-info-update webhook. >90% of the marketplace uses "Standard Variation"; customised variations are <10% β good news for a low-engineering integrator. |
| Availability | β Real-time, per ticketType, β€30-day query window, β€6 months horizon, timeslot-aware. |
| Pricing | β
Seven price points per ticket type (see 1.3). isDynamicPrice flag on product/options; ticket records carry demandType (observed value NON_PEAK) β demand-based pricing exists in the model. Push notification via ticket-type-price-update webhook. |
| Booking | β
reserve β confirm β release, 15-min hold, partnerReferenceNumber for idempotency/reconciliation. |
| Cancellation | β
transaction/cancel, with machine-readable refund policy per ticket. Not all SKUs are cancellable (isCancellable boolean). |
| Redemption / barcode | β οΈ Asymmetric. As a reseller you receive redemption state (/booking-ticket-redeem webhook) and a ticket PDF link, and some SKUs are barcode-admission (useBin, barcode test SKUs exist). There is no reseller-side redemption/scan endpoint. Redemption is a merchant-side product β the separate GlobalTix Redemption Portal (vendor guide, 2024-08-28). Consequence for SatuSatu: you cannot operate the gate. If a Pool B ambition is to run redemption for direct-contracted Balinese operators, GlobalTix does not give you that rail β you would be buying it as a merchant, not consuming it as a reseller. |
Quality assessment β honest
Good: two-phase booking with an explicit release path is the correct design and is better than several rivals; delta + webhook catalog sync means no full re-crawl; documented test SKUs covering the awkward cases (blockout dates, cut-offs, compulsory Q&A, separate-email tickets, open-dated, barcode) genuinely shorten integration; rate limits are generous; partnerReferenceNumber supports safe retries.
Weak: cancellation and revoke are GET verbs mutating state; two endpoints are already deprecated inside one published version, so the surface churns; the docs contain a live link bug (the STG server is labelled stg-api.globaltix.com but hyperlinked to uat-api.globaltix.com), and the Partner Portal link is href="https://"; the 24-hour token forces refresh scheduling; the β€30-day availability window means a 6-month calendar costs ~6 calls per ticketType, which at Pool-A catalog scale is the real cost driver.
Integration effort for SatuSatu: already paid. This is the incumbent feed. The marginal question is not "can we integrate" but "what does a second one cost against this baseline" β answered in Β§2.
1.3 Commercial model β three stacked takes, two of them quantified
GlobalTix monetises SatuSatu in more places than a headline commission.
(a) Prepaid credit, drawn at reservation. "Credit will be deducted upon booking reservation" β not on confirm. A released or expired hold returns credit, but the working-capital position is: GlobalTix holds SatuSatu's float, and every abandoned checkout temporarily consumes it. A 15-minute hold on an abandoned cart is 15 minutes of dead capital.
(b) The seven-price stack β and a resale price floor. Per ticket type, in both the attraction's currency and the agent's:
| Field | Vendor definition (verbatim) |
|---|---|
originalPrice / originalMerchantPrice |
"the official retail price⦠walk-in price" |
nettPrice / nettMerchantPrice |
"Agent price of the ticket, this will be the amount deducted from the Agent Credit" |
minimumSellingPrice / minimumMerchantSellingPrice |
"Minimum selling price⦠Selling below this price and the agent risk being blacklisted by the merchant" |
recommendedSellingPrice / recommendedMerchantSellingPrice |
"GlobalTix's recommended selling price⦠a recommendation only" |
directContractPrice / directMerchantContractPrice |
Present in the schema, null in the sample. A private/direct-contract rate path exists in the data model. |
π΄ This is the single most important commercial fact in the whole GlobalTix relationship. SatuSatu does not merely buy at a net rate someone else set β it is contractually floored on the retail price it may charge, on pain of merchant blacklisting. Combined with the Step-2 finding that Pool A SKUs are non-exclusive and simultaneously retailed by Klook, Viator and GetYourGuide, SatuSatu is squeezed from both ends: it cannot price above the majors (no demand), and it may not price below the MSP floor (no permission). The ~10% gross / ~7% net Pool A band is not a market outcome SatuSatu can optimise its way out of. It is a contractual box.
Observed sample geometry (GlobalTix's own docs, one test SKU): originalPrice 20 Β· nettPrice 5 Β· minimumSellingPrice 14 Β· recommendedSellingPrice 14. That is a synthetic test product, not representative of live economics β do not quote it as a real spread. It does establish the shape: MSP is set well above nett and equal to RSP, i.e. the floor and the recommendation are the same number, which functionally converts a "recommendation" into a fixed price.
(c) FX markup β 1.50%, applied to IDR. The currency object returned by the API:
"currency": { "code": "IDR", "description": "Indonesia Rupiah",
"markup": 1.50, "roundingUp": 1.00, "creditCardFee": 3.00 }
Cross-checking every currency in the response: SGD carries markup: 0. Every other currency sampled β IDR, USD-adjacent majors, AUD, CAD, CHF, and the long tail β carries markup: 1.50. (AED is an outlier at 0.50.) creditCardFee: 3.00 appears on the traded majors and 0.00 on illiquid currencies.
π΄ GlobalTix applies a ~1.5% FX spread to any settlement outside Singapore dollars. For a USD-denominated, IDR-supplied Bali reseller this is charged on the way in and is already inside the "~7% after payments+FX" figure β but it is now a named, quantified, vendor-set line, not an estimate. It is also the cheapest thing on this list to negotiate away or route around, and it is worth asking whether settling in SGD is contractually available.
(d) The SaaS side (relevant only if SatuSatu ever becomes a GlobalTix merchant for Pool B). globaltix.com/planspricing/, Tier A:
| Tier | Volume | Website booking fee | Setup |
|---|---|---|---|
| Essential | <4,999 tickets | +3% | USD 100 one-time |
| Business | >5k tickets | +2% | USD 100 one-time |
| Pro | >10k tickets | +1% | USD 100 one-time |
All three tiers carry an identical feature set β Booking page, inventory management, Agent Portal, Basic Chatbot (5 questions), Channel Manager, Global Marketplace. Only the take rate moves. GT Pay: Credit card 3% Β· Digital wallet 2.3% Β· National payment 1%. Domain masking, payment-gateway integration and custom email templates are all priced separately.
Read this table twice. It says that for USD 100 and a 3% booking fee, a Balinese operator with no reservation system gets real-time availability, a booking page, and channel-manager distribution. That is the commercial answer to Pool B's stated blocker β offered by SatuSatu's own supplier, at a price SatuSatu cannot beat, to the exact operators SatuSatu wants to contract exclusively. See Β§5.
1.4 Indonesian and Bali inventory β as concretely as the sources allow
What is provable from the API's own reference data (Tier A):
- Indonesia is
countryId: 2β the second country in GlobalTix's system, immediately after Singapore (countryId: 1).BaliiscityId: 2, i.e. the second city ever created in the platform.mobilePrefix: "+62",isDistributionTable: true,isListing: true,isBilling: true,lastUpdated: 2025-07-14. Indonesia is not a late expansion market for GlobalTix; it is structurally the founding non-Singapore market. - Indonesian city taxonomy is granular, not token: Bali (2), Jakarta (3), Bandung (4), Yogyakarta (5), Medan (6), Surabaya (111), Ubud (112) β Ubud carries its own city ID separate from Bali β plus Banyuwangi, Balikpapan, Berau, Manado. A vendor that gives Ubud a distinct city record is carrying Ubud-level supply, not just Denpasar airport transfers.
- IDR is a first-class settlement currency with a full markup/rounding/card-fee configuration.
- A live Indonesian product visible in the public docs:
id: 52712, title: "Ancol Entrance Gate", country: "Indonesia", status: PUBLISHED, publishedDate: 2026-01-07.
Named Indonesian supply across all sources: Borobudur Temple Compound (channel-manager mandate from InJourney, an Indonesian SOE, 2025-10-07/08, Tier A) Β· Taman Safari Indonesia (named in Series B release and About boilerplate, A) Β· Waterbom Bali Β· GWK Β· Ancol (A, from the API).
β οΈ What could not be established and should not be guessed: the count of Indonesian, and specifically Balinese, SKUs. No public per-country product count exists. product/list?countryCode= requires a token.
π΄ Actionable, zero-research, one-hour task for SatuSatu β it already holds production credentials:
GET /api/product/list?countryCode=ID β count Indonesian products
GET /api/city/getAllCities β resolve cityId 2 (Bali) and 112 (Ubud)
β bucket the ID product list by city; compare Bali+Ubud count against SatuSatu's 253 SKUs
GET /api/product/options?id={n}&isDynamicPrice=true
β for a matched sample, capture nettPrice vs minimumSellingPrice vs Klook/Viator live retail
That last line converts the Pool A margin band from [INFERENCE] to [VERIFIED] and was already flagged as the highest-value-per-hour item in 01-landscape.md Β§9. It is now a specific set of four calls.
1.5 π΄ The structural conflict β GlobalTix is a licensed travel agent, not a neutral pipe
Three facts, all Tier A, all from GlobalTix's own web properties:
Β© 2024 GlobalTix Pte Ltd. All Rights Reserved. Travel Agent License: TA03367.β sitewide footer. GlobalTix holds a Singapore STB travel-agent licence. It is legally constituted to sell travel, not merely to move data./resellers/is a demand-side sales page, headed "BEST RATES GUARANTEED β Discover And Resell From Over 100,000+ Bookable Experiences Under The Sun." It targets, verbatim, "small tour agencies" for whom "bulk purchases come back to bite," and promises "100% neutral" reporting as "a true B2B platform."- 12,000+ travel agents are already on the platform, and GlobalTix has an Indonesian office with a local GM.
The conflict, stated plainly:
- SatuSatu's D2 target market β Indonesian travel agents who want attractions inventory β is GlobalTix's existing 12,000-agent customer base, sold to in-market by a local Indonesian team. Every Bali agency SatuSatu pitches D2 to can open a GlobalTix reseller account instead and source the same Pool A catalog directly, one layer higher, at a nett price that is very likely better than anything SatuSatu can pass through.
- The MSP floor removes the obvious counter. SatuSatu cannot win that agent on price, because it is contractually barred from going below
minimumSellingPriceand risks merchant blacklisting if it does. - D3 (reseller API) is a direct product substitute for the thing GlobalTix already sells. GlobalTix's reseller pitch β "our powerful APIβ¦ instantly searchable, bookable and cancelable in real-time" β is D3's pitch, shipped, at scale, since at least 2022-12-29 (page publish date).
- Ingestion is also disclosure. Every
product/list,checkEventAvailabilityandbooking/reservecall SatuSatu makes tells its supplier exactly which SKUs it merchandises, when demand spikes, and what converts. A supplier that is also a licensed travel agent with a local Indonesian sales team is not a party you want holding that telemetry for free. This is a lesser version of the BΓ³kun/Viator problem in Β§2, but it is the live version.
[SPECULATION, flagged as such] The directContractPrice field sitting null in the schema suggests GlobalTix operates a two-tier rate structure in which volume partners get contract rates below marketplace nett. If so, SatuSatu at 253 SKUs is on the public tier. Worth asking the account manager directly; the field name gives you the vocabulary to ask in.
1.6 AI in the product β [ANNOUNCED], not [SHIPPED]. Score: 1 / 4
| Evidence | Tier | Reading |
|---|---|---|
| Series B release (2024-10-14): funding "to introduce AI advancements in the travel and tourism industry"; (2024-12-19) "investing in AI and predictive analytics to optimise pricing, identify industry trends, and enhance traveller interactions" | A (as claim) | [ANNOUNCED], 21 months ago, no follow-up release found |
| Pricing page ships "Basic Chatbot (5 questions)" on every tier | A, live | A scripted 5-question widget. Not AI in any meaningful sense. |
| Partner API 3.0 exposes zero AI, recommendation, ranking or forecasting endpoints | A, live | The connectivity surface is entirely CRUD |
isDynamicPrice flag + demandType: NON_PEAK |
A, live | Rules-based demand tiering. Not evidence of a model. |
| Targeted search for a 2026 GlobalTix AI launch | β | Nothing. No product, no release. |
Verdict: 1/4. One shipped chatbot of trivial capability, one 21-month-old funding-narrative claim, nothing in the API. Do not treat GlobalTix as an AI-capability partner, and do not assume its pricing intelligence is better than SatuSatu's own.
1.7 Concentration risk β the honest answer
Operational risk: no verifiable evidence found, and the evidence base is too thin to clear them either.
- G2: "There are not enough reviews for Global Tix for G2 to provide buying insight." A ten-year-old company with 12,000 claimed agents has no reviewable install base on the main B2B review site. That is itself mildly informative about how the agent relationship is actually formed (direct sales, not self-serve).
- Capterra and SoftwareAdvice carry profiles; no incident, outage or dispute reporting was found in either.
- One "scam" complaint surfaced on
globaltix.tenereteam.com, a coupon-affiliate aggregator. Tier C, single anonymous datapoint, unusable β excluded. - No status page, no published SLA, no uptime history, no post-incident reports found. Absence of a status page is a real finding for a vendor carrying a UNESCO-site channel-manager mandate.
Structural risk, which is where the actual exposure sits:
| Risk | Evidence | Severity for SatuSatu |
|---|---|---|
| Single prepaid credit account is a hard stop | Credit deducted at reserve; no credit = no bookings, instantly, across the whole Pool A catalog |
π΄ High β a treasury failure is a total Pool A outage |
| MSP floor | Vendor docs, verbatim; blacklist consequence | π΄ High β caps margin by contract, not by market |
| 1.5% FX markup on IDR/USD | API currency object | π Medium β quantified, and negotiable |
| Surface churn | Two endpoints already deprecated inside published v3.0 (ticketType/get, transaction/revoke) |
π Medium β with no engineering capacity, forced migrations are expensive |
| Supplier is also a competitor for the same agents | Travel Agent Licence TA03367 + /resellers/ + 12,000 agents + Indonesian GM |
π΄ High β the D2/D3 conflict |
| Supplier holds the Indonesian SOE mandate | InJourney/Borobudur, 2025-10-07/08 | π Medium β GlobalTix's Indonesian position is strengthening, not weakening; leverage moves away from SatuSatu |
| No SLA / no status page / no public incident history | Searched, none found | π Medium β you cannot price the availability risk you are carrying |
Departed customers: none identified. [UNVERIFIED] β this is a hard thing to source and I did not find it. Do not infer stability from the absence.
Bottom line on GlobalTix. It is a competent, well-documented, Indonesia-deep connectivity vendor whose commercial terms are actively hostile to a small reseller's margin, and whose corporate form makes it a competitor for the exact customer D2 is being built for. SatuSatu should keep it, use it as the catalog-coverage utility it is, and stop expecting it to be a route to B2B revenue. That was already the conclusion in 00-internal-context.md; this step supplies the mechanism.
2. π΄ Second-aggregator shortlist
2.1 First, the framing correction
The brief lists nine candidates. They are not the same kind of thing, and treating them as one list is the main way this decision goes wrong.
| Kind | Members | What buying from them actually is |
|---|---|---|
| Marketplace aggregators (a pool of third-party supply you can resell) | GlobalTix, BΓ³kun Marketplace, Rezdy Marketplace, Prioticket/ETG, TBO | The thing SatuSatu means by "second aggregator" |
| Reservation systems (one operator's own inventory, per-supplier connection) | Ventrata, Regiondo, Checkfront, rezio, TourCMS | Not an aggregator. N integrations for N operators. |
| Competitor OTA supply rails | Klook, Viator | Inbound-only, or reseller access gated behind being their distributor |
| Standards, not vendors | OCTO | The actual leverage β see 2.3 |
2.2 The comparison
| Candidate | Indonesia / SEA inventory depth | Public API availability & quality | Commercial model | Integration effort (no eng. capacity) | Strategic risk |
|---|---|---|---|---|---|
| GlobalTix (incumbent) | π’ Strongest verified. Indonesia = countryId 2, Bali = cityId 2, Ubud own city ID, IDR native, Borobudur/Ancol/Taman Safari/Waterbom/GWK, local office + GM | π’ Public spec, gated creds. Complete: catalog+delta+availability+2-phase booking+cancel+7 webhooks. Rate limit 27k/5min | Prepaid credit at reserve Β· nett price Β· MSP resale floor Β· 1.5% FX on non-SGD Β· merchant side +1β3% + USD100 | Zero β done | π΄ Supplier is a licensed travel agent (TA03367) selling the same catalog to 12,000 agents incl. in Indonesia. Competes with D2 and D3 by construction. |
| Prioticket / Experience Technology Group (Palisis + TourCMS + Prioticket, formalised 2026-05-12) | π‘ Global/Europe-weighted; 8,143 suppliers, 11,316 distribution partners, 50,000+ experiences, 250+ API-integrated resellers, 60+ reservation systems (all self-reported, C). Indonesia depth unverified | π’ Best-in-class and fully public β docs.prioticket.com open, HTTP 200, no login. Explicit Distributor API ("strongly preferred approach for resellers and OTAs"), plus native OCTO consumption. Endpoints: auth, products, availability, reservations/cart, orders, payments, contacts, notifications. Public changelog. Postman + SDKs. api.tourcms.com also open |
Not published. Distributor contracts negotiated | π’ Lowest of any new candidate. OCTO-standard path + interactive docs + SDKs. Closest thing to a drop-in second feed | π’ Lowest. Independent of every OTA that competes in Bali. Its whole business model is being neutral connective tissue. Its consolidation (2026-05) is the only risk β a newly merged three-brand group may rationalise APIs |
| BΓ³kun (Tripadvisor) | π‘ Marketplace is supplier-listed and global; Indonesia/Bali depth unverified. European origin | π’ Public, no login (bokun.dev, HTTP 200). OAuth + scopes. Booking API (REST) covers availabilityβpricingβbookingβamendβcancel; Experience Products API (51 articles); Channel Manager API with explicit "options for reselling products"; OCTO implementation; webhooks |
Supplier-side SaaS; reseller commission split negotiated per marketplace contract | π‘ Medium. Well-documented; OCTO path available | π΄ Owned by Tripadvisor since 2018-04-20. Viator is Tripadvisor. Integrating hands Viator's parent a live read on which Bali SKUs SatuSatu merchandises, at what volume, on which dates. Viator retails the same Bali inventory to the same travellers |
| Expedition Software (Rezdy / Checkfront / Regiondo) | π‘ Rezdy is AU/NZ-strong, some SEA; Indonesia depth unverified | π Mixed and degrading. developer.rezdy.com returned HTTP 405 "Human Verification" today β bot-walled, not openly readable. docs.checkfront.com 302-redirects to bokun.dev (!). api.regiondo.com is open (API explorer). Three products, three surfaces, no unified distributor API found |
Rezdy Marketplace commission split; not published | π΄ High. Three codebases mid-merger, one doc portal walled, one already pointing at a competitor's docs. Bad target for a team with no engineers | π Medium-high, and it is integration risk not competitive risk. PE-owned (Vertica + Bailador), CEO Lawrence Hester is a FareHarbor co-founder since June 2025 β expect rationalisation. Do not integrate a platform that is mid-consolidation with no announced unified API. β Reminder: the Accel-KKR/Rezdy claim on businessmodelcanvastemplate.com is refuted |
| Ventrata | π΄ Attraction-operator system (37M tickets/yr, 119 clients). Not an aggregator. Indonesia presence unverified | π’ docs.ventrata.com open, HTTP 200, "Ventrata OCTO API" β clean, standards-native |
Per-operator; enterprise attraction SaaS | π‘ Low per operator via OCTO β but N operators = N contracts | π’ Low competitive risk. π΄ Wrong shape. Buys you specific enterprise attractions, not catalog coverage |
| TBO Holidays | π‘ 200,000+ global sightseeing products, 25,000+ agents, 1,300+ white-label/API customers (self-reported). India/Middle East core; Bali destination content exists. Indonesian activity depth unverified | π XML/API exists and is widely resold by integrators, but docs.tbotechnology.in did not resolve today. Access is BD-gated. Hotel-first architecture |
B2B wholesale net rates + agent markup | π΄ High. XML-era integration, hotel-centric data model, sightseeing is a secondary category | π΄ TBO is a competitor for D2, not a supplier for it. It already sells 200k sightseeing products to 25,000 agents. Feeding SatuSatu's catalog from TBO means reselling, at a fourth layer, a product TBO offers SatuSatu's target agents directly |
| Travel Curious Group (Redeam) | π΄ Redeam was North-America/Europe barcode-clearing. No Indonesia evidence. Acquired by Travel Curious 2025-07-17 | π΄ travelcurious.com returned HTTP 403 to programmatic fetch. No public distributor docs found |
Not published | π΄ High β unknown surface, post-acquisition | π Medium. Insufficient evidence to shortlist. Drop unless a specific need for barcode clearing emerges |
| Klook supply API | π’ Huge Bali depth | π΄ The "Klook Partner API" is a misnomer β klook.gitbook.io/openapi is the "Klook API Specification / API for Merchants", i.e. supply-INBOUND. It lets you give Klook your inventory. No public outbound distributor API exists; partner.klook.com is OAuth-gated |
Merchant commission to Klook | n/a | π΄π΄ Worst on the list. Klook is a direct Bali retail competitor and sells a Klook Bali Pass. The only public integration path hands Klook your Pool B supply. Integrating "with Klook" as a buyer is not currently possible; integrating as a supplier means giving your one defensible asset to the competitor most able to monetise it |
| Viator supplier API | π’ Huge Bali depth | π‘ Docs exist (viator-supplier-api.md, 102KB captured) but developer.viator.com was unreachable programmatically today. Supplier API = inbound; the Viator Partner API (outbound) is affiliate/merchant-gated with certification |
Commission; certification tiers | π Medium-high (certification) | π΄ Tripadvisor again. Same disclosure problem as BΓ³kun, without BΓ³kun's neutral-marketplace framing. Viator competes head-on for the Bali traveller |
| rezio (built by KKday) | π‘ Asia-focused, Taiwan/Japan/SEA. Booking system for operators β not an aggregator | π rezio.io live; distributor-facing API docs not publicly located. Channel-manager oriented |
Operator SaaS + channel commission | π‘ Medium | π KKday built rezio. KKday is an Asian experiences OTA. Same category of conflict as Klook/Viator, at smaller scale in Bali |
2.3 π΄ The recommendation, and it is not the obvious one
Rank 1 β Prioticket / Experience Technology Group. It is the only candidate that is (a) a genuine aggregator, (b) publicly and completely documented with a purpose-built Distributor API, (c) OCTO-native, and (d) owned by nobody who competes for the Bali traveller. For a team with no engineering capacity, "docs are open, SDKs exist, and there is a standards path" is worth more than raw catalog size. Its stated 60+ connected reservation systems is exactly the coverage GlobalTix does not give. β οΈ The one thing to verify before committing, which I could not verify publicly: Indonesian and Balinese SKU depth. Ask ETG for a country-level product count for ID and a Bali/Ubud breakdown, and compare against GlobalTix's. If Prioticket's Indonesia depth is thin, this recommendation collapses β a neutral aggregator with no Bali supply solves nothing.
Rank 2 β BΓ³kun, accepted with the Tripadvisor exposure priced in and stated out loud to the board. It is the best-documented alternative and OCTO-capable. Take it only if Prioticket's Indonesia depth fails and the catalog gain is large enough to be worth telling Viator's parent what you sell.
Do not pursue: Expedition Software (mid-merger, doc portal bot-walled, Checkfront's docs already redirect to a competitor), TBO (competitor to D2 wearing a supplier costume), Travel Curious/Redeam (no evidence base), Klook (only public path gives away Pool B), Viator supplier API (inbound + Tripadvisor).
The leverage nobody in the brief named: OCTO. BΓ³kun, Prioticket, Ventrata and a widening set of others all implement the Open Connectivity for Tours, Activities and Attractions specification. Prioticket's own docs state it "consume[s] standard OCTO Supplier APIs as defined in the official specification," Ventrata's entire doc site is titled "Ventrata OCTO API," and BΓ³kun ships "BΓ³kun's implementation of the OCTO API Standard." [SPECULATION, but well-founded] For a team with no engineers, the highest-leverage move is to build one OCTO-conformant consumer rather than a second bespoke aggregator adapter. One integration then reaches Prioticket's pool, Ventrata's attractions, BΓ³kun's marketplace, and any future OCTO supplier β and it makes each individual vendor swappable, which is the direct antidote to the GlobalTix concentration risk in Β§1.7. This should be a named decision in the D3 architecture, not an implementation detail. It also means Ventrata stops being "the wrong shape" and becomes "a marginal-cost addition once the OCTO client exists."
3. Indonesian B2B incumbents
3.1 The scan
| Entity | Agent-facing portal / API? | Carries tours & attractions, or hotels+flights only? | Commercial model | AI shipped (0β4) |
|---|---|---|---|---|
| Golden Rama | π’ rols.golden-rama.com is live and two-sided β "Agent Login" (Agent ID / User ID / Password / Secure Code) and "Supplier Login" (Supplier ID / Password), plus "Register Online". [SHIPPED, Tier A] |
β οΈ Narrower than Step 2 assumed. The ROLS landing page self-describes as "Hotel reservation Center" with contact hotel.rols@goldenrama.com. Only hotels are surfaced on the public portal page. Golden Rama's consumer site carries an Attractions category β but that is not the same system. No public evidence the agent portal distributes attractions. |
Not published. No API, XML feed, commission or deposit terms exposed publicly | 0 β no AI observed. WhatsApp widget only |
| Panorama Group | π’ Two distinct assets. "Panorama Agent" β a live Google Play app, "manage and promote tours provided by Panorama JTBβ¦ book tours for clients on-the-go" [SHIPPED, Tier A]. And Wupi, described by Panorama Group itself as a "wholesale B2B Travel Distribution Platformβ¦ developed to sell tour packages and flight tickets for travel agents in low and mid-tier markets" [SHIPPED, Tier A] |
π‘ Tour packages and flight tickets (Wupi, verbatim) and tours (Panorama Agent app). Packaged tours, not ticketed attractions. No attraction-SKU distribution evidenced | Wholesale net rates; not published. No public API | 0 β nothing found |
| Traveloka | π’ Traveloka Partners Network (TPN), travelokapartnersnetwork.com [SHIPPED, Tier A]. Integration models: Non-branded API, Branded API, Mini-App (flights), Website Redirection, and β critically β "Travel Agent Booking Engine (Coming Soon)" |
π’ Yes. Verbatim product line: "Accommodations, Travel Activities, Flights, Bus & Shuttle." Self-reported: 60,000+ directly contracted SEA hotels, 90,000+ SEA accommodations, 2M+ global, 60,000+ travel activities globally, 300+ airlines | "Competitive and Flexible Pricing"; net-vs-commission not published. Targets "OTAs, travel wholesalers, fintech companies, banks, and e-commerce platforms" | 1 β no shipped AI in the B2B product; consumer-side assistants exist but were not verified this step |
| Tiket.com (Blibli / PT Global Digital Niaga Tbk, IDX: BELI) | π Affiliate T&Cs published (tiket.com/public/downloads/b2b/affiliate/) and a Corporate travel-management product. No agent-reseller portal or public API found |
π’ Consumer catalog carries "To Do" β attractions, play areas, spa & beauty, tours, sports & outdoor β plus tiket FLEXI (flexible-date activity vouchers) | Affiliate commission; corporate credit line | 1 β FLEXI is a product feature, not AI |
| TBO Holidays | π’ Live B2B portal + XML API; 1,300+ white-label/API customers, 25,000+ agents, 60+ hotel suppliers | π’ Yes β 200,000+ global sightseeing products, plus flights, hotels, transfers, car rental, cruise. Runs TBO Academy with a free Bali destination course | B2B wholesale net rate + agent markup. Parent TBO Tek is publicly listed in India β financials are obtainable, and were not pulled this step [UNVERIFIED] |
1 β no AI verified |
| Agoda Activities (Booking Holdings) | π΄ No public activities distribution API. partnerhub.agoda.com and developer.agoda.com are accommodation-focused; Rocket Travel by Agoda's Distribution API is explicitly "Accommodation Distribution API." Third-party integrators state plainly there is "no online application form or developer portal for Agoda B2B API" β access is via BD contact |
π‘ Agoda's consumer surface sells activities; its distribution surface does not | Not published | 1 |
3.2 π΄ Is the Indonesian travel agent already well served? β the D2 verdict
No. And the specific way in which they are underserved is precisely the gap SatuSatu can occupy β but it is a much narrower gap than "a portal".
Read the middle column of Β§3.1 again. Every single Indonesian incumbent's B2B distribution is built around hotels, flights and packaged tours. Not one of them distributes ticketed attractions to agents.
- Golden Rama runs the architecture D2 proposes β two-sided, agent + supplier, live β but its public agent surface is a "Hotel reservation Center." It has the rails and is not putting attractions on them.
[VERIFIED as of today; the portal is login-gated beyond the landing page, so post-login categories are UNVERIFIED β this is the single most valuable remaining check and needs an agent account.] - Panorama distributes "tour packages and flight tickets" (Wupi, verbatim) and tours (Panorama Agent app). Packaged FIT/GIT product, sold with a quote-and-confirm workflow. Not real-time ticketed attraction inventory.
- TBO genuinely does carry 200,000+ sightseeing products to 25,000 agents β but it is India/Middle-East-centred, hotel-first in architecture, and its Indonesian activity depth is unverified. It is the one real competitor to D2's pitch, and it competes on breadth, not on Bali.
- Traveloka TPN is the most serious threat and the least discussed. It ships "Travel Activities" as a named B2B product line to "OTAs and travel wholesalers," and has a "Travel Agent Booking Engine (Coming Soon)."
[ANNOUNCED]. Combined with the June 2026 Trip.com attractions-inventory pooling, Traveloka is assembling exactly D2 β with 60,000+ activities, Indonesian market ownership, and a balance sheet. - Agoda is not a factor in distribution. Its activities inventory is not distributable.
Consequences, stated as directly as the brief asks:
- D2's pitch cannot be "a portal." Golden Rama has one. Traveloka is building one. Panorama has an app and a wholesale platform. A portal is table stakes and confers nothing β the same conclusion Step 2 reached about WhatsApp.
- D2's pitch also cannot be Pool A inventory. Any Bali agent can source Pool A from GlobalTix directly, in-market, from a local GM, at a better nett rate, and SatuSatu is floored by MSP from undercutting. Reselling Pool A to agents is negative-value, as
00-internal-context.mdalready concluded. - The only defensible D2 pitch is real-time, instantly-confirmable, direct-contracted Balinese long-tail inventory that is not in GlobalTix, not in TBO, not in Traveloka, and not obtainable by the agent any other way. That is Pool B β 27% gross β and it is also the only inventory SatuSatu holds exclusively. Exclusivity and margin point at the same asset, and now so does D2's viability. Three independent lines of reasoning converge on Pool B.
- π΄ And Pool B's blocker β no real-time availability at the operator β is the whole product. Not the portal. The portal is the delivery mechanism for solving an availability problem that no incumbent has solved for Balinese micro-operators. If SatuSatu does not solve availability at the operator, D2 has nothing to sell that Golden Rama, TBO or Traveloka cannot match.
- β οΈ And GlobalTix will sell that operator a solution for USD 100 and 3% (Β§1.3). The clock on Pool B exclusivity is set by how fast SatuSatu's own supplier digitises the same operators.
4. ACV and motion shape
4.1 The first hard number: 5,222 nationally, 353 in Bali
Source, Tier A, primary: DPP ASITA's own member directory at asita.id/anggota/, queried via its public WordPress REST API on 2026-07-26.
GET /wp-json/wp/v2/wpbdp_listing?per_page=1β headerX-WP-Total: 5222GET /wp-json/wp/v2/wpbdp_category?per_page=100β per-province counts
| Province | Members | Province | Members | |
|---|---|---|---|---|
| Jakarta | 984 | Sumatra Utara | 272 | |
| Jawa Timur | 453 | Banten | 190 | |
| Jawa Barat | 402 | D.I. Yogyakarta | 152 | |
| π΄ Bali | 353 | Jawa Tengah | 145 | |
| Sulawesi Selatan | 320 | Riau | 142 | |
| Sumatra Barat | 293 | NTT | 118 | |
| Kalimantan Selatan | 278 | NTB | 109 | |
| (+ 22 further provinces, Associated 20, Overseas 1) | ||||
| TOTAL | 5,222 |
β Integrity check: the 36 category counts sum to exactly 5,222, matching the collection total. No double-counting, no gaps. This is a clean number.
4.2 Reconciling the ASITA Bali claims β as the brief requires
The prior internal finding stands and is now sharper. The ASITA Bali chairman's figures ("6.9m used travel agents" β 99.3% of arrivals; separately "65%") are claims about travellers, not about ASITA membership, and they almost certainly count foreign travel agents and OTAs.
Test them against 353 licensed Bali agencies:
| Claim | Implied throughput per Bali ASITA member | Read |
|---|---|---|
| 6.9m travellers via travel agents | ~19,500 / agency / yr (~53/day, every day) | Not credible as a member-served figure. Confirms the 99.3% reading is unusable |
| 65% of ~6.3m 2025 arrivals β 4.1m | ~11,600 / agency / yr (~32/day) | Only reachable in aggregate if the count includes non-Indonesian agents and OTAs |
π΄ Operative conclusion: do not use either ASITA percentage to size D2. They describe the traveller-side channel mix, including foreign OTAs. D2's addressable Indonesian agent universe is the 5,222 licensed ASITA members; its addressable Bali universe is 353. Add non-ASITA operators, hotel concierges and villa managers for a wider Pool-B-adjacent tier, but 353 is the defensible anchor for the licensed-agency segment.
4.3 Motion shape β the arithmetic
Arival/Phocuswright's >70% of experience operators are small or micro, offline direct sales still dominant carries over. The Indonesian agent tier is now measured, and it is consistent with that picture: 5,222 licensed agencies, 19% of them in Jakarta, only 6.8% in Bali.
What this means for D2, stated as inequalities rather than invented numbers:
- The Bali-only segment is 353 accounts. At an optimistic 20% penetration that is ~70 partners. A field-sales motion cannot be justified against 70 accounts unless per-account annual gross profit is large.
- Pool B is the only pool with room. At 27% gross vs Pool A's ~7% net, a Pool B rupiah is worth roughly 3.9Γ a Pool A rupiah to D2. A partner sending Pool A volume is close to free-riding on SatuSatu's cost base.
- π΄ The break-even question the team must answer with its own data β I will not invent the inputs: for one fully-loaded Indonesian B2B salesperson, what annual Pool B GMV must each of ~70 Bali partners transact for the motion to clear cost? Concretely:
required GMV per partner = (fully-loaded annual cost of sale + support) Γ· (0.27 Γ 70). Plug in the real salary and the real Pool B mix. If the answer exceeds what a 353-agency market plausibly transacts in Bali excursions, D2 must be self-serve β product-led, no human onboarding β or it must expand beyond Bali to the 5,222 national base, which means inventory beyond Bali, which means Pool A, which is the negative-value trap. That tension is the actual strategic decision inside D2 and it should be surfaced explicitly. [UNVERIFIED]Average booking value and per-agency transaction volume were not obtainable. No BPS, ASITA or association source publishes agent-level booking volumes or ATVs. This is the largest remaining gap in the ACV model, and it is internal data SatuSatu already has β its own Pool A and Pool B basket sizes are a better proxy than anything public.
[SPECULATION] The 984-member Jakarta concentration versus 353 in Bali suggests the natural D2 buyer may not be the Bali inbound agency at all, but the Jakarta outbound/domestic agency selling Bali packages to Indonesian travellers β a bigger pool, remote-servable, and consistent with a low-touch self-serve motion. Worth one hour of testing before the Bali-first assumption is locked in.
5. π΄ Partner / compete / avoid β for SatuSatu
| Entity | Call | One-line reason |
|---|---|---|
| GlobalTix | Partner (retain) β and cap the dependency | Best verified Indonesia/Bali depth and the integration is already paid for; but MSP floor + 1.5% FX + a Travel Agent Licence + 12,000 agents make it a supplier that competes for D2's customer β use it for catalog coverage, never for B2B revenue |
| Prioticket / Experience Technology Group | Partner β first choice for aggregator #2 | Only candidate that is a real aggregator, fully public Distributor API, OCTO-native, and owned by nobody who competes in Bali; contingent on verifying Indonesian SKU depth |
| OCTO standard | Adopt | One conformant client reaches Prioticket, Ventrata, BΓ³kun and future suppliers β the only structural answer to single-feed concentration, and the cheapest thing a team with no engineers can buy |
| BΓ³kun | Partner (fallback only), eyes open | Excellent public docs and OCTO support, but Tripadvisor owns it and Viator retails the same Bali SKUs β integrating discloses your supply and demand to a direct competitor |
| Ventrata | Partner (opportunistic, post-OCTO) | Not an aggregator, so it buys named attractions one contract at a time β worth doing only once the OCTO client exists and marginal cost is near zero |
| Expedition Software (Rezdy/Checkfront/Regiondo) | Avoid (for now) | Mid-consolidation under a FareHarbor co-founder, Rezdy's dev portal is bot-walled and Checkfront's docs already redirect to BΓ³kun β no stable surface to integrate with, and no engineering capacity to absorb churn |
| Travel Curious Group (Redeam) | Avoid | No public distributor docs, no Indonesia evidence, post-acquisition surface unknown β nothing to evaluate |
| rezio | Avoid | Operator booking system, not an aggregator, and built by KKday β an Asian experiences OTA |
| Klook | Compete β and do not connect | Direct Bali retail competitor selling a Bali Pass; its only public API is supply-inbound, so "integrating" means handing your Pool B to the competitor best able to exploit it |
| Viator (supplier API) | Compete | Tripadvisor-owned, competes head-on for the Bali traveller, and the supplier API is an inbound pipe not a sourcing one |
| TBO Holidays | Compete | 200,000+ sightseeing products already sold to 25,000 agents β it is D2's competitor wearing a supplier costume, not a second aggregator |
| Golden Rama | Partner (highest-value D2 test) | Already runs the two-sided rails but its public agent portal is a hotel reservation centre β it has distribution and lacks attractions; SatuSatu has attractions and lacks distribution. Complementary, and the fastest way to validate D2 without building it |
| Panorama Group (JTB / Destination / Wupi) | Partner (D3's most credible counterparty) | Wupi is a live wholesale B2B distribution platform for tour packages and flights to low/mid-tier agents, and Panorama Destination is Indonesia's largest verifiable inbound DMC β real reach, no ticketed-attraction feed, no competing aggregator ambition |
| Traveloka (TPN) | Compete β and treat as the clock | Ships "Travel Activities" B2B with 60,000+ activities and an announced Travel Agent Booking Engine, is pooling attractions with Trip.com (June 2026), and owns the Indonesian market β this is D2's real competitor and it is building the same thing with more capital |
| Tiket.com | Partner (channel, not supplier) | Attractions in the consumer catalog, no agent-reseller API β a potential D3 demand endpoint, not a source of inventory |
| Agoda Activities | Avoid (as a connectivity counterparty) | No public activities distribution API and no self-serve path; a BD conversation with Booking Holdings is not a substitute for a shipped integration |
6. Open questions this step could not close
| # | Question | Why it matters | Obtainable? |
|---|---|---|---|
| 1 | GlobalTix Indonesian and Bali SKU counts, and matched nett-vs-MSP-vs-Klook-retail spreads | Converts Pool A margin from [INFERENCE] to [VERIFIED]; sizes the real overlap with SatuSatu's 253 |
π’ Yes β four API calls with credentials SatuSatu already holds. Β§1.4 gives the exact calls. Highest value per hour on this list |
| 2 | Prioticket / ETG Indonesian depth | The entire rank-1 recommendation is contingent on it | π’ Yes β ask ETG for a country product count for ID |
| 3 | What Golden Rama's agent portal sells post-login | Decides whether Golden Rama is D2's best partner or its closest competitor | π‘ Requires an agent account |
| 4 | Whether GlobalTix will settle in SGD, and what directContractPrice unlocks |
1.5% FX and a possible better rate tier β the cheapest margin available | π’ Yes β one account-manager conversation, and Β§1.3 gives the vocabulary |
| 5 | Per-agency booking volumes and ATV in Indonesia | The missing input in the D2 break-even | π΄ Not public. Use SatuSatu's own basket data |
| 6 | TBO Tek listed financials (segment split, sightseeing revenue) | Sizes the only real incumbent competitor for agent-facing attractions | π’ Yes β Indian exchange filings, not pulled this step |
| 7 | GlobalTix uptime / SLA / incident history | Concentration risk on the incumbent feed is unpriced | π΄ No status page, no published SLA, no incident reports found. Ask for contractual SLA terms directly |