Get Stripe billing portal URL
curl --request POST \
--url 'https://{domain}/wp-json/sagescreen/v1/wp-admin/admin-ajax.php?nonce=&action=sagescreen_get_stripe_portal_url' \
--header 'Content-Type: application/x-www-form-urlencoded' \
--data action=sagescreen_get_stripe_portal_url \
--data 'nonce=<string>'import requests
url = "https://{domain}/wp-json/sagescreen/v1/wp-admin/admin-ajax.php?nonce=&action=sagescreen_get_stripe_portal_url"
payload = {
"action": "sagescreen_get_stripe_portal_url",
"nonce": "<string>"
}
headers = {"Content-Type": "application/x-www-form-urlencoded"}
response = requests.post(url, data=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {'Content-Type': 'application/x-www-form-urlencoded'},
body: new URLSearchParams({action: 'sagescreen_get_stripe_portal_url', nonce: '<string>'})
};
fetch('https://{domain}/wp-json/sagescreen/v1/wp-admin/admin-ajax.php?nonce=&action=sagescreen_get_stripe_portal_url', 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://{domain}/wp-json/sagescreen/v1/wp-admin/admin-ajax.php?nonce=&action=sagescreen_get_stripe_portal_url",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "POST",
CURLOPT_POSTFIELDS => "action=sagescreen_get_stripe_portal_url&nonce=%3Cstring%3E",
CURLOPT_HTTPHEADER => [
"Content-Type: application/x-www-form-urlencoded"
],
]);
$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://{domain}/wp-json/sagescreen/v1/wp-admin/admin-ajax.php?nonce=&action=sagescreen_get_stripe_portal_url"
payload := strings.NewReader("action=sagescreen_get_stripe_portal_url&nonce=%3Cstring%3E")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("Content-Type", "application/x-www-form-urlencoded")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.post("https://{domain}/wp-json/sagescreen/v1/wp-admin/admin-ajax.php?nonce=&action=sagescreen_get_stripe_portal_url")
.header("Content-Type", "application/x-www-form-urlencoded")
.body("action=sagescreen_get_stripe_portal_url&nonce=%3Cstring%3E")
.asString();require 'uri'
require 'net/http'
url = URI("https://{domain}/wp-json/sagescreen/v1/wp-admin/admin-ajax.php?nonce=&action=sagescreen_get_stripe_portal_url")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["Content-Type"] = 'application/x-www-form-urlencoded'
request.body = "action=sagescreen_get_stripe_portal_url&nonce=%3Cstring%3E"
response = http.request(request)
puts response.read_body{
"success": true,
"data": {
"url": "https://billing.stripe.com/p/session/test_YWNjdF8xTnFJQ..."
}
}
Billing – AJAX
Get Stripe billing portal URL
Generates a one-time Stripe Customer Portal session URL for the current user’s council. The portal allows customers to manage payment methods, view invoices, and update billing details.
Requires the user to be logged in and pass the
sage_screen_can_access_billing() capability check.
Registered as wp_ajax_sagescreen_get_stripe_portal_url — login required.
POST
/
wp-admin
/
admin-ajax.php?action=sagescreen_get_stripe_portal_url
Get Stripe billing portal URL
curl --request POST \
--url 'https://{domain}/wp-json/sagescreen/v1/wp-admin/admin-ajax.php?nonce=&action=sagescreen_get_stripe_portal_url' \
--header 'Content-Type: application/x-www-form-urlencoded' \
--data action=sagescreen_get_stripe_portal_url \
--data 'nonce=<string>'import requests
url = "https://{domain}/wp-json/sagescreen/v1/wp-admin/admin-ajax.php?nonce=&action=sagescreen_get_stripe_portal_url"
payload = {
"action": "sagescreen_get_stripe_portal_url",
"nonce": "<string>"
}
headers = {"Content-Type": "application/x-www-form-urlencoded"}
response = requests.post(url, data=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {'Content-Type': 'application/x-www-form-urlencoded'},
body: new URLSearchParams({action: 'sagescreen_get_stripe_portal_url', nonce: '<string>'})
};
fetch('https://{domain}/wp-json/sagescreen/v1/wp-admin/admin-ajax.php?nonce=&action=sagescreen_get_stripe_portal_url', 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://{domain}/wp-json/sagescreen/v1/wp-admin/admin-ajax.php?nonce=&action=sagescreen_get_stripe_portal_url",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "POST",
CURLOPT_POSTFIELDS => "action=sagescreen_get_stripe_portal_url&nonce=%3Cstring%3E",
CURLOPT_HTTPHEADER => [
"Content-Type: application/x-www-form-urlencoded"
],
]);
$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://{domain}/wp-json/sagescreen/v1/wp-admin/admin-ajax.php?nonce=&action=sagescreen_get_stripe_portal_url"
payload := strings.NewReader("action=sagescreen_get_stripe_portal_url&nonce=%3Cstring%3E")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("Content-Type", "application/x-www-form-urlencoded")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.post("https://{domain}/wp-json/sagescreen/v1/wp-admin/admin-ajax.php?nonce=&action=sagescreen_get_stripe_portal_url")
.header("Content-Type", "application/x-www-form-urlencoded")
.body("action=sagescreen_get_stripe_portal_url&nonce=%3Cstring%3E")
.asString();require 'uri'
require 'net/http'
url = URI("https://{domain}/wp-json/sagescreen/v1/wp-admin/admin-ajax.php?nonce=&action=sagescreen_get_stripe_portal_url")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["Content-Type"] = 'application/x-www-form-urlencoded'
request.body = "action=sagescreen_get_stripe_portal_url&nonce=%3Cstring%3E"
response = http.request(request)
puts response.read_body{
"success": true,
"data": {
"url": "https://billing.stripe.com/p/session/test_YWNjdF8xTnFJQ..."
}
}
Authorizations
WordPress AJAX nonce (passed as form field, verified per-action)
Body
application/x-www-form-urlencoded
⌘I