One key in front of every provider your apps depend on.

Penstoke takes a model call, an upload or a notification, sends it to the right provider, moves to the next one when that provider fails, and keeps the record of what it cost.

Start free trialSign in

14 days, no card

You bring the provider keys, so nothing you send through the gateway is metered or marked up by us.

POST/v1/chat/completionsexample

model: "fast"stream: true

your app names an alias, never a provider

  1. → openai429 rate limited
  2. → anthropic200 streaming

the response says which provider served it

248 ms412 tokens$0.0003logged
3
gateways — AI, storage and push — behind one key and one audit trail
$0
taken from what you send: your provider keys, your bill, no markup
14
days free, no card, and your data stays if you walk away
providers
AI
  • OpenAI
  • Anthropic
  • Google Gemini
  • OpenRouter
  • Groq
  • Ollama
  • Any OpenAI-compatible API
Storage
  • Cloudflare R2
  • AWS S3
  • Google Cloud Storage
  • Supabase Storage
  • MinIO
  • Backblaze B2
  • Cloudinary
Push
  • Apple APNs
  • Firebase FCM
  • iOS
  • Android
  • Web

One alias also reaches GPT, Claude, Gemini, Llama, Mistral, DeepSeek, Qwen, Kimi and Grok through OpenRouter, on a single account.

A request leaves your app once and is accounted for by the time it returns.

  1. One endpoint, one key

    Your app calls the gateway the same way it would call OpenAI, S3 or FCM. Provider credentials never leave the server.

  2. The gateway resolves it

    A model alias, a storage path or an app id becomes a concrete provider, bucket or credential.

  3. A provider answers, or the next one does

    Rate limits, outages and geo-blocks move the request down the fallback order instead of failing it.

  4. The outcome is recorded

    Latency, cost, tokens, bytes and delivery land in the log before the response closes.

AI gateway

Every model behind one OpenAI-compatible endpoint.

Point your SDK at the gateway and keep using the client you already have. Streaming passes through untouched, and the response tells you which provider actually served it.

  • An alias routes to a primary model, then down an ordered list of fallbacks.
  • Budgets stop spend before the request leaves the building.
  • Every call is logged with model, tokens, latency and cost.
  • Keys are scoped per endpoint, so one app can never spend another's budget.
ai pipeline
your app
Penstoke gateway
  • OpenAI
  • Anthropic
  • Gemini
  • Groq
  • OpenRouter

The first one that answers wins. A 429, a 5xx or a timeout moves the same request to the next provider in the order, and the response says which one served it.

Storage gateway

Presigned uploads, and public files on your own domain.

Clients get short-lived signed URLs instead of credentials. Objects that should be public are served from a domain you own, route by route, with the provider's host and signature never leaving the gateway.

  • Routing rules decide which bucket a path belongs to, with fallbacks per rule.
  • Every account gets its own address — acme.penstoke.com — serving from the moment you sign up.
  • Public delivery is off until a route turns it on, so nothing leaks by default.
  • Buckets are listed, registered and created from the dashboard.
  • Storage and egress are costed per bucket, per day.
storage routingexample

