import Shoply from "@shoplygg/node";
const shoply = new Shoply({ apiKey: process.env.SHOPLY_API_KEY });
const result = await shoply.disputes.markSubmitted("DISPUTE_ID");<?php
require 'vendor/autoload.php';
$shoply = new Shoply\Client(['apiKey' => getenv('SHOPLY_API_KEY')]);
$result = $shoply->disputes->markSubmitted('DISPUTE_ID');
import shoply
client = shoply.Client() # reads SHOPLY_API_KEY
result = client.disputes.markSubmitted("DISPUTE_ID")
curl --request POST \
--url https://api.shoply.gg/v1/stores/{storeId}/disputes/{disputeId}/mark-submitted \
--header 'Authorization: Bearer <token>'package main
import (
"fmt"
"net/http"
"io"
)
func main() {
url := "https://api.shoply.gg/v1/stores/{storeId}/disputes/{disputeId}/mark-submitted"
req, _ := http.NewRequest("POST", url, nil)
req.Header.Add("Authorization", "Bearer <token>")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.post("https://api.shoply.gg/v1/stores/{storeId}/disputes/{disputeId}/mark-submitted")
.header("Authorization", "Bearer <token>")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.shoply.gg/v1/stores/{storeId}/disputes/{disputeId}/mark-submitted")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["Authorization"] = 'Bearer <token>'
response = http.request(request)
puts response.read_body{
"success": true,
"message": null,
"code": null,
"data": {
"id": "0f8aa05a-52c5-4fc5-8180-36aec2177869",
"orderId": "cc9beefe-9e86-42db-8ef0-354c1ab48b0a",
"email": "jonas@example.com",
"provider": "paypal",
"providerName": "PayPal",
"externalId": "PP-D-27803",
"reason": "merchandise_or_service_not_received",
"reasonText": "Says it never arrived",
"stage": "claim",
"providerStatus": "waiting_for_seller_response",
"status": "under_review",
"amount": 10,
"currency": "USD",
"dueAt": "2026-10-31T16:20:19Z",
"answer": {
"state": "submitted",
"at": "2026-10-22T16:20:19Z",
"by": "seller",
"note": ""
},
"answeredFrom": "provider",
"answerPlace": "PayPal's Resolution Center",
"accessTaken": false,
"dateCreated": "2026-10-22T16:20:19Z",
"dateClosed": null,
"order": {
"id": "cc9beefe-9e86-42db-8ef0-354c1ab48b0a",
"status": "completed",
"amount": 10,
"currency": "USD",
"dateCreated": "2026-10-22T16:20:19Z"
},
"can": {
"edit": false,
"submit": false,
"accept": false,
"markSubmitted": false
},
"records": [
{
"key": "buyer",
"title": "The Buyer",
"facts": [
{
"key": "email",
"name": "Email",
"value": "jonas@example.com",
"strong": false
}
]
},
{
"key": "order",
"title": "The Order",
"facts": [
{
"key": "placed",
"name": "Placed",
"value": "Oct 22, 2026, 4:20 PM UTC",
"strong": false
},
{
"key": "paid",
"name": "Paid",
"value": "Oct 14, 2026, 4:20 PM UTC · $10.00 · PayPal",
"strong": false
}
]
}
],
"activity": [],
"draft": {
"decision": "fight",
"contacted": "",
"used": "",
"words": "The buyer bought Throwaway product (Default) on Oct 14, 2026 and it was delivered at once.",
"saved": false,
"statement": "The buyer bought Throwaway product (Default) on Oct 14, 2026 and it was delivered at once.\n\nWhat the store's records show:\n- Email: jonas@example.com\n- Placed: Oct 22, 2026, 4:20 PM UTC\n- Paid: Oct 14, 2026, 4:20 PM UTC · $10.00 · PayPal\n- Delivered: Oct 14, 2026, 4:20 PM UTC · Throwaway product (Default)"
},
"files": [],
"after": [
{
"key": "blacklist",
"done": false,
"text": "The buyer is not blacklisted"
},
{
"key": "access",
"done": false,
"text": "Their keys and files are shown to them"
}
],
"history": [
{
"at": "2026-10-22T16:20:19Z",
"what": "Answered",
"detail": "You marked it as answered in PayPal's Resolution Center."
}
]
}
}{
"success": false,
"message": "<string>",
"code": "<string>",
"data": null,
"errors": {}
}{
"success": false,
"message": "<string>",
"code": "<string>",
"data": null,
"errors": {}
}{
"success": false,
"message": "<string>",
"code": "<string>",
"data": null,
"errors": {}
}{
"success": false,
"message": "<string>",
"code": "<string>",
"data": null,
"errors": {}
}{
"success": false,
"message": "<string>",
"code": "<string>",
"data": null,
"errors": {}
}Mark a dispute as answered
Says the store answered a dispute in its provider’s own dashboard (PayPal’s Resolution Center, Revolut, Adyen, Whop, Shopify), which Shoply cannot send to. It then reads as under review, and its answer can no longer change. 409 not_answerable where it is not waiting on an answer there.
Needs the disputes.write permission (Answer Disputes).
import Shoply from "@shoplygg/node";
const shoply = new Shoply({ apiKey: process.env.SHOPLY_API_KEY });
const result = await shoply.disputes.markSubmitted("DISPUTE_ID");<?php
require 'vendor/autoload.php';
$shoply = new Shoply\Client(['apiKey' => getenv('SHOPLY_API_KEY')]);
$result = $shoply->disputes->markSubmitted('DISPUTE_ID');
import shoply
client = shoply.Client() # reads SHOPLY_API_KEY
result = client.disputes.markSubmitted("DISPUTE_ID")
curl --request POST \
--url https://api.shoply.gg/v1/stores/{storeId}/disputes/{disputeId}/mark-submitted \
--header 'Authorization: Bearer <token>'package main
import (
"fmt"
"net/http"
"io"
)
func main() {
url := "https://api.shoply.gg/v1/stores/{storeId}/disputes/{disputeId}/mark-submitted"
req, _ := http.NewRequest("POST", url, nil)
req.Header.Add("Authorization", "Bearer <token>")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.post("https://api.shoply.gg/v1/stores/{storeId}/disputes/{disputeId}/mark-submitted")
.header("Authorization", "Bearer <token>")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.shoply.gg/v1/stores/{storeId}/disputes/{disputeId}/mark-submitted")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["Authorization"] = 'Bearer <token>'
response = http.request(request)
puts response.read_body{
"success": true,
"message": null,
"code": null,
"data": {
"id": "0f8aa05a-52c5-4fc5-8180-36aec2177869",
"orderId": "cc9beefe-9e86-42db-8ef0-354c1ab48b0a",
"email": "jonas@example.com",
"provider": "paypal",
"providerName": "PayPal",
"externalId": "PP-D-27803",
"reason": "merchandise_or_service_not_received",
"reasonText": "Says it never arrived",
"stage": "claim",
"providerStatus": "waiting_for_seller_response",
"status": "under_review",
"amount": 10,
"currency": "USD",
"dueAt": "2026-10-31T16:20:19Z",
"answer": {
"state": "submitted",
"at": "2026-10-22T16:20:19Z",
"by": "seller",
"note": ""
},
"answeredFrom": "provider",
"answerPlace": "PayPal's Resolution Center",
"accessTaken": false,
"dateCreated": "2026-10-22T16:20:19Z",
"dateClosed": null,
"order": {
"id": "cc9beefe-9e86-42db-8ef0-354c1ab48b0a",
"status": "completed",
"amount": 10,
"currency": "USD",
"dateCreated": "2026-10-22T16:20:19Z"
},
"can": {
"edit": false,
"submit": false,
"accept": false,
"markSubmitted": false
},
"records": [
{
"key": "buyer",
"title": "The Buyer",
"facts": [
{
"key": "email",
"name": "Email",
"value": "jonas@example.com",
"strong": false
}
]
},
{
"key": "order",
"title": "The Order",
"facts": [
{
"key": "placed",
"name": "Placed",
"value": "Oct 22, 2026, 4:20 PM UTC",
"strong": false
},
{
"key": "paid",
"name": "Paid",
"value": "Oct 14, 2026, 4:20 PM UTC · $10.00 · PayPal",
"strong": false
}
]
}
],
"activity": [],
"draft": {
"decision": "fight",
"contacted": "",
"used": "",
"words": "The buyer bought Throwaway product (Default) on Oct 14, 2026 and it was delivered at once.",
"saved": false,
"statement": "The buyer bought Throwaway product (Default) on Oct 14, 2026 and it was delivered at once.\n\nWhat the store's records show:\n- Email: jonas@example.com\n- Placed: Oct 22, 2026, 4:20 PM UTC\n- Paid: Oct 14, 2026, 4:20 PM UTC · $10.00 · PayPal\n- Delivered: Oct 14, 2026, 4:20 PM UTC · Throwaway product (Default)"
},
"files": [],
"after": [
{
"key": "blacklist",
"done": false,
"text": "The buyer is not blacklisted"
},
{
"key": "access",
"done": false,
"text": "Their keys and files are shown to them"
}
],
"history": [
{
"at": "2026-10-22T16:20:19Z",
"what": "Answered",
"detail": "You marked it as answered in PayPal's Resolution Center."
}
]
}
}{
"success": false,
"message": "<string>",
"code": "<string>",
"data": null,
"errors": {}
}{
"success": false,
"message": "<string>",
"code": "<string>",
"data": null,
"errors": {}
}{
"success": false,
"message": "<string>",
"code": "<string>",
"data": null,
"errors": {}
}{
"success": false,
"message": "<string>",
"code": "<string>",
"data": null,
"errors": {}
}{
"success": false,
"message": "<string>",
"code": "<string>",
"data": null,
"errors": {}
}Authorizations
A secret API key, made under Developers in the dashboard: Authorization: Bearer shoply_sk_...
Headers
A word of your own for this one change, up to 180 letters, digits, dots, dashes, underscores and colons. Sent again with the same key, the request is not carried out twice: the first answer comes back, with Idempotent-Replay: true.
Path Parameters
The store's ID. A key reaches the store it was made in: GET /key answers which.
The dispute, by its ID.

