curl --request GET \
--url https://api.staging.payrails.io/dispute/disputes/{disputeId}/activities \
--header 'Authorization: Bearer <token>'import requests
url = "https://api.staging.payrails.io/dispute/disputes/{disputeId}/activities"
headers = {"Authorization": "Bearer <token>"}
response = requests.get(url, headers=headers)
print(response.text)const options = {method: 'GET', headers: {Authorization: 'Bearer <token>'}};
fetch('https://api.staging.payrails.io/dispute/disputes/{disputeId}/activities', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://api.staging.payrails.io/dispute/disputes/{disputeId}/activities",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "GET",
CURLOPT_HTTPHEADER => [
"Authorization: Bearer <token>"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"net/http"
"io"
)
func main() {
url := "https://api.staging.payrails.io/dispute/disputes/{disputeId}/activities"
req, _ := http.NewRequest("GET", 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.get("https://api.staging.payrails.io/dispute/disputes/{disputeId}/activities")
.header("Authorization", "Bearer <token>")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.staging.payrails.io/dispute/disputes/{disputeId}/activities")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Get.new(url)
request["Authorization"] = 'Bearer <token>'
response = http.request(request)
puts response.read_body{
"results": [
{
"id": "12ab05c9-68b0-41f7-9728-a709fef03035",
"disputeId": "12aee0fb-a406-340c-9bb9-7875e1d18c89",
"type": "DisputeCreated",
"category": "SystemEvent",
"actorType": "system",
"actorSource": "adyen",
"createdAt": "2026-03-23T11:27:54.569586Z"
},
{
"id": "ca288da3-e6a2-4a9d-b1ec-5ce5487c707b",
"disputeId": "12aee0fb-a406-340c-9bb9-7875e1d18c89",
"type": "ChargebackNotification",
"category": "PspEvent",
"actorType": "system",
"actorSource": "adyen",
"metadata": {
"providerReference": "7914073381342284"
},
"createdAt": "2026-03-23T11:27:54.570550Z"
},
{
"id": "8ae02ab8-a893-4dbe-af72-9c779abed47f",
"disputeId": "12aee0fb-a406-340c-9bb9-7875e1d18c89",
"type": "CommentAdded",
"category": "UserAction",
"actorType": "user",
"actorId": "96d29a23-3529-4155-9dc0-65c0c7b9911f",
"actorEmail": "felipe.umpierre@payrails.com",
"referenceId": "a1b2c3d4-e5f6-7890-abcd-ef1234567890",
"commentContent": "This chargeback needs investigation.",
"createdAt": "2026-03-23T12:30:00.000000Z"
}
]
}{
"errors": [
{
"id": "a24bc325-3929-4d9d-9c08-b3aa532685b7",
"code": "request.malformed",
"detail": "The request has malformed syntax",
"docUrl": "https://docs.payrails.com/docs/resources/error-codes#requestmalformed"
}
]
}{
"errors": [
{
"id": "a24bc325-3929-4d9d-9c08-b3aa532685b7",
"code": "request.unauthorized",
"detail": "The request lacks necessary credentials to perform the specified action",
"docUrl": "https://docs.payrails.com/docs/resources/error-codes#requestunauthorized"
}
]
}{
"errors": [
{
"id": "e7db22b3-914e-4975-928e-9edfb0885bea",
"code": "request.forbidden",
"detail": "The request credentials lack the required permissions to perform the specified action",
"docUrl": "https://docs.payrails.com/docs/resources/error-codes#requestforbidden"
}
]
}{
"errors": [
{
"id": "a24bc325-3929-4d9d-9c08-b3aa532685b7",
"code": "request.not-found",
"detail": "The requested resource was not found",
"docUrl": "https://docs.payrails.com/docs/resources/error-codes#requestnot-found"
}
]
}{
"errors": [
{
"id": "a24bc325-3929-4d9d-9c08-b3aa532685b7",
"code": "request.rate-limit",
"detail": "Too many requests",
"docUrl": "https://docs.payrails.com/docs/resources/error-codes#requestrate-limit"
}
]
}Get Dispute Activities by Dispute ID
List all timeline activities for a given dispute, ordered chronologically.
curl --request GET \
--url https://api.staging.payrails.io/dispute/disputes/{disputeId}/activities \
--header 'Authorization: Bearer <token>'import requests
url = "https://api.staging.payrails.io/dispute/disputes/{disputeId}/activities"
headers = {"Authorization": "Bearer <token>"}
response = requests.get(url, headers=headers)
print(response.text)const options = {method: 'GET', headers: {Authorization: 'Bearer <token>'}};
fetch('https://api.staging.payrails.io/dispute/disputes/{disputeId}/activities', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://api.staging.payrails.io/dispute/disputes/{disputeId}/activities",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "GET",
CURLOPT_HTTPHEADER => [
"Authorization: Bearer <token>"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"net/http"
"io"
)
func main() {
url := "https://api.staging.payrails.io/dispute/disputes/{disputeId}/activities"
req, _ := http.NewRequest("GET", 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.get("https://api.staging.payrails.io/dispute/disputes/{disputeId}/activities")
.header("Authorization", "Bearer <token>")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.staging.payrails.io/dispute/disputes/{disputeId}/activities")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Get.new(url)
request["Authorization"] = 'Bearer <token>'
response = http.request(request)
puts response.read_body{
"results": [
{
"id": "12ab05c9-68b0-41f7-9728-a709fef03035",
"disputeId": "12aee0fb-a406-340c-9bb9-7875e1d18c89",
"type": "DisputeCreated",
"category": "SystemEvent",
"actorType": "system",
"actorSource": "adyen",
"createdAt": "2026-03-23T11:27:54.569586Z"
},
{
"id": "ca288da3-e6a2-4a9d-b1ec-5ce5487c707b",
"disputeId": "12aee0fb-a406-340c-9bb9-7875e1d18c89",
"type": "ChargebackNotification",
"category": "PspEvent",
"actorType": "system",
"actorSource": "adyen",
"metadata": {
"providerReference": "7914073381342284"
},
"createdAt": "2026-03-23T11:27:54.570550Z"
},
{
"id": "8ae02ab8-a893-4dbe-af72-9c779abed47f",
"disputeId": "12aee0fb-a406-340c-9bb9-7875e1d18c89",
"type": "CommentAdded",
"category": "UserAction",
"actorType": "user",
"actorId": "96d29a23-3529-4155-9dc0-65c0c7b9911f",
"actorEmail": "felipe.umpierre@payrails.com",
"referenceId": "a1b2c3d4-e5f6-7890-abcd-ef1234567890",
"commentContent": "This chargeback needs investigation.",
"createdAt": "2026-03-23T12:30:00.000000Z"
}
]
}{
"errors": [
{
"id": "a24bc325-3929-4d9d-9c08-b3aa532685b7",
"code": "request.malformed",
"detail": "The request has malformed syntax",
"docUrl": "https://docs.payrails.com/docs/resources/error-codes#requestmalformed"
}
]
}{
"errors": [
{
"id": "a24bc325-3929-4d9d-9c08-b3aa532685b7",
"code": "request.unauthorized",
"detail": "The request lacks necessary credentials to perform the specified action",
"docUrl": "https://docs.payrails.com/docs/resources/error-codes#requestunauthorized"
}
]
}{
"errors": [
{
"id": "e7db22b3-914e-4975-928e-9edfb0885bea",
"code": "request.forbidden",
"detail": "The request credentials lack the required permissions to perform the specified action",
"docUrl": "https://docs.payrails.com/docs/resources/error-codes#requestforbidden"
}
]
}{
"errors": [
{
"id": "a24bc325-3929-4d9d-9c08-b3aa532685b7",
"code": "request.not-found",
"detail": "The requested resource was not found",
"docUrl": "https://docs.payrails.com/docs/resources/error-codes#requestnot-found"
}
]
}{
"errors": [
{
"id": "a24bc325-3929-4d9d-9c08-b3aa532685b7",
"code": "request.rate-limit",
"detail": "Too many requests",
"docUrl": "https://docs.payrails.com/docs/resources/error-codes#requestrate-limit"
}
]
}Authorizations
You can use an OAuth2 JWT bearer token in the Authorization header of your API requests for supported endpoints: Authorization: Bearer <YOUR_JWT_HERE>.
These tokens are valid for 10 minutes and can be requested via the access token endpoint endpoint.
Path Parameters
Identifier of the resource in Payrails.
Response
Success.
Hide child attributes
Hide child attributes
Unique identifier of the activity.
Unique identifier of the dispute this activity belongs to.
The type of activity event.
DisputeCreated, ChargebackNotification, ChargebackReverseNotification, PaymentCreated, AcceptDispute, DefendDispute, SubmitEvidence, AssignmentChanged, CommentAdded, RepresentmentDrafted, DisputeWon, DisputeLost, DisputeResolved, TagAttached, TagDetached, PreArbitrationNotification, ArbitrationNotification, EvidenceRequired, EvidenceSubmitted, DisputeUnderReview, IssuerCommentsReceived, RetrievalNotification, FraudReportNotification, RetrievalInformationRequired, RetrievalEvidenceSubmitted, RetrievalUnderReview, RetrievalLost, RetrievalResolved, FraudReportReceived, ChargebackRaised, ChargebackEvidenceSubmittedPreDebit, ChargebackEvidenceReady, ChargebackNotDefendable, ChargebackAccepted, PreArbitrationOpened, PreArbitrationUnderReview, PreArbitrationWon, PreArbitrationLost, PreArbitrationSecondChargeback, PreArbitrationAccepted, ArbitrationOpened, ArbitrationEvidenceSubmitted, ArbitrationUnderReview, ArbitrationWon, ArbitrationLost, ArbitrationAccepted The category of the activity, derived from the type.
PspEvent, UserAction, SystemEvent The date and time when the activity was created.
The type of actor that triggered this activity.
user, system The unique identifier of the actor (user ID when actorType is user).
The source system of the actor (e.g. adyen, payrails).
The email of the actor, hydrated from the auth service when actorType is user.
Reference to a related entity (e.g. comment ID for CommentAdded activities).
The content of the comment, populated for CommentAdded activities.
Additional metadata associated with the activity.