Astapa + Xendit for Southeast Asia ๐Ÿ‡ฎ๐Ÿ‡ฉ๐Ÿ‡ต๐Ÿ‡ญ๐Ÿ‡ธ๐Ÿ‡ฌ๐Ÿ‡ฒ๐Ÿ‡พ๐Ÿ‡น๐Ÿ‡ญ๐Ÿ‡ป๐Ÿ‡ณ

Auth. Plans. Payments. One API.

QRIS, GoPay, GCash, bank transfers โ€” built in, not bolted on. Ship in Indonesia and the Philippines without stitching vendors together.

QRIS & e-wallets built inFree up to 100 usersNo vendor lock-in

Sign in to Karejo

Enter your credentials to continue

Continue with Google
Continue with GitHub
or
you@example.com
Forgot password?
โ€ขโ€ขโ€ขโ€ขโ€ขโ€ขโ€ขโ€ข
Sign in

Don't have an account? Sign up

Powered by Astapa

Choose your plan

Select a plan to continue to Karejo

Free
100 MAU ยท Basic features
$0
Pro
Unlimited ยท All features
$29/mo
Continue

Powered by Astapa

Auth that fits ID & PH
Hosted login, OAuth, JWT with plan + role
Payments that convert
QRIS, GoPay, OVO, bank transfer โ€” native
One stack, not five vendors
Auth + payments + infra in one dashboard

Built with ASTAPA

Poimen
Karejo

The problem

Four vendors to launch one product?

Auth โ‰  payments โ‰  plans

Three vendors, three dashboards, zero shared context.

Weeks of glue code

Webhooks, state sync, role checks โ€” before you ship a single feature.

Stale plan data

User upgrades, your app still shows the old tier.

New market = new vendor

Every region means another gateway integration.

How it works

Three steps. One token. Ship today.

01

Redirect to hosted login

One line. Email, Google, GitHub โ€” pre-built.

02

User picks a plan & pays

QRIS, GoPay, GCash, bank transfer. All handled.

03

Read one JWT, know everything

Identity, plan, role, org, payment status โ€” one token.

Before & after

One token check replaces your middleware stack

Without Astapa
middleware.ts
// the glue code
const session = await getSession(req);
if (!session) return redirect("/login");

// Fetch payment status from Stripe
const sub = await stripe.subscriptions
  .retrieve(session.stripeSubId);

// Fetch plan from your database
const user = await db.user.findUnique({
  where: { id: session.userId },
  include: { plan: true, org: true },
});

// Check role permissions
const canAccess = checkPermissions(
  user.org?.role, requiredPermission
);

3 vendors ยท 4 API calls ยท ~200ms per request

With Astapa
middleware.ts
// that's it
const token = await verifyJWT(
  req.headers.get("Authorization")
);

const { plan, role, org_permissions,
  payment_status } = token;

if (plan !== "pro") {
  return redirect("/upgrade");
}

1 platform ยท 0 API calls ยท instant

access_token.json
{
  "sub": "user-uuid",
  "plan": "pro",
  "role": "admin",
  "org_id": "org-uuid",
  "payment_status": "active",
  "custom_claims": { ... }
}

Your dashboard, ready to go

See everything in one place

astapa.com/dashboard/projects/acme-saas
Projects/Acme SaaS

Acme SaaS

Web
Total users

1,247

Active users

834

Logins

12,891

Project details

Client ID
ast_cl_7f8a9b2c...
Type
Web
Grant types
authorization_code, refresh_token
Redirect URIs
2 configured
Plans
3 defined
Organizations
Enabled

Built for builders

Everything you need, nothing you don't

๐ŸŒ

Local payments, global standard

Indonesia & Philippines live
๐Ÿค–

MCP-native agent auth

MCP ready
๐Ÿข

Multi-tenant from the start

Org-scoped tokens
๐Ÿ“ฑ

Mobile-first auth flows

Responsive
๐Ÿ”

Sandbox โ†’ production in one click

Zero migration
๐Ÿ“Š

Built-in analytics

No extra tools

API surface

Five endpoints. Standard OAuth 2.0. No SDK required.

Redirect, exchange, verify โ€” works with any JWT library in any language. Ship your integration in an afternoon, not a sprint.

API Reference
astapa.com
GET
/auth/loginHosted login โ€” email, Google, GitHub
POST
/api/platform/tokenExchange auth code โ†’ JWT with plan + role + payment status
GET
/.well-known/jwks.jsonPublic keys โ€” verify tokens in any language
POST
/api/platform/claimsSet custom claims โ€” feature flags, quotas, team IDs
POST
/api/platform/paymentCreate payment โ€” QRIS, GoPay, OVO, bank transfer
Let your AI copilot write the integration
Install the Astapa skill โ€” it knows every endpoint and JWT shape

Simple pricing

Pay for users, not features

Every tier gets the full platform โ€” auth, payments, JWTs, orgs. You only upgrade when your user base grows.

Free

Up to 100 MAU

$0forever

Validate your idea with real auth, real payments, real JWTs. No credit card, no expiry.

  • Hosted login with your branding
  • Google & GitHub OAuth
  • JWT with plan + role + payment status
  • Payment sandbox (QRIS, GoPay, OVO)
  • 1 project
  • Community support
Start building free
Most popular

Starter

Up to 1,000 MAU

$29/mo

Go live with production payments, webhooks, and org support.

  • Everything in Free
  • Production payments (QRIS, GoPay, OVO, bank transfer)
  • Subscription entitlements in JWT
  • Webhook events
  • 3 projects ยท Organization & RBAC
  • Email support (24h response)
Start building free

Scale

Up to 10,000 MAU

$99/mo

Growing traffic. Priority support, custom domain, and 99.9% SLA.

  • Everything in Starter
  • Unlimited projects
  • Custom domain
  • Priority support (4h response)
  • 99.9% uptime SLA
  • Dedicated onboarding call
Start building free

Growing past 10K MAU? Let's build a custom plan.

Free tier available โ€” no credit card required

Stop gluing vendors together. Start shipping.

One platform for auth, payments, and plans. One JWT that carries everything your app needs. Go from zero to production today.

100 MAU free foreverStandard OAuth 2.0No vendor lock-in
Astapa โ€” Auth, Payments & Plans in One JWT