List payment channels
curl --request GET \
--url https://api.palpluss.com/v1/payment-wallet/channels \
--header 'Authorization: Basic <encoded-value>'import requests
url = "https://api.palpluss.com/v1/payment-wallet/channels"
headers = {"Authorization": "Basic <encoded-value>"}
response = requests.get(url, headers=headers)
print(response.text)const options = {method: 'GET', headers: {Authorization: 'Basic <encoded-value>'}};
fetch('https://api.palpluss.com/v1/payment-wallet/channels', 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.palpluss.com/v1/payment-wallet/channels",
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: Basic <encoded-value>"
],
]);
$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.palpluss.com/v1/payment-wallet/channels"
req, _ := http.NewRequest("GET", url, nil)
req.Header.Add("Authorization", "Basic <encoded-value>")
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.palpluss.com/v1/payment-wallet/channels")
.header("Authorization", "Basic <encoded-value>")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.palpluss.com/v1/payment-wallet/channels")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Get.new(url)
request["Authorization"] = 'Basic <encoded-value>'
response = http.request(request)
puts response.read_body{
"success": true,
"data": {
"items": [
{
"id": "8b3f1a2c-0000-0000-0000-000000000001",
"tenantId": "b6fbe75f-ce87-4d44-b318-6cfdb8b7de4d",
"category": "PAYMENT_WALLET",
"type": "PAYBILL",
"shortcode": "123456",
"name": "Main Collections Paybill",
"accountNumber": "ACCOUNT001",
"isDefault": true,
"createdAt": "2026-03-01T07:00:00.000Z"
}
]
},
"requestId": "f4e5d6c7-0000-0000-0000-000000000000"
}{
"success": false,
"error": {
"message": "Invalid or revoked API key.",
"code": "INVALID_API_KEY",
"details": {}
},
"requestId": "a1b2c3d4-0000-0000-0000-000000000000"
}Payment Channels
List Payment Channels
Fetch all payment channels registered to your account.
GET
/
payment-wallet
/
channels
List payment channels
curl --request GET \
--url https://api.palpluss.com/v1/payment-wallet/channels \
--header 'Authorization: Basic <encoded-value>'import requests
url = "https://api.palpluss.com/v1/payment-wallet/channels"
headers = {"Authorization": "Basic <encoded-value>"}
response = requests.get(url, headers=headers)
print(response.text)const options = {method: 'GET', headers: {Authorization: 'Basic <encoded-value>'}};
fetch('https://api.palpluss.com/v1/payment-wallet/channels', 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.palpluss.com/v1/payment-wallet/channels",
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: Basic <encoded-value>"
],
]);
$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.palpluss.com/v1/payment-wallet/channels"
req, _ := http.NewRequest("GET", url, nil)
req.Header.Add("Authorization", "Basic <encoded-value>")
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.palpluss.com/v1/payment-wallet/channels")
.header("Authorization", "Basic <encoded-value>")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.palpluss.com/v1/payment-wallet/channels")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Get.new(url)
request["Authorization"] = 'Basic <encoded-value>'
response = http.request(request)
puts response.read_body{
"success": true,
"data": {
"items": [
{
"id": "8b3f1a2c-0000-0000-0000-000000000001",
"tenantId": "b6fbe75f-ce87-4d44-b318-6cfdb8b7de4d",
"category": "PAYMENT_WALLET",
"type": "PAYBILL",
"shortcode": "123456",
"name": "Main Collections Paybill",
"accountNumber": "ACCOUNT001",
"isDefault": true,
"createdAt": "2026-03-01T07:00:00.000Z"
}
]
},
"requestId": "f4e5d6c7-0000-0000-0000-000000000000"
}{
"success": false,
"error": {
"message": "Invalid or revoked API key.",
"code": "INVALID_API_KEY",
"details": {}
},
"requestId": "a1b2c3d4-0000-0000-0000-000000000000"
}Retrieve every active payment channel (M-Pesa Paybill / Till shortcode) on your account. Use this to discover the
channelId values you pass when initiating an STK Push.
Ordering
Channels are returned with the default channel first, then newest to oldest. Soft-deleted channels are never returned.{
"success": true,
"data": {
"items": [
{
"id": "8b3f1a2c-0000-0000-0000-000000000001",
"tenantId": "b6fbe75f-ce87-4d44-b318-6cfdb8b7de4d",
"category": "PAYMENT_WALLET",
"type": "PAYBILL",
"shortcode": "123456",
"name": "Main Collections Paybill",
"accountNumber": "ACCOUNT001",
"isDefault": true,
"createdAt": "2026-03-01T07:00:00.000Z"
}
]
},
"requestId": "f4e5d6c7-0000-0000-0000-000000000000"
}
The channel with
"isDefault": true is the one used when you initiate an STK Push without a channelId.curl "https://api.palpluss.com/v1/payment-wallet/channels" \
-u "$PALPLUSS_API_KEY:"
Authorizations
Paste your PalPluss API key in the username field and leave the password field empty — it is ignored.
Get your key from console → Settings → API Keys (starts with pk_live_ or pk_test_).
In your own code, send the key directly:
Authorization: Basic YOUR_API_KEY
Response
Payment channels retrieved successfully.