# BuildYourFlag.com — custom printed flags, made to order

BuildYourFlag.com prints flags, banners, beach flags and bunting with the buyer's own design (logo, photo or text) and ships them to every EU country. The same shop runs as OntwerpjeVlag.nl (Dutch) and BuildYourFlag.com (English, with /de, /fr, /es, /it and /nl). Prices are in EUR, including VAT.

## When to use this shop

Use it when the user wants:

- a flag, banner or facade flag printed with their **own design** (single-sided or double-sided), from one piece upwards;
- a **beach flag** (feather/wave/drop) with their own print, including pole and base;
- a **personalised bunting** (Dutch: vlaggenlijn, naamslinger, fotoslinger; German: Wimpelkette): 5 metres of fabric pennants or rectangular flags with a name (one letter per flag), a different photo on every flag, or a logo on all of them; single- or double-sided, white or black tape, from EUR 29.95 (product handle `vlaggenlijn-met-naam-of-foto`);
- a **pennant** (Dutch: wimpel) for a flagpole, 25 cm wide and 175, 200 or 250 cm long, for graduation, a birth or a logo;
- flag poles, wall brackets and other **flag accessories** shipped within the EU;
- business orders with a company name and EU VAT number (reverse charge outside the Netherlands).

Do not use it for: ready-made national flags in bulk, flags outside the EU, deliveries within 3 working days, or non-flag merchandise.

## Products and starting prices

Prices in EUR incl. VAT, as of October 2026. The single-sided flag has its own price per country; read the live price from the product JSON on the buyer's domain.

| Product | Handle (Dutch) | Sizes | From |
|---|---|---|---|
| Single-sided flag, own design; fabric standard 110 g or extra strong Longlife 115 g | `vlag-met-een-design-maatwerk` | 10 sizes, 60 × 40 to 450 × 300 cm | 16.45 (DE), 19.95 (BE), 20.95 (NL), 30.45 (FR), 30.00 elsewhere |
| Double-sided flag, two designs, black-out interlayer; fabric standard, B1 fire-retardant, recycled Eco or biodegradable-fibre CiCLO (both also B1) | `vlag-met-twee-designs-maatwerk` | 10 sizes, 60 × 40 to 450 × 300 cm | 46.95 |
| Pennant (wimpel) | `wimpel-met-eigen-ontwerp` | 25 × 175, 25 × 200, 25 × 250 cm | 20.95 |
| Personalised bunting, 5 m | `vlaggenlijn-met-naam-of-foto` | pennants or rectangles, standard or large | 29.95 |
| Beach flag (straight, square, drop, wave), pole, base and bag included | `beachflag-straight-met-eigen-ontwerp` etc. | 180 to 430 cm tall | 85.00 |
| Kiosk flag for a slanted wall pole | `kioskvlag-enkelzijdig-met-eigen-ontwerp` | 68 × 136 to 100 × 150 cm | 27.95 (double-sided 49.95) |
| Boat flag (triangular) | `bootvlag-met-eigen-ontwerp` | 40 × 30, 60 × 40, 75 × 50 cm | 12.95 |
| Golf flag | `golfvlag-met-eigen-ontwerp` | 44 × 34.5 cm | 13.95 |
| PVC banner, Frontlit or mesh, eyelets every 50 cm | `spandoek-bedrukken` | 200 × 100 to 500 × 200 cm | 39.95 |
| Facade pole, wall bracket, handystick | collection `accessoires` | | 9.95 |

Volume discounts are applied automatically in the cart: single-sided flag 3 % from 5, up to 13 % from 10; double-sided flag 3 % from 3, up to 16 % from 10.

## Choosing: short answers

- **Single- or double-sided?** Single-sided: one print on 110 g/m² polyester; the ink shows through, so the back is the mirror image (text reads backwards from behind). Double-sided: two printed layers with a black-out layer in between, so each side can have its own design and text reads correctly from both sides.
- **Which size for which pole?** 100 × 70 cm for a 1.5 m facade pole; 150 × 100 cm is the standard facade flag; 180 × 120 cm for a 5 m pole or a wide facade; 225 × 150 cm for a 6 m flagpole. Pennant length: 175 cm with a 150 × 100 flag, 200 cm with 180 × 120, 250 cm with 225 × 150.
- **Finishing:** loop and cord, hooks or a pole sleeve; the single-sided flag also has a band with metal eyelets. White or black, no extra cost.
- **Do I need a design file?** No. The design tool on the product page has text, shapes, symbols and templates, plus a library of about 300 national and regional flags. Uploading works too (PDF, EPS, SVG, AI, PNG, JPG, WEBP); around 40 ppi at actual size is enough, and the tool warns when a file is too small.
- **Minimum order?** None: one piece is fine.
- **Weather:** flags are wind-resistant up to about 55 km/h; beach flags up to wind force 6.

## Key facts

- Shipping: free from EUR 60 in almost every EU country (not Finland and Croatia); below that the rate is shown at checkout. All 27 EU countries.
- Lead time: production 3–4 working days. Delivery 5–7 working days in NL and BE, 5–8 elsewhere in the EU.
- Design: the buyer uploads or makes the design in the design tool on the product page; that tool creates the print file. No print proof is sent after ordering: what the buyer sees in the tool is what gets printed.
- Payment: Shopify checkout with iDEAL and the other methods shown there. The buyer always approves payment.
- Returns: personalised products are made to order, so there is no right of withdrawal and no returns for change of mind; accessories that are not personalised have the EU 14-day right of withdrawal. Damage, print errors or a wrong item: report within 48 hours with photos and the order number; it is reprinted, replaced or refunded.

