Orders & Reconciliation

A Croissant Pay order is an ordinary Shopify order with discount lines and a few identifying attributes. If you own an ERP sync, an analytics pipeline, or anything else that consumes orders, this is the page that matters.

Order Attributes

Cart attributes become order note attributes — customAttributes in the GraphQL Admin API, note_attributes in REST and webhook payloads. Attributes prefixed with an underscore are private: they travel with the order and are readable through the API, but Shopify does not display them in the admin.

AttributeVisible in adminWhat it is for
_croissant_pay_session_idNoThe reference to quote in any support conversation about the order. Safe to read and log
croissant_pay_tokenYesCroissant internal value. Present on non-Plus orders — the one Croissant attribute a merchant will notice in the admin
croissant_pay_checkout_idYesCroissant internal value
_croissant_pay_subtotalNoCroissant internal value
croissant_checkout_tokensYesCroissant internal value

On Shopify Plus, the order also carries a croissant/croissant_pay_session metafield. Read it if you need the session reference on a Plus store.

graphql
query CroissantOrder($id: ID!) {
  order(id: $id) {
    name
    customAttributes { key value }
    metafield(namespace: "croissant", key: "croissant_pay_session") {
      value
    }
  }
}
Warning
Croissant identifies orders by the session attribute and the Plus metafield. If your stack rewrites orders — an ERP sync, an order-editing app, a note-attribute cleaner — exclude these keys. Strip both and the order cannot be reconciled, which delays settlement to you.

How a Croissant Order Looks Downstream

This is the part that surprises integrators. Croissant Pay is not a Shopify payment method, so the value the shopper redeemed appears as discounts, not tender:

  • Order totals are genuinely reduced. A fully covered order can be a $0 order in Shopify, with the redeemed value split across up to four discount lines.
  • The card charge is not a Shopify transaction. It happens outside Shopify, and Croissant settles with you separately, so Shopify's payments and payouts data will not show it.
  • Discount-heavy reporting will look distorted. Anything that reads Shopify discount totals as margin given away, or treats a $0 order as a test order, needs to special-case these. Filter on the Croissant discount titles or the session attribute.
  • Returns and refunds behave normally in Shopify — Croissant reverses the credit and card portions on its side in proportion.

If you are wiring Croissant volume into finance or BI, reconcile against Croissant's settlement rather than Shopify order revenue. The integration model you are on determines the commercial side of that.

Order Events

The app subscribes to these on install and reports them to Croissant automatically. There is nothing to build and no endpoint to expose.

Shopify eventWhat Croissant does
checkouts/createRecognizes a checkout that used Croissant
orders/createRecognizes the resulting order
orders/paidThe shopper's card is charged and their credit balance is drawn down
orders/cancelledThe card hold is released and credit is returned
refunds/createThe shopper is refunded to their original payment method and their credit is restored
returns/processSame, applied to the returned portion
Info
Manage fulfillment, cancellations, refunds, and returns entirely through your normal Shopify admin workflow. Partial refunds and partial returns are supported.

What Data Croissant Receives

Useful when a security or privacy reviewer asks. There are three separate channels.

ChannelWhat is sent
Storefront and checkout blocksCart contents (product, quantity, price), your store domain, and the checkout URL. No shopper personal data — the shopper signs in and enters payment details on Croissant's own hosted page, never in your storefront
AnalyticsCroissant button impression and click events, carrying the store domain and where the button was shown. No shopper identifiers
Admin API and webhooksStandard Shopify order, checkout, refund, and return payloads, which do include customer details, under the scopes below

The scopes shown at install are read_customers, read_orders, read_all_orders, read_products, read_returns, read_gift_cards, write_gift_cards, read_customer_events, write_discounts, and write_pixels. write_discounts creates the five automatic discounts; write_pixels registers the analytics pixel. Croissant also handles Shopify's GDPR compliance webhooks for customer data requests, customer redaction, and shop redaction.

Reporting

The Croissant app includes a Reporting page in your Shopify admin, scoped to your store:

  • Order KPIs over a selectable period, across confirmed and pending Croissant Pay volume.
  • Daily order value in and out over 7, 30, 60, or 90 days, split into confirmed and pending.
  • An order ledger, filterable by confirmed, pending, or cancelled, and paginated.
  • A capital summary — retainer balances, credit used, credit remaining, and payments — for merchants on a Croissant-funded model.
Info
Reporting updates within a few minutes rather than instantly. Use Shopify's own order list to confirm an order exists right now; use Reporting for volume and value over time.

Next: Testing & Troubleshooting → verify an install end to end