Source Code
NetPad
Manage forms, submissions, users, and RBAC via CLI and REST API.
Two Tools
| Tool | Install | Purpose |
|---|---|---|
netpad CLI |
npm i -g @netpad/cli |
RBAC, marketplace, packages |
| REST API | curl + API key | Forms, submissions, data |
Authentication
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/..."
Quick Reference
| 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 |
Projects
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}'
Forms
List Forms
curl -H "Authorization: Bearer $NETPAD_API_KEY" \
"https://www.netpad.io/api/v1/forms?status=published&pageSize=50"
Create Form
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"}
]
}'
Get Form Details
curl -H "Authorization: Bearer $NETPAD_API_KEY" \
"https://www.netpad.io/api/v1/forms/{formId}"
Publish Form
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"}'
Update Form Fields
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"}
]}
]
}'
Delete Form
curl -X DELETE -H "Authorization: Bearer $NETPAD_API_KEY" \
"https://www.netpad.io/api/v1/forms/{formId}"
Submissions
Submit Data
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": "[email protected]",
"message": "Hello from the API!"
}
}'
List Submissions
# 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"
Get Single Submission
curl -H "Authorization: Bearer $NETPAD_API_KEY" \
"https://www.netpad.io/api/v1/forms/{formId}/submissions/{submissionId}"
Delete Submission
curl -X DELETE -H "Authorization: Bearer $NETPAD_API_KEY" \
"https://www.netpad.io/api/v1/forms/{formId}/submissions/{submissionId}"
Field Types
| 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 | - |
Field Schema
{
"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
}
}
Common Patterns
Create and Publish Form
# 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"}'
Export All Submissions
curl -H "Authorization: Bearer $NETPAD_API_KEY" \
"https://www.netpad.io/api/v1/forms/{formId}/submissions?pageSize=1000" \
| jq '.data[].data'
Bulk Submit
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
Search Forms
curl -H "Authorization: Bearer $NETPAD_API_KEY" \
"https://www.netpad.io/api/v1/forms?search=contact&status=published"
Helper Script
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":"[email protected]"}'
./scripts/netpad.sh submissions export frm_xxx > data.jsonl
./scripts/netpad.sh submissions count frm_xxx
Rate Limits
| Limit | Value |
|---|---|
| Requests/hour | 1,000 |
| Requests/day | 10,000 |
Headers: X-RateLimit-Limit, X-RateLimit-Remaining, X-RateLimit-Reset
Response Format
Success
{
"success": true,
"data": { ... },
"pagination": {"total": 100, "page": 1, "pageSize": 20, "hasMore": true},
"requestId": "uuid"
}
Error
{
"success": false,
"error": {
"code": "VALIDATION_ERROR",
"message": "Description",
"details": {}
},
"requestId": "uuid"
}
Environment Variables
# 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"
NetPad CLI (@netpad/cli)
Install: npm i -g @netpad/cli
Authentication
netpad login # Opens browser
netpad whoami # Check auth status
netpad logout # Clear credentials
Marketplace & Packages
# 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
RBAC - Users
# List org members
netpad users list -o org_xxx
# Add user
netpad users add [email protected] -o org_xxx --role member
# Change role
netpad users update [email protected] -o org_xxx --role admin
# Remove user
netpad users remove [email protected] -o org_xxx
RBAC - Groups
# 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 [email protected] -o org_xxx
# Delete group
netpad groups delete grp_xxx -o org_xxx
RBAC - Roles
# 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
RBAC - Assignments
# Assign role to user
netpad assign user [email protected] role_xxx -o org_xxx
# Assign role to group
netpad assign group grp_xxx role_xxx -o org_xxx
# Remove assignment
netpad unassign user [email protected] role_xxx -o org_xxx
RBAC - Permissions
# List all permissions
netpad permissions list -o org_xxx
# Check user's effective permissions
netpad permissions check [email protected] -o org_xxx
References
references/api-endpoints.mdโ Complete REST API endpoint docsreferences/cli-commands.mdโ Full CLI command reference
Author
Michael Lynn โ Principal Staff Developer Advocate at MongoDB
- ๐ Website: mlynn.org
- ๐ GitHub: @mrlynn
- ๐ผ LinkedIn: linkedin.com/in/mlynn