Mark an order as paid thru REST API

Topic summary

Marking an existing Shopify order as paid via REST API for manual/bank-transfer payments. Setting financial_status=paid works only at order creation, not after checkout. Posting a transaction to the order often returned an Identity (login) HTML page due to URL/body issues.

Key findings:

  • Authentication and correct endpoint matter; a stray “#” in /orders/#ID caused the Identity page. After fixing, transactions could be retrieved.
  • Mark-as-paid requires creating a transaction, not toggling a field. Minimal payloads work best; extra fields (e.g., gateway, status) can fail. Suggested body: kind: “sale”, source: “external”, with parent_id when appropriate.
  • “Authorization” keys aren’t available for manual payments; rely on parent_id from existing transactions (use Orders webhooks to capture IDs).

Outcomes/updates:

  • OP ultimately succeeded via Integromat/Make (same API call) but not via Postman; exact working payload not shared.
  • Later commenters seeking a Make-specific method received a tip that setting source: “external” solved it for them.

Status: Partially resolved. Approach: POST a minimal transaction (source: external). Unanswered: precise Make module configuration and when parent_id is required.

Summarized with AI on December 19. AI used: gpt-5.

Hi,

so I have tried to get all transactions for the given order - I used the private app

you can see that the private app should have rights for the transactions:

the request result isn’t list of transactions but an HTML page with “identity” login page with “continue button”

Any ideas? From my point of view, it is a bug or intention.

Am I wrong?

Thx,

R.