{
  "openapi": "3.1.0",
  "info": {
    "title": "Zapi — Dev Tools",
    "description": "Every Dev Tools endpoint on Zapi. Rendered catalog: https://zpi.web.id/category/dev-tools",
    "version": "1.0.0",
    "license": {
      "name": "Zapi Terms of Service",
      "url": "https://zpi.web.id/terms"
    }
  },
  "servers": [
    {
      "url": "https://api.zpi.web.id"
    }
  ],
  "security": [
    {
      "ApiKeyAuth": []
    }
  ],
  "components": {
    "securitySchemes": {
      "ApiKeyAuth": {
        "type": "apiKey",
        "in": "header",
        "name": "x-api-key"
      }
    },
    "schemas": {
      "Envelope": {
        "type": "object",
        "required": [
          "status",
          "message"
        ],
        "properties": {
          "status": {
            "type": "string",
            "enum": [
              "success",
              "error"
            ]
          },
          "message": {
            "type": "string"
          },
          "content": {}
        }
      }
    },
    "responses": {
      "Error": {
        "description": "Invalid key, rate limit, or upstream failure",
        "content": {
          "application/json": {
            "schema": {
              "$ref": "#/components/schemas/Envelope"
            }
          }
        }
      }
    }
  },
  "externalDocs": {
    "url": "https://zpi.web.id/category/dev-tools/llms.txt"
  },
  "paths": {
    "/v1/dev-tools:cf-sitekey/extract": {
      "get": {
        "operationId": "dev_tools_cf_sitekey_extract",
        "summary": "Extract",
        "description": "",
        "tags": [
          "CF Sitekey Extractor"
        ],
        "externalDocs": {
          "url": "https://zpi.web.id/api/dev-tools/cf-sitekey#reference-extract"
        },
        "parameters": [
          {
            "name": "url",
            "in": "query",
            "required": true,
            "description": "URL halaman yang ingin diekstrak Cloudflare Turnstile sitekey-nya",
            "schema": {
              "type": "string",
              "example": "https://minitoolai.com/xiaomi-mimo/"
            }
          },
          {
            "name": "mode",
            "in": "query",
            "required": false,
            "description": "Mode fetch. Default 'auto' (http → workers → flaresolverr → stealth)",
            "schema": {
              "type": "string",
              "enum": [
                "auto",
                "http",
                "workers",
                "flaresolverr",
                "stealth"
              ],
              "default": "auto"
            }
          },
          {
            "name": "followScripts",
            "in": "query",
            "required": false,
            "description": "Ikuti & scan external script bundle. Default true",
            "schema": {
              "type": "boolean",
              "default": true
            }
          },
          {
            "name": "maxScripts",
            "in": "query",
            "required": false,
            "description": "Maksimal script bundle yang di-scan. Default 10",
            "schema": {
              "type": "number",
              "default": 10
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Success",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Envelope"
                },
                "example": {
                  "status": "success",
                  "message": "Success",
                  "content": {
                    "count": 1,
                    "items": [
                      {
                        "via": "http",
                        "source": "inline-js",
                        "siteKey": "0x4AAAAAABjI2cBIeVpBYEFi",
                        "scrapedAt": "2026-05-23T00:10:54.586Z",
                        "sourceUrl": "https://minitoolai.com/xiaomi-mimo/"
                      }
                    ],
                    "sourceUrl": "https://minitoolai.com/xiaomi-mimo/"
                  }
                }
              }
            }
          },
          "4XX": {
            "$ref": "#/components/responses/Error"
          },
          "default": {
            "$ref": "#/components/responses/Error"
          }
        }
      }
    },
    "/v1/dev-tools:dns-lookup/lookup": {
      "get": {
        "operationId": "dev_tools_dns_lookup_lookup",
        "summary": "Lookup",
        "description": "Perform lookup dengan input yang diberikan.",
        "tags": [
          "DNS Lookup"
        ],
        "externalDocs": {
          "url": "https://zpi.web.id/api/dev-tools/dns-lookup#reference-lookup"
        },
        "parameters": [
          {
            "name": "domain",
            "in": "query",
            "required": true,
            "description": "Domain name (akan di-normalize: strip protocol, www, path)",
            "schema": {
              "type": "string",
              "example": "google.com"
            }
          },
          {
            "name": "type",
            "in": "query",
            "required": false,
            "description": "DNS record type. Default: A",
            "schema": {
              "type": "string",
              "enum": [
                "A",
                "AAAA",
                "MX",
                "TXT",
                "NS",
                "CNAME",
                "SOA",
                "CAA"
              ],
              "example": "A"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Success",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Envelope"
                },
                "example": {
                  "status": "success",
                  "message": "Success",
                  "content": {
                    "type": "A",
                    "count": 6,
                    "domain": "google.com",
                    "source": "dns",
                    "status": "NOERROR",
                    "records": [
                      {
                        "ttl": 281,
                        "data": "142.250.4.100",
                        "name": "google.com",
                        "type": "A"
                      },
                      {
                        "ttl": 281,
                        "data": "142.250.4.139",
                        "name": "google.com",
                        "type": "A"
                      },
                      {
                        "ttl": 281,
                        "data": "142.250.4.101",
                        "name": "google.com",
                        "type": "A"
                      },
                      {
                        "ttl": 281,
                        "data": "142.250.4.138",
                        "name": "google.com",
                        "type": "A"
                      },
                      {
                        "ttl": 281,
                        "data": "142.250.4.102",
                        "name": "google.com",
                        "type": "A"
                      },
                      {
                        "ttl": 281,
                        "data": "142.250.4.113",
                        "name": "google.com",
                        "type": "A"
                      }
                    ]
                  }
                }
              }
            }
          },
          "4XX": {
            "$ref": "#/components/responses/Error"
          },
          "default": {
            "$ref": "#/components/responses/Error"
          }
        }
      }
    },
    "/v1/dev-tools:http-headers/inspect": {
      "get": {
        "operationId": "dev_tools_http_headers_inspect",
        "summary": "Inspect Headers",
        "description": "Fetch HTTP response headers and redirect chain.",
        "tags": [
          "HTTP Headers Inspector"
        ],
        "externalDocs": {
          "url": "https://zpi.web.id/api/dev-tools/http-headers#reference-inspect"
        },
        "parameters": [
          {
            "name": "url",
            "in": "query",
            "required": true,
            "description": "URL target (harus full URL termasuk protokol)",
            "schema": {
              "type": "string",
              "example": "https://example.com"
            }
          },
          {
            "name": "method",
            "in": "query",
            "required": false,
            "description": "HTTP method. Default: HEAD (lebih cepat). Pakai GET kalau server reject HEAD",
            "schema": {
              "type": "string",
              "enum": [
                "HEAD",
                "GET"
              ],
              "example": "HEAD"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Success",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Envelope"
                },
                "example": {
                  "status": "success",
                  "message": "Success",
                  "content": {
                    "ok": true,
                    "url": "https://example.com",
                    "method": "HEAD",
                    "status": 200,
                    "headers": {
                      "age": "1939",
                      "date": "Wed, 27 May 2026 13:44:44 GMT",
                      "allow": "GET, HEAD",
                      "cf-ray": "a02574beabfcf8d6-SIN",
                      "server": "cloudflare",
                      "connection": "keep-alive",
                      "content-type": "text/html",
                      "last-modified": "Fri, 22 May 2026 08:22:30 GMT",
                      "cf-cache-status": "HIT",
                      "content-encoding": "br"
                    },
                    "finalUrl": "https://example.com",
                    "redirectChain": []
                  }
                }
              }
            }
          },
          "4XX": {
            "$ref": "#/components/responses/Error"
          },
          "default": {
            "$ref": "#/components/responses/Error"
          }
        }
      }
    },
    "/v1/dev-tools:ip-geo/lookup": {
      "get": {
        "operationId": "dev_tools_ip_geo_lookup",
        "summary": "Lookup",
        "description": "Perform lookup dengan input yang diberikan.",
        "tags": [
          "IP Geolocation"
        ],
        "externalDocs": {
          "url": "https://zpi.web.id/api/dev-tools/ip-geo#reference-lookup"
        },
        "parameters": [
          {
            "name": "ip",
            "in": "query",
            "required": true,
            "description": "IP address (IPv4 atau IPv6)",
            "schema": {
              "type": "string",
              "example": "8.8.8.8"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Success",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Envelope"
                },
                "example": {
                  "status": "success",
                  "message": "Success",
                  "content": {
                    "ip": "8.8.8.8",
                    "asn": "AS15169 Google LLC",
                    "isp": "Google LLC",
                    "org": "Google Public DNS",
                    "zip": "20149",
                    "city": "Ashburn",
                    "region": "VA",
                    "source": "geo",
                    "country": "United States",
                    "latitude": 39.03,
                    "timezone": "America/New_York",
                    "longitude": -77.5,
                    "regionName": "Virginia",
                    "countryCode": "US"
                  }
                }
              }
            }
          },
          "4XX": {
            "$ref": "#/components/responses/Error"
          },
          "default": {
            "$ref": "#/components/responses/Error"
          }
        }
      }
    },
    "/v1/dev-tools:meta-preview/lookup": {
      "get": {
        "operationId": "dev_tools_meta_preview_lookup",
        "summary": "Lookup",
        "description": "Perform lookup dengan input yang diberikan.",
        "tags": [
          "Meta/OG Preview"
        ],
        "externalDocs": {
          "url": "https://zpi.web.id/api/dev-tools/meta-preview#reference-lookup"
        },
        "parameters": [
          {
            "name": "url",
            "in": "query",
            "required": true,
            "description": "URL halaman web. Auto-parse Open Graph / Twitter Card / meta tags untuk preview.",
            "schema": {
              "type": "string",
              "example": "https://github.com"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Success",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Envelope"
                },
                "example": {
                  "status": "success",
                  "message": "Success",
                  "content": {
                    "url": "https://github.com",
                    "type": "object",
                    "image": "https://images.ctfassets.net/8aevphvgewt8/4pe4eOtUJ0ARpZRE4fNekf/f52b1f9c52f059a33170229883731ed0/GH-Homepage-Universe-img.png",
                    "title": "GitHub · Change is constant. GitHub keeps you ahead.",
                    "favicon": "https://github.githubassets.com/favicons/favicon",
                    "finalUrl": "https://github.com/",
                    "siteName": "GitHub",
                    "canonical": "https://github.com/",
                    "scrapedAt": "2026-05-27T07:14:08.168Z",
                    "themeColor": "#1e2327",
                    "description": "Join the world's most widely adopted, AI-powered developer platform where millions of developers, businesses, and the largest open source community build software that advances humanity.",
                    "twitterCard": {
                      "card": "summary_large_image",
                      "site": "@github",
                      "image": "https://images.ctfassets.net/8aevphvgewt8/4pe4eOtUJ0ARpZRE4fNekf/f52b1f9c52f059a33170229883731ed0/GH-Homepage-Universe-img.png",
                      "title": "GitHub · Change is constant. GitHub keeps you ahead.",
                      "description": "Join the world's most widely adopted, AI-powered developer platform where millions of developers, businesses, and the largest open source community build software that advances humanity."
                    }
                  }
                }
              }
            }
          },
          "4XX": {
            "$ref": "#/components/responses/Error"
          },
          "default": {
            "$ref": "#/components/responses/Error"
          }
        }
      }
    },
    "/v1/dev-tools:ssl-labs/analyze": {
      "get": {
        "operationId": "dev_tools_ssl_labs_analyze",
        "summary": "Analyze SSL",
        "description": "Fetch SSL/TLS analysis report for a hostname.",
        "tags": [
          "SSL Labs"
        ],
        "externalDocs": {
          "url": "https://zpi.web.id/api/dev-tools/ssl-labs#reference-analyze"
        },
        "parameters": [
          {
            "name": "host",
            "in": "query",
            "required": true,
            "description": "Hostname target untuk analisa SSL/TLS",
            "schema": {
              "type": "string",
              "example": "google.com"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Success",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Envelope"
                },
                "example": {
                  "status": "success",
                  "message": "Success",
                  "content": {
                    "ok": true,
                    "host": "google.com",
                    "source": "ssl-labs",
                    "status": "READY",
                    "partial": false,
                    "testTime": 1779885872622,
                    "endpoints": [
                      {
                        "grade": "B",
                        "duration": 121852,
                        "progress": 100,
                        "ipAddress": "2607:f8b0:4002:c06:0:0:0:65",
                        "serverName": "yv-in-f101.1e100.net",
                        "hasWarnings": false,
                        "isExceptional": false,
                        "statusMessage": "Ready",
                        "gradeTrustIgnored": "B"
                      },
                      {
                        "grade": "B",
                        "duration": 121697,
                        "progress": 100,
                        "ipAddress": "2607:f8b0:4002:c06:0:0:0:64",
                        "serverName": "yv-in-x64.1e100.net",
                        "hasWarnings": false,
                        "isExceptional": false,
                        "statusMessage": "Ready",
                        "gradeTrustIgnored": "B"
                      },
                      {
                        "grade": "B",
                        "duration": 122199,
                        "progress": 100,
                        "ipAddress": "2607:f8b0:4002:c06:0:0:0:66",
                        "serverName": "yv-in-f102.1e100.net",
                        "hasWarnings": false,
                        "isExceptional": false,
                        "statusMessage": "Ready",
                        "gradeTrustIgnored": "B"
                      },
                      {
                        "grade": "B",
                        "duration": 118030,
                        "progress": 100,
                        "ipAddress": "74.125.21.139",
                        "serverName": "yv-in-f139.1e100.net",
                        "hasWarnings": false,
                        "isExceptional": false,
                        "statusMessage": "Ready",
                        "gradeTrustIgnored": "B"
                      },
                      {
                        "grade": "B",
                        "duration": 118726,
                        "progress": 100,
                        "ipAddress": "74.125.21.138",
                        "serverName": "yv-in-f138.1e100.net",
                        "hasWarnings": false,
                        "isExceptional": false,
                        "statusMessage": "Ready",
                        "gradeTrustIgnored": "B"
                      },
                      {
                        "grade": "B",
                        "duration": 118352,
                        "progress": 100,
                        "ipAddress": "74.125.21.101",
                        "serverName": "yv-in-f101.1e100.net",
                        "hasWarnings": false,
                        "isExceptional": false,
                        "statusMessage": "Ready",
                        "gradeTrustIgnored": "B"
                      },
                      {
                        "grade": "B",
                        "duration": 118569,
                        "progress": 100,
                        "ipAddress": "74.125.21.100",
                        "serverName": "yv-in-f100.1e100.net",
                        "hasWarnings": false,
                        "isExceptional": false,
                        "statusMessage": "Ready",
                        "gradeTrustIgnored": "B"
                      },
                      {
                        "grade": "B",
                        "duration": 122629,
                        "progress": 100,
                        "ipAddress": "2607:f8b0:4002:c06:0:0:0:8a",
                        "serverName": "yv-in-x8a.1e100.net",
                        "hasWarnings": false,
                        "isExceptional": false,
                        "statusMessage": "Ready",
                        "gradeTrustIgnored": "B"
                      },
                      {
                        "grade": "B",
                        "duration": 118847,
                        "progress": 100,
                        "ipAddress": "74.125.21.102",
                        "serverName": "yv-in-f102.1e100.net",
                        "hasWarnings": false,
                        "isExceptional": false,
                        "statusMessage": "Ready",
                        "gradeTrustIgnored": "B"
                      },
                      {
                        "grade": "B",
                        "duration": 118828,
                        "progress": 100,
                        "ipAddress": "74.125.21.113",
                        "serverName": "yv-in-f113.1e100.net",
                        "hasWarnings": false,
                        "isExceptional": false,
                        "statusMessage": "Ready",
                        "gradeTrustIgnored": "B"
                      }
                    ],
                    "startTime": 1779884672773,
                    "engineVersion": "2.4.2",
                    "statusMessage": "",
                    "criteriaVersion": "2009q"
                  }
                }
              }
            }
          },
          "4XX": {
            "$ref": "#/components/responses/Error"
          },
          "default": {
            "$ref": "#/components/responses/Error"
          }
        }
      }
    },
    "/v1/dev-tools:whois-lookup/lookup": {
      "get": {
        "operationId": "dev_tools_whois_lookup_lookup",
        "summary": "Lookup",
        "description": "Perform lookup dengan input yang diberikan.",
        "tags": [
          "WHOIS Lookup"
        ],
        "externalDocs": {
          "url": "https://zpi.web.id/api/dev-tools/whois-lookup#reference-lookup"
        },
        "parameters": [
          {
            "name": "domain",
            "in": "query",
            "required": true,
            "description": "Domain name (akan di-normalize: strip protocol, www, path)",
            "schema": {
              "type": "string",
              "example": "google.com"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Success",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Envelope"
                },
                "example": {
                  "status": "success",
                  "message": "Success",
                  "content": {
                    "domain": "google.com",
                    "source": "whois",
                    "status": [
                      "client delete prohibited",
                      "client transfer prohibited",
                      "client update prohibited",
                      "server delete prohibited",
                      "server transfer prohibited",
                      "server update prohibited"
                    ],
                    "expiresAt": "2028-09-14T04:00:00Z",
                    "registrar": "MarkMonitor Inc.",
                    "updatedAt": "2019-09-09T15:39:04Z",
                    "nameservers": [
                      "ns1.google.com",
                      "ns2.google.com",
                      "ns3.google.com",
                      "ns4.google.com"
                    ],
                    "registeredAt": "1997-09-15T04:00:00Z"
                  }
                }
              }
            }
          },
          "4XX": {
            "$ref": "#/components/responses/Error"
          },
          "default": {
            "$ref": "#/components/responses/Error"
          }
        }
      }
    }
  }
}