SendlySendly
API ReferenceDomains

Upload a sending domain's sender logo

PUT
/api/v1/domains/{id}/logo

Replace the identity's logo with an SVG. The file is rebuilt into the SVG Tiny PS profile mailboxes require: editor bookkeeping and unsupported attributes are dropped, and the result is what the URL serves. It must be square, draw with shapes rather than <text> (convert text to outlines), reference nothing outside itself, and come to at most 32 KB once rebuilt. A file that cannot be rebuilt answers 422 validation_error with a detail naming what to change, and the previous logo stays in place.

A mailbox that supports BIMI shows this logo beside mail from the identity, once two DNS records are in place: a default._bimi.<host> TXT record naming the logo's URL (returned as bimi_record), and a DMARC policy of p=quarantine or p=reject applied to all mail. readiness is a fresh reading of both from public DNS. Yahoo and AOL show the logo once both are right; Gmail and Apple Mail also require a Verified Mark Certificate, which Sendly does not issue.

The URL is keyed by the identity and never changes, so the record is published once. Until a logo is uploaded it serves a default: the domain's initial on a coloured square. It serves nothing (serving is false) until the identity verifies, and nothing while the project is disabled.

Requires the domains:write scope — Add and remove sending domains, and trigger verification.

Authorization

AuthorizationBearer <token>

API key authentication. Use a sk_* (FULL) or pk_* (SENDING_ONLY) key as the bearer token. Public keys (pk_*) are restricted to the email-send endpoints and the self-serve list subscribe/unsubscribe pair; every other endpoint — event tracking included — answers 403 for them. In scope terms (used by /api/v1/* operations): FULL keys hold every scope; SENDING_ONLY keys hold only emails:send.

In: header

Path Parameters

id*string

Resource id.

Request Body

application/json

TypeScript Definitions

Use the request body type in TypeScript.

Body for PUT /api/v1/domains/{id}/logo.

Response Body

application/json

application/problem+json

application/problem+json

application/problem+json

application/problem+json

application/problem+json

application/problem+json

curl -X PUT "https://example.com/api/v1/domains/497f6eca-6276-4993-bfeb-53cbbbba6f08/logo" \  -H "Content-Type: application/json" \  -d '{    "svg": "string"  }'
{
  "domain_id": "b2f7354f-b74d-4332-ab10-1a5e3c56466c",
  "source": "uploaded",
  "url": "http://example.com",
  "serving": true,
  "svg": "string",
  "sha256": "string",
  "size_bytes": 0,
  "updated_at": "2019-08-24T14:15:22Z",
  "bimi_record": {
    "type": "TXT",
    "name": "string",
    "value": "string"
  },
  "readiness": {
    "dmarc": {
      "status": "enforced",
      "policy": "string",
      "pct": 0,
      "found_at": "string"
    },
    "bimi_record": {
      "status": "published",
      "found_at": "string",
      "location": "string"
    }
  }
}
{
  "type": "http://example.com",
  "title": "string",
  "status": 0,
  "detail": "string",
  "instance": "string",
  "code": "string",
  "request_id": "string",
  "errors": [
    {
      "pointer": "string",
      "code": "string",
      "message": "string"
    }
  ]
}
{
  "type": "http://example.com",
  "title": "string",
  "status": 0,
  "detail": "string",
  "instance": "string",
  "code": "string",
  "request_id": "string",
  "errors": [
    {
      "pointer": "string",
      "code": "string",
      "message": "string"
    }
  ]
}
{
  "type": "http://example.com",
  "title": "string",
  "status": 0,
  "detail": "string",
  "instance": "string",
  "code": "string",
  "request_id": "string",
  "errors": [
    {
      "pointer": "string",
      "code": "string",
      "message": "string"
    }
  ]
}
{
  "type": "http://example.com",
  "title": "string",
  "status": 0,
  "detail": "string",
  "instance": "string",
  "code": "string",
  "request_id": "string",
  "errors": [
    {
      "pointer": "string",
      "code": "string",
      "message": "string"
    }
  ]
}
{
  "type": "http://example.com",
  "title": "string",
  "status": 0,
  "detail": "string",
  "instance": "string",
  "code": "string",
  "request_id": "string",
  "errors": [
    {
      "pointer": "string",
      "code": "string",
      "message": "string"
    }
  ]
}
{
  "type": "http://example.com",
  "title": "string",
  "status": 0,
  "detail": "string",
  "instance": "string",
  "code": "string",
  "request_id": "string",
  "errors": [
    {
      "pointer": "string",
      "code": "string",
      "message": "string"
    }
  ]
}