Update domain contacts

Update one or more contact roles on a domain. This is an update endpoint, not a contact creation endpoint: send at least one of registrant, admin, tech, or billing, and only the documented camelCase v2 contact fields. Unknown fields and legacy internal contact aliases are rejected on this per-domain route. For…

Read full description Hide full description

Update one or more contact roles on a domain. This is an update endpoint, not a contact creation endpoint: send at least one of registrant, admin, tech, or billing, and only the documented camelCase v2 contact fields. Unknown fields and legacy internal contact aliases are rejected on this per-domain route. For .se, .nu, and .test domains, changing the registrant personal or organisation number requires identity verification; when the identifier is preserved instead of applied, the response reports this in updateOutcome.registrantRegistrationIdentifierApplied: false and updateOutcome.registrantRegistrationIdentifierBlockedReason: "identity_verification_required". Successful responses echo the full contacts payload with current action gates.

Domains & DNS Domains

Authentication

Required API scope: write:domains

Use Authorization: Bearer <token> for API keys. Dashboard sessions may also use hostup_session.

Context

Path Parameters

id string required Example: dom_01hxa3b4c5d6e7f8g9h0j1k2m3

Public domain ID. Get it from GET /api/v2/domains `data[].id`. Do not invent this value; use the exact ID returned by the referenced API response.

Headers

Accept Example
Content-Type Example

Body

required
application/json
registrant null
admin null
tech null
billing null

Responses

200 Contacts updated. Wrapperless v2 response.
registrant null
admin null
tech null
billing null
draft boolean · Example: false

True for pending-registration Swedish TLD drafts where registrant contact data can still be edited before payment or registry sync.

serviceStatus string · enum · Example: active

Canonical v2 service lifecycle status for the domain contact resource.

active
suspended
expired
pending
cancelled
terminated
unknown
actions object
actions.canEditContacts object required

False while contact changes are locked, for example during an in-progress transfer.

actions.canEditContacts.allowed boolean required · Example: true
actions.canEditContacts.reason stringnull required · Example: null
actions.canEditContacts.code stringnull · Example: pending_order

Machine-readable reason code when an action is blocked.

actions.requiresIdentityVerification object required

`allowed: true` means identity verification, currently BankID for .se/.nu/.test registrant identifier changes, is required before the registrant personal or organisation number can be updated.

actions.requiresIdentityVerification.allowed boolean required · Example: true
actions.requiresIdentityVerification.reason stringnull required · Example: null
actions.requiresIdentityVerification.code stringnull · Example: pending_order

Machine-readable reason code when an action is blocked.

updateOutcome null
400 Invalid request. The response body is an RFC 7807 Problem Details document.
type string · Example: https://developer.hostup.se/errors/invalid_request
title string · Example: Validation failed
status integer · Example: 400
detail string · Example: The request body failed validation.
code string · Example: invalid_request

Stable machine-readable code. Branch on this field, not on `detail`.

instance string · Example: /api/v2/orders
requestId string · Example: req_01hxa3b4c5d6e7f8g9h0j1k2m3
timestamp string · Example: 2026-04-27T12:34:56.000Z
errors array<object>

Field-level validation errors when `code` is `invalid_request`.

errors[].pointer string required · Example: /items/0/eppCode
errors[].detail string required · Example: `eppCode` is required for this transfer.
errors[].code string required · Example: missing_required
extensions object
401 Unauthorized. Authentication is required.
type string · Example: https://developer.hostup.se/errors/invalid_request
title string · Example: Validation failed
status integer · Example: 400
detail string · Example: The request body failed validation.
code string · Example: invalid_request

Stable machine-readable code. Branch on this field, not on `detail`.

instance string · Example: /api/v2/orders
requestId string · Example: req_01hxa3b4c5d6e7f8g9h0j1k2m3
timestamp string · Example: 2026-04-27T12:34:56.000Z
errors array<object>

Field-level validation errors when `code` is `invalid_request`.

errors[].pointer string required · Example: /items/0/eppCode
errors[].detail string required · Example: `eppCode` is required for this transfer.
errors[].code string required · Example: missing_required
extensions object
403 Forbidden. The caller lacks a required scope or does not own the resource.
type string · Example: https://developer.hostup.se/errors/invalid_request
title string · Example: Validation failed
status integer · Example: 400
detail string · Example: The request body failed validation.
code string · Example: invalid_request

Stable machine-readable code. Branch on this field, not on `detail`.

instance string · Example: /api/v2/orders
requestId string · Example: req_01hxa3b4c5d6e7f8g9h0j1k2m3
timestamp string · Example: 2026-04-27T12:34:56.000Z
errors array<object>

Field-level validation errors when `code` is `invalid_request`.

