curl --request GET \
--url https://app.sideshift.app/api/oauth/v1/payouts/receipt-links \
--header 'Authorization: Bearer <token>'import requests
url = "https://app.sideshift.app/api/oauth/v1/payouts/receipt-links"
headers = {"Authorization": "Bearer <token>"}
response = requests.get(url, headers=headers)
print(response.text)const options = {method: 'GET', headers: {Authorization: 'Bearer <token>'}};
fetch('https://app.sideshift.app/api/oauth/v1/payouts/receipt-links', 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://app.sideshift.app/api/oauth/v1/payouts/receipt-links",
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://app.sideshift.app/api/oauth/v1/payouts/receipt-links"
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://app.sideshift.app/api/oauth/v1/payouts/receipt-links")
.header("Authorization", "Bearer <token>")
.asString();require 'uri'
require 'net/http'
url = URI("https://app.sideshift.app/api/oauth/v1/payouts/receipt-links")
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{
"data": [
{
"id": "<string>",
"kind": "payout",
"reason": "<string>",
"amountCents": 123,
"downloadUrl": "<string>",
"fileName": "<string>",
"createdAt": "<string>",
"recipientUserId": "<string>",
"recipientName": "<string>",
"recipientProfileImageUrl": "<string>",
"campaignName": "<string>",
"walletCompanyId": "<string>",
"companyName": "<string>"
}
],
"total": 123,
"truncated": true,
"archiveUrl": "<string>",
"archiveFileName": "<string>"
}{
"error": {
"code": "unauthorized",
"message": "Missing bearer access token",
"requestId": "req_..."
}
}Get payout and deposit receipt download links
The token tenant’s wallet receipts, newest first: payout receipts (money paid to a creator) and deposit receipts (wallet top-ups), each with an auth-gated PDF link, plus one ZIP link for the returned set. Filter by ledgerIds, recipientId (creator user id), or kind; limit is capped at 50. total counts matching receipts among the most recent 500 ledger entries and truncated says whether older entries exist. The browser GET behind each link authenticates the clicker (company session) and answers with the file as an attachment.
curl --request GET \
--url https://app.sideshift.app/api/oauth/v1/payouts/receipt-links \
--header 'Authorization: Bearer <token>'import requests
url = "https://app.sideshift.app/api/oauth/v1/payouts/receipt-links"
headers = {"Authorization": "Bearer <token>"}
response = requests.get(url, headers=headers)
print(response.text)const options = {method: 'GET', headers: {Authorization: 'Bearer <token>'}};
fetch('https://app.sideshift.app/api/oauth/v1/payouts/receipt-links', 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://app.sideshift.app/api/oauth/v1/payouts/receipt-links",
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://app.sideshift.app/api/oauth/v1/payouts/receipt-links"
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://app.sideshift.app/api/oauth/v1/payouts/receipt-links")
.header("Authorization", "Bearer <token>")
.asString();require 'uri'
require 'net/http'
url = URI("https://app.sideshift.app/api/oauth/v1/payouts/receipt-links")
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{
"data": [
{
"id": "<string>",
"kind": "payout",
"reason": "<string>",
"amountCents": 123,
"downloadUrl": "<string>",
"fileName": "<string>",
"createdAt": "<string>",
"recipientUserId": "<string>",
"recipientName": "<string>",
"recipientProfileImageUrl": "<string>",
"campaignName": "<string>",
"walletCompanyId": "<string>",
"companyName": "<string>"
}
],
"total": 123,
"truncated": true,
"archiveUrl": "<string>",
"archiveFileName": "<string>"
}{
"error": {
"code": "unauthorized",
"message": "Missing bearer access token",
"requestId": "req_..."
}
}Authorizations
OAuth 2.1 authorization code + PKCE (S256). Tokens are tenant-bound (company_id) and scoped. Discover endpoints via /.well-known/oauth-authorization-server.
Query Parameters
Comma-separated wallet ledger entry ids (max 50).
Only receipts for this creator (user id).
payouts, deposits, or all (default).
payouts, deposits, all How many receipts, newest first (default 50, max 50).
1 <= x <= 50Agency parents only, "true" to include subaccount wallets.
Required when includeSubaccounts is true.