Skip to content
 Custom · 30–60 min · variable

Connect Perfect Day to other shops.

Do you use Wix, Squarespace, Jimdo, Webflow Ecommerce, or a self-built shop? As long as your shop can send a webhook with every paid order—directly or via a service like Make.com—Perfect Day can be integrated.

Required beforehand: Go once the general preparation This involves creating a coupon, obtaining the application password, and providing the webhook URL. It takes approximately five minutes and applies to all shop systems.

The minimum requirements

  1. Your shop must be able to do three things.

    • Trigger order webhook when "order paid"„
    • HTTP POST with Basic-Auth header send
    • JSON payload construct in our format

    Can your shop only send order emails and nothing else? Then use a bridge service like Zapier or Make.com, which parses the order email and makes the HTTP call.

The required JSON body

No matter where the data comes from — in the end, this JSON body must go to the webhook.

  1. Payload format

    Required fields: shop_order_id, shop_type, shop_domain, customer.email, items[].coupon_id and items[].count. Optional are customer.name, customer.locale, order_total_cents, currency and placed_at.

    JSON · Webhook body
    { "shop_order_id": "1042", "shop_type": "custom", "shop_domain": "shop.example.com", "customer": { "email": "kunde@example.com", "name": "Max Mustermann", "locale": "de" }, "items": [ { "coupon_id": 15114, "count": 1 } ], "order_total_cents": 5000, "currency": "EUR", "placed_at": "2026-05-14T10:42:00Z" }
  2. Auth-Header

    Standard HTTP Basic Auth. You calculate the value from the username and application password.

    HTTP headers
    Authorization: Basic Content Type: application/json
  3. Generate Base64 value

    On Mac/Linux in the terminal — the result appears after basic :

    Bash
    echo -n "your-name:xxxx xxxx xxxx xxxx xxxx xxxx" | base64

Bridge options for shops without native webhook functionality

  1. Option 1 — Zapier or Make.com

    Both offer triggers for many shop systems plus an HTTP action for POST requests. Example workflow (Make.com): Trigger „Watch new orders", optional action „"Get product details"" for the coupon ID lookup, then „"HTTP → Make a request"" to the webhook URL. The free Make.com plan is sufficient for approximately 1,000 orders per month.

  2. Option 2 — IFTTT, n8n, Pipedream

    Same workflow, different interface. n8n It is self-hostable and therefore more GDPR-friendly. IFTTT is more limited (no complex JSON mapping).

  3. Option 3 — Dedicated Bridge Server

    For a custom webhook URL: Cloudflare Workers (free up to 100k requests/day), Vercel Serverless Functions, AWS Lambda, or your own Node/PHP server. Example code for Cloudflare Workers:

    View full code — TypeScript · Cloudflare Worker
    TypeScript · Cloudflare Worker
    export default {
      async fetch(req: Request): Promise<Response> {
        if (req.method !== 'POST') return new Response('Method not allowed', { status: 405 });
    
        const shopPayload = await req.json();
        const pfdPayload = mapToPerfectDay(shopPayload);
    
        const auth = btoa('DEIN-USER:DEIN APP PWD');
        const res = await fetch(
          'https://plattform.deinperfectday.de/wp-json/perfectday/shop/webhook/order',
          {
            method: 'POST',
            headers: {
              'Content-Type': 'application/json',
              'Authorization': 'Basic ' + auth,
            },
            body: JSON.stringify(pfdPayload),
          }
        );
        return new Response(await res.text(), { status: res.status });
      },
    };
    
    function mapToPerfectDay(shopPayload: any) {
      return {
        shop_order_id: shopPayload.orderNumber,
        shop_type:     'custom',
        shop_domain:   shopPayload.shop?.domain,
        customer: {
          email:  shopPayload.customer?.email,
          name:   shopPayload.customer?.name,
          locale: 'de',
        },
        items: shopPayload.lineItems.map((li: any) => ({
          coupon_id: parseInt(li.metadata?.pfd_coupon_id, 10),
          count:     li.quantity,
        })).filter((it: any) => it.coupon_id > 0),
        order_total_cents: Math.round(shopPayload.totalAmount * 100),
        currency:          shopPayload.currency,
        placed_at:         shopPayload.paidAt,
      };
    }

Coupon ID mapping for shops without custom fields

  1. Maintain mapping in the bridge

    If your shop doesn't support custom fields per product (some very basic shop builders don't), you manage the mapping directly in the bridge. Prerequisite: your shop product slug must be unique and stable.

    TypeScript
    const COUPON_MAPPING: Record = { 'gutschein-25-eur': 15114, 'gutschein-50-eur': 15115, 'gutschein-100-eur': 15116, }; // In mapToPerfectDay(): const couponId = COUPON_MAPPING[li.productSlug];

Test order

  1. Place and check order

    Regardless of the bridge variant: Place a test order and access the platform back office under Perfect Day → Shop orders on the entry with shop_type=custom Please wait. Check your customer mailbox for the brand email.

If something is stuck

Troubleshooting.

The webhook cannot reach the platform server.

The platform only accepts HTTPS POSTs. Does your bridge server have a valid SSL certificate and is it publicly accessible? Test from an external connection: curl -v https://plattform.deinperfectday.de/wp-json/perfectday/shop/webhook/order must return a 401 — not „Connection Refused".

Auth is not working

The username is the WordPress username (user_login), not the email. With Base64 encoding echo -n use (without newline characters).

Other error codes (400, 403, 429)

400 = invalid JSON body (often missing customer email), 403 = the coupon ID does not belong to your account, 429 = rate limit, wait a moment and resend.

Setup service

Would you prefer us to set it up for you?

Is your shop not listed here, or are you stuck during the bridge setup? Send us a support request with your shop system details, native capabilities (webhooks, custom fields, API), and sample data from a test order. We'll provide you with a pre-built mapping template or help you with your own code.

Frequently Asked Questions

Still questions?

Which shops are "other shops"?
Anything outside of Shopify, WooCommerce, Shopware, Magento, and PrestaShop—for example, Wix, Squarespace, Jimdo, Webflow Ecommerce, or custom-built shops. As long as a webhook or order API is available, the integration works.
How much does a bridge cost via Make.com?
Make.com's free plan is sufficient for approximately 1,000 orders per month. Only beyond that number is a paid plan necessary. n8n is completely free when self-hosted.
What if my shop doesn't support webhooks at all?
Then you need a service that parses your shop's order notification email and generates an HTTP call from it—for example, Zapier with "Parse Email". Send us your shop system details, and we'll advise you on the specific approach.

Shop connected — and now what?

Once the webhook is running, all orders will automatically appear in your back office. If you need another connection, each additional shop can be set up in just a few minutes.

Go to shop overview