# .com.es

> Rules for .com.es domains: terms, transfer, extra registry fields and ready-to-send JSON for register, renew and transfer.

Registration terms: 1–5, 10 years. Transfers in are supported with an authorisation code. 12 extra registry fields (0 required).

- **This extension has extra registry fields** — see [Extra fields](#extra-fields-tldattributes) below. Which ones you must send can depend on the value of another field.

## At a glance

| Property | Value |
| --- | --- |
| Registration terms | 1–5, 10 years |
| Renewal terms | 1–10 years |
| Transfer in | Supported · authorisation code required · pre-transfer check not available |
| Transfer lock | Not available |
| Extra registry fields | 12 — see [below](#extra-fields-tldattributes) |
| Registry documents | Not required |
| Trustee service | Not available |
| WHOIS privacy | Available |
| DNSSEC | Supported |
| IDN (non-ASCII names) | Supported |
| Name servers under the domain | Not allowed |
| Contact change by handle | Not available — send full details |
| Registry checks name servers | No |
| Test environment | Available |

What each property means and which error you get if you ignore it: [TLD catalogue](https://www.domainnameapi.com/docs/catalogue/#every-field-and-what-to-do-with-it).

## Lifecycle

In calendar days. `—` means the registry does not publish the period.

| Period | Days | What happens |
| --- | --- | --- |
| Add grace | — | Deleting a new registration within this window is refunded. |
| Auto-renew grace | — | After expiry the registry renews automatically; a second renewal in this window is refused with `10020`. |
| Redemption | 10 | After deletion, `POST /api/v1/domains/restore` still works. |
| Deletion hold | — | After redemption, before the name is released to the public. Nothing can be done. |

## Extra fields (`tldAttributes`)

Send these as a flat key/value object named `tldAttributes` on register requests. See [Extra registry fields](https://www.domainnameapi.com/docs/domains/#extra-registry-fields-tldattributes).

| Key | Required | Type | Description | Allowed values |
| --- | --- | --- | --- | --- |
| `X-ES-ADMIN-TIPO-IDENTIFICACION` | optional | DropdownList | Admin Identification Type | `3`, `1`, `0` |
| `X-ES-BILLING-TIPO-IDENTIFICACION` | optional | DropdownList | Billing Identification Type | `1`, `3`, `0` |
| `X-ES-TECH-TIPO-IDENTIFICACION` | optional | DropdownList | Tech Identification Type | `1`, `3`, `0` |
| `X-ES-TECH-IDENTIFICACION` | optional | Text | Tech Identification Number | Free text |
| `X-ES-OWNER-TIPO-IDENTIFICACION` | optional | DropdownList | Owner Identification Type | `3`, `0`, `1` |
| `X-ES-ADMIN-IDENTIFICACION` | optional | Text | Admin Identification Number | Free text |
| `X-ES-BILLING-LEGALFORM` | optional | Text | Billing Legal Form | Free text |
| `X-ES-ADMIN-LEGALFORM` | optional | Text | Admin Legal Form | Free text |
| `X-ES-BILLING-IDENTIFICACION` | optional | Text | Billing Identification Number | Free text |
| `X-ES-TECH-LEGALFORM` | optional | Text | Tech Legal Form | Free text |
| `X-ES-OWNER-IDENTIFICACION` | optional | Text | Owner Identification Number | Free text |
| `X-ES-OWNER-LEGALFORM` | optional | DropdownList | Owner Legal Form | `525`, `286`, `152`, `554`, `562`, `747`, `560`, `269`, `47`, `181`, `746`, `877`, `878`, `203`, `164`, `59`, `476`, `439`, `434`, `68`, `510`, `612`, `150`, `1`, `229`, `744`, `608`, `879`, `436`, `124`, `713`, `365`, `197`, `717`, `566`, `39`, `524`, `745` |

## Ready-to-send requests

Each request below is built from this extension's catalogue entry. Replace the domain, the handles and any value in `<angle brackets>`.

### Register

`POST /api/v1/domains/register` with contact handles you created with `POST /api/v1/contacts`. To send contact details inline instead, use [`POST /api/v1/domains/register-with-contacts`](https://www.domainnameapi.com/docs/domains/register/#registering-with-contact-details) with the same `tldAttributes`.

`tldAttributes` lists every field this extension defines. Send the ones that apply: the table above says which are required, and some become required only for a particular value of another field.

```json
{
  "domainName": "apiname.com.es",
  "period": 1,
  "nameServers": [
    "tr.apiname.com",
    "eu.apiname.com"
  ],
  "handles": [
    { "contactType": "Registrant", "handle": "D-174829301847" },
    { "contactType": "Admin", "handle": "D-174829301847" },
    { "contactType": "Tech", "handle": "D-174829301847" },
    { "contactType": "Billing", "handle": "D-174829301847" }
  ],
  "tldAttributes": {
    "X-ES-ADMIN-TIPO-IDENTIFICACION": "3",
    "X-ES-BILLING-TIPO-IDENTIFICACION": "1",
    "X-ES-TECH-TIPO-IDENTIFICACION": "1",
    "X-ES-TECH-IDENTIFICACION": "<Tech Identification Number>",
    "X-ES-OWNER-TIPO-IDENTIFICACION": "3",
    "X-ES-ADMIN-IDENTIFICACION": "<Admin Identification Number>",
    "X-ES-BILLING-LEGALFORM": "<Billing Legal Form>",
    "X-ES-ADMIN-LEGALFORM": "<Admin Legal Form>",
    "X-ES-BILLING-IDENTIFICACION": "<Billing Identification Number>",
    "X-ES-TECH-LEGALFORM": "<Tech Legal Form>",
    "X-ES-OWNER-IDENTIFICACION": "<Owner Identification Number>",
    "X-ES-OWNER-LEGALFORM": "525"
  }
}
```

### Renew

`POST /api/v1/domains/renew` — call `POST /api/v1/domains/renew/check` with the same body first. See [Renew a domain](https://www.domainnameapi.com/docs/domains/renew/).

```json
{
  "domainName": "apiname.com.es",
  "period": 1
}
```

### Transfer in

`POST /api/v1/domains/transfer`. This registry has no pre-transfer check, so call it directly. See [Transfer a domain in](https://www.domainnameapi.com/docs/domains/transfer/).

```json
{
  "domainName": "apiname.com.es",
  "authCode": "aB3!xY9-kL2pQ7",
  "period": 1
}
```

*From the TLD catalogue on 2026-11-02. For live values call `GET /api/v1/products/tlds?filterText=com.es`.*
