## Update Registration `client.Registrar.Registrations.Edit(ctx, domainName, params) (*WorkflowStatus, error)` **patch** `/accounts/{account_id}/registrar/registrations/{domain_name}` Updates an existing domain registration. By default, the server holds the connection for a bounded, server-defined amount of time while the update completes. Most updates finish within this window and return `200 OK` with a completed workflow status. If the update is still processing after this synchronous wait window, the server returns `202 Accepted`. Poll the URL in `links.self` to track progress. To skip the wait and receive an immediate `202`, send `Prefer: respond-async`. This endpoint currently supports updating `auto_renew` only. ### Parameters - `domainName string` Fully qualified domain name (FQDN) including the extension (e.g., `example.com`, `mybrand.app`). The domain name uniquely identifies a registration — the same domain cannot be registered twice, making it a natural idempotency key for registration requests. - `params RegistrationEditParams` - `AccountID param.Field[string]` Path param: Identifier - `AutoRenew param.Field[bool]` Body param: Enable or disable automatic renewal. Setting this field to `true` authorizes Cloudflare to charge the account's default payment method up to 30 days before domain expiry to renew the domain automatically. Renewal pricing may change over time based on registry pricing. - `Prefer param.Field[RegistrationEditParamsPrefer]` Header param: Set to `respond-async` to receive an immediate `202 Accepted` without waiting for the operation to complete (RFC 7240). - `const RegistrationEditParamsPreferRespondAsync RegistrationEditParamsPrefer = "respond-async"` ### Returns - `type WorkflowStatus struct{…}` Status of an async registration workflow. - `Completed bool` Whether the workflow has reached a terminal state. `true` when `state` is `succeeded` or `failed`. `false` for `pending`, `in_progress`, `action_required`, and `blocked`. - `CreatedAt Time` - `Links WorkflowStatusLinks` - `Self string` URL to this status resource. - `Resource string` URL to the domain resource. - `State WorkflowStatusState` Workflow lifecycle state. - `pending`: Workflow has been created but not yet started processing. - `in_progress`: Actively processing. Continue polling `links.self`. The workflow has an internal deadline and will not remain in this state indefinitely. - `action_required`: Paused — requires action by the user (not the system). See `context.action` for what is needed. An automated polling loop must break on this state; it will not resolve on its own without user intervention. - `blocked`: The workflow cannot make progress due to a third party such as the domain extension's registry or a losing registrar. No user action will help. Continue polling — the block may resolve when the third party responds. - `succeeded`: Terminal. The operation completed successfully. `completed` will be `true`. For registrations, `context.registration` contains the resulting registration resource. - `failed`: Terminal. The operation failed. `completed` will be `true`. See `error.code` and `error.message` for the reason. Do not auto-retry without user review. - `const WorkflowStatusStatePending WorkflowStatusState = "pending"` - `const WorkflowStatusStateInProgress WorkflowStatusState = "in_progress"` - `const WorkflowStatusStateActionRequired WorkflowStatusState = "action_required"` - `const WorkflowStatusStateBlocked WorkflowStatusState = "blocked"` - `const WorkflowStatusStateSucceeded WorkflowStatusState = "succeeded"` - `const WorkflowStatusStateFailed WorkflowStatusState = "failed"` - `UpdatedAt Time` - `Context map[string, unknown]` Workflow-specific data for this workflow. The workflow subject is identified by `context.domain_name` for domain-centric workflows. - `Error WorkflowStatusError` Error details when a workflow reaches the `failed` state. The specific error codes and messages depend on the workflow type (registration, update, etc.) and the underlying registry response. These workflow error codes are separate from immediate HTTP error `errors[].code` values returned by non-2xx responses. Surface `error.message` to the user for context. - `Code string` Machine-readable error code identifying the failure reason. - `Message string` Human-readable explanation of the failure. May include registry-specific details. ### Example ```go package main import ( "context" "fmt" "github.com/cloudflare/cloudflare-go" "github.com/cloudflare/cloudflare-go/option" "github.com/cloudflare/cloudflare-go/registrar" ) func main() { client := cloudflare.NewClient( option.WithAPIToken("Sn3lZJTBX6kkg7OdcBUAxOO963GEIyGQqnFTOFYY"), ) workflowStatus, err := client.Registrar.Registrations.Edit( context.TODO(), "example.com", registrar.RegistrationEditParams{ AccountID: cloudflare.F("023e105f4ecef8ad9ca31a8372d0c353"), }, ) if err != nil { panic(err.Error()) } fmt.Printf("%+v\n", workflowStatus.Completed) } ``` #### Response ```json { "errors": [ { "code": 1000, "message": "message", "documentation_url": "documentation_url", "source": { "pointer": "pointer" } } ], "messages": [ { "code": 1000, "message": "message", "documentation_url": "documentation_url", "source": { "pointer": "pointer" } } ], "result": { "completed": false, "created_at": "2019-12-27T18:11:19.117Z", "links": { "self": "/accounts/{account_id}/registrar/registrations/example.com/registration-status", "resource": "/accounts/{account_id}/registrar/registrations/example.com" }, "state": "in_progress", "updated_at": "2019-12-27T18:11:19.117Z", "context": { "foo": "bar" }, "error": { "code": "registry_rejected", "message": "Registry rejected the request." } }, "success": true } ```