Billing Portal
curl --request POST \
--url https://api.example.com/api/billing/portal \
--header 'Content-Type: application/json' \
--header 'X-Organization-Id: <x-organization-id>' \
--data '
{
"return_url": "<string>"
}
'import requests
url = "https://api.example.com/api/billing/portal"
payload = { "return_url": "<string>" }
headers = {
"X-Organization-Id": "<x-organization-id>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {'X-Organization-Id': '<x-organization-id>', 'Content-Type': 'application/json'},
body: JSON.stringify({return_url: '<string>'})
};
fetch('https://api.example.com/api/billing/portal', 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.example.com/api/billing/portal",
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([
'return_url' => '<string>'
]),
CURLOPT_HTTPHEADER => [
"Content-Type: application/json",
"X-Organization-Id: <x-organization-id>"
],
]);
$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://api.example.com/api/billing/portal"
payload := strings.NewReader("{\n \"return_url\": \"<string>\"\n}")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("X-Organization-Id", "<x-organization-id>")
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://api.example.com/api/billing/portal")
.header("X-Organization-Id", "<x-organization-id>")
.header("Content-Type", "application/json")
.body("{\n \"return_url\": \"<string>\"\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.example.com/api/billing/portal")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["X-Organization-Id"] = '<x-organization-id>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"return_url\": \"<string>\"\n}"
response = http.request(request)
puts response.read_body{
"portal_url": "https://portal.dodopayments.com/session/ps_ghi789"
}
Billing
Billing Portal
POST
/
api
/
billing
/
portal
Billing Portal
curl --request POST \
--url https://api.example.com/api/billing/portal \
--header 'Content-Type: application/json' \
--header 'X-Organization-Id: <x-organization-id>' \
--data '
{
"return_url": "<string>"
}
'import requests
url = "https://api.example.com/api/billing/portal"
payload = { "return_url": "<string>" }
headers = {
"X-Organization-Id": "<x-organization-id>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {'X-Organization-Id': '<x-organization-id>', 'Content-Type': 'application/json'},
body: JSON.stringify({return_url: '<string>'})
};
fetch('https://api.example.com/api/billing/portal', 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.example.com/api/billing/portal",
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([
'return_url' => '<string>'
]),
CURLOPT_HTTPHEADER => [
"Content-Type: application/json",
"X-Organization-Id: <x-organization-id>"
],
]);
$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://api.example.com/api/billing/portal"
payload := strings.NewReader("{\n \"return_url\": \"<string>\"\n}")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("X-Organization-Id", "<x-organization-id>")
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://api.example.com/api/billing/portal")
.header("X-Organization-Id", "<x-organization-id>")
.header("Content-Type", "application/json")
.body("{\n \"return_url\": \"<string>\"\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.example.com/api/billing/portal")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["X-Organization-Id"] = '<x-organization-id>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"return_url\": \"<string>\"\n}"
response = http.request(request)
puts response.read_body{
"portal_url": "https://portal.dodopayments.com/session/ps_ghi789"
}
Generate a secure portal link for an organization to manage their subscription. Users can cancel subscriptions, update payment methods, and view historical invoices.
Request
string
required
The unique identifier of the organization.
string
required
The URL where the user should be redirected after finishing their session in the billing portal.
Response
string
The unique, temporary URL to access the Dodo Payments customer portal.
{
"portal_url": "https://portal.dodopayments.com/session/ps_ghi789"
}
⌘I