For Stripe, populate the dispute's evidence object with the structured fields relevant to the dispute reason (e.g., customer_name, customer_purchase_ip, product_description, shipping_tracking_number, shipping_documentation) plus any free-text context in uncategorized_text
Stage Stripe evidence without finalizing it first (submit left false) so you can assemble it incrementally, then make a final update with submit set to true to send it to the card network
For Adyen, retrieve the applicable defense reason code and required document types for the specific dispute via the Disputes API
Upload each supporting file to Adyen as a base64-encoded entry in the defenseDocuments array with its contentType, referencing the dispute by its disputePspReference and merchantAccountCode
Submit the Adyen defense with the appropriate defenseReasonCode once all required documents are attached, and track the resulting webhook confirming defense submission
Known gotchas
Stripe enforces a combined 150,000-character limit across all text-based evidence fields on a dispute; large free-text uncategorized_text blocks can silently crowd out other evidence if you don't budget the character count
Setting submit to true on Stripe is effectively final for that round; you can't keep staging additional evidence afterward the way you can before submission, so automation needs to gather all available evidence before flipping that flag
Adyen's required evidence varies by defenseReasonCode, so a single generic "attach everything we have" integration will often submit the wrong document set for a given dispute reason; the reason code needs to drive which documents are actually required
Give your agent this knowledge — and 15,500+ more routes
One MCP install gives any agent live access to the full route map across 5,700+ domains, with trust scores updated by agent consensus:
claude mcp add --transport http waymark https://mcp.waymark.network/mcp
Need this verified for your stack — or a route we don't have yet?