Skip to content

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.

460+ reviews on the Shopify App StoreTrusted by 7,000+ Shopify storesBuilt for Shopify
One global, window.BirdApp: read the selection, check checkout, listen for events.

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.

CapabilityLiquid themeHeadless storefront
MountingLiquid themeThe widget mounts itselfHeadless storefrontYou call widget.mount()
CartLiquid themeRead from the themeHeadless storefrontYou pass it with sdk.setCart()
Checkout buttonLiquid themeBird patches itHeadless storefrontYou gate it with canCheckout()
EventsLiquid themeAll bird:* eventsHeadless 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.

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.