# No-code (Zapier, Make) > Connect any app without writing a server — send orders with an HTTP request step in Zapier or Make, and react to order updates safely. Source: https://swaglists.com/docs/no-code Automation platforms can call the API with their generic HTTP step. That is enough to forward orders from almost any app (stores, forms, spreadsheets, CRMs). ## Send an order ### Zapier 1. **Trigger:** your app's "new paid order" (or a form submission, a new spreadsheet row, …). 2. **Action:** *Webhooks by Zapier* → **Custom Request**. - **Method:** `POST` - **URL:** `https://swaglists.com/api/v1/orders` - **Data pass-through:** off - **Data:** the JSON body below, with fields from the trigger mapped in. - **Headers:** - `Authorization` → `Bearer sk_live_…` (store it in the step; anyone with access to the Zap can see it) - `Content-Type` → `application/json` - `Idempotency-Key` → the trigger's order id (e.g. `order-` + *Order ID*) 3. **Test** the step with a test key first (`sk_test_…`) and check the order in the dashboard (test mode). ### Make Use **HTTP → Make a request**: URL `https://swaglists.com/api/v1/orders`, method `POST`, headers as above, **Body type** *Raw*, **Content type** *JSON (application/json)*, **Request content** the JSON body below, and **Parse response** on. ### The body ```json title="Request content" { "external_id": "{{order id from the trigger}}", "recipient": { "name": "{{shipping name}}", "address1": "{{shipping address line 1}}", "address2": "{{shipping address line 2}}", "city": "{{shipping city}}", "state_code": "{{shipping state code, e.g. CA}}", "postal_code": "{{shipping zip}}", "country_code": "{{shipping country code, e.g. US}}", "email": "{{customer email}}" }, "shipping_method": "standard", "items": [ { "sku": "{{line item SKU}}", "quantity": {{line item quantity}} } ] } ``` The `{{…}}` parts are the fields you map from the trigger in the editor. Things to get right: - **Country and state must be codes** (`US`, `CA`), not names. Most store triggers offer a "country code" field; otherwise add a lookup/formatter step. - **Empty optional fields** — leave them out, send `null`, or send an empty string: an empty `address2`, `company`, `phone` or `email` (a trigger without a customer email) is fine, and `postal_code` may be empty for countries without postal codes. Two fields must not be empty strings: `state_code` (rejected with `parameter_invalid` — for countries without states, remove that line from the body) and `external_id` (map an id that every order has: it is what prevents duplicate orders). - **Several line items** — Zapier: use *Code by Zapier* (or the line-item fields of your trigger) to build the `items` array; Make: use an *Iterator* + *Array aggregator* (or `map()`) to build it. - **Errors** — a `4xx` response stops the run with the error body; `error.code` and `error.message` tell you what to fix ([error reference](https://swaglists.com/docs/errors.md)). Turn on autoreplay/retries for `429` and `5xx`. Replaying a run after a `4xx` sends the same `Idempotency-Key`, which can return the stored error for 24 hours — even when you fixed the cause outside the request (for example added credits after `402 insufficient_funds`). Change the key for that replay (for example `order-` + *Order ID* + `-2`); `external_id` still prevents a duplicate order. ## React to order updates Create a "catch hook" in Zapier (*Webhooks by Zapier* → **Catch Raw Hook**) or Make (*Webhooks* → **Custom webhook**) and register its URL as a [webhook endpoint](https://swaglists.com/docs/webhooks.md) subscribed to the events you need (e.g. `shipment.created`). > **Warning** No-code webhook steps cannot verify our signatures, so anyone who learns the hook URL could send fake events. Use the incoming event only as a **trigger**: take `data.object.id` (or `data.object.order_id` for shipments) and fetch the real object with an HTTP step — `GET https://swaglists.com/api/v1/orders/` with your key — before acting on it. Keep the hook URL private. Typical follow-ups: update the order in your store with the tracking number, send a Slack message when an order is on hold, add a row to a spreadsheet when an order is delivered. ## When to graduate to code No-code is great for low volume. Move to a small server (see [Custom checkout](https://swaglists.com/docs/custom-checkout.md), [Shopify](https://swaglists.com/docs/shopify.md)) when you need signature verification, reliable retries, multi-item mapping with SKU filtering, or more than a few hundred orders a day.