curl --request GET \
--url https://app.sideshift.app/api/oauth/v1/invoices/{id}/payment-details \
--header 'Authorization: Bearer <token>'import requests
url = "https://app.sideshift.app/api/oauth/v1/invoices/{id}/payment-details"
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/invoices/{id}/payment-details', 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/invoices/{id}/payment-details",
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/invoices/{id}/payment-details"
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/invoices/{id}/payment-details")
.header("Authorization", "Bearer <token>")
.asString();require 'uri'
require 'net/http'
url = URI("https://app.sideshift.app/api/oauth/v1/invoices/{id}/payment-details")
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>",
"status": "<string>",
"substatus": "<string>",
"refundable": true,
"retryable": true,
"voidable": true,
"createdAt": "<string>",
"paidAt": "<string>",
"refundedAt": "<string>",
"total": 123,
"subtotal": 123,
"usdTotal": 123,
"refundedAmount": 123,
"amountAfterFees": 123,
"currency": "<string>",
"paymentMethodType": "<string>",
"cardBrand": "<string>",
"cardLast4": "<string>",
"billingReason": "<string>",
"failureMessage": "<string>",
"autoRefunded": true,
"user": {
"id": "<string>",
"name": "<string>",
"username": "<string>",
"email": "<string>"
},
"paymentMethod": {
"id": "<string>",
"type": "<string>",
"card": {}
},
"billingAddress": {}
}
}{
"error": {
"code": "unauthorized",
"message": "Missing bearer access token",
"requestId": "req_..."
}
}{
"error": {
"code": "insufficient_scope",
"message": "Requires scope 'campaigns:write'",
"requestId": "req_..."
}
}{
"error": {
"code": "not_found",
"message": "Resource not found",
"requestId": "req_..."
}
}{
"error": {
"code": "rate_limited",
"message": "Rate limit exceeded",
"requestId": "req_..."
}
}Get invoice payment record
Resolve the underlying Stripe or payment-provider payment record for the token tenant’s invoice, normalized into a single payment object. Requires the invoices:read scope.
curl --request GET \
--url https://app.sideshift.app/api/oauth/v1/invoices/{id}/payment-details \
--header 'Authorization: Bearer <token>'import requests
url = "https://app.sideshift.app/api/oauth/v1/invoices/{id}/payment-details"
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/invoices/{id}/payment-details', 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/invoices/{id}/payment-details",
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/invoices/{id}/payment-details"
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/invoices/{id}/payment-details")
.header("Authorization", "Bearer <token>")
.asString();require 'uri'
require 'net/http'
url = URI("https://app.sideshift.app/api/oauth/v1/invoices/{id}/payment-details")
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>",
"status": "<string>",
"substatus": "<string>",
"refundable": true,
"retryable": true,
"voidable": true,
"createdAt": "<string>",
"paidAt": "<string>",
"refundedAt": "<string>",
"total": 123,
"subtotal": 123,
"usdTotal": 123,
"refundedAmount": 123,
"amountAfterFees": 123,
"currency": "<string>",
"paymentMethodType": "<string>",
"cardBrand": "<string>",
"cardLast4": "<string>",
"billingReason": "<string>",
"failureMessage": "<string>",
"autoRefunded": true,
"user": {
"id": "<string>",
"name": "<string>",
"username": "<string>",
"email": "<string>"
},
"paymentMethod": {
"id": "<string>",
"type": "<string>",
"card": {}
},
"billingAddress": {}
}
}{
"error": {
"code": "unauthorized",
"message": "Missing bearer access token",
"requestId": "req_..."
}
}{
"error": {
"code": "insufficient_scope",
"message": "Requires scope 'campaigns:write'",
"requestId": "req_..."
}
}{
"error": {
"code": "not_found",
"message": "Resource not found",
"requestId": "req_..."
}
}{
"error": {
"code": "rate_limited",
"message": "Rate limit exceeded",
"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.
Path Parameters
The id.
Response
The normalized payment record (Stripe or the payment provider) for the invoice.
Envelope for the normalized invoice payment record. The data payload is the payment object (the use-case's success flag is stripped).
Normalized payment record resolved from the invoice's underlying Stripe PaymentIntent or provider payment. The shape is the same for both providers (the provider field distinguishes them); some fields are only populated by one provider. Permissive: additional provider-specific fields may appear.
Show child attributes
Show child attributes