← Workshop reference
Full research source research/raw/teardown-connectivity-indonesia.md
Original Markdown

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/getAllCountries
GET /api/city/getAllCities
GET /api/merchantCategory/getAllCategories
Catalog GET /api/product/list?countryCode=SG
GET /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/reserve
POST /api/booking/confirm
POST /api/booking/release
GET /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/resendTransactionEmail
GET 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):

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:

  1. Β© 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.
  2. /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."
  3. 12,000+ travel agents are already on the platform, and GlobalTix has an Indonesian office with a local GM.

The conflict, stated plainly:

[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.

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.

Consequences, stated as directly as the brief asks:

  1. 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.
  2. 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.md already concluded.
  3. 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.
  4. πŸ”΄ 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.
  5. ⚠️ 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.

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:

[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