[{"data":1,"prerenderedAt":1267},["ShallowReactive",2],{"navigation":3,"\u002Fdocs\u002Finfuse-iot-sdk\u002Fpython-tools\u002Fcredentials":488,"\u002Fdocs\u002Finfuse-iot-sdk\u002Fpython-tools\u002Fcredentials-surround":1262},[4,326,444,470],{"title":5,"path":6,"stem":7,"children":8,"page":191},"Docs","\u002Fdocs","1.docs",[9,32,62,116,138,192,262,268,292],{"title":10,"path":11,"stem":12,"children":13,"icon":15},"Getting Started","\u002Fdocs\u002Fgetting-started","1.docs\u002F1.getting-started\u002F1.index",[14,16,20,24,28],{"title":10,"path":11,"stem":12,"icon":15},"i-lucide-house",{"title":17,"path":18,"stem":19},"Register a User","\u002Fdocs\u002Fgetting-started\u002Fregister-a-user","1.docs\u002F1.getting-started\u002F2.register-a-user",{"title":21,"path":22,"stem":23},"Platform Overview","\u002Fdocs\u002Fgetting-started\u002Fplatform-overview","1.docs\u002F1.getting-started\u002F3.platform-overview",{"title":25,"path":26,"stem":27},"Create an Organisation","\u002Fdocs\u002Fgetting-started\u002Fcreate-an-organisation","1.docs\u002F1.getting-started\u002F4.create-an-organisation",{"title":29,"path":30,"stem":31},"Quickstarts","\u002Fdocs\u002Fgetting-started\u002Fquickstarts","1.docs\u002F1.getting-started\u002F5.quickstarts",{"title":33,"path":34,"stem":35,"children":36},"Organisation Administration","\u002Fdocs\u002Finfuse-cloud","1.docs\u002F2.infuse-cloud\u002F1.index",[37,38,42,46,50,54,58],{"title":33,"path":34,"stem":35},{"title":39,"path":40,"stem":41},"Create or Switch Organisations","\u002Fdocs\u002Finfuse-cloud\u002Fcreate-or-switch-organisations","1.docs\u002F2.infuse-cloud\u002F2.create-or-switch-organisations",{"title":43,"path":44,"stem":45},"Organisation Profile","\u002Fdocs\u002Finfuse-cloud\u002Forganisation-profile","1.docs\u002F2.infuse-cloud\u002F3.organisation-profile",{"title":47,"path":48,"stem":49},"Members and Invitations","\u002Fdocs\u002Finfuse-cloud\u002Fmembers-and-invitations","1.docs\u002F2.infuse-cloud\u002F4.members-and-invitations",{"title":51,"path":52,"stem":53},"Member Roles","\u002Fdocs\u002Finfuse-cloud\u002Fmember-roles","1.docs\u002F2.infuse-cloud\u002F5.member-roles",{"title":55,"path":56,"stem":57},"API Access","\u002Fdocs\u002Finfuse-cloud\u002Fapi-access","1.docs\u002F2.infuse-cloud\u002F6.api-access",{"title":59,"path":60,"stem":61},"Webhooks","\u002Fdocs\u002Finfuse-cloud\u002Fwebhooks","1.docs\u002F2.infuse-cloud\u002F7.webhooks",{"title":63,"path":64,"stem":65,"children":66},"Infuse-IoT Cloud","\u002Fdocs\u002Finfuse-iot-cloud","1.docs\u002F3.infuse-iot-cloud\u002F1.index",[67,68,72,76,80,84,88,92,96,100,104,108,112],{"title":63,"path":64,"stem":65},{"title":69,"path":70,"stem":71},"Provisioning","\u002Fdocs\u002Finfuse-iot-cloud\u002Fprovisioning","1.docs\u002F3.infuse-iot-cloud\u002F10.provisioning",{"title":73,"path":74,"stem":75},"Connectivity","\u002Fdocs\u002Finfuse-iot-cloud\u002Fconnectivity","1.docs\u002F3.infuse-iot-cloud\u002F11.connectivity",{"title":77,"path":78,"stem":79},"Definitions","\u002Fdocs\u002Finfuse-iot-cloud\u002Fdefinitions","1.docs\u002F3.infuse-iot-cloud\u002F12.definitions",{"title":81,"path":82,"stem":83},"Telemetry","\u002Fdocs\u002Finfuse-iot-cloud\u002Ftelemetry","1.docs\u002F3.infuse-iot-cloud\u002F13.telemetry",{"title":85,"path":86,"stem":87},"Console","\u002Fdocs\u002Finfuse-iot-cloud\u002Fconsole","1.docs\u002F3.infuse-iot-cloud\u002F2.console",{"title":89,"path":90,"stem":91},"Concepts","\u002Fdocs\u002Finfuse-iot-cloud\u002Fconcepts","1.docs\u002F3.infuse-iot-cloud\u002F3.concepts",{"title":93,"path":94,"stem":95},"Boards","\u002Fdocs\u002Finfuse-iot-cloud\u002Fboards","1.docs\u002F3.infuse-iot-cloud\u002F4.boards",{"title":97,"path":98,"stem":99},"Networks","\u002Fdocs\u002Finfuse-iot-cloud\u002Fnetworks","1.docs\u002F3.infuse-iot-cloud\u002F5.networks",{"title":101,"path":102,"stem":103},"Devices","\u002Fdocs\u002Finfuse-iot-cloud\u002Fdevices","1.docs\u002F3.infuse-iot-cloud\u002F6.devices",{"title":105,"path":106,"stem":107},"Device Configuration","\u002Fdocs\u002Finfuse-iot-cloud\u002Fdevice-configuration","1.docs\u002F3.infuse-iot-cloud\u002F7.device-configuration",{"title":109,"path":110,"stem":111},"Applications and Releases","\u002Fdocs\u002Finfuse-iot-cloud\u002Fapplications-and-releases","1.docs\u002F3.infuse-iot-cloud\u002F8.applications-and-releases",{"title":113,"path":114,"stem":115},"Commands","\u002Fdocs\u002Finfuse-iot-cloud\u002Fcommands","1.docs\u002F3.infuse-iot-cloud\u002F9.commands",{"title":117,"path":118,"stem":119,"children":120},"Infuse-DB","\u002Fdocs\u002Finfuse-db","1.docs\u002F4.infuse-db\u002F1.index",[121,122,126,130,134],{"title":117,"path":118,"stem":119},{"title":123,"path":124,"stem":125},"Datasets","\u002Fdocs\u002Finfuse-db\u002Fdatasets","1.docs\u002F4.infuse-db\u002F2.datasets",{"title":127,"path":128,"stem":129},"Ingestion","\u002Fdocs\u002Finfuse-db\u002Fingestion","1.docs\u002F4.infuse-db\u002F3.ingestion",{"title":131,"path":132,"stem":133},"Querying","\u002Fdocs\u002Finfuse-db\u002Fquerying","1.docs\u002F4.infuse-db\u002F4.querying",{"title":135,"path":136,"stem":137},"Retention","\u002Fdocs\u002Finfuse-db\u002Fretention","1.docs\u002F4.infuse-db\u002F5.retention",{"title":139,"path":140,"stem":141,"children":142},"Embedded Tools","\u002Fdocs\u002Finfuse-iot-sdk","1.docs\u002F4.infuse-iot-sdk\u002F1.index",[143,144,148],{"title":139,"path":140,"stem":141},{"title":145,"path":146,"stem":147},"Infuse-IoT SDK","\u002Fdocs\u002Finfuse-iot-sdk\u002Fsdk-reference","1.docs\u002F4.infuse-iot-sdk\u002F2.sdk-reference",{"title":149,"path":150,"stem":151,"children":152,"page":191},"Python Tools","\u002Fdocs\u002Finfuse-iot-sdk\u002Fpython-tools","1.docs\u002F4.infuse-iot-sdk\u002Fpython-tools",[153,156,159,163,167,171,175,179,183,187],{"title":149,"path":154,"stem":155},"\u002Fdocs\u002Finfuse-iot-sdk\u002Fpython-tools\u002Fpython-tools","1.docs\u002F4.infuse-iot-sdk\u002Fpython-tools\u002F01.python-tools",{"title":113,"path":157,"stem":158},"\u002Fdocs\u002Finfuse-iot-sdk\u002Fpython-tools\u002Fcommands","1.docs\u002F4.infuse-iot-sdk\u002Fpython-tools\u002F02.commands",{"title":160,"path":161,"stem":162},"Credential Management","\u002Fdocs\u002Finfuse-iot-sdk\u002Fpython-tools\u002Fcredentials","1.docs\u002F4.infuse-iot-sdk\u002Fpython-tools\u002F03.credentials",{"title":164,"path":165,"stem":166},"Gateways","\u002Fdocs\u002Finfuse-iot-sdk\u002Fpython-tools\u002Fgateways","1.docs\u002F4.infuse-iot-sdk\u002Fpython-tools\u002F04.gateways",{"title":168,"path":169,"stem":170},"Infuse-IoT Cloud support","\u002Fdocs\u002Finfuse-iot-sdk\u002Fpython-tools\u002Fcloud","1.docs\u002F4.infuse-iot-sdk\u002Fpython-tools\u002F05.cloud",{"title":172,"path":173,"stem":174},"Provision Hardware","\u002Fdocs\u002Finfuse-iot-sdk\u002Fpython-tools\u002Fhardware-provisioning","1.docs\u002F4.infuse-iot-sdk\u002Fpython-tools\u002F06.hardware-provisioning",{"title":176,"path":177,"stem":178},"TDF Viewers","\u002Fdocs\u002Finfuse-iot-sdk\u002Fpython-tools\u002Ftdf-viewers","1.docs\u002F4.infuse-iot-sdk\u002Fpython-tools\u002F07.tdf-viewers",{"title":180,"path":181,"stem":182},"RPC Runners","\u002Fdocs\u002Finfuse-iot-sdk\u002Fpython-tools\u002Frpc-runner","1.docs\u002F4.infuse-iot-sdk\u002Fpython-tools\u002F08.rpc-runner",{"title":184,"path":185,"stem":186},"Over-the-Air Upgrades","\u002Fdocs\u002Finfuse-iot-sdk\u002Fpython-tools\u002Fota-upgrades","1.docs\u002F4.infuse-iot-sdk\u002Fpython-tools\u002F09.ota-upgrades",{"title":188,"path":189,"stem":190},"Bluetooth Log Viewer","\u002Fdocs\u002Finfuse-iot-sdk\u002Fpython-tools\u002Fble-log-viewer","1.docs\u002F4.infuse-iot-sdk\u002Fpython-tools\u002F10.ble-log-viewer",false,{"title":193,"path":194,"stem":195,"children":196},"Infuse-Marketplace","\u002Fdocs\u002Fmarketplace","1.docs\u002F5.marketplace\u002F1.index",[197,198,202,206,232],{"title":193,"path":194,"stem":195},{"title":199,"path":200,"stem":201},"Infuse-Marketplace Instances","\u002Fdocs\u002Fmarketplace\u002Finstances","1.docs\u002F5.marketplace\u002F2.instances",{"title":203,"path":204,"stem":205},"Infuse-Marketplace Roles","\u002Fdocs\u002Fmarketplace\u002Froles","1.docs\u002F5.marketplace\u002F3.roles",{"title":207,"path":208,"stem":209,"children":210},"Infuse-Marketplace Developers","\u002Fdocs\u002Fmarketplace\u002Fdevelopers","1.docs\u002F5.marketplace\u002Fdevelopers\u002F1.index",[211,212,216,220,224,228],{"title":207,"path":208,"stem":209},{"title":213,"path":214,"stem":215},"Create an App or Algorithm","\u002Fdocs\u002Fmarketplace\u002Fdevelopers\u002Fcreate-product","1.docs\u002F5.marketplace\u002Fdevelopers\u002F2.create-product",{"title":217,"path":218,"stem":219},"Upload Assets","\u002Fdocs\u002Fmarketplace\u002Fdevelopers\u002Fupload-assets","1.docs\u002F5.marketplace\u002Fdevelopers\u002F3.upload-assets",{"title":221,"path":222,"stem":223},"Releases and Versions","\u002Fdocs\u002Fmarketplace\u002Fdevelopers\u002Freleases-and-versions","1.docs\u002F5.marketplace\u002Fdevelopers\u002F4.releases-and-versions",{"title":225,"path":226,"stem":227},"Pricing","\u002Fdocs\u002Fmarketplace\u002Fdevelopers\u002Fpricing","1.docs\u002F5.marketplace\u002Fdevelopers\u002F5.pricing",{"title":229,"path":230,"stem":231},"Publish an App or Algorithm","\u002Fdocs\u002Fmarketplace\u002Fdevelopers\u002Fpublish-product","1.docs\u002F5.marketplace\u002Fdevelopers\u002F6.publish-product",{"title":233,"path":234,"stem":235,"children":236},"Infuse-Marketplace Providers","\u002Fdocs\u002Fmarketplace\u002Fproviders","1.docs\u002F5.marketplace\u002Fproviders\u002F1.index",[237,238,242,246,250,254,258],{"title":233,"path":234,"stem":235},{"title":239,"path":240,"stem":241},"Discover Apps and Algorithms","\u002Fdocs\u002Fmarketplace\u002Fproviders\u002Fdiscover-products","1.docs\u002F5.marketplace\u002Fproviders\u002F2.discover-products",{"title":243,"path":244,"stem":245},"Create and Manage Listings","\u002Fdocs\u002Fmarketplace\u002Fproviders\u002Fcreate-listings","1.docs\u002F5.marketplace\u002Fproviders\u002F3.create-listings",{"title":247,"path":248,"stem":249},"Build a Storefront","\u002Fdocs\u002Fmarketplace\u002Fproviders\u002Fbuild-a-storefront","1.docs\u002F5.marketplace\u002Fproviders\u002F4.build-a-storefront",{"title":251,"path":252,"stem":253},"Checkout Flow","\u002Fdocs\u002Fmarketplace\u002Fproviders\u002Fcheckout-flow","1.docs\u002F5.marketplace\u002Fproviders\u002F5.checkout-flow",{"title":255,"path":256,"stem":257},"Purchases","\u002Fdocs\u002Fmarketplace\u002Fproviders\u002Fpurchases","1.docs\u002F5.marketplace\u002Fproviders\u002F6.purchases",{"title":259,"path":260,"stem":261},"Install Purchased Apps and Algorithms","\u002Fdocs\u002Fmarketplace\u002Fproviders\u002Finstall-purchased-products","1.docs\u002F5.marketplace\u002Fproviders\u002F7.install-purchased-products",{"title":263,"path":264,"stem":265,"children":266},"Infuse-Analytics","\u002Fdocs\u002Finfuse-analytics","1.docs\u002F6.infuse-analytics\u002F1.index",[267],{"title":263,"path":264,"stem":265},{"title":89,"path":269,"stem":270,"children":271},"\u002Fdocs\u002Fconcepts","1.docs\u002F7.concepts\u002F1.index",[272,273,277,281,284,288],{"title":89,"path":269,"stem":270},{"title":274,"path":275,"stem":276},"Organisations","\u002Fdocs\u002Fconcepts\u002Forganisations","1.docs\u002F7.concepts\u002F2.organisations",{"title":278,"path":279,"stem":280},"Products","\u002Fdocs\u002Fconcepts\u002Fproducts","1.docs\u002F7.concepts\u002F3.products",{"title":101,"path":282,"stem":283},"\u002Fdocs\u002Fconcepts\u002Fdevices","1.docs\u002F7.concepts\u002F5.devices",{"title":285,"path":286,"stem":287},"Entitlements","\u002Fdocs\u002Fconcepts\u002Fentitlements","1.docs\u002F7.concepts\u002F6.entitlements",{"title":289,"path":290,"stem":291},"Infuse-Marketplace Model","\u002Fdocs\u002Fconcepts\u002Fmarketplace-model","1.docs\u002F7.concepts\u002F7.marketplace-model",{"title":293,"path":294,"stem":295,"children":296},"IAM and Access","\u002Fdocs\u002Fiam-and-access","1.docs\u002F8.iam-and-access\u002F1.index",[297,298,302,306,310,314,318,322],{"title":293,"path":294,"stem":295},{"title":299,"path":300,"stem":301},"Users, Groups, and Roles","\u002Fdocs\u002Fiam-and-access\u002Fusers-groups-and-roles","1.docs\u002F8.iam-and-access\u002F2.users-groups-and-roles",{"title":303,"path":304,"stem":305},"Permissions and Resource Limits","\u002Fdocs\u002Fiam-and-access\u002Fpermissions","1.docs\u002F8.iam-and-access\u002F3.permissions",{"title":307,"path":308,"stem":309},"Service Accounts","\u002Fdocs\u002Fiam-and-access\u002Fservice-accounts","1.docs\u002F8.iam-and-access\u002F4.service-accounts",{"title":311,"path":312,"stem":313},"API Keys","\u002Fdocs\u002Fiam-and-access\u002Fapi-tokens","1.docs\u002F8.iam-and-access\u002F5.api-tokens",{"title":315,"path":316,"stem":317},"Token Exchange","\u002Fdocs\u002Fiam-and-access\u002Ftoken-exchange","1.docs\u002F8.iam-and-access\u002F6.token-exchange",{"title":319,"path":320,"stem":321},"Rotate and Revoke Credentials","\u002Fdocs\u002Fiam-and-access\u002Frotate-and-revoke-credentials","1.docs\u002F8.iam-and-access\u002F7.rotate-and-revoke-credentials",{"title":323,"path":324,"stem":325},"Troubleshooting Auth","\u002Fdocs\u002Fiam-and-access\u002Ftroubleshooting-auth","1.docs\u002F8.iam-and-access\u002F8.troubleshooting-auth",{"title":327,"path":328,"stem":329,"children":330},"Guides","\u002Fguides","2.guides\u002F1.index",[331,332,342,352,424,434],{"title":327,"path":328,"stem":329},{"title":333,"path":334,"stem":335,"children":336},"Access Guides","\u002Fguides\u002Faccess","2.guides\u002Faccess\u002F1.index",[337,338],{"title":333,"path":334,"stem":335},{"title":339,"path":340,"stem":341},"Create an API Key","\u002Fguides\u002Faccess\u002Fcreate-an-api-token","2.guides\u002Faccess\u002F2.create-an-api-token",{"title":343,"path":344,"stem":345,"children":346},"Data Guides","\u002Fguides\u002Fdata","2.guides\u002Fdata\u002F1.index",[347,348],{"title":343,"path":344,"stem":345},{"title":349,"path":350,"stem":351},"Stream IoT Data to Infuse-DB","\u002Fguides\u002Fdata\u002Fstream-iot-data-to-infuse-db","2.guides\u002Fdata\u002F2.stream-iot-data-to-infuse-db",{"title":353,"path":354,"stem":355,"children":356},"Embedded SDK Guides","\u002Fguides\u002Fembedded-iot","2.guides\u002Fembedded-iot\u002F1.index",[357,358,362,384,394],{"title":353,"path":354,"stem":355},{"title":359,"path":360,"stem":361},"Python Tools Setup & Install","\u002Fguides\u002Fembedded-iot\u002Fpython-setup-install","2.guides\u002Fembedded-iot\u002F2.python-setup-install",{"title":363,"path":364,"stem":365,"children":366},"Creating Embedded Algorithms","\u002Fguides\u002Fembedded-iot\u002Fembedded-algorithms","2.guides\u002Fembedded-iot\u002Fembedded-algorithms\u002F1.index",[367,368,372,376,380],{"title":363,"path":364,"stem":365},{"title":369,"path":370,"stem":371},"Data collection","\u002Fguides\u002Fembedded-iot\u002Fembedded-algorithms\u002Fdata-collection","2.guides\u002Fembedded-iot\u002Fembedded-algorithms\u002F2.data-collection",{"title":373,"path":374,"stem":375},"Dataset Creation","\u002Fguides\u002Fembedded-iot\u002Fembedded-algorithms\u002Fdataset-creation","2.guides\u002Fembedded-iot\u002Fembedded-algorithms\u002F3.dataset-creation",{"title":377,"path":378,"stem":379},"Training Models","\u002Fguides\u002Fembedded-iot\u002Fembedded-algorithms\u002Ftraining-models","2.guides\u002Fembedded-iot\u002Fembedded-algorithms\u002F4.training-models",{"title":381,"path":382,"stem":383},"Deploying Models","\u002Fguides\u002Fembedded-iot\u002Fembedded-algorithms\u002Fdeploy","2.guides\u002Fembedded-iot\u002Fembedded-algorithms\u002F5.deploy",{"title":385,"path":386,"stem":387,"children":388},"Hardware Guides","\u002Fguides\u002Fembedded-iot\u002Fhardware","2.guides\u002Fembedded-iot\u002Fhardware\u002F1.index",[389,390],{"title":385,"path":386,"stem":387},{"title":391,"path":392,"stem":393},"nRF54L15 Tag","\u002Fguides\u002Fembedded-iot\u002Fhardware\u002Fnrf54l15-tag","2.guides\u002Fembedded-iot\u002Fhardware\u002F2.nrf54l15-tag",{"title":395,"path":396,"stem":397,"children":398},"How To's","\u002Fguides\u002Fembedded-iot\u002Fhow-tos","2.guides\u002Fembedded-iot\u002Fhow-tos\u002F1.index",[399,400,404,408,412,416,420],{"title":395,"path":396,"stem":397},{"title":401,"path":402,"stem":403},"Device Provisioning","\u002Fguides\u002Fembedded-iot\u002Fhow-tos\u002Fprovision-a-tag","2.guides\u002Fembedded-iot\u002Fhow-tos\u002F01.provision-a-tag",{"title":405,"path":406,"stem":407},"Setup and Flash a gateway","\u002Fguides\u002Fembedded-iot\u002Fhow-tos\u002Fflash-a-gateway","2.guides\u002Fembedded-iot\u002Fhow-tos\u002F02.flash-a-gateway",{"title":409,"path":410,"stem":411},"Connecting to a gateway","\u002Fguides\u002Fembedded-iot\u002Fhow-tos\u002Fconnect-gateway","2.guides\u002Fembedded-iot\u002Fhow-tos\u002F03.connect-gateway",{"title":413,"path":414,"stem":415},"How to physically connect a device","\u002Fguides\u002Fembedded-iot\u002Fhow-tos\u002Fdevice-logs","2.guides\u002Fembedded-iot\u002Fhow-tos\u002F03.device-logs",{"title":417,"path":418,"stem":419},"Configuring the default network","\u002Fguides\u002Fembedded-iot\u002Fhow-tos\u002Fconfigure-network","2.guides\u002Fembedded-iot\u002Fhow-tos\u002F04.configure-network",{"title":421,"path":422,"stem":423},"Device's Infuse ID","\u002Fguides\u002Fembedded-iot\u002Fhow-tos\u002Ftag-infuse-id","2.guides\u002Fembedded-iot\u002Fhow-tos\u002F05.tag-infuse-id",{"title":425,"path":426,"stem":427,"children":428},"IoT Guides","\u002Fguides\u002Fiot","2.guides\u002Fiot\u002F1.index",[429,430],{"title":425,"path":426,"stem":427},{"title":431,"path":432,"stem":433},"Connect an IoT Device","\u002Fguides\u002Fiot\u002Fconnect-a-device","2.guides\u002Fiot\u002F2.connect-a-device",{"title":435,"path":436,"stem":437,"children":438},"Infuse-Marketplace Guides","\u002Fguides\u002Fmarketplace","2.guides\u002Fmarketplace\u002F1.index",[439,440],{"title":435,"path":436,"stem":437},{"title":441,"path":442,"stem":443},"Build an Infuse-Marketplace Storefront","\u002Fguides\u002Fmarketplace\u002Fbuild-a-storefront","2.guides\u002Fmarketplace\u002F2.build-a-storefront",{"title":445,"path":446,"stem":447,"children":448},"API Reference","\u002Fapi-reference","3.api-reference\u002F1.index",[449,450,454,458,462,466],{"title":445,"path":446,"stem":447},{"title":451,"path":452,"stem":453},"Admin API","\u002Fapi-reference\u002Fcloud","3.api-reference\u002F2.cloud",{"title":455,"path":456,"stem":457},"Infuse-Marketplace API","\u002Fapi-reference\u002Fmarketplace","3.api-reference\u002F3.marketplace",{"title":459,"path":460,"stem":461},"IAM API","\u002Fapi-reference\u002Fiam","3.api-reference\u002F4.iam",{"title":463,"path":464,"stem":465},"Infuse-IoT Cloud API","\u002Fapi-reference\u002Fiot","3.api-reference\u002F5.iot",{"title":467,"path":468,"stem":469},"Infuse-DB API","\u002Fapi-reference\u002Fdb","3.api-reference\u002F6.db",{"title":471,"path":472,"stem":473,"children":474},"Resources","\u002Fresources","4.resources\u002F1.index",[475,476,480,484],{"title":471,"path":472,"stem":473},{"title":477,"path":478,"stem":479},"SDKs","\u002Fresources\u002Fsdks","4.resources\u002F2.sdks",{"title":481,"path":482,"stem":483},"OpenAPI Specs","\u002Fresources\u002Fopenapi-specs","4.resources\u002F3.openapi-specs",{"title":485,"path":486,"stem":487},"Examples","\u002Fresources\u002Fexamples","4.resources\u002F4.examples",{"id":489,"title":160,"body":490,"description":1256,"extension":1257,"links":1258,"meta":1259,"navigation":591,"path":161,"seo":1260,"stem":162,"__hash__":1261},"docs\u002F1.docs\u002F4.infuse-iot-sdk\u002Fpython-tools\u002F03.credentials.md",{"type":491,"value":492,"toc":1251},"minimark",[493,497,507,536,541,731,738,945,955,960,969,978,996,999,1005,1040,1055,1067,1090,1103,1107,1110,1127,1134,1139,1143,1146,1161,1164,1213,1233,1247],[494,495,496],"p",{},"The Infuse-IoT Python tools handles credentials for:",[498,499,500,504],"ul",{},[501,502,503],"li",{},"API Key Storage (for transactions with the Infuse-IoT Cloud endpoints)",[501,505,506],{},"Network keys: For ePacket decryption",[494,508,509,510,521,522,527,528,535],{},"The ",[511,512,516],"code",{"className":513,"language":514,"style":515},"language-bash shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","bash","",[517,518,520],"span",{"class":519},"sBMFI","profile"," and ",[511,523,524],{"className":513,"language":514,"style":515},[517,525,526],{"class":519},"credentials"," subcommands manages storage of\nsecrets for the package.\nThey are thin wrappers over the Python ",[529,530,534],"a",{"href":531,"rel":532},"https:\u002F\u002Fpypi.org\u002Fproject\u002Fkeyring\u002F",[533],"nofollow","keyring"," package.",[494,537,509,538,540],{},[511,539,520],{}," subcommand manages API Key Storage and custom tools and definitions.",[542,543,545],"pre",{"className":513,"code":544,"language":514,"meta":515,"style":515},"> infuse profile --help\nusage: infuse profile [-h] \u003Ccommand> ...\n\nManage Infuse-IoT profiles\n\noptions:\n  -h, --help  show this help message and exit\n\nprofile commands:\n  \u003Ccommand>\n    list      List profiles\n    configure\n              Create or update a profile\n    set       Set active profile\n    dump      Dump profile configuration\n",[511,546,547,559,586,593,605,610,616,643,648,656,668,679,685,703,717],{"__ignoreMap":515},[517,548,551,555],{"class":549,"line":550},"line",1,[517,552,554],{"class":553},"sMK4o",">",[517,556,558],{"class":557},"sTEyZ"," infuse profile --help\n",[517,560,562,565,569,572,575,578,581,583],{"class":549,"line":561},2,[517,563,564],{"class":519},"usage:",[517,566,568],{"class":567},"sfazB"," infuse",[517,570,571],{"class":567}," profile",[517,573,574],{"class":557}," [-h] ",[517,576,577],{"class":553},"\u003C",[517,579,580],{"class":557},"command",[517,582,554],{"class":553},[517,584,585],{"class":557}," ...\n",[517,587,589],{"class":549,"line":588},3,[517,590,592],{"emptyLinePlaceholder":591},true,"\n",[517,594,596,599,602],{"class":549,"line":595},4,[517,597,598],{"class":519},"Manage",[517,600,601],{"class":567}," Infuse-IoT",[517,603,604],{"class":567}," profiles\n",[517,606,608],{"class":549,"line":607},5,[517,609,592],{"emptyLinePlaceholder":591},[517,611,613],{"class":549,"line":612},6,[517,614,615],{"class":519},"options:\n",[517,617,619,622,625,628,631,634,637,640],{"class":549,"line":618},7,[517,620,621],{"class":519},"  -h,",[517,623,624],{"class":567}," --help",[517,626,627],{"class":567},"  show",[517,629,630],{"class":567}," this",[517,632,633],{"class":567}," help",[517,635,636],{"class":567}," message",[517,638,639],{"class":567}," and",[517,641,642],{"class":567}," exit\n",[517,644,646],{"class":549,"line":645},8,[517,647,592],{"emptyLinePlaceholder":591},[517,649,651,653],{"class":549,"line":650},9,[517,652,520],{"class":519},[517,654,655],{"class":567}," commands:\n",[517,657,659,662,665],{"class":549,"line":658},10,[517,660,661],{"class":553},"  \u003C",[517,663,580],{"class":664},"s2Zo4",[517,666,667],{"class":557},">\n",[517,669,671,674,677],{"class":549,"line":670},11,[517,672,673],{"class":519},"    list",[517,675,676],{"class":567},"      List",[517,678,604],{"class":567},[517,680,682],{"class":549,"line":681},12,[517,683,684],{"class":519},"    configure\n",[517,686,688,691,694,697,700],{"class":549,"line":687},13,[517,689,690],{"class":519},"              Create",[517,692,693],{"class":567}," or",[517,695,696],{"class":567}," update",[517,698,699],{"class":567}," a",[517,701,702],{"class":567}," profile\n",[517,704,706,709,712,715],{"class":549,"line":705},14,[517,707,708],{"class":664},"    set",[517,710,711],{"class":567},"       Set",[517,713,714],{"class":567}," active",[517,716,702],{"class":567},[517,718,720,723,726,728],{"class":549,"line":719},15,[517,721,722],{"class":519},"    dump",[517,724,725],{"class":567},"      Dump",[517,727,571],{"class":567},[517,729,730],{"class":567}," configuration\n",[494,732,509,733,735,736],{},[511,734,526],{}," subcommand now just manages network keys.\nIt used to manage API Keys but is now deprecated in favour of the newer ",[511,737,520],{},[542,739,741],{"className":513,"code":740,"language":514,"meta":515,"style":515},"> infuse credentials --help\nusage: infuse credentials [-h] [--api-key API_KEY] [--api-key-print]\n                          [--network NETWORK]\n                          [--custom-tools CUSTOM_TOOLS]\n                          [--custom-definitions CUSTOM_DEFINITIONS]\n\nManage Infuse-IoT credentials\n\noptions:\n  -h, --help            show this help message and exit\n  --api-key API_KEY     Set Infuse-IoT API key\n  --api-key-print       Print Infuse-IoT API key\n  --network NETWORK     Load network credentials from file\n  --custom-tools CUSTOM_TOOLS\n                        Location of custom tools\n  --custom-definitions CUSTOM_DEFINITIONS\n                        Location of custom definitions\n",[511,742,743,750,779,789,798,807,811,820,824,828,847,866,880,902,910,924,933],{"__ignoreMap":515},[517,744,745,747],{"class":549,"line":550},[517,746,554],{"class":553},[517,748,749],{"class":557}," infuse credentials --help\n",[517,751,752,754,756,759,761,764,767,770,773,776],{"class":549,"line":561},[517,753,564],{"class":519},[517,755,568],{"class":567},[517,757,758],{"class":567}," credentials",[517,760,574],{"class":557},[517,762,763],{"class":553},"[",[517,765,766],{"class":557},"--api-key API_KEY",[517,768,769],{"class":553},"]",[517,771,772],{"class":553}," [",[517,774,775],{"class":557},"--api-key-print",[517,777,778],{"class":553},"]\n",[517,780,781,784,787],{"class":549,"line":588},[517,782,783],{"class":553},"                          [",[517,785,786],{"class":557},"--network NETWORK",[517,788,778],{"class":553},[517,790,791,793,796],{"class":549,"line":595},[517,792,783],{"class":553},[517,794,795],{"class":557},"--custom-tools CUSTOM_TOOLS",[517,797,778],{"class":553},[517,799,800,802,805],{"class":549,"line":607},[517,801,783],{"class":553},[517,803,804],{"class":557},"--custom-definitions CUSTOM_DEFINITIONS",[517,806,778],{"class":553},[517,808,809],{"class":549,"line":612},[517,810,592],{"emptyLinePlaceholder":591},[517,812,813,815,817],{"class":549,"line":618},[517,814,598],{"class":519},[517,816,601],{"class":567},[517,818,819],{"class":567}," credentials\n",[517,821,822],{"class":549,"line":645},[517,823,592],{"emptyLinePlaceholder":591},[517,825,826],{"class":549,"line":650},[517,827,615],{"class":519},[517,829,830,832,834,837,839,841,843,845],{"class":549,"line":658},[517,831,621],{"class":519},[517,833,624],{"class":567},[517,835,836],{"class":567},"            show",[517,838,630],{"class":567},[517,840,633],{"class":567},[517,842,636],{"class":567},[517,844,639],{"class":567},[517,846,642],{"class":567},[517,848,849,852,855,858,860,863],{"class":549,"line":670},[517,850,851],{"class":519},"  --api-key",[517,853,854],{"class":567}," API_KEY",[517,856,857],{"class":567},"     Set",[517,859,601],{"class":567},[517,861,862],{"class":567}," API",[517,864,865],{"class":567}," key\n",[517,867,868,871,874,876,878],{"class":549,"line":681},[517,869,870],{"class":519},"  --api-key-print",[517,872,873],{"class":567},"       Print",[517,875,601],{"class":567},[517,877,862],{"class":567},[517,879,865],{"class":567},[517,881,882,885,888,891,894,896,899],{"class":549,"line":687},[517,883,884],{"class":519},"  --network",[517,886,887],{"class":567}," NETWORK",[517,889,890],{"class":567},"     Load",[517,892,893],{"class":567}," network",[517,895,758],{"class":567},[517,897,898],{"class":567}," from",[517,900,901],{"class":567}," file\n",[517,903,904,907],{"class":549,"line":705},[517,905,906],{"class":519},"  --custom-tools",[517,908,909],{"class":567}," CUSTOM_TOOLS\n",[517,911,912,915,918,921],{"class":549,"line":719},[517,913,914],{"class":519},"                        Location",[517,916,917],{"class":567}," of",[517,919,920],{"class":567}," custom",[517,922,923],{"class":567}," tools\n",[517,925,927,930],{"class":549,"line":926},16,[517,928,929],{"class":519},"  --custom-definitions",[517,931,932],{"class":567}," CUSTOM_DEFINITIONS\n",[517,934,936,938,940,942],{"class":549,"line":935},17,[517,937,914],{"class":519},[517,939,917],{"class":567},[517,941,920],{"class":567},[517,943,944],{"class":567}," definitions\n",[946,947,948],"caution",{},[494,949,950,951,954],{},"All arguments (excluding ",[511,952,953],{},"--network",") are deprecated.",[956,957,959],"h2",{"id":958},"api-key-management","API Key Management",[494,961,962,963,968],{},"An API key is required to interact with the Infuse-IoT cloud services,\nwhich includes generating the shared secrets required to run\nauthenticated commands on devices (see\n",[529,964,967],{"href":965,"rel":966},"https:\u002F\u002Fdocs.dev.infuse-iot.com\u002Flatest\u002Fplatform\u002Fsecurity_model.html#platform-security-model",[533],"Embedded Security Model","\n).",[494,970,971,972,977],{},"API Keys can be obtained by signing up for an account in the ",[529,973,976],{"href":974,"rel":975},"https:\u002F\u002Fportal.infuse-cloud.io\u002F",[533],"Infuse Portal",".\nThere are two types of API Keys that can be used with the Infuse Python Tools:",[498,979,980,988],{},[501,981,982,987],{},[529,983,986],{"href":984,"rel":985},"https:\u002F\u002Fportal.infuse-cloud.io\u002Faccount\u002Fapi-keys",[533],"Personal API Keys",": For the same permissions you have.",[501,989,990,995],{},[529,991,994],{"href":992,"rel":993},"https:\u002F\u002Fportal.infuse-cloud.io\u002Faccess\u002Fservice-accounts",[533],"Service Account Keys",": Useful for temporary access and\u002For scoped permissions.",[494,997,998],{},"However, these are scoped to a single organisation. As a result, multiple API Keys need to be generated if you access multiple organisations.",[494,1000,1001,1002,1004],{},"To accommodate multiple organisations, you will need to create separate profiles for each organisation using the ",[511,1003,520],{}," subcommand.",[542,1006,1008],{"className":513,"code":1007,"language":514,"meta":515,"style":515},"infuse profile configure --name \u003Cprofile_name> --api-key $API_KEY\n",[511,1009,1010],{"__ignoreMap":515},[517,1011,1012,1015,1017,1020,1023,1026,1029,1032,1034,1037],{"class":549,"line":550},[517,1013,1014],{"class":519},"infuse",[517,1016,571],{"class":567},[517,1018,1019],{"class":567}," configure",[517,1021,1022],{"class":567}," --name",[517,1024,1025],{"class":553}," \u003C",[517,1027,1028],{"class":567},"profile_nam",[517,1030,1031],{"class":557},"e",[517,1033,554],{"class":553},[517,1035,1036],{"class":567}," --api-key",[517,1038,1039],{"class":557}," $API_KEY\n",[1041,1042,1043],"note",{},[494,1044,1045,1046,1050,1051,1054],{},"Substitute your API key for the $API_KEY variable in the above command.\nThe API key ",[1047,1048,1049],"strong",{},"MUST NOT"," include the ",[511,1052,1053],{},"Bearer"," prefix.",[1056,1057,1058],"tip",{},[494,1059,1060,1061,1066],{},"Profiles can be updated by re-running the command with the same ",[511,1062,1063],{"className":513,"language":514,"style":515},[517,1064,1065],{"class":519},"--name",".",[494,1068,1069,1070,1089],{},"To switch between different profiles, use the ",[511,1071,1072,1074,1076,1079,1081,1083,1085,1087],{"className":513,"language":514,"style":515},[517,1073,1014],{"class":519},[517,1075,571],{"class":567},[517,1077,1078],{"class":567}," set",[517,1080,1022],{"class":567},[517,1082,1025],{"class":553},[517,1084,1028],{"class":567},[517,1086,1031],{"class":557},[517,1088,554],{"class":553}," command.",[494,1091,1092,1093,1102],{},"To view the current API Key, use the ",[511,1094,1095,1097,1099],{"className":513,"language":514,"style":515},[517,1096,1014],{"class":519},[517,1098,758],{"class":567},[517,1100,1101],{"class":567}," --api-key-print"," argument.",[956,1104,1106],{"id":1105},"network-keys","Network Keys",[494,1108,1109],{},"To decode network encrypted packets, the base network key must be\nloaded into the credential manager.\nThis only needs to be performed once per install.",[542,1111,1113],{"className":513,"code":1112,"language":514,"meta":515,"style":515},"infuse credentials --network \u002Fpath\u002Fto\u002Fnetwork_key.yaml\n",[511,1114,1115],{"__ignoreMap":515},[517,1116,1117,1119,1121,1124],{"class":549,"line":550},[517,1118,1014],{"class":519},[517,1120,758],{"class":567},[517,1122,1123],{"class":567}," --network",[517,1125,1126],{"class":567}," \u002Fpath\u002Fto\u002Fnetwork_key.yaml\n",[494,1128,1129,1130,1133],{},"New network key files can be generated with the ",[511,1131,1132],{},"infuse-sdk\u002Fscripts\u002Fnetwork_key_gen.py"," helper script from the embedded SDK.",[1056,1135,1136],{},[494,1137,1138],{},"The default network (ID 0) is loaded by default.",[956,1140,1142],{"id":1141},"custom-content","Custom Content",[494,1144,1145],{},"The Python Tools come with the included standard set of definitions (for RPCs, TDFs and KV slots), and commands.\nHowever, your project may have and require customised definitions and scripts or tooling.",[494,1147,1148,1149,1154,1155,1160],{},"To avoid the need to setup the Python Tools in a developer mode and edit the Python Tools to integrate support,\nthe Python tools can import these instead. The ",[511,1150,1151],{"className":513,"language":514,"style":515},[517,1152,1153],{"class":519},"--custom-tools"," and\n",[511,1156,1157],{"className":513,"language":514,"style":515},[517,1158,1159],{"class":519},"--custom-definitions"," flags can each be used to specify a directory which contains the\ncorresponding tools and definitions.",[494,1162,1163],{},"They can be added to a given profile with:",[542,1165,1167],{"className":513,"code":1166,"language":514,"meta":515,"style":515},"infuse profile --name \u003Cprofile_name> --custom-definitions \u002Fpath\u002Fto\u002Fcustom\u002Fdefinitions\ninfuse profile --name \u003Cprofile_name> --custom-tools \u002Fpath\u002Fto\u002Fcustom\u002Ftools\n",[511,1168,1169,1191],{"__ignoreMap":515},[517,1170,1171,1173,1175,1177,1179,1181,1183,1185,1188],{"class":549,"line":550},[517,1172,1014],{"class":519},[517,1174,571],{"class":567},[517,1176,1022],{"class":567},[517,1178,1025],{"class":553},[517,1180,1028],{"class":567},[517,1182,1031],{"class":557},[517,1184,554],{"class":553},[517,1186,1187],{"class":567}," --custom-definitions",[517,1189,1190],{"class":567}," \u002Fpath\u002Fto\u002Fcustom\u002Fdefinitions\n",[517,1192,1193,1195,1197,1199,1201,1203,1205,1207,1210],{"class":549,"line":561},[517,1194,1014],{"class":519},[517,1196,571],{"class":567},[517,1198,1022],{"class":567},[517,1200,1025],{"class":553},[517,1202,1028],{"class":567},[517,1204,1031],{"class":557},[517,1206,554],{"class":553},[517,1208,1209],{"class":567}," --custom-tools",[517,1211,1212],{"class":567}," \u002Fpath\u002Fto\u002Fcustom\u002Ftools\n",[1041,1214,1215],{},[494,1216,1217,1218,1221,1222,1225,1226,1229,1230],{},"Replace ",[511,1219,1220],{},"\u002Fpath\u002Fto\u002Fcustom\u002Fdefinitions"," with the path to your project's ",[511,1223,1224],{},"west cloudgen"," output.\nGenerally this will be under ",[511,1227,1228],{},"workspace\u002Fproject\u002Fgenerated"," e.g. for Infuse-IoT, this is ",[511,1231,1232],{},"~\u002Finfuse\u002Finfuse-sdk\u002Fgenerated",[1041,1234,1235],{},[494,1236,1217,1237,1240,1241,1229,1244],{},[511,1238,1239],{},"\u002Fpath\u002Fto\u002Fcustom\u002Ftools"," with the path to your project's tools folder.\nTypically this will be under ",[511,1242,1243],{},"workspace\u002Fproject\u002Fscripts\u002Ftools",[511,1245,1246],{},"~\u002Finfuse\u002Finfuse-sdk\u002Fscripts\u002Ftools",[1248,1249,1250],"style",{},"html pre.shiki code .sBMFI, html code.shiki .sBMFI{--shiki-light:#E2931D;--shiki-default:#FFCB6B;--shiki-dark:#FFCB6B}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 .sMK4o, html code.shiki .sMK4o{--shiki-light:#39ADB5;--shiki-default:#89DDFF;--shiki-dark:#89DDFF}html pre.shiki code .sTEyZ, html code.shiki .sTEyZ{--shiki-light:#90A4AE;--shiki-default:#EEFFFF;--shiki-dark:#BABED8}html pre.shiki code .sfazB, html code.shiki .sfazB{--shiki-light:#91B859;--shiki-default:#C3E88D;--shiki-dark:#C3E88D}html pre.shiki code .s2Zo4, html code.shiki .s2Zo4{--shiki-light:#6182B8;--shiki-default:#82AAFF;--shiki-dark:#82AAFF}",{"title":515,"searchDepth":588,"depth":561,"links":1252},[1253,1254,1255],{"id":958,"depth":561,"text":959},{"id":1105,"depth":561,"text":1106},{"id":1141,"depth":561,"text":1142},"Store and manage Credentials used by the Infuse-IoT Python Tools.","md",null,{},{"title":160,"description":1256},"641QhGNHrpy2YaehLy5Omwv6WdmkT7XJsjalrp6fqQw",[1263,1265],{"title":113,"path":157,"stem":158,"description":1264,"children":-1},"Outline of the Commands and Features the Python tools have to offer.",{"title":164,"path":165,"stem":166,"description":1266,"children":-1},"Utilise gateway scripts to interact with Infuse-IoT Powered devices.",1791526870151]