Skip to content
Start here

Get Transfer Status

registrar.transfer_in_status.get(strdomain_name, TransferInStatusGetParams**kwargs) -> WorkflowStatus
GET/accounts/{account_id}/registrar/registrations/{domain_name}/transfer-in-status

Returns the current status of a domain transfer workflow.

Use this endpoint to poll transfer progress after initiating a transfer with POST /accounts/{account_id}/registrar/registrations/{domain_name}/transfer-in. The URL is provided in the links.self field of the transfer response.

Transfer timelines

Transfers typically take 1–10 days due to ICANN-mandated approval windows.

Workflow states

Terminal states: succeeded and failed are terminal and always have completed: true.

Non-terminal states:

  • in_progress: Transfer has been submitted to the registry and is being processed. Continue polling.
  • blocked: The workflow is waiting on the losing registrar or registry to release the domain. This is the most common state for transfers and is entirely normal — it means the ICANN transfer approval window is in effect. The losing registrar has up to 5 days to approve or reject. Continue polling with longer intervals (e.g., every 30–60 minutes).
  • action_required: The user needs to take action (e.g., the FOA email needs to be accepted). See context for details on what is needed.
  • pending: Transfer workflow created but not yet started processing.

Polling guidance

Adjust your polling interval based on the current workflow state:

  • pending or in_progress: Poll every 30 seconds.
  • blocked: The transfer is waiting on a third party (e.g., losing registrar approval). Poll every 30–60 minutes.
  • action_required: Stop polling. The workflow will not advance until the user takes action. Check context for details on what is needed.
  • succeeded or failed: Terminal — stop polling.
Security
API Token

The preferred authorization scheme for interacting with the Cloudflare API. Create a token.

Example:Authorization: Bearer Sn3lZJTBX6kkg7OdcBUAxOO963GEIyGQqnFTOFYY
API Email + API Key

The previous authorization scheme for interacting with the Cloudflare API, used in conjunction with a Global API key.

Example:X-Auth-Email: user@example.com

The previous authorization scheme for interacting with the Cloudflare API. When possible, use API tokens instead of Global API keys.

Example:X-Auth-Key: 144c9defac04969c7bfad8efaa8ea194
ParametersExpand Collapse
account_id: str

Identifier.

maxLength32
domain_name: str

Provides a fully qualified domain name (FQDN), including the extension (e.g., example.com, mybrand.app). The domain name uniquely identifies a registration. Cloudflare permits only one registration per domain, making the domain name a natural idempotency key for registration requests.

ReturnsExpand Collapse
class WorkflowStatus: …

Status of an async registration workflow.

completed: bool

Indicates whether the workflow reached a terminal state. A succeeded or failed state returns true; pending, in_progress, action_required, and blocked return false.

created_at: datetime
formatdate-time
state: Literal["pending", "in_progress", "action_required", 3 more]

Describes the workflow lifecycle state.

  • pending: The workflow awaits processing.
  • in_progress: Processing started. Continue polling links.self. An internal deadline limits the duration of this state.
  • action_required: The workflow pauses for user action. See context.action for details. Stop automated polling until the user completes the required action.
  • blocked: A third party, such as the domain extension’s registry or a losing registrar, prevents progress. Continue polling because the block may resolve when the third party responds.
  • succeeded: Terminal state. The operation completed successfully. completed equals true. For registrations, context.registration contains the resulting registration resource.
  • failed: Terminal state. The operation failed. completed equals true. See error.code and error.message for the reason. Require user review before retrying.
One of the following:
"pending"
"in_progress"
"action_required"
"blocked"
"succeeded"
"failed"
updated_at: datetime
formatdate-time
context: Optional[Dict[str, object]]

Provides workflow-specific data.

For domain-centric workflows, context.domain_name identifies the workflow subject.

error: Optional[Error]

Provides error details when a workflow reaches the failed state. The workflow type (registration, update, etc.) and underlying registry response determine the specific codes and messages. Workflow error codes differ from immediate HTTP error errors[].code values in non-2xx responses. Surface error.message to the user for context.

code: str

Machine-readable error code identifying the failure reason.

message: str

Human-readable explanation of the failure. May include registry-specific details.

Get Transfer Status

import os
from cloudflare import Cloudflare

