# Bruno Endpoint Creation

> Create Bruno REST API endpoint configs with auth, environment setup, and docs. Triggers on 'create Bruno endpoint', 'Bruno API testing', 'Bruno collection'.

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

---


# Bruno Endpoint Creation

Bruno-specific patterns for creating `.bru` endpoint files. Assumes familiarity with REST conventions.

## Environment Configuration

**Development (Local.bru):**
```
vars {
  baseUrl: http://localhost:3001
  linkId:
  apiKey: dev_api_key_change_in_production
}
```

**Production/Staging — use `vars:secret` for sensitive data:**
```
vars {
  baseUrl: https://api.yourdomain.com
  linkId:
}
vars:secret [
  apiKey
]
```

## Collection-Level Authentication

Set auth once in `collection.bru`, then inherit in all endpoints:

```
auth {
  mode: bearer
}

auth:bearer {
  token: {{apiKey}}
}
```

Individual endpoints inherit with `auth: inherit`:
```
post {
  url: {{baseUrl}}/api/v1/resources
  body: json
  auth: inherit
}
```

Override per-endpoint only when auth differs from the collection.

## Request Structure

```
meta {
  name: "Create Resource"
  type: http
  seq: 1
}

post {
  url: {{baseUrl}}/api/v1/resources
  body: json
  auth: inherit
}

body:json {
  {
    "resource": {
      "field1": "value1",
      "field2": "value2"
    }
  }
}

params:path {
  id: {{resourceId}}
}

params:query {
  page: 1
  limit: 20
  sort: created_at
  order: desc
}
```

## Scripting API

**Post-response — extract data for subsequent requests:**
```javascript
script:post-response {
  if (res.status === 201 && res.body && res.body.id) {
    bru.setVar("resourceId", res.body.id);
  }
}
```

**Pre-request — generate dynamic data:**
```javascript
script:pre-request {
  const timestamp = Date.now();
  bru.setVar("uniqueEmail", `test-${timestamp}@example.com`);
}
```

**Key difference:**
- `bru.setVar()` — runtime variables (temporary, current collection run only)
- `bru.setEnvVar()` — environment variables (persists, visible in Environment tab)

Use `bru.setVar()` for ephemeral values like extracted IDs from test runs.

## Documentation Block

```
docs {
  Create a new resource in the system.

  **Required Fields:**
  - field1: Description
  - field2: Description

  **Optional Fields:**
  - optional_field: Description
}
```

## Collection Folder Structure

```
Bruno Collection/
├── Environments/
│   ├── Local.bru
│   ├── Staging.bru
│   └── Production.bru
├── Authentication/
│   ├── Login.bru
│   └── Refresh Token.bru
├── Resources/
│   ├── List Resources.bru
│   ├── Get Resource.bru
│   ├── Create Resource.bru
│   ├── Update Resource.bru
│   └── Delete Resource.bru
└── Health/
    └── Health Check.bru
```

