
Productlane
- 53 installs
- 76 repo stars
- Updated August 4, 2026
- vm0-ai/vm0-skills
Helps with ai & agent building tasks during AI-assisted development.
About
productlane is a Claude Code skill for ai & agent building. It helps solo builders move faster with AI-assisted coding.
- productlane
- AI & Agent Building
- AI-coding skill
Productlane by the numbers
- 53 all-time installs (skills.sh)
- +1 installs in the week ending Aug 5, 2026 (Skillselion tracking)
- Ranked #7,039 of 16,546 AI & Agent Building skills by installs in the Skillselion catalog
- Data as of Aug 5, 2026 (Skillselion catalog sync)
npx skills add https://github.com/vm0-ai/vm0-skills --skill productlaneAdd your badge
Show developers this skill is listed on Skillselion. Paste this into your README.
| Installs | 53 |
|---|---|
| repo stars | ★ 76 |
| Last updated | August 4, 2026 |
| Repository | vm0-ai/vm0-skills ↗ |
What it does
Helps with ai & agent building tasks during AI-assisted development.
Files
Troubleshooting
If requests fail, run zero doctor check-connector --env-name PRODUCTLANE_TOKEN or zero doctor check-connector --url https://productlane.com/api/v1/workspaces --method GET
Workspaces
Get Workspace
Retrieve workspace information. Replace <workspace-id> with the actual workspace ID:
curl -s "https://productlane.com/api/v1/workspaces/<workspace-id>" --header "Authorization: Bearer $PRODUCTLANE_TOKEN"Companies
List Companies
curl -s "https://productlane.com/api/v1/companies?take=20" --header "Authorization: Bearer $PRODUCTLANE_TOKEN"List Companies with Filters
Filter by name or domain:
curl -s "https://productlane.com/api/v1/companies?name=Acme&take=10" --header "Authorization: Bearer $PRODUCTLANE_TOKEN"Get Company by ID
Replace <company-id> with the actual company ID:
curl -s "https://productlane.com/api/v1/companies/<company-id>?groupUpvotes=true" --header "Authorization: Bearer $PRODUCTLANE_TOKEN"Create Company
Write to /tmp/productlane_request.json:
{
"name": "Acme Corp",
"domains": ["acme.com"],
"size": 50,
"revenue": 1000000
}Then run:
curl -s -X POST "https://productlane.com/api/v1/companies" --header "Authorization: Bearer $PRODUCTLANE_TOKEN" --header "Content-Type: application/json" -d @/tmp/productlane_request.jsonUpdate Company
Write to /tmp/productlane_request.json:
{
"name": "Acme Corporation",
"size": 100
}Then run. Replace <company-id> with the actual company ID:
curl -s -X PATCH "https://productlane.com/api/v1/companies/<company-id>" --header "Authorization: Bearer $PRODUCTLANE_TOKEN" --header "Content-Type: application/json" -d @/tmp/productlane_request.jsonDelete Company
Replace <company-id> with the actual company ID:
curl -s -X DELETE "https://productlane.com/api/v1/companies/<company-id>" --header "Authorization: Bearer $PRODUCTLANE_TOKEN"Get Linear Customer Options
Get available Linear customer statuses and tiers. Requires Linear integration with customer:read or customer:write scope:
curl -s "https://productlane.com/api/v1/companies/linear-options" --header "Authorization: Bearer $PRODUCTLANE_TOKEN"Contacts
List Contacts
curl -s "https://productlane.com/api/v1/contacts?take=20" --header "Authorization: Bearer $PRODUCTLANE_TOKEN"Get Contact by ID or Email
Replace <contact-id-or-email> with the actual contact ID or email address:
curl -s "https://productlane.com/api/v1/contacts/<contact-id-or-email>" --header "Authorization: Bearer $PRODUCTLANE_TOKEN"Create Contact
Link to a company using companyId (recommended), companyName, or companyExternalId — these are mutually exclusive.
Write to /tmp/productlane_request.json:
{
"email": "jane@acme.com",
"name": "Jane Doe",
"companyId": "<company-id>"
}Then run:
curl -s -X POST "https://productlane.com/api/v1/contacts" --header "Authorization: Bearer $PRODUCTLANE_TOKEN" --header "Content-Type: application/json" -d @/tmp/productlane_request.jsonUpdate Contact
Write to /tmp/productlane_request.json:
{
"name": "Jane Smith"
}Then run. Replace <contact-id> with the actual contact ID:
curl -s -X PATCH "https://productlane.com/api/v1/contacts/<contact-id>" --header "Authorization: Bearer $PRODUCTLANE_TOKEN" --header "Content-Type: application/json" -d @/tmp/productlane_request.jsonDelete Contact
Replace <contact-id> with the actual contact ID:
curl -s -X DELETE "https://productlane.com/api/v1/contacts/<contact-id>" --header "Authorization: Bearer $PRODUCTLANE_TOKEN"Threads (Feedback)
List Threads
curl -s "https://productlane.com/api/v1/threads?take=20" --header "Authorization: Bearer $PRODUCTLANE_TOKEN"List Threads with Filters
Filter by state (NEW, PROCESSED), issue, or project:
curl -s "https://productlane.com/api/v1/threads?state=NEW&take=50" --header "Authorization: Bearer $PRODUCTLANE_TOKEN"Get Thread by ID
Replace <thread-id> with the actual thread ID:
curl -s "https://productlane.com/api/v1/threads/<thread-id>" --header "Authorization: Bearer $PRODUCTLANE_TOKEN"Create Thread
Required fields: title, text, contactEmail, painLevel.
Write to /tmp/productlane_request.json:
{
"title": "Feature request: Dark mode",
"text": "<p>It would be great to have a dark mode option for the dashboard.</p>",
"contactEmail": "jane@acme.com",
"actorName": "Jane Doe",
"painLevel": "MEDIUM"
}Pain level values: UNKNOWN, LOW, MEDIUM, HIGH
Then run:
curl -s -X POST "https://productlane.com/api/v1/threads" --header "Authorization: Bearer $PRODUCTLANE_TOKEN" --header "Content-Type: application/json" -d @/tmp/productlane_request.jsonUpdate Thread
Write to /tmp/productlane_request.json:
{
"title": "Feature request: Dark mode (updated)"
}Then run. Replace <thread-id> with the actual thread ID:
curl -s -X PATCH "https://productlane.com/api/v1/threads/<thread-id>" --header "Authorization: Bearer $PRODUCTLANE_TOKEN" --header "Content-Type: application/json" -d @/tmp/productlane_request.jsonSend Message to Thread
Send an email or Slack message to a thread. Replace <thread-id> with the actual thread ID:
Write to /tmp/productlane_request.json:
{
"text": "Thank you for your feedback! We are working on this feature."
}Then run:
curl -s -X POST "https://productlane.com/api/v1/threads/<thread-id>/messages" --header "Authorization: Bearer $PRODUCTLANE_TOKEN" --header "Content-Type: application/json" -d @/tmp/productlane_request.jsonChangelogs
List Changelogs
Replace <workspace-id> with the actual workspace ID:
curl -s "https://productlane.com/api/v1/changelogs/<workspace-id>" --header "Authorization: Bearer $PRODUCTLANE_TOKEN"Get Changelog
Replace <workspace-id> and <changelog-id> with the actual IDs:
curl -s "https://productlane.com/api/v1/changelogs/<workspace-id>/<changelog-id>" --header "Authorization: Bearer $PRODUCTLANE_TOKEN"Create Changelog
Write to /tmp/productlane_request.json:
{
"title": "March 2026 Update",
"content": "## New Features\n\n- Dark mode support\n- Improved search\n- New API endpoints"
}Then run:
curl -s -X POST "https://productlane.com/api/v1/changelogs" --header "Authorization: Bearer $PRODUCTLANE_TOKEN" --header "Content-Type: application/json" -d @/tmp/productlane_request.jsonUpdate Changelog
Write to /tmp/productlane_request.json:
{
"title": "March 2026 Update (Revised)",
"content": "## New Features\n\n- Dark mode support\n- Improved search\n- New API endpoints\n- Bug fixes"
}Then run. Replace <changelog-id> with the actual changelog ID:
curl -s -X PATCH "https://productlane.com/api/v1/changelogs/<changelog-id>" --header "Authorization: Bearer $PRODUCTLANE_TOKEN" --header "Content-Type: application/json" -d @/tmp/productlane_request.jsonDelete Changelog
Replace <changelog-id> with the actual changelog ID:
curl -s -X DELETE "https://productlane.com/api/v1/changelogs/<changelog-id>" --header "Authorization: Bearer $PRODUCTLANE_TOKEN"Portal / Roadmap
List Projects
Replace <workspace-id> with the actual workspace ID. The workspace must have its portal published:
curl -s "https://productlane.com/api/v1/projects/<workspace-id>" --header "Authorization: Bearer $PRODUCTLANE_TOKEN"Get Project
Replace <workspace-id> and <project-id> with the actual IDs:
curl -s "https://productlane.com/api/v1/projects/<workspace-id>/<project-id>" --header "Authorization: Bearer $PRODUCTLANE_TOKEN"List Issues
Replace <workspace-id> with the actual workspace ID:
curl -s "https://productlane.com/api/v1/issues/<workspace-id>" --header "Authorization: Bearer $PRODUCTLANE_TOKEN"Get Issue
Replace <workspace-id> and <issue-id> with the actual IDs:
curl -s "https://productlane.com/api/v1/issues/<workspace-id>/<issue-id>" --header "Authorization: Bearer $PRODUCTLANE_TOKEN"Upvote a Project or Issue
Write to /tmp/productlane_request.json:
{
"projectId": "<project-id>",
"email": "jane@acme.com"
}Then run:
curl -s -X POST "https://productlane.com/api/v1/portal/upvotes" --header "Authorization: Bearer $PRODUCTLANE_TOKEN" --header "Content-Type: application/json" -d @/tmp/productlane_request.jsonGet Upvotes
curl -s "https://productlane.com/api/v1/portal/upvotes?projectId=<project-id>" --header "Authorization: Bearer $PRODUCTLANE_TOKEN"Delete Upvote
Replace <upvote-id> with the actual upvote ID:
curl -s -X DELETE "https://productlane.com/api/v1/portal/upvotes/<upvote-id>" --header "Authorization: Bearer $PRODUCTLANE_TOKEN"Documentation
List Articles
Replace <workspace-id> with the actual workspace ID:
curl -s "https://productlane.com/api/v1/docs/articles/<workspace-id>" --header "Authorization: Bearer $PRODUCTLANE_TOKEN"Get Article
Replace <workspace-id> and <article-id> with the actual IDs:
curl -s "https://productlane.com/api/v1/docs/articles/<workspace-id>/<article-id>" --header "Authorization: Bearer $PRODUCTLANE_TOKEN"Create Article
Requires groupId. Create a doc group first if needed.
Write to /tmp/productlane_request.json:
{
"title": "Getting Started",
"content": "## Welcome\n\nThis guide will help you get started with our product.",
"groupId": "<group-id>"
}Then run:
curl -s -X POST "https://productlane.com/api/v1/docs/articles" --header "Authorization: Bearer $PRODUCTLANE_TOKEN" --header "Content-Type: application/json" -d @/tmp/productlane_request.jsonUpdate Article
Write to /tmp/productlane_request.json:
{
"title": "Getting Started (Updated)",
"content": "## Welcome\n\nThis updated guide will help you get started."
}Then run. Replace <article-id> with the actual article ID:
curl -s -X PATCH "https://productlane.com/api/v1/docs/articles/<article-id>" --header "Authorization: Bearer $PRODUCTLANE_TOKEN" --header "Content-Type: application/json" -d @/tmp/productlane_request.jsonDelete Article
Replace <article-id> with the actual article ID:
curl -s -X DELETE "https://productlane.com/api/v1/docs/articles/<article-id>" --header "Authorization: Bearer $PRODUCTLANE_TOKEN"Create Doc Group
Write to /tmp/productlane_request.json:
{
"name": "User Guides"
}Then run:
curl -s -X POST "https://productlane.com/api/v1/docs/groups" --header "Authorization: Bearer $PRODUCTLANE_TOKEN" --header "Content-Type: application/json" -d @/tmp/productlane_request.jsonMove Articles to Group
Write to /tmp/productlane_request.json:
{
"articleIds": ["<article-id-1>", "<article-id-2>"],
"groupId": "<group-id>"
}Then run:
curl -s -X POST "https://productlane.com/api/v1/docs/groups/move-articles" --header "Authorization: Bearer $PRODUCTLANE_TOKEN" --header "Content-Type: application/json" -d @/tmp/productlane_request.jsonUsers
List Members
curl -s "https://productlane.com/api/v1/users" --header "Authorization: Bearer $PRODUCTLANE_TOKEN"Invite User
Write to /tmp/productlane_request.json:
{
"email": "newuser@acme.com"
}Then run:
curl -s -X POST "https://productlane.com/api/v1/users/invite" --header "Authorization: Bearer $PRODUCTLANE_TOKEN" --header "Content-Type: application/json" -d @/tmp/productlane_request.jsonUpdate User Role
Only admins can change roles. Valid roles: ADMIN, USER, VIEWER.
Write to /tmp/productlane_request.json:
{
"userId": "<user-id>",
"role": "USER"
}Then run:
curl -s -X PATCH "https://productlane.com/api/v1/users/role" --header "Authorization: Bearer $PRODUCTLANE_TOKEN" --header "Content-Type: application/json" -d @/tmp/productlane_request.jsonGuidelines
1. Base URL: All endpoints use https://productlane.com/api/v1/ 2. Pagination: Use skip and take query parameters for paginated endpoints (default take is 10) 3. Markdown support: Changelog and documentation article content fields support markdown format 4. HTML support: Thread text field supports HTML content 5. Thread fields: Use contactEmail (not email) and uppercase painLevel values (UNKNOWN, LOW, MEDIUM, HIGH) 6. Doc articles: groupId is required when creating articles — create a doc group first 7. Company linking: When creating contacts, use exactly one of companyId (recommended), companyName, or companyExternalId 8. Public endpoints: Workspace, portal issues/projects, and published changelogs/articles can be accessed without authentication 9. Security: Never expose API keys in logs or client-side code
API Reference
- Documentation: https://productlane.mintlify.dev/docs/api-reference
- Dashboard: https://productlane.com
- API settings: https://productlane.com/settings/integrations/api