Skills

Expo API Routes

Use when adding server-side API routes to an Expo Router app (+api.ts files) for...

Install

npx skills add coco-research/coco --skill expo-api-routes -g -a claude-code -y
Repository
coco-research/coco797
Category
Data and ML
Updated
3d ago
License
MIT
Context cost
Mediumabout 2,128 tokens
Runs scripts
No, instructions only

What it does

Use when adding server-side API routes to an Expo Router app (+api.ts files) for secrets, database access, third-party proxies, webhooks, CORS, or EAS Hosting deploys. Covers file routing, env vars, and Cloudflare Workers limits.

When to Use API Routes

Use API routes when you need:

  • Server-side secrets, API keys, database credentials, or tokens that must never reach the client
  • Database operations, Direct database queries that shouldn't be exposed
  • Third-party API proxies, Hide API keys when calling external services (OpenAI, Stripe, etc.)
  • Server-side validation, Validate data before database writes
  • Webhook endpoints, Receive callbacks from services like Stripe or GitHub
  • Rate limiting, Control access at the server level
  • Heavy computation, Offload processing that would be slow on mobile

When NOT to Use API Routes

Avoid API routes when:

  • Data is already public, Use direct fetch to public APIs instead
  • No secrets required, Static data or client-safe operations
  • Real-time updates needed, Use WebSockets or services like Supabase Realtime
  • Simple CRUD, Consider Firebase, Supabase, or Convex for managed backends
  • File uploads, Use direct-to-storage uploads (S3 presigned URLs, Cloudflare R2)
  • Authentication only, Use Clerk, Auth0, or Firebase Auth instead

File Structure

API routes live in the app directory with +api.ts suffix:

app/
  api/
    hello+api.ts          → GET /api/hello
    users+api.ts          → /api/users
    users/[id]+api.ts     → /api/users/:id
  (tabs)/
    index.tsx

Basic API Route

// app/api/hello+api.ts
export function GET(request: Request) {
  return Response.json({ message: "Hello from Expo!" });
}

HTTP Methods

Export named functions for each HTTP method:

// app/api/items+api.ts
export function GET(request: Request) {
  return Response.json({ items: [] });
}

export async function POST(request: Request) {
  const body = await request.json();
  return Response.json({ created: body }, { status: 201 });
}

export async function PUT(request: Request) {
  const body = await request.json();
  return Response.json({ updated: body });
}
Read the whole SKILL.md on GitHub

More in Data and ML