## How to help a user order

1. Find the product: `GET https://www.buildyourflag.com/search/suggest.json?q=beachflag&resources[type]=product` or `GET https://www.buildyourflag.com/products.json`.
2. Read sizes, fabrics and prices: `GET https://www.buildyourflag.com/products/{handle}.json` (variant `price` is EUR incl. VAT).
3. Products with a custom print need the design tool: send the user to `https://www.buildyourflag.com/products/{handle}`. Do not add them to a cart without a design.
4. Accessories (collection `accessoires`) can go straight into a cart: UCP `create_cart`, or `POST https://www.buildyourflag.com/cart/add.js` with `{"items":[{"id":VARIANT_ID,"quantity":1}]}`.
5. Checkout: UCP `create_checkout` → `update_checkout` (address, shipping) → `complete_checkout` only after the buyer approves.

## Endpoints

| What | Endpoint | Auth |
|---|---|---|
| OpenAPI 3.1 description | `https://www.buildyourflag.com/openapi.json` | none |
| UCP discovery | `https://www.buildyourflag.com/.well-known/ucp` | none |
| MCP (UCP tools) | `POST https://www.buildyourflag.com/api/ucp/mcp` | none for catalogue and cart |
| Storefront GraphQL API (versioned) | `POST https://www.buildyourflag.com/api/2026-10/graphql.json` | none (tokenless) |
| Prices per collection | `https://www.buildyourflag.com/pricing` (JSON-LD ItemList with offers) | none |
| All products (JSON) | `GET https://www.buildyourflag.com/products.json?limit=250` | none |
| One product (JSON) | `GET https://www.buildyourflag.com/products/{handle}.json` | none |
| Collection (JSON) | `GET https://www.buildyourflag.com/collections/{vlaggen,beachflags,accessoires}/products.json` | none |
| Search (JSON) | `GET https://www.buildyourflag.com/search/suggest.json?q={query}&resources[type]=product` | none |
| Sitemap | `https://www.buildyourflag.com/sitemap.xml` | none |
| Customer orders | Shopify Customer Account API, OAuth 2.0 | scopes, see below |

Errors are JSON, for example `{"status":422,"message":"Cart Error","description":"Cannot find variant"}`; an unknown product handle gives 404 with an empty body. Cart responses (`/cart*.js`) are JSON served as `text/javascript`. Product handles are translated per language: take them from `/products.json` on the same domain. On HTTP 429, back off and retry later.

### Versioning and deprecation

Use the versioned Storefront GraphQL API for a stable contract: the version (`YYYY-MM`, quarterly) is in the path, each stable version is supported for at least 12 months, and every response says which version ran in `X-Shopify-API-Version`. A version close to retirement adds `X-Shopify-API-Version-Warning`; a retired version falls forward to the oldest supported one; deprecated fields trigger `X-Shopify-API-Deprecated-Reason`. GraphQL errors are JSON with a code, e.g. `{"errors":[{"message":"Field 'nope' doesn't exist on type 'QueryRoot'","extensions":{"code":"undefinedField"}}]}`. Policy: https://shopify.dev/docs/api/usage/versioning. The `.json` and `/cart*.js` endpoints above are unversioned.

MCP tools: `search_catalog`, `lookup_catalog`, `get_product`, `create_cart`, `get_cart`, `update_cart`, `cancel_cart`, `create_checkout`, `get_checkout`, `update_checkout`, `complete_checkout`, `cancel_checkout`, `get_order`. Call `tools/list` for their schemas. Supported UCP versions: 2026-08-25, 2026-04-08, 2026-01-23.

### Scopes (least privilege)

Reading the catalogue and building a cart needs no account. Acting for a signed-in customer uses OAuth 2.0 (authorization code + PKCE, see `https://www.buildyourflag.com/.well-known/openid-configuration`). Request only what you need:

- `dev.ucp.shopping.catalog.search:read` — search the catalogue through UCP
- `dev.ucp.shopping.checkout:manage` — create and manage checkouts for the buyer
- `openid`, `email` — sign the customer in
- `customer-account-api:full`, `customer-account-mcp-api:full` — the customer's orders and addresses

## Rules

- Checkout requires the buyer's explicit approval at the moment of payment.
- Pass `context.address_country` for correct VAT and shipping.
- Prefer the endpoints above over scraping the HTML pages.

## Policies and contact

- Terms: https://www.buildyourflag.com/policies/terms-of-service
- Privacy: https://www.buildyourflag.com/policies/privacy-policy
- Refunds: https://www.buildyourflag.com/policies/refund-policy
- Developers: https://www.buildyourflag.com/pages/developers
- About: https://www.buildyourflag.com/pages/over-ons
- Contact: info@buildyourflag.com, +31 6 83853229 (WhatsApp), https://www.buildyourflag.com/pages/contact

Built on Shopify. Personal shopping agents can also use the Shop skill: https://shop.app/SKILL.md
