Iván
@ivangdavilaPostman
Build, test, and automate APIs with Postman collections, environments, and Newman CLI.
Installation
clawhub install postman
Requires npm i -g clawhub
10
Downloads
0
Stars
0
current installs
0 all-time
1
Versions
Setup
If ~/postman/ doesn't exist, read setup.md silently and start naturally.
When to Use
User needs to test APIs, create Postman collections, manage environments, or run automated API tests with Newman.
Architecture
Data lives in ~/postman/. See memory-template.md for structure.
~/postman/
├── memory.md # Projects, preferences, common patterns
├── collections/ # Postman collection JSON files
└── environments/ # Environment JSON files
Quick Reference
| Topic | File |
|---|---|
| Setup | setup.md |
| Memory template | memory-template.md |
| Collection format | collections.md |
| Newman automation | newman.md |
Core Rules
1. Collection Structure First
Before creating requests, define the collection structure:
- Folder hierarchy reflects API organization
- Use descriptive names:
Users > Create User, notPOST 1 - Group related endpoints logically
2. Environment Variables Always
Never hardcode values that change between environments:
{
"key": "base_url",
"value": "https://api.example.com",
"enabled": true
}
Use {{base_url}} in requests. Environments: dev, staging, prod.
3. Pre-request Scripts for Auth
Handle authentication in pre-request scripts, not manually:
// Get token and set for collection
pm.sendRequest({
url: pm.environment.get("auth_url"),
method: 'POST',
body: { mode: 'raw', raw: JSON.stringify({...}) }
}, (err, res) => {
pm.environment.set("token", res.json().access_token);
});
4. Test Assertions Required
Every request needs at least basic assertions:
pm.test("Status 200", () => pm.response.to.have.status(200));
pm.test("Has data", () => pm.expect(pm.response.json()).to.have.property("data"));
5. Newman for CI/CD
Run collections headlessly with Newman:
newman run collection.json -e environment.json --reporters cli,json
Exit code 0 = all tests passed. Integrate into CI pipelines.
Collection Format
Minimal Collection
{
"info": {
"name": "My API",
"schema": "https://schema.getpostman.com/json/collection/v2.1.0/collection.json"
},
"item": [
{
"name": "Get Users",
"request": {
"method": "GET",
"url": "{{base_url}}/users",
"header": [
{ "key": "Authorization", "value": "Bearer {{token}}" }
]
}
}
]
}
With Tests
{
"name": "Create User",
"request": {
"method": "POST",
"url": "{{base_url}}/users",
"body": {
"mode": "raw",
"raw": "{\"name\": \"{{$randomFullName}}\", \"email\": \"{{$randomEmail}}\"}",
"options": { "raw": { "language": "json" } }
}
},
"event": [
{
"listen": "test",
"script": {
"exec": [
"pm.test('Created', () => pm.response.to.have.status(201));",
"pm.test('Has ID', () => pm.expect(pm.response.json().id).to.exist);"
]
}
}
]
}
Environment Format
{
"name": "Development",
"values": [
{ "key": "base_url", "value": "http://localhost:3000", "enabled": true },
{ "key": "token", "value": "", "enabled": true }
]
}
Newman Commands
| Task | Command |
|---|---|
| Basic run | newman run collection.json |
| With environment | newman run collection.json -e dev.json |
| Specific folder | newman run collection.json --folder "Users" |
| Iterations | newman run collection.json -n 10 |
| Data file | newman run collection.json -d data.csv |
| HTML report | newman run collection.json -r htmlextra |
| Bail on fail | newman run collection.json --bail |
Common Traps
- Hardcoded URLs → Tests break between environments. Always use
{{base_url}}. - No assertions → Tests "pass" but don't validate anything. Add status + body checks.
- Secrets in collection → Credentials leak. Use environment variables, gitignore env files.
- Sequential dependencies → Tests fail randomly. Use
setNextRequest()explicitly or make tests independent. - Missing Content-Type → POST/PUT fails silently. Always set
Content-Type: application/json.
Dynamic Variables
Postman built-in variables for test data:
| Variable | Example Output |
|---|---|
{{$randomFullName}} |
"Jane Doe" |
{{$randomEmail}} |
"jane@example.com" |
{{$randomUUID}} |
"550e8400-e29b-..." |
{{$timestamp}} |
1234567890 |
{{$randomInt}} |
42 |
OpenAPI to Postman
Import OpenAPI/Swagger specs:
- Export OpenAPI JSON/YAML
- In Postman: Import > File > Select spec
- Collection auto-generated with all endpoints
Or via CLI:
npx openapi-to-postmanv2 -s openapi.yaml -o collection.json
Security & Privacy
Data that stays local:
- Collections and environments in
~/postman/ - Newman runs locally
This skill does NOT:
- Send collections to external services
- Store API credentials in memory.md
Related Skills
Install with clawhub install <slug> if user confirms:
api— REST API consumption patternsjson— JSON manipulation and validationci-cd— Pipeline automation
Feedback
- If useful:
clawhub star postman - Stay updated:
clawhub sync
Statistics
Author
Iván
@ivangdavila
Latest Changes
v1.0.0 · Feb 25, 2026
Initial release with collections, environments, and Newman automation.
Quick Install
clawhub install postman Related Skills
Other popular skills you might find useful.
Chat with 100+ AI Models in one App.
Use Claude, ChatGPT, Gemini alongside with EU-Hosted Models like Deepseek, GLM-5, Kimi K2.5 and many more.