{
    "openapi": "3.0.3",
    "info": {
        "title": "SEO Loop",
        "version": "1.2.0",
        "description": "SEO checks over HTTP. Free, no API key. https://github.com/mehranshahmiri/seoloop",
        "license": {
            "name": "MIT"
        }
    },
    "servers": [
        {
            "url": "https://seoloop.in"
        }
    ],
    "paths": {
        "/v1/audit/{target}": {
            "get": {
                "summary": "Full SEO audit with score and grade",
                "operationId": "audit",
                "parameters": [
                    {
                        "name": "target",
                        "in": "path",
                        "required": true,
                        "schema": {
                            "type": "string"
                        },
                        "description": "Domain or URL, e.g. example.com"
                    },
                    {
                        "name": "field",
                        "in": "query",
                        "schema": {
                            "type": "string"
                        },
                        "description": "Return only this top-level scalar field"
                    },
                    {
                        "name": "min",
                        "in": "query",
                        "schema": {
                            "type": "integer"
                        },
                        "description": "Respond 412 if the score is below this"
                    },
                    {
                        "name": "only",
                        "in": "query",
                        "schema": {
                            "type": "string"
                        },
                        "description": "Comma-separated categories or check ids to include"
                    },
                    {
                        "name": "skip",
                        "in": "query",
                        "schema": {
                            "type": "string"
                        },
                        "description": "Comma-separated categories or check ids to exclude"
                    },
                    {
                        "name": "format",
                        "in": "query",
                        "schema": {
                            "type": "string",
                            "enum": [
                                "text",
                                "csv",
                                "md"
                            ]
                        }
                    }
                ],
                "responses": {
                    "200": {
                        "description": "JSON result"
                    },
                    "422": {
                        "description": "Invalid or blocked target"
                    },
                    "429": {
                        "description": "Rate limited"
                    },
                    "502": {
                        "description": "Target unreachable"
                    }
                }
            }
        },
        "/v1/compare/{target}": {
            "get": {
                "summary": "Audit two sites side by side (use ?vs=other.com)",
                "operationId": "compare",
                "parameters": [
                    {
                        "name": "target",
                        "in": "path",
                        "required": true,
                        "schema": {
                            "type": "string"
                        },
                        "description": "Domain or URL, e.g. example.com"
                    },
                    {
                        "name": "field",
                        "in": "query",
                        "schema": {
                            "type": "string"
                        },
                        "description": "Return only this top-level scalar field"
                    },
                    {
                        "name": "vs",
                        "in": "query",
                        "required": true,
                        "schema": {
                            "type": "string"
                        },
                        "description": "Second domain or URL"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "JSON result"
                    },
                    "422": {
                        "description": "Invalid or blocked target"
                    },
                    "429": {
                        "description": "Rate limited"
                    },
                    "502": {
                        "description": "Target unreachable"
                    }
                }
            }
        },
        "/v1/indexable/{target}": {
            "get": {
                "summary": "Can search engines index this URL? Yes/no with reasons",
                "operationId": "indexable",
                "parameters": [
                    {
                        "name": "target",
                        "in": "path",
                        "required": true,
                        "schema": {
                            "type": "string"
                        },
                        "description": "Domain or URL, e.g. example.com"
                    },
                    {
                        "name": "field",
                        "in": "query",
                        "schema": {
                            "type": "string"
                        },
                        "description": "Return only this top-level scalar field"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "JSON result"
                    },
                    "422": {
                        "description": "Invalid or blocked target"
                    },
                    "429": {
                        "description": "Rate limited"
                    },
                    "502": {
                        "description": "Target unreachable"
                    }
                }
            }
        },
        "/v1/links/{target}": {
            "get": {
                "summary": "Broken-link check for the links on one page",
                "operationId": "links",
                "parameters": [
                    {
                        "name": "target",
                        "in": "path",
                        "required": true,
                        "schema": {
                            "type": "string"
                        },
                        "description": "Domain or URL, e.g. example.com"
                    },
                    {
                        "name": "field",
                        "in": "query",
                        "schema": {
                            "type": "string"
                        },
                        "description": "Return only this top-level scalar field"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "JSON result"
                    },
                    "422": {
                        "description": "Invalid or blocked target"
                    },
                    "429": {
                        "description": "Rate limited"
                    },
                    "502": {
                        "description": "Target unreachable"
                    }
                }
            }
        },
        "/v1/schema/{target}": {
            "get": {
                "summary": "JSON-LD structured data: types found and missing properties",
                "operationId": "schema",
                "parameters": [
                    {
                        "name": "target",
                        "in": "path",
                        "required": true,
                        "schema": {
                            "type": "string"
                        },
                        "description": "Domain or URL, e.g. example.com"
                    },
                    {
                        "name": "field",
                        "in": "query",
                        "schema": {
                            "type": "string"
                        },
                        "description": "Return only this top-level scalar field"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "JSON result"
                    },
                    "422": {
                        "description": "Invalid or blocked target"
                    },
                    "429": {
                        "description": "Rate limited"
                    },
                    "502": {
                        "description": "Target unreachable"
                    }
                }
            }
        },
        "/v1/status/{target}": {
            "get": {
                "summary": "HTTP status code after redirects",
                "operationId": "status",
                "parameters": [
                    {
                        "name": "target",
                        "in": "path",
                        "required": true,
                        "schema": {
                            "type": "string"
                        },
                        "description": "Domain or URL, e.g. example.com"
                    },
                    {
                        "name": "field",
                        "in": "query",
                        "schema": {
                            "type": "string"
                        },
                        "description": "Return only this top-level scalar field"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "JSON result"
                    },
                    "422": {
                        "description": "Invalid or blocked target"
                    },
                    "429": {
                        "description": "Rate limited"
                    },
                    "502": {
                        "description": "Target unreachable"
                    }
                }
            }
        },
        "/v1/title/{target}": {
            "get": {
                "summary": "Page <title>",
                "operationId": "title",
                "parameters": [
                    {
                        "name": "target",
                        "in": "path",
                        "required": true,
                        "schema": {
                            "type": "string"
                        },
                        "description": "Domain or URL, e.g. example.com"
                    },
                    {
                        "name": "field",
                        "in": "query",
                        "schema": {
                            "type": "string"
                        },
                        "description": "Return only this top-level scalar field"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "JSON result"
                    },
                    "422": {
                        "description": "Invalid or blocked target"
                    },
                    "429": {
                        "description": "Rate limited"
                    },
                    "502": {
                        "description": "Target unreachable"
                    }
                }
            }
        },
        "/v1/meta/{target}": {
            "get": {
                "summary": "Title, description, canonical, robots, Open Graph, headings",
                "operationId": "meta",
                "parameters": [
                    {
                        "name": "target",
                        "in": "path",
                        "required": true,
                        "schema": {
                            "type": "string"
                        },
                        "description": "Domain or URL, e.g. example.com"
                    },
                    {
                        "name": "field",
                        "in": "query",
                        "schema": {
                            "type": "string"
                        },
                        "description": "Return only this top-level scalar field"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "JSON result"
                    },
                    "422": {
                        "description": "Invalid or blocked target"
                    },
                    "429": {
                        "description": "Rate limited"
                    },
                    "502": {
                        "description": "Target unreachable"
                    }
                }
            }
        },
        "/v1/headers/{target}": {
            "get": {
                "summary": "Final response headers",
                "operationId": "headers",
                "parameters": [
                    {
                        "name": "target",
                        "in": "path",
                        "required": true,
                        "schema": {
                            "type": "string"
                        },
                        "description": "Domain or URL, e.g. example.com"
                    },
                    {
                        "name": "field",
                        "in": "query",
                        "schema": {
                            "type": "string"
                        },
                        "description": "Return only this top-level scalar field"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "JSON result"
                    },
                    "422": {
                        "description": "Invalid or blocked target"
                    },
                    "429": {
                        "description": "Rate limited"
                    },
                    "502": {
                        "description": "Target unreachable"
                    }
                }
            }
        },
        "/v1/redirects/{target}": {
            "get": {
                "summary": "Redirect chain",
                "operationId": "redirects",
                "parameters": [
                    {
                        "name": "target",
                        "in": "path",
                        "required": true,
                        "schema": {
                            "type": "string"
                        },
                        "description": "Domain or URL, e.g. example.com"
                    },
                    {
                        "name": "field",
                        "in": "query",
                        "schema": {
                            "type": "string"
                        },
                        "description": "Return only this top-level scalar field"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "JSON result"
                    },
                    "422": {
                        "description": "Invalid or blocked target"
                    },
                    "429": {
                        "description": "Rate limited"
                    },
                    "502": {
                        "description": "Target unreachable"
                    }
                }
            }
        },
        "/v1/ttfb/{target}": {
            "get": {
                "summary": "Time to first byte (with DNS/connect/TLS split)",
                "operationId": "ttfb",
                "parameters": [
                    {
                        "name": "target",
                        "in": "path",
                        "required": true,
                        "schema": {
                            "type": "string"
                        },
                        "description": "Domain or URL, e.g. example.com"
                    },
                    {
                        "name": "field",
                        "in": "query",
                        "schema": {
                            "type": "string"
                        },
                        "description": "Return only this top-level scalar field"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "JSON result"
                    },
                    "422": {
                        "description": "Invalid or blocked target"
                    },
                    "429": {
                        "description": "Rate limited"
                    },
                    "502": {
                        "description": "Target unreachable"
                    }
                }
            }
        },
        "/v1/ssl/{target}": {
            "get": {
                "summary": "TLS certificate: issuer, expiry, protocol",
                "operationId": "ssl",
                "parameters": [
                    {
                        "name": "target",
                        "in": "path",
                        "required": true,
                        "schema": {
                            "type": "string"
                        },
                        "description": "Domain or URL, e.g. example.com"
                    },
                    {
                        "name": "field",
                        "in": "query",
                        "schema": {
                            "type": "string"
                        },
                        "description": "Return only this top-level scalar field"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "JSON result"
                    },
                    "422": {
                        "description": "Invalid or blocked target"
                    },
                    "429": {
                        "description": "Rate limited"
                    },
                    "502": {
                        "description": "Target unreachable"
                    }
                }
            }
        },
        "/v1/robots/{target}": {
            "get": {
                "summary": "robots.txt analysis",
                "operationId": "robots",
                "parameters": [
                    {
                        "name": "target",
                        "in": "path",
                        "required": true,
                        "schema": {
                            "type": "string"
                        },
                        "description": "Domain or URL, e.g. example.com"
                    },
                    {
                        "name": "field",
                        "in": "query",
                        "schema": {
                            "type": "string"
                        },
                        "description": "Return only this top-level scalar field"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "JSON result"
                    },
                    "422": {
                        "description": "Invalid or blocked target"
                    },
                    "429": {
                        "description": "Rate limited"
                    },
                    "502": {
                        "description": "Target unreachable"
                    }
                }
            }
        },
        "/v1/sitemap/{target}": {
            "get": {
                "summary": "Sitemap discovery and URL count",
                "operationId": "sitemap",
                "parameters": [
                    {
                        "name": "target",
                        "in": "path",
                        "required": true,
                        "schema": {
                            "type": "string"
                        },
                        "description": "Domain or URL, e.g. example.com"
                    },
                    {
                        "name": "field",
                        "in": "query",
                        "schema": {
                            "type": "string"
                        },
                        "description": "Return only this top-level scalar field"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "JSON result"
                    },
                    "422": {
                        "description": "Invalid or blocked target"
                    },
                    "429": {
                        "description": "Rate limited"
                    },
                    "502": {
                        "description": "Target unreachable"
                    }
                }
            }
        }
    }
}
