Authentication

All API requests require a Bearer Token in the header:

Authorization: Bearer okurl_{your_api_key}

Generate a key on the API page. Key format:

okurl_{user_id}_{random_40_chars}
Rate Limiting
Per minute60 requests
Per day5,000 requests

Returns HTTP 429 when limit is exceeded.

Response Format

Success:

{"_res": "ok", "id": "123", "slug": "abc", ...}

Error:

{"_res": "err", "code": "error_code", "msg": "Human readable message"}
URL Endpoints
POST /v1/urls/add Create short link
ParamTypeReqDescription
domain_idstringYDomain ID
urlstringYTarget URL
slugstring-Custom slug (5-30 chars), auto-generated if empty
titlestring-Title (auto-fetched if empty)
pswdstring-Access password
expirystring-Expiry (format: 2026-01-01T00:00)
project_idstring-Project ID
curl -X POST https://okurl.io/v1/urls/add \
  -H "Authorization: Bearer okurl_{key}" \
  -H "Content-Type: application/json" \
  -d '{"domain_id":"1","url":"https://example.com"}'
POST /v1/urls/list List short links
ParamTypeReqDescription
domain_idstring-Domain ID (filter)
keywordstring-Search keyword
tagstring-Filter by tag
project_idstring-Filter by project
pageint-Page (default 1)
limitint-Per page (default 20, max 100)
POST /v1/urls/detail/:id Get detail
POST /v1/urls/edit/:id Edit short link
ParamTypeReqDescription
urlstringYTarget URL
slugstringYSlug
titlestring-Title
tagsstring-Tags (comma-separated)
notesstring-Notes
pswdstring-Password
expirystring-Expiry
redirect_typestring-0=default, 1=landing, 2=JS, 3=302, 4=301
project_idstring-Project ID
POST /v1/urls/delete/:id Delete
ParamTypeReqDescription
hashstringYLink hash (from detail/list response)
POST /v1/urls/transfer Transfer guest links
ParamTypeReqDescription
listarrayY[{"id":"...","hash":"..."}]
GET/v1/urls/analytics/:idLink analytics
GET/v1/urls/exportExport CSV
GET/v1/urls/qr/:idQR Code (PNG)
Domain Endpoints
POST/v1/domains/listList my domains
POST/v1/domains/list_pubList public domains
POST/v1/domains/editEdit domain (multipart/form-data)
ParamTypeReqDescription
idstringYDomain ID
new_domainstring-New domain name
redirection_methodstring-Redirection method
public_allowedstring-0 or 1
path_prefixstring-Path prefix (e.g. "s")
logofile-Logo image (JPG/PNG)
delete_logostring-"true" to delete logo
collaboratorsJSON string-[{"user_id":"...","is_admin":0}]

This endpoint uses multipart/form-data, not JSON.

Team Endpoints
POST/v1/teams/addCreate team
ParamTypeReqDescription
domain_idstringYDomain ID
namestringYTeam name (max 100)
POST/v1/teams/edit/:idEdit team

name (required)

POST/v1/teams/delete/:idDelete team
POST/v1/teams/listList teams

domain_id (required)

POST/v1/teams/member/addAdd member
ParamTypeReqDescription
team_idstringYTeam ID
user_idstringYUser ID (SafeID)
namestring-Display name
emailstring-Email
positionstring-Position/title
rolestring-0=member, 1=manager
POST/v1/teams/member/edit/:idEdit member

name, email, position, role, user_id

POST/v1/teams/member/remove/:idRemove member
POST/v1/teams/member/listList members

team_id (required)

GET/v1/teams/analytics/:idTeam analytics
GET/v1/teams/analytics/compare?domain_id=XCross-team comparison
UTM Template Endpoints
POST/v1/utm-templates/addCreate template
ParamTypeReqDescription
domain_idstringYDomain ID
namestringYTemplate name
utm_sourcestring-UTM Source
utm_mediumstring-UTM Medium
utm_campaignstring-UTM Campaign
utm_termstring-UTM Term
utm_contentstring-UTM Content
utm_source_platformstring-Source Platform
POST/v1/utm-templates/edit/:idEdit template

Same params as add (all optional except via path :id)

POST/v1/utm-templates/delete/:idDelete template
POST/v1/utm-templates/listList templates

domain_id (required)

Project Endpoints
POST/v1/projects/addCreate project
ParamTypeReqDescription
domain_idstringYDomain ID
namestringYProject name
descriptionstring-Description
utm_tpl_idstring-UTM Template ID
team_idstring-Team ID
POST/v1/projects/edit/:idEdit project

name, description, status (0=active, 1=archived), utm_tpl_id, team_id

POST/v1/projects/delete/:idDelete project
POST/v1/projects/listList projects

domain_id (required)

Error Codes
CodeDescription
missing_api_keyMissing Authorization header
invalid_api_keyInvalid API key
rate_limit_exceededPer-minute rate limit exceeded
daily_limit_exceededDaily rate limit exceeded
login requiredLogin required (token issue)
domain_404Domain not found
domain_not_allowedNo permission for this domain
url_404URL not found
access deniedAccess denied
team_not_foundTeam not found
member_not_foundTeam member not found
template_not_foundUTM template not found
project_not_foundProject not found