Domains & DNS

Read the store's custom domains and the DNS zones Tringify hosts, and edit DNS records through the Store API.

A store always has its Tringify address and can connect custom domains. A domain's status says whether its DNS is verified (pending, active, failed); connection_status says whether it serves the store over HTTPS. A domain that is never verified is removed after 7 days, and unverified_expires_at says when.

When a merchant lets Tringify manage a root domain's DNS, its zone appears under DNS zones and its records can be edited here. Records Tringify keeps for the storefront connection and email sending are returned with editable: false and cannot be changed. Adding, verifying and removing domains, and turning DNS management on or off, stay in Store Admin.

Endpoints#

List domains

GET read_domains

List the store's custom domains.

Returns custom domains with their verification status, HTTPS connection status, DNS management and storefront role. The store's Tringify address is returned as subdomain. A domain that was never verified carries unverified_expires_at, when it is removed unless verified.

Query parameters

Name Type Description
page integer

Page number.

Default: 1
Example: 1
per_page integer

Page size, bounded by the returned limits.

Example: 25
search string

Search domain names.

Example: shop

Headers

Name Type Description
Authorization required string

Bearer Store API token.

Errors

  • 401 UNAUTHORIZED

    Authorization header missing, malformed, or token invalid/expired.

  • 402 SUBSCRIPTION_REQUIRED

    The store does not have an active or trialing subscription.

  • 403 STORE_API_SCOPE_REQUIRED

    Token is valid but lacks the required scope for this call.

  • 429 RATE_LIMITED

    The token's request allowance is exhausted. Retry after the Retry-After header.

  • 400 DOMAIN_SEARCH_TOO_LONG

    The search exceeds the live maximum.

Get a domain

GET read_domains

Get one custom domain.

Includes the DNS records the domain needs while it is pending.

Path parameters

Name Type Description
domainId required string

Domain id.

Example: 3f0d9a8e-6a7b-4c2d-9e1f-5a4b3c2d1e0f

Headers

Name Type Description
Authorization required string

Bearer Store API token.

Errors

  • 401 UNAUTHORIZED

    Authorization header missing, malformed, or token invalid/expired.

  • 402 SUBSCRIPTION_REQUIRED

    The store does not have an active or trialing subscription.

  • 403 STORE_API_SCOPE_REQUIRED

    Token is valid but lacks the required scope for this call.

  • 429 RATE_LIMITED

    The token's request allowance is exhausted. Retry after the Retry-After header.

  • 404 DOMAIN_NOT_FOUND

    The domain does not belong to this store.

List DNS zones

GET read_domains

List the DNS zones Tringify hosts for the store.

A zone exists for each root domain whose DNS the merchant chose to manage with Tringify. Each zone lists its nameservers and records.

Headers

Name Type Description
Authorization required string

Bearer Store API token.

Errors

  • 401 UNAUTHORIZED

    Authorization header missing, malformed, or token invalid/expired.

  • 402 SUBSCRIPTION_REQUIRED

    The store does not have an active or trialing subscription.

  • 403 STORE_API_SCOPE_REQUIRED

    Token is valid but lacks the required scope for this call.

  • 429 RATE_LIMITED

    The token's request allowance is exhausted. Retry after the Retry-After header.

Get a DNS zone

GET read_domains

Get one hosted DNS zone with its records.

Records Tringify manages for the storefront connection and email sending are marked editable: false.

Path parameters

Name Type Description
zoneId required string

DNS zone id.

Example: 6a7b8c9d-0e1f-4a2b-8c3d-4e5f6a7b8c9d

Headers

Name Type Description
Authorization required string

Bearer Store API token.

Errors

  • 401 UNAUTHORIZED

    Authorization header missing, malformed, or token invalid/expired.

  • 402 SUBSCRIPTION_REQUIRED

    The store does not have an active or trialing subscription.

  • 403 STORE_API_SCOPE_REQUIRED

    Token is valid but lacks the required scope for this call.

  • 429 RATE_LIMITED

    The token's request allowance is exhausted. Retry after the Retry-After header.

  • 404 DOMAIN_NOT_FOUND

    The zone does not belong to this store.

Add a DNS record

POST write_domains

Add a record to a hosted DNS zone.