errors[].pointer string required · Example: /items/0/eppCode
errors[].detail string required · Example: `eppCode` is required for this transfer.
errors[].code string required · Example: missing_required
extensions object
404 Not found. The resource does not exist or is not owned by the caller.
type string · Example: https://developer.hostup.se/errors/invalid_request
title string · Example: Validation failed
status integer · Example: 400
detail string · Example: The request body failed validation.
code string · Example: invalid_request

Stable machine-readable code. Branch on this field, not on `detail`.

instance string · Example: /api/v2/orders
requestId string · Example: req_01hxa3b4c5d6e7f8g9h0j1k2m3
timestamp string · Example: 2026-04-27T12:34:56.000Z
errors array<object>

Field-level validation errors when `code` is `invalid_request`.

errors[].pointer string required · Example: /items/0/eppCode
errors[].detail string required · Example: `eppCode` is required for this transfer.
errors[].code string required · Example: missing_required
extensions object
429 Rate limited. Retry after the limit resets. 429 responses include `Retry-After` seconds plus `X-RateLimit-*` headers.
type string · Example: https://developer.hostup.se/errors/invalid_request
title string · Example: Validation failed
status integer · Example: 400
detail string · Example: The request body failed validation.
code string · Example: invalid_request

Stable machine-readable code. Branch on this field, not on `detail`.

instance string · Example: /api/v2/orders
requestId string · Example: req_01hxa3b4c5d6e7f8g9h0j1k2m3
timestamp string · Example: 2026-04-27T12:34:56.000Z
errors array<object>

Field-level validation errors when `code` is `invalid_request`.

errors[].pointer string required · Example: /items/0/eppCode
errors[].detail string required · Example: `eppCode` is required for this transfer.
errors[].code string required · Example: missing_required
extensions object
500 Internal error. Retry later or contact support if the issue persists.
type string · Example: https://developer.hostup.se/errors/invalid_request
title string · Example: Validation failed
status integer · Example: 400
detail string · Example: The request body failed validation.
code string · Example: invalid_request

Stable machine-readable code. Branch on this field, not on `detail`.

instance string · Example: /api/v2/orders
requestId string · Example: req_01hxa3b4c5d6e7f8g9h0j1k2m3
timestamp string · Example: 2026-04-27T12:34:56.000Z
errors array<object>

Field-level validation errors when `code` is `invalid_request`.

errors[].pointer string required · Example: /items/0/eppCode
errors[].detail string required · Example: `eppCode` is required for this transfer.
errors[].code string required · Example: missing_required
extensions object
POST https://cloud.hostup.se/api/v2/domains/{id}/contacts
For AI assistants
View as Markdown
cURL
curl -X POST "https://cloud.hostup.se/api/v2/domains/dom_01hxa3b4c5d6e7f8g9h0j1k2m3/contacts" \
  -H "Authorization: Bearer YOUR_API_KEY" \
  -H "Accept: application/json" \
  -H "Content-Type: application/json" \
  -d '{
    "registrant": {
      "firstName": "Anna",
      "lastName": "Svensson",
      "companyName": "Example AB",
      "email": "[email protected]",
      "phoneNumber": "+46700000000",
      "street": "Examplegatan 1",
      "city": "Stockholm",
      "postalCode": "12345",
      "countryCode": "SE"
    }
  }'
Response
{
  "registrant": {
    "firstName": "Anna",
    "lastName": "Svensson",
    "companyName": "Example AB",
    "email": "[email protected]",
    "phoneNumber": "+46700000000",
    "street": "Examplegatan 1",
    "address2": "5",
    "city": "Goteborg",
    "postalCode": "413 04",
    "state": "Vastra Gotaland",
    "countryCode": "SE",
    "registrationIdentifier": {
      "value": "559290-1325",
      "countryCode": "SE",
      "type": "organization_number"
    }
  },
  "admin": null,
  "tech": null,
  "billing": null,
  "draft": false,
  "serviceStatus": "active",
  "actions": {
    "canEditContacts": {
      "allowed": true,
      "reason": null
    },
    "requiresIdentityVerification": {
      "allowed": true,
      "reason": "BankID verification is required before updating the registrant's personal or organisation number."
    }
  },
  "updateOutcome": {
    "syncTriggered": false,
    "orderActivation": null,
    "registrantRegistrationIdentifierApplied": false,
    "registrantRegistrationIdentifierBlockedReason": "identity_verification_required"
  }
}
Request Body Update registrant contact fields
{
  "registrant": {
    "firstName": "Anna",
    "lastName": "Svensson",
    "companyName": "Example AB",
    "email": "[email protected]",
    "phoneNumber": "+46700000000",
    "street": "Examplegatan 1",
    "city": "Stockholm",
    "postalCode": "12345",
    "countryCode": "SE"
  }
}