{
    "variable": [
        {
            "id": "baseUrl",
            "key": "baseUrl",
            "type": "string",
            "name": "string",
            "value": "https:\/\/shorturl.fm"
        }
    ],
    "info": {
        "name": "ShortURL.FM API Documentation",
        "_postman_id": "3792975f-84b9-455d-b22f-94e476d089d7",
        "description": "Authenticated API for creating, managing, and inspecting short URLs on ShortURL.FM.\n\nThis documentation covers the authenticated <code>v1<\/code> API for ShortURL.FM.\nAll endpoints require a Sanctum personal access token sent as a Bearer token.",
        "schema": "https:\/\/schema.getpostman.com\/json\/collection\/v2.1.0\/collection.json"
    },
    "item": [
        {
            "name": "Domains",
            "description": "\nLook up short-link domains that can be used when creating URLs.",
            "item": [
                {
                    "name": "List active domains.",
                    "request": {
                        "url": {
                            "host": "{{baseUrl}}",
                            "path": "api\/v1\/domains",
                            "query": [],
                            "raw": "{{baseUrl}}\/api\/v1\/domains"
                        },
                        "method": "GET",
                        "header": [
                            {
                                "key": "Content-Type",
                                "value": "application\/json"
                            },
                            {
                                "key": "Accept",
                                "value": "application\/json"
                            }
                        ],
                        "body": null,
                        "description": "Returns the domains currently available for short URL creation, with the default domain first.\nRate limit: `200\/hour`, `4,800\/day`, `30,000\/month`."
                    },
                    "response": [
                        {
                            "header": [],
                            "code": 200,
                            "body": "{\n  \"success\": true,\n  \"data\": [\n    {\n      \"id\": 1,\n      \"host\": \"shorturl.fm\",\n      \"is_default\": true\n    },\n    {\n      \"id\": 2,\n      \"host\": \"shorturl.sh\",\n      \"is_default\": false\n    }\n  ],\n  \"error\": null,\n  \"meta\": {\n    \"trace_id\": \"bcde4e74-26d5-4261-8c86-c1cb270d3af0\",\n    \"timestamp\": \"2026-03-06T12:03:00+00:00\"\n  }\n}\n",
                            "name": ""
                        },
                        {
                            "header": [],
                            "code": 401,
                            "body": "{\n  \"success\": false,\n  \"data\": null,\n  \"error\": {\n    \"message\": \"Unauthenticated.\",\n    \"details\": {}\n  },\n  \"meta\": {\n    \"trace_id\": \"9f106f90-d1fc-4f85-a5dc-a2245d756590\",\n    \"timestamp\": \"2026-03-08T12:30:00+00:00\"\n  }\n}\n\n",
                            "name": ""
                        },
                        {
                            "header": [],
                            "code": 403,
                            "body": "{\n  \"success\": false,\n  \"data\": null,\n  \"error\": {\n    \"message\": \"Please verify your email address before continuing.\",\n    \"details\": {\n      \"status\": \"email-verification-required\",\n      \"verify_email_url\": \"\/app\/verify-email\"\n    }\n  },\n  \"meta\": {\n    \"trace_id\": \"f0e14d9f-d652-4b3b-857c-0f5f0a9ce0f3\",\n    \"timestamp\": \"2026-03-24T12:00:00+00:00\"\n  }\n}\n",
                            "name": ""
                        },
                        {
                            "header": [
                                {
                                    "key": "Retry-After",
                                    "value": "3600"
                                },
                                {
                                    "key": "X-RateLimit-Reset",
                                    "value": "1772985600"
                                }
                            ],
                            "code": 429,
                            "body": "{\n  \"success\": false,\n  \"data\": null,\n  \"error\": {\n    \"message\": \"Too Many Attempts.\",\n    \"details\": {\n      \"retry_after_seconds\": 3600,\n      \"rate_limit_reset_at_unix\": 1772985600\n    }\n  },\n  \"meta\": {\n    \"trace_id\": \"2bb87fd5-4128-48dc-88ca-f3a62e2be9a7\",\n    \"timestamp\": \"2026-03-08T12:31:00+00:00\"\n  }\n}\n",
                            "name": ""
                        }
                    ]
                }
            ]
        },
        {
            "name": "Short URLs",
            "description": "\nCreate, inspect, update, and analyze the authenticated user's short URLs.",
            "item": [
                {
                    "name": "Create a short URL.",
                    "request": {
                        "url": {
                            "host": "{{baseUrl}}",
                            "path": "api\/v1\/short-urls",
                            "query": [],
                            "raw": "{{baseUrl}}\/api\/v1\/short-urls"
                        },
                        "method": "POST",
                        "header": [
                            {
                                "key": "Content-Type",
                                "value": "application\/json"
                            },
                            {
                                "key": "Accept",
                                "value": "application\/json"
                            }
                        ],
                        "body": {
                            "mode": "raw",
                            "raw": "{\"url\":\"https:\\\/\\\/example.com\\\/very\\\/long\\\/path\"}"
                        },
                        "description": "Creates a new short URL for the authenticated user. If `alias` is omitted, the server generates a random code.\nBase rate limit: `200\/hour`, `4,800\/day`, `30,000\/month`.\nAdditional limits apply when `log_stats=true` and\/or `qr_enabled=true`: `100\/hour`, `2,400\/day`, `10,000\/month`."
                    },
                    "response": [
                        {
                            "header": [],
                            "code": 201,
                            "body": "{\n  \"success\": true,\n  \"data\": {\n    \"id\": 42,\n    \"short_url\": \"https:\/\/shorturl.fm\/Docs-42\",\n    \"long_url\": \"https:\/\/example.com\/very\/long\/path\",\n    \"domain\": \"shorturl.fm\",\n    \"short_code\": \"Docs-42\",\n    \"total_clicks\": 131,\n    \"log_stats\": true,\n    \"expires_at\": \"2026-12-31 23:59:59\",\n    \"has_password\": true,\n    \"qr_enabled\": true,\n    \"qr_svg_download_url\": \"https:\/\/shorturl.fm\/short-urls\/42\/qr\/svg\",\n    \"qr_png_download_url\": \"https:\/\/shorturl.fm\/short-urls\/42\/qr\/png\",\n    \"qr_webp_download_url\": \"https:\/\/shorturl.fm\/short-urls\/42\/qr\/webp\",\n    \"created_at\": \"2026-03-01 09:30:00\",\n    \"updated_at\": \"2026-03-06 11:45:00\",\n    \"stats_url\": \"https:\/\/shorturl.fm\/Docs-42+\"\n  },\n  \"error\": null,\n  \"meta\": {\n    \"trace_id\": \"2bdb40b1-49fd-4abf-8b7b-26db74bc2825\",\n    \"timestamp\": \"2026-03-06T12:04:00+00:00\"\n  }\n}\n",
                            "name": ""
                        },
                        {
                            "header": [],
                            "code": 401,
                            "body": "{\n  \"success\": false,\n  \"data\": null,\n  \"error\": {\n    \"message\": \"Unauthenticated.\",\n    \"details\": {}\n  },\n  \"meta\": {\n    \"trace_id\": \"9f106f90-d1fc-4f85-a5dc-a2245d756590\",\n    \"timestamp\": \"2026-03-08T12:30:00+00:00\"\n  }\n}\n\n",
                            "name": ""
                        },
                        {
                            "header": [],
                            "code": 403,
                            "body": "{\n  \"success\": false,\n  \"data\": null,\n  \"error\": {\n    \"message\": \"This URL is blacklisted.\",\n    \"details\": {}\n  },\n  \"meta\": {\n    \"trace_id\": \"7287efd5-3071-4829-9fda-b5ef4ed6cb90\",\n    \"timestamp\": \"2026-03-06T12:06:00+00:00\"\n  }\n}\n",
                            "name": "URL is blacklisted"
                        },
                        {
                            "header": [],
                            "code": 403,
                            "body": "{\n  \"success\": false,\n  \"data\": null,\n  \"error\": {\n    \"message\": \"Please verify your email address before continuing.\",\n    \"details\": {\n      \"status\": \"email-verification-required\",\n      \"verify_email_url\": \"\/app\/verify-email\"\n    }\n  },\n  \"meta\": {\n    \"trace_id\": \"f0e14d9f-d652-4b3b-857c-0f5f0a9ce0f3\",\n    \"timestamp\": \"2026-03-24T12:00:00+00:00\"\n  }\n}\n",
                            "name": "Email verification required"
                        },
                        {
                            "header": [],
                            "code": 422,
                            "body": "{\n  \"success\": false,\n  \"data\": null,\n  \"error\": {\n    \"message\": \"The given data was invalid.\",\n    \"details\": {\n      \"validation\": {\n        \"url\": [\n          \"The url field is required.\"\n        ]\n      }\n    }\n  },\n  \"meta\": {\n    \"trace_id\": \"f4066217-792f-4f28-a243-e3a36f1b1e3e\",\n    \"timestamp\": \"2026-03-06T12:07:00+00:00\"\n  }\n}\n",
                            "name": ""
                        },
                        {
                            "header": [
                                {
                                    "key": "Retry-After",
                                    "value": "3600"
                                },
                                {
                                    "key": "X-RateLimit-Reset",
                                    "value": "1772985600"
                                }
                            ],
                            "code": 429,
                            "body": "{\n  \"success\": false,\n  \"data\": null,\n  \"error\": {\n    \"message\": \"Too Many Attempts.\",\n    \"details\": {\n      \"retry_after_seconds\": 3600,\n      \"rate_limit_reset_at_unix\": 1772985600\n    }\n  },\n  \"meta\": {\n    \"trace_id\": \"2bb87fd5-4128-48dc-88ca-f3a62e2be9a7\",\n    \"timestamp\": \"2026-03-08T12:31:00+00:00\"\n  }\n}\n",
                            "name": ""
                        }
                    ]
                },
                {
                    "name": "List short URLs.",
                    "request": {
                        "url": {
                            "host": "{{baseUrl}}",
                            "path": "api\/v1\/short-urls",
                            "query": [
                                {
                                    "key": "page",
                                    "value": "1",
                                    "description": "Page number for pagination.",
                                    "disabled": false
                                },
                                {
                                    "key": "per_page",
                                    "value": "20",
                                    "description": "Number of items per page. Must be between 1 and 100.",
                                    "disabled": false
                                },
                                {
                                    "key": "search",
                                    "value": "promo",
                                    "description": "Filter results by matching part of the original URL or short code.",
                                    "disabled": false
                                }
                            ],
                            "raw": "{{baseUrl}}\/api\/v1\/short-urls?page=1&per_page=20&search=promo"
                        },
                        "method": "GET",
                        "header": [
                            {
                                "key": "Content-Type",
                                "value": "application\/json"
                            },
                            {
                                "key": "Accept",
                                "value": "application\/json"
                            }
                        ],
                        "body": null,
                        "description": "Returns the authenticated user's short URLs in reverse chronological order.\nRate limit: `200\/hour`, `4,800\/day`, `30,000\/month`."
                    },
                    "response": [
                        {
                            "header": [],
                            "code": 200,
                            "body": "{\n  \"success\": true,\n  \"data\": [\n    {\n      \"id\": 42,\n      \"short_url\": \"https:\/\/shorturl.fm\/Docs-42\",\n      \"long_url\": \"https:\/\/example.com\/very\/long\/path\",\n      \"domain\": \"shorturl.fm\",\n      \"short_code\": \"Docs-42\",\n      \"total_clicks\": 131,\n      \"log_stats\": true,\n      \"expires_at\": \"2026-12-31 23:59:59\",\n      \"has_password\": true,\n      \"qr_enabled\": true,\n      \"qr_svg_download_url\": \"https:\/\/shorturl.fm\/short-urls\/42\/qr\/svg\",\n      \"qr_png_download_url\": \"https:\/\/shorturl.fm\/short-urls\/42\/qr\/png\",\n      \"qr_webp_download_url\": \"https:\/\/shorturl.fm\/short-urls\/42\/qr\/webp\",\n      \"created_at\": \"2026-03-01 09:30:00\",\n      \"updated_at\": \"2026-03-06 11:45:00\",\n      \"stats_url\": \"https:\/\/shorturl.fm\/Docs-42+\"\n    },\n    {\n      \"id\": 41,\n      \"short_url\": \"https:\/\/go.shorturl.fm\/Sale-25\",\n      \"long_url\": \"https:\/\/example.com\/spring-sale\",\n      \"domain\": \"go.shorturl.fm\",\n      \"short_code\": \"Sale-25\",\n      \"total_clicks\": 54,\n      \"log_stats\": true,\n      \"expires_at\": null,\n      \"has_password\": false,\n      \"qr_enabled\": false,\n      \"qr_svg_download_url\": null,\n      \"qr_png_download_url\": null,\n      \"qr_webp_download_url\": null,\n      \"created_at\": \"2026-02-25 14:10:00\",\n      \"updated_at\": \"2026-03-02 08:00:00\",\n      \"stats_url\": \"https:\/\/go.shorturl.fm\/Sale-25+\"\n    }\n  ],\n  \"error\": null,\n  \"meta\": {\n    \"trace_id\": \"f23696de-c811-41fd-b465-cf53539f7f4b\",\n    \"timestamp\": \"2026-03-06T12:05:00+00:00\",\n    \"pagination\": {\n      \"current_page\": 1,\n      \"last_page\": 3,\n      \"per_page\": 20,\n      \"total\": 42\n    }\n  }\n}\n",
                            "name": ""
                        },
                        {
                            "header": [],
                            "code": 401,
                            "body": "{\n  \"success\": false,\n  \"data\": null,\n  \"error\": {\n    \"message\": \"Unauthenticated.\",\n    \"details\": {}\n  },\n  \"meta\": {\n    \"trace_id\": \"9f106f90-d1fc-4f85-a5dc-a2245d756590\",\n    \"timestamp\": \"2026-03-08T12:30:00+00:00\"\n  }\n}\n\n",
                            "name": ""
                        },
                        {
                            "header": [],
                            "code": 403,
                            "body": "{\n  \"success\": false,\n  \"data\": null,\n  \"error\": {\n    \"message\": \"Please verify your email address before continuing.\",\n    \"details\": {\n      \"status\": \"email-verification-required\",\n      \"verify_email_url\": \"\/app\/verify-email\"\n    }\n  },\n  \"meta\": {\n    \"trace_id\": \"f0e14d9f-d652-4b3b-857c-0f5f0a9ce0f3\",\n    \"timestamp\": \"2026-03-24T12:00:00+00:00\"\n  }\n}\n",
                            "name": ""
                        },
                        {
                            "header": [
                                {
                                    "key": "Retry-After",
                                    "value": "3600"
                                },
                                {
                                    "key": "X-RateLimit-Reset",
                                    "value": "1772985600"
                                }
                            ],
                            "code": 429,
                            "body": "{\n  \"success\": false,\n  \"data\": null,\n  \"error\": {\n    \"message\": \"Too Many Attempts.\",\n    \"details\": {\n      \"retry_after_seconds\": 3600,\n      \"rate_limit_reset_at_unix\": 1772985600\n    }\n  },\n  \"meta\": {\n    \"trace_id\": \"2bb87fd5-4128-48dc-88ca-f3a62e2be9a7\",\n    \"timestamp\": \"2026-03-08T12:31:00+00:00\"\n  }\n}\n",
                            "name": ""
                        }
                    ]
                },
                {
                    "name": "Get a short URL.",
                    "request": {
                        "url": {
                            "host": "{{baseUrl}}",
                            "path": "api\/v1\/short-urls\/:id",
                            "query": [],
                            "raw": "{{baseUrl}}\/api\/v1\/short-urls\/:id",
                            "variable": [
                                {
                                    "id": "id",
                                    "key": "id",
                                    "value": "42",
                                    "description": "The short URL ID."
                                }
                            ]
                        },
                        "method": "GET",
                        "header": [
                            {
                                "key": "Content-Type",
                                "value": "application\/json"
                            },
                            {
                                "key": "Accept",
                                "value": "application\/json"
                            }
                        ],
                        "body": null,
                        "description": "Returns one short URL owned by the authenticated user.\nRate limit: `200\/hour`, `4,800\/day`, `30,000\/month`."
                    },
                    "response": [
                        {
                            "header": [],
                            "code": 200,
                            "body": "{\n  \"success\": true,\n  \"data\": {\n    \"id\": 42,\n    \"short_url\": \"https:\/\/shorturl.fm\/Docs-42\",\n    \"long_url\": \"https:\/\/example.com\/very\/long\/path\",\n    \"domain\": \"shorturl.fm\",\n    \"short_code\": \"Docs-42\",\n    \"total_clicks\": 131,\n    \"log_stats\": true,\n    \"expires_at\": \"2026-12-31 23:59:59\",\n    \"has_password\": true,\n    \"qr_enabled\": true,\n    \"qr_svg_download_url\": \"https:\/\/shorturl.fm\/short-urls\/42\/qr\/svg\",\n    \"qr_png_download_url\": \"https:\/\/shorturl.fm\/short-urls\/42\/qr\/png\",\n    \"qr_webp_download_url\": \"https:\/\/shorturl.fm\/short-urls\/42\/qr\/webp\",\n    \"created_at\": \"2026-03-01 09:30:00\",\n    \"updated_at\": \"2026-03-06 11:45:00\",\n    \"stats_url\": \"https:\/\/shorturl.fm\/Docs-42+\"\n  },\n  \"error\": null,\n  \"meta\": {\n    \"trace_id\": \"2bdb40b1-49fd-4abf-8b7b-26db74bc2825\",\n    \"timestamp\": \"2026-03-06T12:04:00+00:00\"\n  }\n}\n",
                            "name": ""
                        },
                        {
                            "header": [],
                            "code": 401,
                            "body": "{\n  \"success\": false,\n  \"data\": null,\n  \"error\": {\n    \"message\": \"Unauthenticated.\",\n    \"details\": {}\n  },\n  \"meta\": {\n    \"trace_id\": \"9f106f90-d1fc-4f85-a5dc-a2245d756590\",\n    \"timestamp\": \"2026-03-08T12:30:00+00:00\"\n  }\n}\n\n",
                            "name": ""
                        },
                        {
                            "header": [],
                            "code": 403,
                            "body": "{\n  \"success\": false,\n  \"data\": null,\n  \"error\": {\n    \"message\": \"Please verify your email address before continuing.\",\n    \"details\": {\n      \"status\": \"email-verification-required\",\n      \"verify_email_url\": \"\/app\/verify-email\"\n    }\n  },\n  \"meta\": {\n    \"trace_id\": \"f0e14d9f-d652-4b3b-857c-0f5f0a9ce0f3\",\n    \"timestamp\": \"2026-03-24T12:00:00+00:00\"\n  }\n}\n",
                            "name": ""
                        },
                        {
                            "header": [],
                            "code": 404,
                            "body": "{\n  \"success\": false,\n  \"data\": null,\n  \"error\": {\n    \"message\": \"Short URL not found.\",\n    \"details\": {}\n  },\n  \"meta\": {\n    \"trace_id\": \"7b1d2f2b-d8fb-42f5-8a2d-1cdac1c4f7dd\",\n    \"timestamp\": \"2026-03-06T12:01:00+00:00\"\n  }\n}\n",
                            "name": ""
                        },
                        {
                            "header": [
                                {
                                    "key": "Retry-After",
                                    "value": "3600"
                                },
                                {
                                    "key": "X-RateLimit-Reset",
                                    "value": "1772985600"
                                }
                            ],
                            "code": 429,
                            "body": "{\n  \"success\": false,\n  \"data\": null,\n  \"error\": {\n    \"message\": \"Too Many Attempts.\",\n    \"details\": {\n      \"retry_after_seconds\": 3600,\n      \"rate_limit_reset_at_unix\": 1772985600\n    }\n  },\n  \"meta\": {\n    \"trace_id\": \"2bb87fd5-4128-48dc-88ca-f3a62e2be9a7\",\n    \"timestamp\": \"2026-03-08T12:31:00+00:00\"\n  }\n}\n",
                            "name": ""
                        }
                    ]
                },
                {
                    "name": "Update a short URL.",
                    "request": {
                        "url": {
                            "host": "{{baseUrl}}",
                            "path": "api\/v1\/short-urls\/:id",
                            "query": [],
                            "raw": "{{baseUrl}}\/api\/v1\/short-urls\/:id",
                            "variable": [
                                {
                                    "id": "id",
                                    "key": "id",
                                    "value": "42",
                                    "description": "The short URL ID."
                                }
                            ]
                        },
                        "method": "PATCH",
                        "header": [
                            {
                                "key": "Content-Type",
                                "value": "application\/json"
                            },
                            {
                                "key": "Accept",
                                "value": "application\/json"
                            }
                        ],
                        "body": {
                            "mode": "raw",
                            "raw": "{\"url\":\"https:\\\/\\\/example.com\\\/updated-destination\",\"log_stats\":true,\"expires_at\":\"2026-12-31 23:59:59\",\"qr_enabled\":true,\"link_password\":\"secret-passphrase\"}"
                        },
                        "description": "Updates mutable properties of a short URL owned by the authenticated user.\nRate limit: `100\/hour`, `2,400\/day`, `10,000\/month`."
                    },
                    "response": [
                        {
                            "header": [],
                            "code": 200,
                            "body": "{\n  \"success\": true,\n  \"data\": {\n    \"id\": 42,\n    \"short_url\": \"https:\/\/shorturl.fm\/Docs-42\",\n    \"long_url\": \"https:\/\/example.com\/very\/long\/path\",\n    \"domain\": \"shorturl.fm\",\n    \"short_code\": \"Docs-42\",\n    \"total_clicks\": 131,\n    \"log_stats\": true,\n    \"expires_at\": \"2026-12-31 23:59:59\",\n    \"has_password\": true,\n    \"qr_enabled\": true,\n    \"qr_svg_download_url\": \"https:\/\/shorturl.fm\/short-urls\/42\/qr\/svg\",\n    \"qr_png_download_url\": \"https:\/\/shorturl.fm\/short-urls\/42\/qr\/png\",\n    \"qr_webp_download_url\": \"https:\/\/shorturl.fm\/short-urls\/42\/qr\/webp\",\n    \"created_at\": \"2026-03-01 09:30:00\",\n    \"updated_at\": \"2026-03-06 11:45:00\",\n    \"stats_url\": \"https:\/\/shorturl.fm\/Docs-42+\"\n  },\n  \"error\": null,\n  \"meta\": {\n    \"trace_id\": \"2bdb40b1-49fd-4abf-8b7b-26db74bc2825\",\n    \"timestamp\": \"2026-03-06T12:04:00+00:00\"\n  }\n}\n",
                            "name": ""
                        },
                        {
                            "header": [],
                            "code": 401,
                            "body": "{\n  \"success\": false,\n  \"data\": null,\n  \"error\": {\n    \"message\": \"Unauthenticated.\",\n    \"details\": {}\n  },\n  \"meta\": {\n    \"trace_id\": \"9f106f90-d1fc-4f85-a5dc-a2245d756590\",\n    \"timestamp\": \"2026-03-08T12:30:00+00:00\"\n  }\n}\n\n",
                            "name": ""
                        },
                        {
                            "header": [],
                            "code": 403,
                            "body": "{\n  \"success\": false,\n  \"data\": null,\n  \"error\": {\n    \"message\": \"Please verify your email address before continuing.\",\n    \"details\": {\n      \"status\": \"email-verification-required\",\n      \"verify_email_url\": \"\/app\/verify-email\"\n    }\n  },\n  \"meta\": {\n    \"trace_id\": \"f0e14d9f-d652-4b3b-857c-0f5f0a9ce0f3\",\n    \"timestamp\": \"2026-03-24T12:00:00+00:00\"\n  }\n}\n",
                            "name": ""
                        },
                        {
                            "header": [],
                            "code": 404,
                            "body": "{\n  \"success\": false,\n  \"data\": null,\n  \"error\": {\n    \"message\": \"Short URL not found.\",\n    \"details\": {}\n  },\n  \"meta\": {\n    \"trace_id\": \"7b1d2f2b-d8fb-42f5-8a2d-1cdac1c4f7dd\",\n    \"timestamp\": \"2026-03-06T12:01:00+00:00\"\n  }\n}\n",
                            "name": ""
                        },
                        {
                            "header": [],
                            "code": 422,
                            "body": "{\n  \"success\": false,\n  \"data\": null,\n  \"error\": {\n    \"message\": \"The given data was invalid.\",\n    \"details\": {\n      \"validation\": {\n        \"expires_at\": [\n          \"The expires at field must be a date after now.\"\n        ]\n      }\n    }\n  },\n  \"meta\": {\n    \"trace_id\": \"5d431ca1-5a30-4338-a799-78a141a3d2f8\",\n    \"timestamp\": \"2026-03-06T12:08:00+00:00\"\n  }\n}\n",
                            "name": ""
                        },
                        {
                            "header": [
                                {
                                    "key": "Retry-After",
                                    "value": "3600"
                                },
                                {
                                    "key": "X-RateLimit-Reset",
                                    "value": "1772985600"
                                }
                            ],
                            "code": 429,
                            "body": "{\n  \"success\": false,\n  \"data\": null,\n  \"error\": {\n    \"message\": \"Too Many Attempts.\",\n    \"details\": {\n      \"retry_after_seconds\": 3600,\n      \"rate_limit_reset_at_unix\": 1772985600\n    }\n  },\n  \"meta\": {\n    \"trace_id\": \"2bb87fd5-4128-48dc-88ca-f3a62e2be9a7\",\n    \"timestamp\": \"2026-03-08T12:31:00+00:00\"\n  }\n}\n",
                            "name": ""
                        }
                    ]
                },
                {
                    "name": "Get short URL analytics.",
                    "request": {
                        "url": {
                            "host": "{{baseUrl}}",
                            "path": "api\/v1\/short-urls\/:id\/stats",
                            "query": [
                                {
                                    "key": "period",
                                    "value": "last_30_days",
                                    "description": "Analytics preset. Supported values: `last_hour`, `last_4_hours`, `last_12_hours`, `last_24_hours`, `last_48_hours`, `last_3_days`, `last_7_days`, `last_30_days`, `last_60_days`, `last_90_days`, `last_180_days`, `last_year`, `custom`.",
                                    "disabled": false
                                },
                                {
                                    "key": "start_time",
                                    "value": "",
                                    "description": "Required when `period=custom`. Example value: `2026-02-01 00:00:00`.",
                                    "disabled": true
                                },
                                {
                                    "key": "end_time",
                                    "value": "",
                                    "description": "Required when `period=custom`. Example value: `2026-02-28 23:59:59`.",
                                    "disabled": true
                                }
                            ],
                            "raw": "{{baseUrl}}\/api\/v1\/short-urls\/:id\/stats?period=last_30_days&start_time=&end_time=",
                            "variable": [
                                {
                                    "id": "id",
                                    "key": "id",
                                    "value": "42",
                                    "description": "The short URL ID."
                                }
                            ]
                        },
                        "method": "GET",
                        "header": [
                            {
                                "key": "Content-Type",
                                "value": "application\/json"
                            },
                            {
                                "key": "Accept",
                                "value": "application\/json"
                            }
                        ],
                        "body": null,
                        "description": "Returns analytics for an owned short URL, including total clicks, recent click detail, country breakdown, and daily series.\nRate limit: `100\/hour`, `2,400\/day`, `10,000\/month`."
                    },
                    "response": [
                        {
                            "header": [],
                            "code": 200,
                            "body": "{\n  \"success\": true,\n  \"data\": {\n    \"short_url\": {\n      \"id\": 42,\n      \"short_url\": \"https:\/\/shorturl.fm\/Docs-42\",\n      \"long_url\": \"https:\/\/example.com\/very\/long\/path\",\n      \"domain\": \"shorturl.fm\",\n      \"short_code\": \"Docs-42\",\n      \"log_stats\": true,\n      \"expires_at\": \"2026-12-31 23:59:59\",\n      \"has_password\": true,\n      \"qr_enabled\": true,\n      \"qr_svg_download_url\": \"https:\/\/shorturl.fm\/short-urls\/42\/qr\/svg\",\n      \"qr_png_download_url\": \"https:\/\/shorturl.fm\/short-urls\/42\/qr\/png\",\n      \"qr_webp_download_url\": \"https:\/\/shorturl.fm\/short-urls\/42\/qr\/webp\",\n      \"created_at\": \"2026-03-01 09:30:00\",\n      \"updated_at\": \"2026-03-06 11:45:00\",\n      \"stats_url\": \"https:\/\/shorturl.fm\/Docs-42+\"\n    },\n    \"period\": {\n      \"key\": \"last_30_days\",\n      \"from\": \"2026-02-05T12:00:00+00:00\",\n      \"to\": \"2026-03-06T12:00:00+00:00\"\n    },\n    \"total_clicks\": 131,\n    \"country_breakdown\": [\n      {\n        \"country_name\": \"United States\",\n        \"clicks\": 84\n      },\n      {\n        \"country_name\": \"Germany\",\n        \"clicks\": 19\n      }\n    ],\n    \"daily_series\": [\n      {\n        \"date\": \"2026-03-04\",\n        \"clicks\": 9\n      },\n      {\n        \"date\": \"2026-03-05\",\n        \"clicks\": 11\n      },\n      {\n        \"date\": \"2026-03-06\",\n        \"clicks\": 7\n      }\n    ],\n    \"click_detail\": [\n      {\n        \"id\": 901,\n        \"short_url_id\": 42,\n        \"request_uri\": \"https:\/\/shorturl.fm\/Docs-42\",\n        \"country_code\": \"US\",\n        \"country_name\": \"United States\",\n        \"user_agent\": \"Mozilla\/5.0\",\n        \"browser\": \"Chrome\",\n        \"crawler_name\": null,\n        \"os\": \"macOS\",\n        \"device_type\": \"desktop\",\n        \"referrer\": \"https:\/\/example.com\/newsletter\",\n        \"is_bot\": false,\n        \"clicked_at\": \"2026-03-06T11:50:00.000000Z\"\n      },\n      {\n        \"id\": 900,\n        \"short_url_id\": 42,\n        \"request_uri\": \"https:\/\/shorturl.fm\/Docs-42\",\n        \"country_code\": \"DE\",\n        \"country_name\": \"Germany\",\n        \"user_agent\": \"Mozilla\/5.0\",\n        \"browser\": \"Firefox\",\n        \"crawler_name\": null,\n        \"os\": \"Linux\",\n        \"device_type\": \"desktop\",\n        \"referrer\": null,\n        \"is_bot\": false,\n        \"clicked_at\": \"2026-03-06T09:12:00.000000Z\"\n      }\n    ]\n  },\n  \"error\": null,\n  \"meta\": {\n    \"trace_id\": \"4cb5ce2c-664f-4ec9-8f58-df1834b9d1f5\",\n    \"timestamp\": \"2026-03-06T12:10:00+00:00\"\n  }\n}\n",
                            "name": ""
                        },
                        {
                            "header": [],
                            "code": 401,
                            "body": "{\n  \"success\": false,\n  \"data\": null,\n  \"error\": {\n    \"message\": \"Unauthenticated.\",\n    \"details\": {}\n  },\n  \"meta\": {\n    \"trace_id\": \"9f106f90-d1fc-4f85-a5dc-a2245d756590\",\n    \"timestamp\": \"2026-03-08T12:30:00+00:00\"\n  }\n}\n\n",
                            "name": ""
                        },
                        {
                            "header": [],
                            "code": 403,
                            "body": "{\n  \"success\": false,\n  \"data\": null,\n  \"error\": {\n    \"message\": \"Please verify your email address before continuing.\",\n    \"details\": {\n      \"status\": \"email-verification-required\",\n      \"verify_email_url\": \"\/app\/verify-email\"\n    }\n  },\n  \"meta\": {\n    \"trace_id\": \"f0e14d9f-d652-4b3b-857c-0f5f0a9ce0f3\",\n    \"timestamp\": \"2026-03-24T12:00:00+00:00\"\n  }\n}\n",
                            "name": ""
                        },
                        {
                            "header": [],
                            "code": 404,
                            "body": "{\n  \"success\": false,\n  \"data\": null,\n  \"error\": {\n    \"message\": \"Short URL not found.\",\n    \"details\": {}\n  },\n  \"meta\": {\n    \"trace_id\": \"7b1d2f2b-d8fb-42f5-8a2d-1cdac1c4f7dd\",\n    \"timestamp\": \"2026-03-06T12:01:00+00:00\"\n  }\n}\n",
                            "name": ""
                        },
                        {
                            "header": [],
                            "code": 422,
                            "body": "{\n  \"success\": false,\n  \"data\": null,\n  \"error\": {\n    \"message\": \"Analytics collection was not enabled for this short URL.\",\n    \"details\": {}\n  },\n  \"meta\": {\n    \"trace_id\": \"346dcebd-1036-4624-a501-930249bcaedc\",\n    \"timestamp\": \"2026-03-06T12:11:00+00:00\"\n  }\n}\n",
                            "name": ""
                        },
                        {
                            "header": [
                                {
                                    "key": "Retry-After",
                                    "value": "3600"
                                },
                                {
                                    "key": "X-RateLimit-Reset",
                                    "value": "1772985600"
                                }
                            ],
                            "code": 429,
                            "body": "{\n  \"success\": false,\n  \"data\": null,\n  \"error\": {\n    \"message\": \"Too Many Attempts.\",\n    \"details\": {\n      \"retry_after_seconds\": 3600,\n      \"rate_limit_reset_at_unix\": 1772985600\n    }\n  },\n  \"meta\": {\n    \"trace_id\": \"2bb87fd5-4128-48dc-88ca-f3a62e2be9a7\",\n    \"timestamp\": \"2026-03-08T12:31:00+00:00\"\n  }\n}\n",
                            "name": ""
                        }
                    ]
                }
            ]
        },
        {
            "name": "Tokens",
            "description": "\nManage Sanctum personal access tokens for API clients.",
            "item": [
                {
                    "name": "Rotate current token.",
                    "request": {
                        "url": {
                            "host": "{{baseUrl}}",
                            "path": "api\/v1\/tokens\/rotate",
                            "query": [],
                            "raw": "{{baseUrl}}\/api\/v1\/tokens\/rotate"
                        },
                        "method": "POST",
                        "header": [
                            {
                                "key": "Content-Type",
                                "value": "application\/json"
                            },
                            {
                                "key": "Accept",
                                "value": "application\/json"
                            }
                        ],
                        "body": {
                            "mode": "raw",
                            "raw": "{\"name\":\"deployment-script-rotated\"}"
                        },
                        "description": "Creates a new personal access token and revokes the currently authenticated token in the same operation.\nThe plain-text token is only returned once.\nRate limit: `10\/hour`, `50\/day`, `500\/month`."
                    },
                    "response": [
                        {
                            "header": [],
                            "code": 201,
                            "body": "{\n  \"success\": true,\n  \"data\": {\n    \"token\": \"18|vJKDo4jNnRkRpwFdcN5a2qM5b6e0VxYp3XGf9Q2c\",\n    \"name\": \"deployment-script-rotated\",\n    \"token_id\": 18,\n    \"revoked_token_id\": 17\n  },\n  \"error\": null,\n  \"meta\": {\n    \"trace_id\": \"3508206b-e84a-4323-8dd4-42decb202804\",\n    \"timestamp\": \"2026-03-09T12:12:00+00:00\"\n  }\n}\n",
                            "name": ""
                        },
                        {
                            "header": [],
                            "code": 401,
                            "body": "{\n  \"success\": false,\n  \"data\": null,\n  \"error\": {\n    \"message\": \"Unauthenticated.\",\n    \"details\": {}\n  },\n  \"meta\": {\n    \"trace_id\": \"9f106f90-d1fc-4f85-a5dc-a2245d756590\",\n    \"timestamp\": \"2026-03-08T12:30:00+00:00\"\n  }\n}\n\n",
                            "name": ""
                        },
                        {
                            "header": [],
                            "code": 403,
                            "body": "{\n  \"success\": false,\n  \"data\": null,\n  \"error\": {\n    \"message\": \"Please verify your email address before continuing.\",\n    \"details\": {\n      \"status\": \"email-verification-required\",\n      \"verify_email_url\": \"\/app\/verify-email\"\n    }\n  },\n  \"meta\": {\n    \"trace_id\": \"f0e14d9f-d652-4b3b-857c-0f5f0a9ce0f3\",\n    \"timestamp\": \"2026-03-24T12:00:00+00:00\"\n  }\n}\n",
                            "name": ""
                        },
                        {
                            "header": [],
                            "code": 422,
                            "body": "{\n  \"success\": false,\n  \"data\": null,\n  \"error\": {\n    \"message\": \"Token rotation requires bearer token authentication.\",\n    \"details\": {\n      \"validation\": {\n        \"token\": [\n          \"Token rotation requires bearer token authentication.\"\n        ]\n      }\n    }\n  },\n  \"meta\": {\n    \"trace_id\": \"df62a7a0-a252-4c46-8e6d-3f7efb395dcb\",\n    \"timestamp\": \"2026-03-09T12:13:00+00:00\"\n  }\n}\n",
                            "name": ""
                        },
                        {
                            "header": [
                                {
                                    "key": "Retry-After",
                                    "value": "3600"
                                },
                                {
                                    "key": "X-RateLimit-Reset",
                                    "value": "1772985600"
                                }
                            ],
                            "code": 429,
                            "body": "{\n  \"success\": false,\n  \"data\": null,\n  \"error\": {\n    \"message\": \"Too Many Attempts.\",\n    \"details\": {\n      \"retry_after_seconds\": 3600,\n      \"rate_limit_reset_at_unix\": 1772985600\n    }\n  },\n  \"meta\": {\n    \"trace_id\": \"2bb87fd5-4128-48dc-88ca-f3a62e2be9a7\",\n    \"timestamp\": \"2026-03-08T12:31:00+00:00\"\n  }\n}\n",
                            "name": ""
                        }
                    ]
                },
                {
                    "name": "Delete a token.",
                    "request": {
                        "url": {
                            "host": "{{baseUrl}}",
                            "path": "api\/v1\/tokens\/:id",
                            "query": [],
                            "raw": "{{baseUrl}}\/api\/v1\/tokens\/:id",
                            "variable": [
                                {
                                    "id": "id",
                                    "key": "id",
                                    "value": "17",
                                    "description": "The token ID returned when the token was created."
                                }
                            ]
                        },
                        "method": "DELETE",
                        "header": [
                            {
                                "key": "Content-Type",
                                "value": "application\/json"
                            },
                            {
                                "key": "Accept",
                                "value": "application\/json"
                            }
                        ],
                        "body": null,
                        "description": "Revokes a token owned by the authenticated user.\nRate limit: `10\/hour`, `50\/day`, `500\/month`."
                    },
                    "response": [
                        {
                            "header": [],
                            "code": 200,
                            "body": "{\n  \"success\": true,\n  \"data\": {\n    \"success\": 1\n  },\n  \"error\": null,\n  \"meta\": {\n    \"trace_id\": \"104f3d16-0c61-4307-a671-1838828be126\",\n    \"timestamp\": \"2026-03-06T12:00:00+00:00\"\n  }\n}\n",
                            "name": ""
                        },
                        {
                            "header": [],
                            "code": 401,
                            "body": "{\n  \"success\": false,\n  \"data\": null,\n  \"error\": {\n    \"message\": \"Unauthenticated.\",\n    \"details\": {}\n  },\n  \"meta\": {\n    \"trace_id\": \"9f106f90-d1fc-4f85-a5dc-a2245d756590\",\n    \"timestamp\": \"2026-03-08T12:30:00+00:00\"\n  }\n}\n\n",
                            "name": ""
                        },
                        {
                            "header": [],
                            "code": 403,
                            "body": "{\n  \"success\": false,\n  \"data\": null,\n  \"error\": {\n    \"message\": \"Please verify your email address before continuing.\",\n    \"details\": {\n      \"status\": \"email-verification-required\",\n      \"verify_email_url\": \"\/app\/verify-email\"\n    }\n  },\n  \"meta\": {\n    \"trace_id\": \"f0e14d9f-d652-4b3b-857c-0f5f0a9ce0f3\",\n    \"timestamp\": \"2026-03-24T12:00:00+00:00\"\n  }\n}\n",
                            "name": ""
                        },
                        {
                            "header": [],
                            "code": 404,
                            "body": "{\n  \"success\": false,\n  \"data\": null,\n  \"error\": {\n    \"message\": \"Token not found.\",\n    \"details\": {}\n  },\n  \"meta\": {\n    \"trace_id\": \"8e24b740-2546-4db8-9d1d-614f03058d9d\",\n    \"timestamp\": \"2026-03-06T12:02:00+00:00\"\n  }\n}\n",
                            "name": ""
                        },
                        {
                            "header": [
                                {
                                    "key": "Retry-After",
                                    "value": "3600"
                                },
                                {
                                    "key": "X-RateLimit-Reset",
                                    "value": "1772985600"
                                }
                            ],
                            "code": 429,
                            "body": "{\n  \"success\": false,\n  \"data\": null,\n  \"error\": {\n    \"message\": \"Too Many Attempts.\",\n    \"details\": {\n      \"retry_after_seconds\": 3600,\n      \"rate_limit_reset_at_unix\": 1772985600\n    }\n  },\n  \"meta\": {\n    \"trace_id\": \"2bb87fd5-4128-48dc-88ca-f3a62e2be9a7\",\n    \"timestamp\": \"2026-03-08T12:31:00+00:00\"\n  }\n}\n",
                            "name": ""
                        }
                    ]
                }
            ]
        },
        {
            "name": "Utilities",
            "description": "\nResolve existing short URLs.",
            "item": [
                {
                    "name": "Unshorten a URL.",
                    "request": {
                        "url": {
                            "host": "{{baseUrl}}",
                            "path": "api\/v1\/unshorten",
                            "query": [],
                            "raw": "{{baseUrl}}\/api\/v1\/unshorten"
                        },
                        "method": "POST",
                        "header": [
                            {
                                "key": "Content-Type",
                                "value": "application\/json"
                            },
                            {
                                "key": "Accept",
                                "value": "application\/json"
                            }
                        ],
                        "body": {
                            "mode": "raw",
                            "raw": "{\"url\":\"https:\\\/\\\/shorturl.fm\\\/AbCdE-1\"}"
                        },
                        "description": "Resolves a known short URL back to its original destination URL.\nRate limit: `100\/hour`, `2,400\/day`, `10,000\/month`."
                    },
                    "response": [
                        {
                            "header": [],
                            "code": 200,
                            "body": "{\n  \"success\": true,\n  \"data\": {\n    \"url\": \"https:\/\/example.com\/original-destination\"\n  },\n  \"error\": null,\n  \"meta\": {\n    \"trace_id\": \"8df84d5d-5d9d-4f83-976d-8b4f4b64f2ce\",\n    \"timestamp\": \"2026-03-06T12:14:00+00:00\"\n  }\n}\n",
                            "name": ""
                        },
                        {
                            "header": [],
                            "code": 401,
                            "body": "{\n  \"success\": false,\n  \"data\": null,\n  \"error\": {\n    \"message\": \"Unauthenticated.\",\n    \"details\": {}\n  },\n  \"meta\": {\n    \"trace_id\": \"9f106f90-d1fc-4f85-a5dc-a2245d756590\",\n    \"timestamp\": \"2026-03-08T12:30:00+00:00\"\n  }\n}\n\n",
                            "name": ""
                        },
                        {
                            "header": [],
                            "code": 403,
                            "body": "{\n  \"success\": false,\n  \"data\": null,\n  \"error\": {\n    \"message\": \"Please verify your email address before continuing.\",\n    \"details\": {\n      \"status\": \"email-verification-required\",\n      \"verify_email_url\": \"\/app\/verify-email\"\n    }\n  },\n  \"meta\": {\n    \"trace_id\": \"f0e14d9f-d652-4b3b-857c-0f5f0a9ce0f3\",\n    \"timestamp\": \"2026-03-24T12:00:00+00:00\"\n  }\n}\n",
                            "name": ""
                        },
                        {
                            "header": [],
                            "code": 404,
                            "body": "{\n  \"success\": false,\n  \"data\": null,\n  \"error\": {\n    \"message\": \"Short URL was not found or blocked.\",\n    \"details\": {}\n  },\n  \"meta\": {\n    \"trace_id\": \"5fe6a969-b3b3-4f75-be63-a4fe403ab932\",\n    \"timestamp\": \"2026-03-06T12:16:00+00:00\"\n  }\n}\n",
                            "name": ""
                        },
                        {
                            "header": [],
                            "code": 422,
                            "body": "{\n  \"success\": false,\n  \"data\": null,\n  \"error\": {\n    \"message\": \"The given data was invalid.\",\n    \"details\": {\n      \"validation\": {\n        \"url\": [\n          \"The url field format is invalid.\"\n        ]\n      }\n    }\n  },\n  \"meta\": {\n    \"trace_id\": \"8505ac29-db5d-4534-a729-7fd71b34ccbf\",\n    \"timestamp\": \"2026-03-06T12:15:00+00:00\"\n  }\n}\n",
                            "name": ""
                        },
                        {
                            "header": [
                                {
                                    "key": "Retry-After",
                                    "value": "3600"
                                },
                                {
                                    "key": "X-RateLimit-Reset",
                                    "value": "1772985600"
                                }
                            ],
                            "code": 429,
                            "body": "{\n  \"success\": false,\n  \"data\": null,\n  \"error\": {\n    \"message\": \"Too Many Attempts.\",\n    \"details\": {\n      \"retry_after_seconds\": 3600,\n      \"rate_limit_reset_at_unix\": 1772985600\n    }\n  },\n  \"meta\": {\n    \"trace_id\": \"2bb87fd5-4128-48dc-88ca-f3a62e2be9a7\",\n    \"timestamp\": \"2026-03-08T12:31:00+00:00\"\n  }\n}\n",
                            "name": ""
                        }
                    ]
                }
            ]
        },
        {
            "name": "Endpoints",
            "description": "",
            "item": [
                {
                    "name": "POST api\/v1\/internal\/block-short-urls",
                    "request": {
                        "url": {
                            "host": "{{baseUrl}}",
                            "path": "api\/v1\/internal\/block-short-urls",
                            "query": [],
                            "raw": "{{baseUrl}}\/api\/v1\/internal\/block-short-urls"
                        },
                        "method": "POST",
                        "header": [
                            {
                                "key": "Content-Type",
                                "value": "application\/json"
                            },
                            {
                                "key": "Accept",
                                "value": "application\/json"
                            }
                        ],
                        "body": null,
                        "description": ""
                    },
                    "response": []
                }
            ]
        }
    ],
    "auth": {
        "type": "bearer",
        "bearer": [
            {
                "key": "Authorization",
                "type": "string"
            }
        ]
    }
}