Subscriptions
Sync subscription from Polar
Force sync subscription data from Polar. Fetches the latest state using the organization’s external ID and upserts locally. Any local subscriptions not found in Polar are deleted.
POST
/
subscriptions
/
sync
Sync subscription from Polar
curl --request POST \
--url https://app.usechar.ai/api/subscriptions/sync \
--header 'Authorization: Bearer <token>'import requests
url = "https://app.usechar.ai/api/subscriptions/sync"
headers = {"Authorization": "Bearer <token>"}
response = requests.post(url, headers=headers)
print(response.text)const options = {method: 'POST', headers: {Authorization: 'Bearer <token>'}};
fetch('https://app.usechar.ai/api/subscriptions/sync', 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://app.usechar.ai/api/subscriptions/sync",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "POST",
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://app.usechar.ai/api/subscriptions/sync"
req, _ := http.NewRequest("POST", 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.post("https://app.usechar.ai/api/subscriptions/sync")
.header("Authorization", "Bearer <token>")
.asString();require 'uri'
require 'net/http'
url = URI("https://app.usechar.ai/api/subscriptions/sync")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["Authorization"] = 'Bearer <token>'
response = http.request(request)
puts response.read_body{
"synced": 123,
"deleted": 123
}{
"defined": true,
"code": "BAD_REQUEST",
"status": 400,
"message": "Invalid request data",
"data": {
"code": "VALIDATION_ERROR",
"field": "email",
"details": "Invalid email format"
}
}{
"defined": true,
"code": "UNAUTHORIZED",
"status": 401,
"message": "Authentication required",
"data": {
"code": "AUTH_REQUIRED"
}
}{
"defined": true,
"code": "FORBIDDEN",
"status": 403,
"message": "Access denied",
"data": {
"code": "ACCESS_DENIED",
"reason": "Insufficient permissions"
}
}{
"defined": true,
"code": "NOT_FOUND",
"status": 404,
"message": "Resource not found",
"data": {
"code": "RESOURCE_NOT_FOUND",
"resource": "site",
"resourceId": "site_123"
}
}{
"defined": true,
"code": "CONFLICT",
"status": 409,
"message": "Resource already exists",
"data": {
"code": "DUPLICATE_RESOURCE",
"resource": "api_key"
}
}{
"defined": true,
"code": "INTERNAL_SERVER_ERROR",
"status": 500,
"message": "An internal error occurred",
"data": {
"code": "INTERNAL_ERROR"
}
}Authorizations
WorkOS JWT token. Obtain via WorkOS AuthKit authentication flow. The token must include organization_id claim for organization-scoped endpoints.
⌘I
Sync subscription from Polar
curl --request POST \
--url https://app.usechar.ai/api/subscriptions/sync \
--header 'Authorization: Bearer <token>'import requests
url = "https://app.usechar.ai/api/subscriptions/sync"
headers = {"Authorization": "Bearer <token>"}
response = requests.post(url, headers=headers)
print(response.text)const options = {method: 'POST', headers: {Authorization: 'Bearer <token>'}};
fetch('https://app.usechar.ai/api/subscriptions/sync', 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://app.usechar.ai/api/subscriptions/sync",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "POST",
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://app.usechar.ai/api/subscriptions/sync"
req, _ := http.NewRequest("POST", 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.post("https://app.usechar.ai/api/subscriptions/sync")
.header("Authorization", "Bearer <token>")
.asString();require 'uri'
require 'net/http'
url = URI("https://app.usechar.ai/api/subscriptions/sync")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["Authorization"] = 'Bearer <token>'
response = http.request(request)
puts response.read_body{
"synced": 123,
"deleted": 123
}{
"defined": true,
"code": "BAD_REQUEST",
"status": 400,
"message": "Invalid request data",
"data": {
"code": "VALIDATION_ERROR",
"field": "email",
"details": "Invalid email format"
}
}{
"defined": true,
"code": "UNAUTHORIZED",
"status": 401,
"message": "Authentication required",
"data": {
"code": "AUTH_REQUIRED"
}
}{
"defined": true,
"code": "FORBIDDEN",
"status": 403,
"message": "Access denied",
"data": {
"code": "ACCESS_DENIED",
"reason": "Insufficient permissions"
}
}{
"defined": true,
"code": "NOT_FOUND",
"status": 404,
"message": "Resource not found",
"data": {
"code": "RESOURCE_NOT_FOUND",
"resource": "site",
"resourceId": "site_123"
}
}{
"defined": true,
"code": "CONFLICT",
"status": 409,
"message": "Resource already exists",
"data": {
"code": "DUPLICATE_RESOURCE",
"resource": "api_key"
}
}{
"defined": true,
"code": "INTERNAL_SERVER_ERROR",
"status": 500,
"message": "An internal error occurred",
"data": {
"code": "INTERNAL_ERROR"
}
}
