GoFood Merchant 数据 API
GoFood Merchant 是 PT. GoTo Gojek Tokopedia Tbk(由 Gojek 与 Tokopedia 合并而成的 GoTo 集团)推出的餐厅端应用,服务在 GoFood——Gojek 在印尼的外卖服务——上营业的门店。首页是实时工单收件箱,汇集进行中与预约的外卖订单:店员要在接单倒计时归零前接下新工单,或以菜品售罄等原因拒单;点开工单可核对菜品明细与备注,取餐时再凭 PIN 码把餐交给 Gojek 骑手。营业开关可随时暂停或恢复接单,「我的门店」用于编辑对外展示的餐厅卡片(照片、地址、菜系与营业时间);菜单目录编辑器让同一品牌的多家门店共用一份菜单,管理招牌菜与规格选项,还能拍下纸质菜单直接生成上架菜品。质量看板以 GOLD 等徽章给门店定级,并用接单率、取消率与备餐时长卡片决定促销资格;另有一个收件箱列出已核销的堂食与自助餐券。资金则走 GoPay 商户钱包:余额图表、钱包余额历史、随时提现,以及每日自动结算到登记的银行账户。它服务从街边 warung 到多门店连锁品牌的印尼餐饮商户,与 GrabMerchant、ShopeeFood Merchant 争夺同一批后厨。
GoFood 工单落进门店收件箱时,就带着 orderNo、orderType、status、以印尼盾计的 shoppingPrice 与 finalPrice、接单倒计时 secondsToAccept,以及取餐时交给骑手的 otpCode;展开详情还有 orderedAt、estimatedDriverPickupAt、netPrice、paymentMethods、顾客与骑手联系方式,以及以 itemUUID 为键、含 quantity、price 与 note 的菜品行。拒单会记下 cancelReasonCode 与 outOfStockItemList,接单则返回 secondsToPrepare。
资金一侧跟着每张订单进入 GoPay 商户钱包:可动用的 effectiveBalance 与过结算截止后冻结的 cuttoffBalance、任意时间窗口的期初与期末余额(拆成 nett、pending、reserve)、带 amount、type、category(ORDER_SETTLEMENT、PAYOUT、ADJUSTMENT)的流水行、以 payoutId 与 referenceNo 标识的结算打款,以及收款账户(bankName、bankCode、accountNumber)和每日自动结算选项。
围绕工单的还有门店的目录与表现:以 commonId 跨门店共享的菜单 SKU,含 price、signature 招牌标记、variantCategoryCommonIds 与按门店的 catalogAvailabilities;从纸质菜单照片识别出的 menuItems(名称、价格、描述);带 cuisineJson 与 operationalHoursJson 的餐厅卡片;open_status 营业标记;在 header.level 徽章下按 qualityType 对照 target 打分的质量卡片;以及含 voucherValue、voucherPrice 与活动起止日期的已核销堂食券。
每一块数据都有现成的用户:财务机器人每晚把实时工单的 shoppingPrice 对到 ORDER_SETTLEMENT 与 PAYOUT 流水,赶在 15:00 自动结算前找出未入账的 GoFood 营业日;厨显系统轮询实时收件箱、拉取菜品行与备注,在 secondsToAccept 归零前接单,并把 otpCode 交给出餐口;总部菜单服务跨门店同步价格与供应状态,并用纸质菜单照片预填新 SKU;增长工具盯着 GOLD 徽章与接单率、取消率卡片,一旦 OUT_OF_STOCK 拒单潮危及门店等级就暂停广告投放。openData Studio 把这些订单、钱包、目录与质量数据变成可调用的开放数据,正好供这些集成使用。
应用截图
API 端点一览
以下端点与请求/响应示例均依据应用界面推导重构,为示意说明,并非实际抓包。
门店钱包余额
GET
/v1/wallet/balanceopenbanking读取已登录门店的 GoPay 商户钱包:总余额 overall、可动用 effectiveBalance,以及过结算截止后冻结的 cuttoffBalance。
认证方式: 商户身份登录签发的 Bearer access_token;另附 X-AppVersion、X-UniqueId、X-User-Locale、Gojek-Country-Code、X-User-Type
- data.overall
- data.effectiveBalance
- data.cuttoffBalance
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 } }钱包余额窗口汇总
GET
/v1/wallet/summaryopenfinance返回一个时间窗口内钱包的期初与期末余额,拆成 nett / pending / reserve / overall / effective 等印尼盾金额,供钱包首页图表使用。
认证方式: 商户身份登录签发的 Bearer access_token;另附 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
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} } }发起商户结算打款
POST
/v1/payoutsopenbanking把门店钱包结算打到已登记银行账户,返回 payoutId、referenceNo、source 与 amount。
认证方式: 商户身份登录签发的 Bearer access_token;另附 X-AppVersion、X-UniqueId、X-User-Locale、Gojek-Country-Code、X-User-Type
- payouts.payoutId
- payouts.referenceNo
- payouts.source
- payouts.amount
- merchantId
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 } ] }搜索钱包流水
POST
/v1/ledger/searchopenfinance分页返回钱包余额历史所用的门店账本:每笔含 id、amount、time、status、type、category,以及 aggregations.total。
认证方式: 商户身份登录签发的 Bearer access_token;另附 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
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 }自动结算银行设置
POST
/v1/payout-settingsopenbanking查询门店自动结算节奏与收款银行账户(bankName、bankCode、accountName、accountNumber),对应结算设置页。
认证方式: 商户身份登录签发的 Bearer access_token;另附 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
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"} } }列出进行中的 GoFood 订单
GET
/v1/ordersopendata分页返回商户订单收件箱(进行中与预约单),含 orderNo、价格、状态、顾客与骑手字段,对应首页工单列表。
认证方式: 商户身份登录签发的 Bearer access_token;另附 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
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 }GoFood 订单详情
GET
/v1/orders/{order_number}opendata加载单张工单:菜品行(itemUUID、name、quantity、price、note)、顾客/骑手联系方式、OTP 交接码与 estimatedDriverPickupAt。
认证方式: 商户身份登录签发的 Bearer access_token;另附 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
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"} ] }接单
POST
/v1/orders/{order_id}/acceptopendata在 acceptanceDeadlineSecs 倒计时结束前接受待接工单,转入备餐。
认证方式: 商户身份登录签发的 Bearer access_token;另附 X-AppVersion、X-UniqueId、X-User-Locale、Gojek-Country-Code、X-User-Type
- success
- orderNo
- status
- secondsToPrepare
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 }拒单
POST
/v1/orders/{order_id}/rejectopendata按原因码拒单(含缺货菜品与规格),该记录会进入商户质量评分。
认证方式: 商户身份登录签发的 Bearer access_token;另附 X-AppVersion、X-UniqueId、X-User-Locale、Gojek-Country-Code、X-User-Type
- cancelReasonCode
- cancelReasonText
- outOfStockItemList
- outOfStockVariants
- success
- orderNo
- status
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" }餐厅资料
GET
/v1/outlets/{restaurant_uuid}/profileopendata返回对外餐厅卡片:名称、图片、地址、菜系、品牌与 operationalHoursJson,对应「我的门店」编辑页。
认证方式: 商户身份登录签发的 Bearer access_token;另附 X-AppVersion、X-UniqueId、X-User-Locale、Gojek-Country-Code、X-User-Type
- name
- image
- address
- collections
- shareableMessage
- brand
- cuisineJson
- operationalHoursJson
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"} ] }切换餐厅营业状态
PUT
/v1/outlets/{id}/open-statusopendata在营业与暂停之间切换门店,使消费者端停止或恢复派发新的 GoFood 工单。
认证方式: 商户身份登录签发的 Bearer access_token;另附 X-AppVersion、X-UniqueId、X-User-Locale、Gojek-Country-Code、X-User-Type
- id
- open_status
- status_type
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" }菜单组内的菜品
GET
/v1/menus/{mg_id}/items/{common_id}opendata读取跨门店共享的一条目录 SKU:commonId、price、image、招牌标记、规格类目与按餐厅的 catalogAvailabilities。
认证方式: 商户身份登录签发的 Bearer access_token;另附 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
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}] }商户质量分
GET
/v1/quality/scoresopendata返回 GoFood 质量看板:header.level 徽章以及接单率、取消率、备餐时长等分项卡片,这些分数会影响促销资格。
认证方式: 商户身份登录签发的 Bearer access_token;另附 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
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"} ] } }从照片 OCR 识别菜单
POST
/v1/catalog/ocropendata对上传的菜单照片(imageLinks)做目录 OCR,返回预测的 menus/menuItems(name、price、description),用于批量上架。
认证方式: 商户身份登录签发的 Bearer access_token;另附 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
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"} ] } ] }堂食券订单
GET
/v1/dine-in/ordersopendata列出已核销的堂食券工单(套餐 + 券面额/售价与活动窗口),对应自助/堂食收件箱。
认证方式: 商户身份登录签发的 Bearer access_token;另附 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
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" } ] }
数据类别
- 钱包余额
- 结算打款
- 订单工单
- 菜单
- 餐厅资料
- 质量分
- 堂食券
数据使用场景与案例
门店账本夜间对账
财务机器人拉取 GET /v1/wallet/balance 与 /v1/wallet/summary,再 POST /v1/ledger/search 取 ORDER_SETTLEMENT 与 PAYOUT 行,把实时工单上的 shoppingPrice 对到流水 amount,赶在 15:00 自动结算前找出未入账的 GoFood 营业日。
从实时收件箱驱动厨显
厨显轮询 GET /v1/orders,打开 /v1/orders/{order_number} 读取 itemUUID / quantity / note,并在 secondsToAccept 归零前 POST /v1/orders/{order_id}/accept,把 otpCode 交给出餐口与骑手交接。
多门店目录同步
总部菜单服务读取 /v1/menus/{mg_id}/items/{common_id}(price、catalogAvailabilities、variantCategoryCommonIds),也可通过 POST /v1/catalog/ocr 从纸质菜单照片预填新 SKU。
用质量卡片判断促销资格
增长工具盯着 GET /v1/quality/scores(header.level 以及接单率 / 取消率卡片),一旦 OUT_OF_STOCK 拒单潮可能让门店掉出 GOLD,就暂停广告花费。
常见问题
GoFood Merchant 暴露哪些钱包字段?
GET /v1/wallet/balance 返回 data.overall、data.effectiveBalance 与 data.cuttoffBalance。汇总端点再给出时间窗口内的 nett / pending / reserve 拆分;POST /v1/ledger/search 按 id、amount、status、type、category 分页流水。
实时 GoFood 工单在接口里长什么样?
GET /v1/orders 分页返回 OrderResponse(orderNo、shoppingPrice、finalPrice、status、customerName、otpCode)。详情是 GET /v1/orders/{order_number};商户经 /v1/orders/{order_id}/accept 与 /reject(含 cancelReasonCode)接单或拒单。
菜单目录在哪个路径?
每条 SKU 是 GET /v1/menus/{mg_id}/items/{common_id},含 commonId、price、image、variantCategoryCommonIds 与 catalogAvailabilities。纸质菜单可先经 POST /v1/catalog/ocr 预测。
应用如何鉴权?
商户身份登录之后,每个数据调用发送 Authorization: Bearer,以及 X-AppVersion、X-UniqueId、X-User-Locale、X-User-Type 和 Gojek-Country-Code: ID。这些是第一方商户端点,不是公开开发者 API。
与 GoFood Merchant 相似的应用
- GrabMerchant — Grab 面向印尼及东南亚商家的餐厅合作应用,用于接 GrabFood 订单、更新菜单并查看结算。
- ShopeeFood Merchant — Shopee 面向印尼餐厅的 ShopeeFood 商家端,覆盖实时订单、菜单库存与结算。
- Uber Eats Manager — Uber 面向餐厅的商家管理应用,用于接外卖订单、暂停菜品并查看结算。
- DoorDash for Merchants — DoorDash 面向美国餐厅的商家应用,用于处理进单与门店营业状态。
- Maxim for Partners — Maxim 面向印尼餐饮商户的合作端,依托其网约车网络接收外卖订单。
- Moka POS — 印尼餐厅常用的收银 POS 应用,也可对接 GoFood、GrabFood 与 ShopeeFood。
相关主题
- gofood merchant api
- gobiz 钱包余额
- gofood 商户订单
- 商户结算
- gofood 菜单
- 商户质量分
- 印尼外卖商户
需要集成这个 App 的数据 API?
我们可为任意指定 App 交付定制集成——源码交付 USD 500 起,或托管 API 按调用计费。告诉我们您需要的数据即可。
- 每个项目均签 NDA 与 SOW
- 3–7 天交付
- 验收通过后才付款
- 仅在授权范围内作业