[Bug] Cannot submit dispute evidence programmatically - Neither GraphQL nor REST API works on Production Store

Summary

There is NO working method to programmatically submit dispute evidence to card networks via Shopify API.

  • GraphQL: disputeEvidenceUpdate mutation does NOT have a submitEvidence parameter - it can only save/update evidence data
  • REST API: submit_evidence: true parameter is documented but does NOT actually submit - submitted_by_merchant_on always returns null

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, within evidenceDueBy deadline)

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 :white_check_mark: Works
Query disputes REST :white_check_mark: Works
Save/Update evidence data GraphQL :white_check_mark: Works
Save/Update evidence data REST :white_check_mark: Works
Submit evidence GraphQL :cross_mark: No submitEvidence parameter exists
Submit evidence REST submit_evidence: true :cross_mark: Returns 200 OK but 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, cancellationRebuttal
  • customerEmailAddress, customerFirstName, customerLastName
  • refundPolicyDisclosure, refundRefusalExplanation, shippingAddress, uncategorizedText
  • Various file fields (cancellationPolicyFile, shippingDocumentationFile, etc.)
  • NO submitEvidence field

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:

  1. Manual submission via Shopify Admin UI
  2. Wait for auto-submit at evidenceDueBy deadline (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

  1. Is this a bug or intended behavior? The REST API documentation shows submit_evidence: true should work, but it doesn’t.

  2. Why does GraphQL disputeEvidenceUpdate not have a submission parameter? This seems like a significant API gap since REST API is marked as “legacy” but GraphQL lacks equivalent functionality.

  3. Are there any prerequisites we might be missing? (specific fields required, minimum evidence, etc.)

  4. Is there a different mutation/endpoint for submitting evidence that is not publicly documented?

  5. 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!

1 Like

Hey @PENGUIN_SECRET_AGENC, thanks for sharing your detailed report. I’ve looked in to this and we are aware of the limitation you’ve brought up.

I have passed that feedback on and I will update you here once I have a solution or workaround. Currently the admin (as you noted) is the only way to submit early.

Hi @KyleG-Shopify,

I hope you’re doing well.

I’m just following up regarding the limitation around programmatic submission of dispute evidence via the Shopify API (GraphQL and REST).

On January 22, you mentioned that the team is aware of this limitation and that you would provide an update once there is a solution or workaround available. Since then, we haven’t seen any new information.

Could you please let us know if there are any updates on:

  • Support for programmatic evidence submission via GraphQL

  • A fix for the REST submit_evidence: true parameter

  • Any planned roadmap changes or interim workaround

This capability is quite important for automated dispute management workflows, so we’d really appreciate any status update you can share — even if it’s just confirmation that it’s still under review.

Thank you very much for your time and support!

Thanks for following up @PENGUIN_SECRET_AGENC

I don’t yet have any updates to share, but I will as soon as I have something to share.

The best option here is to continue to have the merchant submit evidence in the admin.

1 Like