curl --request POST \
--url https://prod-api.pcxpay.com/v1/public/webhooks \
--header 'Authorization: <authorization>' \
--header 'Content-Type: application/json' \
--header 'X-Api-Key: <x-api-key>' \
--data '
{
"endpoint_url": "https://yourapp.com/webhooks/pcx",
"events": [
"payment.settled",
"payment.failed"
]
}
'import requests
url = "https://prod-api.pcxpay.com/v1/public/webhooks"
payload = {
"endpoint_url": "https://yourapp.com/webhooks/pcx",
"events": ["payment.settled", "payment.failed"]
}
headers = {
"Authorization": "<authorization>",
"X-Api-Key": "<x-api-key>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {
Authorization: '<authorization>',
'X-Api-Key': '<x-api-key>',
'Content-Type': 'application/json'
},
body: JSON.stringify({
endpoint_url: 'https://yourapp.com/webhooks/pcx',
events: ['payment.settled', 'payment.failed']
})
};
fetch('https://prod-api.pcxpay.com/v1/public/webhooks', 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://prod-api.pcxpay.com/v1/public/webhooks",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "POST",
CURLOPT_POSTFIELDS => json_encode([
'endpoint_url' => 'https://yourapp.com/webhooks/pcx',
'events' => [
'payment.settled',
'payment.failed'
]
]),
CURLOPT_HTTPHEADER => [
"Authorization: <authorization>",
"Content-Type: application/json",
"X-Api-Key: <x-api-key>"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"strings"
"net/http"
"io"
)
func main() {
url := "https://prod-api.pcxpay.com/v1/public/webhooks"
payload := strings.NewReader("{\n \"endpoint_url\": \"https://yourapp.com/webhooks/pcx\",\n \"events\": [\n \"payment.settled\",\n \"payment.failed\"\n ]\n}")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("Authorization", "<authorization>")
req.Header.Add("X-Api-Key", "<x-api-key>")
req.Header.Add("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.post("https://prod-api.pcxpay.com/v1/public/webhooks")
.header("Authorization", "<authorization>")
.header("X-Api-Key", "<x-api-key>")
.header("Content-Type", "application/json")
.body("{\n \"endpoint_url\": \"https://yourapp.com/webhooks/pcx\",\n \"events\": [\n \"payment.settled\",\n \"payment.failed\"\n ]\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://prod-api.pcxpay.com/v1/public/webhooks")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["Authorization"] = '<authorization>'
request["X-Api-Key"] = '<x-api-key>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"endpoint_url\": \"https://yourapp.com/webhooks/pcx\",\n \"events\": [\n \"payment.settled\",\n \"payment.failed\"\n ]\n}"
response = http.request(request)
puts response.read_body{
"status": "success",
"message": "<string>",
"data": {
"webhook_id": "<string>",
"org_id": "<string>",
"endpoint_url": "<string>",
"secret_key": "<string>",
"events": [
"<string>"
],
"status": "active",
"created_at": "2023-11-07T05:31:56Z"
}
}{
"message": "<string>",
"status": "error"
}{
"message": "<string>",
"status": "error"
}Register webhook
Registers an HTTPS endpoint to receive event notifications. PCX will POST events to this URL as they occur. The organisation identity is derived from your API key. The response includes the secret_key used to sign every delivery — it is returned only once, so store it securely.
curl --request POST \
--url https://prod-api.pcxpay.com/v1/public/webhooks \
--header 'Authorization: <authorization>' \
--header 'Content-Type: application/json' \
--header 'X-Api-Key: <x-api-key>' \
--data '
{
"endpoint_url": "https://yourapp.com/webhooks/pcx",
"events": [
"payment.settled",
"payment.failed"
]
}
'import requests
url = "https://prod-api.pcxpay.com/v1/public/webhooks"
payload = {
"endpoint_url": "https://yourapp.com/webhooks/pcx",
"events": ["payment.settled", "payment.failed"]
}
headers = {
"Authorization": "<authorization>",
"X-Api-Key": "<x-api-key>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {
Authorization: '<authorization>',
'X-Api-Key': '<x-api-key>',
'Content-Type': 'application/json'
},
body: JSON.stringify({
endpoint_url: 'https://yourapp.com/webhooks/pcx',
events: ['payment.settled', 'payment.failed']
})
};
fetch('https://prod-api.pcxpay.com/v1/public/webhooks', 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://prod-api.pcxpay.com/v1/public/webhooks",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "POST",
CURLOPT_POSTFIELDS => json_encode([
'endpoint_url' => 'https://yourapp.com/webhooks/pcx',
'events' => [
'payment.settled',
'payment.failed'
]
]),
CURLOPT_HTTPHEADER => [
"Authorization: <authorization>",
"Content-Type: application/json",
"X-Api-Key: <x-api-key>"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"strings"
"net/http"
"io"
)
func main() {
url := "https://prod-api.pcxpay.com/v1/public/webhooks"
payload := strings.NewReader("{\n \"endpoint_url\": \"https://yourapp.com/webhooks/pcx\",\n \"events\": [\n \"payment.settled\",\n \"payment.failed\"\n ]\n}")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("Authorization", "<authorization>")
req.Header.Add("X-Api-Key", "<x-api-key>")
req.Header.Add("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.post("https://prod-api.pcxpay.com/v1/public/webhooks")
.header("Authorization", "<authorization>")
.header("X-Api-Key", "<x-api-key>")
.header("Content-Type", "application/json")
.body("{\n \"endpoint_url\": \"https://yourapp.com/webhooks/pcx\",\n \"events\": [\n \"payment.settled\",\n \"payment.failed\"\n ]\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://prod-api.pcxpay.com/v1/public/webhooks")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["Authorization"] = '<authorization>'
request["X-Api-Key"] = '<x-api-key>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"endpoint_url\": \"https://yourapp.com/webhooks/pcx\",\n \"events\": [\n \"payment.settled\",\n \"payment.failed\"\n ]\n}"
response = http.request(request)
puts response.read_body{
"status": "success",
"message": "<string>",
"data": {
"webhook_id": "<string>",
"org_id": "<string>",
"endpoint_url": "<string>",
"secret_key": "<string>",
"events": [
"<string>"
],
"status": "active",
"created_at": "2023-11-07T05:31:56Z"
}
}{
"message": "<string>",
"status": "error"
}{
"message": "<string>",
"status": "error"
}Headers
Reserved for PCX-managed applications. External API integrations must always send the literal string NONE — this is the only accepted value.
NONE "NONE"
Your API key. This is the only supported credential.
"pcx_abc123_xxxx"
Body
HTTPS URL that PCX will POST events to. Must be publicly reachable and return a 2xx response to acknowledge receipt.
"https://yourapp.com/webhooks/pcx"
Event types to subscribe to. Omit or send an empty array to receive all event types. See GET /public/webhooks/events/catalogue for the full list.
["payment.settled", "payment.failed"]