{"templateId":"markdown","sharedDataIds":{"sidebar":"sidebar-sidebars.yaml"},"props":{"metadata":{"markdoc":{"tagList":[]},"type":"markdown"},"seo":{"title":"Hubby Native eSIM Integration","description":"Integrate Hubby eSIM into your travel platform with our comprehensive API documentation, tutorials, and guides.","keywords":"hubby, esim, api, travel, integration, documentation"},"dynamicMarkdocComponents":[],"compilationErrors":[],"ast":{"$$mdtype":"Tag","name":"article","attributes":{},"children":[{"$$mdtype":"Tag","name":"Heading","attributes":{"level":1,"id":"hubby-native-esim-integration"},"children":["Hubby Native eSIM Integration"]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["The Native eSIM Integration lets you build a fully custom eSIM experience inside your native mobile app. Your backend communicates with Hubby server-to-server. All telco complexity — eSIM provisioning, package management, universal eSIM lifecycle — is abstracted away. You build the UI and control the payment flow; Hubby provides the data, provisioning engine, and event system."]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["This page covers the complete flow: every API call in sequence, what you render at each step, installation credentials, AI-powered instructions, and how to monitor usage."]},{"$$mdtype":"Tag","name":"blockquote","attributes":{},"children":[{"$$mdtype":"Tag","name":"p","attributes":{},"children":[{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["WebView or Native?"]}," Most partners start with the ",{"$$mdtype":"Tag","name":"a","attributes":{"href":"/guides/webview"},"children":["Hubby WebView"]}," — go live in days with zero frontend work. The Native eSIM Integration is for partners who need full UI control. Both can coexist: start with the WebView and selectively move high-traffic screens (data meter, top-up) to native over time."]}]},{"$$mdtype":"Tag","name":"hr","attributes":{},"children":[]},{"$$mdtype":"Tag","name":"Heading","attributes":{"level":2,"id":"what-you-build-vs.-what-hubby-handles"},"children":["What You Build vs. What Hubby Handles"]},{"$$mdtype":"Tag","name":"div","attributes":{"className":"md-table-wrapper"},"children":[{"$$mdtype":"Tag","name":"table","attributes":{"className":"md"},"children":[{"$$mdtype":"Tag","name":"thead","attributes":{},"children":[{"$$mdtype":"Tag","name":"tr","attributes":{},"children":[{"$$mdtype":"Tag","name":"th","attributes":{"data-label":"Your team"},"children":["Your team"]},{"$$mdtype":"Tag","name":"th","attributes":{"data-label":"Hubby"},"children":["Hubby"]}]}]},{"$$mdtype":"Tag","name":"tbody","attributes":{},"children":[{"$$mdtype":"Tag","name":"tr","attributes":{},"children":[{"$$mdtype":"Tag","name":"td","attributes":{},"children":["All UI screens (installation, data meter, top-up store, package selection)"]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":["Package provisioning, eSIM assignment, region optimization"]}]},{"$$mdtype":"Tag","name":"tr","attributes":{},"children":[{"$$mdtype":"Tag","name":"td","attributes":{},"children":["Backend calls to Hubby API"]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":["Universal eSIM lifecycle (one eSIM per traveler, packages queue)"]}]},{"$$mdtype":"Tag","name":"tr","attributes":{},"children":[{"$$mdtype":"Tag","name":"td","attributes":{},"children":["Payment processing (you are Merchant of Record)"]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":["B2B net rate invoicing, B2C price recommendations"]}]},{"$$mdtype":"Tag","name":"tr","attributes":{},"children":[{"$$mdtype":"Tag","name":"td","attributes":{},"children":["Push notifications mapped to webhook events"]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":["Webhook delivery, departure-time CRM triggers"]}]},{"$$mdtype":"Tag","name":"tr","attributes":{},"children":[{"$$mdtype":"Tag","name":"td","attributes":{},"children":["Installation flow using credentials from Hubby"]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":["AI-powered installation instructions per device/OS"]}]},{"$$mdtype":"Tag","name":"tr","attributes":{},"children":[{"$$mdtype":"Tag","name":"td","attributes":{},"children":["Support UI (Intercom SDK or your own)"]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":["AI + human support team (< 3 min first response)"]}]}]}]}]},{"$$mdtype":"Tag","name":"hr","attributes":{},"children":[]},{"$$mdtype":"Tag","name":"Heading","attributes":{"level":2,"id":"architecture"},"children":["Architecture"]},{"$$mdtype":"Tag","name":"Mermaid","attributes":{"data-language":"mermaid","diagramSource":"sequenceDiagram\n    participant App as Partner App<br/>(Native UI)\n    participant PB as Partner Backend\n    participant API as Hubby API\n\n    PB->>API: POST /api/bookings\n    API-->>PB: booking confirmation + package IDs\n\n    PB->>API: GET /api/native/user-dashboard?external_user_id=...\n    API-->>PB: user + package queues + eSIM + packages + partner\n\n    PB->>App: Render UI based on user state\n\n    App->>PB: User taps \"Install eSIM\"\n    PB->>API: POST /api/native/instructions\n    API-->>PB: Device-specific installation steps\n\n    App->>PB: User taps \"Redeem package\"\n    PB->>API: POST /api/native/redeem-package\n    API-->>PB: Package redeemed + eSIM updated\n\n    Note over API,PB: Webhooks push real-time events\n    API-->>PB: package.usage.80_percent\n    PB->>App: Push notification: \"Running low on data\"\n\n    App->>PB: User taps \"Buy more data\"\n    PB->>API: POST /api/bookings (same external_user_id)\n    API-->>PB: New package queued on existing eSIM\n","diagramHtml":"<div class=\"mermaid\" data-processed=\"true\"><svg id=\"mermaid-1774280117963\" width=\"100%\" xmlns=\"http://www.w3.org/2000/svg\" xmlns:xlink=\"http://www.w3.org/1999/xlink\" style=\"max-width: 1079px;\" viewBox=\"-50 -10 1079 1087\" role=\"graphics-document document\" aria-roledescription=\"sequence\"><g><rect x=\"829\" y=\"1001\" fill=\"#eaeaea\" stroke=\"#666\" width=\"150\" height=\"65\" name=\"API\" rx=\"3\" ry=\"3\" class=\"actor actor-bottom\"></rect><text x=\"904\" y=\"1033.5\" dominant-baseline=\"central\" alignment-baseline=\"central\" class=\"actor actor-box\" style=\"text-anchor: middle; font-size: 16px; font-weight: 400;\"><tspan x=\"904\" dy=\"0\">Hubby API</tspan></text></g><g><rect x=\"370\" y=\"1001\" fill=\"#eaeaea\" stroke=\"#666\" width=\"150\" height=\"65\" name=\"PB\" rx=\"3\" ry=\"3\" class=\"actor actor-bottom\"></rect><text x=\"445\" y=\"1033.5\" dominant-baseline=\"central\" alignment-baseline=\"central\" class=\"actor actor-box\" style=\"text-anchor: middle; font-size: 16px; font-weight: 400;\"><tspan x=\"445\" dy=\"0\">Partner Backend</tspan></text></g><g><rect x=\"0\" y=\"1001\" fill=\"#eaeaea\" stroke=\"#666\" width=\"150\" height=\"65\" name=\"App\" rx=\"3\" ry=\"3\" class=\"actor actor-bottom\"></rect><text x=\"75\" y=\"1033.5\" dominant-baseline=\"central\" alignment-baseline=\"central\" class=\"actor actor-box\" style=\"text-anchor: middle; font-size: 16px; font-weight: 400;\"><tspan x=\"75\" dy=\"-8\">Partner App</tspan></text><text x=\"75\" y=\"1033.5\" dominant-baseline=\"central\" alignment-baseline=\"central\" class=\"actor actor-box\" style=\"text-anchor: middle; font-size: 16px; font-weight: 400;\"><tspan x=\"75\" dy=\"8\">(Native UI)</tspan></text></g><g><line id=\"actor2\" x1=\"904\" y1=\"65\" x2=\"904\" y2=\"1001\" class=\"actor-line 200\" stroke-width=\"0.5px\" stroke=\"#999\" name=\"API\"></line><g id=\"root-2\"><rect x=\"829\" y=\"0\" fill=\"#eaeaea\" stroke=\"#666\" width=\"150\" height=\"65\" name=\"API\" rx=\"3\" ry=\"3\" class=\"actor actor-top\"></rect><text x=\"904\" y=\"32.5\" dominant-baseline=\"central\" alignment-baseline=\"central\" class=\"actor actor-box\" style=\"text-anchor: middle; font-size: 16px; font-weight: 400;\"><tspan x=\"904\" dy=\"0\">Hubby API</tspan></text></g></g><g><line id=\"actor1\" x1=\"445\" y1=\"65\" x2=\"445\" y2=\"1001\" class=\"actor-line 200\" stroke-width=\"0.5px\" stroke=\"#999\" name=\"PB\"></line><g id=\"root-1\"><rect x=\"370\" y=\"0\" fill=\"#eaeaea\" stroke=\"#666\" width=\"150\" height=\"65\" name=\"PB\" rx=\"3\" ry=\"3\" class=\"actor actor-top\"></rect><text x=\"445\" y=\"32.5\" dominant-baseline=\"central\" alignment-baseline=\"central\" class=\"actor actor-box\" style=\"text-anchor: middle; font-size: 16px; font-weight: 400;\"><tspan x=\"445\" dy=\"0\">Partner Backend</tspan></text></g></g><g><line id=\"actor0\" x1=\"75\" y1=\"65\" x2=\"75\" y2=\"1001\" class=\"actor-line 200\" stroke-width=\"0.5px\" stroke=\"#999\" name=\"App\"></line><g id=\"root-0\"><rect x=\"0\" y=\"0\" fill=\"#eaeaea\" stroke=\"#666\" width=\"150\" height=\"65\" name=\"App\" rx=\"3\" ry=\"3\" class=\"actor actor-top\"></rect><text x=\"75\" y=\"32.5\" dominant-baseline=\"central\" alignment-baseline=\"central\" class=\"actor actor-box\" style=\"text-anchor: middle; font-size: 16px; font-weight: 400;\"><tspan x=\"75\" dy=\"-8\">Partner App</tspan></text><text x=\"75\" y=\"32.5\" dominant-baseline=\"central\" alignment-baseline=\"central\" class=\"actor actor-box\" style=\"text-anchor: middle; font-size: 16px; font-weight: 400;\"><tspan x=\"75\" dy=\"8\">(Native UI)</tspan></text></g></g><style>#mermaid-1774280117963{font-family:\"trebuchet ms\",verdana,arial,sans-serif;font-size:16px;fill:#333;}@keyframes edge-animation-frame{from{stroke-dashoffset:0;}}@keyframes dash{to{stroke-dashoffset:0;}}#mermaid-1774280117963 .edge-animation-slow{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 50s linear infinite;stroke-linecap:round;}#mermaid-1774280117963 .edge-animation-fast{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 20s linear infinite;stroke-linecap:round;}#mermaid-1774280117963 .error-icon{fill:#552222;}#mermaid-1774280117963 .error-text{fill:#552222;stroke:#552222;}#mermaid-1774280117963 .edge-thickness-normal{stroke-width:1px;}#mermaid-1774280117963 .edge-thickness-thick{stroke-width:3.5px;}#mermaid-1774280117963 .edge-pattern-solid{stroke-dasharray:0;}#mermaid-1774280117963 .edge-thickness-invisible{stroke-width:0;fill:none;}#mermaid-1774280117963 .edge-pattern-dashed{stroke-dasharray:3;}#mermaid-1774280117963 .edge-pattern-dotted{stroke-dasharray:2;}#mermaid-1774280117963 .marker{fill:#333333;stroke:#333333;}#mermaid-1774280117963 .marker.cross{stroke:#333333;}#mermaid-1774280117963 svg{font-family:\"trebuchet ms\",verdana,arial,sans-serif;font-size:16px;}#mermaid-1774280117963 p{margin:0;}#mermaid-1774280117963 .actor{stroke:hsl(259.6261682243, 59.7765363128%, 87.9019607843%);fill:#ECECFF;}#mermaid-1774280117963 text.actor&gt;tspan{fill:black;stroke:none;}#mermaid-1774280117963 .actor-line{stroke:hsl(259.6261682243, 59.7765363128%, 87.9019607843%);}#mermaid-1774280117963 .innerArc{stroke-width:1.5;stroke-dasharray:none;}#mermaid-1774280117963 .messageLine0{stroke-width:1.5;stroke-dasharray:none;stroke:#333;}#mermaid-1774280117963 .messageLine1{stroke-width:1.5;stroke-dasharray:2,2;stroke:#333;}#mermaid-1774280117963 #arrowhead path{fill:#333;stroke:#333;}#mermaid-1774280117963 .sequenceNumber{fill:white;}#mermaid-1774280117963 #sequencenumber{fill:#333;}#mermaid-1774280117963 #crosshead path{fill:#333;stroke:#333;}#mermaid-1774280117963 .messageText{fill:#333;stroke:none;}#mermaid-1774280117963 .labelBox{stroke:hsl(259.6261682243, 59.7765363128%, 87.9019607843%);fill:#ECECFF;}#mermaid-1774280117963 .labelText,#mermaid-1774280117963 .labelText&gt;tspan{fill:black;stroke:none;}#mermaid-1774280117963 .loopText,#mermaid-1774280117963 .loopText&gt;tspan{fill:black;stroke:none;}#mermaid-1774280117963 .loopLine{stroke-width:2px;stroke-dasharray:2,2;stroke:hsl(259.6261682243, 59.7765363128%, 87.9019607843%);fill:hsl(259.6261682243, 59.7765363128%, 87.9019607843%);}#mermaid-1774280117963 .note{stroke:#aaaa33;fill:#fff5ad;}#mermaid-1774280117963 .noteText,#mermaid-1774280117963 .noteText&gt;tspan{fill:black;stroke:none;}#mermaid-1774280117963 .activation0{fill:#f4f4f4;stroke:#666;}#mermaid-1774280117963 .activation1{fill:#f4f4f4;stroke:#666;}#mermaid-1774280117963 .activation2{fill:#f4f4f4;stroke:#666;}#mermaid-1774280117963 .actorPopupMenu{position:absolute;}#mermaid-1774280117963 .actorPopupMenuPanel{position:absolute;fill:#ECECFF;box-shadow:0px 8px 16px 0px rgba(0,0,0,0.2);filter:drop-shadow(3px 5px 2px rgb(0 0 0 / 0.4));}#mermaid-1774280117963 .actor-man line{stroke:hsl(259.6261682243, 59.7765363128%, 87.9019607843%);fill:#ECECFF;}#mermaid-1774280117963 .actor-man circle,#mermaid-1774280117963 line{stroke:hsl(259.6261682243, 59.7765363128%, 87.9019607843%);fill:#ECECFF;stroke-width:2px;}#mermaid-1774280117963 :root{--mermaid-font-family:\"trebuchet ms\",verdana,arial,sans-serif;}</style><g></g><defs><symbol id=\"computer\" width=\"24\" height=\"24\"><path transform=\"scale(.5)\" d=\"M2 2v13h20v-13h-20zm18 11h-16v-9h16v9zm-10.228 6l.466-1h3.524l.467 1h-4.457zm14.228 3h-24l2-6h2.104l-1.33 4h18.45l-1.297-4h2.073l2 6zm-5-10h-14v-7h14v7z\"></path></symbol></defs><defs><symbol id=\"database\" fill-rule=\"evenodd\" clip-rule=\"evenodd\"><path transform=\"scale(.5)\" d=\"M12.258.001l.256.004.255.005.253.008.251.01.249.012.247.015.246.016.242.019.241.02.239.023.236.024.233.027.231.028.229.031.225.032.223.034.22.036.217.038.214.04.211.041.208.043.205.045.201.046.198.048.194.05.191.051.187.053.183.054.18.056.175.057.172.059.168.06.163.061.16.063.155.064.15.066.074.033.073.033.071.034.07.034.069.035.068.035.067.035.066.035.064.036.064.036.062.036.06.036.06.037.058.037.058.037.055.038.055.038.053.038.052.038.051.039.05.039.048.039.047.039.045.04.044.04.043.04.041.04.04.041.039.041.037.041.036.041.034.041.033.042.032.042.03.042.029.042.027.042.026.043.024.043.023.043.021.043.02.043.018.044.017.043.015.044.013.044.012.044.011.045.009.044.007.045.006.045.004.045.002.045.001.045v17l-.001.045-.002.045-.004.045-.006.045-.007.045-.009.044-.011.045-.012.044-.013.044-.015.044-.017.043-.018.044-.02.043-.021.043-.023.043-.024.043-.026.043-.027.042-.029.042-.03.042-.032.042-.033.042-.034.041-.036.041-.037.041-.039.041-.04.041-.041.04-.043.04-.044.04-.045.04-.047.039-.048.039-.05.039-.051.039-.052.038-.053.038-.055.038-.055.038-.058.037-.058.037-.06.037-.06.036-.062.036-.064.036-.064.036-.066.035-.067.035-.068.035-.069.035-.07.034-.071.034-.073.033-.074.033-.15.066-.155.064-.16.063-.163.061-.168.06-.172.059-.175.057-.18.056-.183.054-.187.053-.191.051-.194.05-.198.048-.201.046-.205.045-.208.043-.211.041-.214.04-.217.038-.22.036-.223.034-.225.032-.229.031-.231.028-.233.027-.236.024-.239.023-.241.02-.242.019-.246.016-.247.015-.249.012-.251.01-.253.008-.255.005-.256.004-.258.001-.258-.001-.256-.004-.255-.005-.253-.008-.251-.01-.249-.012-.247-.015-.245-.016-.243-.019-.241-.02-.238-.023-.236-.024-.234-.027-.231-.028-.228-.031-.226-.032-.223-.034-.22-.036-.217-.038-.214-.04-.211-.041-.208-.043-.204-.045-.201-.046-.198-.048-.195-.05-.19-.051-.187-.053-.184-.054-.179-.056-.176-.057-.172-.059-.167-.06-.164-.061-.159-.063-.155-.064-.151-.066-.074-.033-.072-.033-.072-.034-.07-.034-.069-.035-.068-.035-.067-.035-.066-.035-.064-.036-.063-.036-.062-.036-.061-.036-.06-.037-.058-.037-.057-.037-.056-.038-.055-.038-.053-.038-.052-.038-.051-.039-.049-.039-.049-.039-.046-.039-.046-.04-.044-.04-.043-.04-.041-.04-.04-.041-.039-.041-.037-.041-.036-.041-.034-.041-.033-.042-.032-.042-.03-.042-.029-.042-.027-.042-.026-.043-.024-.043-.023-.043-.021-.043-.02-.043-.018-.044-.017-.043-.015-.044-.013-.044-.012-.044-.011-.045-.009-.044-.007-.045-.006-.045-.004-.045-.002-.045-.001-.045v-17l.001-.045.002-.045.004-.045.006-.045.007-.045.009-.044.011-.045.012-.044.013-.044.015-.044.017-.043.018-.044.02-.043.021-.043.023-.043.024-.043.026-.043.027-.042.029-.042.03-.042.032-.042.033-.042.034-.041.036-.041.037-.041.039-.041.04-.041.041-.04.043-.04.044-.04.046-.04.046-.039.049-.039.049-.039.051-.039.052-.038.053-.038.055-.038.056-.038.057-.037.058-.037.06-.037.061-.036.062-.036.063-.036.064-.036.066-.035.067-.035.068-.035.069-.035.07-.034.072-.034.072-.033.074-.033.151-.066.155-.064.159-.063.164-.061.167-.06.172-.059.176-.057.179-.056.184-.054.187-.053.19-.051.195-.05.198-.048.201-.046.204-.045.208-.043.211-.041.214-.04.217-.038.22-.036.223-.034.226-.032.228-.031.231-.028.234-.027.236-.024.238-.023.241-.02.243-.019.245-.016.247-.015.249-.012.251-.01.253-.008.255-.005.256-.004.258-.001.258.001zm-9.258 20.499v.01l.001.021.003.021.004.022.005.021.006.022.007.022.009.023.01.022.011.023.012.023.013.023.015.023.016.024.017.023.018.024.019.024.021.024.022.025.023.024.024.025.052.049.056.05.061.051.066.051.07.051.075.051.079.052.084.052.088.052.092.052.097.052.102.051.105.052.11.052.114.051.119.051.123.051.127.05.131.05.135.05.139.048.144.049.147.047.152.047.155.047.16.045.163.045.167.043.171.043.176.041.178.041.183.039.187.039.19.037.194.035.197.035.202.033.204.031.209.03.212.029.216.027.219.025.222.024.226.021.23.02.233.018.236.016.24.015.243.012.246.01.249.008.253.005.256.004.259.001.26-.001.257-.004.254-.005.25-.008.247-.011.244-.012.241-.014.237-.016.233-.018.231-.021.226-.021.224-.024.22-.026.216-.027.212-.028.21-.031.205-.031.202-.034.198-.034.194-.036.191-.037.187-.039.183-.04.179-.04.175-.042.172-.043.168-.044.163-.045.16-.046.155-.046.152-.047.148-.048.143-.049.139-.049.136-.05.131-.05.126-.05.123-.051.118-.052.114-.051.11-.052.106-.052.101-.052.096-.052.092-.052.088-.053.083-.051.079-.052.074-.052.07-.051.065-.051.06-.051.056-.05.051-.05.023-.024.023-.025.021-.024.02-.024.019-.024.018-.024.017-.024.015-.023.014-.024.013-.023.012-.023.01-.023.01-.022.008-.022.006-.022.006-.022.004-.022.004-.021.001-.021.001-.021v-4.127l-.077.055-.08.053-.083.054-.085.053-.087.052-.09.052-.093.051-.095.05-.097.05-.1.049-.102.049-.105.048-.106.047-.109.047-.111.046-.114.045-.115.045-.118.044-.12.043-.122.042-.124.042-.126.041-.128.04-.13.04-.132.038-.134.038-.135.037-.138.037-.139.035-.142.035-.143.034-.144.033-.147.032-.148.031-.15.03-.151.03-.153.029-.154.027-.156.027-.158.026-.159.025-.161.024-.162.023-.163.022-.165.021-.166.02-.167.019-.169.018-.169.017-.171.016-.173.015-.173.014-.175.013-.175.012-.177.011-.178.01-.179.008-.179.008-.181.006-.182.005-.182.004-.184.003-.184.002h-.37l-.184-.002-.184-.003-.182-.004-.182-.005-.181-.006-.179-.008-.179-.008-.178-.01-.176-.011-.176-.012-.175-.013-.173-.014-.172-.015-.171-.016-.17-.017-.169-.018-.167-.019-.166-.02-.165-.021-.163-.022-.162-.023-.161-.024-.159-.025-.157-.026-.156-.027-.155-.027-.153-.029-.151-.03-.15-.03-.148-.031-.146-.032-.145-.033-.143-.034-.141-.035-.14-.035-.137-.037-.136-.037-.134-.038-.132-.038-.13-.04-.128-.04-.126-.041-.124-.042-.122-.042-.12-.044-.117-.043-.116-.045-.113-.045-.112-.046-.109-.047-.106-.047-.105-.048-.102-.049-.1-.049-.097-.05-.095-.05-.093-.052-.09-.051-.087-.052-.085-.053-.083-.054-.08-.054-.077-.054v4.127zm0-5.654v.011l.001.021.003.021.004.021.005.022.006.022.007.022.009.022.01.022.011.023.012.023.013.023.015.024.016.023.017.024.018.024.019.024.021.024.022.024.023.025.024.024.052.05.056.05.061.05.066.051.07.051.075.052.079.051.084.052.088.052.092.052.097.052.102.052.105.052.11.051.114.051.119.052.123.05.127.051.131.05.135.049.139.049.144.048.147.048.152.047.155.046.16.045.163.045.167.044.171.042.176.042.178.04.183.04.187.038.19.037.194.036.197.034.202.033.204.032.209.03.212.028.216.027.219.025.222.024.226.022.23.02.233.018.236.016.24.014.243.012.246.01.249.008.253.006.256.003.259.001.26-.001.257-.003.254-.006.25-.008.247-.01.244-.012.241-.015.237-.016.233-.018.231-.02.226-.022.224-.024.22-.025.216-.027.212-.029.21-.03.205-.032.202-.033.198-.035.194-.036.191-.037.187-.039.183-.039.179-.041.175-.042.172-.043.168-.044.163-.045.16-.045.155-.047.152-.047.148-.048.143-.048.139-.05.136-.049.131-.05.126-.051.123-.051.118-.051.114-.052.11-.052.106-.052.101-.052.096-.052.092-.052.088-.052.083-.052.079-.052.074-.051.07-.052.065-.051.06-.05.056-.051.051-.049.023-.025.023-.024.021-.025.02-.024.019-.024.018-.024.017-.024.015-.023.014-.023.013-.024.012-.022.01-.023.01-.023.008-.022.006-.022.006-.022.004-.021.004-.022.001-.021.001-.021v-4.139l-.077.054-.08.054-.083.054-.085.052-.087.053-.09.051-.093.051-.095.051-.097.05-.1.049-.102.049-.105.048-.106.047-.109.047-.111.046-.114.045-.115.044-.118.044-.12.044-.122.042-.124.042-.126.041-.128.04-.13.039-.132.039-.134.038-.135.037-.138.036-.139.036-.142.035-.143.033-.144.033-.147.033-.148.031-.15.03-.151.03-.153.028-.154.028-.156.027-.158.026-.159.025-.161.024-.162.023-.163.022-.165.021-.166.02-.167.019-.169.018-.169.017-.171.016-.173.015-.173.014-.175.013-.175.012-.177.011-.178.009-.179.009-.179.007-.181.007-.182.005-.182.004-.184.003-.184.002h-.37l-.184-.002-.184-.003-.182-.004-.182-.005-.181-.007-.179-.007-.179-.009-.178-.009-.176-.011-.176-.012-.175-.013-.173-.014-.172-.015-.171-.016-.17-.017-.169-.018-.167-.019-.166-.02-.165-.021-.163-.022-.162-.023-.161-.024-.159-.025-.157-.026-.156-.027-.155-.028-.153-.028-.151-.03-.15-.03-.148-.031-.146-.033-.145-.033-.143-.033-.141-.035-.14-.036-.137-.036-.136-.037-.134-.038-.132-.039-.13-.039-.128-.04-.126-.041-.124-.042-.122-.043-.12-.043-.117-.044-.116-.044-.113-.046-.112-.046-.109-.046-.106-.047-.105-.048-.102-.049-.1-.049-.097-.05-.095-.051-.093-.051-.09-.051-.087-.053-.085-.052-.083-.054-.08-.054-.077-.054v4.139zm0-5.666v.011l.001.02.003.022.004.021.005.022.006.021.007.022.009.023.01.022.011.023.012.023.013.023.015.023.016.024.017.024.018.023.019.024.021.025.022.024.023.024.024.025.052.05.056.05.061.05.066.051.07.051.075.052.079.051.084.052.088.052.092.052.097.052.102.052.105.051.11.052.114.051.119.051.123.051.127.05.131.05.135.05.139.049.144.048.147.048.152.047.155.046.16.045.163.045.167.043.171.043.176.042.178.04.183.04.187.038.19.037.194.036.197.034.202.033.204.032.209.03.212.028.216.027.219.025.222.024.226.021.23.02.233.018.236.017.24.014.243.012.246.01.249.008.253.006.256.003.259.001.26-.001.257-.003.254-.006.25-.008.247-.01.244-.013.241-.014.237-.016.233-.018.231-.02.226-.022.224-.024.22-.025.216-.027.212-.029.21-.03.205-.032.202-.033.198-.035.194-.036.191-.037.187-.039.183-.039.179-.041.175-.042.172-.043.168-.044.163-.045.16-.045.155-.047.152-.047.148-.048.143-.049.139-.049.136-.049.131-.051.126-.05.123-.051.118-.052.114-.051.11-.052.106-.052.101-.052.096-.052.092-.052.088-.052.083-.052.079-.052.074-.052.07-.051.065-.051.06-.051.056-.05.051-.049.023-.025.023-.025.021-.024.02-.024.019-.024.018-.024.017-.024.015-.023.014-.024.013-.023.012-.023.01-.022.01-.023.008-.022.006-.022.006-.022.004-.022.004-.021.001-.021.001-.021v-4.153l-.077.054-.08.054-.083.053-.085.053-.087.053-.09.051-.093.051-.095.051-.097.05-.1.049-.102.048-.105.048-.106.048-.109.046-.111.046-.114.046-.115.044-.118.044-.12.043-.122.043-.124.042-.126.041-.128.04-.13.039-.132.039-.134.038-.135.037-.138.036-.139.036-.142.034-.143.034-.144.033-.147.032-.148.032-.15.03-.151.03-.153.028-.154.028-.156.027-.158.026-.159.024-.161.024-.162.023-.163.023-.165.021-.166.02-.167.019-.169.018-.169.017-.171.016-.173.015-.173.014-.175.013-.175.012-.177.01-.178.01-.179.009-.179.007-.181.006-.182.006-.182.004-.184.003-.184.001-.185.001-.185-.001-.184-.001-.184-.003-.182-.004-.182-.006-.181-.006-.179-.007-.179-.009-.178-.01-.176-.01-.176-.012-.175-.013-.173-.014-.172-.015-.171-.016-.17-.017-.169-.018-.167-.019-.166-.02-.165-.021-.163-.023-.162-.023-.161-.024-.159-.024-.157-.026-.156-.027-.155-.028-.153-.028-.151-.03-.15-.03-.148-.032-.146-.032-.145-.033-.143-.034-.141-.034-.14-.036-.137-.036-.136-.037-.134-.038-.132-.039-.13-.039-.128-.041-.126-.041-.124-.041-.122-.043-.12-.043-.117-.044-.116-.044-.113-.046-.112-.046-.109-.046-.106-.048-.105-.048-.102-.048-.1-.05-.097-.049-.095-.051-.093-.051-.09-.052-.087-.052-.085-.053-.083-.053-.08-.054-.077-.054v4.153zm8.74-8.179l-.257.004-.254.005-.25.008-.247.011-.244.012-.241.014-.237.016-.233.018-.231.021-.226.022-.224.023-.22.026-.216.027-.212.028-.21.031-.205.032-.202.033-.198.034-.194.036-.191.038-.187.038-.183.04-.179.041-.175.042-.172.043-.168.043-.163.045-.16.046-.155.046-.152.048-.148.048-.143.048-.139.049-.136.05-.131.05-.126.051-.123.051-.118.051-.114.052-.11.052-.106.052-.101.052-.096.052-.092.052-.088.052-.083.052-.079.052-.074.051-.07.052-.065.051-.06.05-.056.05-.051.05-.023.025-.023.024-.021.024-.02.025-.019.024-.018.024-.017.023-.015.024-.014.023-.013.023-.012.023-.01.023-.01.022-.008.022-.006.023-.006.021-.004.022-.004.021-.001.021-.001.021.001.021.001.021.004.021.004.022.006.021.006.023.008.022.01.022.01.023.012.023.013.023.014.023.015.024.017.023.018.024.019.024.02.025.021.024.023.024.023.025.051.05.056.05.06.05.065.051.07.052.074.051.079.052.083.052.088.052.092.052.096.052.101.052.106.052.11.052.114.052.118.051.123.051.126.051.131.05.136.05.139.049.143.048.148.048.152.048.155.046.16.046.163.045.168.043.172.043.175.042.179.041.183.04.187.038.191.038.194.036.198.034.202.033.205.032.21.031.212.028.216.027.22.026.224.023.226.022.231.021.233.018.237.016.241.014.244.012.247.011.25.008.254.005.257.004.26.001.26-.001.257-.004.254-.005.25-.008.247-.011.244-.012.241-.014.237-.016.233-.018.231-.021.226-.022.224-.023.22-.026.216-.027.212-.028.21-.031.205-.032.202-.033.198-.034.194-.036.191-.038.187-.038.183-.04.179-.041.175-.042.172-.043.168-.043.163-.045.16-.046.155-.046.152-.048.148-.048.143-.048.139-.049.136-.05.131-.05.126-.051.123-.051.118-.051.114-.052.11-.052.106-.052.101-.052.096-.052.092-.052.088-.052.083-.052.079-.052.074-.051.07-.052.065-.051.06-.05.056-.05.051-.05.023-.025.023-.024.021-.024.02-.025.019-.024.018-.024.017-.023.015-.024.014-.023.013-.023.012-.023.01-.023.01-.022.008-.022.006-.023.006-.021.004-.022.004-.021.001-.021.001-.021-.001-.021-.001-.021-.004-.021-.004-.022-.006-.021-.006-.023-.008-.022-.01-.022-.01-.023-.012-.023-.013-.023-.014-.023-.015-.024-.017-.023-.018-.024-.019-.024-.02-.025-.021-.024-.023-.024-.023-.025-.051-.05-.056-.05-.06-.05-.065-.051-.07-.052-.074-.051-.079-.052-.083-.052-.088-.052-.092-.052-.096-.052-.101-.052-.106-.052-.11-.052-.114-.052-.118-.051-.123-.051-.126-.051-.131-.05-.136-.05-.139-.049-.143-.048-.148-.048-.152-.048-.155-.046-.16-.046-.163-.045-.168-.043-.172-.043-.175-.042-.179-.041-.183-.04-.187-.038-.191-.038-.194-.036-.198-.034-.202-.033-.205-.032-.21-.031-.212-.028-.216-.027-.22-.026-.224-.023-.226-.022-.231-.021-.233-.018-.237-.016-.241-.014-.244-.012-.247-.011-.25-.008-.254-.005-.257-.004-.26-.001-.26.001z\"></path></symbol></defs><defs><symbol id=\"clock\" width=\"24\" height=\"24\"><path transform=\"scale(.5)\" d=\"M12 2c5.514 0 10 4.486 10 10s-4.486 10-10 10-10-4.486-10-10 4.486-10 10-10zm0-2c-6.627 0-12 5.373-12 12s5.373 12 12 12 12-5.373 12-12-5.373-12-12-12zm5.848 12.459c.202.038.202.333.001.372-1.907.361-6.045 1.111-6.547 1.111-.719 0-1.301-.582-1.301-1.301 0-.512.77-5.447 1.125-7.445.034-.192.312-.181.343.014l.985 6.238 5.394 1.011z\"></path></symbol></defs><defs><marker id=\"arrowhead\" refX=\"7.9\" refY=\"5\" markerUnits=\"userSpaceOnUse\" markerWidth=\"12\" markerHeight=\"12\" orient=\"auto-start-reverse\"><path d=\"M -1 0 L 10 5 L 0 10 z\"></path></marker></defs><defs><marker id=\"crosshead\" markerWidth=\"15\" markerHeight=\"8\" orient=\"auto\" refX=\"4\" refY=\"4.5\"><path fill=\"none\" stroke=\"#000000\" stroke-width=\"1pt\" d=\"M 1,2 L 6,7 M 6,2 L 1,7\" style=\"stroke-dasharray: 0, 0;\"></path></marker></defs><defs><marker id=\"filled-head\" refX=\"15.5\" refY=\"7\" markerWidth=\"20\" markerHeight=\"28\" orient=\"auto\"><path d=\"M 18,7 L9,13 L14,7 L9,1 Z\"></path></marker></defs><defs><marker id=\"sequencenumber\" refX=\"15\" refY=\"15\" markerWidth=\"60\" markerHeight=\"40\" orient=\"auto\"><circle cx=\"15\" cy=\"15\" r=\"6\"></circle></marker></defs><g><rect x=\"420\" y=\"669\" fill=\"#EDF2AE\" stroke=\"#666\" width=\"509\" height=\"42\" class=\"note\"></rect><text x=\"675\" y=\"674\" text-anchor=\"middle\" dominant-baseline=\"middle\" alignment-baseline=\"middle\" class=\"noteText\" dy=\"1em\" style=\"font-size: 16px; font-weight: 400;\"><tspan x=\"675\">Webhooks push real-time events</tspan></text></g><text x=\"673\" y=\"80\" text-anchor=\"middle\" dominant-baseline=\"middle\" alignment-baseline=\"middle\" class=\"messageText\" dy=\"1em\" style=\"font-size: 16px; font-weight: 400;\">POST /api/bookings</text><line x1=\"446\" y1=\"119\" x2=\"900\" y2=\"119\" class=\"messageLine0\" stroke-width=\"2\" stroke=\"none\" marker-end=\"url(#arrowhead)\" style=\"fill: none;\"></line><text x=\"676\" y=\"134\" text-anchor=\"middle\" dominant-baseline=\"middle\" alignment-baseline=\"middle\" class=\"messageText\" dy=\"1em\" style=\"font-size: 16px; font-weight: 400;\">booking confirmation + package IDs</text><line x1=\"903\" y1=\"173\" x2=\"449\" y2=\"173\" class=\"messageLine1\" stroke-width=\"2\" stroke=\"none\" marker-end=\"url(#arrowhead)\" style=\"stroke-dasharray: 3, 3; fill: none;\"></line><text x=\"673\" y=\"188\" text-anchor=\"middle\" dominant-baseline=\"middle\" alignment-baseline=\"middle\" class=\"messageText\" dy=\"1em\" style=\"font-size: 16px; font-weight: 400;\">GET /api/native/user-dashboard?external_user_id=...</text><line x1=\"446\" y1=\"227\" x2=\"900\" y2=\"227\" class=\"messageLine0\" stroke-width=\"2\" stroke=\"none\" marker-end=\"url(#arrowhead)\" style=\"fill: none;\"></line><text x=\"676\" y=\"242\" text-anchor=\"middle\" dominant-baseline=\"middle\" alignment-baseline=\"middle\" class=\"messageText\" dy=\"1em\" style=\"font-size: 16px; font-weight: 400;\">user + package queues + eSIM + packages + partner</text><line x1=\"903\" y1=\"281\" x2=\"449\" y2=\"281\" class=\"messageLine1\" stroke-width=\"2\" stroke=\"none\" marker-end=\"url(#arrowhead)\" style=\"stroke-dasharray: 3, 3; fill: none;\"></line><text x=\"262\" y=\"296\" text-anchor=\"middle\" dominant-baseline=\"middle\" alignment-baseline=\"middle\" class=\"messageText\" dy=\"1em\" style=\"font-size: 16px; font-weight: 400;\">Render UI based on user state</text><line x1=\"444\" y1=\"335\" x2=\"79\" y2=\"335\" class=\"messageLine0\" stroke-width=\"2\" stroke=\"none\" marker-end=\"url(#arrowhead)\" style=\"fill: none;\"></line><text x=\"259\" y=\"350\" text-anchor=\"middle\" dominant-baseline=\"middle\" alignment-baseline=\"middle\" class=\"messageText\" dy=\"1em\" style=\"font-size: 16px; font-weight: 400;\">User taps \"Install eSIM\"</text><line x1=\"76\" y1=\"389\" x2=\"441\" y2=\"389\" class=\"messageLine0\" stroke-width=\"2\" stroke=\"none\" marker-end=\"url(#arrowhead)\" style=\"fill: none;\"></line><text x=\"673\" y=\"404\" text-anchor=\"middle\" dominant-baseline=\"middle\" alignment-baseline=\"middle\" class=\"messageText\" dy=\"1em\" style=\"font-size: 16px; font-weight: 400;\">POST /api/native/instructions</text><line x1=\"446\" y1=\"443\" x2=\"900\" y2=\"443\" class=\"messageLine0\" stroke-width=\"2\" stroke=\"none\" marker-end=\"url(#arrowhead)\" style=\"fill: none;\"></line><text x=\"676\" y=\"458\" text-anchor=\"middle\" dominant-baseline=\"middle\" alignment-baseline=\"middle\" class=\"messageText\" dy=\"1em\" style=\"font-size: 16px; font-weight: 400;\">Device-specific installation steps</text><line x1=\"903\" y1=\"497\" x2=\"449\" y2=\"497\" class=\"messageLine1\" stroke-width=\"2\" stroke=\"none\" marker-end=\"url(#arrowhead)\" style=\"stroke-dasharray: 3, 3; fill: none;\"></line><text x=\"259\" y=\"512\" text-anchor=\"middle\" dominant-baseline=\"middle\" alignment-baseline=\"middle\" class=\"messageText\" dy=\"1em\" style=\"font-size: 16px; font-weight: 400;\">User taps \"Redeem package\"</text><line x1=\"76\" y1=\"551\" x2=\"441\" y2=\"551\" class=\"messageLine0\" stroke-width=\"2\" stroke=\"none\" marker-end=\"url(#arrowhead)\" style=\"fill: none;\"></line><text x=\"673\" y=\"566\" text-anchor=\"middle\" dominant-baseline=\"middle\" alignment-baseline=\"middle\" class=\"messageText\" dy=\"1em\" style=\"font-size: 16px; font-weight: 400;\">POST /api/native/redeem-package</text><line x1=\"446\" y1=\"605\" x2=\"900\" y2=\"605\" class=\"messageLine0\" stroke-width=\"2\" stroke=\"none\" marker-end=\"url(#arrowhead)\" style=\"fill: none;\"></line><text x=\"676\" y=\"620\" text-anchor=\"middle\" dominant-baseline=\"middle\" alignment-baseline=\"middle\" class=\"messageText\" dy=\"1em\" style=\"font-size: 16px; font-weight: 400;\">Package redeemed + eSIM updated</text><line x1=\"903\" y1=\"659\" x2=\"449\" y2=\"659\" class=\"messageLine1\" stroke-width=\"2\" stroke=\"none\" marker-end=\"url(#arrowhead)\" style=\"stroke-dasharray: 3, 3; fill: none;\"></line><text x=\"676\" y=\"726\" text-anchor=\"middle\" dominant-baseline=\"middle\" alignment-baseline=\"middle\" class=\"messageText\" dy=\"1em\" style=\"font-size: 16px; font-weight: 400;\">package.usage.80_percent</text><line x1=\"903\" y1=\"765\" x2=\"449\" y2=\"765\" class=\"messageLine1\" stroke-width=\"2\" stroke=\"none\" marker-end=\"url(#arrowhead)\" style=\"stroke-dasharray: 3, 3; fill: none;\"></line><text x=\"262\" y=\"780\" text-anchor=\"middle\" dominant-baseline=\"middle\" alignment-baseline=\"middle\" class=\"messageText\" dy=\"1em\" style=\"font-size: 16px; font-weight: 400;\">Push notification: \"Running low on data\"</text><line x1=\"444\" y1=\"819\" x2=\"79\" y2=\"819\" class=\"messageLine0\" stroke-width=\"2\" stroke=\"none\" marker-end=\"url(#arrowhead)\" style=\"fill: none;\"></line><text x=\"259\" y=\"834\" text-anchor=\"middle\" dominant-baseline=\"middle\" alignment-baseline=\"middle\" class=\"messageText\" dy=\"1em\" style=\"font-size: 16px; font-weight: 400;\">User taps \"Buy more data\"</text><line x1=\"76\" y1=\"873\" x2=\"441\" y2=\"873\" class=\"messageLine0\" stroke-width=\"2\" stroke=\"none\" marker-end=\"url(#arrowhead)\" style=\"fill: none;\"></line><text x=\"673\" y=\"888\" text-anchor=\"middle\" dominant-baseline=\"middle\" alignment-baseline=\"middle\" class=\"messageText\" dy=\"1em\" style=\"font-size: 16px; font-weight: 400;\">POST /api/bookings (same external_user_id)</text><line x1=\"446\" y1=\"927\" x2=\"900\" y2=\"927\" class=\"messageLine0\" stroke-width=\"2\" stroke=\"none\" marker-end=\"url(#arrowhead)\" style=\"fill: none;\"></line><text x=\"676\" y=\"942\" text-anchor=\"middle\" dominant-baseline=\"middle\" alignment-baseline=\"middle\" class=\"messageText\" dy=\"1em\" style=\"font-size: 16px; font-weight: 400;\">New package queued on existing eSIM</text><line x1=\"903\" y1=\"981\" x2=\"449\" y2=\"981\" class=\"messageLine1\" stroke-width=\"2\" stroke=\"none\" marker-end=\"url(#arrowhead)\" style=\"stroke-dasharray: 3, 3; fill: none;\"></line></svg></div>"},"children":["sequenceDiagram\n    participant App as Partner App<br/>(Native UI)\n    participant PB as Partner Backend\n    participant API as Hubby API\n\n    PB->>API: POST /api/bookings\n    API-->>PB: booking confirmation + package IDs\n\n    PB->>API: GET /api/native/user-dashboard?external_user_id=...\n    API-->>PB: user + package queues + eSIM + packages + partner\n\n    PB->>App: Render UI based on user state\n\n    App->>PB: User taps \"Install eSIM\"\n    PB->>API: POST /api/native/instructions\n    API-->>PB: Device-specific installation steps\n\n    App->>PB: User taps \"Redeem package\"\n    PB->>API: POST /api/native/redeem-package\n    API-->>PB: Package redeemed + eSIM updated\n\n    Note over API,PB: Webhooks push real-time events\n    API-->>PB: package.usage.80_percent\n    PB->>App: Push notification: \"Running low on data\"\n\n    App->>PB: User taps \"Buy more data\"\n    PB->>API: POST /api/bookings (same external_user_id)\n    API-->>PB: New package queued on existing eSIM\n"]},{"$$mdtype":"Tag","name":"hr","attributes":{},"children":[]},{"$$mdtype":"Tag","name":"Heading","attributes":{"level":2,"id":"the-full-flow"},"children":["The Full Flow"]},{"$$mdtype":"Tag","name":"Heading","attributes":{"level":3,"id":"step-1--create-a-booking"},"children":["Step 1 — Create a Booking"]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":[{"$$mdtype":"Tag","name":"strong","attributes":{},"children":[{"$$mdtype":"Tag","name":"code","attributes":{},"children":["POST /api/bookings"]}]}," — identical to the ",{"$$mdtype":"Tag","name":"a","attributes":{"href":"/guides/webview#step-1--create-a-booking"},"children":["WebView flow"]},". Your backend calls this when a traveler qualifies for a package."]},{"$$mdtype":"Tag","name":"CodeBlock","attributes":{"data-language":"bash","header":{"controls":{"copy":{}}},"source":"curl --request POST \\\n  'https://api.hubbyesim.com/api/bookings' \\\n  --header 'x-api-key: YOUR_API_KEY' \\\n  --header 'x-timestamp: 1717689600000' \\\n  --header 'x-signature: YOUR_HMAC_SIGNATURE' \\\n  --header 'Content-Type: application/json' \\\n  --data '{\n    \"departure_date\": \"2026-07-15T14:30:00+02:00\",\n    \"locale\": \"es\",\n    \"package_specifications\": [\n      {\n        \"external_user_id\": \"partner_user_456\",\n        \"destination\": \"GR\",\n        \"size\": \"1GB\"\n      }\n    ]\n  }'\n","lang":"bash"},"children":[]},{"$$mdtype":"Tag","name":"CodeBlock","attributes":{"data-language":"json","header":{"controls":{"copy":{}}},"source":"{\n  \"success\": true,\n  \"data\": {\n    \"id\": \"booking_abc\",\n    \"package_specifications\": [\n      {\n        \"external_user_id\": \"partner_user_456\",\n        \"package_id\": \"pkg_xyz\",\n        \"destination\": \"GR\",\n        \"size\": \"1GB\",\n        \"status\": \"provisioned\"\n      }\n    ]\n  }\n}\n","lang":"json"},"children":[]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["You specify ",{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["destination + size"]}," (not a package ID). Hubby auto-routes to the optimal package. Multi-destination bookings are automatically optimized — a trip to Greenland, Canada, the US, and Mexico may be fulfilled with a North America regional package plus individual packages."]},{"$$mdtype":"Tag","name":"blockquote","attributes":{},"children":[{"$$mdtype":"Tag","name":"p","attributes":{},"children":[{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["Important:"]}," ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["external_user_id"]}," is ",{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["required"]}," for the Native eSIM Integration. It must be your own stable user identifier — the same value is used across all ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["/native/*"]}," endpoints (dashboard, redeem, instructions). Do not supply this field if you are not using the Native eSIM Integration or the ",{"$$mdtype":"Tag","name":"a","attributes":{"href":"/guides/webview"},"children":["Hubby WebView"]}," — it is ignored in the traditional booking flow and supplying it incorrectly will route the package into the eSIM management flow."]}]},{"$$mdtype":"Tag","name":"hr","attributes":{},"children":[]},{"$$mdtype":"Tag","name":"Heading","attributes":{"level":3,"id":"step-2--fetch-user-dashboard"},"children":["Step 2 — Fetch User Dashboard"]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":[{"$$mdtype":"Tag","name":"strong","attributes":{},"children":[{"$$mdtype":"Tag","name":"code","attributes":{},"children":["GET /api/native/user-dashboard?external_user_id=..."]}]}," — the central endpoint for the Native eSIM Integration. One call returns everything you need to render any screen: user info, pending package queues, current eSIM state, active eSIM packages, and partner details."]},{"$$mdtype":"Tag","name":"CodeBlock","attributes":{"data-language":"bash","header":{"controls":{"copy":{}}},"source":"curl --request GET \\\n  'https://api.hubbyesim.com/api/native/user-dashboard?external_user_id=user_abc123' \\\n  --header 'x-api-key: YOUR_API_KEY' \\\n  --header 'x-timestamp: 1711200000000' \\\n  --header 'x-signature: YOUR_HMAC_SIGNATURE'\n","lang":"bash"},"children":[]},{"$$mdtype":"Tag","name":"CodeBlock","attributes":{"data-language":"json","header":{"controls":{"copy":{}}},"source":"{\n  \"success\": true,\n  \"data\": {\n    \"user\": {\n      \"id\": \"firestore-user-id\",\n      \"external_user_id\": \"user_abc123\",\n      \"has_universal_esim\": true,\n      \"current_universal_esim\": \"8901234567890123456\"\n    },\n    \"package_queues\": [\n      {\n        \"id\": \"pq_xyz789\",\n        \"uuid\": \"a1b2c3d4-e5f6-7890-abcd-ef1234567890\",\n        \"type\": \"booking\",\n        \"package_specification\": {\n          \"iso3\": \"FRA\",\n          \"bytes\": 1073741824,\n          \"duration_days\": 30\n        },\n        \"created_at\": \"2026-03-20T10:00:00.000Z\",\n        \"redeemed_at\": null\n      }\n    ],\n    \"current_esim\": {\n      \"provider\": \"esim-provider\",\n      \"name\": \"Hubby Universal ESIM\",\n      \"qr\": \"LPA:1$smdp.example.com$ACTIVATION-CODE\",\n      \"iccid\": \"8901234567890123456\",\n      \"total_data\": 1073741824,\n      \"data_left\": 524288000,\n      \"data_used\": false,\n      \"status\": \"RELEASED\",\n      \"time_assigned\": \"2026-03-21T12:00:00.000Z\"\n    },\n    \"current_esim_packages\": [\n      {\n        \"template\": \"template-id\",\n        \"destination_bundle\": \"bundle-id\",\n        \"destination_iso3\": \"FRA\",\n        \"assigned_at\": \"2026-03-21T12:00:00.000Z\",\n        \"status\": \"ACTIVE\",\n        \"total_bytes\": 1073741824\n      }\n    ],\n    \"partner\": {\n      \"id\": \"partner-id\",\n      \"name\": \"Partner Name\"\n    }\n  }\n}\n","lang":"json"},"children":[]},{"$$mdtype":"Tag","name":"Heading","attributes":{"level":4,"id":"what-to-render-based-on-state"},"children":["What to render based on state"]},{"$$mdtype":"Tag","name":"div","attributes":{"className":"md-table-wrapper"},"children":[{"$$mdtype":"Tag","name":"table","attributes":{"className":"md"},"children":[{"$$mdtype":"Tag","name":"thead","attributes":{},"children":[{"$$mdtype":"Tag","name":"tr","attributes":{},"children":[{"$$mdtype":"Tag","name":"th","attributes":{"data-label":"user.has_universal_esim"},"children":[{"$$mdtype":"Tag","name":"code","attributes":{},"children":["user.has_universal_esim"]}]},{"$$mdtype":"Tag","name":"th","attributes":{"data-label":"What to show"},"children":["What to show"]}]}]},{"$$mdtype":"Tag","name":"tbody","attributes":{},"children":[{"$$mdtype":"Tag","name":"tr","attributes":{},"children":[{"$$mdtype":"Tag","name":"td","attributes":{},"children":[{"$$mdtype":"Tag","name":"code","attributes":{},"children":["false"]}]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":["No eSIM yet — waiting for a booking"]}]},{"$$mdtype":"Tag","name":"tr","attributes":{},"children":[{"$$mdtype":"Tag","name":"td","attributes":{},"children":[{"$$mdtype":"Tag","name":"code","attributes":{},"children":["true"]}," (with ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["current_esim"]},")"]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":["Show eSIM installation flow (Step 3) or data meter depending on eSIM status"]}]}]}]}]},{"$$mdtype":"Tag","name":"div","attributes":{"className":"md-table-wrapper"},"children":[{"$$mdtype":"Tag","name":"table","attributes":{"className":"md"},"children":[{"$$mdtype":"Tag","name":"thead","attributes":{},"children":[{"$$mdtype":"Tag","name":"tr","attributes":{},"children":[{"$$mdtype":"Tag","name":"th","attributes":{"data-label":"current_esim.status"},"children":[{"$$mdtype":"Tag","name":"code","attributes":{},"children":["current_esim.status"]}]},{"$$mdtype":"Tag","name":"th","attributes":{"data-label":"What to show"},"children":["What to show"]}]}]},{"$$mdtype":"Tag","name":"tbody","attributes":{},"children":[{"$$mdtype":"Tag","name":"tr","attributes":{},"children":[{"$$mdtype":"Tag","name":"td","attributes":{},"children":[{"$$mdtype":"Tag","name":"code","attributes":{},"children":["RELEASED"]}]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":["eSIM profile ready — show installation flow (Step 3) using the ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["qr"]}," field"]}]},{"$$mdtype":"Tag","name":"tr","attributes":{},"children":[{"$$mdtype":"Tag","name":"td","attributes":{},"children":[{"$$mdtype":"Tag","name":"code","attributes":{},"children":["INSTALLED"]}]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":["eSIM on device — show package queues or data meter"]}]},{"$$mdtype":"Tag","name":"tr","attributes":{},"children":[{"$$mdtype":"Tag","name":"td","attributes":{},"children":[{"$$mdtype":"Tag","name":"code","attributes":{},"children":["ENABLED"]}]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":["eSIM active with data — show data meter with ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["data_left"]}," / ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["total_data"]}]}]}]}]}]},{"$$mdtype":"Tag","name":"div","attributes":{"className":"md-table-wrapper"},"children":[{"$$mdtype":"Tag","name":"table","attributes":{"className":"md"},"children":[{"$$mdtype":"Tag","name":"thead","attributes":{},"children":[{"$$mdtype":"Tag","name":"tr","attributes":{},"children":[{"$$mdtype":"Tag","name":"th","attributes":{"data-label":"package_queues"},"children":[{"$$mdtype":"Tag","name":"code","attributes":{},"children":["package_queues"]}]},{"$$mdtype":"Tag","name":"th","attributes":{"data-label":"What to show"},"children":["What to show"]}]}]},{"$$mdtype":"Tag","name":"tbody","attributes":{},"children":[{"$$mdtype":"Tag","name":"tr","attributes":{},"children":[{"$$mdtype":"Tag","name":"td","attributes":{},"children":["Entries with ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["redeemed_at: null"]}]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":["\"Redeem\" button — use the ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["id"]}," field to redeem (Step 5)"]}]},{"$$mdtype":"Tag","name":"tr","attributes":{},"children":[{"$$mdtype":"Tag","name":"td","attributes":{},"children":["No unredeemed entries"]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":["\"Get more data\" prompt (Step 7)"]}]}]}]}]},{"$$mdtype":"Tag","name":"Heading","attributes":{"level":4,"id":"when-to-call"},"children":["When to call"]},{"$$mdtype":"Tag","name":"ul","attributes":{},"children":[{"$$mdtype":"Tag","name":"li","attributes":{},"children":["Every time the traveler opens the eSIM section in your app"]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":["After redeeming a package queue (to confirm the updated eSIM state)"]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":["After a top-up purchase (to confirm the new package queue appeared)"]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":["Periodically for data meter refresh (or rely on ",{"$$mdtype":"Tag","name":"a","attributes":{"href":"/guides/advanced-topics/webhooks"},"children":["webhooks"]}," instead)"]}]},{"$$mdtype":"Tag","name":"hr","attributes":{},"children":[]},{"$$mdtype":"Tag","name":"Heading","attributes":{"level":3,"id":"step-3--esim-installation"},"children":["Step 3 — eSIM Installation"]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["When ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["current_esim"]}," is present and the eSIM status is ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["RELEASED"]},", the traveler needs to install the eSIM. The ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["qr"]}," field in ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["current_esim"]}," contains the LPA string you need for installation."]},{"$$mdtype":"Tag","name":"Heading","attributes":{"level":4,"id":"installation-credentials"},"children":["Installation Credentials"]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["The ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["current_esim.qr"]}," field contains the full LPA string in the format ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["LPA:1$<smdp_address>$<activation_code>"]},". You can parse it or use it directly:"]},{"$$mdtype":"Tag","name":"div","attributes":{"className":"md-table-wrapper"},"children":[{"$$mdtype":"Tag","name":"table","attributes":{"className":"md"},"children":[{"$$mdtype":"Tag","name":"thead","attributes":{},"children":[{"$$mdtype":"Tag","name":"tr","attributes":{},"children":[{"$$mdtype":"Tag","name":"th","attributes":{"data-label":"Source"},"children":["Source"]},{"$$mdtype":"Tag","name":"th","attributes":{"data-label":"Description"},"children":["Description"]}]}]},{"$$mdtype":"Tag","name":"tbody","attributes":{},"children":[{"$$mdtype":"Tag","name":"tr","attributes":{},"children":[{"$$mdtype":"Tag","name":"td","attributes":{},"children":[{"$$mdtype":"Tag","name":"code","attributes":{},"children":["current_esim.qr"]}]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":["Full LPA string — use for QR code generation or programmatic install"]}]},{"$$mdtype":"Tag","name":"tr","attributes":{},"children":[{"$$mdtype":"Tag","name":"td","attributes":{},"children":[{"$$mdtype":"Tag","name":"code","attributes":{},"children":["current_esim.iccid"]}]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":["ICCID of the eSIM profile"]}]}]}]}]},{"$$mdtype":"Tag","name":"Heading","attributes":{"level":4,"id":"platform-specific-installation"},"children":["Platform-Specific Installation"]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":[{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["iOS 17.4+"]}," — Use the LPA string from ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["current_esim.qr"]}," for programmatic installation via the Carrier Provisioning API. The traveler never leaves your app."]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":[{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["iOS (older versions)"]}," — Generate a QR code from the ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["current_esim.qr"]}," LPA string. Instruct the traveler to scan it via Settings → Mobile Data → Add eSIM → Use QR Code."]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":[{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["Android"]}," — Parse the SM-DP+ address and activation code from the LPA string and use the ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["ACTION_EMBEDDED_SUBSCRIPTION_PROVISIONING"]}," intent:"]},{"$$mdtype":"Tag","name":"CodeBlock","attributes":{"data-language":"kotlin","header":{"controls":{"copy":{}}},"source":"// current_esim.qr = \"LPA:1$smdp.example.com$ACTIVATION-CODE\"\nval parts = lpaString.removePrefix(\"LPA:1$\").split(\"$\")\nval intent = Intent(EuiccManager.ACTION_OTA_ESIM_PROVISIONING)\nintent.putExtra(\"server_address\", parts[0])\nintent.putExtra(\"matching_id\", parts[1])\nstartActivity(intent)\n","lang":"kotlin"},"children":[]},{"$$mdtype":"Tag","name":"blockquote","attributes":{},"children":[{"$$mdtype":"Tag","name":"p","attributes":{},"children":[{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["Tip:"]}," Use the installation instructions endpoint (Step 4) instead of hard-coding instructions. It returns device-tailored steps and stays current as OS versions change."]}]},{"$$mdtype":"Tag","name":"hr","attributes":{},"children":[]},{"$$mdtype":"Tag","name":"Heading","attributes":{"level":3,"id":"step-4--get-installation-instructions"},"children":["Step 4 — Get Installation Instructions"]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":[{"$$mdtype":"Tag","name":"strong","attributes":{},"children":[{"$$mdtype":"Tag","name":"code","attributes":{},"children":["POST /api/native/instructions"]}]}," — returns AI-generated, device-specific installation instructions tailored to the traveler's exact device model, OS version, and locale. The service automatically resolves the user's eSIM status, activation string, and partner visual identity from the ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["external_user_id"]},", so the returned instructions are fully branded and context-aware."]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["You do not need to maintain installation content in your app — Hubby keeps it current for every device and OS version."]},{"$$mdtype":"Tag","name":"CodeBlock","attributes":{"data-language":"bash","header":{"controls":{"copy":{}}},"source":"curl --request POST \\\n  'https://api.hubbyesim.com/api/native/instructions' \\\n  --header 'x-api-key: YOUR_API_KEY' \\\n  --header 'x-timestamp: 1711200000000' \\\n  --header 'x-signature: YOUR_HMAC_SIGNATURE' \\\n  --header 'Content-Type: application/json' \\\n  --data '{\n    \"format\": \"html\",\n    \"external_user_id\": \"user_abc123\",\n    \"device_name\": \"Google Pixel 10\",\n    \"device_type\": \"phone\",\n    \"phone_os\": \"android\",\n    \"os_version\": \"15\",\n    \"locale\": \"mk-MK\"\n  }'\n","lang":"bash"},"children":[]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["The response shape is dynamic and depends on the requested ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["format"]},". The instructions adapt to:"]},{"$$mdtype":"Tag","name":"ul","attributes":{},"children":[{"$$mdtype":"Tag","name":"li","attributes":{},"children":[{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["Device model and OS version"]}," — different steps for iOS 17.4+ (programmatic) vs older iOS (QR scan) vs Android (intent-based)"]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":[{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["eSIM state"]}," — if already installed, instructions shift to activation/troubleshooting"]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":[{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["Locale"]}," — instructions returned in the requested language"]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":[{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["Partner branding"]}," — visual identity applied to the generated instructions"]}]},{"$$mdtype":"Tag","name":"hr","attributes":{},"children":[]},{"$$mdtype":"Tag","name":"Heading","attributes":{"level":3,"id":"step-5--check-device-compatibility"},"children":["Step 5 — Check Device Compatibility"]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["Before starting the eSIM flow, you can check whether the traveler's device supports eSIM."]},{"$$mdtype":"Tag","name":"Heading","attributes":{"level":4,"id":"check-a-specific-device"},"children":["Check a specific device"]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":[{"$$mdtype":"Tag","name":"strong","attributes":{},"children":[{"$$mdtype":"Tag","name":"code","attributes":{},"children":["POST /api/native/device-compatibility"]}]}," — pass the device details and get a compatibility result."]},{"$$mdtype":"Tag","name":"CodeBlock","attributes":{"data-language":"bash","header":{"controls":{"copy":{}}},"source":"curl --request POST \\\n  'https://api.hubbyesim.com/api/native/device-compatibility' \\\n  --header 'x-api-key: YOUR_API_KEY' \\\n  --header 'x-timestamp: 1711200000000' \\\n  --header 'x-signature: YOUR_HMAC_SIGNATURE' \\\n  --header 'Content-Type: application/json' \\\n  --data '{\n    \"phone_brand\": \"Google\",\n    \"phone_model\": \"Pixel 10\"\n  }'\n","lang":"bash"},"children":[]},{"$$mdtype":"Tag","name":"CodeBlock","attributes":{"data-language":"json","header":{"controls":{"copy":{}}},"source":"{\n  \"success\": true,\n  \"data\": {\n    \"phone_brand\": \"Google\",\n    \"phone_model\": \"Pixel 10\",\n    \"is_compatible\": true\n  }\n}\n","lang":"json"},"children":[]},{"$$mdtype":"Tag","name":"Heading","attributes":{"level":4,"id":"list-all-compatible-devices"},"children":["List all compatible devices"]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":[{"$$mdtype":"Tag","name":"strong","attributes":{},"children":[{"$$mdtype":"Tag","name":"code","attributes":{},"children":["GET /api/native/device-compatibility"]}]}," — returns all known devices and their eSIM compatibility. Use this to build a compatibility page or pre-filter device selection in your app."]},{"$$mdtype":"Tag","name":"CodeBlock","attributes":{"data-language":"bash","header":{"controls":{"copy":{}}},"source":"curl --request GET \\\n  'https://api.hubbyesim.com/api/native/device-compatibility' \\\n  --header 'x-api-key: YOUR_API_KEY' \\\n  --header 'x-timestamp: 1711200000000' \\\n  --header 'x-signature: YOUR_HMAC_SIGNATURE'\n","lang":"bash"},"children":[]},{"$$mdtype":"Tag","name":"CodeBlock","attributes":{"data-language":"json","header":{"controls":{"copy":{}}},"source":"{\n  \"success\": true,\n  \"data\": {\n    \"devices\": [\n      {\n        \"phone_brand\": \"Apple\",\n        \"phone_model\": \"iPhone 15 Pro\"\n      },\n      {\n        \"phone_brand\": \"Samsung\",\n        \"phone_model\": \"Galaxy S24\"\n      }\n    ]\n  }\n}\n","lang":"json"},"children":[]},{"$$mdtype":"Tag","name":"blockquote","attributes":{},"children":[{"$$mdtype":"Tag","name":"p","attributes":{},"children":[{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["Note:"]}," The device list is being continuously expanded. The single-device check endpoint is the recommended approach for real-time compatibility verification."]}]},{"$$mdtype":"Tag","name":"hr","attributes":{},"children":[]},{"$$mdtype":"Tag","name":"Heading","attributes":{"level":3,"id":"step-6--redeem-a-package-queue"},"children":["Step 6 — Redeem a Package Queue"]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":[{"$$mdtype":"Tag","name":"strong","attributes":{},"children":[{"$$mdtype":"Tag","name":"code","attributes":{},"children":["POST /api/native/redeem-package"]}]}," — redeems a pending package queue entry, provisioning the package onto the traveler's universal eSIM. Pass the ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["external_user_id"]}," and the ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["package_queue_id"]}," (the ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["id"]}," field from ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["package_queues"]}," in the user dashboard response)."]},{"$$mdtype":"Tag","name":"CodeBlock","attributes":{"data-language":"bash","header":{"controls":{"copy":{}}},"source":"curl --request POST \\\n  'https://api.hubbyesim.com/api/native/redeem-package' \\\n  --header 'x-api-key: YOUR_API_KEY' \\\n  --header 'x-timestamp: 1711200000000' \\\n  --header 'x-signature: YOUR_HMAC_SIGNATURE' \\\n  --header 'Content-Type: application/json' \\\n  --data '{\n    \"external_user_id\": \"user_abc123\",\n    \"package_queue_id\": \"pq_xyz789\"\n  }'\n","lang":"bash"},"children":[]},{"$$mdtype":"Tag","name":"CodeBlock","attributes":{"data-language":"json","header":{"controls":{"copy":{}}},"source":"{\n  \"success\": true,\n  \"message\": \"Package queue redeemed successfully\",\n  \"data\": {\n    \"package_queue\": {\n      \"uuid\": \"a1b2c3d4-e5f6-7890-abcd-ef1234567890\",\n      \"type\": \"booking\",\n      \"redeemed_at\": null,\n      \"package_specification\": {\n        \"iso3\": \"FRA\",\n        \"bytes\": 1073741824,\n        \"duration_days\": 30\n      }\n    },\n    \"current_esim\": {\n      \"iccid\": \"8901234567890123456\",\n      \"qr\": \"LPA:1$smdp.example.com$ACTIVATION-CODE\",\n      \"name\": \"Hubby Universal ESIM\",\n      \"status\": \"RELEASED\",\n      \"data_left\": 1073741824,\n      \"total_data\": 1073741824,\n      \"last_updated\": \"2026-03-23T12:00:00.000Z\",\n      \"time_assigned\": \"2026-03-23T12:00:00.000Z\",\n      \"esim_type\": \"classic\",\n      \"provider\": \"esim-provider\"\n    },\n    \"current_esim_packages\": [\n      {\n        \"allowance_seconds\": 2592000,\n        \"allowance_hours\": 720,\n        \"allowance_days\": 30,\n        \"assigned_at\": \"2026-03-23T12:00:00.000Z\",\n        \"date_activated\": null,\n        \"status\": \"ACTIVE\",\n        \"total_bytes\": 1073741824,\n        \"type\": \"data\"\n      }\n    ]\n  }\n}\n","lang":"json"},"children":[]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["The response returns the redeemed package queue entry along with the updated eSIM state and current packages, so you can immediately update the UI without an extra dashboard call."]},{"$$mdtype":"Tag","name":"hr","attributes":{},"children":[]},{"$$mdtype":"Tag","name":"Heading","attributes":{"level":3,"id":"step-7--top-up"},"children":["Step 7 — Top-Up"]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["To add more data, create another booking with the same ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["external_user_id"]},". The new package is automatically queued onto the traveler's existing eSIM — no re-installation needed."]},{"$$mdtype":"Tag","name":"CodeBlock","attributes":{"data-language":"bash","header":{"controls":{"copy":{}}},"source":"curl --request POST \\\n  'https://api.hubbyesim.com/api/bookings' \\\n  --header 'x-api-key: YOUR_API_KEY' \\\n  --header 'x-timestamp: 1717689600000' \\\n  --header 'x-signature: YOUR_HMAC_SIGNATURE' \\\n  --header 'Content-Type: application/json' \\\n  --data '{\n    \"departure_date\": \"2026-07-20\",\n    \"package_specifications\": [\n      {\n        \"external_user_id\": \"partner_user_456\",\n        \"destination\": \"GR\",\n        \"size\": \"3GB\"\n      }\n    ]\n  }'\n","lang":"bash"},"children":[]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["This is the same booking endpoint as Step 1. The Universal eSIM architecture means every new package for the same ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["external_user_id"]}," is added to their existing eSIM — one installation, unlimited top-ups."]},{"$$mdtype":"Tag","name":"hr","attributes":{},"children":[]},{"$$mdtype":"Tag","name":"Heading","attributes":{"level":3,"id":"step-8--monitor-usage"},"children":["Step 8 — Monitor Usage"]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["Two approaches, use both:"]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":[{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["Pull: User dashboard endpoint"]}," — call ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["GET /api/native/user-dashboard?external_user_id=..."]}," to refresh the data meter. The ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["current_esim"]}," object includes ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["data_left"]}," and ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["total_data"]},", and ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["current_esim_packages"]}," lists each package with ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["total_bytes"]}," and status."]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":[{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["Push: Webhooks"]}," — receive real-time events at 20%, 50%, and 80% data usage thresholds. Map these to push notifications. See the ",{"$$mdtype":"Tag","name":"a","attributes":{"href":"/guides/advanced-topics/webhooks"},"children":["webhooks guide"]}," for the full event catalog."]},{"$$mdtype":"Tag","name":"div","attributes":{"className":"md-table-wrapper"},"children":[{"$$mdtype":"Tag","name":"table","attributes":{"className":"md"},"children":[{"$$mdtype":"Tag","name":"thead","attributes":{},"children":[{"$$mdtype":"Tag","name":"tr","attributes":{},"children":[{"$$mdtype":"Tag","name":"th","attributes":{"data-label":"Event"},"children":["Event"]},{"$$mdtype":"Tag","name":"th","attributes":{"data-label":"Suggested action"},"children":["Suggested action"]}]}]},{"$$mdtype":"Tag","name":"tbody","attributes":{},"children":[{"$$mdtype":"Tag","name":"tr","attributes":{},"children":[{"$$mdtype":"Tag","name":"td","attributes":{},"children":[{"$$mdtype":"Tag","name":"code","attributes":{},"children":["package.usage.50_percent"]}]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":["\"You've used half your data in Greece\" (or \"Your package is halfway through\")"]}]},{"$$mdtype":"Tag","name":"tr","attributes":{},"children":[{"$$mdtype":"Tag","name":"td","attributes":{},"children":[{"$$mdtype":"Tag","name":"code","attributes":{},"children":["package.usage.80_percent"]}]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":["\"Running low — top up now to stay connected\" (or \"Your package expires in 6 days\")"]}]},{"$$mdtype":"Tag","name":"tr","attributes":{},"children":[{"$$mdtype":"Tag","name":"td","attributes":{},"children":[{"$$mdtype":"Tag","name":"code","attributes":{},"children":["booking.within_cutoff"]}," (eSIM not installed)"]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":["\"Your trip is in 7 days — install your eSIM now\""]}]},{"$$mdtype":"Tag","name":"tr","attributes":{},"children":[{"$$mdtype":"Tag","name":"td","attributes":{},"children":[{"$$mdtype":"Tag","name":"code","attributes":{},"children":["booking.about_to_depart"]}," (eSIM not installed)"]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":["\"Departing in 2 hours — install before you board\""]}]}]}]}]},{"$$mdtype":"Tag","name":"hr","attributes":{},"children":[]},{"$$mdtype":"Tag","name":"Heading","attributes":{"level":3,"id":"step-9--payments"},"children":["Step 9 — Payments"]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["In the Native eSIM Integration model, ",{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["you are the Merchant of Record"]},". Hubby never touches payments. You handle the payment flow in your app using your own PSP, then call the booking endpoint to provision the package."]},{"$$mdtype":"Tag","name":"ul","attributes":{},"children":[{"$$mdtype":"Tag","name":"li","attributes":{},"children":["Hubby provides B2B net rates and recommended B2C prices in the ",{"$$mdtype":"Tag","name":"a","attributes":{"href":"/apis/openapi"},"children":["package catalog"]}," (",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["GET /destinations/{id}"]},")"]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":["You set your own retail prices or use Hubby's B2C recommendations (continuously updated based on market rates)"]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":["Hubby invoices you monthly at B2B net rates"]}]},{"$$mdtype":"Tag","name":"hr","attributes":{},"children":[]},{"$$mdtype":"Tag","name":"Heading","attributes":{"level":2,"id":"package-catalog"},"children":["Package Catalog"]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["The Hubby API is organized around ",{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["Destinations"]}," and ",{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["Bundles"]}," — the same concepts your travel platform already uses. A Destination is a country or region; each Destination has one or more Bundles (data products with different sizes, durations, and prices). Use the destination endpoints to build your package selection UI:"]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":[{"$$mdtype":"Tag","name":"strong","attributes":{},"children":[{"$$mdtype":"Tag","name":"code","attributes":{},"children":["GET /api/destinations"]}]}," — all available destinations (countries and regions) with localized names, ISO3 codes, and metadata."]},{"$$mdtype":"Tag","name":"CodeBlock","attributes":{"data-language":"bash","header":{"controls":{"copy":{}}},"source":"curl --request GET \\\n  'https://api.hubbyesim.com/api/destinations' \\\n  --header 'x-api-key: YOUR_API_KEY' \\\n  --header 'x-timestamp: 1717689600000' \\\n  --header 'x-signature: YOUR_HMAC_SIGNATURE'\n","lang":"bash"},"children":[]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":[{"$$mdtype":"Tag","name":"strong","attributes":{},"children":[{"$$mdtype":"Tag","name":"code","attributes":{},"children":["GET /api/destinations/{id}"]}]}," — a single destination with its available bundles (data packages) including B2B and B2C prices."]},{"$$mdtype":"Tag","name":"CodeBlock","attributes":{"data-language":"bash","header":{"controls":{"copy":{}}},"source":"curl --request GET \\\n  'https://api.hubbyesim.com/api/destinations/GR' \\\n  --header 'x-api-key: YOUR_API_KEY' \\\n  --header 'x-timestamp: 1717689600000' \\\n  --header 'x-signature: YOUR_HMAC_SIGNATURE'\n","lang":"bash"},"children":[]},{"$$mdtype":"Tag","name":"hr","attributes":{},"children":[]},{"$$mdtype":"Tag","name":"Heading","attributes":{"level":2,"id":"support-integration"},"children":["Support Integration"]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["For Native eSIM Integration partners, support is integrated via the Intercom SDK:"]},{"$$mdtype":"Tag","name":"ol","attributes":{},"children":[{"$$mdtype":"Tag","name":"li","attributes":{},"children":["Embed the Intercom SDK in your iOS and Android app"]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":["When opening a support session, populate user context fields:",{"$$mdtype":"Tag","name":"ul","attributes":{},"children":[{"$$mdtype":"Tag","name":"li","attributes":{},"children":[{"$$mdtype":"Tag","name":"code","attributes":{},"children":["external_user_id"]},", ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["device_model"]},", ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["os"]},", ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["os_version"]}]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":[{"$$mdtype":"Tag","name":"code","attributes":{},"children":["booking_destination"]},", ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["departure_date"]}]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":[{"$$mdtype":"Tag","name":"code","attributes":{},"children":["package_status"]},", ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["esim_status"]}]}]}]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":["Hubby's support team (AI + human) receives this context automatically"]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":["First response time: < 3 minutes"]}]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["Escalation paths:"]},{"$$mdtype":"Tag","name":"ul","attributes":{},"children":[{"$$mdtype":"Tag","name":"li","attributes":{},"children":[{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["Direct:"]}," Traveler → Hubby AI → Hubby human agent"]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":[{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["Via partner:"]}," Traveler → your support team → escalation to Hubby via dedicated channel"]}]},{"$$mdtype":"Tag","name":"hr","attributes":{},"children":[]},{"$$mdtype":"Tag","name":"Heading","attributes":{"level":2,"id":"platform-guarantees"},"children":["Platform Guarantees"]},{"$$mdtype":"Tag","name":"div","attributes":{"className":"md-table-wrapper"},"children":[{"$$mdtype":"Tag","name":"table","attributes":{"className":"md"},"children":[{"$$mdtype":"Tag","name":"thead","attributes":{},"children":[{"$$mdtype":"Tag","name":"tr","attributes":{},"children":[{"$$mdtype":"Tag","name":"th","attributes":{"data-label":"Metric"},"children":["Metric"]},{"$$mdtype":"Tag","name":"th","attributes":{"data-label":"Commitment"},"children":["Commitment"]}]}]},{"$$mdtype":"Tag","name":"tbody","attributes":{},"children":[{"$$mdtype":"Tag","name":"tr","attributes":{},"children":[{"$$mdtype":"Tag","name":"td","attributes":{},"children":["API uptime"]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":["99.99% (Google Cloud SLA)"]}]},{"$$mdtype":"Tag","name":"tr","attributes":{},"children":[{"$$mdtype":"Tag","name":"td","attributes":{},"children":["Provisioning success rate"]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":["99.9%"]}]},{"$$mdtype":"Tag","name":"tr","attributes":{},"children":[{"$$mdtype":"Tag","name":"td","attributes":{},"children":["Support first response (human)"]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":["< 3 minutes"]}]},{"$$mdtype":"Tag","name":"tr","attributes":{},"children":[{"$$mdtype":"Tag","name":"td","attributes":{},"children":["Webhook delivery"]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":["Best-effort, near-real-time"]}]},{"$$mdtype":"Tag","name":"tr","attributes":{},"children":[{"$$mdtype":"Tag","name":"td","attributes":{},"children":["Data usage reporting delay"]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":["~15 minutes (industry-wide telco limitation)"]}]},{"$$mdtype":"Tag","name":"tr","attributes":{},"children":[{"$$mdtype":"Tag","name":"td","attributes":{},"children":["Backward compatibility"]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":["4+ years without breaking changes"]}]},{"$$mdtype":"Tag","name":"tr","attributes":{},"children":[{"$$mdtype":"Tag","name":"td","attributes":{},"children":["Rate limiting"]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":["None (elastic serverless infrastructure)"]}]}]}]}]},{"$$mdtype":"Tag","name":"hr","attributes":{},"children":[]},{"$$mdtype":"Tag","name":"Heading","attributes":{"level":2,"id":"key-advantages-over-other-esim-apis"},"children":["Key Advantages Over Other eSIM APIs"]},{"$$mdtype":"Tag","name":"Heading","attributes":{"level":3,"id":"package-specs-not-package-ids"},"children":["Package Specs, Not Package IDs"]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["You specify destination + size. Hubby auto-routes to the optimal package. No catalog sync, no stale IDs, no manual mapping."]},{"$$mdtype":"Tag","name":"Heading","attributes":{"level":3,"id":"universal-esim"},"children":["Universal eSIM"]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["One eSIM per traveler, installed once. Every subsequent package queues onto the same eSIM. Multi-destination trips, top-ups, returning travelers — all on one installation."]},{"$$mdtype":"Tag","name":"Heading","attributes":{"level":3,"id":"zero-telco-exposure"},"children":["Zero Telco Exposure"]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["Your integration never sees ICCIDs, MCC/MNC codes, or carrier-specific provisioning flows. Hubby abstracts all telco complexity behind clean REST endpoints."]},{"$$mdtype":"Tag","name":"Heading","attributes":{"level":3,"id":"ai-powered-installation-instructions"},"children":["AI-Powered Installation Instructions"]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["Device-specific, OS-aware, locale-aware installation steps generated on the fly. No hard-coded content to maintain in your app."]},{"$$mdtype":"Tag","name":"Heading","attributes":{"level":3,"id":"hmac-authentication"},"children":["HMAC Authentication"]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["Simpler than OAuth2 — no token lifecycle, no refresh flows. One HMAC signature per request using your secret key. See the ",{"$$mdtype":"Tag","name":"a","attributes":{"href":"/guides/authentication"},"children":["authentication guide"]},"."]},{"$$mdtype":"Tag","name":"Heading","attributes":{"level":3,"id":"travel-aware-webhooks"},"children":["Travel-Aware Webhooks"]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["Departure-time triggers (",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["booking.within_cutoff"]},", ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["booking.about_to_depart"]},") that no generic eSIM API offers. Built for travel, not just connectivity."]},{"$$mdtype":"Tag","name":"hr","attributes":{},"children":[]},{"$$mdtype":"Tag","name":"Heading","attributes":{"level":2,"id":"quick-start-checklist"},"children":["Quick-Start Checklist"]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":[{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["Your team provides:"]}]},{"$$mdtype":"Tag","name":"ul","attributes":{},"children":[{"$$mdtype":"Tag","name":"li","attributes":{},"children":[{"$$mdtype":"Tag","name":"input","attributes":{"checked":false,"type":"checkbox","readOnly":true},"children":[]}," ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["external_user_id"]}," format (your internal user ID)"]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":[{"$$mdtype":"Tag","name":"input","attributes":{"checked":false,"type":"checkbox","readOnly":true},"children":[]}," Package selection UI designs"]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":[{"$$mdtype":"Tag","name":"input","attributes":{"checked":false,"type":"checkbox","readOnly":true},"children":[]}," Payment flow (your PSP)"]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":[{"$$mdtype":"Tag","name":"input","attributes":{"checked":false,"type":"checkbox","readOnly":true},"children":[]}," Push notification mapping for webhook events"]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":[{"$$mdtype":"Tag","name":"input","attributes":{"checked":false,"type":"checkbox","readOnly":true},"children":[]}," Installation UI (or use Hubby's instructions endpoint)"]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":[{"$$mdtype":"Tag","name":"input","attributes":{"checked":false,"type":"checkbox","readOnly":true},"children":[]}," Technical point of contact"]}]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":[{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["Hubby provides:"]}]},{"$$mdtype":"Tag","name":"ul","attributes":{},"children":[{"$$mdtype":"Tag","name":"li","attributes":{},"children":[{"$$mdtype":"Tag","name":"input","attributes":{"checked":false,"type":"checkbox","readOnly":true},"children":[]}," API keys (staging + production)"]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":[{"$$mdtype":"Tag","name":"input","attributes":{"checked":false,"type":"checkbox","readOnly":true},"children":[]}," Staging environment with all endpoints"]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":[{"$$mdtype":"Tag","name":"input","attributes":{"checked":false,"type":"checkbox","readOnly":true},"children":[]}," Package catalog with B2B + B2C prices"]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":[{"$$mdtype":"Tag","name":"input","attributes":{"checked":false,"type":"checkbox","readOnly":true},"children":[]}," AI-powered installation instructions"]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":[{"$$mdtype":"Tag","name":"input","attributes":{"checked":false,"type":"checkbox","readOnly":true},"children":[]}," Intercom SDK configuration for support"]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":[{"$$mdtype":"Tag","name":"input","attributes":{"checked":false,"type":"checkbox","readOnly":true},"children":[]}," Integration support throughout the process"]}]},{"$$mdtype":"Tag","name":"hr","attributes":{},"children":[]},{"$$mdtype":"Tag","name":"Heading","attributes":{"level":2,"id":"related"},"children":["Related"]},{"$$mdtype":"Tag","name":"ul","attributes":{},"children":[{"$$mdtype":"Tag","name":"li","attributes":{},"children":[{"$$mdtype":"Tag","name":"a","attributes":{"href":"/apis/openapi"},"children":["API Reference — Native eSIM Integration endpoints"]}," — OpenAPI spec for user state, instructions, and package activation"]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":[{"$$mdtype":"Tag","name":"a","attributes":{"href":"/guides/webview"},"children":["Hubby WebView"]}," — alternative integration path with managed UI"]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":[{"$$mdtype":"Tag","name":"a","attributes":{"href":"/guides/authentication"},"children":["Authentication guide"]}," — HMAC-SHA256 setup"]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":[{"$$mdtype":"Tag","name":"a","attributes":{"href":"/guides/advanced-topics/webhooks"},"children":["Webhooks"]}," — full event catalog (shared with WebView)"]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":[{"$$mdtype":"Tag","name":"a","attributes":{"href":"/guides/advanced-topics/multi-destination"},"children":["Multi-destination bookings"]}," — advanced booking patterns"]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":[{"$$mdtype":"Tag","name":"a","attributes":{"href":"/guides/advanced-topics/package-types"},"children":["Package types"]}," — starter, data-limited, unlimited, time-limited"]}]}]},"headings":[{"value":"Hubby Native eSIM Integration","id":"hubby-native-esim-integration","depth":1},{"value":"What You Build vs. What Hubby Handles","id":"what-you-build-vs.-what-hubby-handles","depth":2},{"value":"Architecture","id":"architecture","depth":2},{"value":"The Full Flow","id":"the-full-flow","depth":2},{"value":"Step 1 — Create a Booking","id":"step-1--create-a-booking","depth":3},{"value":"Step 2 — Fetch User Dashboard","id":"step-2--fetch-user-dashboard","depth":3},{"value":"What to render based on state","id":"what-to-render-based-on-state","depth":4},{"value":"When to call","id":"when-to-call","depth":4},{"value":"Step 3 — eSIM Installation","id":"step-3--esim-installation","depth":3},{"value":"Installation Credentials","id":"installation-credentials","depth":4},{"value":"Platform-Specific Installation","id":"platform-specific-installation","depth":4},{"value":"Step 4 — Get Installation Instructions","id":"step-4--get-installation-instructions","depth":3},{"value":"Step 5 — Check Device Compatibility","id":"step-5--check-device-compatibility","depth":3},{"value":"Check a specific device","id":"check-a-specific-device","depth":4},{"value":"List all compatible devices","id":"list-all-compatible-devices","depth":4},{"value":"Step 6 — Redeem a Package Queue","id":"step-6--redeem-a-package-queue","depth":3},{"value":"Step 7 — Top-Up","id":"step-7--top-up","depth":3},{"value":"Step 8 — Monitor Usage","id":"step-8--monitor-usage","depth":3},{"value":"Step 9 — Payments","id":"step-9--payments","depth":3},{"value":"Package Catalog","id":"package-catalog","depth":2},{"value":"Support Integration","id":"support-integration","depth":2},{"value":"Platform Guarantees","id":"platform-guarantees","depth":2},{"value":"Key Advantages Over Other eSIM APIs","id":"key-advantages-over-other-esim-apis","depth":2},{"value":"Package Specs, Not Package IDs","id":"package-specs-not-package-ids","depth":3},{"value":"Universal eSIM","id":"universal-esim","depth":3},{"value":"Zero Telco Exposure","id":"zero-telco-exposure","depth":3},{"value":"AI-Powered Installation Instructions","id":"ai-powered-installation-instructions","depth":3},{"value":"HMAC Authentication","id":"hmac-authentication","depth":3},{"value":"Travel-Aware Webhooks","id":"travel-aware-webhooks","depth":3},{"value":"Quick-Start Checklist","id":"quick-start-checklist","depth":2},{"value":"Related","id":"related","depth":2}],"frontmatter":{"title":"Hubby Native eSIM Integration","description":"Build a fully custom eSIM experience in your native app — from booking to data meter, with full control over the UI","seo":{"title":"Hubby Native eSIM Integration"}},"lastModified":"2026-03-25T12:00:33.000Z","pagePropGetterError":{"message":"","name":""}},"slug":"/guides/native-api","userData":{"isAuthenticated":false,"teams":["anonymous"]}}