GoFood Merchant icon

GoFood Merchant data API

PT. GoTo Gojek Tokopedia Tbk · Food Delivery

GoFood Merchant is the restaurant console for Gojek's GoFood network in Indonesia. Behind the home inbox and wallet screens it calls private HTTPS endpoints — /v1/wallet/balance for overall / effectiveBalance / cuttoffBalance, and /v1/orders for live tickets with shoppingPrice, otpCode and secondsToAccept.

Settlement uses /v1/payouts plus /v1/payout-settings for the destination bank account. Catalogue SKUs live under /v1/menus/{mg_id}/items/{common_id}, quality cards at /v1/quality/scores, and menu photos go through /v1/catalog/ocr. Every call carries a Bearer access_token from merchant identity together with Gojek-Country-Code.

GoFood Merchant is Gojek's outlet console for Indonesian restaurants on GoFood: accept live tickets, keep the menu in stock, and cash out the GoPay merchant wallet. Behind the home inbox, catalogue, quality score and wallet screens the app talks to a merchant data API — wallet balances (overall, effectiveBalance, cuttoffBalance), ledger search and bank payouts, live tickets with shoppingPrice and otpCode, accept/reject, menu SKUs keyed by commonId, quality-score cards, and OCR that predicts menus from a photo.

Screenshots

  • GoFood Merchant screenshot 1
  • GoFood Merchant screenshot 2
  • GoFood Merchant screenshot 3
  • GoFood Merchant screenshot 4
  • GoFood Merchant screenshot 5
  • GoFood Merchant screenshot 6
  • GoFood Merchant screenshot 7
  • GoFood Merchant screenshot 8

