# ZoLinks > ZoLinks is a free link-in-bio and developer platform. Use the Developer API to create smartlinks, short URLs, gated links, QR codes, and webhooks programmatically. ## Docs - [Interactive docs](https://zolinks.in/docs): full reference with playground. - [Full markdown reference](https://zolinks.in/llms-full.txt): every endpoint, request/response schema, and code samples in one file. - [Developer overview](https://zolinks.in/developers): plans, credits, and SDKs. ## Endpoints - POST /webhooks — Register a new webhook endpoint. - GET /webhooks — List all your registered webhooks. - PUT /webhooks/:id — Update a webhook's URL, events, or active status. - DELETE /webhooks/:id — Delete a webhook. Returns { "success": true }. - POST /smartlinks — Create a new smartlink with platform-specific URLs. - GET /smartlinks — List all smartlinks owned by the calling API key, sorted by created_at descending. Pagination is offset-based; total reflects the full owned set so you can build pagers without extra requests. - GET /smartlinks/:id — Fetch one smartlink by id along with the full ordered list of platform destinations. Each platform row carries its own click_count so you can render a per-destination breakdown without a separate analytics call. - PUT /smartlinks/:id — Update a smartlink's title, slug, artwork, active status, or platforms. Providing platforms replaces the entire list. - DELETE /smartlinks/:id — Delete a smartlink and all its platform URLs. Returns { "success": true }. - POST /smartlinks/:id/click — Track a click on a smartlink. If a platform is supplied, BOTH the smartlink's total click_count AND that platform's per-destination click_count are atomically incremented; otherwise only the smartlink total is incremented. Fires the smartlink.clicked webhook with { smartlink_id, platform } to every active subscription. - GET /credits — Get your current credit balance and lifetime usage. Costs 1 credit per call. - GET /webhooks/:id — Fetch a single webhook by ID. - POST /webhooks/:id/test — Enqueue a synthetic webhook.test delivery so you can verify your endpoint signature/handler. - POST /shorturls — Create a short URL. Returns the resolved public URL at https://zolinks.in/s/d/. Costs 1 credit. - GET /shorturls — List short URLs owned by the calling API key, paginated. - GET /shorturls/:id — Fetch one short URL by id. - PUT /shorturls/:id — Update title, expiry, active status, or password. - DELETE /shorturls/:id — Delete a short URL. Returns { "success": true }. - GET /shorturls/:id/analytics — Daily click time-series, top referrers, and top countries for a short URL. - POST /gated-links — Create a gated link. Public URL is https://zolinks.in/g/d/. mode 'email' is available on all plans; mode 'payment' requires the Business plan and a configured payment gateway. - GET /gated-links — List gated links owned by the calling API key, paginated. - GET /gated-links/:id — Fetch one gated link by id, including counters. - PUT /gated-links/:id — Update title, destination, pricing, caps, or active status. - DELETE /gated-links/:id — Delete a gated link and its unlocks. Returns { "success": true }. - GET /gated-links/:id/unlocks — List unlock records (email captures and successful payments) for a gated link. - GET /gated-links/:id/analytics — Daily views/unlocks time-series for a gated link. - POST /qr — Generate a QR image on the fly without persisting anything. Responds directly with the binary/text image. Costs 1 credit per call. - POST /qr/codes — Save a QR template so it can be rendered repeatedly without re-specifying styling. - GET /qr/codes — List saved QR templates. - GET /qr/codes/:id — Fetch a saved QR template by id. Add /render to fetch a rendered image instead. - PUT /qr/codes/:id — Update a saved QR template's name, data, or styling. - DELETE /qr/codes/:id — Delete a saved QR template. Returns { "success": true }.