gateway

  • images/*→Cloudflare R2public
  • video/*→AWS S3public
  • documents/*→Backblaze B2presigned
Objects stored, last 14 days11,842

14 days agotoday

Share of objects, by provider
Cloudflare R254%
AWS S331%
Backblaze B215%
Push gateway

APNs and FCM for every app, each with its own credentials.

Apps with no accounts still get reached: one topic send per app covers every install. When an app does gain authentication, the same campaign targets registered devices by platform and tag.

  • Broadcast to everyone by topic, with no device registration at all.
  • Or target registered devices by platform and tag.
  • Campaigns, templates, scheduling, and AI-written copy variants.
  • Delivery and opens counted per app, per campaign.
push pipeline
a campaign, or one API call
Penstoke gateway
  • Apple APNs
  • Firebase FCM
  • iOS
  • Android
  • Web

Each app carries its own APNs key and FCM credentials, held server-side. A topic send reaches every install without a device ever registering.

Penstokenow

Delivery finished

Sent to every install on iOS, Android and Web.

Three calls, and one key for all of them.

Nothing to learn that you do not already know: the AI gateway speaks the OpenAI API, an upload asks for a signed URL, and a notification names an app and who should get it.

AIjavascript
import OpenAI from "openai";

const ai = new OpenAI({
  baseURL: `${process.env.PENSTOKE_URL}/v1`,
  apiKey: process.env.PENSTOKE_KEY,
});

// "fast" is an alias you define: a primary
// model, then the fallbacks, in order.
const reply = await ai.chat.completions.create({
  model: "fast",
  messages: [{ role: "user", content: question }],
  stream: true,
});

Your SDK, one base URL later.

Storagebash
curl -X POST "$PENSTOKE_URL/storage/v1/presign" \
  -H "Authorization: Bearer $PENSTOKE_KEY" \
  -d '{
    "path": "images/cover.jpg",
    "method": "PUT",
    "contentType": "image/jpeg",
    "sizeBytes": 184320
  }'

# → { "url": "…", "expiresAt": "…" }
# The provider host and signature stay here.

A URL the client can upload to, and nothing else.

Pushbash
curl -X POST "$PENSTOKE_URL/push/v1/send" \
  -H "Authorization: Bearer $PENSTOKE_KEY" \
  -d '{
    "appId": "app_7f3c…",
    "title": "Order shipped",
    "body": "On its way.",
    "target": {
      "platforms": ["IOS", "ANDROID"],
      "tags": ["vip"]
    }
  }'

One call, both transports, per-app credentials.

Built to be run by someone, not just deployed.

The parts that matter at three in the morning are the ones that usually get skipped: who did what, what it cost, and what to do when a provider goes dark.

Roles and invites
Admin, operator, developer and viewer, each seeing only what they may change.
Audit trail
Every credential, route and send recorded with the person behind it.
Scoped API keys
Public SDK keys that can only register devices; server keys that can send.
Notifications
A provider going offline reaches you before your users do.

Works with the providers you already pay.

You bring the accounts and the keys. Penstoke holds them server-side, routes to them in the order you set, and falls through to the next one when a provider throttles or goes dark.

AI gateway

  • OpenAI
  • Anthropic
  • Google Gemini
  • OpenRouter
  • Groq
  • Ollama
  • Any OpenAI-compatible API

One alias reaches GPT, Claude, Gemini, Llama, Mistral, DeepSeek, Qwen, Kimi and Grok — on your own provider accounts, or through OpenRouter on a single one.

Storage gateway

  • Cloudflare R2
  • AWS S3
  • Google Cloud Storage
  • Supabase Storage
  • MinIO
  • Backblaze B2
  • Cloudinary

Any S3-compatible endpoint works. Buckets are listed, registered and created from the dashboard, and public ones are served on a domain you own.

Push gateway

  • Apple APNs
  • Firebase FCM
  • iOS
  • Android
  • Web

Each app carries its own credentials. Reach every install by topic with no device registration, or target registered devices by platform and tag.

A plan caps what you keep, not what you send.

Model calls, uploads and notifications run on provider accounts you own — OpenAI, R2, APNs, FCM — and those providers bill you directly, at their rates. The gateway never meters or marks up the traffic that passes through it. What a plan sets is how much you keep configured here: providers, buckets, apps, campaigns, schedules and seats.

Start here

Trial

$0for 14 days

Everything on Starter for 14 days, no card.

Start free trial
AI providers
2
Buckets
2
Push apps
1
Campaigns a month
20
Scheduled campaigns
3
Team members
3
Requests a second
10
Custom domain
—

Starter

$29a month

One app in production, with room to grow.

Choose Starter
AI providers
3
Buckets
5
Push apps
3
Campaigns a month
100
Scheduled campaigns
10
Team members
5
Requests a second
25
Custom domain
Included

Growth

$99a month

Several apps, a team, and failover across providers.

Choose Growth
AI providers
10
Buckets
25
Push apps
15
Campaigns a month
1,000
Scheduled campaigns
50
Team members
25
Requests a second
100
Custom domain
Included

Scale

$299a month

No limits, and someone to call.

Choose Scale
AI providers
Unlimited
Buckets
Unlimited
Push apps
Unlimited
Campaigns a month
Unlimited
Scheduled campaigns
Unlimited
Team members
Unlimited
Requests a second
Unlimited
Custom domain
Included

Every account starts on the trial: 14 days, no card, nothing to cancel. When it runs out your data stays and reads keep working — writes pause until you pick a plan.

Start free trial
What is Penstoke?
Penstoke is one API in front of three gateways: AI models, object storage and push notifications. Your app calls it the way it would call OpenAI, S3 or FCM; Penstoke resolves the call to a provider you have configured, fails over to the next one when that provider throttles or goes dark, and records what it cost.
Which providers does it support?
For AI: OpenAI, Anthropic, Google Gemini, Groq, OpenRouter, Ollama and any OpenAI-compatible API — which puts GPT, Claude, Gemini, Llama, Mistral, DeepSeek, Qwen, Kimi and Grok behind one alias. For storage: Cloudflare R2, AWS S3, Google Cloud Storage, Supabase Storage, MinIO, Backblaze B2 and Cloudinary. For push: Apple APNs and Firebase FCM, on iOS, Android and Web.
Does Penstoke charge for what I send through it?
No. You bring your own provider accounts and keys, and those providers bill you directly at their own rates. The subscription caps what you keep configured — providers, endpoints, buckets, apps, campaigns, schedules and seats — not the volume of traffic. Nothing passing through the gateway is metered or marked up.
Do I need my own domain?
No. Every account gets its own address on ours — acme.penstoke.com — serving public objects from the moment you sign up, with the certificate issued automatically and no DNS to configure. Point your own domain at the gateway whenever you want to; the object paths stay exactly the same, so nothing you have published breaks.
Where do my provider keys live?
Encrypted at rest on the gateway, and never returned to the browser or shipped to your apps. Your apps hold a scoped gateway key instead, which you can rotate or revoke on its own.
Do I have to use all three gateways?
No. Set up the ones you need and leave the rest; a plan covers all three either way, and the limits you do not spend simply go unused.
Can I change or cancel a plan?
Yes, from the dashboard. Plans are monthly through Stripe, and a downgrade or cancellation takes effect at the end of the period you have already paid for.

Three gateways, one dashboard, one record of everything that happened.

Start free trial

14 days, no card. Pick a plan when you are ready, or let it lapse.