API surface

  • Outlet wallet balance

    GET /v1/wallet/balance openbanking

    Reads the signed-in outlet's GoPay merchant wallet: overall balance, spendable effectiveBalance, and cuttoffBalance held past the settlement cutoff.

    Auth: Bearer access_token from merchant identity sign-in; X-AppVersion, X-UniqueId, X-User-Locale, Gojek-Country-Code, X-User-Type

    • data.overall
    • data.effectiveBalance
    • data.cuttoffBalance

    Illustrative example reconstructed from the app's interface — not a live capture.

    GET /v1/wallet/balance?merchant_id=MCH-88100214 HTTP/1.1
    Authorization: Bearer eyJhbGciOi...
    X-AppVersion: 5.51
    X-UniqueId: 7c2a9f11-4b8e-4d21
    Gojek-Country-Code: ID
    X-User-Locale: id_ID
    {
      "data": {
        "overall": 18425000.0,
        "effectiveBalance": 17240000.0,
        "cuttoffBalance": 1185000.0
      }
    }

    Derived from the app's interface; endpoint details are illustrative, not a live capture.

    • reconstructed from the outlet wallet home showing overall, effectiveBalance and cuttoffBalance
    • field set matches the wallet-balance card on the merchant console
  • Wallet balance summary window

    GET /v1/wallet/summary openfinance

    Returns opening and closing wallet balances for a time window, split into nett, pending, reserve, overall and effective IDR amounts used on the wallet-home chart.

    Auth: Bearer access_token from merchant identity sign-in; X-AppVersion, X-UniqueId, X-User-Locale, Gojek-Country-Code, X-User-Type

    • merchantId
    • currency
    • startTime
    • endTime
    • startBalance.nett
    • startBalance.pending
    • startBalance.reserve
    • startBalance.overall
    • startBalance.effective
    • endBalance.nett
    • endBalance.pending
    • endBalance.reserve
    • endBalance.overall
    • endBalance.effective

    Illustrative example reconstructed from the app's interface — not a live capture.

    GET /v1/wallet/summary?merchant_id=MCH-88100214&start_time=2026-09-21T00:00:00Z&end_time=2026-09-28T00:00:00Z HTTP/1.1
    Authorization: Bearer eyJhbGciOi...
    Gojek-Country-Code: ID
    {
      "data": {
        "merchantId": "MCH-88100214",
        "currency": "IDR",
        "startTime": "2026-09-21T00:00:00Z",
        "endTime": "2026-09-28T00:00:00Z",
        "startBalance": {"nett": 15120000.0, "pending": 840000.0, "reserve": 250000.0, "overall": 16210000.0, "effective": 15120000.0},
        "endBalance": {"nett": 17240000.0, "pending": 935000.0, "reserve": 250000.0, "overall": 18425000.0, "effective": 17240000.0}
      }
    }

    Derived from the app's interface; endpoint details are illustrative, not a live capture.

    • reconstructed from the wallet-home chart that plots opening vs closing balances
    • SummaryBalance fields nett, pending, reserve, overall, effective
  • Create merchant payout

    POST /v1/payouts openbanking

    Starts a settlement payout of the outlet wallet into the registered bank account and returns payoutId, referenceNo, source and amount.

    Auth: Bearer access_token from merchant identity sign-in; X-AppVersion, X-UniqueId, X-User-Locale, Gojek-Country-Code, X-User-Type

    • payouts.payoutId
    • payouts.referenceNo
    • payouts.source
    • payouts.amount
    • merchantId

    Illustrative example reconstructed from the app's interface — not a live capture.

    POST /v1/payouts HTTP/1.1
    Authorization: Bearer eyJhbGciOi...
    Content-Type: application/json
    Gojek-Country-Code: ID
    
    {"merchantId": "MCH-88100214"}
    {
      "payouts": [
        {
          "payoutId": "PO-20260928-4419",
          "referenceNo": "REF-GOFOOD-992188",
          "source": "GOPAY_WALLET",
          "amount": 17240000.0
        }
      ]
    }

    Derived from the app's interface; endpoint details are illustrative, not a live capture.

    • reconstructed from the wallet cash-out / payout action on the merchant console
    • PayoutResponse fields payoutId, referenceNo, source, amount
  • Search wallet journal activities

    POST /v1/ledger/search openfinance

    Pages the outlet wallet ledger used by Wallet Balance History: each activity has id, amount, time, status, type and category, plus aggregations.total.

    Auth: Bearer access_token from merchant identity sign-in; X-AppVersion, X-UniqueId, X-User-Locale, Gojek-Country-Code, X-User-Type

    • activitiesResponse.id
    • activitiesResponse.amount
    • activitiesResponse.time
    • activitiesResponse.status
    • activitiesResponse.type
    • activitiesResponse.category
    • activitiesResponse.metadata
    • aggregations
    • total
    • timeRange
    • from
    • size

    Illustrative example reconstructed from the app's interface — not a live capture.

    POST /v1/ledger/search HTTP/1.1
    Authorization: Bearer eyJhbGciOi...
    Content-Type: application/json
    
    {"timeRange":{"from":"2026-09-21T00:00:00Z","to":"2026-09-28T23:59:59Z"},"sort":{"time":"desc"},"from":0,"size":20,"includedCategories":{"include":["PAYOUT","ORDER_SETTLEMENT","ADJUSTMENT"]}}
    {
      "activitiesResponse": [
        {
          "id": "JNL-88912001",
          "amount": 48500.0,
          "time": "2026-09-27T14:22:11Z",
          "status": "POSTED",
          "type": "CREDIT",
          "category": "ORDER_SETTLEMENT",
          "metadata": {
            "orderNo": "F-1234567890",
            "gopayMetadata": {"channel": "GOPAY"}
          }
        }
      ],
      "aggregations": {"aggregationsResponse": {"total": {"sum": 17240000.0}}},
      "total": 86
    }

    Derived from the app's interface; endpoint details are illustrative, not a live capture.

    • reconstructed from the Wallet Balance History list on the merchant console
    • activity rows expose id, amount, time, status, type, category
  • Auto-payout bank settings

    POST /v1/payout-settings openbanking

    Looks up the outlet's auto-payout cadence and destination bank account (bankName, bankCode, accountName, accountNumber) shown on payout-settings.

    Auth: Bearer access_token from merchant identity sign-in; X-AppVersion, X-UniqueId, X-User-Locale, Gojek-Country-Code, X-User-Type

    • query.ownerId
    • query.ownerType
    • data.bankAccount.id
    • data.bankAccount.bankName
    • data.bankAccount.bankCode
    • data.bankAccount.accountName
    • data.bankAccount.accountNumber
    • data.option
    • data.meta

    Illustrative example reconstructed from the app's interface — not a live capture.

    POST /v1/payout-settings HTTP/1.1
    Authorization: Bearer eyJhbGciOi...
    Content-Type: application/json
    
    {"query":{"ownerId":"MCH-88100214","ownerType":"MERCHANT"}}
    {
      "data": {
        "bankAccount": {
          "id": "BA-44012",
          "bankName": "Bank Central Asia",
          "bankCode": "014",
          "accountName": "Warung Nasi Padang Sederhana",
          "accountNumber": "1234567890"
        },
        "option": "DAILY",
        "meta": {"payoutTime": "15:00"}
      }
    }

    Derived from the app's interface; endpoint details are illustrative, not a live capture.

    • reconstructed from the payout-settings screen listing the destination bank account
    • BankAccount fields bankName, accountNumber, accountName, bankCode, id
  • List live GoFood orders

    GET /v1/orders opendata

    Pages the merchant order inbox (active and scheduled) with orderNo, prices, status, customer and driver fields used on the home ticket list.

    Auth: Bearer access_token from merchant identity sign-in; X-AppVersion, X-UniqueId, X-User-Locale, Gojek-Country-Code, X-User-Type

    • orders.orderNo
    • orders.restaurantId
    • orders.currency
    • orders.shoppingPrice
    • orders.finalPrice
    • orders.takeawayCharges
    • orders.status
    • orders.statusType
    • orders.orderType
    • orders.customerName
    • orders.customerPhone
    • orders.secondsToAccept
    • orders.otpCode
    • currentPage
    • nextPage
    • previousPage

    Illustrative example reconstructed from the app's interface — not a live capture.

    GET /v1/orders?restaurant_id=RST-77a1c2&page=1&per_page=20 HTTP/1.1
    Authorization: Bearer eyJhbGciOi...
    X-User-Type: merchant
    Gojek-Country-Code: ID
    {
      "orders": [
        {
          "orderNo": "F-1234567890",
          "restaurantId": "RST-77a1c2",
          "currency": "IDR",
          "shoppingPrice": 48500,
          "finalPrice": 45200,
          "takeawayCharges": 2000,
          "status": "AWAITING_ACCEPTANCE",
          "statusType": "ACTIVE",
          "orderType": "DELIVERY",
          "customerName": "Budi S.",
          "customerPhone": "+62812****901",
          "secondsToAccept": 45,
          "otpCode": "4421"
        }
      ],
      "currentPage": "1",
      "nextPage": "2",
      "previousPage": null
    }

    Derived from the app's interface; endpoint details are illustrative, not a live capture.

    • reconstructed from the home ticket inbox on the merchant console
    • OrderResponse fields orderNo, shoppingPrice, finalPrice, status, customerName, otpCode
  • GoFood order detail

    GET /v1/orders/{order_number} opendata

    Loads a single ticket: line items (itemUUID, name, quantity, price, note), customer/driver contacts, OTP pin-exchange code and estimatedDriverPickupAt.

    Auth: Bearer access_token from merchant identity sign-in; X-AppVersion, X-UniqueId, X-User-Locale, Gojek-Country-Code, X-User-Type

    • orderNo
    • restaurantId
    • currency
    • shoppingPrice
    • finalPrice
    • netPrice
    • status
    • orderType
    • orderedAt
    • customerName
    • customerPhone
    • driverName
    • driverPhone
    • driverPhotoUrl
    • otpCode
    • estimatedDriverPickupAt
    • paymentMethods
    • orderItems.itemId
    • orderItems.itemUUID
    • orderItems.name
    • orderItems.quantity
    • orderItems.price
    • orderItems.note

    Illustrative example reconstructed from the app's interface — not a live capture.

    GET /v1/orders/F-1234567890 HTTP/1.1
    Authorization: Bearer eyJhbGciOi...
    Gojek-Country-Code: ID
    {
      "orderNo": "F-1234567890",
      "restaurantId": "RST-77a1c2",
      "currency": "IDR",
      "shoppingPrice": 48500,
      "finalPrice": 45200,
      "netPrice": 41000,
      "status": "DRIVER_ASSIGNED",
      "orderType": "DELIVERY",
      "orderedAt": "2026-09-28T07:14:02Z",
      "customerName": "Budi S.",
      "customerPhone": "+62812****901",
      "driverName": "Agus W.",
      "driverPhone": "+62813****220",
      "driverPhotoUrl": "https://cdn.example.com/driver.jpg",
      "otpCode": "4421",
      "estimatedDriverPickupAt": "2026-09-28T07:28:00Z",
      "paymentMethods": ["GOPAY"],
      "orderItems": [
        {"itemId": 9011, "itemUUID": "mi-nasi-padang", "name": "Nasi Padang Komplit", "quantity": 2, "price": 22000, "note": "Pedas sedang"}
      ]
    }

    Derived from the app's interface; endpoint details are illustrative, not a live capture.

    • reconstructed from the ticket-detail screen (line items, customer/driver, OTP)
    • OrderItem fields itemId, itemUUID, name, note, quantity, price
  • Accept incoming order

    POST /v1/orders/{order_id}/accept opendata

    Accepts an AWAITING_ACCEPTANCE ticket before the acceptanceDeadlineSecs timer expires, moving it into preparation.

    Auth: Bearer access_token from merchant identity sign-in; X-AppVersion, X-UniqueId, X-User-Locale, Gojek-Country-Code, X-User-Type

    • success
    • orderNo
    • status
    • secondsToPrepare

    Illustrative example reconstructed from the app's interface — not a live capture.

    POST /v1/orders/F-1234567890/accept HTTP/1.1
    Authorization: Bearer eyJhbGciOi...
    X-AppVersion: 5.51
    Gojek-Country-Code: ID
    {
      "success": true,
      "orderNo": "F-1234567890",
      "status": "MERCHANT_ACCEPTED",
      "secondsToPrepare": 900
    }

    Derived from the app's interface; endpoint details are illustrative, not a live capture.

    • reconstructed from the Accept control on a pending ticket
    • moves status to MERCHANT_ACCEPTED with secondsToPrepare
  • Reject incoming order

    POST /v1/orders/{order_id}/reject opendata

    Rejects a ticket with a coded reason (stock-out items and variants) that feeds merchant quality scoring.

    Auth: Bearer access_token from merchant identity sign-in; X-AppVersion, X-UniqueId, X-User-Locale, Gojek-Country-Code, X-User-Type

    • cancelReasonCode
    • cancelReasonText
    • outOfStockItemList
    • outOfStockVariants
    • success
    • orderNo
    • status

    Illustrative example reconstructed from the app's interface — not a live capture.

    POST /v1/orders/F-1234567890/reject HTTP/1.1
    Authorization: Bearer eyJhbGciOi...
    Content-Type: application/json
    
    {"cancelReasonCode":"OUT_OF_STOCK","cancelReasonText":"Nasi Padang habis","outOfStockItemList":[{"itemUUID":"mi-nasi-padang"}],"outOfStockVariants":[]}
    {
      "success": true,
      "orderNo": "F-1234567890",
      "status": "MERCHANT_REJECTED",
      "cancelReasonCode": "OUT_OF_STOCK"
    }

    Derived from the app's interface; endpoint details are illustrative, not a live capture.

    • reconstructed from the Reject sheet on a pending ticket
    • RejectOrderRequestBody fields cancelReasonCode, cancelReasonText, outOfStockItemList, outOfStockVariants
  • Restaurant profile

    GET /v1/outlets/{restaurant_uuid}/profile opendata

    Returns the public-facing restaurant card: name, image, address, cuisine list, brand and operationalHoursJson edited on My Outlet.

    Auth: Bearer access_token from merchant identity sign-in; X-AppVersion, X-UniqueId, X-User-Locale, Gojek-Country-Code, X-User-Type

    • name
    • image
    • address
    • collections
    • shareableMessage
    • brand
    • cuisineJson
    • operationalHoursJson

    Illustrative example reconstructed from the app's interface — not a live capture.

    GET /v1/outlets/RST-77a1c2/profile HTTP/1.1
    Authorization: Bearer eyJhbGciOi...
    Gojek-Country-Code: ID
    {
      "name": "Warung Nasi Padang Sederhana",
      "image": "https://cdn.example.com/resto.jpg",
      "address": "Jl. Sabang No. 12, Jakarta Pusat",
      "collections": "PADANG,HALAL",
      "shareableMessage": "Pesan di GoFood: Warung Nasi Padang Sederhana",
      "brand": {"id": "BR-padang-sederhana", "name": "Sederhana"},
      "cuisineJson": [{"id": "padang", "name": "Padang"}],
      "operationalHoursJson": [
        {"day": "MON", "open": "10:00", "close": "22:00"}
      ]
    }

    Derived from the app's interface; endpoint details are illustrative, not a live capture.

    • reconstructed from the My Outlet profile editor
    • profile fields name, image, collections, operationalHoursJson, cuisineJson, brand, address
  • Toggle restaurant open status

    PUT /v1/outlets/{id}/open-status opendata

    Flips the outlet between open and paused so the consumer app stops or resumes dispatching new GoFood tickets.

    Auth: Bearer access_token from merchant identity sign-in; X-AppVersion, X-UniqueId, X-User-Locale, Gojek-Country-Code, X-User-Type

    • id
    • open_status
    • status_type

    Illustrative example reconstructed from the app's interface — not a live capture.

    PUT /v1/outlets/RST-77a1c2/open-status HTTP/1.1
    Authorization: Bearer eyJhbGciOi...
    Content-Type: application/json
    
    {"open_status": true}
    {
      "id": "RST-77a1c2",
      "open_status": true,
      "status_type": "OPEN"
    }

    Derived from the app's interface; endpoint details are illustrative, not a live capture.

    • reconstructed from the store-open toggle on home/settings
    • open_status / status_type fields on the outlet card
  • Menu item in a menu group

    GET /v1/menus/{mg_id}/items/{common_id} opendata

    Reads one catalogue SKU shared across outlets: commonId, price, image, signature flag, variant categories and per-restaurant catalogAvailabilities.

    Auth: Bearer access_token from merchant identity sign-in; X-AppVersion, X-UniqueId, X-User-Locale, Gojek-Country-Code, X-User-Type

    • active
    • commonId
    • menuCommonId
    • name
    • description
    • price
    • image
    • signature
    • weight
    • variantCategoryCommonIds
    • ids
    • catalogAvailabilities

    Illustrative example reconstructed from the app's interface — not a live capture.

    GET /v1/menus/MG-88/items/mi-nasi-padang HTTP/1.1
    Authorization: Bearer eyJhbGciOi...
    Gojek-Country-Code: ID
    {
      "active": true,
      "commonId": "mi-nasi-padang",
      "menuCommonId": "cat-nasi",
      "name": "Nasi Padang Komplit",
      "description": "Nasi, rendang, gulai ayam, sambal",
      "price": 22000.0,
      "image": "https://cdn.example.com/menu.jpg",
      "signature": true,
      "weight": 10,
      "variantCategoryCommonIds": ["vc-level-pedas"],
      "ids": [{"restaurantId": "RST-77a1c2", "menuItemId": "9011"}],
      "catalogAvailabilities": [{"restaurantId": "RST-77a1c2", "available": true}]
    }

    Derived from the app's interface; endpoint details are illustrative, not a live capture.

    • reconstructed from the catalogue item editor (multi-outlet SKU)
    • FoodItem fields active, commonId, name, price, catalogAvailabilities
  • Merchant quality scores

    GET /v1/quality/scores opendata

    Returns the GoFood quality dashboard: a header.level badge plus per-attribute cards (acceptance, cancellation, prep time) that gate promotions.

    Auth: Bearer access_token from merchant identity sign-in; X-AppVersion, X-UniqueId, X-User-Locale, Gojek-Country-Code, X-User-Type

    • data.header.level
    • data.header.cta
    • data.cards.qualityType
    • data.cards.score
    • data.cards.target
    • data.cards.status

    Illustrative example reconstructed from the app's interface — not a live capture.

    GET /v1/quality/scores?restaurant_id=RST-77a1c2 HTTP/1.1
    Authorization: Bearer eyJhbGciOi...
    Gojek-Country-Code: ID
    {
      "data": {
        "header": {"level": "GOLD", "cta": {"text": "See how to improve", "deeplink": "gofoodmerchant://food/analytics/reviews"}},
        "cards": [
          {"qualityType": "acceptance_rate", "score": 97.2, "target": 95.0, "status": "HEALTHY"},
          {"qualityType": "cancellation_rate", "score": 1.4, "target": 5.0, "status": "HEALTHY"},
          {"qualityType": "preparation_time", "score": 11.5, "target": 15.0, "status": "HEALTHY"}
        ]
      }
    }

    Derived from the app's interface; endpoint details are illustrative, not a live capture.

    • reconstructed from the merchant quality-score dashboard
    • header.level badge plus cards for acceptance_rate / cancellation_rate / preparation_time
  • OCR predict menu from photo

    POST /v1/catalog/ocr opendata

    Runs catalogue OCR on uploaded menu photos (imageLinks) and returns predicted menus/menuItems with name, price and description for bulk onboarding.

    Auth: Bearer access_token from merchant identity sign-in; X-AppVersion, X-UniqueId, X-User-Locale, Gojek-Country-Code, X-User-Type

    • imageLinks
    • llmTime
    • loadTime
    • menus.name
    • menus.menuItems.name
    • menus.menuItems.price
    • menus.menuItems.description

    Illustrative example reconstructed from the app's interface — not a live capture.

    POST /v1/catalog/ocr HTTP/1.1
    Authorization: Bearer eyJhbGciOi...
    Content-Type: application/json
    
    {"imageLinks":["https://cdn.example.com/menu-scan/2026-09-28/page1.jpg"]}
    {
      "llmTime": 1.84,
      "loadTime": 0.42,
      "menus": [
        {
          "name": "Nasi",
          "menuItems": [
            {"name": "Nasi Padang Komplit", "price": 22000.0, "description": "Nasi, rendang, gulai"}
          ]
        }
      ]
    }

    Derived from the app's interface; endpoint details are illustrative, not a live capture.

    • reconstructed from the photograph-a-menu onboarding flow
    • ScanFoodMenuResponse fields llmTime, loadTime, menus
  • Dine-in voucher orders

    GET /v1/dine-in/orders opendata

    Lists redeemed dine-in voucher tickets (bundle + voucher value/price and campaign window) shown on the buffet/dine-in inbox.

    Auth: Bearer access_token from merchant identity sign-in; X-AppVersion, X-UniqueId, X-User-Locale, Gojek-Country-Code, X-User-Type

    • orders.orderNumber
    • orders.createdAt
    • orders.bundleId
    • orders.bundleName
    • orders.voucherId
    • orders.voucherName
    • orders.voucherValue
    • orders.voucherPrice
    • orders.benefitsDescriptions
    • orders.campaignStartDate
    • orders.campaignEndDate
    • orders.tnc

    Illustrative example reconstructed from the app's interface — not a live capture.

    GET /v1/dine-in/orders?restaurant_id=RST-77a1c2&limit=20 HTTP/1.1
    Authorization: Bearer eyJhbGciOi...
    Gojek-Country-Code: ID
    {
      "orders": [
        {
          "orderNumber": "DI-20260928-019",
          "createdAt": "2026-09-28T11:05:00Z",
          "bundleId": "BND-lunch",
          "bundleName": "Paket Makan Siang",
          "voucherId": "VCH-9981",
          "voucherName": "Diskon 20%",
          "voucherValue": 15000.0,
          "voucherPrice": 12000.0,
          "benefitsDescriptions": "Potongan 20% max Rp15.000",
          "campaignStartDate": "2026-09-01T00:00:00Z",
          "campaignEndDate": "2026-09-30T23:59:59Z",
          "tnc": "Berlaku dine-in saja"
        }
      ]
    }

    Derived from the app's interface; endpoint details are illustrative, not a live capture.

    • reconstructed from the dine-in / buffet voucher inbox
    • orderNumber, voucherName, voucherValue, voucherPrice on each redeemed ticket

