Works with the store you already run.

Connect the store once and every program you run reads its orders: affiliate, ambassador, referral and loyalty programs. Shopify has our app, WooCommerce our plugin, Stripe sends orders directly, and any other checkout uses one tracking code.

  • Shopify

    Order webhook
    Install the app

    Install the app from the Shopify App Store and it sets up the order notifications, the checkout pixel, the catalog and a discount code for each creator you approve; you press Save once on its switch in the theme editor. The plan is charged on your Shopify bill, and new creators and orders are approved inside the Shopify admin itself. A theme block puts a card for the program on your own pages.

    Open it on the Shopify App Store
    Landing URL
    works out of the box
    Cart stamp
    works out of the box
    Coupon code
    works out of the box
    Snippet or API
    works out of the box
    Catalog: one-click import
  • WooCommerce

    Order webhook
    Install the plugin

    Install Partnely for WooCommerce from the Connect store page and press Connect: it writes the order notifications, keeps the click on every order and makes the discount codes for creators, points rewards and friends of a referrer. The [partnely_program] shortcode puts a card for the program on any page, and buyers are invited to refer a friend on the thank-you page.

    WooCommerce posts each order to Partnely, with any coupon code on it. For links, WooCommerce's order attribution keeps only the landing page of the visit that ends in the order, so a shopper who comes back another day or through a search loses the click. The tracking snippet and the order meta code below keep it on the order for the whole attribution window.

    Landing URL
    works out of the box
    Cart stamp
    via snippet
    Coupon code
    works out of the box
    Snippet or API
    works out of the box
    Catalog: one-click import
    Setup steps
    1. In WordPress admin open WooCommerce → Settings → Advanced → Webhooks and choose Add webhook.
    2. Create one webhook for each topic: Order created, Order updated and Order deleted. Status Active, API version WP REST API v3. On a store running WooCommerce Subscriptions, add one for Subscription created too; it is required when the store pays commission on renewals and the order meta code below is not installed, since it links each renewal to the creator of the subscription's first order.
    3. Paste the delivery URL below into each one.
    4. Required: type the same secret into each webhook's Secret field and save that secret below. WooCommerce signs every delivery with it; Partnely refuses unsigned deliveries, so no order is recorded until it is saved.
    5. Add the tracking snippet below to every page (the theme header, or a header-scripts plugin), and the order meta code below to the theme's functions.php or a code snippets plugin. The snippet keeps the click in first-party cookies for the attribution window, and the code copies it onto each order at checkout, classic or block.
    6. Keep order attribution enabled (WooCommerce → Settings → Advanced → Features). It stores the landing URL our links carry, which still credits an order placed in the same visit.
    7. Now and then check that WooCommerce still shows every webhook as Active. It switches a webhook to Disabled after more than five failed deliveries in a row and does not send those orders again.
  • BigCommerce

    Thank-you page snippet

    BigCommerce's conversion tracking box runs our code on the order confirmation page, where it reports the order id and subtotal with the click that led to it. That page cannot read discount codes, so orders with only a creator's code need the API.

    Landing URL
    via snippet
    Cart stamp
    via snippet
    Coupon code
    via snippet
    Snippet or API
    works out of the box
    Catalog: CSV upload or API
    Setup steps
    1. Add the tracking snippet in Storefront → Script Manager → Create a script, location Head, on the storefront pages, and a second script with the same snippet on the Order confirmation page.
    2. Open Settings → Data solutions → Affiliate Conversion Tracking, choose Connect and paste the confirmation-page code below into the Conversion Tracking Code field. BigCommerce fills in %%ORDER_ID%% and %%ORDER_SUBTOTAL_DISCOUNTED_IN_CENTS%%, the subtotal after discounts in cents, without tax and shipping.
    3. Place one real order through a creator link and check its order id and amount in the tracking log before creators rely on it.
    4. Orders with only a creator's code and no link click: send them from your server to POST /api/v1/conversions with coupon_codes.
    5. Load your catalog from a CSV export (Products → Export) or through the API.
  • Squarespace

    Thank-you page snippet

    Squarespace's order status page runs our code with the order id and subtotal, which is all it needs to report the order. Discount codes are not available there, so orders with only a creator's code need the API.

    Landing URL
    via snippet
    Cart stamp
    via snippet
    Coupon code
    via snippet
    Snippet or API
    works out of the box
    Catalog: CSV upload or API
    Setup steps
    1. Add the tracking snippet under Settings → Advanced → Code Injection → Header.
    2. Paste the order status code below under Code Injection → Order Status Page. It runs for physical, digital and service products, and its {.if firstPageView} wrapper reports the order once, not each time the shopper reopens the page. Squarespace fills in {orderId} and {orderSubtotalCents}. The code loads the tracking snippet itself, since the header injection is not guaranteed to run on the order pages; if the header's snippet tag carries data-consent="wait", add it to these tags too.
    3. Selling subscriptions, memberships or gift cards: paste the order confirmation code below under Code Injection → Order Confirmation Page as well, since those checkouts show that page instead.
    4. Link tracking needs the checkout on the site's own domain. Place one real order through a creator link and check its order id and amount in the tracking log before creators rely on it.
    5. Load your catalog from a CSV export (Commerce → Inventory → Export).
  • Wix

    Thank-you page snippet

    On Wix Stores the snippet goes in the site header, and a few lines of Velo keep the click and report the order from the thank-you page, with any creator code it used.

    Landing URL
    via snippet
    Cart stamp
    via snippet
    Coupon code
    via snippet
    Snippet or API
    works out of the box
    Catalog: CSV upload or API
    Setup steps
    1. Add the tracking snippet under Settings → Custom code, loading on all pages in the head.
    2. Enable Velo dev mode, paste the first part of the page code below into masterPage.js and the second part into the Thank You page's code. The masterPage part keeps the click only while Wix's consent policy allows advertising cookies, which the site's cookie banner sets, and removes it when the visitor withdraws.
    3. Wix is moving stores to new order fields, and the code reads both the older and the newer ones. Before creators rely on it, place one real order through a creator link and one with a creator's code, and check both in the tracking log.
    4. Load your catalog from a CSV export (Store Products → Export).
  • Stripe

    Checkout webhook

    For brands selling through Stripe Checkout or Payment Links, Stripe posts each completed payment to Partnely, subscriptions included. A creator's tracked link carries the click to a Payment Link on its own; Checkout Sessions the brand's own code creates need the click passed in.

    Landing URL
    via snippet
    Cart stamp
    via snippet
    Coupon code
    works out of the box
    Snippet or API
    works out of the box
    Catalog: CSV upload or API
    Setup steps
    1. In the Stripe dashboard open Developers → Webhooks and choose Add endpoint.
    2. Paste the endpoint URL below and select the events checkout.session.completed, checkout.session.async_payment_succeeded, charge.refunded, invoice.paid and invoice_payment.paid. The last two are needed for subscriptions: the first paid invoice is the order (a free trial is not), and refunds of subscription payments are matched through them.
    3. Required: copy the endpoint's signing secret (starts with whsec_) and save it below. Use the live-mode endpoint: test-mode events are logged, not recorded. Partnely refuses unsigned deliveries, so no order is recorded until it is saved.
    4. Payment Links: when a creator's tracked link opens a Payment Link (on buy.stripe.com, made from the brand's page, or on the store's own domain), the redirect adds the click as client_reference_id, and the tracking snippet on the store's own pages hands it to Payment Link buttons and Buy Buttons there. Leave client_reference_id free for it.
    5. Checkout Sessions your own code creates: set metadata.pn_click from Partnely.attribution() on your page, or put the click id in client_reference_id (for subscriptions, also in subscription_data.metadata). Add metadata.coupon for code-based deals.
    6. Creator promotion codes: Stripe sends only the id behind a promotion code, not the code the buyer typed. Save each creator's promotion code ID (promo_…) on the creator's page in Partnely, next to their code; orders using it are credited once it is saved.
    7. Load your products from a CSV or through the API. Stripe product ids work as external ids.
    8. Gift cards: orders Stripe sends do not mark gift cards, so a gift card sold through Stripe Checkout or a Payment Link earns commission like any other product, whatever the store's gift card setting.
  • Magento / Adobe Commerce

    Server API

    Magento stores usually have a developer on hand. An observer on order placement posts the order to the API with the click id from the shopper's session; the snippet on the success page works as a no-code alternative.

    Landing URL
    via snippet
    Cart stamp
    via snippet
    Coupon code
    works out of the box
    Snippet or API
    works out of the box
    Catalog: API or CSV
    Setup steps
    1. Generate an API key below and keep it on your server.
    2. Add the tracking snippet to the default head so the shopper's click id is stored. Your server can read it from the first-party cookie pn_click (and pn_ref) on the store's domain; in the browser it is in localStorage key "pn_attr" or the pn_click URL parameter. Keep it with the quote.
    3. On sales_order_place_after, POST the order to /api/v1/conversions with order id, subtotal, currency, click id, coupon codes and line items.
    4. Load your catalog through POST /api/v1/products/import or a CSV export.
  • WordPress

    Thank-you page snippet

    WordPress sites selling without WooCommerce (SureCart, Easy Digital Downloads, MemberPress, form plugins) run the snippet in the theme header and report the order from the confirmation page or from a small server hook.

    Landing URL
    via snippet
    Cart stamp
    via snippet
    Coupon code
    via snippet
    Snippet or API
    works out of the box
    Catalog: CSV upload or API
    Setup steps
    1. Add the tracking snippet to the theme header (Appearance → Theme file editor → header.php, or a header-scripts plugin).
    2. On the purchase confirmation page, add the code below with the order id, subtotal and any creator codes your plugin exposes, or POST from PHP to /api/v1/conversions.
    3. Load your products from a CSV or add them by hand.
  • Custom or headless

    Server API

    Any stack works: the snippet stores the click id on the shopper's device, and your server or checkout page posts each order to the API. Same ledger, same rules.

    Landing URL
    via snippet
    Cart stamp
    via snippet
    Coupon code
    works out of the box
    Snippet or API
    works out of the box
    Catalog: API or CSV
    Setup steps
    1. Add the tracking snippet to every page so the click id and link code survive the shopper's visit.
    2. On your order confirmation page queue the order with window.Partnely.q.push(...) (see "Report an order from any page"), or POST /api/v1/conversions from your server with the click id you kept.
    3. Load your catalog through POST /api/v1/products/import, a CSV, or by hand.

