gogl.in

API

Create an API key in your dashboard and send it as Authorization: Bearer gogl_.... All bodies are JSON.

Create a link

POST /api/v1/links
{"url": "https://example.com/page", "slug": "optional-back-half", "title": "optional",
 "tags": ["optional"], "password": "optional", "expiresAt": "2026-12-31T00:00:00Z",
 "expiredUrl": "https://example.com/ended", "iosUrl": "https://apps.apple.com/...", "androidUrl": "https://play.google.com/..."}

Returns 201 with the link, including shortUrl.

List, read, update, delete

GET    /api/v1/links?q=search&limit=50&before=ID
GET    /api/v1/links/ID
PATCH  /api/v1/links/ID   {"url": "...", "slug": "...", "title": "...", "tags": [...]}
DELETE /api/v1/links/ID

Analytics

GET /api/v1/links/ID/stats?days=30

Returns totals, clicks per day, countries, devices, operating systems, browsers, referrers and QR scans.

Bulk import

POST /api/v1/links/bulk
{"csv": "url,slug,title,tags
https://example.com,promo,Promo,spring|email"}

Up to 1,000 rows. Columns: url (required), slug, title, tags (separated by |).

Check a destination

GET /api/v1/check?url=https://example.com

Limits

300 requests per minute per network and 60 new links per minute per account. Responses use standard HTTP status codes and a JSON error message.