Verified AgentReady.md certificate
Issued sig: 17bcf9ed702cdd3b Verify →

Analyzed URL

https://tenvio.email

Measured 3 weeks ago

Analyze another URL

AI-Ready Score

Excellent

out of 100

Token Savings

HTML tokens 6649
Markdown tokens 1738
Savings 74%

Score Breakdown

Accessibility 100/100
AI Discoverability 82/100
Structured Data 100/100
Semantic HTML 89/100
Content Efficiency 86/100

Emerging protocols

0 of 6 detected

Well-known endpoints AI agents look for. Detected here means an agent can discover and connect to your service automatically.

  • OAuth Protected Resource RFC 9728
    /.well-known/oauth-protected-resource
  • OAuth Discovery RFC 8414
    /.well-known/oauth-authorization-server
  • MCP Server Card SEP-1649 draft
    /.well-known/mcp/server-card.json
  • A2A Agent Card A2A v1.0
    /.well-known/agent-card.json
  • API Catalog RFC 9727
    /.well-known/api-catalog
  • Agent Skills index Discovery RFC v0.2.0 draft
    /.well-known/agent-skills/index.json

Doesn't stay fixed by itself. Monitoring isn't built yet — join the list and we'll tell you when it is.

You're on the list! We'll notify you when it launches.

What we measured No Content-Signal found (robots.txt or HTTP headers)

No Content-Signal directives found. These tell AI agents how they may use your content (search indexing, AI input, training data). The recommended location is robots.txt.

How to implement

Add Content-Signal to your robots.txt: User-agent: *\nContent-Signal: search=yes, ai-input=yes, ai-train=no. You can also add it as an HTTP header on markdown responses.

Paste into a coding agent to make the fix

What we measured 22 semantic elements, 138 divs (ratio: 14%)

Your page relies heavily on <div> elements. Semantic elements like <section>, <nav>, <header>, <footer>, and <aside> provide meaningful structure for AI agents.

How to implement

Replace generic <div> containers with appropriate semantic elements. Use <section> for thematic groups, <nav> for navigation, <header>/<footer> for page/section headers and footers.

Paste into a coding agent to make the fix
Markdown tokens: 1738
Transactional email infrastructure

## Transactional email infrastructure for SaaS products and platforms.

Send product email from your own domains—or organize customer-owned domains and senders under one account—with a focused REST API, explicit DNS readiness, durable queues, retries, and delivery history.

Controlled onboarding · Critical, transactional, and approved permission-based traffic.

**POST** /v1/emails202 Accepted

{
  "from": "[email protected]",
  "to": \["[email protected]"\],
  "type": "critical",
  "subject": "New sign-in detected",
  "content": { "plain": "Review this activity." }
}

em\_7kR4…queueddurably accepted

One infrastructure layer

## Two ways to build on Tenvio.

Use the same account-level model whether email belongs to your own product or to the businesses your platform serves.

01

### For your own product

Operate multiple product domains and sender identities for authentication, billing, security, and workflow notifications.

your appdomainssenders

02

### For your platform

Provision customer-owned domains and senders programmatically with scoped Management API credentials and stable external IDs.

your platformcustomer domainssenders

The SMTP problem

## A successful API call is only the start.

Transactional mail crosses DNS, queues, retries, transport policy, and recipient infrastructure. Treating that path as a black box leaves product teams guessing when users are waiting.

**Before**Request accepted?

**With Tenvio**queuedsendingaccepted

Explicit state, SMTP outcomes, safe diagnostics, and timestamps—without claiming inbox placement.

Domains are first-class

## One account. Multiple sending identities.

Add domains independently, follow the exact DNS records each one needs, and attach multiple senders to the right domain. A sender’s effective state follows its own configuration and its domain’s readiness.

-   2 domains on the Free plan
-   3 senders per account
-   Up to 3 senders per domain
-   Independent domain and sender state

DOMAINS**2 of 2 used**

A

**acme.app**3 senders · checked 2 min ago

Ready

C

**customer.example**1 sender · DNS action required

Verifying

DNS READINESS · CUSTOMER.EXAMPLE**2 of 3 checks passing**

Ownership`_tenvio-verification`**Passed**

DKIM`tenvio1._domainkey`**Pending**

DMARC`_dmarc`**Passed**

ACCOUNT**Your SaaS platform**shared quota + scoped keys

DOMAIN**customer-a.com**ready

billing@alerts@

DOMAIN**customer-b.io**verifying

notifications@

For platforms

## A resource model built beyond one domain.

The multi-domain, multi-sender foundation is live. It can represent domains your company owns or domains your customers own without legacy single-domain branches.

Management API**Live · controlled onboarding**

Create separate `mg_live_` keys with exact scopes for account and usage reads, plus domain and sender operations. DNS actions use the domain scopes. Sending remains isolated behind `tv_live_` keys.

