VitrinaAPI

Sending domains

A workspace's own domain for sending email campaigns, with its DKIM records and verification.

Beta
This may change at any time, with a changelog entry and a notice to recent callers — see versioning.

Download the full API pública projection: openapi.json.

Verify your sending domain explains this resource in prose, with runnable examples.

MethodPathWhat it does
GET/sending-domainsList sending domains
POST/sending-domainsRegister a sending domain
DELETE/sending-domains/{id}Remove a sending domain
POST/sending-domains/{id}/verifyRe-check a sending domain against SES and DNS
GET/sending-domains/quotaThe account's SES send quota

GET /sending-domains

List sending domains

Every domain the workspace has registered, verified or not.

curl https://api.vitrinadev.com/api/v1/sending-domains \
  -H "Authorization: Bearer $VITRINA_KEY"

Example response (200)

{
  "data": [
    {
      "id": "d9d9d9d9-0000-4000-8000-000000000001",
      "tenant_id": "a1a1a1a1-0000-4000-8000-000000000001",
      "domain": "mail.autosdelvalle.cl",
      "dkim_tokens": [
        "ab12cd34ef56gh78",
        "ij90kl12mn34op56",
        "qr78st90uv12wx34"
      ],
      "dkim_status": "verified",
      "mail_from_domain": "bounce.mail.autosdelvalle.cl",
      "mail_from_status": "verified",
      "verified_for_sending": true,
      "tracking_domain": "click.mail.autosdelvalle.cl",
      "tracking_ready": true,
      "last_checked_at": "2026-09-15T18:20:00.000Z",
      "created_by": "11111111-0000-4000-8000-000000000001",
      "created_at": "2026-01-10T13:00:00.000Z",
      "updated_at": "2026-09-15T18:20:00.000Z"
    }
  ],
  "meta": {
    "total": 1
  }
}

Answers: 200 · 400 · 401 · 403 · 404 · 409 · 429

POST /sending-domains

Register a sending domain

Creates the SES identity and answers the stored row plus records — the DNS entries (DKIM CNAMEs, MAIL FROM MX + TXT) the workspace must publish at its registrar before anything can send from it. Every status field starts pending; call POST /sending-domains/\{id\}/verify once DNS has propagated.

Body

FieldTypeRequiredConstraints
domainstringyesmín. 4, máx. 253
curl -X POST https://api.vitrinadev.com/api/v1/sending-domains \
  -H "Authorization: Bearer $VITRINA_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "domain": "mail.autosdelvalle.cl"
  }'

Example response (201)

{
  "data": {
    "id": "d9d9d9d9-0000-4000-8000-000000000001",
    "tenant_id": "a1a1a1a1-0000-4000-8000-000000000001",
    "domain": "mail.autosdelvalle.cl",
    "dkim_tokens": [
      "ab12cd34ef56gh78",
      "ij90kl12mn34op56",
      "qr78st90uv12wx34"
    ],
    "dkim_status": "pending",
    "mail_from_domain": "bounce.mail.autosdelvalle.cl",
    "mail_from_status": "pending",
    "verified_for_sending": false,
    "tracking_domain": "click.mail.autosdelvalle.cl",
    "tracking_ready": false,
    "last_checked_at": null,
    "created_by": "11111111-0000-4000-8000-000000000001",
    "created_at": "2026-01-10T13:00:00.000Z",
    "updated_at": "2026-09-15T18:20:00.000Z",
    "records": [
      {
        "type": "CNAME",
        "name": "ab12cd34ef56gh78._domainkey.mail.autosdelvalle.cl",
        "value": "ab12cd34ef56gh78.dkim.amazonses.com"
      },
      {
        "type": "MX",
        "name": "bounce.mail.autosdelvalle.cl",
        "value": "10 feedback-smtp.us-east-1.amazonses.com"
      },
      {
        "type": "TXT",
        "name": "bounce.mail.autosdelvalle.cl",
        "value": "v=spf1 include:amazonses.com ~all"
      }
    ]
  }
}

Answers: 201 · 400 · 401 · 403 · 404 · 409 · 429

DELETE /sending-domains/{id}

Remove a sending domain

Removes the row; the SES identity itself is not deleted, since campaigns already sent still reference it for reporting.

ParameterInTypeRequiredConstraints
idpathuuidyes
curl -X DELETE https://api.vitrinadev.com/api/v1/sending-domains/<id> \
  -H "Authorization: Bearer $VITRINA_KEY"

Answers: 204 · 400 · 401 · 403 · 404 · 409 · 429

POST /sending-domains/{id}/verify

Re-check a sending domain against SES and DNS

Re-polls SES for dkim_status / mail_from_status / verified_for_sending and re-resolves the tracking CNAME. Safe to call repeatedly while DNS is propagating; nothing here mutates the domain itself.

ParameterInTypeRequiredConstraints
idpathuuidyes
curl -X POST https://api.vitrinadev.com/api/v1/sending-domains/<id>/verify \
  -H "Authorization: Bearer $VITRINA_KEY"

Example response (200)

{
  "data": {
    "id": "d9d9d9d9-0000-4000-8000-000000000001",
    "tenant_id": "a1a1a1a1-0000-4000-8000-000000000001",
    "domain": "mail.autosdelvalle.cl",
    "dkim_tokens": [
      "ab12cd34ef56gh78",
      "ij90kl12mn34op56",
      "qr78st90uv12wx34"
    ],
    "dkim_status": "verified",
    "mail_from_domain": "bounce.mail.autosdelvalle.cl",
    "mail_from_status": "verified",
    "verified_for_sending": true,
    "tracking_domain": "click.mail.autosdelvalle.cl",
    "tracking_ready": true,
    "last_checked_at": "2026-09-15T18:20:00.000Z",
    "created_by": "11111111-0000-4000-8000-000000000001",
    "created_at": "2026-01-10T13:00:00.000Z",
    "updated_at": "2026-09-15T18:20:00.000Z"
  }
}

Answers: 200 · 400 · 401 · 403 · 404 · 409 · 429

GET /sending-domains/quota

The account's SES send quota

Account-level, not per-domain: the 24-hour send cap, how much of it is already spent, the send rate, and whether the AWS account is in SES sandbox or production access. Surfaces the ceiling a campaign can hit regardless of which sending domain it uses.

curl https://api.vitrinadev.com/api/v1/sending-domains/quota \
  -H "Authorization: Bearer $VITRINA_KEY"

Example response (200)

{
  "data": {
    "max_24_hour_send": 50000,
    "sent_last_24_hours": 812,
    "max_send_rate": 14,
    "production_access_enabled": true
  }
}

Answers: 200 · 400 · 401 · 403 · 404 · 409 · 429

On this page