# Drop catch Watched domains. **Common tasks** - [List watched domains](#get-organizations-organization-watched-domains) **Only in the app:** Adding watched domains and placing backorders. **How it works in the app:** [help article](https://infranest.io/docs/drop-catch). **Scopes:** Read with `drop-catch.read`. See [Tokens and scopes](../tokens-and-scopes.md#scopes).
[Watched domains](#watched-domains) 8 · [Whois servers](#whois-servers) 1
Every endpoint below takes a token in the `Authorization: Bearer` header and answers JSON. Errors use the shared format in [Errors](../errors.md). Base address: `https://api.infranest.io/api`. ## Watched domains ### List watched domains {#get-organizations-organization-watched-domains}
`GET` `/organizations/{organization}/watched-domains` **Scope:** `drop-catch.read` · **Changes data:** no Your watched domains, paginated with `per_page` (default 25, at most 200) and sorted with `sort` and `dir`. Filter with `search`, `tag` and flags such as `active`, `available`, `registered`, `failed`, `paused` and `in_auction`; `meta` carries counts per status. | Field | Type | Notes | |---|---|---| | `organization_id`
path · required | integer | Your organization's ID. | **Errors:** [`unauthenticated`](../errors.md#unauthenticated), [`scope_missing`](../errors.md#scope_missing), [`wrong_organization`](../errors.md#wrong_organization), [`test_token_required`](../errors.md#test_token_required), [`test_token_sandbox_only`](../errors.md#test_token_sandbox_only), [`permission_denied`](../errors.md#permission_denied), [`not_found`](../errors.md#not_found), [`rate_limited`](../errors.md#rate_limited)
**Request** ```sh curl "https://api.infranest.io/api/organizations/42/watched-domains" \ -H "Authorization: Bearer $INFRANEST_TOKEN" \ -H "Accept: application/json" ``` **Response** · 200 ```json { "current_page": 1, "data": [ { "id": 3, "organization_id": 1, "name": "northwind", "tld": "app", "priority": 5, "status": "available", "auto_register": true, "registrar": null, "consecutive_available_count": 0, "notes": null, "last_checked_at": "2026-01-15T09:00:00.000000Z", "available_since": null, "registered_at": null, "deleted_at": null, "created_at": "2026-01-15T12:00:00.000000Z", "updated_at": "2026-01-15T12:00:00.000000Z", "next_check_at": "2026-01-15T13:00:00.000000Z", "observed_expires_at": null, "observed_status": null, "drop_eta": null, "date_visibility": null, "score": 88, "score_breakdown": null, "scored_at": "2026-01-15T12:00:00.000000Z", "registrar_preferences": null, "lifecycle_stage": "available", "observed_created_at": null, "contact_id": null, "extended_attributes": null, "catchability": 90, "catchability_signals": { "verdict": "available", "factors": [] }, "dns_signals": null, "observed_registrar": null, "observed_updated_at": null, "observed_nameservers": null, "lifecycle_progress": null, "http_signals": null, "enrichment_signals": null, "burst_until": null, "parallel_race": false, "in_auction": false, "auction": null, "backorder": false, "backorder_credential_id": null, "backorder_status": null, "whois_raw_at": null, "drop_eta_uncertainty_days": null, "lifecycle_source": null, "lifecycle_stage_since": "2026-01-10T12:00:00.000000Z", "published_drop_at": null, "deleted_at_registry": null, "dropping_soon_alerted_at": null, "last_successful_check_at": null, "consecutive_check_errors": 0, "check_failing_alerted_at": null, "funding": null, "funding_alerted_at": null, "full_name": "northwind.app", "drop_score": 5, "tags": [] }, { "id": 13, "organization_id": 1, "name": "northwind-app", "tld": "com", "priority": 5, "status": "failed", "auto_register": true, "registrar": null, "consecutive_available_count": 0, "notes": null, "last_checked_at": "2026-01-15T09:00:00.000000Z", "available_since": null, "registered_at": null, "deleted_at": null, "created_at": "2026-01-15T12:00:00.000000Z", "updated_at": "2026-01-15T12:00:00.000000Z", "next_check_at": "2026-01-15T13:00:00.000000Z", "observed_expires_at": null, "observed_status": null, "drop_eta": null, "date_visibility": null, "score": 87, "score_breakdown": null, "scored_at": "2026-01-15T12:00:00.000000Z", "registrar_preferences": null, "lifecycle_stage": "active", "observed_created_at": null, "contact_id": null, "extended_attributes": null, "catchability": 30, "catchability_signals": { "verdict": "active", "factors": [] }, "dns_signals": null, "observed_registrar": null, "observed_updated_at": null, "observed_nameservers": null, "lifecycle_progress": null, "http_signals": null, "enrichment_signals": null, "burst_until": null, "parallel_race": false, "in_auction": false, "auction": null, "backorder": false, "backorder_credential_id": null, "backorder_status": null, "whois_raw_at": null, "drop_eta_uncertainty_days": null, "lifecycle_source": null, "lifecycle_stage_since": "2026-01-09T12:00:00.000000Z", "published_drop_at": null, "deleted_at_registry": null, "dropping_soon_alerted_at": null, "last_successful_check_at": null, "consecutive_check_errors": 0, "check_failing_alerted_at": null, "funding": null, "funding_alerted_at": null, "full_name": "northwind-app.com", "drop_score": 5, "tags": [] } ], "first_page_url": "http://localhost/api/organizations/1/watched-domains?page=1", "from": 1, "last_page": 1, "last_page_url": "http://localhost/api/organizations/1/watched-domains?page=1", "links": [ { "url": null, "label": "« Previous", "page": null, "active": false }, { "url": "http://localhost/api/organizations/1/watched-domains?page=1", "label": "1", "page": 1, "active": true } ], "next_page_url": null, "path": "http://localhost/api/organizations/1/watched-domains", "per_page": 25, "prev_page_url": null, "to": 16, "total": 16, "meta": { "counts": { "total": 16, "active": 13, "available": 2, "registered": 1, "failed": 1, "paused": 1, "in_auction": 1, "not_armed": 8 }, "tags": [] } } ```
--- ### Get a watched domain {#get-organizations-organization-watched-domains-watcheddomain}
`GET` `/organizations/{organization}/watched-domains/{watchedDomain}` **Scope:** `drop-catch.read` · **Changes data:** no One watched domain with its stored WHOIS record, lifecycle dates, estimated drop date, the check schedule still ahead and drop statistics for its extension. | Field | Type | Notes | |---|---|---| | `organization_id`
path · required | integer | Your organization's ID. | | `watchedDomain_id`
path · required | integer | The watchedDomain's ID. | **Errors:** [`unauthenticated`](../errors.md#unauthenticated), [`scope_missing`](../errors.md#scope_missing), [`wrong_organization`](../errors.md#wrong_organization), [`test_token_required`](../errors.md#test_token_required), [`test_token_sandbox_only`](../errors.md#test_token_sandbox_only), [`permission_denied`](../errors.md#permission_denied), [`not_found`](../errors.md#not_found), [`rate_limited`](../errors.md#rate_limited)
**Request** ```sh curl "https://api.infranest.io/api/organizations/42/watched-domains/1" \ -H "Authorization: Bearer $INFRANEST_TOKEN" \ -H "Accept: application/json" ``` **Response** · 200 ```json { "id": 1, "organization_id": 1, "name": "northwind-labs", "tld": "com", "priority": 5, "status": "watching", "auto_register": false, "registrar": null, "consecutive_available_count": 0, "notes": null, "last_checked_at": "2026-01-15T09:00:00.000000Z", "available_since": null, "registered_at": null, "deleted_at": null, "created_at": "2026-01-15T12:00:00.000000Z", "updated_at": "2026-01-15T12:00:00.000000Z", "next_check_at": "2026-01-15T13:00:00.000000Z", "observed_expires_at": "2025-11-13T12:00:00.000000Z", "observed_status": null, "drop_eta": "2026-01-27T12:00:00.000000Z", "date_visibility": null, "score": 84, "score_breakdown": null, "scored_at": "2026-01-15T12:00:00.000000Z", "registrar_preferences": null, "lifecycle_stage": "redemption", "observed_created_at": null, "contact_id": null, "extended_attributes": null, "catchability": 78, "catchability_signals": { "verdict": "likely", "factors": [] }, "dns_signals": null, "observed_registrar": null, "observed_updated_at": null, "observed_nameservers": null, "lifecycle_progress": null, "http_signals": null, "enrichment_signals": null, "burst_until": null, "parallel_race": false, "in_auction": false, "auction": null, "backorder": false, "backorder_credential_id": null, "backorder_status": null, "whois_raw": null, "whois_raw_at": null, "drop_eta_uncertainty_days": null, "lifecycle_source": null, "lifecycle_stage_since": "2026-01-12T12:00:00.000000Z", "published_drop_at": null, "deleted_at_registry": null, "dropping_soon_alerted_at": null, "last_successful_check_at": null, "consecutive_check_errors": 0, "check_failing_alerted_at": null, "funding": null, "funding_alerted_at": null, "check_logs_count": 0, "registration_logs_count": 0, "full_name": "northwind-labs.com", "drop_score": 5, "tags": [], "drop_stats": { "heuristic": 78, "probability": null, "basis_n": 0, "scope": null, "phase": "redemption", "tld": "com" }, "lifecycle_anchors": { "registered": null, "expired": "2025-11-13T12:00:00+00:00", "redemption": "2025-12-28T12:00:00+00:00", "pending_delete": "2026-01-27T12:00:00+00:00", "drop": "2026-02-01T12:00:00+00:00" }, "measured_samples": null, "release": null, "cadence": [ { "starts_at": null, "every_seconds": 21600 }, { "starts_at": "2026-01-25T12:00:00+00:00", "every_seconds": 3600 } ] } ```
--- ### List availability checks {#get-organizations-organization-watched-domains-watcheddomain-check-logs}
`GET` `/organizations/{organization}/watched-domains/{watchedDomain}/check-logs` **Scope:** `drop-catch.read` · **Changes data:** no Every availability check run on the watched domain, newest first, 100 per page. Filter with `status`. | Field | Type | Notes | |---|---|---| | `organization_id`
path · required | integer | Your organization's ID. | | `watchedDomain_id`
path · required | integer | The watchedDomain's ID. | **Errors:** [`unauthenticated`](../errors.md#unauthenticated), [`scope_missing`](../errors.md#scope_missing), [`wrong_organization`](../errors.md#wrong_organization), [`test_token_required`](../errors.md#test_token_required), [`test_token_sandbox_only`](../errors.md#test_token_sandbox_only), [`permission_denied`](../errors.md#permission_denied), [`not_found`](../errors.md#not_found), [`rate_limited`](../errors.md#rate_limited)
**Request** ```sh curl "https://api.infranest.io/api/organizations/42/watched-domains/1/check-logs" \ -H "Authorization: Bearer $INFRANEST_TOKEN" \ -H "Accept: application/json" ``` **Response** · 200 ```json { "current_page": 1, "data": [], "first_page_url": "http://localhost/api/organizations/1/watched-domains/1/check-logs?page=1", "from": null, "last_page": 1, "last_page_url": "http://localhost/api/organizations/1/watched-domains/1/check-logs?page=1", "links": [ { "url": null, "label": "« Previous", "page": null, "active": false }, { "url": "http://localhost/api/organizations/1/watched-domains/1/check-logs?page=1", "label": "1", "page": 1, "active": true } ], "next_page_url": null, "path": "http://localhost/api/organizations/1/watched-domains/1/check-logs", "per_page": 100, "prev_page_url": null, "to": null, "total": 0 } ```
--- ### List registration attempts {#get-organizations-organization-watched-domains-watcheddomain-registration-logs}
`GET` `/organizations/{organization}/watched-domains/{watchedDomain}/registration-logs` **Scope:** `drop-catch.read` · **Changes data:** no Every attempt to register the watched domain, newest first, 50 per page. | Field | Type | Notes | |---|---|---| | `organization_id`
path · required | integer | Your organization's ID. | | `watchedDomain_id`
path · required | integer | The watchedDomain's ID. | **Errors:** [`unauthenticated`](../errors.md#unauthenticated), [`scope_missing`](../errors.md#scope_missing), [`wrong_organization`](../errors.md#wrong_organization), [`test_token_required`](../errors.md#test_token_required), [`test_token_sandbox_only`](../errors.md#test_token_sandbox_only), [`permission_denied`](../errors.md#permission_denied), [`not_found`](../errors.md#not_found), [`rate_limited`](../errors.md#rate_limited)
**Request** ```sh curl "https://api.infranest.io/api/organizations/42/watched-domains/1/registration-logs" \ -H "Authorization: Bearer $INFRANEST_TOKEN" \ -H "Accept: application/json" ``` **Response** · 200 ```json { "current_page": 1, "data": [], "first_page_url": "http://localhost/api/organizations/1/watched-domains/1/registration-logs?page=1", "from": null, "last_page": 1, "last_page_url": "http://localhost/api/organizations/1/watched-domains/1/registration-logs?page=1", "links": [ { "url": null, "label": "« Previous", "page": null, "active": false }, { "url": "http://localhost/api/organizations/1/watched-domains/1/registration-logs?page=1", "label": "1", "page": 1, "active": true } ], "next_page_url": null, "path": "http://localhost/api/organizations/1/watched-domains/1/registration-logs", "per_page": 50, "prev_page_url": null, "to": null, "total": 0 } ```
--- ### List WHOIS changes {#get-organizations-organization-watched-domains-watcheddomain-whois-changes}
`GET` `/organizations/{organization}/watched-domains/{watchedDomain}/whois-changes` **Scope:** `drop-catch.read` · **Changes data:** no Changes detected in the watched domain’s WHOIS record, newest first, 50 per page. | Field | Type | Notes | |---|---|---| | `organization_id`
path · required | integer | Your organization's ID. | | `watchedDomain_id`
path · required | integer | The watchedDomain's ID. | **Errors:** [`unauthenticated`](../errors.md#unauthenticated), [`scope_missing`](../errors.md#scope_missing), [`wrong_organization`](../errors.md#wrong_organization), [`test_token_required`](../errors.md#test_token_required), [`test_token_sandbox_only`](../errors.md#test_token_sandbox_only), [`permission_denied`](../errors.md#permission_denied), [`not_found`](../errors.md#not_found), [`rate_limited`](../errors.md#rate_limited)
**Request** ```sh curl "https://api.infranest.io/api/organizations/42/watched-domains/1/whois-changes" \ -H "Authorization: Bearer $INFRANEST_TOKEN" \ -H "Accept: application/json" ``` **Response** · 200 ```json { "current_page": 1, "data": [ { "id": 1, "watched_domain_id": 1, "field": "status", "old_value": "clientTransferProhibited", "new_value": "redemptionPeriod", "changed_at": "2026-01-11T12:00:00.000000Z" }, { "id": 2, "watched_domain_id": 1, "field": "expiry", "old_value": "2026-08-14", "new_value": "2026-08-14", "changed_at": "2025-12-20T12:00:00.000000Z" } ], "first_page_url": "http://localhost/api/organizations/1/watched-domains/1/whois-changes?page=1", "from": 1, "last_page": 1, "last_page_url": "http://localhost/api/organizations/1/watched-domains/1/whois-changes?page=1", "links": [ { "url": null, "label": "« Previous", "page": null, "active": false }, { "url": "http://localhost/api/organizations/1/watched-domains/1/whois-changes?page=1", "label": "1", "page": 1, "active": true } ], "next_page_url": null, "path": "http://localhost/api/organizations/1/watched-domains/1/whois-changes", "per_page": 50, "prev_page_url": null, "to": 3, "total": 3 } ```
--- ### Check whether you already hold a domain {#get-organizations-organization-watched-domains-held}
`GET` `/organizations/{organization}/watched-domains/held` **Scope:** `drop-catch.read` · **Changes data:** no The domain in your organization matching `name` and `tld` (both required) that you hold or are registering, or null when there is none. | Field | Type | Notes | |---|---|---| | `organization_id`
path · required | integer | Your organization's ID. | | `name`
body · required | string | Must not be greater than 63 characters. | | `tld`
body · required | string | Must not be greater than 63 characters. | **Errors:** [`unauthenticated`](../errors.md#unauthenticated), [`scope_missing`](../errors.md#scope_missing), [`wrong_organization`](../errors.md#wrong_organization), [`test_token_required`](../errors.md#test_token_required), [`test_token_sandbox_only`](../errors.md#test_token_sandbox_only), [`permission_denied`](../errors.md#permission_denied), [`not_found`](../errors.md#not_found), [`rate_limited`](../errors.md#rate_limited)
**Request** ```sh curl "https://api.infranest.io/api/organizations/42/watched-domains/held?name=www&tld=%3Ctld%3E" \ -H "Authorization: Bearer $INFRANEST_TOKEN" \ -H "Accept: application/json" ``` **Response** · 200 ```json { "domain": { "id": 1, "full_name": "northwind.com", "status": "active", "tenure": "held", "registrar": "Namecheap", "expires_at": "2026-02-02T00:00:00+00:00", "auto_renew": true } } ```
--- ### List registrars for an extension {#get-organizations-organization-watched-domains-registrars}
`GET` `/organizations/{organization}/watched-domains/registrars` **Scope:** `drop-catch.read` · **Changes data:** no The connected registrar accounts that can register a caught domain. With `tld`, each says whether it carries that extension and what it charges, and `requirements` lists what the extension asks of a registrant, or null when nothing is on file. | Field | Type | Notes | |---|---|---| | `organization_id`
path · required | integer | Your organization's ID. | **Errors:** [`unauthenticated`](../errors.md#unauthenticated), [`scope_missing`](../errors.md#scope_missing), [`wrong_organization`](../errors.md#wrong_organization), [`test_token_required`](../errors.md#test_token_required), [`test_token_sandbox_only`](../errors.md#test_token_sandbox_only), [`permission_denied`](../errors.md#permission_denied), [`not_found`](../errors.md#not_found), [`rate_limited`](../errors.md#rate_limited)
**Request** ```sh curl "https://api.infranest.io/api/organizations/42/watched-domains/registrars" \ -H "Authorization: Bearer $INFRANEST_TOKEN" \ -H "Accept: application/json" ``` **Response** · 200 ```json { "registrars": [ { "credential_id": 2, "provider": "cloudflare", "provider_name": "Cloudflare", "provider_label": "Cloudflare DNS", "supports_tld": null, "price": null, "can_race": false }, { "credential_id": 3, "provider": "namecheap", "provider_name": "Namecheap", "provider_label": "Namecheap Registrar", "supports_tld": null, "price": null, "can_race": false } ], "requirements": null } ```
--- ### List registrars available for catching {#get-organizations-organization-watched-domains-registrars-identities}
`GET` `/organizations/{organization}/watched-domains/registrars/identities` **Scope:** `drop-catch.read` · **Changes data:** no The connected registrar accounts that can register a caught domain, by name, and whether each may race for it. Makes no calls to the registrars. | Field | Type | Notes | |---|---|---| | `organization_id`
path · required | integer | Your organization's ID. | **Errors:** [`unauthenticated`](../errors.md#unauthenticated), [`scope_missing`](../errors.md#scope_missing), [`wrong_organization`](../errors.md#wrong_organization), [`test_token_required`](../errors.md#test_token_required), [`test_token_sandbox_only`](../errors.md#test_token_sandbox_only), [`permission_denied`](../errors.md#permission_denied), [`not_found`](../errors.md#not_found), [`rate_limited`](../errors.md#rate_limited)
**Request** ```sh curl "https://api.infranest.io/api/organizations/42/watched-domains/registrars/identities" \ -H "Authorization: Bearer $INFRANEST_TOKEN" \ -H "Accept: application/json" ``` **Response** · 200 ```json { "registrars": [ { "credential_id": 2, "provider": "cloudflare", "provider_name": "Cloudflare", "provider_label": "Cloudflare DNS", "can_race": false }, { "credential_id": 3, "provider": "namecheap", "provider_name": "Namecheap", "provider_label": "Namecheap Registrar", "can_race": false } ] } ```
## Whois servers ### List custom WHOIS servers {#get-organizations-organization-whois-servers}
`GET` `/organizations/{organization}/whois-servers` **Scope:** `drop-catch.read` · **Changes data:** no The WHOIS servers you set per extension to use instead of the default ones, sorted by extension. | Field | Type | Notes | |---|---|---| | `organization_id`
path · required | integer | Your organization's ID. | **Errors:** [`unauthenticated`](../errors.md#unauthenticated), [`scope_missing`](../errors.md#scope_missing), [`wrong_organization`](../errors.md#wrong_organization), [`test_token_required`](../errors.md#test_token_required), [`test_token_sandbox_only`](../errors.md#test_token_sandbox_only), [`permission_denied`](../errors.md#permission_denied), [`not_found`](../errors.md#not_found), [`rate_limited`](../errors.md#rate_limited)
**Request** ```sh curl "https://api.infranest.io/api/organizations/42/whois-servers" \ -H "Authorization: Bearer $INFRANEST_TOKEN" \ -H "Accept: application/json" ``` **Response** · 200 ```json [ { "id": 1, "organization_id": 1, "tld": "dev", "server": "whois.nic.google", "note": "Override for .dev lookups.", "created_at": "2026-01-15T12:00:00.000000Z", "updated_at": "2026-01-15T12:00:00.000000Z" } ] ```