Three ways an order arrives, all of them on every plan

Order webhook
The platform posts each order to Partnely. Nothing runs on your storefront. Landing URL, cart attributes and coupon codes arrive on the order.
Thank-you page snippet
One script tag in the theme keeps the click id on the shopper's device; a second line on the confirmation page reports the order.
Server API
Your server posts the order to the API with the click id it kept. Same rules, same ledger, no browser involved.

Signals: a green dot means the signal works as soon as setup is done; grey means it works once the snippet is installed. Coupon codes work everywhere the order includes the code. Details for developers are in the API reference.

Send what happens to the rest of your stack.

Every time a creator joins or is approved, every time an order is recorded, approved or reversed, every payout recorded and every piece of content handed in, the program can tell something else.

Read the webhook reference
Signed webhooks
A POST to an https address of the store's own, signed with a secret shown once, with the timestamp and the signature in the headers and the event as plain JSON.
Slack
The incoming webhook Slack hands out, and the same events arrive in a channel as sentences about money and people rather than ids.
Klaviyo
Paste the store's own private key and the program's events arrive as metrics on the creator's own profile, with their link, code and rate.
Zapier and Make
A catch hook is a webhook destination like any other, so whatever those two connect to is reachable with no code of ours in between.

Webhooks and Slack come with Essential and above; Klaviyo is on every plan. Every destination is an address of the store’s own, and a delivery that fails is tried again on a ladder and given up rather than queued for ever.

Not on the list? It still works.

Any checkout that can run a script or make an HTTP request can report orders. The redirect and the ledger do not care where the order came from.

POST /api/v1/conversions
Authorization: Bearer pn_live_…

{
  "order_id": "1001",
  "subtotal": 129.00,
  "currency": "USD",
  "click_id": "<pn_click from the landing URL>",
  "coupon_codes": ["AVA12"],
  "line_items": [{ "sku": "MS-VITC", "quantity": 1, "price": 129.00 }]
}

Connect the store in an afternoon.

We detect the platform from the store address and the Connect store page shows only the steps that apply.