client = Cloudflare(
    api_token=os.environ.get("CLOUDFLARE_API_TOKEN"),  # This is the default and can be omitted
)
workflow_status = client.registrar.transfer_in_status.get(
    domain_name="example.com",
    account_id="023e105f4ecef8ad9ca31a8372d0c353",
)
print(workflow_status.completed)
{
  "errors": [],
  "messages": [],
  "result": {
    "completed": false,
    "context": {
      "domain_name": "example.com",
      "foa_required": true,
      "transfer_status": "awaiting_foa"
    },
    "created_at": "2025-10-27T10:00:00Z",
    "links": {
      "resource": "/accounts/abc/registrar/registrations/example.com",
      "self": "/accounts/abc/registrar/registrations/example.com/transfer-in-status"
    },
    "state": "action_required",
    "updated_at": "2025-10-27T12:00:00Z"
  },
  "success": true
}
{
  "errors": [],
  "messages": [],
  "result": {
    "completed": false,
    "context": {
      "domain_name": "example.com",
      "transfer_status": "awaiting_approval"
    },
    "created_at": "2025-10-27T10:00:00Z",
    "links": {
      "resource": "/accounts/abc/registrar/registrations/example.com",
      "self": "/accounts/abc/registrar/registrations/example.com/transfer-in-status"
    },
    "state": "blocked",
    "updated_at": "2025-10-28T14:30:00Z"
  },
  "success": true
}
{
  "errors": [],
  "messages": [],
  "result": {
    "completed": true,
    "context": {
      "domain_name": "example.com"
    },
    "created_at": "2025-10-27T10:00:00Z",
    "error": {
      "code": "transfer_rejected",
      "message": "Transfer rejected"
    },
    "links": {
      "resource": "/accounts/abc/registrar/registrations/example.com",
      "self": "/accounts/abc/registrar/registrations/example.com/transfer-in-status"
    },
    "state": "failed",
    "updated_at": "2025-10-30T12:00:00Z"
  },
  "success": true
}
{
  "errors": [],
  "messages": [],
  "result": {
    "completed": false,
    "context": {
      "domain_name": "example.com"
    },
    "created_at": "2025-10-27T10:00:00Z",
    "links": {
      "resource": "/accounts/abc/registrar/registrations/example.com",
      "self": "/accounts/abc/registrar/registrations/example.com/transfer-in-status"
    },
    "state": "in_progress",
    "updated_at": "2025-10-27T10:05:00Z"
  },
  "success": true
}
{
  "errors": [],
  "messages": [],
  "result": {
    "completed": true,
    "context": {
      "domain_name": "example.com"
    },
    "created_at": "2025-10-27T10:00:00Z",
    "links": {
      "resource": "/accounts/abc/registrar/registrations/example.com",
      "self": "/accounts/abc/registrar/registrations/example.com/transfer-in-status"
    },
    "state": "succeeded",
    "updated_at": "2025-10-30T08:15:00Z"
  },
  "success": true
}
{
  "errors": [
    {
      "code": 10000,
      "message": "No workflow found for example.com"
    }
  ],
  "messages": [],
  "result": null,
  "success": false
}
Returns Examples
{
  "errors": [],
  "messages": [],
  "result": {
    "completed": false,
    "context": {
      "domain_name": "example.com",
      "foa_required": true,
      "transfer_status": "awaiting_foa"
    },
    "created_at": "2025-10-27T10:00:00Z",
    "links": {
      "resource": "/accounts/abc/registrar/registrations/example.com",
      "self": "/accounts/abc/registrar/registrations/example.com/transfer-in-status"
    },
    "state": "action_required",
    "updated_at": "2025-10-27T12:00:00Z"
  },
  "success": true
}
{
  "errors": [],
  "messages": [],
  "result": {
    "completed": false,
    "context": {
      "domain_name": "example.com",
      "transfer_status": "awaiting_approval"
    },
    "created_at": "2025-10-27T10:00:00Z",
    "links": {
      "resource": "/accounts/abc/registrar/registrations/example.com",
      "self": "/accounts/abc/registrar/registrations/example.com/transfer-in-status"
    },
    "state": "blocked",
    "updated_at": "2025-10-28T14:30:00Z"
  },
  "success": true
}
{
  "errors": [],
  "messages": [],
  "result": {
    "completed": true,
    "context": {
      "domain_name": "example.com"
    },
    "created_at": "2025-10-27T10:00:00Z",
    "error": {
      "code": "transfer_rejected",
      "message": "Transfer rejected"
    },
    "links": {
      "resource": "/accounts/abc/registrar/registrations/example.com",
      "self": "/accounts/abc/registrar/registrations/example.com/transfer-in-status"
    },
    "state": "failed",
    "updated_at": "2025-10-30T12:00:00Z"
  },
  "success": true
}
{
  "errors": [],
  "messages": [],
  "result": {
    "completed": false,
    "context": {
      "domain_name": "example.com"
    },
    "created_at": "2025-10-27T10:00:00Z",
    "links": {
      "resource": "/accounts/abc/registrar/registrations/example.com",
      "self": "/accounts/abc/registrar/registrations/example.com/transfer-in-status"
    },
    "state": "in_progress",
    "updated_at": "2025-10-27T10:05:00Z"
  },
  "success": true
}
{
  "errors": [],
  "messages": [],
  "result": {
    "completed": true,
    "context": {
      "domain_name": "example.com"
    },
    "created_at": "2025-10-27T10:00:00Z",
    "links": {
      "resource": "/accounts/abc/registrar/registrations/example.com",
      "self": "/accounts/abc/registrar/registrations/example.com/transfer-in-status"
    },
    "state": "succeeded",
    "updated_at": "2025-10-30T08:15:00Z"
  },
  "success": true
}
{
  "errors": [
    {
      "code": 10000,
      "message": "No workflow found for example.com"
    }
  ],
  "messages": [],
  "result": null,
  "success": false
}