[Read the Management API guide](https://docs.tenvio.email/management/)

Direct delivery

## Your application to the recipient MX.

Tenvio operates the delivery path instead of forwarding sends to another email API provider.

01**Your application**Authenticated API request

02**Tenvio queue**Durable intake + idempotency

03**Delivery engine**Policy + retries

04**Recipient MX**SMTP outcome

A deliberate boundary

## Product email with explicit consent.

Critical and transactional messages are available to every plan. Permission-based broadcast requires a paid Custom plan and separate manual approval.

### Available

-   Verification and authentication
-   Security and account alerts
-   Receipts and order updates
-   Approved permission-based broadcast

### Prohibited

-   Cold outreach
-   Purchased recipient lists
-   Traffic without documented consent

Delivery lifecycle

## Every state means something precise.

**queued**

Durably accepted for delivery.

**sending**

An attempt is in progress.

**deferred**

A temporary failure will retry.

**accepted**

The recipient SMTP server accepted it.

**bounced**

The recipient server rejected it permanently.

**failed**

Delivery ended without acceptance.

Accepted does not guarantee inbox placement. The receiving system controls filtering and final presentation.

Developer API

## One explicit send contract.

Create an API key, keep it server-side, and send through the live REST endpoint. Every logical email requires an idempotency key so retries do not create duplicate messages.

**POST**Enqueue an email

**GET**List email history

**GET**Inspect email detail

[Read the complete API reference](https://docs.tenvio.email/)

Send a transactional email

```
curl -X POST https://api.tenvio.email/v1/emails \
  -H "Authorization: Bearer YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -H "Idempotency-Key: 7f4d9b98-63a8-4c43-a958-41d641fe2fd2" \
  -d '{
    "from": "[email protected]",
    "to": ["[email protected]"],
    "cc": [],
    "bcc": [],
    "type": "transactional",
    "subject": "Your account is ready",
    "content": { "plain": "You can now sign in." }
  }'
```

Scale with guardrails

## Clear limits. Account-level control.

Free includes exact recipient-email quotas and safety limits. Purchased Custom capacity remains subject to abuse, reputation, and infrastructure safety restrictions.

**2**domains

**3**senders

**3**senders / domain

**3,000**recipient-emails / monthly cycle

**250**active delivery jobs

Also enforced on Free: 30 recipient-emails per rolling minute, 300 per hour, and 300 per rolling 24 hours.

Pricing v1

## Free and Custom.

Exact USD monthly pricing. Taxes may be additional where applicable.

FREE

### $0 / month

Critical and transactional REST API email: 3,000 recipient-emails per monthly cycle, 2 domains, 3 senders total and per domain, one sending key, 250 active deliveries, and 14-day history. Broadcast is disabled.

CUSTOM

### From $10 / month

Choose 10,000 to 2,500,000 recipient-emails and capacity for up to 10–1,000 managed domains. Hard Cap is the only exhaustion mode. Permission-based broadcast requires separate manual approval.

[Build and review exact pricing](https://docs.tenvio.email/plans/)

Controlled onboarding

## A focused product email surface.

### Available

-   Critical and transactional REST Email API
-   Multiple domains and senders
-   BCC input with address-private history
-   Approved Custom permission-based broadcast
-   Free and Custom Hard Cap plans

### Policy boundary

-   Explicit recipient permission
-   Documented audience source
-   No cold outreach
-   No purchased lists

FAQ

## The infrastructure, without the ambiguity.

**What is Tenvio?**

Tenvio is product email infrastructure for critical, transactional, and separately approved permission-based broadcast traffic.

**Can one account use multiple domains and senders?**

Yes. The Free plan supports 2 domains and 3 senders across the account, with up to 3 senders on one domain.

**Does “accepted” mean delivered to the inbox?**

No. It means the recipient mail server accepted the message. The receiving system controls filtering and inbox placement.

**How is broadcast enabled?**

A paid Custom plan is necessary but not sufficient. Tenvio separately reviews permission and risk controls before an operator approves broadcast capability. Payment never grants approval.

**Can I use a purchased list or send cold outreach?**

No. Both are prohibited. Broadcast recipients require a documented permission basis and audience source.

Request access

## Tell us what your product needs to send.

Tenvio is onboarding SaaS products and platforms during controlled onboarding. Share your domain model, transactional use case, and expected volume.

**Keep secrets out of this form.**Do not include API keys, passwords, recipient lists, or message payloads.
Tenvio - Transactional Email API for SaaS Platforms         [Skip to content](https://tenvio.email/#main)

[![](https://tenvio.email/brand-mark.png)Tenvio](https://tenvio.email/)

Transactional email infrastructure# Transactional email infrastructure for SaaS products and platforms.

Send product email from your own domains—or organize customer-owned domains and senders under one account—with a focused REST API, explicit DNS readiness, durable queues, retries, and delivery history.

[Request access →](https://tenvio.email/?topic=access#request-access)[Read the docs](https://docs.tenvio.email/)

Controlled onboarding · Critical, transactional, and approved permission-based traffic.

Send API LivePlatform Controlled onboarding

**POST** /v1/emails202 Accepted

{
  "from": "[email protected]",
  "to": \["[email protected]"\],
  "type": "critical",
  "subject": "New sign-in detected",
  "content": { "plain": "Review this activity." }
}

em\_7kR4…queueddurably accepted

Platform resource model**Live · controlled onboarding**

A

ACCOUNT**Acme Platform**

DOMAIN · READY**acme.app**

security@billing@

DOMAIN · VERIFYING**customer-one.com**

notifications@

Automate domains, DNS readiness, senders, account details, and usage with separate scoped management keys.

One infrastructure layer## Two ways to build on Tenvio.

Use the same account-level model whether email belongs to your own product or to the businesses your platform serves.

01

### For your own product

Operate multiple product domains and sender identities for authentication, billing, security, and workflow notifications.

your appdomainssenders

02

### For your platform

Provision customer-owned domains and senders programmatically with scoped Management API credentials and stable external IDs.

your platformcustomer domainssenders

The SMTP problem## A successful API call is only the start.

Transactional mail crosses DNS, queues, retries, transport policy, and recipient infrastructure. Treating that path as a black box leaves product teams guessing when users are waiting.

**Before**Request accepted?

**With Tenvio**queuedsendingaccepted

Explicit state, SMTP outcomes, safe diagnostics, and timestamps—without claiming inbox placement.

Domains are first-class## One account. Multiple sending identities.

Add domains independently, follow the exact DNS records each one needs, and attach multiple senders to the right domain. A sender’s effective state follows its own configuration and its domain’s readiness.

-   2 domains on the Free plan
-   3 senders per account
-   Up to 3 senders per domain
-   Independent domain and sender state

DOMAINS**2 of 2 used**

Add domain

A

**acme.app**3 senders · checked 2 min ago

Ready

C

**customer.example**1 sender · DNS action required

Verifying

DNS READINESS · CUSTOMER.EXAMPLE**2 of 3 checks passing**

Ownership`_tenvio-verification`**Passed**

DKIM`tenvio1._domainkey`**Pending**

DMARC`_dmarc`**Passed**

ACCOUNT**Your SaaS platform**shared quota + scoped keys

DOMAIN**customer-a.com**ready

billing@alerts@

DOMAIN**customer-b.io**verifying

notifications@

For platforms## A resource model built beyond one domain.

The multi-domain, multi-sender foundation is live. It can represent domains your company owns or domains your customers own without legacy single-domain branches.

Management API**Live · controlled onboarding**

Create separate `mg_live_` keys with exact scopes for account and usage reads, plus domain and sender operations. DNS actions use the domain scopes. Sending remains isolated behind `tv_live_` keys.

[Read the Management API guide →](https://docs.tenvio.email/management/)

Direct delivery## Your application to the recipient MX.

Tenvio operates the delivery path instead of forwarding sends to another email API provider.

01**Your application**Authenticated API request

02**Tenvio queue**Durable intake + idempotency

03**Delivery engine**Policy + retries

04**Recipient MX**SMTP outcome

A deliberate boundary## Product email with explicit consent.

Critical and transactional messages are available to every plan. Permission-based broadcast requires a paid Custom plan and separate manual approval.

### Available

-   Verification and authentication
-   Security and account alerts
-   Receipts and order updates
-   Approved permission-based broadcast

### Prohibited

-   Cold outreach
-   Purchased recipient lists
-   Traffic without documented consent

Delivery lifecycle## Every state means something precise.

**queued**

Durably accepted for delivery.

**sending**

An attempt is in progress.

**deferred**

A temporary failure will retry.

**accepted**

The recipient SMTP server accepted it.

**bounced**

The recipient server rejected it permanently.

**failed**

Delivery ended without acceptance.

Accepted does not guarantee inbox placement. The receiving system controls filtering and final presentation.

Developer API## One explicit send contract.

Create an API key, keep it server-side, and send through the live REST endpoint. Every logical email requires an idempotency key so retries do not create duplicate messages.

**POST**Enqueue an email

**GET**List email history

**GET**Inspect email detail

[Read the complete API reference →](https://docs.tenvio.email/)

Send a transactional emailCopy

```
curl -X POST https://api.tenvio.email/v1/emails \
  -H "Authorization: Bearer YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -H "Idempotency-Key: 7f4d9b98-63a8-4c43-a958-41d641fe2fd2" \
  -d '{
    "from": "[email protected]",
    "to": ["[email protected]"],
    "cc": [],
    "bcc": [],
    "type": "transactional",
    "subject": "Your account is ready",
    "content": { "plain": "You can now sign in." }
  }'
```

Scale with guardrails## Clear limits. Account-level control.

Free includes exact recipient-email quotas and safety limits. Purchased Custom capacity remains subject to abuse, reputation, and infrastructure safety restrictions.

**2**domains

**3**senders

**3**senders / domain

**3,000**recipient-emails / monthly cycle

**250**active delivery jobs

Also enforced on Free: 30 recipient-emails per rolling minute, 300 per hour, and 300 per rolling 24 hours.

Pricing v1## Free and Custom.

Exact USD monthly pricing. Taxes may be additional where applicable.

FREE

### $0 / month

Critical and transactional REST API email: 3,000 recipient-emails per monthly cycle, 2 domains, 3 senders total and per domain, one sending key, 250 active deliveries, and 14-day history. Broadcast is disabled.

CUSTOM

### From $10 / month

Choose 10,000 to 2,500,000 recipient-emails and capacity for up to 10–1,000 managed domains. Hard Cap is the only exhaustion mode. Permission-based broadcast requires separate manual approval.

[Build and review exact pricing →](https://docs.tenvio.email/plans/)

Controlled onboarding## A focused product email surface.

### Available

-   Critical and transactional REST Email API
-   Multiple domains and senders
-   BCC input with address-private history
-   Approved Custom permission-based broadcast
-   Free and Custom Hard Cap plans

### Policy boundary

-   Explicit recipient permission
-   Documented audience source
-   No cold outreach
-   No purchased lists

FAQ## The infrastructure, without the ambiguity.

**What is Tenvio?**

Tenvio is product email infrastructure for critical, transactional, and separately approved permission-based broadcast traffic.

**Can one account use multiple domains and senders?**

Yes. The Free plan supports 2 domains and 3 senders across the account, with up to 3 senders on one domain.

**Does “accepted” mean delivered to the inbox?**

No. It means the recipient mail server accepted the message. The receiving system controls filtering and inbox placement.

**How is broadcast enabled?**

A paid Custom plan is necessary but not sufficient. Tenvio separately reviews permission and risk controls before an operator approves broadcast capability. Payment never grants approval.

**Can I use a purchased list or send cold outreach?**

No. Both are prohibited. Broadcast recipients require a documented permission basis and audience source.

Request access## Tell us what your product needs to send.

Tenvio is onboarding SaaS products and platforms during controlled onboarding. Share your domain model, transactional use case, and expected volume.

**Keep secrets out of this form.**Do not include API keys, passwords, recipient lists, or message payloads.

Name

Work email

Company or product

Website

Use caseSelect oneEmail for our own productEmail for a SaaS platformBothReport abuseSomething else

Monthly volume OptionalNot sure yetUnder 10,00010,000–100,000100,000–1 millionMore than 1 million

What are you building?Describe the transactional messages and how domains belong to your product or customers.

Leave this field empty

Send request →

Upload this file as /index.md on your server so AI agents can access a clean version of your page. You can also configure Accept: text/markdown content negotiation to serve it automatically.

Our recommendation

Download llms.txt
# Tenvio

> Transactional email infrastructure for SaaS products and platforms, with multiple domains, multiple senders, DNS readiness, queues, retries, and delivery telemetry.

## Main
- [Tenvio - Transactional Email API for SaaS Platforms](https://tenvio.email): Transactional email infrastructure for SaaS products and platforms, with multiple domains, multiple senders, DNS readin…
- [Tenvio](https://tenvio.email/)
- [Request access](https://tenvio.email/?topic=access)
- [Acceptable Use](https://tenvio.email/acceptable-use.html)
- [Report abuse](https://tenvio.email/abuse.html)

## Legal
- [Privacy](https://tenvio.email/privacy.html)
- [Terms](https://tenvio.email/terms.html)

Full llms.txt requires domain-wide analysis (coming soon)

Upload this file to https://tenvio.email/llms.txt at the root of your domain. AI agents like ChatGPT, Claude, and Perplexity check this file to understand your site structure.

This site already has a llms.txt file.

Valid format
# Tenvio

> Tenvio is server-side email infrastructure for applications that send critical and transactional product email through a REST API, with multi-domain account management.

The canonical technical source is docs.tenvio.email. Prefer its OpenAPI contract for exact request and response schemas.

## Product

- [Product overview](https://tenvio.email/index.md)
- [Acceptable use](https://tenvio.email/acceptable-use.md)
- [Privacy](https://tenvio.email/privacy.md)
- [Terms](https://tenvio.email/terms.md)
- [Abuse](https://tenvio.email/abuse.md)

## Developer resources

- [AI-readable documentation index](https://docs.tenvio.email/llms.txt)
- [Full technical documentation](https://docs.tenvio.email/llms-full.txt)
- [Getting started](https://docs.tenvio.email/getting-started/index.md)
- [Sending API](https://docs.tenvio.email/sending/index.md)
- [Plans and limits](https://docs.tenvio.email/plans/index.md)
- [OpenAPI YAML](https://docs.tenvio.email/openapi.yaml)
- [OpenAPI JSON](https://docs.tenvio.email/openapi.json)

## Complete product context

- [Full product context](https://tenvio.email/llms-full.txt)

Accessibility

Content available without JavaScript (100/100)

Content available without JavaScript

Content appears early in HTML (100/100)

Main content starts at 18% of HTML

Reasonable page size (100/100)

Page size: 26KB

AI Discoverability

Robots.txt allows AI bots (100/100)

All major AI search bots allowed

Markdown for Agents support (60/100) Application
✗ Accept: text/markdown ✓ .md URL ✓ <link> tag ✗ Link header

Discoverable, but not negotiable: an agent that reads your HTML finds the .md version; one that requests the page directly still receives HTML. Answering Accept: text/markdown covers both.

Has sitemap.xml (100/100)

Sitemap found

Has robots.txt file (100/100)

robots.txt exists

Has llms.txt file (100/100)

llms.txt exists and is valid

Has Content-Signal (robots.txt or HTTP headers) (0/100)
✓ robots.txt ✓ HTTP header ✗ Policy

Structured Data

Has Schema.org / JSON-LD (100/100)

JSON-LD found: Organization, WebSite, SoftwareApplication, FAQPage

Has Open Graph tags (100/100)

All OG tags present

Has meta description (100/100)

Meta description: 164 chars

Has canonical URL (100/100)

Canonical URL present

Has lang attribute (100/100)

lang="en"

Semantic HTML

Proper heading hierarchy (100/100)

Clean heading hierarchy

Uses article or main element (100/100)

Has both <article> and <main>

Uses semantic HTML elements (46/100)

22 semantic elements, 138 divs (ratio: 14%)

Meaningful image alt texts (100/100)

No informative images (2 decorative)

Low div nesting depth (100/100)

Avg div depth: 1.9, max: 6

Content Efficiency

Good token reduction ratio (80/100)

74% token reduction (HTML→Markdown)

Good content-to-noise ratio (80/100)

Content ratio: 27.8% (7264 content chars / 26149 HTML bytes)

Reasonable page weight (100/100)

HTML size: 26KB

Minimal inline styles (100/100)

0/518 elements with inline styles (0.0%)

{
  "url": "https://tenvio.email",
  "timestamp": 1790281198378,
  "fetch": {
    "mode": "simple",
    "timeMs": 323,
    "htmlSizeBytes": 26149,
    "supportsMarkdown": false,
    "markdownAgents": {
      "contentNegotiation": false,
      "mdUrl": {
        "found": true,
        "url": "https://tenvio.email/index.md"
      },
      "linkTag": {
        "found": true,
        "url": "/index.md"
      },
      "linkHeader": {
        "found": false,
        "url": null
      },
      "responseHeaders": {
        "contentSignal": null,
        "xMarkdownTokens": null,
        "vary": null
      },
      "frontmatter": {
        "present": false,
        "fields": [],
        "level": "none"
      },
      "level": "application",
      "mdUrlMediaType": "text/markdown",
      "mdUrlProperMediaType": true
    },
    "statusCode": 200
  },
  "extraction": {
    "title": "Tenvio - Transactional Email API for SaaS Platforms",
    "excerpt": "One account model for your domains, your customers’ domains, and every transactional sender.",
    "byline": null,
    "siteName": "Tenvio",
    "lang": "en",
    "contentLength": 7264,
    "metadata": {
      "description": "Transactional email infrastructure for SaaS products and platforms, with multiple domains, multiple senders, DNS readiness, queues, retries, and delivery telemetry.",
      "ogTitle": "Tenvio - Transactional Email API for SaaS Platforms",
      "ogDescription": "One account model for your domains, your customers’ domains, and every transactional sender.",
      "ogImage": "https://tenvio.email/og-tenvio-platform.png",
      "ogType": "website",
      "canonical": "https://tenvio.email/",
      "lang": "en",
      "schemas": [
        {
          "@type": "Organization",
          "@id": "https://tenvio.email/#organization",
          "name": "Tenvio",
          "url": "https://tenvio.email/",
          "logo": "https://tenvio.email/android-chrome-512x512.png"
        },
        {
          "@type": "WebSite",
          "@id": "https://tenvio.email/#website",
          "url": "https://tenvio.email/",
          "name": "Tenvio",
          "publisher": {
            "@id": "https://tenvio.email/#organization"
          }
        },
        {
          "@type": "SoftwareApplication",
          "@id": "https://tenvio.email/#software",
          "name": "Tenvio",
          "applicationCategory": "DeveloperApplication",
          "operatingSystem": "Web",
          "url": "https://tenvio.email/",
          "description": "Critical, transactional, and approved permission-based broadcast email infrastructure with durable queues and delivery history.",
          "featureList": [
            "REST Email API",
            "Asynchronous Broadcast API for approved Custom accounts",
            "Multiple authenticated domains",
            "Multiple sender identities",
            "Queue and retry handling",
            "Delivery history"
          ],
          "publisher": {
            "@id": "https://tenvio.email/#organization"
          }
        },
        {
          "@type": "FAQPage",
          "@id": "https://tenvio.email/#faq-schema",
          "mainEntity": [
            {
              "@type": "Question",
              "name": "What traffic is available?",
              "acceptedAnswer": {
                "@type": "Answer",
                "text": "Critical and transactional email are available. Permission-based broadcast requires Custom and separate manual approval."
              }
            },
            {
              "@type": "Question",
              "name": "Does accepted mean inbox delivery?",
              "acceptedAnswer": {
                "@type": "Answer",
                "text": "No. Accepted means the recipient mail server accepted the message. The receiving system controls filtering and inbox placement."
              }
            },
            {
              "@type": "Question",
              "name": "Can I use purchased lists or send cold outreach?",
              "acceptedAnswer": {
                "@type": "Answer",
                "text": "No. Both are prohibited."
              }
            }
          ]
        }
      ],
      "robotsMeta": "index, follow",
      "author": null,
      "generator": null,
      "markdownAlternateHref": "/index.md"
    }
  },
  "markdown": "Transactional email infrastructure\n\n## Transactional email infrastructure for SaaS products and platforms.\n\nSend product email from your own domains—or organize customer-owned domains and senders under one account—with a focused REST API, explicit DNS readiness, durable queues, retries, and delivery history.\n\nControlled onboarding · Critical, transactional, and approved permission-based traffic.\n\n**POST** /v1/emails202 Accepted\n\n{\n  \"from\": \"[email protected]\",\n  \"to\": \\[\"[email protected]\"\\],\n  \"type\": \"critical\",\n  \"subject\": \"New sign-in detected\",\n  \"content\": { \"plain\": \"Review this activity.\" }\n}\n\nem\\_7kR4…queueddurably accepted\n\nOne infrastructure layer\n\n## Two ways to build on Tenvio.\n\nUse the same account-level model whether email belongs to your own product or to the businesses your platform serves.\n\n01\n\n### For your own product\n\nOperate multiple product domains and sender identities for authentication, billing, security, and workflow notifications.\n\nyour appdomainssenders\n\n02\n\n### For your platform\n\nProvision customer-owned domains and senders programmatically with scoped Management API credentials and stable external IDs.\n\nyour platformcustomer domainssenders\n\nThe SMTP problem\n\n## A successful API call is only the start.\n\nTransactional mail crosses DNS, queues, retries, transport policy, and recipient infrastructure. Treating that path as a black box leaves product teams guessing when users are waiting.\n\n**Before**Request accepted?\n\n**With Tenvio**queuedsendingaccepted\n\nExplicit state, SMTP outcomes, safe diagnostics, and timestamps—without claiming inbox placement.\n\nDomains are first-class\n\n## One account. Multiple sending identities.\n\nAdd domains independently, follow the exact DNS records each one needs, and attach multiple senders to the right domain. A sender’s effective state follows its own configuration and its domain’s readiness.\n\n-   2 domains on the Free plan\n-   3 senders per account\n-   Up to 3 senders per domain\n-   Independent domain and sender state\n\nDOMAINS**2 of 2 used**\n\nA\n\n**acme.app**3 senders · checked 2 min ago\n\nReady\n\nC\n\n**customer.example**1 sender · DNS action required\n\nVerifying\n\nDNS READINESS · CUSTOMER.EXAMPLE**2 of 3 checks passing**\n\nOwnership`_tenvio-verification`**Passed**\n\nDKIM`tenvio1._domainkey`**Pending**\n\nDMARC`_dmarc`**Passed**\n\nACCOUNT**Your SaaS platform**shared quota + scoped keys\n\nDOMAIN**customer-a.com**ready\n\nbilling@alerts@\n\nDOMAIN**customer-b.io**verifying\n\nnotifications@\n\nFor platforms\n\n## A resource model built beyond one domain.\n\nThe multi-domain, multi-sender foundation is live. It can represent domains your company owns or domains your customers own without legacy single-domain branches.\n\nManagement API**Live · controlled onboarding**\n\nCreate separate `mg_live_` keys with exact scopes for account and usage reads, plus domain and sender operations. DNS actions use the domain scopes. Sending remains isolated behind `tv_live_` keys.\n\n[Read the Management API guide](https://docs.tenvio.email/management/)\n\nDirect delivery\n\n## Your application to the recipient MX.\n\nTenvio operates the delivery path instead of forwarding sends to another email API provider.\n\n01**Your application**Authenticated API request\n\n02**Tenvio queue**Durable intake + idempotency\n\n03**Delivery engine**Policy + retries\n\n04**Recipient MX**SMTP outcome\n\nA deliberate boundary\n\n## Product email with explicit consent.\n\nCritical and transactional messages are available to every plan. Permission-based broadcast requires a paid Custom plan and separate manual approval.\n\n### Available\n\n-   Verification and authentication\n-   Security and account alerts\n-   Receipts and order updates\n-   Approved permission-based broadcast\n\n### Prohibited\n\n-   Cold outreach\n-   Purchased recipient lists\n-   Traffic without documented consent\n\nDelivery lifecycle\n\n## Every state means something precise.\n\n**queued**\n\nDurably accepted for delivery.\n\n**sending**\n\nAn attempt is in progress.\n\n**deferred**\n\nA temporary failure will retry.\n\n**accepted**\n\nThe recipient SMTP server accepted it.\n\n**bounced**\n\nThe recipient server rejected it permanently.\n\n**failed**\n\nDelivery ended without acceptance.\n\nAccepted does not guarantee inbox placement. The receiving system controls filtering and final presentation.\n\nDeveloper API\n\n## One explicit send contract.\n\nCreate an API key, keep it server-side, and send through the live REST endpoint. Every logical email requires an idempotency key so retries do not create duplicate messages.\n\n**POST**Enqueue an email\n\n**GET**List email history\n\n**GET**Inspect email detail\n\n[Read the complete API reference](https://docs.tenvio.email/)\n\nSend a transactional email\n\n```\ncurl -X POST https://api.tenvio.email/v1/emails \\\n  -H \"Authorization: Bearer YOUR_API_KEY\" \\\n  -H \"Content-Type: application/json\" \\\n  -H \"Idempotency-Key: 7f4d9b98-63a8-4c43-a958-41d641fe2fd2\" \\\n  -d '{\n    \"from\": \"[email protected]\",\n    \"to\": [\"[email protected]\"],\n    \"cc\": [],\n    \"bcc\": [],\n    \"type\": \"transactional\",\n    \"subject\": \"Your account is ready\",\n    \"content\": { \"plain\": \"You can now sign in.\" }\n  }'\n```\n\nScale with guardrails\n\n## Clear limits. Account-level control.\n\nFree includes exact recipient-email quotas and safety limits. Purchased Custom capacity remains subject to abuse, reputation, and infrastructure safety restrictions.\n\n**2**domains\n\n**3**senders\n\n**3**senders / domain\n\n**3,000**recipient-emails / monthly cycle\n\n**250**active delivery jobs\n\nAlso enforced on Free: 30 recipient-emails per rolling minute, 300 per hour, and 300 per rolling 24 hours.\n\nPricing v1\n\n## Free and Custom.\n\nExact USD monthly pricing. Taxes may be additional where applicable.\n\nFREE\n\n### $0 / month\n\nCritical and transactional REST API email: 3,000 recipient-emails per monthly cycle, 2 domains, 3 senders total and per domain, one sending key, 250 active deliveries, and 14-day history. Broadcast is disabled.\n\nCUSTOM\n\n### From $10 / month\n\nChoose 10,000 to 2,500,000 recipient-emails and capacity for up to 10–1,000 managed domains. Hard Cap is the only exhaustion mode. Permission-based broadcast requires separate manual approval.\n\n[Build and review exact pricing](https://docs.tenvio.email/plans/)\n\nControlled onboarding\n\n## A focused product email surface.\n\n### Available\n\n-   Critical and transactional REST Email API\n-   Multiple domains and senders\n-   BCC input with address-private history\n-   Approved Custom permission-based broadcast\n-   Free and Custom Hard Cap plans\n\n### Policy boundary\n\n-   Explicit recipient permission\n-   Documented audience source\n-   No cold outreach\n-   No purchased lists\n\nFAQ\n\n## The infrastructure, without the ambiguity.\n\n**What is Tenvio?**\n\nTenvio is product email infrastructure for critical, transactional, and separately approved permission-based broadcast traffic.\n\n**Can one account use multiple domains and senders?**\n\nYes. The Free plan supports 2 domains and 3 senders across the account, with up to 3 senders on one domain.\n\n**Does “accepted” mean delivered to the inbox?**\n\nNo. It means the recipient mail server accepted the message. The receiving system controls filtering and inbox placement.\n\n**How is broadcast enabled?**\n\nA paid Custom plan is necessary but not sufficient. Tenvio separately reviews permission and risk controls before an operator approves broadcast capability. Payment never grants approval.\n\n**Can I use a purchased list or send cold outreach?**\n\nNo. Both are prohibited. Broadcast recipients require a documented permission basis and audience source.\n\nRequest access\n\n## Tell us what your product needs to send.\n\nTenvio is onboarding SaaS products and platforms during controlled onboarding. Share your domain model, transactional use case, and expected volume.\n\n**Keep secrets out of this form.**Do not include API keys, passwords, recipient lists, or message payloads.\n",
  "fullPageMarkdown": "Tenvio - Transactional Email API for SaaS Platforms         [Skip to content](https://tenvio.email/#main)\n\n[![](https://tenvio.email/brand-mark.png)Tenvio](https://tenvio.email/)\n\nTransactional email infrastructure# Transactional email infrastructure for SaaS products and platforms.\n\nSend product email from your own domains—or organize customer-owned domains and senders under one account—with a focused REST API, explicit DNS readiness, durable queues, retries, and delivery history.\n\n[Request access →](https://tenvio.email/?topic=access#request-access)[Read the docs](https://docs.tenvio.email/)\n\nControlled onboarding · Critical, transactional, and approved permission-based traffic.\n\nSend API LivePlatform Controlled onboarding\n\n**POST** /v1/emails202 Accepted\n\n{\n  \"from\": \"[email protected]\",\n  \"to\": \\[\"[email protected]\"\\],\n  \"type\": \"critical\",\n  \"subject\": \"New sign-in detected\",\n  \"content\": { \"plain\": \"Review this activity.\" }\n}\n\nem\\_7kR4…queueddurably accepted\n\nPlatform resource model**Live · controlled onboarding**\n\nA\n\nACCOUNT**Acme Platform**\n\nDOMAIN · READY**acme.app**\n\nsecurity@billing@\n\nDOMAIN · VERIFYING**customer-one.com**\n\nnotifications@\n\nAutomate domains, DNS readiness, senders, account details, and usage with separate scoped management keys.\n\nOne infrastructure layer## Two ways to build on Tenvio.\n\nUse the same account-level model whether email belongs to your own product or to the businesses your platform serves.\n\n01\n\n### For your own product\n\nOperate multiple product domains and sender identities for authentication, billing, security, and workflow notifications.\n\nyour appdomainssenders\n\n02\n\n### For your platform\n\nProvision customer-owned domains and senders programmatically with scoped Management API credentials and stable external IDs.\n\nyour platformcustomer domainssenders\n\nThe SMTP problem## A successful API call is only the start.\n\nTransactional mail crosses DNS, queues, retries, transport policy, and recipient infrastructure. Treating that path as a black box leaves product teams guessing when users are waiting.\n\n**Before**Request accepted?\n\n**With Tenvio**queuedsendingaccepted\n\nExplicit state, SMTP outcomes, safe diagnostics, and timestamps—without claiming inbox placement.\n\nDomains are first-class## One account. Multiple sending identities.\n\nAdd domains independently, follow the exact DNS records each one needs, and attach multiple senders to the right domain. A sender’s effective state follows its own configuration and its domain’s readiness.\n\n-   2 domains on the Free plan\n-   3 senders per account\n-   Up to 3 senders per domain\n-   Independent domain and sender state\n\nDOMAINS**2 of 2 used**\n\nAdd domain\n\nA\n\n**acme.app**3 senders · checked 2 min ago\n\nReady\n\nC\n\n**customer.example**1 sender · DNS action required\n\nVerifying\n\nDNS READINESS · CUSTOMER.EXAMPLE**2 of 3 checks passing**\n\nOwnership`_tenvio-verification`**Passed**\n\nDKIM`tenvio1._domainkey`**Pending**\n\nDMARC`_dmarc`**Passed**\n\nACCOUNT**Your SaaS platform**shared quota + scoped keys\n\nDOMAIN**customer-a.com**ready\n\nbilling@alerts@\n\nDOMAIN**customer-b.io**verifying\n\nnotifications@\n\nFor platforms## A resource model built beyond one domain.\n\nThe multi-domain, multi-sender foundation is live. It can represent domains your company owns or domains your customers own without legacy single-domain branches.\n\nManagement API**Live · controlled onboarding**\n\nCreate separate `mg_live_` keys with exact scopes for account and usage reads, plus domain and sender operations. DNS actions use the domain scopes. Sending remains isolated behind `tv_live_` keys.\n\n[Read the Management API guide →](https://docs.tenvio.email/management/)\n\nDirect delivery## Your application to the recipient MX.\n\nTenvio operates the delivery path instead of forwarding sends to another email API provider.\n\n01**Your application**Authenticated API request\n\n02**Tenvio queue**Durable intake + idempotency\n\n03**Delivery engine**Policy + retries\n\n04**Recipient MX**SMTP outcome\n\nA deliberate boundary## Product email with explicit consent.\n\nCritical and transactional messages are available to every plan. Permission-based broadcast requires a paid Custom plan and separate manual approval.\n\n### Available\n\n-   Verification and authentication\n-   Security and account alerts\n-   Receipts and order updates\n-   Approved permission-based broadcast\n\n### Prohibited\n\n-   Cold outreach\n-   Purchased recipient lists\n-   Traffic without documented consent\n\nDelivery lifecycle## Every state means something precise.\n\n**queued**\n\nDurably accepted for delivery.\n\n**sending**\n\nAn attempt is in progress.\n\n**deferred**\n\nA temporary failure will retry.\n\n**accepted**\n\nThe recipient SMTP server accepted it.\n\n**bounced**\n\nThe recipient server rejected it permanently.\n\n**failed**\n\nDelivery ended without acceptance.\n\nAccepted does not guarantee inbox placement. The receiving system controls filtering and final presentation.\n\nDeveloper API## One explicit send contract.\n\nCreate an API key, keep it server-side, and send through the live REST endpoint. Every logical email requires an idempotency key so retries do not create duplicate messages.\n\n**POST**Enqueue an email\n\n**GET**List email history\n\n**GET**Inspect email detail\n\n[Read the complete API reference →](https://docs.tenvio.email/)\n\nSend a transactional emailCopy\n\n```\ncurl -X POST https://api.tenvio.email/v1/emails \\\n  -H \"Authorization: Bearer YOUR_API_KEY\" \\\n  -H \"Content-Type: application/json\" \\\n  -H \"Idempotency-Key: 7f4d9b98-63a8-4c43-a958-41d641fe2fd2\" \\\n  -d '{\n    \"from\": \"[email protected]\",\n    \"to\": [\"[email protected]\"],\n    \"cc\": [],\n    \"bcc\": [],\n    \"type\": \"transactional\",\n    \"subject\": \"Your account is ready\",\n    \"content\": { \"plain\": \"You can now sign in.\" }\n  }'\n```\n\nScale with guardrails## Clear limits. Account-level control.\n\nFree includes exact recipient-email quotas and safety limits. Purchased Custom capacity remains subject to abuse, reputation, and infrastructure safety restrictions.\n\n**2**domains\n\n**3**senders\n\n**3**senders / domain\n\n**3,000**recipient-emails / monthly cycle\n\n**250**active delivery jobs\n\nAlso enforced on Free: 30 recipient-emails per rolling minute, 300 per hour, and 300 per rolling 24 hours.\n\nPricing v1## Free and Custom.\n\nExact USD monthly pricing. Taxes may be additional where applicable.\n\nFREE\n\n### $0 / month\n\nCritical and transactional REST API email: 3,000 recipient-emails per monthly cycle, 2 domains, 3 senders total and per domain, one sending key, 250 active deliveries, and 14-day history. Broadcast is disabled.\n\nCUSTOM\n\n### From $10 / month\n\nChoose 10,000 to 2,500,000 recipient-emails and capacity for up to 10–1,000 managed domains. Hard Cap is the only exhaustion mode. Permission-based broadcast requires separate manual approval.\n\n[Build and review exact pricing →](https://docs.tenvio.email/plans/)\n\nControlled onboarding## A focused product email surface.\n\n### Available\n\n-   Critical and transactional REST Email API\n-   Multiple domains and senders\n-   BCC input with address-private history\n-   Approved Custom permission-based broadcast\n-   Free and Custom Hard Cap plans\n\n### Policy boundary\n\n-   Explicit recipient permission\n-   Documented audience source\n-   No cold outreach\n-   No purchased lists\n\nFAQ## The infrastructure, without the ambiguity.\n\n**What is Tenvio?**\n\nTenvio is product email infrastructure for critical, transactional, and separately approved permission-based broadcast traffic.\n\n**Can one account use multiple domains and senders?**\n\nYes. The Free plan supports 2 domains and 3 senders across the account, with up to 3 senders on one domain.\n\n**Does “accepted” mean delivered to the inbox?**\n\nNo. It means the recipient mail server accepted the message. The receiving system controls filtering and inbox placement.\n\n**How is broadcast enabled?**\n\nA paid Custom plan is necessary but not sufficient. Tenvio separately reviews permission and risk controls before an operator approves broadcast capability. Payment never grants approval.\n\n**Can I use a purchased list or send cold outreach?**\n\nNo. Both are prohibited. Broadcast recipients require a documented permission basis and audience source.\n\nRequest access## Tell us what your product needs to send.\n\nTenvio is onboarding SaaS products and platforms during controlled onboarding. Share your domain model, transactional use case, and expected volume.\n\n**Keep secrets out of this form.**Do not include API keys, passwords, recipient lists, or message payloads.\n\nName\n\nWork email\n\nCompany or product\n\nWebsite\n\nUse caseSelect oneEmail for our own productEmail for a SaaS platformBothReport abuseSomething else\n\nMonthly volume OptionalNot sure yetUnder 10,00010,000–100,000100,000–1 millionMore than 1 million\n\nWhat are you building?Describe the transactional messages and how domains belong to your product or customers.\n\nLeave this field empty\n\nSend request →\n",
  "markdownStats": {
    "images": 0,
    "links": 3,
    "tables": 0,
    "codeBlocks": 1,
    "headings": 22
  },
  "tokens": {
    "htmlTokens": 6649,
    "markdownTokens": 1738,
    "reduction": 4911,
    "reductionPercent": 74
  },
  "score": {
    "score": 92,
    "grade": "A",
    "rubricVersion": 3,
    "dimensions": {
      "accessibility": {
        "score": 100,
        "weight": 30,
        "grade": "A",
        "checks": {
          "content_without_js": {
            "score": 100,
            "weight": 55,
            "evidence": "proven",
            "details": "Content available without JavaScript"
          },
          "fast_content_position": {
            "score": 100,
            "weight": 25,
            "evidence": "plausible",
            "details": "Main content starts at 18% of HTML"
          },
          "reasonable_page_size": {
            "score": 100,
            "weight": 20,
            "evidence": "plausible",
            "details": "Page size: 26KB"
          }
        }
      },
      "aiDiscoverability": {
        "score": 82,
        "weight": 25,
        "grade": "B",
        "checks": {
          "robots_allows_ai_bots": {
            "score": 100,
            "weight": 35,
            "evidence": "proven",
            "details": "All major AI search bots allowed"
          },
          "supports_markdown_negotiation": {
            "score": 60,
            "weight": 20,
            "evidence": "plausible",
            "details": "Application level — .md URL (https://tenvio.email/index.md), <link> tag",
            "mechanisms": {
              "negotiation": false,
              "mdUrl": true,
              "linkTag": true,
              "linkHeader": false
            }
          },
          "has_sitemap": {
            "score": 100,
            "weight": 15,
            "evidence": "plausible",
            "details": "Sitemap found"
          },
          "has_robots_txt": {
            "score": 100,
            "weight": 10,
            "evidence": "plausible",
            "details": "robots.txt exists"
          },
          "has_llms_txt": {
            "score": 100,
            "weight": 10,
            "evidence": "speculative",
            "details": "llms.txt exists and is valid"
          },
          "has_content_signals": {
            "score": 0,
            "weight": 10,
            "evidence": "speculative",
            "details": "No Content-Signal found (robots.txt or HTTP headers)",
            "mechanisms": {
              "robotsTxt": false,
              "httpHeader": false,
              "policy": false
            }
          }
        }
      },
      "structuredData": {
        "score": 100,
        "weight": 20,
        "grade": "A",
        "checks": {
          "has_schema_org": {
            "score": 100,
            "weight": 35,
            "evidence": "proven",
            "details": "JSON-LD found: Organization, WebSite, SoftwareApplication, FAQPage"
          },
          "has_open_graph": {
            "score": 100,
            "weight": 20,
            "evidence": "plausible",
            "details": "All OG tags present"
          },
          "has_meta_description": {
            "score": 100,
            "weight": 20,
            "evidence": "plausible",
            "details": "Meta description: 164 chars"
          },
          "has_canonical_url": {
            "score": 100,
            "weight": 15,
            "evidence": "plausible",
            "details": "Canonical URL present"
          },
          "has_lang_attribute": {
            "score": 100,
            "weight": 10,
            "evidence": "plausible",
            "details": "lang=\"en\""
          }
        }
      },
      "semanticHtml": {
        "score": 89,
        "weight": 15,
        "grade": "B",
        "checks": {
          "proper_heading_hierarchy": {
            "score": 100,
            "weight": 30,
            "evidence": "plausible",
            "details": "Clean heading hierarchy"
          },
          "uses_article_or_main": {
            "score": 100,
            "weight": 25,
            "evidence": "plausible",
            "details": "Has both <article> and <main>"
          },
          "semantic_elements": {
            "score": 46,
            "weight": 20,
            "evidence": "plausible",
            "details": "22 semantic elements, 138 divs (ratio: 14%)"
          },
          "meaningful_alt_texts": {
            "score": 100,
            "weight": 15,
            "evidence": "plausible",
            "details": "No informative images (2 decorative)"
          },
          "low_div_nesting": {
            "score": 100,
            "weight": 10,
            "evidence": "speculative",
            "details": "Avg div depth: 1.9, max: 6"
          }
        }
      },
      "contentEfficiency": {
        "score": 86,
        "weight": 10,
        "grade": "B",
        "checks": {
          "token_reduction_ratio": {
            "score": 80,
            "weight": 40,
            "evidence": "speculative",
            "details": "74% token reduction (HTML→Markdown)"
          },
          "content_to_noise_ratio": {
            "score": 80,
            "weight": 30,
            "evidence": "speculative",
            "details": "Content ratio: 27.8% (7264 content chars / 26149 HTML bytes)"
          },
          "reasonable_page_weight": {
            "score": 100,
            "weight": 20,
            "evidence": "speculative",
            "details": "HTML size: 26KB"
          },
          "minimal_inline_styles": {
            "score": 100,
            "weight": 10,
            "evidence": "speculative",
            "details": "0/518 elements with inline styles (0.0%)"
          }
        }
      }
    }
  },
  "recommendations": [
    {
      "id": "add_content_signals",
      "priority": "high",
      "category": "aiDiscoverability",
      "titleKey": "rec.add_content_signals.title",
      "descriptionKey": "rec.add_content_signals.description",
      "howToKey": "rec.add_content_signals.howto",
      "howToStepKeys": null,
      "effort": "quick-win",
      "estimatedImpact": 2.5,
      "maxImpact": 2.5,
      "evidence": "speculative",
      "checkScore": 0,
      "checkDetails": "No Content-Signal found (robots.txt or HTTP headers)"
    },
    {
      "id": "add_semantic_elements",
      "priority": "medium",
      "category": "semanticHtml",
      "titleKey": "rec.add_semantic_elements.title",
      "descriptionKey": "rec.add_semantic_elements.description",
      "howToKey": "rec.add_semantic_elements.howto",
      "howToStepKeys": null,
      "effort": "moderate",
      "estimatedImpact": 1.6,
      "maxImpact": 3,
      "evidence": "plausible",
      "checkScore": 46,
      "checkDetails": "22 semantic elements, 138 divs (ratio: 14%)"
    }
  ],
  "llmsTxtPreview": "# Tenvio\n\n> Transactional email infrastructure for SaaS products and platforms, with multiple domains, multiple senders, DNS readiness, queues, retries, and delivery telemetry.\n\n## Main\n- [Tenvio - Transactional Email API for SaaS Platforms](https://tenvio.email): Transactional email infrastructure for SaaS products and platforms, with multiple domains, multiple senders, DNS readin…\n- [Tenvio](https://tenvio.email/)\n- [Request access](https://tenvio.email/?topic=access)\n- [Acceptable Use](https://tenvio.email/acceptable-use.html)\n- [Report abuse](https://tenvio.email/abuse.html)\n\n## Legal\n- [Privacy](https://tenvio.email/privacy.html)\n- [Terms](https://tenvio.email/terms.html)\n\n",
  "llmsTxtExisting": "# Tenvio\n\n> Tenvio is server-side email infrastructure for applications that send critical and transactional product email through a REST API, with multi-domain account management.\n\nThe canonical technical source is docs.tenvio.email. Prefer its OpenAPI contract for exact request and response schemas.\n\n## Product\n\n- [Product overview](https://tenvio.email/index.md)\n- [Acceptable use](https://tenvio.email/acceptable-use.md)\n- [Privacy](https://tenvio.email/privacy.md)\n- [Terms](https://tenvio.email/terms.md)\n- [Abuse](https://tenvio.email/abuse.md)\n\n## Developer resources\n\n- [AI-readable documentation index](https://docs.tenvio.email/llms.txt)\n- [Full technical documentation](https://docs.tenvio.email/llms-full.txt)\n- [Getting started](https://docs.tenvio.email/getting-started/index.md)\n- [Sending API](https://docs.tenvio.email/sending/index.md)\n- [Plans and limits](https://docs.tenvio.email/plans/index.md)\n- [OpenAPI YAML](https://docs.tenvio.email/openapi.yaml)\n- [OpenAPI JSON](https://docs.tenvio.email/openapi.json)\n\n## Complete product context\n\n- [Full product context](https://tenvio.email/llms-full.txt)",
  "emergingProtocols": {
    "oauthProtectedResource": {
      "exists": false,
      "url": "https://tenvio.email/.well-known/oauth-protected-resource"
    },
    "oauthDiscovery": {
      "exists": false,
      "url": "https://tenvio.email/.well-known/oauth-authorization-server"
    },
    "mcpServerCard": {
      "exists": false,
      "url": "https://tenvio.email/.well-known/mcp/server-card.json",
      "draft": true
    },
    "a2aAgentCard": {
      "exists": false,
      "url": "https://tenvio.email/.well-known/agent-card.json"
    },
    "apiCatalog": {
      "exists": false,
      "url": "https://tenvio.email/.well-known/api-catalog"
    },
    "agentSkills": {
      "exists": false,
      "url": "https://tenvio.email/.well-known/agent-skills/index.json",
      "draft": true
    },
    "count": 0,
    "total": 6
  },
  "botAccess": {
    "probed": true,
    "bot": "OAI-SearchBot",
    "controlStatus": 200,
    "botStatus": 200,
    "discriminates": false,
    "refusedAsBot": false,
    "edge": null,
    "verifiable": false,
    "detail": "This origin answers OAI-SearchBot exactly as it answers any other client (200). No edge-level filtering of AI crawlers observed."
  },
  "snippets": [
    {
      "id": "add_content_signals",
      "title": "Add Content-Signal directives",
      "description": "Content-Signal tells AI agents how they may use your content. The canonical location is robots.txt, but you can also expose it as an HTTP header from any stack.",
      "language": "txt",
      "code": "User-agent: *\nContent-Signal: search=yes, ai-input=yes, ai-train=no",
      "filename": "/robots.txt",
      "stacks": [
        {
          "id": "robots",
          "label": "robots.txt",
          "language": "txt",
          "filename": "/robots.txt",
          "code": "User-agent: *\nContent-Signal: search=yes, ai-input=yes, ai-train=no"
        },
        {
          "id": "nginx",
          "label": "Nginx",
          "language": "nginx",
          "filename": "server block",
          "code": "# Inside your server { } block:\nadd_header Content-Signal \"search=yes, ai-input=yes, ai-train=no\" always;"
        },
        {
          "id": "apache",
          "label": "Apache",
          "language": "apache",
          "filename": ".htaccess",
          "code": "# In .htaccess (or VirtualHost):\nHeader set Content-Signal \"search=yes, ai-input=yes, ai-train=no\""
        },
        {
          "id": "wordpress",
          "label": "WordPress",
          "language": "php",
          "filename": "functions.php",
          "code": "<?php\n// In your theme's functions.php or a small mu-plugin\nadd_action('send_headers', function () {\n    header('Content-Signal: search=yes, ai-input=yes, ai-train=no');\n});\n\n// Optional: also append the directive to the dynamic robots.txt\nadd_filter('robots_txt', function ($output) {\n    return $output . \"\\nContent-Signal: search=yes, ai-input=yes, ai-train=no\\n\";\n}, 10, 1);"
        },
        {
          "id": "nextjs",
          "label": "Next.js",
          "language": "typescript",
          "filename": "middleware.ts",
          "code": "// middleware.ts (Next.js 13+ App Router or Pages Router)\nimport { NextResponse } from 'next/server';\nexport function middleware() {\n  const res = NextResponse.next();\n  res.headers.set(\n    'Content-Signal',\n    'search=yes, ai-input=yes, ai-train=no'\n  );\n  return res;\n}\nexport const config = { matcher: '/:path*' };"
        },
        {
          "id": "cloudflare",
          "label": "Cloudflare Workers",
          "language": "javascript",
          "filename": "worker.js",
          "code": "// Cloudflare Worker that proxies your origin and adds the header\nexport default {\n  async fetch(request, env, ctx) {\n    const res = await fetch(request);\n    const newRes = new Response(res.body, res);\n    newRes.headers.set(\n      'Content-Signal',\n      'search=yes, ai-input=yes, ai-train=no'\n    );\n    return newRes;\n  },\n};"
        },
        {
          "id": "express",
          "label": "Express / Fastify",
          "language": "javascript",
          "filename": "server.js",
          "code": "// Express\napp.use((req, res, next) => {\n  res.setHeader('Content-Signal', 'search=yes, ai-input=yes, ai-train=no');\n  next();\n});\n\n// Fastify\nfastify.addHook('onSend', (request, reply, payload, done) => {\n  reply.header('Content-Signal', 'search=yes, ai-input=yes, ai-train=no');\n  done();\n});"
        }
      ]
    }
  ]
}

Use our API to get this programmatically (coming soon)

This JSON is for internal use — unlike the Markdown and llms.txt files, it's not meant to be uploaded to your site. Save it as a baseline to track your score over time, share it with your dev team, or integrate it into your CI/CD pipeline.

Want a second opinion?

Cloudflare runs a free scanner too, and it asks a different question. It scores what your site publishes for agents to call — MCP server cards, Agent Skills, API catalogs, DNS records. We score whether an agent can reach, read and understand your content. A site can do well on one and poorly on the other, so expect two different numbers: they are answers to two different questions, and both are worth knowing.

Scan tenvio.email with Cloudflare

Embed your badge

Add this badge to your site. It updates automatically as your AI-readiness score changes.

AgentReady.md score for tenvio.email
Script Recommended
<script src="https://agentready.md/badge.js" data-id="459f1d85-f40f-46e3-8b96-c867c5b15750" data-domain="tenvio.email"></script>
Markdown
[![AgentReady.md score for tenvio.email](https://agentready.md/badge/tenvio.email.svg)](https://agentready.md/r/tenvio.email)

Coming soon: Full Domain Analysis

Crawl your entire domain, generate llms.txt, and monitor your AI-readiness score over time. Join the waitlist to be notified.

You're on the list! We'll notify you when it launches.