{
  "openapi": "3.0.1",
  "info": {
    "title": "Domain Monitor: Expiry, DNS & Email Security Alerts",
    "description": "Track domain expiry, registrar, DNS, SPF, DMARC & DKIM for any list of domains. Daily delta: get only what changed. Official RDAP data, no personal info.",
    "version": "0.0",
    "x-build-id": "zlpGk4DjaJBWy5PKK"
  },
  "servers": [
    {
      "url": "https://api.apify.com/v2"
    }
  ],
  "paths": {
    "/acts/rendangmedan~domain-monitor/run-sync-get-dataset-items": {
      "post": {
        "operationId": "run-sync-get-dataset-items-rendangmedan-domain-monitor",
        "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/rendangmedan~domain-monitor/runs": {
      "post": {
        "operationId": "runs-sync-rendangmedan-domain-monitor",
        "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/rendangmedan~domain-monitor/run-sync": {
      "post": {
        "operationId": "run-sync-rendangmedan-domain-monitor",
        "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,
            "uniqueItems": false,
            "type": "array",
            "description": "Domain names to check. URLs, upper case, sub-domains and internationalised names are accepted: each value is reduced to its registrable domain (https://www.Example.co.uk/page becomes example.co.uk). Duplicates are checked once.",
            "items": {
              "type": "string"
            }
          },
          "deltaMode": {
            "title": "Delta mode (compare with the previous run)",
            "type": "boolean",
            "description": "Keep the last known state of every domain in a named key-value store and report what changed since the previous run: registrar, name servers, MX, SPF, DMARC, statuses, expiration date, DNSSEC.",
            "default": true
          },
          "onlyChanged": {
            "title": "Output only changed domains",
            "type": "boolean",
            "description": "Write a dataset item only for domains with at least one change or alert, for domains seen for the first time (baseline) and for failures. Requires delta mode. Unchanged domains are still checked and counted as checked.",
            "default": false
          },
          "expiryAlertDays": {
            "title": "Expiry alert threshold",
            "minimum": 0,
            "maximum": 3650,
            "type": "integer",
            "description": "Raise an 'expiring_soon' change when a domain expires in this number of days or less. The alert is raised when the domain enters the window, then again at 14, 7, 3 and 1 days, not on every run. 0 disables the alert.",
            "default": 30
          },
          "stateStore": {
            "title": "State store (limited permissions)",
            "type": "string",
            "description": "Key-value store that holds the previous state for delta mode. Pick (or create) one in your account: this is how the Actor keeps its limited permissions. When empty, the store named in 'State store name' is used, which needs full permissions."
          },
          "stateStoreName": {
            "title": "State store name",
            "pattern": "^[a-zA-Z0-9][a-zA-Z0-9-]{0,62}$",
            "type": "string",
            "description": "Name of the key-value store that holds the previous state. Use a different name per watch list if you want independent baselines. Letters, digits and hyphens only.",
            "default": "domain-monitor-state"
          },
          "extraTrackedRecordTypes": {
            "title": "Also report changes of these DNS records",
            "type": "array",
            "description": "NS and MX changes are always reported. Add record types here to be told about their changes as well. A and AAAA change often behind CDNs and load balancers: expect noise.",
            "items": {
              "type": "string",
              "enum": [
                "A",
                "AAAA",
                "TXT",
                "CNAME",
                "CAA"
              ]
            },
            "default": []
          },
          "includeRdap": {
            "title": "Registration data (RDAP)",
            "type": "boolean",
            "description": "Registrar name and IANA ID, statuses, creation / update / expiration dates, registry name servers, DNSSEC delegation. Contact data (registrant, admin, tech) is never read.",
            "default": true
          },
          "includeDns": {
            "title": "DNS records",
            "type": "boolean",
            "description": "Resolve the record types selected below.",
            "default": true
          },
          "includeEmailAuth": {
            "title": "E-mail authentication audit",
            "type": "boolean",
            "description": "SPF (syntax, policy, DNS lookup count), DMARC (policy, alignment, reporting), DKIM for common selectors, MTA-STS, TLS-RPT and BIMI.",
            "default": true
          },
          "dnsRecordTypes": {
            "title": "DNS record types",
            "type": "array",
            "description": "Record types resolved for each domain.",
            "items": {
              "type": "string",
              "enum": [
                "A",
                "AAAA",
                "MX",
                "NS",
                "TXT",
                "CNAME",
                "CAA",
                "SOA"
              ]
            },
            "default": [
              "A",
              "AAAA",
              "MX",
              "NS",
              "TXT",
              "CNAME",
              "CAA",
              "SOA"
            ]
          },
          "dkimSelectors": {
            "title": "DKIM selectors to test",
            "type": "array",
            "description": "DKIM keys live under arbitrary selector names that cannot be listed. These selectors are probed; add the ones your mail providers use. Leave empty for the built-in list.",
            "default": [
              "default",
              "google",
              "selector1",
              "selector2",
              "k1",
              "k2",
              "s1",
              "s2",
              "dkim",
              "mail",
              "smtp",
              "mandrill",
              "fm1",
              "protonmail",
              "zoho",
              "mxvault"
            ],
            "items": {
              "type": "string"
            }
          },
          "fetchMtaStsPolicy": {
            "title": "Fetch the MTA-STS policy file",
            "type": "boolean",
            "description": "When a domain publishes an MTA-STS record, download https://mta-sts.<domain>/.well-known/mta-sts.txt to read the mode and MX patterns.",
            "default": true
          },
          "redactEmailAddresses": {
            "title": "Mask e-mail addresses found in DNS records",
            "type": "boolean",
            "description": "Replace the local part of any e-mail address found in TXT / DMARC / CAA records by *** (jane@corp.com becomes ***@corp.com). Changes are still detected through a fingerprint of the original record. Keep this on unless you have a lawful basis to process these addresses.",
            "default": true
          },
          "maxConcurrency": {
            "title": "Domains checked in parallel",
            "minimum": 1,
            "maximum": 100,
            "type": "integer",
            "description": "Global number of domains processed at the same time.",
            "default": 10
          },
          "rdapMaxConcurrencyPerServer": {
            "title": "Parallel requests per RDAP server",
            "minimum": 1,
            "maximum": 20,
            "type": "integer",
            "description": "Maximum simultaneous requests sent to one RDAP server (one registry).",
            "default": 2
          },
          "rdapMinDelayMs": {
            "title": "Minimum delay between requests to one RDAP server",
            "minimum": 0,
            "maximum": 60000,
            "type": "integer",
            "description": "Spacing between two requests to the same RDAP server. 300 ms is about 3 requests per second per registry.",
            "default": 300
          },
          "maxRetries": {
            "title": "Retries per RDAP request",
            "minimum": 0,
            "maximum": 10,
            "type": "integer",
            "description": "Retries after a timeout, a 5xx or a 429 (Retry-After is honoured, exponential backoff otherwise).",
            "default": 3
          },
          "requestTimeoutSecs": {
            "title": "HTTP timeout",
            "minimum": 2,
            "maximum": 120,
            "type": "integer",
            "description": "Timeout of one RDAP or HTTPS request.",
            "default": 20
          },
          "dnsTimeoutSecs": {
            "title": "DNS timeout",
            "minimum": 1,
            "maximum": 60,
            "type": "integer",
            "description": "Timeout of one DNS query.",
            "default": 5
          },
          "dnsMode": {
            "title": "DNS resolution mode",
            "enum": [
              "auto",
              "system",
              "doh"
            ],
            "type": "string",
            "description": "auto: standard DNS, with DNS over HTTPS as a fallback when it fails. system: standard DNS only. doh: DNS over HTTPS only (Cloudflare, then Google).",
            "default": "auto"
          },
          "dnsResolvers": {
            "title": "Custom DNS resolvers",
            "type": "array",
            "description": "IP addresses of the recursive resolvers to use for standard DNS, for example 1.1.1.1. Leave empty to use the resolver of the platform.",
            "default": [],
            "items": {
              "type": "string"
            }
          },
          "rdapServerOverrides": {
            "title": "RDAP server overrides",
            "type": "object",
            "description": "Advanced. Map a TLD to an RDAP base URL for registries that run RDAP without being listed in the IANA bootstrap registry, for example {\"zz\": \"https://rdap.nic.zz/\"}. HTTPS only.",
            "default": {}
          }
        }
      },
      "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
                  }
                }
              }
            }
          }
        }
      }
    }
  }
}