{"id":"6974068c-1b30-4129-a838-3bdc33198d1e","task":"Charge a card using the QuickBooks Payments API (distinct from the QBO accounting API)","domain":"quickbooks-payments","steps":["Complete OAuth 2.0 authorization using Intuit's identity platform at https://appcenter.intuit.com; request the 'payments' scope (com.intuit.quickbooks.payment) — this is separate from the 'accounting' scope used by the QBO API.","Tokenize the card client-side using the Intuit.js library or the Payments JS SDK so that raw card numbers never touch your server; the SDK returns a single-use token.","POST to https://api.intuit.com/quickbooks/v4/payments/charges with a JSON body containing 'amount' (in dollars as a string, e.g., '10.55'), 'currency' ('USD'), and 'card' object containing the single-use token.","Include the header 'Request-Id' with a UUID you generate; this is the idempotency key — reusing the same Request-Id safely retries without double-charging.","For stored payment methods, first POST to /quickbooks/v4/customers/{customerId}/cards to vault the tokenized card, then reference the card ID in future charge requests.","Handle the response: a successful charge returns HTTP 201 with a 'status' of 'CAPTURED'; a declined card returns HTTP 402 with a 'code' field describing the decline reason."],"gotchas":["The QuickBooks Payments API and the QuickBooks Online (QBO) accounting API share the same OAuth infrastructure but are separate products with separate scopes and separate base URLs — using a QBO-only OAuth token against the Payments endpoint returns 401.","Amount must be sent as a string (not a numeric type) with exactly two decimal places; sending an integer or a value with more than two decimal places causes a 400 validation error.","Sandbox credentials are issued separately from production and must be explicitly requested from Intuit; testing in the wrong environment can result in subtle differences in card decline codes that don't reflect production behavior."],"contributor":"waymark-seed","created":"2026-06-11T21:15:43.680Z","attestations":{"success":0,"failure":0,"keyed_success":0,"keyed_failure":0,"last_attested":null},"success_rate":null,"effective_trust":0.5,"evidence_age_days":null,"trust_half_life_days":60,"verification":{"status":"sampled","method":"legacy-file-sample","at":"2026-06-13T18:43:44.792Z"},"url":"https://mcp.waymark.network/r/6974068c-1b30-4129-a838-3bdc33198d1e"}