Supported types are A, AAAA, CNAME, MX, TXT, CAA and SRV. Names are within the zone (@ is the root). A zone holds at most 200 records. Records Tringify manages for the storefront and email cannot be changed, and a record that conflicts with another at the same name is refused. The change is queued and applied within seconds; the zone's pending flag is true until then.

Path parameters

Name Type Description
zoneId required string

DNS zone id.

Example: 6a7b8c9d-0e1f-4a2b-8c3d-4e5f6a7b8c9d

Headers

Name Type Description
Authorization required string

Bearer Store API token.

Body parameters

Name Type Description
type required string

Record type.

Example: TXT
name required string

Record name within the zone; @ for the root.

Example: @
content required string

Record value.

Example: google-site-verification=abc123
ttl integer

Time to live in seconds; 1 means automatic.

Example: 1
priority integer

Priority, for MX and SRV records.

Example: 10

Errors

  • 401 UNAUTHORIZED

    Authorization header missing, malformed, or token invalid/expired.

  • 402 SUBSCRIPTION_REQUIRED

    The store does not have an active or trialing subscription.

  • 403 STORE_API_SCOPE_REQUIRED

    Token is valid but lacks the required scope for this call.

  • 429 RATE_LIMITED

    The token's request allowance is exhausted. Retry after the Retry-After header.

  • 404 DOMAIN_NOT_FOUND

    The zone does not belong to this store.

  • 409 DOMAIN_DNS_BUSY

    Another change to this zone is still being applied; retry shortly.

  • 409 DOMAIN_DNS_RECORD_CHANGED

    The record changed since it was read, or no longer exists.

  • 409 DOMAIN_DNS_RECORD_CONFLICT

    Another record at this name conflicts.

  • 403 DOMAIN_DNS_RECORD_PROTECTED

    Tringify manages this record.

  • 400 DOMAIN_DNS_RECORD_LIMIT_REACHED

    The zone already holds the most records it can.

  • 409 DOMAIN_DNS_ACTION_UNAVAILABLE

    The zone cannot take record changes in its current state.

Update a DNS record

PUT write_domains

Change a record in a hosted DNS zone.

Supported types are A, AAAA, CNAME, MX, TXT, CAA and SRV. Names are within the zone (@ is the root). A zone holds at most 200 records. Records Tringify manages for the storefront and email cannot be changed, and a record that conflicts with another at the same name is refused. The change is queued and applied within seconds; the zone's pending flag is true until then. Send modified_on from the record you read to refuse the change if someone edited it since.

Path parameters

Name Type Description
zoneId required string

DNS zone id.

Example: 6a7b8c9d-0e1f-4a2b-8c3d-4e5f6a7b8c9d
recordId required string

DNS record id, from the zone's records.

Example: f1e2d3c4b5a6

Headers

Name Type Description
Authorization required string

Bearer Store API token.

Body parameters

Name Type Description
type required string

Record type.

Example: TXT
name required string

Record name within the zone; @ for the root.

Example: @
content required string

Record value.

Example: google-site-verification=abc123
ttl integer

Time to live in seconds; 1 means automatic.

Example: 1
priority integer

Priority, for MX and SRV records.

Example: 10
modified_on string

The record's modified_on when you read it.

Example: 2026-09-30T10:00:00Z

Errors

  • 401 UNAUTHORIZED

    Authorization header missing, malformed, or token invalid/expired.

  • 402 SUBSCRIPTION_REQUIRED

    The store does not have an active or trialing subscription.

  • 403 STORE_API_SCOPE_REQUIRED

    Token is valid but lacks the required scope for this call.

  • 429 RATE_LIMITED

    The token's request allowance is exhausted. Retry after the Retry-After header.

  • 404 DOMAIN_NOT_FOUND

    The zone does not belong to this store.

  • 409 DOMAIN_DNS_BUSY

    Another change to this zone is still being applied; retry shortly.

  • 409 DOMAIN_DNS_RECORD_CHANGED

    The record changed since it was read, or no longer exists.

  • 409 DOMAIN_DNS_RECORD_CONFLICT

    Another record at this name conflicts.

  • 403 DOMAIN_DNS_RECORD_PROTECTED

    Tringify manages this record.

  • 400 DOMAIN_DNS_RECORD_LIMIT_REACHED

    The zone already holds the most records it can.

  • 409 DOMAIN_DNS_ACTION_UNAVAILABLE

    The zone cannot take record changes in its current state.

