GET/api/v1/paddle/prices
Get Paddle Prices
Return Paddle price IDs + client token for frontend checkout overlay. F44 (regle founder du 20/09) : Founding n'est pas un palier, c'est le tarif annuel preferentiel des cent premiers, sur le perimetre Pro. Quand les cent places sont prises, l'offre se retire : la route cesse de servir l'identifiant du prix Founding, et le site n'a donc plus rien a donner a Paddle.js. Le verdict n'est pas recalcule ici : il est lu a `founding_offer_state`, l'autorite unique posee par F39, la meme que celle qui sert la disponibilite publique. Une chaine vide est un prix qui n'existe pas pour le site, et le bouton des tarifs est deja desactive quand le prix est vide (`pricing/page.tsx`, `disabled={... || !priceId}`). F112 (decision founder du 22/09) : l'essai Pro de 7 jours est reserve a qui choisit Pro et une seule fois par personne. Le serveur — jamais la page — choisit l'identifiant : quand le prix d'essai existe cote Paddle et que ce compte n'a jamais consomme d'essai (`trial_started_at IS NULL`), `pro_monthly` porte le prix d'essai et `pro_trial_available` vaut vrai. Sinon la route sert le prix Pro ordinaire. Un visiteur anonyme n'a pas d'essai : apres connexion, la page redemande la route et obtient le bon identifiant. Le dernier mot reste au webhook, qui activera la souscription tout de suite si un essai est tente malgre tout (`services/paddle.py`). Decision 7 (founder du 21/09) : la meme reponse porte le drapeau d'ouverture des paliers (`open_tiers`). Un palier ferme recoit une chaine vide pour chaque periode, de sorte que la page ne puisse pas ouvrir de caisse dessus meme si elle en affichait le bouton ; `open_tiers` lui dit quels boutons afficher. Un seul drapeau, lu par l'API et par le site.
Authentication
This endpoint requires the X-API-Key header or a valid Clerk JWT. Accepted schemes: HTTPBearer.
See Authentication for details.
Responses
| Status | Description | Schema |
|---|---|---|
200 | Successful Response | PaddlePriceConfig |
See the standard error codes documented in the Error codes.
Code samples
Three ready-to-paste implementations. Replace $TRINITY_API_KEY with your API key (generated from the dashboard under Profile → API keys).
cURL
curl -X GET \
'https://api.trinityinsights.io/api/v1/paddle/prices' \
-H 'X-API-Key: $TRINITY_API_KEY'Python
import os
import requests
BASE = "https://api.trinityinsights.io"
headers = {
"X-API-Key": os.environ["TRINITY_API_KEY"],
}
response = requests.get(f"{BASE}/api/v1/paddle/prices", headers=headers, timeout=10)
response.raise_for_status()
data = response.json()JavaScript
const apiKey = process.env.TRINITY_API_KEY;
const response = await fetch(
"https://api.trinityinsights.io/api/v1/paddle/prices",
{
method: "GET",
headers: {
"X-API-Key": apiKey,
},
},
);
if (!response.ok) {
throw new Error(`HTTP ${response.status}`);
}
const data = await response.json();Institutional disclaimer
Trinity Insights is an educational and analytical tool. Values returned by this endpoint do not constitute investment advice. Trinity Insights is not a Crypto-Asset Service Provider (CASP) registered under MiCA Regulation (EU) 2023/1114. See the full disclaimer.