[{"data":1,"prerenderedAt":1942},["ShallowReactive",2],{"navigation":3,"\u002Fdocs\u002Finfuse-cloud\u002Fwebhooks":401,"\u002Fdocs\u002Finfuse-cloud\u002Fwebhooks-surround":1937},[4,304,355,382],{"title":5,"icon":6,"path":7,"stem":8,"children":9,"page":303},"Docs","i-lucide-book-open","\u002Fdocs","1.docs",[10,34,65,120,144,158,234,242,267],{"title":11,"path":12,"stem":13,"children":14,"icon":33},"Getting Started","\u002Fdocs\u002Fgetting-started","1.docs\u002F1.getting-started\u002F1.index",[15,17,21,25,29],{"title":11,"path":12,"stem":13,"icon":16},"i-lucide-house",{"title":18,"path":19,"stem":20},"Register a User","\u002Fdocs\u002Fgetting-started\u002Fregister-a-user","1.docs\u002F1.getting-started\u002F2.register-a-user",{"title":22,"path":23,"stem":24},"Platform Overview","\u002Fdocs\u002Fgetting-started\u002Fplatform-overview","1.docs\u002F1.getting-started\u002F3.platform-overview",{"title":26,"path":27,"stem":28},"Create an Organisation","\u002Fdocs\u002Fgetting-started\u002Fcreate-an-organisation","1.docs\u002F1.getting-started\u002F4.create-an-organisation",{"title":30,"path":31,"stem":32},"Quickstarts","\u002Fdocs\u002Fgetting-started\u002Fquickstarts","1.docs\u002F1.getting-started\u002F5.quickstarts","i-lucide-rocket",{"title":35,"path":36,"stem":37,"children":38,"icon":64},"Admin Center","\u002Fdocs\u002Finfuse-cloud","1.docs\u002F2.infuse-cloud\u002F1.index",[39,40,44,48,52,56,60],{"title":35,"path":36,"stem":37},{"title":41,"path":42,"stem":43},"Create or Switch Organisations","\u002Fdocs\u002Finfuse-cloud\u002Fcreate-or-switch-organisations","1.docs\u002F2.infuse-cloud\u002F2.create-or-switch-organisations",{"title":45,"path":46,"stem":47},"Organisation Profile","\u002Fdocs\u002Finfuse-cloud\u002Forganisation-profile","1.docs\u002F2.infuse-cloud\u002F3.organisation-profile",{"title":49,"path":50,"stem":51},"Members and Invitations","\u002Fdocs\u002Finfuse-cloud\u002Fmembers-and-invitations","1.docs\u002F2.infuse-cloud\u002F4.members-and-invitations",{"title":53,"path":54,"stem":55},"Member Roles","\u002Fdocs\u002Finfuse-cloud\u002Fmember-roles","1.docs\u002F2.infuse-cloud\u002F5.member-roles",{"title":57,"path":58,"stem":59},"API Access","\u002Fdocs\u002Finfuse-cloud\u002Fapi-access","1.docs\u002F2.infuse-cloud\u002F6.api-access",{"title":61,"path":62,"stem":63},"Webhooks","\u002Fdocs\u002Finfuse-cloud\u002Fwebhooks","1.docs\u002F2.infuse-cloud\u002F7.webhooks","i-lucide-building-2",{"title":66,"path":67,"stem":68,"children":69,"icon":119},"Infuse-IoT Cloud","\u002Fdocs\u002Finfuse-iot-cloud","1.docs\u002F3.infuse-iot-cloud\u002F1.index",[70,71,75,79,83,87,91,95,99,103,107,111,115],{"title":66,"path":67,"stem":68},{"title":72,"path":73,"stem":74},"Provisioning","\u002Fdocs\u002Finfuse-iot-cloud\u002Fprovisioning","1.docs\u002F3.infuse-iot-cloud\u002F10.provisioning",{"title":76,"path":77,"stem":78},"Connectivity","\u002Fdocs\u002Finfuse-iot-cloud\u002Fconnectivity","1.docs\u002F3.infuse-iot-cloud\u002F11.connectivity",{"title":80,"path":81,"stem":82},"Definitions","\u002Fdocs\u002Finfuse-iot-cloud\u002Fdefinitions","1.docs\u002F3.infuse-iot-cloud\u002F12.definitions",{"title":84,"path":85,"stem":86},"Telemetry","\u002Fdocs\u002Finfuse-iot-cloud\u002Ftelemetry","1.docs\u002F3.infuse-iot-cloud\u002F13.telemetry",{"title":88,"path":89,"stem":90},"Console","\u002Fdocs\u002Finfuse-iot-cloud\u002Fconsole","1.docs\u002F3.infuse-iot-cloud\u002F2.console",{"title":92,"path":93,"stem":94},"Concepts","\u002Fdocs\u002Finfuse-iot-cloud\u002Fconcepts","1.docs\u002F3.infuse-iot-cloud\u002F3.concepts",{"title":96,"path":97,"stem":98},"Boards","\u002Fdocs\u002Finfuse-iot-cloud\u002Fboards","1.docs\u002F3.infuse-iot-cloud\u002F4.boards",{"title":100,"path":101,"stem":102},"Networks","\u002Fdocs\u002Finfuse-iot-cloud\u002Fnetworks","1.docs\u002F3.infuse-iot-cloud\u002F5.networks",{"title":104,"path":105,"stem":106},"Devices","\u002Fdocs\u002Finfuse-iot-cloud\u002Fdevices","1.docs\u002F3.infuse-iot-cloud\u002F6.devices",{"title":108,"path":109,"stem":110},"Device Configuration","\u002Fdocs\u002Finfuse-iot-cloud\u002Fdevice-configuration","1.docs\u002F3.infuse-iot-cloud\u002F7.device-configuration",{"title":112,"path":113,"stem":114},"Applications and Releases","\u002Fdocs\u002Finfuse-iot-cloud\u002Fapplications-and-releases","1.docs\u002F3.infuse-iot-cloud\u002F8.applications-and-releases",{"title":116,"path":117,"stem":118},"Commands","\u002Fdocs\u002Finfuse-iot-cloud\u002Fcommands","1.docs\u002F3.infuse-iot-cloud\u002F9.commands","i-lucide-radio-tower",{"title":121,"path":122,"stem":123,"children":124,"icon":143},"Infuse DB","\u002Fdocs\u002Finfuse-db","1.docs\u002F4.infuse-db\u002F1.index",[125,127,131,135,139],{"title":126,"path":122,"stem":123},"Infuse-DB",{"title":128,"path":129,"stem":130},"Datasets","\u002Fdocs\u002Finfuse-db\u002Fdatasets","1.docs\u002F4.infuse-db\u002F2.datasets",{"title":132,"path":133,"stem":134},"Ingestion","\u002Fdocs\u002Finfuse-db\u002Fingestion","1.docs\u002F4.infuse-db\u002F3.ingestion",{"title":136,"path":137,"stem":138},"Querying","\u002Fdocs\u002Finfuse-db\u002Fquerying","1.docs\u002F4.infuse-db\u002F4.querying",{"title":140,"path":141,"stem":142},"Retention","\u002Fdocs\u002Finfuse-db\u002Fretention","1.docs\u002F4.infuse-db\u002F5.retention","i-lucide-database",{"title":145,"path":146,"stem":147,"children":148,"icon":157},"Infuse-IoT SDK","\u002Fdocs\u002Finfuse-iot-sdk","1.docs\u002F4.infuse-iot-sdk\u002F1.index",[149,150,153],{"title":145,"path":146,"stem":147},{"title":145,"path":151,"stem":152},"\u002Fdocs\u002Finfuse-iot-sdk\u002Fsdk-reference","1.docs\u002F4.infuse-iot-sdk\u002F2.sdk-reference",{"title":154,"path":155,"stem":156},"Python Tools","\u002Fdocs\u002Finfuse-iot-sdk\u002Fpython-tools","1.docs\u002F4.infuse-iot-sdk\u002F3.python-tools","i-lucide-cpu",{"title":159,"path":160,"stem":161,"children":162,"icon":233},"Marketplace","\u002Fdocs\u002Fmarketplace","1.docs\u002F5.marketplace\u002F1.index",[163,165,169,173,201],{"title":164,"path":160,"stem":161},"Infuse-Marketplace",{"title":166,"path":167,"stem":168},"Infuse-Marketplace Instances","\u002Fdocs\u002Fmarketplace\u002Finstances","1.docs\u002F5.marketplace\u002F2.instances",{"title":170,"path":171,"stem":172},"Infuse-Marketplace Roles","\u002Fdocs\u002Fmarketplace\u002Froles","1.docs\u002F5.marketplace\u002F3.roles",{"title":174,"path":175,"stem":176,"children":177,"icon":200},"Developers","\u002Fdocs\u002Fmarketplace\u002Fdevelopers","1.docs\u002F5.marketplace\u002Fdevelopers\u002F1.index",[178,180,184,188,192,196],{"title":179,"path":175,"stem":176},"Infuse-Marketplace Developers",{"title":181,"path":182,"stem":183},"Create an App or Algorithm","\u002Fdocs\u002Fmarketplace\u002Fdevelopers\u002Fcreate-product","1.docs\u002F5.marketplace\u002Fdevelopers\u002F2.create-product",{"title":185,"path":186,"stem":187},"Upload Assets","\u002Fdocs\u002Fmarketplace\u002Fdevelopers\u002Fupload-assets","1.docs\u002F5.marketplace\u002Fdevelopers\u002F3.upload-assets",{"title":189,"path":190,"stem":191},"Releases and Versions","\u002Fdocs\u002Fmarketplace\u002Fdevelopers\u002Freleases-and-versions","1.docs\u002F5.marketplace\u002Fdevelopers\u002F4.releases-and-versions",{"title":193,"path":194,"stem":195},"Pricing","\u002Fdocs\u002Fmarketplace\u002Fdevelopers\u002Fpricing","1.docs\u002F5.marketplace\u002Fdevelopers\u002F5.pricing",{"title":197,"path":198,"stem":199},"Publish an App or Algorithm","\u002Fdocs\u002Fmarketplace\u002Fdevelopers\u002Fpublish-product","1.docs\u002F5.marketplace\u002Fdevelopers\u002F6.publish-product","i-lucide-code-2",{"title":202,"path":203,"stem":204,"children":205,"icon":232},"Providers","\u002Fdocs\u002Fmarketplace\u002Fproviders","1.docs\u002F5.marketplace\u002Fproviders\u002F1.index",[206,208,212,216,220,224,228],{"title":207,"path":203,"stem":204},"Infuse-Marketplace Providers",{"title":209,"path":210,"stem":211},"Discover Apps and Algorithms","\u002Fdocs\u002Fmarketplace\u002Fproviders\u002Fdiscover-products","1.docs\u002F5.marketplace\u002Fproviders\u002F2.discover-products",{"title":213,"path":214,"stem":215},"Create and Manage Listings","\u002Fdocs\u002Fmarketplace\u002Fproviders\u002Fcreate-listings","1.docs\u002F5.marketplace\u002Fproviders\u002F3.create-listings",{"title":217,"path":218,"stem":219},"Build a Storefront","\u002Fdocs\u002Fmarketplace\u002Fproviders\u002Fbuild-a-storefront","1.docs\u002F5.marketplace\u002Fproviders\u002F4.build-a-storefront",{"title":221,"path":222,"stem":223},"Checkout Flow","\u002Fdocs\u002Fmarketplace\u002Fproviders\u002Fcheckout-flow","1.docs\u002F5.marketplace\u002Fproviders\u002F5.checkout-flow",{"title":225,"path":226,"stem":227},"Purchases","\u002Fdocs\u002Fmarketplace\u002Fproviders\u002Fpurchases","1.docs\u002F5.marketplace\u002Fproviders\u002F6.purchases",{"title":229,"path":230,"stem":231},"Install Purchased Apps and Algorithms","\u002Fdocs\u002Fmarketplace\u002Fproviders\u002Finstall-purchased-products","1.docs\u002F5.marketplace\u002Fproviders\u002F7.install-purchased-products","i-lucide-handshake","i-lucide-store",{"title":235,"path":236,"stem":237,"children":238,"icon":241},"Infuse Analytics","\u002Fdocs\u002Finfuse-analytics","1.docs\u002F6.infuse-analytics\u002F1.index",[239],{"title":240,"path":236,"stem":237},"Infuse-Analytics","i-lucide-chart-no-axes-combined",{"title":92,"path":243,"stem":244,"children":245,"icon":266},"\u002Fdocs\u002Fconcepts","1.docs\u002F7.concepts\u002F1.index",[246,247,251,255,258,262],{"title":92,"path":243,"stem":244},{"title":248,"path":249,"stem":250},"Organisations","\u002Fdocs\u002Fconcepts\u002Forganisations","1.docs\u002F7.concepts\u002F2.organisations",{"title":252,"path":253,"stem":254},"Products","\u002Fdocs\u002Fconcepts\u002Fproducts","1.docs\u002F7.concepts\u002F3.products",{"title":104,"path":256,"stem":257},"\u002Fdocs\u002Fconcepts\u002Fdevices","1.docs\u002F7.concepts\u002F5.devices",{"title":259,"path":260,"stem":261},"Entitlements","\u002Fdocs\u002Fconcepts\u002Fentitlements","1.docs\u002F7.concepts\u002F6.entitlements",{"title":263,"path":264,"stem":265},"Infuse-Marketplace Model","\u002Fdocs\u002Fconcepts\u002Fmarketplace-model","1.docs\u002F7.concepts\u002F7.marketplace-model","i-lucide-map",{"title":268,"path":269,"stem":270,"children":271,"icon":302},"IAM & Access","\u002Fdocs\u002Fiam-and-access","1.docs\u002F8.iam-and-access\u002F1.index",[272,274,278,282,286,290,294,298],{"title":273,"path":269,"stem":270},"IAM and Access",{"title":275,"path":276,"stem":277},"Users, Groups, and Roles","\u002Fdocs\u002Fiam-and-access\u002Fusers-groups-and-roles","1.docs\u002F8.iam-and-access\u002F2.users-groups-and-roles",{"title":279,"path":280,"stem":281},"Permissions","\u002Fdocs\u002Fiam-and-access\u002Fpermissions","1.docs\u002F8.iam-and-access\u002F3.permissions",{"title":283,"path":284,"stem":285},"Service Accounts","\u002Fdocs\u002Fiam-and-access\u002Fservice-accounts","1.docs\u002F8.iam-and-access\u002F4.service-accounts",{"title":287,"path":288,"stem":289},"API Tokens","\u002Fdocs\u002Fiam-and-access\u002Fapi-tokens","1.docs\u002F8.iam-and-access\u002F5.api-tokens",{"title":291,"path":292,"stem":293},"Token Exchange","\u002Fdocs\u002Fiam-and-access\u002Ftoken-exchange","1.docs\u002F8.iam-and-access\u002F6.token-exchange",{"title":295,"path":296,"stem":297},"Rotate and Revoke Credentials","\u002Fdocs\u002Fiam-and-access\u002Frotate-and-revoke-credentials","1.docs\u002F8.iam-and-access\u002F7.rotate-and-revoke-credentials",{"title":299,"path":300,"stem":301},"Troubleshooting Auth","\u002Fdocs\u002Fiam-and-access\u002Ftroubleshooting-auth","1.docs\u002F8.iam-and-access\u002F8.troubleshooting-auth","i-lucide-shield-check",false,{"title":305,"path":306,"stem":307,"children":308,"icon":354},"Guides","\u002Fguides","2.guides\u002F1.index",[309,310,322,333,344],{"title":305,"path":306,"stem":307},{"title":311,"path":312,"stem":313,"children":314,"icon":321},"Access","\u002Fguides\u002Faccess","2.guides\u002Faccess\u002F1.index",[315,317],{"title":316,"path":312,"stem":313},"Access Guides",{"title":318,"path":319,"stem":320},"Create an API Token","\u002Fguides\u002Faccess\u002Fcreate-an-api-token","2.guides\u002Faccess\u002F2.create-an-api-token","i-lucide-key-round",{"title":323,"path":324,"stem":325,"children":326,"icon":143},"Data","\u002Fguides\u002Fdata","2.guides\u002Fdata\u002F1.index",[327,329],{"title":328,"path":324,"stem":325},"Data Guides",{"title":330,"path":331,"stem":332},"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":334,"path":335,"stem":336,"children":337,"icon":119},"IoT","\u002Fguides\u002Fiot","2.guides\u002Fiot\u002F1.index",[338,340],{"title":339,"path":335,"stem":336},"IoT Guides",{"title":341,"path":342,"stem":343},"Connect an IoT Device","\u002Fguides\u002Fiot\u002Fconnect-a-device","2.guides\u002Fiot\u002F2.connect-a-device",{"title":159,"path":345,"stem":346,"children":347,"icon":233},"\u002Fguides\u002Fmarketplace","2.guides\u002Fmarketplace\u002F1.index",[348,350],{"title":349,"path":345,"stem":346},"Infuse-Marketplace Guides",{"title":351,"path":352,"stem":353},"Build an Infuse-Marketplace Storefront","\u002Fguides\u002Fmarketplace\u002Fbuild-a-storefront","2.guides\u002Fmarketplace\u002F2.build-a-storefront","i-lucide-route",{"title":356,"path":357,"stem":358,"children":359,"icon":381},"API Reference","\u002Fapi-reference","3.api-reference\u002F1.index",[360,361,365,369,373,377],{"title":356,"path":357,"stem":358},{"title":362,"path":363,"stem":364},"Admin API","\u002Fapi-reference\u002Fcloud","3.api-reference\u002F2.cloud",{"title":366,"path":367,"stem":368},"Infuse-Marketplace API","\u002Fapi-reference\u002Fmarketplace","3.api-reference\u002F3.marketplace",{"title":370,"path":371,"stem":372},"IAM API","\u002Fapi-reference\u002Fiam","3.api-reference\u002F4.iam",{"title":374,"path":375,"stem":376},"Infuse-IoT Cloud API","\u002Fapi-reference\u002Fiot","3.api-reference\u002F5.iot",{"title":378,"path":379,"stem":380},"Infuse-DB API","\u002Fapi-reference\u002Fdb","3.api-reference\u002F6.db","i-lucide-braces",{"title":383,"path":384,"stem":385,"children":386,"icon":400},"Resources","\u002Fresources","4.resources\u002F1.index",[387,388,392,396],{"title":383,"path":384,"stem":385},{"title":389,"path":390,"stem":391},"SDKs","\u002Fresources\u002Fsdks","4.resources\u002F2.sdks",{"title":393,"path":394,"stem":395},"OpenAPI Specs","\u002Fresources\u002Fopenapi-specs","4.resources\u002F3.openapi-specs",{"title":397,"path":398,"stem":399},"Examples","\u002Fresources\u002Fexamples","4.resources\u002F4.examples","i-lucide-folder-open",{"id":402,"title":61,"body":403,"description":1931,"extension":1932,"links":1933,"meta":1934,"navigation":758,"path":62,"seo":1935,"stem":63,"__hash__":1936},"docs\u002F1.docs\u002F2.infuse-cloud\u002F7.webhooks.md",{"type":404,"value":405,"toc":1918},"minimark",[406,410,420,425,428,431,444,447,451,454,505,511,515,549,552,556,559,562,587,590,594,597,652,658,662,669,672,711,714,1154,1157,1161,1166,1674,1677,1681,1692,1709,1712,1715,1719,1726,1729,1755,1758,1815,1818,1822,1828,1831,1856,1863,1866,1884,1888,1914],[407,408,409],"p",{},"Use webhooks to receive Infuse platform events in your own systems. A webhook endpoint belongs to an organisation and can subscribe to one or more event types.",[407,411,412,413,416,417,419],{},"Webhooks are configured from ",[414,415,35],"strong",{}," > ",[414,418,61],{},".",[421,422,424],"h2",{"id":423},"when-to-use-webhooks","When to Use Webhooks",[407,426,427],{},"Use webhooks when your backend needs to react to Infuse activity without polling APIs.",[407,429,430],{},"Common examples:",[432,433,434,438,441],"ul",{},[435,436,437],"li",{},"update an internal entitlement or licensing system after a marketplace purchase,",[435,439,440],{},"notify an operations workflow when a purchase state changes,",[435,442,443],{},"mirror Infuse events into your own audit or analytics pipeline.",[407,445,446],{},"Webhooks are platform-level integrations. Infuse-Marketplace is currently the first event source, but webhook endpoints are managed at the organisation level.",[421,448,450],{"id":449},"available-events","Available Events",[407,452,453],{},"The initial Infuse-Marketplace event types are:",[455,456,457,470],"table",{},[458,459,460],"thead",{},[461,462,463,467],"tr",{},[464,465,466],"th",{},"Event type",[464,468,469],{},"Description",[471,472,473,485,495],"tbody",{},[461,474,475,482],{},[476,477,478],"td",{},[479,480,481],"code",{},"marketplace.purchase.completed",[476,483,484],{},"A marketplace purchase was completed and activated.",[461,486,487,492],{},[476,488,489],{},[479,490,491],{},"marketplace.purchase.refunded",[476,493,494],{},"A marketplace purchase was refunded.",[461,496,497,502],{},[476,498,499],{},[479,500,501],{},"marketplace.purchase.revoked",[476,503,504],{},"A marketplace purchase was revoked.",[407,506,507,508,510],{},"Only ",[479,509,481],{}," is emitted today.",[421,512,514],{"id":513},"create-an-endpoint","Create an Endpoint",[516,517,518,525,531,534,537,540,543,546],"ol",{},[435,519,520,521,416,523,419],{},"Open ",[414,522,35],{},[414,524,61],{},[435,526,527,528,419],{},"Select ",[414,529,530],{},"Create endpoint",[435,532,533],{},"Enter your receiver URL.",[435,535,536],{},"Optionally add a description.",[435,538,539],{},"Leave the endpoint enabled, unless you want to create it without receiving events yet.",[435,541,542],{},"Select at least one event type.",[435,544,545],{},"Save the endpoint.",[435,547,548],{},"Copy the signing secret immediately and store it in your backend secret manager.",[407,550,551],{},"The signing secret is only shown once after creation. It cannot be retrieved again later.",[421,553,555],{"id":554},"endpoint-url-requirements","Endpoint URL Requirements",[407,557,558],{},"Production webhook endpoints must use HTTPS.",[407,560,561],{},"Your endpoint should:",[432,563,564,571,574,581,584],{},[435,565,566,567,570],{},"accept ",[479,568,569],{},"POST"," requests,",[435,572,573],{},"read a JSON request body,",[435,575,576,577,580],{},"return a ",[479,578,579],{},"2xx"," status quickly after accepting the event,",[435,582,583],{},"verify the Infuse signature before processing the event,",[435,585,586],{},"be idempotent, because a delivery can be retried or replayed.",[407,588,589],{},"If your processing is slow, acknowledge the webhook first and queue the work internally.",[421,591,593],{"id":592},"request-headers","Request Headers",[407,595,596],{},"Infuse sends these headers with each webhook delivery:",[455,598,599,608],{},[458,600,601],{},[461,602,603,606],{},[464,604,605],{},"Header",[464,607,469],{},[471,609,610,620,632,642],{},[461,611,612,617],{},[476,613,614],{},[479,615,616],{},"Infuse-Webhook-Id",[476,618,619],{},"Unique webhook event ID.",[461,621,622,627],{},[476,623,624],{},[479,625,626],{},"Infuse-Webhook-Event-Type",[476,628,629,630,419],{},"Event type, such as ",[479,631,481],{},[461,633,634,639],{},[476,635,636],{},[479,637,638],{},"Infuse-Webhook-Timestamp",[476,640,641],{},"Unix timestamp in seconds used in the signature payload.",[461,643,644,649],{},[476,645,646],{},[479,647,648],{},"Infuse-Webhook-Signature",[476,650,651],{},"Lowercase hex HMAC-SHA256 signature.",[407,653,654,655,657],{},"Use ",[479,656,616],{}," as an idempotency key when recording processed events.",[421,659,661],{"id":660},"verify-signatures","Verify Signatures",[407,663,664,665,668],{},"Each endpoint has a signing secret that starts with ",[479,666,667],{},"whsec_",". Store the raw secret securely.",[407,670,671],{},"To verify a delivery:",[516,673,674,677,682,686,693,699,705],{},[435,675,676],{},"Read the raw request body exactly as received.",[435,678,679,680,419],{},"Read ",[479,681,638],{},[435,683,679,684,419],{},[479,685,648],{},[435,687,688,689,692],{},"Hash the raw ",[479,690,691],{},"whsec_..."," secret with SHA-256 and hex-encode it.",[435,694,695,696,419],{},"Build the signed payload as ",[479,697,698],{},"{timestamp}.{rawBody}",[435,700,701,702,419],{},"Compute ",[479,703,704],{},"HMACSHA256(secretHash, signedPayload)",[435,706,707,708,710],{},"Compare the computed lowercase hex signature with ",[479,709,648],{}," using a constant-time comparison.",[407,712,713],{},"Example in Node.js:",[715,716,721],"pre",{"className":717,"code":718,"language":719,"meta":720,"style":720},"language-ts shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","import crypto from 'node:crypto';\n\nexport function verifyInfuseWebhook({\n  rawBody,\n  timestamp,\n  signature,\n  signingSecret,\n}: {\n  rawBody: string;\n  timestamp: string;\n  signature: string;\n  signingSecret: string;\n}) {\n  const secretHash = crypto\n    .createHash('sha256')\n    .update(signingSecret, 'utf8')\n    .digest('hex');\n\n  const expected = crypto\n    .createHmac('sha256', secretHash)\n    .update(`${timestamp}.${rawBody}`, 'utf8')\n    .digest('hex');\n\n  return crypto.timingSafeEqual(\n    Buffer.from(expected, 'utf8'),\n    Buffer.from(signature.toLowerCase(), 'utf8'),\n  );\n}\n","ts","",[479,722,723,753,760,777,787,795,803,811,820,835,846,857,868,876,891,913,938,960,965,977,999,1038,1057,1062,1079,1106,1140,1148],{"__ignoreMap":720},[724,725,728,732,736,739,743,747,750],"span",{"class":726,"line":727},"line",1,[724,729,731],{"class":730},"s7zQu","import",[724,733,735],{"class":734},"sTEyZ"," crypto ",[724,737,738],{"class":730},"from",[724,740,742],{"class":741},"sMK4o"," '",[724,744,746],{"class":745},"sfazB","node:crypto",[724,748,749],{"class":741},"'",[724,751,752],{"class":741},";\n",[724,754,756],{"class":726,"line":755},2,[724,757,759],{"emptyLinePlaceholder":758},true,"\n",[724,761,763,766,770,774],{"class":726,"line":762},3,[724,764,765],{"class":730},"export",[724,767,769],{"class":768},"spNyl"," function",[724,771,773],{"class":772},"s2Zo4"," verifyInfuseWebhook",[724,775,776],{"class":741},"({\n",[724,778,780,784],{"class":726,"line":779},4,[724,781,783],{"class":782},"sHdIc","  rawBody",[724,785,786],{"class":741},",\n",[724,788,790,793],{"class":726,"line":789},5,[724,791,792],{"class":782},"  timestamp",[724,794,786],{"class":741},[724,796,798,801],{"class":726,"line":797},6,[724,799,800],{"class":782},"  signature",[724,802,786],{"class":741},[724,804,806,809],{"class":726,"line":805},7,[724,807,808],{"class":782},"  signingSecret",[724,810,786],{"class":741},[724,812,814,817],{"class":726,"line":813},8,[724,815,816],{"class":741},"}:",[724,818,819],{"class":741}," {\n",[724,821,823,826,829,833],{"class":726,"line":822},9,[724,824,783],{"class":825},"swJcz",[724,827,828],{"class":741},":",[724,830,832],{"class":831},"sBMFI"," string",[724,834,752],{"class":741},[724,836,838,840,842,844],{"class":726,"line":837},10,[724,839,792],{"class":825},[724,841,828],{"class":741},[724,843,832],{"class":831},[724,845,752],{"class":741},[724,847,849,851,853,855],{"class":726,"line":848},11,[724,850,800],{"class":825},[724,852,828],{"class":741},[724,854,832],{"class":831},[724,856,752],{"class":741},[724,858,860,862,864,866],{"class":726,"line":859},12,[724,861,808],{"class":825},[724,863,828],{"class":741},[724,865,832],{"class":831},[724,867,752],{"class":741},[724,869,871,874],{"class":726,"line":870},13,[724,872,873],{"class":741},"})",[724,875,819],{"class":741},[724,877,879,882,885,888],{"class":726,"line":878},14,[724,880,881],{"class":768},"  const",[724,883,884],{"class":734}," secretHash",[724,886,887],{"class":741}," =",[724,889,890],{"class":734}," crypto\n",[724,892,894,897,900,903,905,908,910],{"class":726,"line":893},15,[724,895,896],{"class":741},"    .",[724,898,899],{"class":772},"createHash",[724,901,902],{"class":825},"(",[724,904,749],{"class":741},[724,906,907],{"class":745},"sha256",[724,909,749],{"class":741},[724,911,912],{"class":825},")\n",[724,914,916,918,921,923,926,929,931,934,936],{"class":726,"line":915},16,[724,917,896],{"class":741},[724,919,920],{"class":772},"update",[724,922,902],{"class":825},[724,924,925],{"class":734},"signingSecret",[724,927,928],{"class":741},",",[724,930,742],{"class":741},[724,932,933],{"class":745},"utf8",[724,935,749],{"class":741},[724,937,912],{"class":825},[724,939,941,943,946,948,950,953,955,958],{"class":726,"line":940},17,[724,942,896],{"class":741},[724,944,945],{"class":772},"digest",[724,947,902],{"class":825},[724,949,749],{"class":741},[724,951,952],{"class":745},"hex",[724,954,749],{"class":741},[724,956,957],{"class":825},")",[724,959,752],{"class":741},[724,961,963],{"class":726,"line":962},18,[724,964,759],{"emptyLinePlaceholder":758},[724,966,968,970,973,975],{"class":726,"line":967},19,[724,969,881],{"class":768},[724,971,972],{"class":734}," expected",[724,974,887],{"class":741},[724,976,890],{"class":734},[724,978,980,982,985,987,989,991,993,995,997],{"class":726,"line":979},20,[724,981,896],{"class":741},[724,983,984],{"class":772},"createHmac",[724,986,902],{"class":825},[724,988,749],{"class":741},[724,990,907],{"class":745},[724,992,749],{"class":741},[724,994,928],{"class":741},[724,996,884],{"class":734},[724,998,912],{"class":825},[724,1000,1002,1004,1006,1008,1011,1014,1017,1019,1022,1025,1028,1030,1032,1034,1036],{"class":726,"line":1001},21,[724,1003,896],{"class":741},[724,1005,920],{"class":772},[724,1007,902],{"class":825},[724,1009,1010],{"class":741},"`${",[724,1012,1013],{"class":734},"timestamp",[724,1015,1016],{"class":741},"}",[724,1018,419],{"class":745},[724,1020,1021],{"class":741},"${",[724,1023,1024],{"class":734},"rawBody",[724,1026,1027],{"class":741},"}`",[724,1029,928],{"class":741},[724,1031,742],{"class":741},[724,1033,933],{"class":745},[724,1035,749],{"class":741},[724,1037,912],{"class":825},[724,1039,1041,1043,1045,1047,1049,1051,1053,1055],{"class":726,"line":1040},22,[724,1042,896],{"class":741},[724,1044,945],{"class":772},[724,1046,902],{"class":825},[724,1048,749],{"class":741},[724,1050,952],{"class":745},[724,1052,749],{"class":741},[724,1054,957],{"class":825},[724,1056,752],{"class":741},[724,1058,1060],{"class":726,"line":1059},23,[724,1061,759],{"emptyLinePlaceholder":758},[724,1063,1065,1068,1071,1073,1076],{"class":726,"line":1064},24,[724,1066,1067],{"class":730},"  return",[724,1069,1070],{"class":734}," crypto",[724,1072,419],{"class":741},[724,1074,1075],{"class":772},"timingSafeEqual",[724,1077,1078],{"class":825},"(\n",[724,1080,1082,1085,1087,1089,1091,1094,1096,1098,1100,1102,1104],{"class":726,"line":1081},25,[724,1083,1084],{"class":734},"    Buffer",[724,1086,419],{"class":741},[724,1088,738],{"class":772},[724,1090,902],{"class":825},[724,1092,1093],{"class":734},"expected",[724,1095,928],{"class":741},[724,1097,742],{"class":741},[724,1099,933],{"class":745},[724,1101,749],{"class":741},[724,1103,957],{"class":825},[724,1105,786],{"class":741},[724,1107,1109,1111,1113,1115,1117,1120,1122,1125,1128,1130,1132,1134,1136,1138],{"class":726,"line":1108},26,[724,1110,1084],{"class":734},[724,1112,419],{"class":741},[724,1114,738],{"class":772},[724,1116,902],{"class":825},[724,1118,1119],{"class":734},"signature",[724,1121,419],{"class":741},[724,1123,1124],{"class":772},"toLowerCase",[724,1126,1127],{"class":825},"()",[724,1129,928],{"class":741},[724,1131,742],{"class":741},[724,1133,933],{"class":745},[724,1135,749],{"class":741},[724,1137,957],{"class":825},[724,1139,786],{"class":741},[724,1141,1143,1146],{"class":726,"line":1142},27,[724,1144,1145],{"class":825},"  )",[724,1147,752],{"class":741},[724,1149,1151],{"class":726,"line":1150},28,[724,1152,1153],{"class":741},"}\n",[407,1155,1156],{},"Do not parse and re-stringify the JSON before verifying. Use the raw request body.",[421,1158,1160],{"id":1159},"example-payload","Example Payload",[407,1162,1163,1165],{},[479,1164,481],{}," sends purchase, buyer, device, payment, and marketplace item information.",[715,1167,1171],{"className":1168,"code":1169,"language":1170,"meta":720,"style":720},"language-json shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","{\n  \"id\": \"5051eeeb-acf1-4793-80cf-5559b97cd976\",\n  \"purchaseId\": \"5051eeeb-acf1-4793-80cf-5559b97cd976\",\n  \"subject\": \"marketplace_purchase\u002Flocal-test-20260603040716\",\n  \"status\": \"active\",\n  \"livemode\": false,\n  \"buyer\": {\n    \"organisationId\": \"22222222-2222-2222-2222-222222222222\",\n    \"userId\": \"0560272b-98b7-49e7-821c-0eba9f0a4b8b\",\n    \"email\": \"user@example.com\"\n  },\n  \"device\": {\n    \"id\": \"device-001\",\n    \"serialNumber\": \"DEVICE-001\"\n  },\n  \"marketplace\": {\n    \"name\": \"Example Infuse-Marketplace Item\",\n    \"itemId\": \"fad3247d-edc1-4cf8-952d-d4c12406d7d5\",\n    \"listingId\": \"40c5016c-390b-4b3a-b1e2-a881788d5014\",\n    \"offeringId\": \"30162bd0-7683-444c-8208-cf8eee8729b5\"\n  },\n  \"payment\": {\n    \"currency\": \"USD\",\n    \"provider\": \"stripe\",\n    \"totalAmountPaid\": 12.34,\n    \"providerListingMarkup\": 1.23,\n    \"providerPaymentReference\": \"payment-reference\",\n    \"providerCustomerReference\": \"customer-reference\"\n  },\n  \"occurredAtUtc\": \"2026-06-03T04:07:16.711787+00:00\",\n  \"activatedAtUtc\": \"2026-06-03T04:07:16.711787+00:00\"\n}\n","json",[479,1172,1173,1178,1201,1220,1240,1260,1274,1287,1308,1328,1347,1352,1365,1384,1402,1406,1419,1439,1459,1479,1497,1501,1514,1534,1554,1571,1587,1607,1625,1630,1651,1669],{"__ignoreMap":720},[724,1174,1175],{"class":726,"line":727},[724,1176,1177],{"class":741},"{\n",[724,1179,1180,1183,1186,1189,1191,1194,1197,1199],{"class":726,"line":755},[724,1181,1182],{"class":741},"  \"",[724,1184,1185],{"class":768},"id",[724,1187,1188],{"class":741},"\"",[724,1190,828],{"class":741},[724,1192,1193],{"class":741}," \"",[724,1195,1196],{"class":745},"5051eeeb-acf1-4793-80cf-5559b97cd976",[724,1198,1188],{"class":741},[724,1200,786],{"class":741},[724,1202,1203,1205,1208,1210,1212,1214,1216,1218],{"class":726,"line":762},[724,1204,1182],{"class":741},[724,1206,1207],{"class":768},"purchaseId",[724,1209,1188],{"class":741},[724,1211,828],{"class":741},[724,1213,1193],{"class":741},[724,1215,1196],{"class":745},[724,1217,1188],{"class":741},[724,1219,786],{"class":741},[724,1221,1222,1224,1227,1229,1231,1233,1236,1238],{"class":726,"line":779},[724,1223,1182],{"class":741},[724,1225,1226],{"class":768},"subject",[724,1228,1188],{"class":741},[724,1230,828],{"class":741},[724,1232,1193],{"class":741},[724,1234,1235],{"class":745},"marketplace_purchase\u002Flocal-test-20260603040716",[724,1237,1188],{"class":741},[724,1239,786],{"class":741},[724,1241,1242,1244,1247,1249,1251,1253,1256,1258],{"class":726,"line":789},[724,1243,1182],{"class":741},[724,1245,1246],{"class":768},"status",[724,1248,1188],{"class":741},[724,1250,828],{"class":741},[724,1252,1193],{"class":741},[724,1254,1255],{"class":745},"active",[724,1257,1188],{"class":741},[724,1259,786],{"class":741},[724,1261,1262,1264,1267,1269,1271],{"class":726,"line":797},[724,1263,1182],{"class":741},[724,1265,1266],{"class":768},"livemode",[724,1268,1188],{"class":741},[724,1270,828],{"class":741},[724,1272,1273],{"class":741}," false,\n",[724,1275,1276,1278,1281,1283,1285],{"class":726,"line":805},[724,1277,1182],{"class":741},[724,1279,1280],{"class":768},"buyer",[724,1282,1188],{"class":741},[724,1284,828],{"class":741},[724,1286,819],{"class":741},[724,1288,1289,1292,1295,1297,1299,1301,1304,1306],{"class":726,"line":813},[724,1290,1291],{"class":741},"    \"",[724,1293,1294],{"class":831},"organisationId",[724,1296,1188],{"class":741},[724,1298,828],{"class":741},[724,1300,1193],{"class":741},[724,1302,1303],{"class":745},"22222222-2222-2222-2222-222222222222",[724,1305,1188],{"class":741},[724,1307,786],{"class":741},[724,1309,1310,1312,1315,1317,1319,1321,1324,1326],{"class":726,"line":822},[724,1311,1291],{"class":741},[724,1313,1314],{"class":831},"userId",[724,1316,1188],{"class":741},[724,1318,828],{"class":741},[724,1320,1193],{"class":741},[724,1322,1323],{"class":745},"0560272b-98b7-49e7-821c-0eba9f0a4b8b",[724,1325,1188],{"class":741},[724,1327,786],{"class":741},[724,1329,1330,1332,1335,1337,1339,1341,1344],{"class":726,"line":837},[724,1331,1291],{"class":741},[724,1333,1334],{"class":831},"email",[724,1336,1188],{"class":741},[724,1338,828],{"class":741},[724,1340,1193],{"class":741},[724,1342,1343],{"class":745},"user@example.com",[724,1345,1346],{"class":741},"\"\n",[724,1348,1349],{"class":726,"line":848},[724,1350,1351],{"class":741},"  },\n",[724,1353,1354,1356,1359,1361,1363],{"class":726,"line":859},[724,1355,1182],{"class":741},[724,1357,1358],{"class":768},"device",[724,1360,1188],{"class":741},[724,1362,828],{"class":741},[724,1364,819],{"class":741},[724,1366,1367,1369,1371,1373,1375,1377,1380,1382],{"class":726,"line":870},[724,1368,1291],{"class":741},[724,1370,1185],{"class":831},[724,1372,1188],{"class":741},[724,1374,828],{"class":741},[724,1376,1193],{"class":741},[724,1378,1379],{"class":745},"device-001",[724,1381,1188],{"class":741},[724,1383,786],{"class":741},[724,1385,1386,1388,1391,1393,1395,1397,1400],{"class":726,"line":878},[724,1387,1291],{"class":741},[724,1389,1390],{"class":831},"serialNumber",[724,1392,1188],{"class":741},[724,1394,828],{"class":741},[724,1396,1193],{"class":741},[724,1398,1399],{"class":745},"DEVICE-001",[724,1401,1346],{"class":741},[724,1403,1404],{"class":726,"line":893},[724,1405,1351],{"class":741},[724,1407,1408,1410,1413,1415,1417],{"class":726,"line":915},[724,1409,1182],{"class":741},[724,1411,1412],{"class":768},"marketplace",[724,1414,1188],{"class":741},[724,1416,828],{"class":741},[724,1418,819],{"class":741},[724,1420,1421,1423,1426,1428,1430,1432,1435,1437],{"class":726,"line":940},[724,1422,1291],{"class":741},[724,1424,1425],{"class":831},"name",[724,1427,1188],{"class":741},[724,1429,828],{"class":741},[724,1431,1193],{"class":741},[724,1433,1434],{"class":745},"Example Infuse-Marketplace Item",[724,1436,1188],{"class":741},[724,1438,786],{"class":741},[724,1440,1441,1443,1446,1448,1450,1452,1455,1457],{"class":726,"line":962},[724,1442,1291],{"class":741},[724,1444,1445],{"class":831},"itemId",[724,1447,1188],{"class":741},[724,1449,828],{"class":741},[724,1451,1193],{"class":741},[724,1453,1454],{"class":745},"fad3247d-edc1-4cf8-952d-d4c12406d7d5",[724,1456,1188],{"class":741},[724,1458,786],{"class":741},[724,1460,1461,1463,1466,1468,1470,1472,1475,1477],{"class":726,"line":967},[724,1462,1291],{"class":741},[724,1464,1465],{"class":831},"listingId",[724,1467,1188],{"class":741},[724,1469,828],{"class":741},[724,1471,1193],{"class":741},[724,1473,1474],{"class":745},"40c5016c-390b-4b3a-b1e2-a881788d5014",[724,1476,1188],{"class":741},[724,1478,786],{"class":741},[724,1480,1481,1483,1486,1488,1490,1492,1495],{"class":726,"line":979},[724,1482,1291],{"class":741},[724,1484,1485],{"class":831},"offeringId",[724,1487,1188],{"class":741},[724,1489,828],{"class":741},[724,1491,1193],{"class":741},[724,1493,1494],{"class":745},"30162bd0-7683-444c-8208-cf8eee8729b5",[724,1496,1346],{"class":741},[724,1498,1499],{"class":726,"line":1001},[724,1500,1351],{"class":741},[724,1502,1503,1505,1508,1510,1512],{"class":726,"line":1040},[724,1504,1182],{"class":741},[724,1506,1507],{"class":768},"payment",[724,1509,1188],{"class":741},[724,1511,828],{"class":741},[724,1513,819],{"class":741},[724,1515,1516,1518,1521,1523,1525,1527,1530,1532],{"class":726,"line":1059},[724,1517,1291],{"class":741},[724,1519,1520],{"class":831},"currency",[724,1522,1188],{"class":741},[724,1524,828],{"class":741},[724,1526,1193],{"class":741},[724,1528,1529],{"class":745},"USD",[724,1531,1188],{"class":741},[724,1533,786],{"class":741},[724,1535,1536,1538,1541,1543,1545,1547,1550,1552],{"class":726,"line":1064},[724,1537,1291],{"class":741},[724,1539,1540],{"class":831},"provider",[724,1542,1188],{"class":741},[724,1544,828],{"class":741},[724,1546,1193],{"class":741},[724,1548,1549],{"class":745},"stripe",[724,1551,1188],{"class":741},[724,1553,786],{"class":741},[724,1555,1556,1558,1561,1563,1565,1569],{"class":726,"line":1081},[724,1557,1291],{"class":741},[724,1559,1560],{"class":831},"totalAmountPaid",[724,1562,1188],{"class":741},[724,1564,828],{"class":741},[724,1566,1568],{"class":1567},"sbssI"," 12.34",[724,1570,786],{"class":741},[724,1572,1573,1575,1578,1580,1582,1585],{"class":726,"line":1108},[724,1574,1291],{"class":741},[724,1576,1577],{"class":831},"providerListingMarkup",[724,1579,1188],{"class":741},[724,1581,828],{"class":741},[724,1583,1584],{"class":1567}," 1.23",[724,1586,786],{"class":741},[724,1588,1589,1591,1594,1596,1598,1600,1603,1605],{"class":726,"line":1142},[724,1590,1291],{"class":741},[724,1592,1593],{"class":831},"providerPaymentReference",[724,1595,1188],{"class":741},[724,1597,828],{"class":741},[724,1599,1193],{"class":741},[724,1601,1602],{"class":745},"payment-reference",[724,1604,1188],{"class":741},[724,1606,786],{"class":741},[724,1608,1609,1611,1614,1616,1618,1620,1623],{"class":726,"line":1150},[724,1610,1291],{"class":741},[724,1612,1613],{"class":831},"providerCustomerReference",[724,1615,1188],{"class":741},[724,1617,828],{"class":741},[724,1619,1193],{"class":741},[724,1621,1622],{"class":745},"customer-reference",[724,1624,1346],{"class":741},[724,1626,1628],{"class":726,"line":1627},29,[724,1629,1351],{"class":741},[724,1631,1633,1635,1638,1640,1642,1644,1647,1649],{"class":726,"line":1632},30,[724,1634,1182],{"class":741},[724,1636,1637],{"class":768},"occurredAtUtc",[724,1639,1188],{"class":741},[724,1641,828],{"class":741},[724,1643,1193],{"class":741},[724,1645,1646],{"class":745},"2026-06-03T04:07:16.711787+00:00",[724,1648,1188],{"class":741},[724,1650,786],{"class":741},[724,1652,1654,1656,1659,1661,1663,1665,1667],{"class":726,"line":1653},31,[724,1655,1182],{"class":741},[724,1657,1658],{"class":768},"activatedAtUtc",[724,1660,1188],{"class":741},[724,1662,828],{"class":741},[724,1664,1193],{"class":741},[724,1666,1646],{"class":745},[724,1668,1346],{"class":741},[724,1670,1672],{"class":726,"line":1671},32,[724,1673,1153],{"class":741},[407,1675,1676],{},"Treat payload fields as event data for your integration. Use Infuse APIs as the source of truth if you need to fetch the latest purchase or device state.",[421,1678,1680],{"id":1679},"edit-an-endpoint","Edit an Endpoint",[407,1682,1683,1684,416,1686,416,1688,1691],{},"From ",[414,1685,35],{},[414,1687,61],{},[414,1689,1690],{},"Endpoints",", you can:",[432,1693,1694,1697,1700,1703,1706],{},[435,1695,1696],{},"update the endpoint URL or description,",[435,1698,1699],{},"enable or disable deliveries,",[435,1701,1702],{},"change subscribed events,",[435,1704,1705],{},"rotate the signing secret,",[435,1707,1708],{},"delete the endpoint.",[407,1710,1711],{},"Rotating the signing secret shows the new secret once. Update your receiver before or immediately after rotating so deliveries continue to verify.",[407,1713,1714],{},"Disabling an endpoint stops new deliveries to that endpoint. It does not delete delivery history.",[421,1716,1718],{"id":1717},"delivery-history","Delivery History",[407,1720,1721,1722,1725],{},"Open the ",[414,1723,1724],{},"Deliveries"," tab to review webhook delivery attempts.",[407,1727,1728],{},"The table shows:",[432,1730,1731,1734,1737,1740,1743,1746,1749,1752],{},[435,1732,1733],{},"event type,",[435,1735,1736],{},"subject,",[435,1738,1739],{},"endpoint URL,",[435,1741,1742],{},"delivery status,",[435,1744,1745],{},"attempt count,",[435,1747,1748],{},"last attempt time,",[435,1750,1751],{},"next retry time,",[435,1753,1754],{},"response code.",[407,1756,1757],{},"Delivery statuses are:",[455,1759,1760,1770],{},[458,1761,1762],{},[461,1763,1764,1767],{},[464,1765,1766],{},"Status",[464,1768,1769],{},"Meaning",[471,1771,1772,1782,1795,1805],{},[461,1773,1774,1779],{},[476,1775,1776],{},[479,1777,1778],{},"Pending",[476,1780,1781],{},"The delivery is queued or waiting for its next attempt.",[461,1783,1784,1789],{},[476,1785,1786],{},[479,1787,1788],{},"Succeeded",[476,1790,1791,1792,1794],{},"The endpoint returned a ",[479,1793,579],{}," response.",[461,1796,1797,1802],{},[476,1798,1799],{},[479,1800,1801],{},"Failed",[476,1803,1804],{},"The last attempt failed and another retry may be scheduled.",[461,1806,1807,1812],{},[476,1808,1809],{},[479,1810,1811],{},"Exhausted",[476,1813,1814],{},"Infuse will not retry automatically.",[407,1816,1817],{},"Failed and exhausted deliveries can be replayed from the delivery table.",[421,1819,1821],{"id":1820},"retry-behavior","Retry Behavior",[407,1823,1824,1825,1827],{},"Infuse treats ",[479,1826,579],{}," responses as successful.",[407,1829,1830],{},"The following failures are retryable:",[432,1832,1833,1836,1841,1846,1851],{},[435,1834,1835],{},"timeout or network failure,",[435,1837,1838,928],{},[479,1839,1840],{},"408",[435,1842,1843,928],{},[479,1844,1845],{},"409",[435,1847,1848,928],{},[479,1849,1850],{},"429",[435,1852,1853,419],{},[479,1854,1855],{},"5xx",[407,1857,1858,1859,1862],{},"Non-retryable responses, such as ",[479,1860,1861],{},"400",", are marked failed without normal automatic retry.",[407,1864,1865],{},"Your receiver should return:",[432,1867,1868,1873,1879],{},[435,1869,1870,1872],{},[479,1871,579],{}," only after it has accepted the event,",[435,1874,1875,1878],{},[479,1876,1877],{},"4xx"," when the request should not be retried,",[435,1880,1881,1883],{},[479,1882,1855],{}," when the problem is temporary and Infuse should retry.",[421,1885,1887],{"id":1886},"security-recommendations","Security Recommendations",[432,1889,1890,1893,1896,1899,1902,1908,1911],{},[435,1891,1892],{},"Keep signing secrets in a server-side secret manager.",[435,1894,1895],{},"Never expose signing secrets in browser code.",[435,1897,1898],{},"Verify every delivery before processing it.",[435,1900,1901],{},"Use a constant-time comparison for signatures.",[435,1903,1904,1905,1907],{},"Record processed ",[479,1906,616],{}," values to avoid duplicate processing.",[435,1909,1910],{},"Rotate signing secrets if they are exposed or no longer trusted.",[435,1912,1913],{},"Restrict webhook receiver logs so secrets and sensitive payloads are not leaked.",[1915,1916,1917],"style",{},"html pre.shiki code .s7zQu, html code.shiki .s7zQu{--shiki-light:#39ADB5;--shiki-light-font-style:italic;--shiki-default:#89DDFF;--shiki-default-font-style:italic;--shiki-dark:#89DDFF;--shiki-dark-font-style:italic}html pre.shiki code .sTEyZ, html code.shiki .sTEyZ{--shiki-light:#90A4AE;--shiki-default:#EEFFFF;--shiki-dark:#BABED8}html pre.shiki code .sMK4o, html code.shiki .sMK4o{--shiki-light:#39ADB5;--shiki-default:#89DDFF;--shiki-dark:#89DDFF}html pre.shiki code .sfazB, html code.shiki .sfazB{--shiki-light:#91B859;--shiki-default:#C3E88D;--shiki-dark:#C3E88D}html pre.shiki code .spNyl, html code.shiki .spNyl{--shiki-light:#9C3EDA;--shiki-default:#C792EA;--shiki-dark:#C792EA}html pre.shiki code .s2Zo4, html code.shiki .s2Zo4{--shiki-light:#6182B8;--shiki-default:#82AAFF;--shiki-dark:#82AAFF}html pre.shiki code .sHdIc, html code.shiki .sHdIc{--shiki-light:#90A4AE;--shiki-light-font-style:italic;--shiki-default:#EEFFFF;--shiki-default-font-style:italic;--shiki-dark:#BABED8;--shiki-dark-font-style:italic}html pre.shiki code .swJcz, html code.shiki .swJcz{--shiki-light:#E53935;--shiki-default:#F07178;--shiki-dark:#F07178}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 .sbssI, html code.shiki .sbssI{--shiki-light:#F76D47;--shiki-default:#F78C6C;--shiki-dark:#F78C6C}",{"title":720,"searchDepth":727,"depth":755,"links":1919},[1920,1921,1922,1923,1924,1925,1926,1927,1928,1929,1930],{"id":423,"depth":755,"text":424},{"id":449,"depth":755,"text":450},{"id":513,"depth":755,"text":514},{"id":554,"depth":755,"text":555},{"id":592,"depth":755,"text":593},{"id":660,"depth":755,"text":661},{"id":1159,"depth":755,"text":1160},{"id":1679,"depth":755,"text":1680},{"id":1717,"depth":755,"text":1718},{"id":1820,"depth":755,"text":1821},{"id":1886,"depth":755,"text":1887},"Send organisation-level Infuse events to your own HTTPS endpoint.","md",null,{},{"title":61,"description":1931},"lgX5aKua0RpBut197W6n0ghdyXzwjPdpvcdTxszUJTQ",[1938,1940],{"title":57,"path":58,"stem":59,"description":1939,"children":-1},"Manage organisation API credentials and direct API key authentication.",{"title":66,"path":67,"stem":68,"description":1941,"children":-1},"Device operations, provisioning, connectivity, commands, and fleet management for Infuse-IoT products.",1782779884583]