List workspace payments with source attribution
curl --request GET \
--url https://api.contactbutton.com/v1/workspaces/{workspace}/payments \
--header 'Authorization: Bearer <token>'import requests
url = "https://api.contactbutton.com/v1/workspaces/{workspace}/payments"
headers = {"Authorization": "Bearer <token>"}
response = requests.get(url, headers=headers)
print(response.text)const options = {method: 'GET', headers: {Authorization: 'Bearer <token>'}};
fetch('https://api.contactbutton.com/v1/workspaces/{workspace}/payments', 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.contactbutton.com/v1/workspaces/{workspace}/payments",
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.contactbutton.com/v1/workspaces/{workspace}/payments"
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.contactbutton.com/v1/workspaces/{workspace}/payments")
.header("Authorization", "Bearer <token>")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.contactbutton.com/v1/workspaces/{workspace}/payments")
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": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"source": "support",
"source_label": "<string>",
"source_name": "<string>",
"customer_name": "<string>",
"status": "<string>",
"amount_minor": 123,
"currency": "<string>",
"created_at": "2023-11-07T05:31:56Z",
"application_fee_minor": 123,
"stripe_fee_minor": 123,
"creator_net_minor": 123,
"paid_at": "2023-11-07T05:31:56Z"
}
],
"meta": {
"request_id": "<string>",
"summary": {},
"sources": {}
}
}List workspace payments with source attribution
Returns the normalized workspace payment ledger used by the dashboard. Support App payments and verified Commerce orders are available now. Paid booking reservations use the Commerce order adapter after online booking collection has created a verified paid order.
GET
/
workspaces
/
{workspace}
/
payments
List workspace payments with source attribution
curl --request GET \
--url https://api.contactbutton.com/v1/workspaces/{workspace}/payments \
--header 'Authorization: Bearer <token>'import requests
url = "https://api.contactbutton.com/v1/workspaces/{workspace}/payments"
headers = {"Authorization": "Bearer <token>"}
response = requests.get(url, headers=headers)
print(response.text)const options = {method: 'GET', headers: {Authorization: 'Bearer <token>'}};
fetch('https://api.contactbutton.com/v1/workspaces/{workspace}/payments', 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.contactbutton.com/v1/workspaces/{workspace}/payments",
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.contactbutton.com/v1/workspaces/{workspace}/payments"
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.contactbutton.com/v1/workspaces/{workspace}/payments")
.header("Authorization", "Bearer <token>")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.contactbutton.com/v1/workspaces/{workspace}/payments")
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": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"source": "support",
"source_label": "<string>",
"source_name": "<string>",
"customer_name": "<string>",
"status": "<string>",
"amount_minor": 123,
"currency": "<string>",
"created_at": "2023-11-07T05:31:56Z",
"application_fee_minor": 123,
"stripe_fee_minor": 123,
"creator_net_minor": 123,
"paid_at": "2023-11-07T05:31:56Z"
}
],
"meta": {
"request_id": "<string>",
"summary": {},
"sources": {}
}
}Authorizations
A Contact Button scoped bearer key. Send Authorization: Bearer <token>.
Token abilities are enforced independently of workspace membership; both checks must pass.
Interactive MCP clients use registered OAuth applications, Authorization Code + PKCE,
audience-bound tokens, and explicit workspace grants. Personal Sanctum tokens remain supported.
Path Parameters
Was this page helpful?