netpadManage NetPad forms, submissions, users, and RBAC. Use when: (1) Creating forms with custom fields, (2) Submitting data to forms, (3) Querying form submissions, (4) Managing users/groups/roles (RBAC), (5) Installing NetPad apps from marketplace. Requires NETPAD_API_KEY for API, or `netpad login` for CLI.
Install via ClawdBot CLI:
clawdbot install mrlynn/netpadInstall NetPad CLI (npm):
Install NetPad CLI (npm)Requires:
Manage forms, submissions, users, and RBAC via CLI and REST API.
| Tool | Install | Purpose |
|------|---------|---------|
| netpad CLI | npm i -g @netpad/cli | RBAC, marketplace, packages |
| REST API | curl + API key | Forms, submissions, data |
export NETPAD_API_KEY="np_live_xxx" # Production
export NETPAD_API_KEY="np_test_xxx" # Test (can submit to drafts)
All requests use Bearer token:
curl -H "Authorization: Bearer $NETPAD_API_KEY" \
"https://www.netpad.io/api/v1/..."
| Task | Endpoint | Method |
|------|----------|--------|
| List projects | /projects | GET |
| List forms | /forms | GET |
| Create form | /forms | POST |
| Get form | /forms/{formId} | GET |
| Update/publish form | /forms/{formId} | PATCH |
| Delete form | /forms/{formId} | DELETE |
| List submissions | /forms/{formId}/submissions | GET |
| Create submission | /forms/{formId}/submissions | POST |
| Get submission | /forms/{formId}/submissions/{id} | GET |
| Delete submission | /forms/{formId}/submissions/{id} | DELETE |
Forms belong to projects. Get project ID before creating forms.
# List projects
curl -H "Authorization: Bearer $NETPAD_API_KEY" \
"https://www.netpad.io/api/v1/projects" | jq '.data[] | {projectId, name}'
curl -H "Authorization: Bearer $NETPAD_API_KEY" \
"https://www.netpad.io/api/v1/forms?status=published&pageSize=50"
curl -X POST -H "Authorization: Bearer $NETPAD_API_KEY" \
-H "Content-Type: application/json" \
"https://www.netpad.io/api/v1/forms" \
-d '{
"name": "Contact Form",
"description": "Simple contact form",
"projectId": "proj_xxx",
"fields": [
{"path": "name", "label": "Name", "type": "text", "required": true},
{"path": "email", "label": "Email", "type": "email", "required": true},
{"path": "phone", "label": "Phone", "type": "phone"},
{"path": "message", "label": "Message", "type": "textarea"}
]
}'
curl -H "Authorization: Bearer $NETPAD_API_KEY" \
"https://www.netpad.io/api/v1/forms/{formId}"
curl -X PATCH -H "Authorization: Bearer $NETPAD_API_KEY" \
-H "Content-Type: application/json" \
"https://www.netpad.io/api/v1/forms/{formId}" \
-d '{"status": "published"}'
curl -X PATCH -H "Authorization: Bearer $NETPAD_API_KEY" \
-H "Content-Type: application/json" \
"https://www.netpad.io/api/v1/forms/{formId}" \
-d '{
"fields": [
{"path": "name", "label": "Full Name", "type": "text", "required": true},
{"path": "email", "label": "Email Address", "type": "email", "required": true},
{"path": "company", "label": "Company", "type": "text"},
{"path": "role", "label": "Role", "type": "select", "options": [
{"value": "dev", "label": "Developer"},
{"value": "pm", "label": "Product Manager"},
{"value": "exec", "label": "Executive"}
]}
]
}'
curl -X DELETE -H "Authorization: Bearer $NETPAD_API_KEY" \
"https://www.netpad.io/api/v1/forms/{formId}"
curl -X POST -H "Authorization: Bearer $NETPAD_API_KEY" \
-H "Content-Type: application/json" \
"https://www.netpad.io/api/v1/forms/{formId}/submissions" \
-d '{
"data": {
"name": "John Doe",
"email": "john@example.com",
"message": "Hello from the API!"
}
}'
# Recent submissions
curl -H "Authorization: Bearer $NETPAD_API_KEY" \
"https://www.netpad.io/api/v1/forms/{formId}/submissions?pageSize=50"
# With date filter
curl -H "Authorization: Bearer $NETPAD_API_KEY" \
"https://www.netpad.io/api/v1/forms/{formId}/submissions?startDate=2026-01-01T00:00:00Z"
# Sorted ascending
curl -H "Authorization: Bearer $NETPAD_API_KEY" \
"https://www.netpad.io/api/v1/forms/{formId}/submissions?sortOrder=asc"
curl -H "Authorization: Bearer $NETPAD_API_KEY" \
"https://www.netpad.io/api/v1/forms/{formId}/submissions/{submissionId}"
curl -X DELETE -H "Authorization: Bearer $NETPAD_API_KEY" \
"https://www.netpad.io/api/v1/forms/{formId}/submissions/{submissionId}"
| Type | Description | Validation |
|------|-------------|------------|
| text | Single line text | minLength, maxLength, pattern |
| email | Email address | Built-in validation |
| phone | Phone number | Built-in validation |
| number | Numeric input | min, max |
| date | Date picker | - |
| select | Dropdown | options: [{value, label}] |
| checkbox | Boolean | - |
| textarea | Multi-line text | minLength, maxLength |
| file | File upload | - |
{
"path": "fieldName",
"label": "Display Label",
"type": "text",
"required": true,
"placeholder": "Hint text",
"helpText": "Additional guidance",
"options": [{"value": "a", "label": "Option A"}],
"validation": {
"minLength": 1,
"maxLength": 500,
"pattern": "^[A-Z].*",
"min": 0,
"max": 100
}
}
# 1. Create draft
RESULT=$(curl -s -X POST -H "Authorization: Bearer $NETPAD_API_KEY" \
-H "Content-Type: application/json" \
"https://www.netpad.io/api/v1/forms" \
-d '{"name":"Survey","projectId":"proj_xxx","fields":[...]}')
FORM_ID=$(echo $RESULT | jq -r '.data.id')
# 2. Publish
curl -X PATCH -H "Authorization: Bearer $NETPAD_API_KEY" \
-H "Content-Type: application/json" \
"https://www.netpad.io/api/v1/forms/$FORM_ID" \
-d '{"status":"published"}'
curl -H "Authorization: Bearer $NETPAD_API_KEY" \
"https://www.netpad.io/api/v1/forms/{formId}/submissions?pageSize=1000" \
| jq '.data[].data'
for row in $(cat data.json | jq -c '.[]'); do
curl -s -X POST -H "Authorization: Bearer $NETPAD_API_KEY" \
-H "Content-Type: application/json" \
"https://www.netpad.io/api/v1/forms/{formId}/submissions" \
-d "{\"data\":$row}"
done
curl -H "Authorization: Bearer $NETPAD_API_KEY" \
"https://www.netpad.io/api/v1/forms?search=contact&status=published"
Use scripts/netpad.sh for common operations:
# Make executable
chmod +x scripts/netpad.sh
# Usage
./scripts/netpad.sh projects list
./scripts/netpad.sh forms list published
./scripts/netpad.sh forms create "Contact Form" proj_xxx
./scripts/netpad.sh forms publish frm_xxx
./scripts/netpad.sh submissions list frm_xxx
./scripts/netpad.sh submissions create frm_xxx '{"name":"John","email":"john@example.com"}'
./scripts/netpad.sh submissions export frm_xxx > data.jsonl
./scripts/netpad.sh submissions count frm_xxx
| Limit | Value |
|-------|-------|
| Requests/hour | 1,000 |
| Requests/day | 10,000 |
Headers: X-RateLimit-Limit, X-RateLimit-Remaining, X-RateLimit-Reset
{
"success": true,
"data": { ... },
"pagination": {"total": 100, "page": 1, "pageSize": 20, "hasMore": true},
"requestId": "uuid"
}
{
"success": false,
"error": {
"code": "VALIDATION_ERROR",
"message": "Description",
"details": {}
},
"requestId": "uuid"
}
# Required for REST API
export NETPAD_API_KEY="np_live_xxx"
# Optional (for local/staging)
export NETPAD_BASE_URL="https://staging.netpad.io/api/v1"
Install: npm i -g @netpad/cli
netpad login # Opens browser
netpad whoami # Check auth status
netpad logout # Clear credentials
# Search for apps
netpad search "helpdesk"
# Install an app
netpad install @netpad/helpdesk-app
# List installed
netpad list
# Create new app scaffold
netpad create-app my-app
# Submit to marketplace
netpad submit ./my-app
# List org members
netpad users list -o org_xxx
# Add user
netpad users add user@example.com -o org_xxx --role member
# Change role
netpad users update user@example.com -o org_xxx --role admin
# Remove user
netpad users remove user@example.com -o org_xxx
# List groups
netpad groups list -o org_xxx
# Create group
netpad groups create "Engineering" -o org_xxx
# Add user to group
netpad groups add-member grp_xxx user@example.com -o org_xxx
# Delete group
netpad groups delete grp_xxx -o org_xxx
# List roles (builtin + custom)
netpad roles list -o org_xxx
# Create custom role
netpad roles create "Reviewer" -o org_xxx --base viewer --description "Can review submissions"
# View role details
netpad roles get role_xxx -o org_xxx
# Delete custom role
netpad roles delete role_xxx -o org_xxx
# Assign role to user
netpad assign user user@example.com role_xxx -o org_xxx
# Assign role to group
netpad assign group grp_xxx role_xxx -o org_xxx
# Remove assignment
netpad unassign user user@example.com role_xxx -o org_xxx
# List all permissions
netpad permissions list -o org_xxx
# Check user's effective permissions
netpad permissions check user@example.com -o org_xxx
references/api-endpoints.md β Complete REST API endpoint docsreferences/cli-commands.md β Full CLI command referenceMichael Lynn β Principal Staff Developer Advocate at MongoDB
AI Usage Analysis
Analysis is being generated⦠refresh in a few seconds.
Use the @steipete/oracle CLI to bundle a prompt plus the right files and get a second-model review (API or browser) for debugging, refactors, design checks, or cross-validation.
Manage Things 3 via the `things` CLI on macOS (add/update projects+todos via URL scheme; read/search/list from the local Things database). Use when a user asks Clawdbot to add a task to Things, list inbox/today/upcoming, search tasks, or inspect projects/areas/tags.
Local search/indexing CLI (BM25 + vectors + rerank) with MCP mode.
Use when designing database schemas, writing migrations, optimizing SQL queries, fixing N+1 problems, creating indexes, setting up PostgreSQL, configuring EF Core, implementing caching, partitioning tables, or any database performance question.
Connect to Supabase for database operations, vector search, and storage. Use for storing data, running SQL queries, similarity search with pgvector, and managing tables. Triggers on requests involving databases, vector stores, embeddings, or Supabase specifically.
Query, design, migrate, and optimize SQL databases. Use when working with SQLite, PostgreSQL, or MySQL β schema design, writing queries, creating migrations, indexing, backup/restore, and debugging slow queries. No ORMs required.