APIs for pickup and delivery on any Shopify storefront
Read what the customer picked, gate your own checkout button and react to every change with Bird's JavaScript API. Mount the same widget on Hydrogen or any headless build, and use the REST API from your server.
All paid plans include a 14-day free trial.
// read the customer's choice const sdk = await window.BirdApp.ready; sdk.selections.current; → { method: 'Delivery', date: '2026-10-13', time: '14:00-15:00' } sdk.selections.canCheckout(); → { canProceed: false, reason: 'minimum_order_value_not_met' }
Custom events
On headless, bird:selection:changed fires.
What are Bird's developer APIs?
Bird Pickup & Delivery, the Shopify app by BirdChime, exposes a JavaScript API on your storefront, window.BirdApp, to read the customer's selection, check whether checkout can proceed and control the widget. It fires bird:* custom events, mounts on headless storefronts, and has a REST API for server-side and third-party integrations.
- JavaScript API
- window.BirdApp: config, ready, sdk and widget
- Events
- bird:selection, bird:checkout and bird:widget events
- Headless
- Hydrogen, React, Vue or plain HTML, with one stylesheet and one script
- REST API
- For server-side and third-party integrations, such as mobile apps
- Plan
- Headless storefronts on Scale
- Price
- Paid plans from $19.99 a month, with a 14-day free trial
What can the JavaScript API do?
Read the customer's selection, react to changes, check checkout and control the widget.
- Read the selection
sdk.selections.current gives the method, date, time, location, order note, SMS opt-in and resolved delivery address.
- Subscribe to changes
sdk.subscribe() runs your callback straight away and on every change, and returns a function to stop listening.
- Check checkout
sdk.selections.canCheckout() returns canProceed and a reason: selection_incomplete, minimum_order_value_not_met, cart_ineligible, schedule_conflict, not_ready, saving or save_failed.
- Control the widget
widget.isMounted(), widget.hide() and widget.remount(), for example after a theme redraws the cart.
What does a real integration look like?
Patterns from the help center's own examples.
- A custom checkout button
On click, call canCheckout(). If canProceed is false, stop the click and dispatch bird:checkout:attempted so the widget shows its field errors.
- Express-pay buttons
Gate Shop Pay, PayPal and Apple Pay buttons the same way, since they skip the cart page.
- Hydrogen
Mount the widget inside a useEffect after render, pass your Storefront cart to sdk.setCart(), and call it again whenever the cart changes.
- After an AJAX cart redraw
Listen for bird:widget:reinitialized and re-attach anything that stopped working.
Which events does the widget fire?
Selection and checkout events on window, and lifecycle events on document.
- bird:selection:changed
Any selection field changes, with the field, value and a compact selection. Fires on Liquid themes and headless.
- bird:selection:complete
The selection becomes complete, with the method, location, date and time.
- bird:checkout:attempted
Checkout was clicked while incomplete. You can also dispatch it yourself to reveal the errors.
- bird:widget:*
initialized, reinitialized and removed, for when the widget mounts, re-mounts and unmounts.
Can I use Bird on a headless storefront?
Yes. Add one stylesheet and one script, set your shop domain, and mount the widget.
- Any frameworkScale only
Hydrogen, React, Vue or plain HTML. No theme app extension, build step or npm package.
The widget loads your settings, translations, timezone and availability rules from Bird.
Mount the cart widget, or a product widget with the item's tags and collections so per-product rules apply.
- Only shop is required
Set window.BirdApp.config with your myshopify.com domain before the bundle loads. If setup fails, ready resolves to null instead of throwing.
- You gate checkout
Headless bundles don't patch your checkout button, so check canCheckout() before letting customers through.
What can I change on a regular Shopify theme?
Developer settings in Bird take custom JavaScript and CSS, and fix placement for unusual themes.
- Advanced scripting
Run your own JavaScript on the cart page, for example to fill the postal code from another app.
Override the widget's styles with your own CSS.
- Placement and checkout button
Anchor the widget to any element with a CSS selector, and point Bird at your theme's checkout button if it isn't detected.
- Load only on the cart page
Restrict the widget to the cart page. Leave it off if your store uses a cart drawer.
Is there a REST API?
Yes, for server-side and third-party integrations such as mobile apps and other Shopify apps.
- Reference
The REST API reference is published at picdel.birdchime.com/api-docs.
- On the order
Each order carries the customer's choice as attributes: Delivery Method, Delivery Date and Delivery Time.
- Legacy widget
Stores still on the legacy widget use the older BirdSDK global and birdchime:* events. The current widget uses window.BirdApp and bird:* events.
- Order automationGrowth & up
For no-code automation on orders, Bird also has Shopify Flow triggers and actions.
Liquid theme or headless storefront: what changes?
The same API on both. On headless, you mount the widget and gate checkout yourself.
| Capability | Liquid theme | Headless storefront |
|---|---|---|
| Mounting | Liquid themeThe widget mounts itself | Headless storefrontYou call widget.mount() |
| Cart | Liquid themeRead from the theme | Headless storefrontYou pass it with sdk.setCart() |
| Checkout button | Liquid themeBird patches it | Headless storefrontYou gate it with canCheckout() |
| Events | Liquid themeAll bird:* events | Headless storefrontOnly bird:selection:changed |
Where do I start?
On a Liquid theme, await window.BirdApp.ready and call the SDK. On headless, add the stylesheet and script, set your shop domain and mount the widget. The guides have every method and event.
FAQ
What else do developers ask?
How can I read the customer's pickup or delivery date in my own code?
Await window.BirdApp.ready to get the SDK, then read sdk.selections.current for the method, date (YYYY-MM-DD), time, location and more. Use sdk.subscribe() to react to changes.
Does Bird work with Hydrogen?
Yes. Mount the widget in the browser only, inside a useEffect, and keep it fed with sdk.setCart(). Headless storefronts are on Scale.
How do I stop customers checking out without a date on a custom button?
Call sdk.selections.canCheckout(). If canProceed is false, block the click and dispatch bird:checkout:attempted so the widget shows which fields are missing.
Which events fire on a headless storefront?
Only bird:selection:changed. Use sdk.subscribe() for state changes and canCheckout() to know when checkout can proceed.
Is there a REST API for mobile apps?
Yes. The REST API is for server-side and third-party integrations, such as mobile apps and other Shopify apps. Its reference is at picdel.birdchime.com/api-docs.
Does it work for Shopify stores outside the US?
The headless widget takes a locale in its config and loads your translations and timezone from Bird.
Do I need a developer?
Usually not. Most stores never need these settings: on a standard Shopify theme the widget mounts itself. Custom checkout buttons, headless builds and scripts need someone comfortable with JavaScript.
Which plan do I need?
Headless storefronts are on Scale. The pricing guide doesn't list the JavaScript API or Developer settings as separate plan features.
How much does it cost?
Paid plans start at $19.99 a month. Plans are priced in US dollars and billed through Shopify. All paid plans include a 14-day free trial, and annual billing is 10% off.
Terms on this page
- window.BirdApp
- The single global holding Bird's config, ready promise, SDK and widget controls.
- canCheckout()
- Returns whether checkout can proceed, and the reason if not.
- setCart()
- Passes your Storefront API cart to the widget on headless storefronts.
- bird:checkout:attempted
- The one event you can dispatch, to reveal the widget's field errors.
Related features
- Widget CustomizationChange the colors, fonts, wording and placement until the widget looks like part of your store.
- Shopify Flow IntegrationStart Shopify Flow automations when an order is scheduled for pickup or delivery.
- Product Page AvailabilityShow pickup and delivery options, dates and store hours on the product page itself.
- Date & Time PickerCustomers choose a pickup or delivery date and time, and only see the ones you can actually fill.
- Minimum Order ValueSet a minimum spend for delivery or pickup, per method and per location.
- Multilingual MessagingShow the widget and notifications in your customers' language. Bird supports 90+ of them.
Industry guides: restaurants, grocery stores and meal kit services.
Comparing apps? Bird vs Zapiet, Pickeasy, Stellar and Flare, or the best Shopify pickup and delivery apps.
Build it your way.
Try Bird free for 14 days on any paid plan. Open your store's console, await window.BirdApp.ready and read a selection before you pay.