# New API

> Scaffold a new merjs API route. Use when the user wants to create a new API endpoint.

- Skill: `justrach/new-api` (Agent Skill)
- Install (CLI): `npx skillmds@latest add justrach/new-api`
- Raw SKILL.md: https://api.skillmd.com/api/skills/justrach/new-api/raw
- Safety review: pending
- Works with: Claude Code, Claude.ai, OpenAI Codex
- Category: Integrations & APIs
- Author: justrach (https://skillmd.com/u/justrach)
- Updated: 2026-09-17
- Page: https://skillmd.com/skills/justrach/new-api

---


# Create a new merjs API route

Scaffold a new API route at `api/$ARGUMENTS.zig`.

## Steps

1. Create `api/$ARGUMENTS.zig` with this template:

```zig
const mer = @import("mer");

const Response = struct {
    // Define your response fields here
    message: []const u8,
};

pub fn render(req: mer.Request) mer.Response {
    return mer.typedJson(req.allocator, Response{
        .message = "hello",
    });
}
```

2. Adapt the Response struct fields based on what the user described
3. Run `zig build codegen` to regenerate routes
4. Confirm the route appears at `/api/$ARGUMENTS`

## Conventions

- API routes live in `api/` and map to `/api/...`
- Use `mer.typedJson(allocator, value)` to return typed JSON responses
- Use `mer.json(string)` for raw JSON strings
- Access request body via `req.body`, method via `req.method`
- Access query string via `req.query_string`
- Access cookies via `req.cookie("name")`
- For validation, use dhi: `const dhi = @import("dhi_validator");`
- API routes do NOT need `pub const meta`

