OAuth tokens expire. Your automations shouldn't.
Tokens that never perish
Connect your OAuth apps once. Get a permanent API key. perpetua.sh handles token refresh forever — so your scripts, agents, and workflows never break.
14-day free trial · Cancel anytime
The Trial
Why OAuth is broken for builders
If you automate things with personal OAuth APIs, you know this pain.
Tokens break at 3am
Your OAuth tokens expire. Your n8n workflow fails silently. You wake up to broken automations and hours of debugging ahead.
Google Cloud Console is a maze
Service accounts don't work for personal accounts. OAuth app verification takes weeks. Every provider has its own dashboard hell.
Every provider is different
Oura, Strava, Google, Notion — each has its own auth quirks, refresh logic, and expiry timing. You end up writing the same token refresh code five times.
The Path
Three steps, then never again
The setup takes 2 minutes. After that, your automations just work — forever.
Connect once
POST to start the OAuth flow, open the URL, authorize in your browser. Done. Never do it again.
curl -X POST https://perpetua.sh/auth/oura/start \
-H "Authorization: Bearer <your-key>" \
-d '{"account": "me"}'
# → {"auth_url": "https://cloud.ouraring.com/oauth2/authorize?..."}
# Open the URL → authorize → done forever.Get your API key
One permanent key. Covers every connected provider, every account.
# Your permanent perpetua.sh key — never expires
PERPETUA_KEY=pptua_live_abc123...
# That's it. No refresh tokens. No expiry.Call any provider
Replace the provider base URL with perpetua.sh. We swap in the real OAuth token, forward the request, and return the response. Token expired? We refreshed it before you even asked.
# Before: juggle tokens manually
GET https://api.ouraring.com/v2/usercollection/daily_sleep
Authorization: Bearer <expires-in-7-days>
# After: just call perpetua.sh
GET https://perpetua.sh/proxy/oura/v2/usercollection/daily_sleep
Authorization: Bearer <your-perpetua-key>The diff
// Before: manual token management
const token = await refreshOAuthToken('oura');
const res = await fetch(
'https://api.ouraring.com/v2/usercollection/daily_sleep',
{ headers: { Authorization: `Bearer ${token}` } }
);// After: just call perpetua.sh
const res = await fetch(
'https://perpetua.sh/proxy/oura/v2/usercollection/daily_sleep',
{ headers: { Authorization: `Bearer ${process.env.PERPETUA_KEY}` } }
);The Architecture
One proxy, every provider
You send requests with your perpetua.sh key. We inject the real OAuth token and forward to the provider.
Your app
Script / Cron
n8n / Make
AI Agent
perpetua.sh
OAuth proxy
Provider APIs
Oura
Google Cal
& more
Transparent proxy — we never store your data. Requests pass through, tokens stay encrypted at rest.
The Arsenal
Your favorite APIs, covered
Pre-configured OAuth apps for popular providers. No setup required — just connect and go.
Works with any HTTP client — curl, n8n, Make, Zapier, or your own scripts and agents.
We add new providers regularly. Need one that's not listed? Request it.
The Choice
Open Source or Hosted
Self-host for full control, or use perpetua.sh for the managed experience.
Free
Self-hosted, full control
- Self-host on any VPS
- Bring your own OAuth apps
- SQLite, no external deps
- Full source on GitHub (MIT license)
perpetua.sh
Managed, zero-ops
- Managed, always-on
- Pre-configured OAuth apps (no Google Cloud Console)
- 14-day free trial, cancel anytime
- Founder pricing: $3/month (locked forever)
The Offering
Simple pricing. No surprises.
14-day free trial · Cancel anytime
Founder
Locked in forever for early adopters
- Unlimited providers
- Unlimited accounts per provider
- Unlimited API calls (fair use)
- Founder price locked in forever
- 14-day free trial included
14-day free trial · Cancel anytime
Standard
Standard pricing after founder window closes
- Unlimited providers
- Unlimited accounts per provider
- Unlimited API calls (fair use)
- Founder price locked in forever
- 14-day free trial included