/api/v2/domains/{id}/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 .se, .nu, and .test domains, changing a valid Swedish 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".
If the current identifier cannot be verified by BankID and registry contact-details verification is currently required, the registrant identifier can be corrected directly.
Successful responses echo the full contacts payload with current action gates and contactDetailsVerification.
write:domains
Authenticate with an API key in the Authorization: Bearer <token> header.
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.
Authorization Bearer <token> Accept application/json Content-Type application/json registrant null admin null tech null billing null 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 contactDetailsVerification null Fresh registry contact-details verification state for this domain contact resource, or null when no contact review is currently required.
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 string · nullable required
· Example: null Nullable: may be null when not applicable.
actions.canEditContacts.code string · nullable
· 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 string · nullable required
· Example: null Nullable: may be null when not applicable.
actions.requiresIdentityVerification.code string · nullable
· Example: pending_order Machine-readable reason code when an action is blocked.
updateOutcome null 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 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 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 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 Retry-After seconds plus X-RateLimit-* headers. 10 fields 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 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 https://cloud.hostup.se/api/v2/domains/{id}/contacts 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": "anna@example.se",
"phoneNumber": "+46700000000",
"street": "Examplegatan 1",
"city": "Stockholm",
"postalCode": "12345",
"countryCode": "SE"
}
}' {
"registrant": {
"firstName": "Anna",
"lastName": "Svensson",
"companyName": "Example AB",
"email": "anna@example.se",
"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",
"contactDetailsVerification": null,
"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"
}
} {
"registrant": {
"firstName": "Anna",
"lastName": "Svensson",
"companyName": "Example AB",
"email": "anna@example.se",
"phoneNumber": "+46700000000",
"street": "Examplegatan 1",
"city": "Stockholm",
"postalCode": "12345",
"countryCode": "SE"
}
}