Kidoriman: customs IDs at checkout

Kidoriman ships worldwide. After every international order its support team chased buyers for the ID and address details a destination's customs office requires. I built a custom Shopify Plus app that asks for them at checkout and blocks payment when the data is invalid.

Shopify · Backend

Results

A checkout app that collects each country's customs IDs and blocks invalid data.

Problem

Several destinations need extra buyer details that Shopify has no native field for, or only offers in early access. Support was writing to customers after purchase to get them. The client wanted its own app only, no outside services, and validation that does not depend on a checkout script that Shopify is retiring.

Solution

The app is five extensions and a shared library. A checkout block shows fields only for the destination country. A validation Function repeats the same checks on the server, including for express wallets. A payment rule hides wallets where they would skip the fields. A thank-you block gives instructions for one market. Per-country rules are one JSON setting that the merchant edits in an app page.

Key decisions

  1. Chose server-side validation in a Function over a checkout intercept

    Why The intercept API is being retired, and a Function also covers express wallets that bypass checkout UI extensions.

  2. Chose country rules as one JSON setting edited in the app

    Why Labels, required fields and error texts change without a deploy, and a new country on existing validators is only config.

  3. Chose a hard size limit on the config

    Why A Function silently ignores metafield values over its size limit, so the app refuses to save a larger config.

  4. Chose Shopify's native fields first, with mine as a fallback

    Why Where a native field exists, the buyer never types the same ID twice.

Have a similar task?

Send a link and a few lines about what you need. I reply within 1 business day with questions or a fixed estimate.

Get a fixed estimate
  • The estimate is the priceHours and total agreed before work starts. No re-estimates.
  • No prepayment on small projectsProjects up to 20 hours usually need none.
  • 30-day warrantyCritical bugs from my work get fixed free, even after that.

My gift: start a Shopify store for €1 for your first month

Open your store through my partner link and try Shopify for yourself. When you need a theme, an app or a migration, I'm one message away.

Claim the €1 month (opens in a new tab)

Affiliate link: I may earn a commission if you sign up. The offer is set by Shopify and may vary by region.