Create a private owner-bound product draft with a personal API key. Category can be omitted while drafting; choose one in the editor before selecting a plan or submitting.
/api/v1/toolsAuthorizationHeaderBearer lb_… personal API key.Idempotency-KeyHeaderUnique key for this draft; 16–256 characters.Content-TypeHeaderapplication/json.nameBodyTrimmed string; 1–160 characters.headlineBodyTrimmed string; 1–200 characters.descriptionBodyTrimmed string; 200–2,000 characters.websiteUrlBodyValid URL; up to 2,000 characters.screenshotUrlsBodyArray of 1–4 publicly reachable screenshot URLs; otherwise the product Open Graph image is used.categoryBodyIf supplied: an existing category slug, trimmed, 1–120 characters. Omit it when undecided; empty strings and unknown slugs are rejected. Required before selecting a plan or submitting.logoUrlBodyValid URL; otherwise the product favicon is used. Returns 422 if both media items cannot be resolved.slugBodyTrimmed string; 1–120 characters. A slug is generated when omitted.curl -X POST https://www.listbulb.com/api/v1/tools \
-H "Authorization: Bearer lb_your_secret" \
-H "Idempotency-Key: a-unique-key-per-product" \
-H "Content-Type: application/json" \
-d '{"name":"Acme","headline":"A focused workspace","description":"Acme is a focused workspace that helps small teams organize their projects, capture useful notes, and collaborate on everyday work. This private draft is prepared for the founder to review, complete, and submit through the normal ListBulb workflow.","websiteUrl":"https://acme.example","screenshotUrls":["https://acme.example/screenshot.png"]}'201 { data: { slug, status: "DRAFT", editorUrl }, meta }; the Location header repeats the private editor URL.
400 VALIDATION_ERROR or IDEMPOTENCY_KEY_REQUIRED401 API_KEY_REQUIRED403 OWNER_UNAVAILABLE409 IDEMPOTENCY_CONFLICT422 MEDIA_REQUIRED429 RATE_LIMITED503 RATE_LIMIT_UNAVAILABLE