{
  "openapi": "3.0.1",
  "info": {
    "title": "Domain Expiry, WHOIS & DNS Lookup: Failed Runs Cost Nothing",
    "description": "Domain expiry dates, days left, registrar, EPP status, nameservers and DNSSEC from the registries over RDAP (not WHOIS), plus live DNS records, for up to 2,000 domains. Says whether registry and live nameservers agree. A failed or empty run costs nothing. Free dry run, spend cap, no start fee.",
    "version": "0.1",
    "x-build-id": "Edav6keDUXZjFHm8o"
  },
  "servers": [
    {
      "url": "https://api.apify.com/v2"
    }
  ],
  "paths": {
    "/acts/montyburrows~domain-rdap/run-sync-get-dataset-items": {
      "post": {
        "operationId": "run-sync-get-dataset-items-montyburrows-domain-rdap",
        "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/montyburrows~domain-rdap/runs": {
      "post": {
        "operationId": "runs-sync-montyburrows-domain-rdap",
        "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/montyburrows~domain-rdap/run-sync": {
      "post": {
        "operationId": "run-sync-montyburrows-domain-rdap",
        "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",
        "required": [
          "domains"
        ],
        "properties": {
          "domains": {
            "title": "Domains",
            "minItems": 1,
            "maxItems": 2000,
            "type": "array",
            "description": "The domains to look up, one per line. Each can be a bare name like example.com, or a URL, from which anything but the host is discarded. A hostname is reduced to the name its registry holds (www.example.com is looked up as example.com, because a registry has no record of the first). Up to 2,000 per run. Coverage is IANA's own bootstrap: every gTLD, and 71 of roughly 250 country-code TLDs. A domain on a TLD with no RDAP service still gets a row, and is charged for like any other answer. The row carries its live DNS records, which are then the only reading available for it. Run a free dry run first to see how many of yours those are.",
            "items": {
              "type": "string"
            }
          },
          "dnsRecords": {
            "title": "Live DNS records",
            "uniqueItems": true,
            "type": "array",
            "description": "Which records to read from the live DNS alongside the registry's answer, over DNS-over-HTTPS. Included in the price: every type is one more request per domain, so this makes a run slower rather than dearer. A (does it resolve at all), NS (graded against the registry's delegation, which is what catches a domain that has moved without you) and MX (the one you notice the moment it breaks) are on by default. Clear it to skip DNS entirely and do a pure registry lookup.",
            "items": {
              "type": "string",
              "enum": [
                "A",
                "AAAA",
                "MX",
                "NS",
                "TXT",
                "CAA",
                "SOA"
              ],
              "enumTitles": [
                "A: IPv4 addresses",
                "AAAA: IPv6 addresses",
                "MX: mail exchangers",
                "NS: live nameservers",
                "TXT: text records (SPF and verification tokens)",
                "CAA: which certificate authorities may issue",
                "SOA: start of authority, including the zone serial"
              ]
            },
            "default": [
              "A",
              "MX",
              "NS"
            ]
          },
          "includeRawRecord": {
            "title": "Include the raw RDAP document",
            "type": "boolean",
            "description": "Adds the registry's whole response to every row. Off by default, and worth reading twice before turning on: the normal columns never carry a registrant, administrative or technical contact, but the raw document is whatever the registry sent, and a handful of country-code registries send a name, a postal address, an email address and a telephone number with nothing redacted.",
            "default": false
          },
          "dryRun": {
            "title": "Dry run (free cost estimate)",
            "type": "boolean",
            "description": "Count what you would get and what it would cost, then stop. Nothing is written and you are charged nothing. The count is exact here rather than estimated (one row per domain, known before a single lookup), and it tells you how many of your domains are on a TLD this Actor can answer about.",
            "default": false
          },
          "maxResults": {
            "title": "Maximum results",
            "minimum": 1,
            "maximum": 1000000,
            "type": "integer",
            "description": "The most domains this run may answer about. The run stops as soon as it is reached. This is a hard cap, not a target.",
            "default": 2000
          },
          "maxCostUsd": {
            "title": "Maximum spend (USD)",
            "minimum": 0.001,
            "type": "number",
            "description": "The most this run may cost you, in US dollars. The run stops before exceeding it. On a scheduled monitor this is the number that matters: it is per run, so multiply by how often you run it."
          },
          "proxy": {
            "title": "Proxy",
            "type": "object",
            "description": "Apify Proxy configuration. The default (datacentre) is all this needs: RDAP is served unauthenticated because ICANN requires it.",
            "default": {
              "useApifyProxy": true
            }
          },
          "proxyTier": {
            "title": "Proxy pool",
            "enum": [
              "none",
              "datacenter",
              "residential"
            ],
            "type": "string",
            "description": "Datacentre is cheap and fast. Residential costs considerably more and solves a problem this source does not have.",
            "default": "datacenter"
          },
          "maxConcurrency": {
            "title": "Maximum concurrency",
            "minimum": 1,
            "maximum": 50,
            "type": "integer",
            "description": "How many requests to run at once against a single host. Each registry is asked one domain at a time regardless, paced to one request per second. One registry answers for 451 TLDs, so that pacing is per registry rather than per TLD.",
            "default": 4
          },
          "maxRequestRetries": {
            "title": "Maximum retries",
            "minimum": 0,
            "maximum": 10,
            "type": "integer",
            "description": "How many times to retry a failed lookup before recording the outcome it failed with.",
            "default": 4
          },
          "requestTimeoutSecs": {
            "title": "Request timeout",
            "minimum": 1,
            "maximum": 300,
            "type": "integer",
            "description": "How long a single lookup may take before it is retried. Registry responses measured between 137ms and 871ms.",
            "default": 30
          },
          "debug": {
            "title": "Debug logging",
            "type": "boolean",
            "description": "Log every request and retry. Useful when opening a support ticket.",
            "default": false
          }
        }
      },
      "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
                  },
                  "PROXY_UNBLOCKER_UNITS": {
                    "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
                  },
                  "PROXY_UNBLOCKER_UNITS": {
                    "type": "integer",
                    "example": 0
                  }
                }
              }
            }
          }
        }
      }
    }
  }
}