# Troubleshoot domain registration (https://developer.godaddy.com/en/docs/api-users/troubleshoot-domain-registration)



## Overview

This page covers errors you're likely to encounter when registering a domain through the GoDaddy Domains API. Registration is asynchronous and charges the account — read the [full registration guide](https://developer.godaddy.com/docs/api-users/purchase-domains/register) before troubleshooting.

## Registration stays in `EXECUTING` status

**Symptom:** `POST /v3/domains/registrations` returns `202 Accepted` and the status field shows `EXECUTING`. The status never changes to `COMPLETED`.

**Cause:** Registration is asynchronous. `EXECUTING` is the normal initial state — the operation is in progress on GoDaddy's side. It is not an error.

**Resolution:**

* Poll `GET /v3/domains/registrations/{registrationId}` every few seconds until `status` reaches `COMPLETED` or `FAILED`.
* Do not resubmit the registration while `status` is `EXECUTING`. Resubmitting can result in duplicate charges.
* If `status` is `FAILED`, inspect the `error` field for the specific failure reason.
* Use the `Idempotency-Key` header on the original request — if your client retries due to a network error, the server returns the original response without charging again.

## `422` with `QUOTE_EXPIRED`

**Symptom:** `POST /v3/domains/registrations` returns `422` with `code: "QUOTE_EXPIRED"`.

**Cause:** The `quoteToken` from `POST /v3/domains/registration-quotes` has expired. Quote tokens are short-lived and must be used promptly.

**Resolution:**

1. Call `POST /v3/domains/registration-quotes` again with the same domain and contact details to get a fresh `quoteToken`.
2. Resubmit `POST /v3/domains/registrations` with the new `quoteToken`.
3. If you're seeing this frequently, reduce the time between quoting and registering — keep it under a minute in production flows.

## `422` with a `fields` validation error

**Symptom:** `POST /v3/domains/registrations` returns `422` with a `fields` array listing specific field errors.

**Cause:** The request body failed field-level validation. Common causes:

* Missing or invalid registrant contact: `email`, `phone`, `addressMailing`, or `nameFirst`/`nameLast` not provided or malformed.
* Domain name format error: unsupported characters, missing TLD, or invalid punycode.
* TLD-specific requirements not met: some TLDs require additional contact fields or eligibility verification.

**Resolution:**

* Inspect each object in the `fields` array — the `path` field identifies which request property failed and `message` explains why.
* Verify all required registrant contact fields are present. Go to [Register a domain — contacts](https://developer.godaddy.com/docs/api-users/purchase-domains/register#registrant-contact) for the required schema.
* For IDN (internationalized) domains, the domain name must be in punycode A-label form.

## `403` with `ACCOUNT_NOT_ELIGIBLE`

**Symptom:** `POST /v3/domains/registrations` or `POST /v3/domains/registration-quotes` returns `403` with `code: "ACCOUNT_NOT_ELIGIBLE"`.

**Cause:** The account lacks a funded billing method, or is not eligible to register the specific TLD.

**Resolution:**

* Add a payment method at [account.godaddy.com/payment-methods](https://account.godaddy.com/payment-methods). Go to [Set up a payment profile](https://developer.godaddy.com/docs/api-users/payment-profile).
* Some TLDs (country-code TLDs, restricted TLDs) require additional account eligibility. Check the TLD-specific agreements returned by `GET /v3/domains/agreements?tlds={tld}`.

## Duplicate charge on retry

**Symptom:** A network failure caused the client to retry the registration, and the account was charged twice.

**Cause:** The first request succeeded server-side but the response was lost in transit. The retry created a second registration.

**Resolution:**

* Always include an `Idempotency-Key` header with a UUID that's stable for the lifetime of a single registration intent.
* If a request returns a network error (not a `4xx` or `5xx`), retry with the same `Idempotency-Key`. The server returns the original response without charging again.
* If a duplicate charge already occurred, contact GoDaddy support with the `registrationId` values.

## Domain not available

**Symptom:** `POST /v3/domains/registrations` returns `422` with a code indicating the domain isn't available.

**Cause:** The domain was registered or reserved by someone else between your availability check and the registration attempt, or the domain is in a status that prevents registration (for example, redemption period).

**Resolution:**

* Call `GET /v3/domains/check-availability` immediately before registering — don't cache availability results.
* If the exact domain is unavailable, use the suggestions endpoint to find alternatives.
* Go to [Search domain availability](https://developer.godaddy.com/docs/api-users/search-domains) for the availability check workflow.

## `422` with `NO_PAYMENT_PROFILE`

**Symptom:** API returns `422` with `code: "NO_PAYMENT_PROFILE"`.

**Cause:** The account has no payment method on file. Registration charges the billing method and cannot proceed without one.

**Resolution:**

* Add a payment method. Go to [Set up a payment profile](https://developer.godaddy.com/docs/api-users/payment-profile).
* Once a payment method is on file, retry the registration with a fresh `quoteToken`.