Data categories

  • wallet balances
  • payouts
  • order tickets
  • menus
  • restaurant profile
  • quality scores
  • dine-in vouchers

Where teams use this data

  • Nightly outlet-ledger reconciliation

    Finance bots pull GET /v1/wallet/balance and /v1/wallet/summary, then POST /v1/ledger/search for ORDER_SETTLEMENT and PAYOUT rows, matching shoppingPrice on live tickets to journal amount so unpaid GoFood days surface before the 15:00 auto-payout.

  • Kitchen display from the live inbox

    A KDS polls GET /v1/orders, opens /v1/orders/{order_number} for itemUUID / quantity / note, then POST /v1/orders/{order_id}/accept before secondsToAccept hits zero — handing otpCode to the pass for pin-exchange with the driver.

  • Multi-outlet catalogue sync

    A head-office menu service reads /v1/menus/{mg_id}/items/{common_id} (price, catalogAvailabilities, variantCategoryCommonIds) and can seed new SKUs via POST /v1/catalog/ocr from photographed paper menus.

  • Promo eligibility from quality cards

    Growth tools watch GET /v1/quality/scores (header.level plus acceptance_rate / cancellation_rate cards) and pause ad spend when a reject storm of cancelReasonCode=OUT_OF_STOCK would drop the outlet below GOLD.

