Summary
There is NO working method to programmatically submit dispute evidence to card networks via Shopify API.
- GraphQL:
disputeEvidenceUpdatemutation does NOT have asubmitEvidenceparameter - it can only save/update evidence data - REST API:
submit_evidence: trueparameter is documented but does NOT actually submit -submitted_by_merchant_onalways returnsnull
Both APIs can successfully save evidence data, but neither can trigger actual submission to the card network.
Environment
- Store type: Production store (NOT development store)
- Shopify Payments: Fully activated and verified
- API versions tested: GraphQL 2025-10, REST 2025-01/2025-04/2025-10
- App type: Public app
- Dispute type: Real chargeback (status:
needs_response, withinevidenceDueBydeadline)
Access Scopes
read_shopify_payments_disputes
write_shopify_payments_dispute_evidences
read_shopify_payments_dispute_evidences
Test Results Summary
| Operation | API | Result |
|---|---|---|
| Query disputes | GraphQL | |
| Query disputes | REST | |
| Save/Update evidence data | GraphQL | |
| Save/Update evidence data | REST | |
| Submit evidence | GraphQL | submitEvidence parameter exists |
| Submit evidence | REST submit_evidence: true |
submitted_by_merchant_on: null |
Detailed Findings
Issue 1: GraphQL has NO submission capability
The ShopifyPaymentsDisputeEvidenceUpdateInput input type does NOT include a submitEvidence field. I reviewed the official documentation and confirmed this parameter simply does not exist.
Available fields in GraphQL input:
accessActivityLog,billingAddress,cancellationPolicyDisclosure,cancellationRebuttalcustomerEmailAddress,customerFirstName,customerLastNamerefundPolicyDisclosure,refundRefusalExplanation,shippingAddress,uncategorizedText- Various file fields (
cancellationPolicyFile,shippingDocumentationFile, etc.) - NO
submitEvidencefield
Issue 2: REST API submit_evidence: true does nothing
curl -X PUT \
"https://{store}.myshopify.com/admin/api/2025-10/shopify_payments/disputes/{dispute_id}/dispute_evidences.json" \
-H "X-Shopify-Access-Token: {access_token}" \
-H "Content-Type: application/json" \
-d '{"dispute_evidence": {"submit_evidence": true}}'
Response: HTTP 200 OK
{
"dispute_evidence": {
"id": 819974671,
"payments_dispute_id": 598735659,
"submitted_by_merchant_on": null, // ❌ Should have timestamp
"updated_at": "2025-01-20T14:00:00-05:00",
// ... other fields populated correctly
}
}
Expected behavior per documentation:
{
"dispute_evidence": {
"submitted_by_merchant_on": "2025-10-01T14:56:10-04:00" // âś… Should have timestamp
}
}
Current Workaround (Not Ideal)
The only options available are:
- Manual submission via Shopify Admin UI
- Wait for auto-submit at
evidenceDueBydeadline (Shopify auto-submits whatever evidence exists)
Neither option allows for programmatic, immediate submission which is critical for automated dispute management workflows.
Questions for Shopify Team
-
Is this a bug or intended behavior? The REST API documentation shows
submit_evidence: trueshould work, but it doesn’t. -
Why does GraphQL
disputeEvidenceUpdatenot have a submission parameter? This seems like a significant API gap since REST API is marked as “legacy” but GraphQL lacks equivalent functionality. -
Are there any prerequisites we might be missing? (specific fields required, minimum evidence, etc.)
-
Is there a different mutation/endpoint for submitting evidence that is not publicly documented?
-
If programmatic submission is not supported, please update the documentation to clearly state this limitation.
Impact
This limitation prevents us from:
- Building automated dispute response systems
- Submitting evidence immediately after preparation
- Providing real-time confirmation to merchants that evidence was submitted
Request
Please clarify the expected behavior and provide guidance on how to programmatically submit dispute evidence. If this is currently not possible, please consider adding this capability to the GraphQL API.
Thank you for your assistance!