Skip to main content

Chargeback Disputes API Integration

Authentication

We will provide you with a secret key you can use to authenticate with our endpoints. Authentication is done via the X-API-KEY header.

Error responses:

StatusBodyWhen
401An API key is required for authentication (plain text)X-API-KEY header missing
403Invalid API key provided (plain text)Key doesn't exist, or the lookup failed
403Key has invalid permissions (plain text)Key exists but isn't authorized for this operation

Request Proof

To request proof for use in chargeback disputes, create a ProofRequest

method: PUT

endpoint: https://api.dyneti.com/disputes/proofRequest

body:

["scan-id-1", "scan-id-2", ...]

response:

{
"id": "proof-request-id"
}

example:

curl -X PUT https://api.dyneti.com/disputes/proofRequest \
-H "X-API-KEY: your-secret-key-here" \
-H "Content-Type: application/json" \
-d '["scan-id-1", "scan-id-2", "scan-id-3"]'

There is no maximum number of scan IDs per request. You can send a single scan ID per proofRequest (e.g., one per chargeback) or batch many together — there's no functional or performance downside either way.

Error responses:

StatusBodyWhen
400{"error": "Invalid request. Empty body"}Body missing or an empty array.
400{}Body present but not valid JSON
400{"error": "Invalid request. At least one of the provided scan IDs is not valid"}Body contains at least an entry that's not a valid UUIDv4

Check Proof Request Status

method: GET

endpoint: https://api.dyneti.com/disputes/proof/<proof_request_id>

example:

curl -X GET https://api.dyneti.com/disputes/proof/your-proof-request-id-here \
-H "X-API-KEY: your-secret-key-here"

If the request is not yet complete, the status will be pending:

{
"status": "pending"
}

You can poll the request until the status is complete. We recommend an interval of a few hours.

If the request is complete, the status will be complete and the scans field will be present:

{
"status": "complete",
"scans": [
{
"scanId": "scan-id-1",
"groundTruth": "valid",
"image": "https://api.dyneti.com/disputes/image/scan-id-1.jpg"
},
{
"scanId": "invalid-scan-id-1",
"groundTruth": "invalid"
},
...
]

}

Here, groundTruth "valid" means that this is a good candidate scan for a chargeback dispute (e.g. a friendly fraud case). On the other hand, groundTruth "invalid" means that the scan corresponds to actual fraud and thus this scan is not a good candidate for a chargeback dispute.

Note: scans marked as “invalid” will not include an image url.

Error responses:

StatusBodyWhen
404{"error": "Proof request not found"}proofRequestId doesn't exist
403{"error": "Forbidden"}Proof request exists but belongs to a different account

Retrieve Dispute Image

Use this endpoint to fetch the image for a scan that was returned with a groundTruth of "valid" in a completed proof request. Requires the X-API-KEY header, same as all other endpoints. The response is the raw JPEG, returned with Content-Disposition: attachment; filename={scanId}.jpg (i.e., it downloads as a file rather than rendering inline — don't drop the URL directly into an <img> tag).

method: GET

endpoint: https://api.dyneti.com/disputes/image/<scanId>.jpg

example:

curl -H "X-API-KEY: your-secret-key-here" \
https://api.dyneti.com/disputes/image/<scan-id>.jpg \
-o scan.jpg

Error responses:

StatusBodyWhen
400{"error": "Invalid request. Provided scan ID is not valid"}scanId isn't a valid UUIDv4
400Bad Request (plaintext)Error verifying scan ownership
403{"error": "Forbidden"}Scan was labeled fraudulent — image is not retrievable.
404{"error": "Image not found"}Scan hasn't been labeled yet, or doesn't belong to this account
404Not Found (plaintext)Scan was labeled, but the underlying image could not be located