Delete a DNS record

DELETE write_domains

Remove a record from a hosted DNS zone.

Records Tringify manages cannot be removed. The change is queued; the zone's pending flag is true until it is applied.

Path parameters

Name Type Description
zoneId required string

DNS zone id.

Example: 6a7b8c9d-0e1f-4a2b-8c3d-4e5f6a7b8c9d
recordId required string

DNS record id, from the zone's records.

Example: f1e2d3c4b5a6

Headers

Name Type Description
Authorization required string

Bearer Store API token.

Errors

  • 401 UNAUTHORIZED

    Authorization header missing, malformed, or token invalid/expired.

  • 402 SUBSCRIPTION_REQUIRED

    The store does not have an active or trialing subscription.

  • 403 STORE_API_SCOPE_REQUIRED

    Token is valid but lacks the required scope for this call.

  • 429 RATE_LIMITED

    The token's request allowance is exhausted. Retry after the Retry-After header.

  • 404 DOMAIN_NOT_FOUND

    The zone does not belong to this store.

  • 409 DOMAIN_DNS_BUSY

    Another change to this zone is still being applied; retry shortly.

  • 409 DOMAIN_DNS_RECORD_CHANGED

    The record changed since it was read, or no longer exists.

  • 409 DOMAIN_DNS_RECORD_CONFLICT

    Another record at this name conflicts.

  • 403 DOMAIN_DNS_RECORD_PROTECTED

    Tringify manages this record.

  • 400 DOMAIN_DNS_RECORD_LIMIT_REACHED

    The zone already holds the most records it can.

  • 409 DOMAIN_DNS_ACTION_UNAVAILABLE

    The zone cannot take record changes in its current state.

Webhook events#

Subscribe to domains/create, domains/update and domains/delete to follow custom domains. An update is sent when verification, the HTTPS connection, the storefront, the primary domain or a language or country pin changes; a delete names why: removed, expired (never verified in 7 days) or claimed (the domain's owner proved control in another store). Events commit with the change.

Domain added

EVENT domains/create App scope: read_domains Staff permission: settings.domains:read

Fired when a custom domain is added to the store. New domains start pending until their DNS is verified.

Payload fields

Field Type Description
domain.id string Always present
domain.domain string Selectable in the Payload builder
domain.status string Selectable in the Payload builder
domain.connection_status string Selectable in the Payload builder
domain.dns_management string Selectable in the Payload builder
domain.storefront_id string Selectable in the Payload builder
domain.is_primary boolean Selectable in the Payload builder
domain.role string Selectable in the Payload builder
domain.default_country string Selectable in the Payload builder
domain.default_locale string Selectable in the Payload builder
domain.verified_at string Selectable in the Payload builder
domain.unverified_expires_at string Selectable in the Payload builder
domain.created_at string Selectable in the Payload builder
domain.updated_at string Selectable in the Payload builder

Domain updated

EVENT domains/update App scope: read_domains Staff permission: settings.domains:read

Fired when a custom domain changes: verified, failed or disabled, assigned to or removed from a storefront, made primary, or pinned to a country. The payload carries the domain as it is now.

Payload fields

Field Type Description
domain.id string Always present
domain.domain string Selectable in the Payload builder
domain.status string Selectable in the Payload builder
domain.connection_status string Selectable in the Payload builder
domain.dns_management string Selectable in the Payload builder
domain.storefront_id string Selectable in the Payload builder
domain.is_primary boolean Selectable in the Payload builder
domain.role string Selectable in the Payload builder
domain.default_country string Selectable in the Payload builder
domain.default_locale string Selectable in the Payload builder
domain.verified_at string Selectable in the Payload builder
domain.unverified_expires_at string Selectable in the Payload builder
domain.created_at string Selectable in the Payload builder
domain.updated_at string Selectable in the Payload builder

Domain removed

EVENT domains/delete App scope: read_domains Staff permission: settings.domains:read

Fired when a custom domain is removed — by a member, after staying unverified for 7 days, or when its owner claims it from this store.

Payload fields

Field Type Description
domain.id string Always present
domain.domain string Selectable in the Payload builder
domain.reason string Selectable in the Payload builder