List all URLs owned by the authenticated user.
Returns a paginated list of shortened URLs with support for filtering, sorting, and full-text search on aliases and destination URLs.
Authentication: Required.
API Key Scope: urls:manage, urls:read, or admin:all
Rate Limits: 60/min, 5,000/day
Pagination: Use page and pageSize query params. Response includes
hasNext boolean and total count.
Sorting: Sort by created_at, last_click, or total_clicks in
ascending or descending order.
Filtering: Pass a JSON-encoded filter parameter with fields like
status, createdAfter, createdBefore, passwordSet, maxClicksSet,
and search.
API key authentication. Pass your key as: Bearer spoo_<your_key>
Page number (default: 1)
x >= 11
Items per page (default: 20, max: 100)
1 <= x <= 10020
Field to sort by
created_at, last_click, total_clicks Sort direction
ascending, asc, 1, descending, desc, -1 JSON string containing filter criteria for URLs. Format: {"field": value}
Available filter fields:
"ACTIVE" or "INACTIVE")true/false)true/false)Value formats:
"ACTIVE" or "INACTIVE" (case-sensitive)"2024-01-01T00:00:00Z") or Unix timestamp (e.g., 1704067200)true or falseExamples:
{"status": "ACTIVE"} — Only active URLs{"passwordSet": true} — Only password-protected URLs{"createdAfter": "2024-01-01T00:00:00Z"} — URLs created after Jan 1, 2024{"status": "ACTIVE", "maxClicksSet": true} — Active URLs with click limits{"search": "example"} — URLs containing "example" in alias or long_url{"createdAfter": "2024-01-01", "createdBefore": "2024-12-31", "status": "ACTIVE"} — Active URLs from 2024"{\"status\":\"ACTIVE\"}"
Alias for filter parameter.
Successful Response
Response body for GET /api/v1/urls.
Uses camelCase field names to match the existing Flask endpoint exactly. Field names are camelCase here (not snake_case + alias) because this is a response-only model — we build it explicitly in the route handler.