Skip to content

Payments

When your rules approve an agent order (or someone on your team approves a held order), Sill charges it on your connected Stripe account. Stripe holds the card, runs the charge, settles to your account and pays you out. Sill never holds the card or the money: it decides, asks Stripe to charge, and writes a signed record of the result.

Transactional features are in early access. Stripe is the payment rail today, in test or live mode. Shopify settlement runs in test mode only. To connect Stripe and choose the rail, see Connect payments.

Stripe card in Settings, Integrations: CONNECTED, TEST and RAIL ENABLED, with a Turn rail off switch under Payment rail A connected Stripe account in test mode with the rail on, so approved orders are charged. Turn rail off stops charging.

sequenceDiagram
    autonumber
    participant Agent
    participant Sill
    participant Stripe as Stripe (your account)

    Agent->>Sill: Signed order
    Sill->>Sill: Check the signature and run your guardrails
    Sill-->>Agent: approved (with the record id)
    Sill->>Sill: Pre-charge checks
    Sill->>Stripe: Create the payment
    Stripe-->>Sill: Succeeded, processing or failed
    Sill->>Sill: Record the result (a signed settlement record on success)

The agent gets the decision straight away; the charge runs right after it. The result appears on the order’s record under Activity, and the order’s status in the list changes from APPROVED to CHARGED, CHARGE FAILED (Stripe refused the charge) or BLOCKED (Sill stopped it before calling Stripe).

Before calling Stripe, Sill checks that:

  • Stripe is connected for the site and the rail is enabled.
  • The Stripe connection belongs to your account and matches its mode (test or live).
  • A payment method is set up for the site in that mode.
  • The order is within the per-customer daily spend cap, if your rules set one.
  • The order has not already been charged. Each order is charged at most once, even if Sill or Stripe retries the request.

If any check fails, nothing is sent to Stripe and the record says why (see When an order is not charged).

  • The amount comes from the signed order, never from anything the agent sends later. Sill charges the order’s quoted total when the agent signed one, otherwise the signed maximum amount. An order with several line items must carry a quoted total; without one it is not charged, because the maximum is a ceiling, not a price.
  • The payment method. For signed orders, Sill charges the payment method saved for the site on your Stripe account; it is set up with you during early-access onboarding. For UCP checkout, the shopper pays with a one-time Google Pay token minted on your Stripe account.
  • Card data. Sill only ever handles Stripe’s opaque tokens (pm_…, tok_…). Card numbers never reach Sill.

Open the order under Activity and switch to its ACTIVITY tab. The SETTLEMENT panel shows the rail, the amounts, the signed maximum the agent authorised and the Stripe payment id.

Settlement panel for a $46.00 agent order on Stripe: subtotal, shipping, total, authorized max and payment id A charged order: the total stayed under the $50.00 the agent was authorised to spend.

In your Stripe dashboard the payment appears on your account with:

FieldValue
DescriptionSill mandate: northwind-coffee.example sku=NW-GRINDER-01 (the SKU is blank for multi-item orders)
Metadatamandate_id, site_id, sill_record_id, sill_environment (test or live), payment_method_source_kind, and for multi-item orders sill_line_count and sill_line_items (for example NW-GRINDER-01×1, NW-FILTER-100×2)
Receipt email and shippingThe buyer’s email and shipping address, when the agent supplied them

Use mandate_id or sill_record_id to find the same order in Sill’s Activity search.

Stripe resultIn SillWhat to do
succeededCHARGED; a signed settlement record is addedNothing.
processingPending until Stripe reports the final resultNothing; the record updates when Stripe confirms.
requires_actionCHARGE FAILED · Authentication requiredThe card needs the buyer to confirm (for example 3-D Secure), which an agent order cannot do. Use a payment method that does not require it.
requires_payment_methodCHARGE FAILED · Card declined (or Stripe’s decline reason)Check the payment in Stripe.
canceledCHARGE FAILEDCheck the payment in Stripe.

Settlement panel showing STRIPE and FAILED: Card declined, Your card was declined A declined charge shows Stripe’s reason on the order’s record.

After the charge, Sill also records what Stripe reports later: refunds and disputes are added to the original order, and if you disconnect Sill from your Stripe dashboard, Sill stops charging on that connection. You do not need to configure webhooks for this.

An order that Sill stopped before calling Stripe is listed as BLOCKED, with the reason on its SETTLEMENT panel. Nothing was sent to Stripe in any of these cases.

ReasonMeaningFix
Rail disabledStripe is not enabled for this site. The order stays APPROVED and is not charged.On the Stripe card in Settings → Integrations, click Turn rail on, or connect Stripe if it is not connected; connecting turns the rail on.
Credential missingNo active Stripe connection for the site (for example after a disconnect), or no payment method set up for the account’s mode.Connect Stripe; contact Sill to set up the payment method.
Stripe account inactiveThe Stripe connection on file does not belong to this account.Reconnect Stripe.
Quoted total requiredA multi-item order was signed without a quoted total.The agent must sign the cart total.
Amount exceeds mandate / Currency mismatchThe charge would exceed the signed maximum or use another currency.The agent must sign a matching amount and currency.
Daily user spend cap exceededThe customer’s spend in the last 24 hours plus this order is over your per-customer daily cap.Expected; adjust the cap under Rules if it is too low.
Cross-agent organization budget exceededThe organization’s spend across all agents is over your organization-wide cap.Expected; adjust the cap if needed.

The mode follows the Stripe account you connected: a test-mode connection charges Stripe test cards, a live connection charges real cards. Settings → Integrations shows a TEST or LIVE badge on the Stripe card. The badge is not a switch; going live means connecting a live Stripe account, and live charges are enabled for your account during early-access onboarding.

WooCommerce cannot run a server-side charge, so on a WooCommerce site agent orders are charged on your connected Stripe account exactly as above. After Stripe confirms the payment, Sill creates the order in WooCommerce so it shows up with your other orders:

  • Marked paid, with payment method Stripe (via Sill) and the Stripe payment id as the transaction id.
  • The item from your synced catalog, with its total equal to what was actually charged. Multi-item orders are charged but not written to WooCommerce.
  • Each agent order is created once; Sill retries a failed write a few times, and a write that still fails never undoes the Stripe charge.
  • Refunds made through Sill are recorded on the same WooCommerce order without asking any WooCommerce gateway to move money.

This needs WooCommerce REST API keys with Read/Write permission. With read-only keys the Stripe charge still succeeds, but the order is not written to WooCommerce.

  • Stripe is the only payment rail that settles in live mode.
  • Shopify settlement runs in test mode only, against Shopify’s test endpoints.
  • Agentic checkout through Stripe (ACP) is not available to merchants. See Agentic checkout (Stripe ACP).
  • x402 is not supported.

Does Sill ever hold the card or the money?

Section titled “Does Sill ever hold the card or the money?”

No. Stripe holds the card, charges it on your connected account, settles to that account and pays you out. No money passes through a Sill account. Sill holds no PCI certification; it keeps card data out of its systems by handling only Stripe tokens. See Compliance.

No. The amount comes from the signed order: the quoted total, or the signed maximum for a single item. Nothing the agent sends after signing changes it.

No. Every Stripe request for an order carries the same idempotency key, so a retry returns the original payment instead of creating a new one.

An agent asks for a refund with a second signed request; it goes through your guardrails and is refunded on the same rail as the original. See Refunds.

Transactional features are in early access and are set up with you. Contact us through the email on sill.so. Discovery is free and needs no Transactional access.