Frequently asked questions

What wallet fields does GoFood Merchant expose?

GET /v1/wallet/balance returns data.overall, data.effectiveBalance and data.cuttoffBalance. The summary endpoint adds nett / pending / reserve splits for a time window, and POST /v1/ledger/search pages each ledger row by id, amount, status, type and category.

How do live GoFood tickets look on the wire?

GET /v1/orders pages OrderResponse objects (orderNo, shoppingPrice, finalPrice, status, customerName, otpCode). Detail is GET /v1/orders/{order_number}; merchants accept or reject via /v1/orders/{order_id}/accept and /reject with cancelReasonCode.

Where is the menu catalogue?

Each SKU is GET /v1/menus/{mg_id}/items/{common_id} with commonId, price, image, variantCategoryCommonIds and catalogAvailabilities. Paper menus can be predicted first at POST /v1/catalog/ocr.

How does the app authenticate?

After merchant identity sign-in every data call sends Authorization: Bearer plus X-AppVersion, X-UniqueId, X-User-Locale, X-User-Type and Gojek-Country-Code: ID. These are first-party merchant endpoints, not a public developer API.

Topics

  • gofood merchant api
  • gobiz wallet balance
  • gofood live orders
  • merchant payouts
  • gofood menu items
  • merchant quality score
  • indonesia food delivery merchant

Need this app's data API integrated?

We deliver scoped integrations for any named app — from USD 500 with source-code handoff, or hosted access billed per call. Tell us the data you need.

  • NDA + SOW on every engagement
  • Delivery in 3–7 days
  • Payment only after acceptance
  • Work scoped to authorized use

Get a quote