{
  "openapi": "3.1.0",
  "info": {
    "title": "WarmInboxes deliverability API",
    "version": "2026-09-26",
    "description": "Live email deliverability checks: authentication records, DNS, blacklists, domain registration and mailbox provider. No key, no signup, CORS open. The same checks are available as MCP tools at /mcp and as browser tools on the site. These are read-only and change nothing. Ordering and managing inboxes and domains is a separate authenticated API at https://api.warminboxes.com/v1, documented at https://docs.warminboxes.com — this spec does not describe it.",
    "license": {
      "name": "Free to use",
      "url": "https://warminboxes.com/terms"
    }
  },
  "servers": [
    {
      "url": "https://warminboxes.com"
    }
  ],
  "externalDocs": {
    "description": "Tool catalogue",
    "url": "https://warminboxes.com/tools.json"
  },
  "x-warminboxes-app-api": {
    "description": "The authenticated product API: ordering and managing inboxes and domains.",
    "url": "https://api.warminboxes.com/v1",
    "docs": "https://docs.warminboxes.com",
    "llms": "https://docs.warminboxes.com/llms.txt",
    "auth": "Authorization: Bearer $WIB_API_KEY"
  },
  "paths": {
    "/.netlify/functions/check-deliverability": {
      "get": {
        "operationId": "check_deliverability",
        "summary": "Deliverability grade (A-F)",
        "description": "Grade a domain A-F for cold email readiness. Checks SPF, DKIM, DMARC, MX, blacklists and domain age together and returns a weighted score with a per-check breakdown and what to fix. Start here for open-ended \"is this domain any good\" questions.",
        "tags": [
          "deliverability"
        ],
        "parameters": [
          {
            "name": "domain",
            "in": "query",
            "required": true,
            "description": "Domain to grade, e.g. \"acme.com\". Not an email address.",
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "The live result, queried at call time and never cached.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "400": {
            "description": "A required parameter is missing or malformed.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          }
        }
      }
    },
    "/.netlify/functions/check-spf": {
      "get": {
        "operationId": "check_spf",
        "summary": "SPF record",
        "description": "Look up a domain's SPF record and validate it, including the recursive DNS lookup count that silently breaks SPF past 10.",
        "tags": [
          "deliverability"
        ],
        "parameters": [
          {
            "name": "domain",
            "in": "query",
            "required": true,
            "description": "Domain to check, e.g. \"acme.com\".",
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "The live result, queried at call time and never cached.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "400": {
            "description": "A required parameter is missing or malformed.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          }
        }
      }
    },
    "/.netlify/functions/check-dkim": {
      "get": {
        "operationId": "check_dkim",
        "summary": "DKIM record",
        "description": "Find and validate a domain's DKIM signing key, including key strength. Leave selector empty to auto-scan 26 common selectors (google, selector1, k1, and the rest).",
        "tags": [
          "deliverability"
        ],
        "parameters": [
          {
            "name": "domain",
            "in": "query",
            "required": true,
            "description": "Domain to check, e.g. \"acme.com\".",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "selector",
            "in": "query",
            "required": false,
            "description": "Optional DKIM selector. Omit to auto-scan common selectors.",
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "The live result, queried at call time and never cached.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "400": {
            "description": "A required parameter is missing or malformed.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          }
        }
      }
    },
    "/.netlify/functions/check-dmarc": {
      "get": {
        "operationId": "check_dmarc",
        "summary": "DMARC record",
        "description": "Look up and parse a domain's DMARC record: policy, subdomain policy, percentage, alignment and reporting tags, each explained.",
        "tags": [
          "deliverability"
        ],
        "parameters": [
          {
            "name": "domain",
            "in": "query",
            "required": true,
            "description": "Domain to check, e.g. \"acme.com\".",
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "The live result, queried at call time and never cached.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "400": {
            "description": "A required parameter is missing or malformed.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          }
        }
      }
    },
    "/.netlify/functions/check-bimi": {
      "get": {
        "operationId": "check_bimi",
        "summary": "BIMI record",
        "description": "Validate a domain's BIMI record, the logo SVG, the VMC, and the DMARC enforcement level Gmail requires before it will show a brand logo.",
        "tags": [
          "deliverability"
        ],
        "parameters": [
          {
            "name": "domain",
            "in": "query",
            "required": true,
            "description": "Domain to check, e.g. \"acme.com\".",
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "The live result, queried at call time and never cached.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "400": {
            "description": "A required parameter is missing or malformed.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          }
        }
      }
    },
    "/.netlify/functions/check-mta-sts": {
      "get": {
        "operationId": "check_mta_sts",
        "summary": "MTA-STS policy",
        "description": "Validate a domain's _mta-sts DNS record and its published policy file: mode, MX patterns, max_age and TLS-RPT.",
        "tags": [
          "deliverability"
        ],
        "parameters": [
          {
            "name": "domain",
            "in": "query",
            "required": true,
            "description": "Domain to check, e.g. \"acme.com\".",
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "The live result, queried at call time and never cached.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "400": {
            "description": "A required parameter is missing or malformed.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          }
        }
      }
    },
    "/.netlify/functions/check-dns": {
      "get": {
        "operationId": "check_dns",
        "summary": "DNS records",
        "description": "Query any DNS record type for a domain: MX, TXT, A, AAAA, CNAME, NS, SOA, CAA.",
        "tags": [
          "deliverability"
        ],
        "parameters": [
          {
            "name": "domain",
            "in": "query",
            "required": true,
            "description": "Domain to query, e.g. \"acme.com\".",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "type",
            "in": "query",
            "required": false,
            "description": "Record type, e.g. \"MX\", \"TXT\", \"A\". Defaults to MX if omitted.",
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "The live result, queried at call time and never cached.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "400": {
            "description": "A required parameter is missing or malformed.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          }
        }
      }
    },
    "/.netlify/functions/check-blacklist": {
      "get": {
        "operationId": "check_blacklist",
        "summary": "Blacklist / RBL check",
        "description": "Check a domain or IP against 20+ major email blacklists (Spamhaus, Barracuda, SORBS and others) and report which list it appears on.",
        "tags": [
          "deliverability"
        ],
        "parameters": [
          {
            "name": "input",
            "in": "query",
            "required": true,
            "description": "A domain or an IPv4 address.",
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "The live result, queried at call time and never cached.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "400": {
            "description": "A required parameter is missing or malformed.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          }
        }
      }
    },
    "/.netlify/functions/check-surbl": {
      "get": {
        "operationId": "check_surbl",
        "summary": "SURBL URI blacklist (bulk)",
        "description": "Check domains against the SURBL URI blacklist in bulk. URI blacklists list the domains that appear inside a message body, so a listed tracking or landing domain sends the whole email to spam however clean the sender is. Up to 100 domains per call.",
        "tags": [
          "deliverability"
        ],
        "parameters": [
          {
            "name": "domains",
            "in": "query",
            "required": true,
            "description": "Domains to check. Max 100. Comma-separated for more than one.",
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "The live result, queried at call time and never cached.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "400": {
            "description": "A required parameter is missing or malformed.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          }
        }
      }
    },
    "/.netlify/functions/check-nameservers": {
      "get": {
        "operationId": "check_nameservers",
        "summary": "Nameservers and DNS provider (bulk)",
        "description": "Get the NS records and the DNS provider behind one domain or a whole list. Useful for working out who actually controls a domain's DNS before trying to fix its records.",
        "tags": [
          "deliverability"
        ],
        "parameters": [
          {
            "name": "domains",
            "in": "query",
            "required": true,
            "description": "Domains to look up. Comma-separated for more than one.",
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "The live result, queried at call time and never cached.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "400": {
            "description": "A required parameter is missing or malformed.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          }
        }
      }
    },
    "/.netlify/functions/check-domain-expiry": {
      "get": {
        "operationId": "check_domain_expiry",
        "summary": "Domain registration and expiry",
        "description": "Get a domain's registrar, creation date, expiry date and days remaining, over RDAP with a WHOIS fallback for ccTLDs that publish no RDAP service. Domain age is one of the strongest cold-email risk signals.",
        "tags": [
          "deliverability"
        ],
        "parameters": [
          {
            "name": "domain",
            "in": "query",
            "required": true,
            "description": "Domain to look up, e.g. \"acme.com\".",
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "The live result, queried at call time and never cached.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "400": {
            "description": "A required parameter is missing or malformed.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          }
        }
      }
    },
    "/.netlify/functions/check-google-domain": {
      "get": {
        "operationId": "check_google_domain",
        "summary": "Google Workspace tenancy",
        "description": "Tell whether a domain is already attached to a Google Workspace account, or is clear for a fresh Google tenant.",
        "tags": [
          "deliverability"
        ],
        "parameters": [
          {
            "name": "domain",
            "in": "query",
            "required": true,
            "description": "Domain to check, e.g. \"acme.com\".",
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "The live result, queried at call time and never cached.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "400": {
            "description": "A required parameter is missing or malformed.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          }
        }
      }
    },
    "/.netlify/functions/check-cname": {
      "get": {
        "operationId": "check_cname",
        "summary": "CNAME chain",
        "description": "Follow a host's full CNAME chain and flag the mistakes that break a cold-email tracking domain. Pass expected to assert where the chain should end up.",
        "tags": [
          "deliverability"
        ],
        "parameters": [
          {
            "name": "host",
            "in": "query",
            "required": true,
            "description": "Hostname to follow, e.g. \"track.acme.com\".",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "expected",
            "in": "query",
            "required": false,
            "description": "Optional target the chain should resolve to.",
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "The live result, queried at call time and never cached.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "400": {
            "description": "A required parameter is missing or malformed.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          }
        }
      }
    },
    "/.netlify/functions/verify-email": {
      "get": {
        "operationId": "verify_email",
        "summary": "Email verification (bulk)",
        "description": "Check email addresses for syntax, live MX records, disposable providers and role prefixes (info@, sales@). Does not open SMTP connections, so catch-all domains come back valid.",
        "tags": [
          "deliverability"
        ],
        "parameters": [
          {
            "name": "emails",
            "in": "query",
            "required": true,
            "description": "Email addresses to verify. Comma-separated for more than one.",
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "The live result, queried at call time and never cached.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "400": {
            "description": "A required parameter is missing or malformed.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          }
        }
      }
    },
    "/.netlify/functions/segment-esp": {
      "get": {
        "operationId": "segment_esp",
        "summary": "ESP segmentation (bulk)",
        "description": "Split a list of domains by the email provider behind them (Google, Microsoft, or a security gateway) from their MX records. Sending Google-to-Google and Microsoft-to-Microsoft is one of the larger levers on inbox placement.",
        "tags": [
          "deliverability"
        ],
        "parameters": [
          {
            "name": "domains",
            "in": "query",
            "required": true,
            "description": "Domains to segment. Comma-separated for more than one.",
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "The live result, queried at call time and never cached.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "400": {
            "description": "A required parameter is missing or malformed.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          }
        }
      }
    }
  }
}