{
  "openapi": "3.0.1",
  "info": {
    "title": "Bulk WHOIS & RDAP Domain Lookup: DNS, SSL",
    "description": "Look up thousands of domains over RDAP, the protocol that replaced WHOIS: registrar, IANA id, creation and expiry dates, EPP status codes, nameservers, DNSSEC and availability across 1,200 TLDs. Adds DNS records and SSL certificate details, flags redacted fields, exports to CSV or JSON.",
    "version": "1.0",
    "x-build-id": "hR9mpLKM9S3F8fE3f"
  },
  "servers": [
    {
      "url": "https://api.apify.com/v2"
    }
  ],
  "paths": {
    "/acts/automation_craft~domain-whois-rdap-lookup/run-sync-get-dataset-items": {
      "post": {
        "operationId": "run-sync-get-dataset-items-automation_craft-domain-whois-rdap-lookup",
        "x-openai-isConsequential": false,
        "summary": "Executes an Actor, waits for its completion, and returns Actor's dataset items in response.",
        "tags": [
          "Run Actor"
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/inputSchema"
              }
            }
          }
        },
        "parameters": [
          {
            "name": "token",
            "in": "query",
            "required": true,
            "schema": {
              "type": "string"
            },
            "description": "Enter your Apify token here"
          }
        ],
        "responses": {
          "200": {
            "description": "OK"
          }
        }
      }
    },
    "/acts/automation_craft~domain-whois-rdap-lookup/runs": {
      "post": {
        "operationId": "runs-sync-automation_craft-domain-whois-rdap-lookup",
        "x-openai-isConsequential": false,
        "summary": "Executes an Actor and returns information about the initiated run in response.",
        "tags": [
          "Run Actor"
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/inputSchema"
              }
            }
          }
        },
        "parameters": [
          {
            "name": "token",
            "in": "query",
            "required": true,
            "schema": {
              "type": "string"
            },
            "description": "Enter your Apify token here"
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/runsResponseSchema"
                }
              }
            }
          }
        }
      }
    },
    "/acts/automation_craft~domain-whois-rdap-lookup/run-sync": {
      "post": {
        "operationId": "run-sync-automation_craft-domain-whois-rdap-lookup",
        "x-openai-isConsequential": false,
        "summary": "Executes an Actor, waits for completion, and returns the OUTPUT from Key-value store in response.",
        "tags": [
          "Run Actor"
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/inputSchema"
              }
            }
          }
        },
        "parameters": [
          {
            "name": "token",
            "in": "query",
            "required": true,
            "schema": {
              "type": "string"
            },
            "description": "Enter your Apify token here"
          }
        ],
        "responses": {
          "200": {
            "description": "OK"
          }
        }
      }
    }
  },
  "components": {
    "schemas": {
      "inputSchema": {
        "type": "object",
        "properties": {
          "domains": {
            "title": "Domains",
            "type": "array",
            "description": "The domains to look up. Paste bare names (example.com), full URLs (https://www.example.com/pricing), subdomains, email addresses or internationalized names: each entry is reduced to a hostname automatically. Leave empty and set a domain list URL instead for large lists.",
            "items": {
              "type": "string"
            }
          },
          "domainListUrl": {
            "title": "Domain list URL (text or CSV)",
            "type": "string",
            "description": "A public URL holding one domain per line, or a CSV whose first column is the domain. Lines starting with # are ignored. Merged with the domains above."
          },
          "tldFilter": {
            "title": "Only these TLDs",
            "type": "array",
            "description": "Keep only domains ending in these TLDs, for example com, org, io. Leave empty to look up every domain. Filtered domains are skipped free of charge.",
            "items": {
              "type": "string"
            }
          },
          "checks": {
            "title": "Checks to run",
            "type": "array",
            "description": "RDAP is always run: it is the registry answer that decides whether a domain is registered. DNS adds live record lookups over HTTPS, SSL certificate reads the certificate the site serves on port 443, and WHOIS is a port 43 fallback used for TLDs that publish no RDAP service and when a registry's RDAP server does not answer. DNS and SSL cost nothing extra.",
            "items": {
              "type": "string",
              "enum": [
                "rdap",
                "dns",
                "tls",
                "whois"
              ],
              "enumTitles": [
                "RDAP registration data and availability",
                "DNS records over HTTPS",
                "SSL certificate details",
                "Legacy WHOIS on port 43 (fallback when RDAP is missing or silent)"
              ]
            }
          },
          "dnsRecordTypes": {
            "title": "DNS record types",
            "type": "array",
            "description": "Which DNS records to read when the DNS check is selected. Each type is one lookup against Cloudflare, with Google as the fallback resolver.",
            "items": {
              "type": "string",
              "enum": [
                "A",
                "AAAA",
                "MX",
                "NS",
                "TXT",
                "CAA",
                "SOA"
              ],
              "enumTitles": [
                "A (IPv4)",
                "AAAA (IPv6)",
                "MX (mail)",
                "NS (nameservers)",
                "TXT (SPF, DKIM, verification)",
                "CAA (certificate authority authorization)",
                "SOA (zone authority)"
              ]
            }
          },
          "includeRaw": {
            "title": "Include the raw registry response",
            "type": "boolean",
            "description": "Add the RDAP JSON the registry returned, and the raw WHOIS text under whois.raw where WHOIS was used, to every record the registry answered. Useful for auditing, and it makes the dataset several times larger."
          },
          "maxItems": {
            "title": "Maximum charged domain records",
            "minimum": 1,
            "maximum": 50000,
            "type": "integer",
            "description": "Hard cap on the number of billable domain records this run delivers. Rows where no registry answered are free and do not count against it."
          },
          "concurrency": {
            "title": "Parallel domains",
            "minimum": 1,
            "maximum": 10,
            "type": "integer",
            "description": "How many domains to work on at the same time. Requests to any single RDAP server are paced automatically no matter what you set here, so raising this mainly helps a list that spans many different TLDs."
          },
          "memoryName": {
            "title": "Cross-run memory name",
            "type": "string",
            "description": "Optional. Name a memory and every domain this Actor has answered under that name is skipped, free of charge, on later runs. Domains no registry could answer for are not remembered, so they are tried again. Use it to build a large list over several runs, and leave it empty when you want a fresh answer every run, for example a weekly expiry watch."
          },
          "resetMemory": {
            "title": "Reset the memory before this run",
            "type": "boolean",
            "description": "Empty the named memory first, so every domain in this run counts as new and is delivered again."
          },
          "proxyConfiguration": {
            "title": "Proxy configuration",
            "type": "object",
            "description": "Optional. Registry RDAP servers and the DNS resolvers answer Apify directly, so no proxy is needed and none is used by default. Turn one on only if your own policy requires it. SSL certificate reads and port 43 WHOIS always use the direct connection."
          }
        }
      },
      "runsResponseSchema": {
        "type": "object",
        "properties": {
          "data": {
            "type": "object",
            "properties": {
              "id": {
                "type": "string"
              },
              "actId": {
                "type": "string"
              },
              "userId": {
                "type": "string"
              },
              "startedAt": {
                "type": "string",
                "format": "date-time",
                "example": "2025-01-08T00:00:00.000Z"
              },
              "finishedAt": {
                "type": "string",
                "format": "date-time",
                "example": "2025-01-08T00:00:00.000Z"
              },
              "status": {
                "type": "string",
                "example": "READY"
              },
              "meta": {
                "type": "object",
                "properties": {
                  "origin": {
                    "type": "string",
                    "example": "API"
                  },
                  "userAgent": {
                    "type": "string"
                  }
                }
              },
              "stats": {
                "type": "object",
                "properties": {
                  "inputBodyLen": {
                    "type": "integer",
                    "example": 2000
                  },
                  "rebootCount": {
                    "type": "integer",
                    "example": 0
                  },
                  "restartCount": {
                    "type": "integer",
                    "example": 0
                  },
                  "resurrectCount": {
                    "type": "integer",
                    "example": 0
                  },
                  "computeUnits": {
                    "type": "integer",
                    "example": 0
                  }
                }
              },
              "options": {
                "type": "object",
                "properties": {
                  "build": {
                    "type": "string",
                    "example": "latest"
                  },
                  "timeoutSecs": {
                    "type": "integer",
                    "example": 300
                  },
                  "memoryMbytes": {
                    "type": "integer",
                    "example": 1024
                  },
                  "diskMbytes": {
                    "type": "integer",
                    "example": 2048
                  }
                }
              },
              "buildId": {
                "type": "string"
              },
              "defaultKeyValueStoreId": {
                "type": "string"
              },
              "defaultDatasetId": {
                "type": "string"
              },
              "defaultRequestQueueId": {
                "type": "string"
              },
              "buildNumber": {
                "type": "string",
                "example": "1.0.0"
              },
              "containerUrl": {
                "type": "string"
              },
              "usage": {
                "type": "object",
                "properties": {
                  "ACTOR_COMPUTE_UNITS": {
                    "type": "integer",
                    "example": 0
                  },
                  "DATASET_READS": {
                    "type": "integer",
                    "example": 0
                  },
                  "DATASET_WRITES": {
                    "type": "integer",
                    "example": 0
                  },
                  "KEY_VALUE_STORE_READS": {
                    "type": "integer",
                    "example": 0
                  },
                  "KEY_VALUE_STORE_WRITES": {
                    "type": "integer",
                    "example": 1
                  },
                  "KEY_VALUE_STORE_LISTS": {
                    "type": "integer",
                    "example": 0
                  },
                  "REQUEST_QUEUE_READS": {
                    "type": "integer",
                    "example": 0
                  },
                  "REQUEST_QUEUE_WRITES": {
                    "type": "integer",
                    "example": 0
                  },
                  "DATA_TRANSFER_INTERNAL_GBYTES": {
                    "type": "integer",
                    "example": 0
                  },
                  "DATA_TRANSFER_EXTERNAL_GBYTES": {
                    "type": "integer",
                    "example": 0
                  },
                  "PROXY_RESIDENTIAL_TRANSFER_GBYTES": {
                    "type": "integer",
                    "example": 0
                  },
                  "PROXY_SERPS": {
                    "type": "integer",
                    "example": 0
                  }
                }
              },
              "usageTotalUsd": {
                "type": "number",
                "example": 0.00005
              },
              "usageUsd": {
                "type": "object",
                "properties": {
                  "ACTOR_COMPUTE_UNITS": {
                    "type": "integer",
                    "example": 0
                  },
                  "DATASET_READS": {
                    "type": "integer",
                    "example": 0
                  },
                  "DATASET_WRITES": {
                    "type": "integer",
                    "example": 0
                  },
                  "KEY_VALUE_STORE_READS": {
                    "type": "integer",
                    "example": 0
                  },
                  "KEY_VALUE_STORE_WRITES": {
                    "type": "number",
                    "example": 0.00005
                  },
                  "KEY_VALUE_STORE_LISTS": {
                    "type": "integer",
                    "example": 0
                  },
                  "REQUEST_QUEUE_READS": {
                    "type": "integer",
                    "example": 0
                  },
                  "REQUEST_QUEUE_WRITES": {
                    "type": "integer",
                    "example": 0
                  },
                  "DATA_TRANSFER_INTERNAL_GBYTES": {
                    "type": "integer",
                    "example": 0
                  },
                  "DATA_TRANSFER_EXTERNAL_GBYTES": {
                    "type": "integer",
                    "example": 0
                  },
                  "PROXY_RESIDENTIAL_TRANSFER_GBYTES": {
                    "type": "integer",
                    "example": 0
                  },
                  "PROXY_SERPS": {
                    "type": "integer",
                    "example": 0
                  }
                }
              }
            }
          }
        }
      }
    }
  }
}