[{"data":1,"prerenderedAt":1464},["ShallowReactive",2],{"navigation-docs_v2":3,"\u002Fv2\u002Foverview\u002Fmigrate-from-v1":124,"\u002Fv2\u002Foverview\u002Fmigrate-from-v1-surround":1459},[4],{"title":5,"path":6,"stem":7,"children":8,"page":64},"V2","\u002Fv2","v2",[9,27,65,86,99,116],{"title":10,"path":11,"stem":12,"children":13},"Introduction","\u002Fv2\u002Foverview","v2\u002F1.overview\u002F1.index",[14,15,19,23],{"title":10,"path":11,"stem":12},{"title":16,"path":17,"stem":18},"Test Details","\u002Fv2\u002Foverview\u002Ftest-details","v2\u002F1.overview\u002F2.test-details",{"title":20,"path":21,"stem":22},"Errors","\u002Fv2\u002Foverview\u002Ferrors","v2\u002F1.overview\u002F3.Errors",{"title":24,"path":25,"stem":26},"Migrate from V1","\u002Fv2\u002Foverview\u002Fmigrate-from-v1","v2\u002F1.overview\u002F4.migrate-from-v1",{"title":28,"path":29,"stem":30,"children":31,"page":64},"General","\u002Fv2\u002Fgeneral","v2\u002F2.general",[32,36,40,44,48,52,56,60],{"title":33,"path":34,"stem":35},"Lookups","\u002Fv2\u002Fgeneral\u002Flookups","v2\u002F2.general\u002F1.lookups",{"title":37,"path":38,"stem":39},"Payment Methods","\u002Fv2\u002Fgeneral\u002Fpayment-methods","v2\u002F2.general\u002F2.payment-methods",{"title":41,"path":42,"stem":43},"Customers","\u002Fv2\u002Fgeneral\u002Fcustomers","v2\u002F2.general\u002F3.customers",{"title":45,"path":46,"stem":47},"Bank Accounts","\u002Fv2\u002Fgeneral\u002Fbank-accounts","v2\u002F2.general\u002F4.bank-accounts",{"title":49,"path":50,"stem":51},"Cards","\u002Fv2\u002Fgeneral\u002Fcards","v2\u002F2.general\u002F5.cards",{"title":53,"path":54,"stem":55},"Mandates","\u002Fv2\u002Fgeneral\u002Fmandates","v2\u002F2.general\u002F6.mandates",{"title":57,"path":58,"stem":59},"Products","\u002Fv2\u002Fgeneral\u002Fproducts","v2\u002F2.general\u002F8.products",{"title":61,"path":62,"stem":63},"Transactions","\u002Fv2\u002Fgeneral\u002Ftransactions","v2\u002F2.general\u002F9.transactions",false,{"title":66,"path":67,"stem":68,"children":69,"page":64},"Money In","\u002Fv2\u002Fmoney-in","v2\u002F3.money-in",[70,74,78,82],{"title":71,"path":72,"stem":73},"Checkout Link","\u002Fv2\u002Fmoney-in\u002Fcheckout-link","v2\u002F3.money-in\u002F1.checkout-link",{"title":75,"path":76,"stem":77},"Checkout Form","\u002Fv2\u002Fmoney-in\u002Fcheckout-form","v2\u002F3.money-in\u002F2.checkout-form",{"title":79,"path":80,"stem":81},"Electronic Mandates","\u002Fv2\u002Fmoney-in\u002Felectronic-mandates","v2\u002F3.money-in\u002F3.electronic-mandates",{"title":83,"path":84,"stem":85},"Collections","\u002Fv2\u002Fmoney-in\u002Fcollections","v2\u002F3.money-in\u002F4.collections",{"title":87,"path":88,"stem":89,"children":90,"page":64},"Money Out","\u002Fv2\u002Fmoney-out","v2\u002F4.money-out",[91,95],{"title":92,"path":93,"stem":94},"Payouts","\u002Fv2\u002Fmoney-out\u002Fpayouts","v2\u002F4.money-out\u002F1.payouts",{"title":96,"path":97,"stem":98},"Recipients","\u002Fv2\u002Fmoney-out\u002Frecipients","v2\u002F4.money-out\u002F2.recipients",{"title":100,"path":101,"stem":102,"children":103,"page":64},"Verification","\u002Fv2\u002Fverification","v2\u002F5.verification",[104,108,112],{"title":105,"path":106,"stem":107},"CDV","\u002Fv2\u002Fverification\u002Fcdv","v2\u002F5.verification\u002F1.cdv",{"title":109,"path":110,"stem":111},"AVS-R","\u002Fv2\u002Fverification\u002Favs-r","v2\u002F5.verification\u002F2.avs-r",{"title":113,"path":114,"stem":115},"SDO","\u002Fv2\u002Fverification\u002Fsdo","v2\u002F5.verification\u002F3.sdo",{"title":117,"path":118,"stem":119,"children":120,"page":64},"Webhooks","\u002Fv2\u002Fwebhooks","v2\u002F6.webhooks",[121],{"title":117,"path":122,"stem":123},"\u002Fv2\u002Fwebhooks\u002Fwebhooks","v2\u002F6.webhooks\u002F1.webhooks",{"id":125,"title":24,"body":126,"description":1453,"extension":1454,"links":1455,"meta":1456,"navigation":1334,"path":25,"seo":1457,"stem":26,"__hash__":1458},"docs_v2\u002Fv2\u002F1.overview\u002F4.migrate-from-v1.md",{"type":127,"value":128,"toc":1425},"minimark",[129,141,167,178,183,328,332,343,375,382,424,437,440,444,450,609,612,624,627,632,636,644,692,696,700,713,732,735,762,874,880,884,903,931,935,960,967,980,999,1003,1023,1026,1035,1039,1088,1092,1103,1107,1156,1160,1168,1206,1213,1232,1253,1261,1266,1285,1289,1319,1323,1421],[130,131,132,133,137,138,140],"p",{},"This guide walks you through everything that changed between ",[134,135,136],"strong",{},"V1"," and ",[134,139,5],{}," of the Kwik API so you can upgrade your integration with confidence. It is split into three parts:",[142,143,144,153,160],"ul",{},[145,146,147,152],"li",{},[148,149,151],"a",{"href":150},"#whats-new","What's new"," — capabilities that did not exist in V1",[145,154,155,159],{},[148,156,158],{"href":157},"#whats-changed","What changed"," — renamed endpoints and reshaped payloads",[145,161,162,166],{},[148,163,165],{"href":164},"#breaking-changes","Breaking changes"," — anything that will stop a V1 integration from working",[168,169,170,175],"blockquote",{},[171,172,174],"h4",{"id":173},"tip","TIP",[130,176,177],{},"V1 and V2 run side by side on different base paths, so you can migrate incrementally. Nothing in V1 changes when V2 is released — you upgrade endpoint by endpoint at your own pace.",[179,180,182],"h2",{"id":181},"at-a-glance","At a glance",[184,185,186,201],"table",{},[187,188,189],"thead",{},[190,191,192,197,199],"tr",{},[193,194,196],"th",{"align":195},"left","Area",[193,198,136],{"align":195},[193,200,5],{"align":195},[202,203,204,221,235,249,267,289,301,313],"tbody",{},[190,205,206,210,216],{},[207,208,209],"td",{"align":195},"Base path",[207,211,212],{"align":195},[213,214,215],"code",{},"\u002F1.0\u002F",[207,217,218],{"align":195},[213,219,220],{},"\u002F2.0\u002F",[190,222,223,226,231],{},[207,224,225],{"align":195},"Money-in (debits)",[207,227,228],{"align":195},[213,229,230],{},"Payments",[207,232,233],{"align":195},[213,234,83],{},[190,236,237,240,245],{},[207,238,239],{"align":195},"Hosted checkout",[207,241,242],{"align":195},[213,243,244],{},"Checkout Page",[207,246,247],{"align":195},[213,248,71],{},[190,250,251,254,259],{},[207,252,253],{"align":195},"Line items",[207,255,256],{"align":195},[213,257,258],{},"Orders",[207,260,261,263,264],{"align":195},[213,262,57],{}," + ",[213,265,266],{},"items",[190,268,269,272,283],{},[207,270,271],{"align":195},"Batch array key",[207,273,274,275,278,279,282],{"align":195},"per-endpoint (",[213,276,277],{},"payments",", ",[213,280,281],{},"payouts",", …)",[207,284,285,286],{"align":195},"always ",[213,287,288],{},"records",[190,290,291,294,297],{},[207,292,293],{"align":195},"Reusable payout targets",[207,295,296],{"align":195},"inline only",[207,298,299],{"align":195},[213,300,96],{},[190,302,303,306,309],{},[207,304,305],{"align":195},"Hosted mandate signup",[207,307,308],{"align":195},"–",[207,310,311],{"align":195},[213,312,79],{},[190,314,315,318,323],{},[207,316,317],{"align":195},"Webhook money-in events",[207,319,320],{"align":195},[213,321,322],{},"payment.*",[207,324,325],{"align":195},[213,326,327],{},"collection.*",[179,329,331],{"id":330},"base-url-and-authentication","Base URL and authentication",[130,333,334,335,338,339,342],{},"The base path moved from ",[213,336,337],{},"1.0"," to ",[213,340,341],{},"2.0",":",[344,345,350],"pre",{"className":346,"code":347,"language":348,"meta":349,"style":349},"language-diff shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","- https:\u002F\u002Fapi.kwik.co.za\u002F1.0\u002F\n+ https:\u002F\u002Fapi.kwik.co.za\u002F2.0\u002F\n","diff","",[213,351,352,365],{"__ignoreMap":349},[353,354,357,361],"span",{"class":355,"line":356},"line",1,[353,358,360],{"class":359},"sMK4o","-",[353,362,364],{"class":363},"swJcz"," https:\u002F\u002Fapi.kwik.co.za\u002F1.0\u002F\n",[353,366,368,371],{"class":355,"line":367},2,[353,369,370],{"class":359},"+",[353,372,374],{"class":373},"sfazB"," https:\u002F\u002Fapi.kwik.co.za\u002F2.0\u002F\n",[130,376,377,378,381],{},"In V1 the staging and live environments used different hosts. In V2 there is a ",[134,379,380],{},"single base URL",", and whether you hit test or live data is determined by the API key you authenticate with.",[344,383,385],{"className":346,"code":384,"language":348,"meta":349,"style":349},"- # V1\n- Staging: https:\u002F\u002Fstaging.app.kwik.co.za\u002F1.0\u002F\n- Live:    https:\u002F\u002Fapi.kwik.co.za\u002F1.0\u002F\n+ # V2 — one URL, test vs live decided by your API key\n+ https:\u002F\u002Fapi.kwik.co.za\u002F2.0\u002F\n",[213,386,387,394,401,409,417],{"__ignoreMap":349},[353,388,389,391],{"class":355,"line":356},[353,390,360],{"class":359},[353,392,393],{"class":363}," # V1\n",[353,395,396,398],{"class":355,"line":367},[353,397,360],{"class":359},[353,399,400],{"class":363}," Staging: https:\u002F\u002Fstaging.app.kwik.co.za\u002F1.0\u002F\n",[353,402,404,406],{"class":355,"line":403},3,[353,405,360],{"class":359},[353,407,408],{"class":363}," Live:    https:\u002F\u002Fapi.kwik.co.za\u002F1.0\u002F\n",[353,410,412,414],{"class":355,"line":411},4,[353,413,370],{"class":359},[353,415,416],{"class":373}," # V2 — one URL, test vs live decided by your API key\n",[353,418,420,422],{"class":355,"line":419},5,[353,421,370],{"class":359},[353,423,374],{"class":373},[130,425,426,429,430,433,434,436],{},[134,427,428],{},"Authentication is unchanged."," V2 still uses Basic Authorization with a base64-encoded ",[213,431,432],{},"api_key:api_secret",". See the ",[148,435,10],{"href":11}," for examples.",[179,438,151],{"id":439},"whats-new",[441,442,57],"h3",{"id":443},"products",[130,445,446,447,449],{},"V2 introduces a reusable ",[148,448,57],{"href":58}," catalogue. Instead of describing amounts inline on every request, you create products once and reference them from collections and checkouts. Products carry pricing, tax, and recurring billing configuration.",[344,451,455],{"className":452,"code":453,"language":454,"meta":349,"style":349},"language-json shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","{\n  \"records\": [{\n    \"name\": \"Generic Wooden Ball\",\n    \"code\": \"PRD-606075\",\n    \"price_excl\": \"2409.86\",\n    \"is_tax\": false,\n    \"pricing_type\": \"RECURRING\",\n    \"billing_period\": \"MONTHLY\"\n  }]\n}\n","json",[213,456,457,462,478,502,521,541,556,577,597,603],{"__ignoreMap":349},[353,458,459],{"class":355,"line":356},[353,460,461],{"class":359},"{\n",[353,463,464,467,470,473,475],{"class":355,"line":367},[353,465,466],{"class":359},"  \"",[353,468,288],{"class":469},"spNyl",[353,471,472],{"class":359},"\"",[353,474,342],{"class":359},[353,476,477],{"class":359}," [{\n",[353,479,480,483,487,489,491,494,497,499],{"class":355,"line":403},[353,481,482],{"class":359},"    \"",[353,484,486],{"class":485},"sBMFI","name",[353,488,472],{"class":359},[353,490,342],{"class":359},[353,492,493],{"class":359}," \"",[353,495,496],{"class":373},"Generic Wooden Ball",[353,498,472],{"class":359},[353,500,501],{"class":359},",\n",[353,503,504,506,508,510,512,514,517,519],{"class":355,"line":411},[353,505,482],{"class":359},[353,507,213],{"class":485},[353,509,472],{"class":359},[353,511,342],{"class":359},[353,513,493],{"class":359},[353,515,516],{"class":373},"PRD-606075",[353,518,472],{"class":359},[353,520,501],{"class":359},[353,522,523,525,528,530,532,534,537,539],{"class":355,"line":419},[353,524,482],{"class":359},[353,526,527],{"class":485},"price_excl",[353,529,472],{"class":359},[353,531,342],{"class":359},[353,533,493],{"class":359},[353,535,536],{"class":373},"2409.86",[353,538,472],{"class":359},[353,540,501],{"class":359},[353,542,544,546,549,551,553],{"class":355,"line":543},6,[353,545,482],{"class":359},[353,547,548],{"class":485},"is_tax",[353,550,472],{"class":359},[353,552,342],{"class":359},[353,554,555],{"class":359}," false,\n",[353,557,559,561,564,566,568,570,573,575],{"class":355,"line":558},7,[353,560,482],{"class":359},[353,562,563],{"class":485},"pricing_type",[353,565,472],{"class":359},[353,567,342],{"class":359},[353,569,493],{"class":359},[353,571,572],{"class":373},"RECURRING",[353,574,472],{"class":359},[353,576,501],{"class":359},[353,578,580,582,585,587,589,591,594],{"class":355,"line":579},8,[353,581,482],{"class":359},[353,583,584],{"class":485},"billing_period",[353,586,472],{"class":359},[353,588,342],{"class":359},[353,590,493],{"class":359},[353,592,593],{"class":373},"MONTHLY",[353,595,596],{"class":359},"\"\n",[353,598,600],{"class":355,"line":599},9,[353,601,602],{"class":359},"  }]\n",[353,604,606],{"class":355,"line":605},10,[353,607,608],{"class":359},"}\n",[441,610,96],{"id":611},"recipients",[130,613,614,616,617,620,621,623],{},[148,615,96],{"href":97}," are reusable payout targets (the money-out equivalent of a customer). Create a recipient once and reference it by ",[213,618,619],{},"recipient_id"," on future ",[148,622,281],{"href":93},", rather than re-sending bank details every time.",[441,625,79],{"id":626},"electronic-mandates",[130,628,629,631],{},[148,630,79],{"href":80}," are hosted web pages that let new customers sign up, or existing customers add collections, without you building a form. The API lists your published pages and generates shareable, pre-fillable links.",[441,633,635],{"id":634},"reorganised-documentation","Reorganised documentation",[130,637,638,639,643],{},"The flat V1 ",[640,641,642],"em",{},"Reference"," section is now grouped by intent to make endpoints easier to find:",[184,645,646,656],{},[187,647,648],{},[190,649,650,653],{},[193,651,652],{"align":195},"Group",[193,654,655],{"align":195},"Endpoints",[202,657,658,665,672,679,686],{},[190,659,660,662],{},[207,661,28],{"align":195},[207,663,664],{"align":195},"Lookups, Payment Methods, Customers, Bank Accounts, Cards, Mandates, Products, Transactions",[190,666,667,669],{},[207,668,66],{"align":195},[207,670,671],{"align":195},"Checkout Link, Checkout Form, Electronic Mandates, Collections",[190,673,674,676],{},[207,675,87],{"align":195},[207,677,678],{"align":195},"Payouts, Recipients",[190,680,681,683],{},[207,682,100],{"align":195},[207,684,685],{"align":195},"CDV, AVS-R, SDO",[190,687,688,690],{},[207,689,117],{"align":195},[207,691,117],{"align":195},[179,693,695],{"id":694},"whats-changed","What's changed",[441,697,699],{"id":698},"payments-are-now-collections","Payments are now Collections",[130,701,702,703,705,706,708,709,712],{},"The single biggest change: the V1 ",[134,704,230],{}," endpoint is now ",[134,707,83],{},". This better reflects that the endpoint pulls money ",[640,710,711],{},"in"," via debit orders.",[344,714,716],{"className":346,"code":715,"language":348,"meta":349,"style":349},"- POST \u002Fpayments\u002Fsubmit\n+ POST \u002Fcollections\u002Fsubmit\n",[213,717,718,725],{"__ignoreMap":349},[353,719,720,722],{"class":355,"line":356},[353,721,360],{"class":359},[353,723,724],{"class":363}," POST \u002Fpayments\u002Fsubmit\n",[353,726,727,729],{"class":355,"line":367},[353,728,370],{"class":359},[353,730,731],{"class":373}," POST \u002Fcollections\u002Fsubmit\n",[130,733,734],{},"The request body was also reshaped:",[142,736,737,745],{},[145,738,739,740,338,742,744],{},"The batch array key changed from ",[213,741,277],{},[213,743,288],{},".",[145,746,747,748,751,752,755,756,758,759,761],{},"Inline ",[213,749,750],{},"order"," \u002F ",[213,753,754],{},"order_id"," is replaced by an ",[213,757,266],{}," array that references products, with a top-level ",[213,760,548],{}," flag.",[344,763,765],{"className":346,"code":764,"language":348,"meta":349,"style":349},"  {\n    \"batch_reference\": \"RFR23011\",\n-   \"payments\": [{\n+   \"records\": [{\n      \"customer_id\": \"cus_abc123...\",\n      \"bank_account_id\": \"ban_abc123...\",\n-     \"order_id\": \"ord_12345\",\n-     \"order\": { \"amount_subtotal\": \"1100.00\", \"amount_tax\": \"100.00\" }\n+     \"is_tax\": false,\n+     \"items\": [{\n+       \"product_id\": \"pro_MsAXh25ajSIv4s6k52vQn\",\n+       \"price\": 45.00,\n+       \"qty\": 1\n+     }]\n    }]\n  }\n",[213,766,767,773,778,785,792,797,802,809,816,823,830,838,846,854,862,868],{"__ignoreMap":349},[353,768,769],{"class":355,"line":356},[353,770,772],{"class":771},"sTEyZ","  {\n",[353,774,775],{"class":355,"line":367},[353,776,777],{"class":771},"    \"batch_reference\": \"RFR23011\",\n",[353,779,780,782],{"class":355,"line":403},[353,781,360],{"class":359},[353,783,784],{"class":363},"   \"payments\": [{\n",[353,786,787,789],{"class":355,"line":411},[353,788,370],{"class":359},[353,790,791],{"class":373},"   \"records\": [{\n",[353,793,794],{"class":355,"line":419},[353,795,796],{"class":771},"      \"customer_id\": \"cus_abc123...\",\n",[353,798,799],{"class":355,"line":543},[353,800,801],{"class":771},"      \"bank_account_id\": \"ban_abc123...\",\n",[353,803,804,806],{"class":355,"line":558},[353,805,360],{"class":359},[353,807,808],{"class":363},"     \"order_id\": \"ord_12345\",\n",[353,810,811,813],{"class":355,"line":579},[353,812,360],{"class":359},[353,814,815],{"class":363},"     \"order\": { \"amount_subtotal\": \"1100.00\", \"amount_tax\": \"100.00\" }\n",[353,817,818,820],{"class":355,"line":599},[353,819,370],{"class":359},[353,821,822],{"class":373},"     \"is_tax\": false,\n",[353,824,825,827],{"class":355,"line":605},[353,826,370],{"class":359},[353,828,829],{"class":373},"     \"items\": [{\n",[353,831,833,835],{"class":355,"line":832},11,[353,834,370],{"class":359},[353,836,837],{"class":373},"       \"product_id\": \"pro_MsAXh25ajSIv4s6k52vQn\",\n",[353,839,841,843],{"class":355,"line":840},12,[353,842,370],{"class":359},[353,844,845],{"class":373},"       \"price\": 45.00,\n",[353,847,849,851],{"class":355,"line":848},13,[353,850,370],{"class":359},[353,852,853],{"class":373},"       \"qty\": 1\n",[353,855,857,859],{"class":355,"line":856},14,[353,858,370],{"class":359},[353,860,861],{"class":373},"     }]\n",[353,863,865],{"class":355,"line":864},15,[353,866,867],{"class":771},"    }]\n",[353,869,871],{"class":355,"line":870},16,[353,872,873],{"class":771},"  }\n",[130,875,876,877,879],{},"See the full ",[148,878,83],{"href":84}," reference for every field.",[441,881,883],{"id":882},"checkout-page-is-now-checkout-link","Checkout Page is now Checkout Link",[344,885,887],{"className":346,"code":886,"language":348,"meta":349,"style":349},"- POST \u002Fcheckout\u002Fpage\n+ POST \u002Fcheckout\u002Flink\n",[213,888,889,896],{"__ignoreMap":349},[353,890,891,893],{"class":355,"line":356},[353,892,360],{"class":359},[353,894,895],{"class":363}," POST \u002Fcheckout\u002Fpage\n",[353,897,898,900],{"class":355,"line":367},[353,899,370],{"class":359},[353,901,902],{"class":373}," POST \u002Fcheckout\u002Flink\n",[130,904,905,907,908,911,912,915,916,919,920,278,923,926,927,930],{},[148,906,71],{"href":72}," keeps the hosted-checkout concept but adds a richer, more flexible payload — a checkout ",[213,909,910],{},"type"," (such as ",[213,913,914],{},"CHOOSE_WHAT_TO_PAY","), an ",[213,917,918],{},"item"," offer object, ",[213,921,922],{},"customization",[213,924,925],{},"notification.webhook_url",", and optional ",[213,928,929],{},"invoice"," issuance.",[441,932,934],{"id":933},"orders-are-now-products-items","Orders are now Products + items",[130,936,937,938,940,941,278,944,278,947,950,951,953,954,956,957,959],{},"V1 modelled amounts with ",[134,939,258],{}," (",[213,942,943],{},"amount_subtotal",[213,945,946],{},"amount_tax",[213,948,949],{},"amount_total",", …). V2 replaces this with a reusable ",[134,952,57],{}," catalogue plus per-request ",[213,955,266],{}," lines. Totals are derived from the items and the ",[213,958,548],{}," flag, so you no longer calculate and pass each amount field yourself.",[441,961,963,964,966],{"id":962},"standardised-records-array","Standardised ",[213,965,288],{}," array",[130,968,969,970,974,975,278,977,979],{},"Across batch endpoints (collections, payouts, products, recipients) the request array is now consistently named ",[134,971,972],{},[213,973,288],{},", replacing the per-endpoint names V1 used (",[213,976,277],{},[213,978,281],{},", …).",[344,981,983],{"className":346,"code":982,"language":348,"meta":349,"style":349},"- \"payouts\": [ ... ]\n+ \"records\": [ ... ]\n",[213,984,985,992],{"__ignoreMap":349},[353,986,987,989],{"class":355,"line":356},[353,988,360],{"class":359},[353,990,991],{"class":363}," \"payouts\": [ ... ]\n",[353,993,994,996],{"class":355,"line":367},[353,995,370],{"class":359},[353,997,998],{"class":373}," \"records\": [ ... ]\n",[441,1000,1002],{"id":1001},"payouts-can-reference-recipients-and-customers","Payouts can reference recipients and customers",[130,1004,1005,1006,1008,1009,1011,1012,1015,1016,1019,1020,1022],{},"V1 payouts embedded the recipient inline. V2 ",[148,1007,281],{"href":93}," accept a ",[213,1010,619],{}," (or an inline ",[213,1013,1014],{},"recipient",") and can also reference a ",[213,1017,1018],{},"customer_id"," for refunds, and use the standard ",[213,1021,288],{}," array.",[179,1024,165],{"id":1025},"breaking-changes",[168,1027,1028,1032],{},[171,1029,1031],{"id":1030},"warning","WARNING",[130,1033,1034],{},"The items below will break a V1 integration if not updated. Review each one before switching a flow to V2.",[441,1036,1038],{"id":1037},"_1-endpoint-paths","1. Endpoint paths",[184,1040,1041,1049],{},[187,1042,1043],{},[190,1044,1045,1047],{},[193,1046,136],{"align":195},[193,1048,5],{"align":195},[202,1050,1051,1063,1075],{},[190,1052,1053,1058],{},[207,1054,1055],{"align":195},[213,1056,1057],{},"POST \u002Fpayments\u002Fsubmit",[207,1059,1060],{"align":195},[213,1061,1062],{},"POST \u002Fcollections\u002Fsubmit",[190,1064,1065,1070],{},[207,1066,1067],{"align":195},[213,1068,1069],{},"POST \u002Fcheckout\u002Fpage",[207,1071,1072],{"align":195},[213,1073,1074],{},"POST \u002Fcheckout\u002Flink",[190,1076,1077,1082],{},[207,1078,1079],{"align":195},[213,1080,1081],{},"POST \u002Forders\u002Fcreate",[207,1083,1084,1087],{"align":195},[213,1085,1086],{},"POST \u002Fproducts\u002Fcreate"," (model changed)",[441,1089,1091],{"id":1090},"_2-request-array-keys","2. Request array keys",[130,1093,1094,1095,1097,1098,1100,1101,744],{},"Any batch request that used a named array (for example ",[213,1096,277],{}," or ",[213,1099,281],{},") must now use ",[213,1102,288],{},[441,1104,1106],{"id":1105},"_3-collections-payload","3. Collections payload",[142,1108,1109,1130,1140],{},[145,1110,1111,1112,751,1114,1116,1117,1119,1120,278,1123,1126,1127,744],{},"Remove ",[213,1113,750],{},[213,1115,754],{},"; send an ",[213,1118,266],{}," array referencing ",[213,1121,1122],{},"product_id",[213,1124,1125],{},"price",", and ",[213,1128,1129],{},"qty",[145,1131,1132,1133,1135,1136,1139],{},"Add the top-level ",[213,1134,548],{}," flag; do not pass pre-computed ",[213,1137,1138],{},"amount_*"," totals.",[145,1141,1142,1143,278,1146,1126,1149,1152,1153,1155],{},"Supported payment methods for collections are ",[134,1144,1145],{},"EFT Debit Order",[134,1147,1148],{},"DebiCheck",[134,1150,1151],{},"Registered Mandates",". Card and Pay-in flows now run through ",[148,1154,71],{"href":72}," rather than the collections endpoint.",[441,1157,1159],{"id":1158},"_4-webhook-events-renamed","4. Webhook events renamed",[130,1161,1162,1163,338,1165,1167],{},"Money-in webhook events were renamed from ",[213,1164,322],{},[213,1166,327],{},". Update both your event subscriptions and any handler switch logic.",[184,1169,1170,1180],{},[187,1171,1172],{},[190,1173,1174,1177],{},[193,1175,1176],{"align":195},"V1 event",[193,1178,1179],{"align":195},"V2 event",[202,1181,1182,1194],{},[190,1183,1184,1189],{},[207,1185,1186],{"align":195},[213,1187,1188],{},"payment.created",[207,1190,1191],{"align":195},[213,1192,1193],{},"collection.created",[190,1195,1196,1201],{},[207,1197,1198],{"align":195},[213,1199,1200],{},"payment.updated",[207,1202,1203],{"align":195},[213,1204,1205],{},"collection.updated",[130,1207,1208,1209,1212],{},"The ",[213,1210,1211],{},"webhook_event"," enum changed correspondingly:",[344,1214,1216],{"className":346,"code":1215,"language":348,"meta":349,"style":349},"- PAYMENT_CREATED, PAYMENT_UPDATED\n+ COLLECTION_CREATED, COLLECTION_UPDATED\n",[213,1217,1218,1225],{"__ignoreMap":349},[353,1219,1220,1222],{"class":355,"line":356},[353,1221,360],{"class":359},[353,1223,1224],{"class":363}," PAYMENT_CREATED, PAYMENT_UPDATED\n",[353,1226,1227,1229],{"class":355,"line":367},[353,1228,370],{"class":359},[353,1230,1231],{"class":373}," COLLECTION_CREATED, COLLECTION_UPDATED\n",[130,1233,1234,1235,278,1238,278,1241,278,1244,278,1247,1250,1251,744],{},"All other events (",[213,1236,1237],{},"customer.*",[213,1239,1240],{},"bank_account.*",[213,1242,1243],{},"mandate.*",[213,1245,1246],{},"transaction.*",[213,1248,1249],{},"checkout.*",") are unchanged. See ",[148,1252,117],{"href":122},[441,1254,1256,1257,1260],{"id":1255},"_5-avs-r-id_type-enum-values","5. AVS-R ",[213,1258,1259],{},"id_type"," enum values",[130,1262,1208,1263,1265],{},[148,1264,109],{"href":110}," verification endpoint now uses the full identity-type values used elsewhere in the API:",[344,1267,1269],{"className":346,"code":1268,"language":348,"meta":349,"style":349},"- SAID, PASSPORT, TEMPORARY_RESIDENCE, COMPANY_REGISTRATION_NUMBER\n+ SOUTH_AFRICAN_ID, PASSPORT_NUMBER, TEMPORARY_RESIDENCE, COMPANY_REGISTRATION_NUMBER\n",[213,1270,1271,1278],{"__ignoreMap":349},[353,1272,1273,1275],{"class":355,"line":356},[353,1274,360],{"class":359},[353,1276,1277],{"class":363}," SAID, PASSPORT, TEMPORARY_RESIDENCE, COMPANY_REGISTRATION_NUMBER\n",[353,1279,1280,1282],{"class":355,"line":367},[353,1281,370],{"class":359},[353,1283,1284],{"class":373}," SOUTH_AFRICAN_ID, PASSPORT_NUMBER, TEMPORARY_RESIDENCE, COMPANY_REGISTRATION_NUMBER\n",[441,1286,1288],{"id":1287},"_6-error-message-wording","6. Error message wording",[130,1290,1291,1292,1295,1296,278,1299,1126,1302,1305,1306,1309,1310,1313,1314,1316,1317,744],{},"The error response ",[134,1293,1294],{},"format and codes are unchanged",", but the wording of a few payment-related codes now refers to collections (for example codes ",[213,1297,1298],{},"012",[213,1300,1301],{},"014",[213,1303,1304],{},"016","). If you match on ",[213,1307,1308],{},"error_message"," text rather than ",[213,1311,1312],{},"error_code",", update those checks. Matching on ",[213,1315,1312],{}," continues to work. See ",[148,1318,20],{"href":21},[179,1320,1322],{"id":1321},"migration-checklist","Migration checklist",[142,1324,1327,1340,1346,1361,1378,1386,1397,1406,1415],{"className":1325},[1326],"contains-task-list",[145,1328,1331,1336,1337,1339],{"className":1329},[1330],"task-list-item",[1332,1333],"input",{"disabled":1334,"type":1335},true,"checkbox"," Point requests at the ",[213,1338,341],{}," base path.",[145,1341,1343,1345],{"className":1342},[1330],[1332,1344],{"disabled":1334,"type":1335}," Confirm your API key targets the correct environment (test vs live).",[145,1347,1349,1351,1352,1354,1355,1358,1359,744],{"className":1348},[1330],[1332,1350],{"disabled":1334,"type":1335}," Rename ",[213,1353,277],{}," → ",[213,1356,1357],{},"collections"," calls and switch the array key to ",[213,1360,288],{},[145,1362,1364,1366,1367,1369,1370,137,1372,1374,1375,1377],{"className":1363},[1330],[1332,1365],{"disabled":1334,"type":1335}," Replace inline ",[213,1368,750],{}," data with ",[213,1371,443],{},[213,1373,266],{}," (+ ",[213,1376,548],{},").",[145,1379,1381,1383,1384,744],{"className":1380},[1330],[1332,1382],{"disabled":1334,"type":1335}," Move Card \u002F Pay-in flows to ",[148,1385,71],{"href":72},[145,1387,1389,1391,1392,1394,1395,744],{"className":1388},[1330],[1332,1390],{"disabled":1334,"type":1335}," Update payout payloads to use ",[213,1393,288],{}," and (optionally) ",[213,1396,619],{},[145,1398,1400,1402,1403,1405],{"className":1399},[1330],[1332,1401],{"disabled":1334,"type":1335}," Re-subscribe webhooks to ",[213,1404,327],{}," and update handler logic.",[145,1407,1409,1411,1412,1414],{"className":1408},[1330],[1332,1410],{"disabled":1334,"type":1335}," Update AVS-R ",[213,1413,1259],{}," values to the new enum.",[145,1416,1418,1420],{"className":1417},[1330],[1332,1419],{"disabled":1334,"type":1335}," Re-test any logic that matches on error message text.",[1422,1423,1424],"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 .sBMFI, html code.shiki .sBMFI{--shiki-light:#E2931D;--shiki-default:#FFCB6B;--shiki-dark:#FFCB6B}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);}html pre.shiki code .swJcz, html code.shiki .swJcz{--shiki-light:#E53935;--shiki-default:#F07178;--shiki-dark:#F07178}html pre.shiki code .sTEyZ, html code.shiki .sTEyZ{--shiki-light:#90A4AE;--shiki-default:#EEFFFF;--shiki-dark:#BABED8}",{"title":349,"searchDepth":356,"depth":367,"links":1426},[1427,1428,1429,1435,1443,1452],{"id":181,"depth":367,"text":182},{"id":330,"depth":367,"text":331},{"id":439,"depth":367,"text":151,"children":1430},[1431,1432,1433,1434],{"id":443,"depth":403,"text":57},{"id":611,"depth":403,"text":96},{"id":626,"depth":403,"text":79},{"id":634,"depth":403,"text":635},{"id":694,"depth":367,"text":695,"children":1436},[1437,1438,1439,1440,1442],{"id":698,"depth":403,"text":699},{"id":882,"depth":403,"text":883},{"id":933,"depth":403,"text":934},{"id":962,"depth":403,"text":1441},"Standardised records array",{"id":1001,"depth":403,"text":1002},{"id":1025,"depth":367,"text":165,"children":1444},[1445,1446,1447,1448,1449,1451],{"id":1037,"depth":403,"text":1038},{"id":1090,"depth":403,"text":1091},{"id":1105,"depth":403,"text":1106},{"id":1158,"depth":403,"text":1159},{"id":1255,"depth":403,"text":1450},"5. AVS-R id_type enum values",{"id":1287,"depth":403,"text":1288},{"id":1321,"depth":367,"text":1322},"A complete guide to upgrading your integration from the Kwik API V1 to V2. Covers new features, renamed endpoints, request and response changes, and breaking changes.","md",null,{},{"title":24,"description":1453},"XOPc-3d3eI8A0jQy420oHiwi2EUbV-aTs-4T91DXwOU",[1460,1462],{"title":20,"path":21,"stem":22,"description":1461,"children":-1},"Comprehensive error handling guide including response formats, error codes, and troubleshooting solutions. Essential for debugging API integration issues, validation failures, authentication problems, and collection processing errors.",{"title":33,"path":34,"stem":35,"description":1463,"children":-1},"Retrieve reference data and validation values used across the API including bank names, account types, countries, provinces, client types, and ID types. Essential for populating dropdown lists and validating form inputs.",1780668567607]