Skip to main content
Droplets are third-party integrations that merchants install directly from the Fluid Marketplace. When a merchant installs your Droplet, Fluid sends a signed webhook to your server, and you exchange a short-lived token for long-lived credentials scoped to that merchant’s account. This guide walks through building, testing, and submitting a Droplet from start to finish.
Reference pending — subject to change. The Droplet management endpoints used below — POST /api/droplets (register), POST /api/droplet_installations/exchange (credential exchange), and PUT /api/droplets/{id} (update) — are not yet part of Fluid’s published, versioned API reference. The installation flow described here is stable in concept, but treat the exact paths, request bodies, and response shapes as provisional and confirm them with Fluid before you ship. The webhook registration and signature-verification steps, by contrast, use the published Webhooks API.
1

Create the Droplet via API

Register your Droplet with Fluid by sending a POST request to /api/droplets. The payload defines your Droplet’s name, the URL Fluid will load in the merchant dashboard, and the webhook endpoints Fluid calls during installation and uninstallation.
POST /api/droplets is reference-pending (see the note above) — the fields below are illustrative and may change.
Fluid returns a Droplet object including your Droplet’s ID. Save this — you’ll need it to manage the Droplet later.
2

Implement the Install Webhook Handler

When a merchant installs your Droplet, Fluid sends a signed POST request to your install_webhook_url. Your handler must verify the signature and then exchange the included exchange_token for long-lived credentials.
3

Exchange the Token for Credentials

The exchange_token included in the install webhook is single-use and expires after 10 minutes. Exchange it immediately for long-lived credentials:
POST /api/droplet_installations/exchange is reference-pending (see the note above) — confirm the exact request and response shapes with Fluid.
The response contains two tokens you must store securely:
4

Store Credentials and Register Webhooks

Store the authentication_token and webhook_verification_token in your database, keyed by shop domain or installation ID. These credentials represent one merchant’s installation — each merchant who installs your Droplet gets their own set.After storing credentials, optionally register webhooks or drop zones for the merchant with the published POST /api/company/webhooks endpoint — see the Register and handle webhooks guide for the full registration, delivery, and verification contract:
5

Implement the Uninstall Handler

When a merchant uninstalls your Droplet, Fluid sends a signed webhook to your uninstall_webhook_url. Verify the signature the same way as the install handler, then clean up the merchant’s credentials and any associated resources.
6

Test Locally with ngrok

Fluid must be able to reach your webhook endpoints over HTTPS. During development, use ngrok to expose your local server:
ngrok prints a public HTTPS URL such as https://a1b2c3d4.ngrok.io. Update your Droplet’s install_webhook_url and uninstall_webhook_url to use this URL while testing:
PUT /api/droplets/{id} is reference-pending (see the note above) — the update path and body may change.
Remember to swap back to your production URLs before submitting for Marketplace approval.
7

Submit for Marketplace Approval

Once your Droplet is working end-to-end, contact Fluid to begin the Marketplace review process. Fluid will review your Droplet’s functionality, security, and listing content before making it available to merchants.
Your Droplet will not appear in the Fluid Marketplace until it has been reviewed and approved by Fluid. Keep your active field set to true and ensure your listing metadata in settings.marketplace_page is complete before submitting.

Verifying Webhook Signatures

Every webhook Fluid sends is signed with HMAC-SHA256. Verify the signature on every incoming request to ensure it genuinely came from Fluid. Reject any request where the timestamp is more than 5 minutes old to prevent replay attacks. This is the same signing scheme documented in the Register and handle webhooks guide — Fluid computes the HMAC over <timestamp>.<raw_body> using your shared secret. Fluid includes three headers on every webhook: Node.js
Ruby

Identifying Merchants in Your Embed

Fluid appends the Droplet installation UUID as a dri query parameter to your embed_url whenever it loads the Droplet inside the merchant’s dashboard. Use this value to look up the correct authentication_token for the current merchant:

Token Scopes

When you exchange the install token, your authentication_token has access to the following scopes: