Open a dispute
Opens a dispute on an outcome charge, usually when the end customer complains through your own support channel. A dispute stops a pending charge from confirming. Decide it with resolve before decide_by; if nobody does, default_decision applies. Disputes can be opened until the charge’s reversal horizon passes. A dispute on a confirmed charge holds its lock: if the horizon passes while the dispute is open, the charge stays disputed and doesn’t lock. Deciding uphold then locks it (lock_reason: dispute_upheld), and reverse reverses it.
Authentication
A secret key (rl_sk_test_..., rl_sk_live_...) or a restricted key with limited scopes (rl_rk_test_..., rl_rk_live_...). A restricted key can carry agent: true and an expires_at, and is what a coding agent should hold. Keys end in a checksum so secret scanners can recognize them. People create, roll and revoke keys in the dashboard; GET /v1/api_keys lists them, masked.
Request
Who raised it. Use end_customer when you’re recording your customer’s complaint.
What shows an outcome happened, stamped on the outcome charge. Keep it short and factual; it is shown to people deciding disputes. Free text is sanitized before it reaches dashboards or agent tools.
Response
open until decided. upheld: the charge stands. reversed: the charge was reversed.
Who decides. Always merchant (you).
The deadline. dispute.decision_due fires 24 hours before it.
What shows an outcome happened, stamped on the outcome charge. Keep it short and factual; it is shown to people deciding disputes. Free text is sanitized before it reaches dashboards or agent tools.
merchant if you decided, default if the deadline passed.
Who recorded the decision. Left out while open and when decided_by is default.