[{"data":1,"prerenderedAt":741},["ShallowReactive",2],{"navigation":3,"\u002Fapi-to-api\u002Fcallback":51},[4,38,45],{"title":5,"path":6,"stem":7,"children":8},"API to API","\u002Fapi-to-api","1.api-to-api\u002F1.index",[9,10,14,18,22,26,30,34],{"title":5,"path":6,"stem":7},{"title":11,"path":12,"stem":13},"Authentication","\u002Fapi-to-api\u002Fauthentication","1.api-to-api\u002F2.authentication",{"title":15,"path":16,"stem":17},"Customer","\u002Fapi-to-api\u002Fcustomer","1.api-to-api\u002F3.customer",{"title":19,"path":20,"stem":21},"Products","\u002Fapi-to-api\u002Fproducts","1.api-to-api\u002F4.products",{"title":23,"path":24,"stem":25},"Checkout","\u002Fapi-to-api\u002Fcheckout","1.api-to-api\u002F5.checkout",{"title":27,"path":28,"stem":29},"Payment","\u002Fapi-to-api\u002Fpayment","1.api-to-api\u002F6.payment",{"title":31,"path":32,"stem":33},"Transaction","\u002Fapi-to-api\u002Ftransaction","1.api-to-api\u002F7.transaction",{"title":35,"path":36,"stem":37},"Callback","\u002Fapi-to-api\u002Fcallback","1.api-to-api\u002F8.callback",{"title":39,"path":40,"stem":41,"children":42},"Iframe Static","\u002Fiframe-static","2.iframe-static\u002F1.index",[43],{"title":44,"path":40,"stem":41},"Overview",{"title":46,"path":47,"stem":48,"children":49},"Iframe Dynamic","\u002Fiframe-dynamic","3.iframe-dynamic\u002F1.index",[50],{"title":44,"path":47,"stem":48},{"id":52,"title":35,"body":53,"description":734,"extension":735,"links":736,"meta":737,"navigation":738,"path":36,"seo":739,"stem":37,"__hash__":740},"docs\u002F1.api-to-api\u002F8.callback.md",{"type":54,"value":55,"toc":725},"minimark",[56,60,69,72,75,81,86,89,130,133,168,172,175,183,187,383,387,482,486,492,537,541,553,646,655,691,695,721],[57,58,35],"h1",{"id":59},"callback",[61,62,68],"p",{"className":63},[64,65,66,67],"not-prose","mt-2","text-xs","text-muted","Terakhir diperbarui: 19 Agustus 2026.",[61,70,71],{},"Callback dikirim ke URL mitra saat status transaksi berubah. Callback membantu mitra memperbarui transaksi tanpa polling terus-menerus.",[61,73,74],{},"Aturan komisi untuk transaksi API-to-API mengikuti kesepakatan bisnis API mitra yang sudah dikonfigurasi oleh tim Miharogames. Detail nominal komisi tidak dikirim lewat callback transaksi customer.",[76,77,78],"warning",{},[61,79,80],{},"Mitra wajib menyiapkan endpoint callback sesuai kontrak Miharogames. Setelah endpoint siap, ajukan URL callback ke tim Miharogames untuk whitelist dan aktivasi. Struktur payload dan response harus mengikuti standar pada halaman ini agar delivery, retry, dan rekonsiliasi status berjalan konsisten.",[82,83,85],"h2",{"id":84},"callback-url-registration","Callback URL Registration",[61,87,88],{},"Miharogames hanya mengirim callback ke URL yang sudah diajukan dan diaktifkan. Informasikan URL callback per environment saat onboarding.",[90,91,92,105],"table",{},[93,94,95],"thead",{},[96,97,98,102],"tr",{},[99,100,101],"th",{},"Environment",[99,103,104],{},"Contoh URL mitra",[106,107,108,120],"tbody",{},[96,109,110,114],{},[111,112,113],"td",{},"Development",[111,115,116],{},[117,118,119],"code",{},"https:\u002F\u002Fsandbox-partner.example.com\u002Fmiharogames\u002Fcallback",[96,121,122,125],{},[111,123,124],{},"Production",[111,126,127],{},[117,128,129],{},"https:\u002F\u002Fpartner.example.com\u002Fmiharogames\u002Fcallback",[61,131,132],{},"Ketentuan endpoint callback mitra:",[134,135,136,140,147,154,165],"ul",{},[137,138,139],"li",{},"memakai HTTPS untuk production;",[137,141,142,143,146],{},"menerima request ",[117,144,145],{},"POST"," dengan body JSON;",[137,148,149,150,153],{},"mengembalikan response ",[117,151,152],{},"2xx"," jika payload sudah diterima;",[137,155,156,157,160,161,164],{},"memproses payload secara idempotent memakai ",[117,158,159],{},"event_id"," atau ",[117,162,163],{},"partner_trx_id",";",[137,166,167],{},"tidak mengubah nama field payload dari kontrak Miharogames.",[82,169,171],{"id":170},"delivery-behavior","Delivery Behavior",[61,173,174],{},"Callback dikirim dengan prinsip at-least-once. Artinya, mitra bisa menerima event yang sama lebih dari satu kali jika endpoint mitra timeout atau tidak mengembalikan response sukses.",[61,176,177,178,160,180,182],{},"Mitra wajib membuat receiver idempotent memakai ",[117,179,159],{},[117,181,163],{},".",[82,184,186],{"id":185},"webhook-payload","Webhook Payload",[188,189,194],"pre",{"className":190,"code":191,"language":192,"meta":193,"style":193},"language-json shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","{\n  \"event\": \"transaction.updated\",\n  \"event_id\": \"callback_9381_20260814144652\",\n  \"occurred_at\": \"2026-08-14 14:46:52\",\n  \"partner_trx_id\": \"OMNI-TRX-001\",\n  \"transaction_number\": \"PAY\u002FKFI\u002F8\u002F2026\u002F54\",\n  \"payment_status\": \"PAID\",\n  \"transaction_status\": \"SUCCESS\",\n  \"serial_number\": \"0214073400005825489229\"\n}\n","json","",[117,195,196,205,233,253,274,294,315,336,357,377],{"__ignoreMap":193},[197,198,201],"span",{"class":199,"line":200},"line",1,[197,202,204],{"class":203},"sMK4o","{\n",[197,206,208,211,215,218,221,224,228,230],{"class":199,"line":207},2,[197,209,210],{"class":203},"  \"",[197,212,214],{"class":213},"spNyl","event",[197,216,217],{"class":203},"\"",[197,219,220],{"class":203},":",[197,222,223],{"class":203}," \"",[197,225,227],{"class":226},"sfazB","transaction.updated",[197,229,217],{"class":203},[197,231,232],{"class":203},",\n",[197,234,236,238,240,242,244,246,249,251],{"class":199,"line":235},3,[197,237,210],{"class":203},[197,239,159],{"class":213},[197,241,217],{"class":203},[197,243,220],{"class":203},[197,245,223],{"class":203},[197,247,248],{"class":226},"callback_9381_20260814144652",[197,250,217],{"class":203},[197,252,232],{"class":203},[197,254,256,258,261,263,265,267,270,272],{"class":199,"line":255},4,[197,257,210],{"class":203},[197,259,260],{"class":213},"occurred_at",[197,262,217],{"class":203},[197,264,220],{"class":203},[197,266,223],{"class":203},[197,268,269],{"class":226},"2026-08-14 14:46:52",[197,271,217],{"class":203},[197,273,232],{"class":203},[197,275,277,279,281,283,285,287,290,292],{"class":199,"line":276},5,[197,278,210],{"class":203},[197,280,163],{"class":213},[197,282,217],{"class":203},[197,284,220],{"class":203},[197,286,223],{"class":203},[197,288,289],{"class":226},"OMNI-TRX-001",[197,291,217],{"class":203},[197,293,232],{"class":203},[197,295,297,299,302,304,306,308,311,313],{"class":199,"line":296},6,[197,298,210],{"class":203},[197,300,301],{"class":213},"transaction_number",[197,303,217],{"class":203},[197,305,220],{"class":203},[197,307,223],{"class":203},[197,309,310],{"class":226},"PAY\u002FKFI\u002F8\u002F2026\u002F54",[197,312,217],{"class":203},[197,314,232],{"class":203},[197,316,318,320,323,325,327,329,332,334],{"class":199,"line":317},7,[197,319,210],{"class":203},[197,321,322],{"class":213},"payment_status",[197,324,217],{"class":203},[197,326,220],{"class":203},[197,328,223],{"class":203},[197,330,331],{"class":226},"PAID",[197,333,217],{"class":203},[197,335,232],{"class":203},[197,337,339,341,344,346,348,350,353,355],{"class":199,"line":338},8,[197,340,210],{"class":203},[197,342,343],{"class":213},"transaction_status",[197,345,217],{"class":203},[197,347,220],{"class":203},[197,349,223],{"class":203},[197,351,352],{"class":226},"SUCCESS",[197,354,217],{"class":203},[197,356,232],{"class":203},[197,358,360,362,365,367,369,371,374],{"class":199,"line":359},9,[197,361,210],{"class":203},[197,363,364],{"class":213},"serial_number",[197,366,217],{"class":203},[197,368,220],{"class":203},[197,370,223],{"class":203},[197,372,373],{"class":226},"0214073400005825489229",[197,375,376],{"class":203},"\"\n",[197,378,380],{"class":199,"line":379},10,[197,381,382],{"class":203},"}\n",[82,384,386],{"id":385},"payload-field","Payload Field",[90,388,389,399],{},[93,390,391],{},[96,392,393,396],{},[99,394,395],{},"Field",[99,397,398],{},"Keterangan",[106,400,401,412,421,433,442,451,460,469],{},[96,402,403,407],{},[111,404,405],{},[117,406,214],{},[111,408,409,410,182],{},"Nama event. Untuk update transaksi bernilai ",[117,411,227],{},[96,413,414,418],{},[111,415,416],{},[117,417,159],{},[111,419,420],{},"ID unik callback. Simpan untuk idempotency.",[96,422,423,427],{},[111,424,425],{},[117,426,260],{},[111,428,429,430,182],{},"Waktu event dibuat, format ",[117,431,432],{},"YYYY-MM-DD HH:mm:ss",[96,434,435,439],{},[111,436,437],{},[117,438,163],{},[111,440,441],{},"ID transaksi dari sistem mitra.",[96,443,444,448],{},[111,445,446],{},[117,447,301],{},[111,449,450],{},"Nomor transaksi Miharogames.",[96,452,453,457],{},[111,454,455],{},[117,456,322],{},[111,458,459],{},"Status pembayaran.",[96,461,462,466],{},[111,463,464],{},[117,465,343],{},[111,467,468],{},"Status transaksi.",[96,470,471,475],{},[111,472,473],{},[117,474,364],{},[111,476,477,478,481],{},"SN transaksi jika sudah tersedia. Bernilai ",[117,479,480],{},"null"," jika belum ada.",[82,483,485],{"id":484},"response-mitra","Response Mitra",[61,487,488,489,491],{},"Endpoint mitra sebaiknya mengembalikan response ",[117,490,152],{}," secepat mungkin. Proses berat seperti update banyak tabel atau notifikasi user sebaiknya diproses async di sisi mitra.",[188,493,495],{"className":190,"code":494,"language":192,"meta":193,"style":193},"{\n  \"status\": true,\n  \"message\": \"Callback diterima.\"\n}\n",[117,496,497,501,515,533],{"__ignoreMap":193},[197,498,499],{"class":199,"line":200},[197,500,204],{"class":203},[197,502,503,505,508,510,512],{"class":199,"line":207},[197,504,210],{"class":203},[197,506,507],{"class":213},"status",[197,509,217],{"class":203},[197,511,220],{"class":203},[197,513,514],{"class":203}," true,\n",[197,516,517,519,522,524,526,528,531],{"class":199,"line":235},[197,518,210],{"class":203},[197,520,521],{"class":213},"message",[197,523,217],{"class":203},[197,525,220],{"class":203},[197,527,223],{"class":203},[197,529,530],{"class":226},"Callback diterima.",[197,532,376],{"class":203},[197,534,535],{"class":199,"line":255},[197,536,382],{"class":203},[82,538,540],{"id":539},"retry-policy","Retry Policy",[61,542,543,544,548,549,182],{},"Jika endpoint mitra timeout, mengalami kesalahan server (HTTP 5xx), atau tidak mengembalikan response sukses (HTTP 2xx), Miharogames akan melakukan percobaan pengiriman ulang (retry) otomatis menggunakan mekanisme ",[545,546,547],"em",{},"Exponential Backoff"," hingga maksimal ",[550,551,552],"strong",{},"5 kali percobaan",[90,554,555,568],{},[93,556,557],{},[96,558,559,562,565],{},[99,560,561],{},"Percobaan Ke-",[99,563,564],{},"Jeda Pengiriman Ulang",[99,566,567],{},"Status",[106,569,570,584,596,608,620,632],{},[96,571,572,575,578],{},[111,573,574],{},"1 (Awal)",[111,576,577],{},"Langsung saat transaksi diperbarui",[111,579,580,583],{},[117,581,582],{},"PENDING"," (jika gagal)",[96,585,586,589,592],{},[111,587,588],{},"2",[111,590,591],{},"+1 menit setelah percobaan ke-1 gagal",[111,593,594],{},[117,595,582],{},[96,597,598,601,604],{},[111,599,600],{},"3",[111,602,603],{},"+5 menit setelah percobaan ke-2 gagal",[111,605,606],{},[117,607,582],{},[96,609,610,613,616],{},[111,611,612],{},"4",[111,614,615],{},"+15 menit setelah percobaan ke-3 gagal",[111,617,618],{},[117,619,582],{},[96,621,622,625,628],{},[111,623,624],{},"5",[111,626,627],{},"+30 menit setelah percobaan ke-4 gagal",[111,629,630],{},[117,631,582],{},[96,633,634,637,640],{},[111,635,636],{},"6 (Terakhir)",[111,638,639],{},"+60 menit setelah percobaan ke-5 gagal",[111,641,642,645],{},[117,643,644],{},"FAILED"," (berhenti)",[61,647,648,649,651,652,182],{},"Jika setelah 5 kali retry (total 6 percobaan) endpoint mitra tetap gagal atau timeout, status pengiriman callback akan berubah permanen menjadi ",[117,650,644],{}," dan sistem tidak akan mencoba mengirim ulang. Mitra disarankan mengecek status transaksi manual melalui endpoint ",[550,653,654],{},"Payment Status",[656,657,658],"blockquote",{},[61,659,660,663,664,666,667,674,675,680,681,686,687,690],{},[550,661,662],{},"Note:"," Skema kegagalan webhook Miharogames mengadopsi konsep ",[545,665,547],{}," dari standar industri penyedia API besar seperti ",[668,669,673],"a",{"href":670,"rel":671},"https:\u002F\u002Fdocs.stripe.com\u002Fwebhooks#retry-behavior",[672],"nofollow","Stripe",", ",[668,676,679],{"href":677,"rel":678},"https:\u002F\u002Fdocs.adyen.com\u002Fdevelopment-resources\u002Fwebhooks\u002Fretry-policy",[672],"Adyen",", dan ",[668,682,685],{"href":683,"rel":684},"https:\u002F\u002Fshopify.dev\u002Fdocs\u002Fapi\u002Fadmin-rest\u002Flatest\u002Fresources\u002Fwebhook",[672],"Shopify",". Skema ini bertujuan memberi waktu bagi server mitra untuk pulih (downtime\u002Frestart) dan mencegah efek ",[545,688,689],{},"thundering herd"," akibat koneksi yang bertubi-tubi.",[82,692,694],{"id":693},"best-practice-receiver","Best Practice Receiver",[134,696,697,700,706,712,718],{},[137,698,699],{},"Validasi payload wajib ada sebelum update transaksi.",[137,701,702,703,705],{},"Simpan ",[117,704,159],{}," untuk mencegah proses ganda.",[137,707,708,709,711],{},"Cocokkan ",[117,710,163],{}," dengan transaksi di sistem mitra.",[137,713,714,715,717],{},"Balas ",[117,716,152],{}," setelah payload diterima dan disimpan.",[137,719,720],{},"Gunakan payment status endpoint sebagai fallback jika callback belum diterima.",[722,723,724],"style",{},"html pre.shiki code .sMK4o, html code.shiki .sMK4o{--shiki-light:#39ADB5;--shiki-default:#89DDFF;--shiki-dark:#89DDFF}html pre.shiki code .spNyl, html code.shiki .spNyl{--shiki-light:#9C3EDA;--shiki-default:#C792EA;--shiki-dark:#C792EA}html pre.shiki code .sfazB, html code.shiki .sfazB{--shiki-light:#91B859;--shiki-default:#C3E88D;--shiki-dark:#C3E88D}html .light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html.light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}",{"title":193,"searchDepth":200,"depth":207,"links":726},[727,728,729,730,731,732,733],{"id":84,"depth":207,"text":85},{"id":170,"depth":207,"text":171},{"id":185,"depth":207,"text":186},{"id":385,"depth":207,"text":386},{"id":484,"depth":207,"text":485},{"id":539,"depth":207,"text":540},{"id":693,"depth":207,"text":694},"Webhook transaksi dari Miharogames ke endpoint mitra.","md",null,{},true,{"title":35,"description":734},"YuIPp4Otegwn5J5QhQmiV52XTidsuQ589HO3ayfs9RI",1787290997556]