{
    "openapi": "3.1.0",
    "info": {
        "title": "Shlink",
        "description": "Shlink, the self-hosted URL shortener",
        "version": "3.0"
    },

    "externalDocs": {
        "url": "https://shlink.io/documentation/api-docs",
        "description": "Find more info on how to start using this API here"
    },

    "servers": [
        {
            "url": "{scheme}://{host}",
            "variables": {
                "scheme": {
                    "default": "https",
                    "enum": ["https", "http"]
                },
                "host": {
                    "default": ""
                }
            }
        }
    ],

    "components": {
        "securitySchemes": {
            "ApiKey": {
                "description": "A valid shlink API key",
                "type": "apiKey",
                "in": "header",
                "name": "X-Api-Key"
            }
        }
    },

    "tags": [
        {
            "name": "Short URLs",
            "description": "Operations that can be performed on short URLs"
        },
        {
            "name": "Redirect rules",
            "description": "Handle dynamic rule-based redirects"
        },
        {
            "name": "Tags",
            "description": "Let you handle the list of available tags"
        },
        {
            "name": "Visits",
            "description": "Operations to manage visits on short URLs"
        },
        {
            "name": "Domains",
            "description": "Operations to manage domains used on short URLs"
        },
        {
            "name": "Integrations",
            "description": "Handle services with which shlink is integrated"
        },
        {
            "name": "Monitoring",
            "description": "Public endpoints designed to monitor the service"
        },
        {
            "name": "URL Shortener",
            "description": "Non-rest endpoints, used to be publicly exposed"
        }
    ],

    "paths": {
        "/rest/v{version}/short-urls": {
            "$ref": "paths/v1_short-urls.json"
        },
        "/rest/v{version}/short-urls/shorten": {
            "$ref": "paths/v1_short-urls_shorten.json"
        },
        "/rest/v{version}/short-urls/{shortCode}": {
            "$ref": "paths/v1_short-urls_{shortCode}.json"
        },

        "/rest/v{version}/short-urls/{shortCode}/redirect-rules": {
            "$ref": "paths/v3_short-urls_{shortCode}_redirect-rules.json"
        },

        "/rest/v{version}/tags": {
            "$ref": "paths/v1_tags.json"
        },
        "/rest/v{version}/tags/stats": {
            "$ref": "paths/v2_tags_stats.json"
        },

        "/rest/v{version}/visits": {
            "$ref": "paths/v2_visits.json"
        },
        "/rest/v{version}/short-urls/{shortCode}/visits": {
            "$ref": "paths/v1_short-urls_{shortCode}_visits.json"
        },
        "/rest/v{version}/tags/{tag}/visits": {
            "$ref": "paths/v2_tags_{tag}_visits.json"
        },
        "/rest/v{version}/domains/{domain}/visits": {
            "$ref": "paths/v2_domains_{domain}_visits.json"
        },
        "/rest/v{version}/visits/orphan": {
            "$ref": "paths/v2_visits_orphan.json"
        },
        "/rest/v{version}/visits/non-orphan": {
            "$ref": "paths/v2_visits_non-orphan.json"
        },

        "/rest/v{version}/domains": {
            "$ref": "paths/v2_domains.json"
        },
        "/rest/v{version}/domains/redirects": {
            "$ref": "paths/v2_domains_redirects.json"
        },

        "/rest/v{version}/mercure-info": {
            "$ref": "paths/v2_mercure-info.json"
        },

        "/rest/health": {
            "$ref": "paths/health.json"
        },

        "/{shortCode}": {
            "$ref": "paths/{shortCode}.json"
        },
        "/{shortCode}/track": {
            "$ref": "paths/{shortCode}_track.json"
        },
        "/{shortCode}/qr-code": {
            "$ref": "paths/{shortCode}_qr-code.json"
        }
    }
}
