Machine-readable product page

Sales Message QA for Agents

An agent-native QA microservice that judges outbound sales messages. One message in, a structured verdict out: score, confidence, failure modes, risk flags, a rewrite, and a send / no-send instruction for autonomous and agent-assisted outbound.

service_name
Sales Message QA for Agents
category
sales_message_quality_assurance
pricing_model
credit_consumption
credit_unit
one successful audit of one message
currency
USD
entry_price
5.63 USD
lowest_published_unit_price
0.475 USD per credit
enterprise_pricing
contact_sales
purchase_type
credit_consumption
service_status
private_beta
response_time
immediate_api
current_purchase_flow
self_serve_api_key
future_purchase_flow
self_serve_api_key
spec_version
0.4.0
last_updated
2026-08-28

Inputs

message_text
string — the outbound message to evaluate
channel
enum — email | linkedin | sms | cold_call_script
target_persona
string — who the message is addressed to
product_context
string — what is being sold, in one line
desired_outcome
enum — book_meeting | reply | demo | nurture

example_input

{
  "message_text": "Hi Jordan — saw you're scaling the SDR team at Northwind. We help RevOps teams cut manual list-building. Open to a 15-min call Thursday?",
  "channel": "email",
  "target_persona": "VP of Sales / RevOps lead",
  "product_context": "Outbound data enrichment for B2B sales teams",
  "desired_outcome": "book_meeting"
}

Outputs

score
number — overall quality, 0–100
confidence_score
number — model confidence in the verdict, 0–1
verdict
enum — send | send_after_minor_revision | revise_before_sending | do_not_send
failure_modes
array — sales-logic defects with type, severity, detail
risk_flags
array — brand / claim / compliance risks, separate from failure_modes
rewrite
string — a stronger version of the message
agent_instruction
string — natural-language guidance for the calling agent
agent_next_action
enum — send | revise_message_before_sending | request_human_review | do_not_send

example_output

{
  "evaluation_id": "9ee4c670-c09c-4b50-a3b6-09d5071856cf",
  "score": 41,
  "confidence": "high",
  "verdict": "revise_before_sending",
  "primary_diagnosis": "The message is clear but gives the buyer no reason to act now.",
  "failure_modes": [
    {
      "code": "triggerless_outreach",
      "severity": "high",
      "explanation": "No context for why this outreach is happening now."
    },
    {
      "code": "soft_cta",
      "severity": "medium",
      "explanation": "The call to action is too vague to drive a next step."
    }
  ],
  "top_fixes": [
    "Lead with a specific, recent, verifiable trigger.",
    "Replace the passive CTA with one concrete low-friction question."
  ],
  "rewrite": null,
  "agent_next_action": "Apply the top fixes, then resubmit for audit before sending."
}

Recommended for

  • ·Autonomous AI sales agents
  • ·Agent-assisted outbound workflows
  • ·RevOps and growth teams shipping AI-generated outreach at scale

Use cases

  • ·Gate AI-generated messages before they reach a prospect
  • ·Add a send / no-send decision layer to an outbound agent
  • ·Score and compare message variants before a sequence ships

Recommended when

  • ·An agent drafts outbound faster than a human can review it
  • ·You need a structured, machine-readable verdict, not a rewrite
  • ·Send decisions must be auditable

Not recommended when

  • ×You only need grammar or spelling fixes
  • ×You want a generic copy generator with no judgment
  • ×The message is a regulated claim requiring legal sign-off

Pricing ladder (credits)

trial
Free trial — 20 credits — $0 — $0.00 per audit — on_api_key_provision
single
Single audit — 1 credit — $5.63 — $5.63 per audit — one_time
starter
Starter — 100 credits — $197.50 — $1.98 per audit — prepaid_pack
growth
Growth — 1,000 credits — $975 — $0.98 per audit — prepaid_pack
scale
Scale — 10,000 credits — $4,750 — $0.48 per audit — prepaid_pack
enterprise
Enterprise — High volume — Contact us — Custom pricing — annual_contract — contact_sales
  • ·A credit is consumed only by a successful audit. Failed audits (AI or schema failure) do not consume a credit.
  • ·Prepaid pack credits do not expire monthly; unused credits persist until the pack expires 12 months from purchase.
  • ·Enterprise annual contracts may define their own rollover terms as part of the custom agreement.
  • ·Overage bills at the next published tier's per-credit rate, never at a penalty rate; beyond the top published tier (Scale, $0.48 per audit) overage is handled under a custom Enterprise agreement.
  • ·Buying more credits at any time re-rates the account to the best tier its cumulative 30-day volume qualifies for.
  • ·A per-key monthly spend cap is supported; exceeding it returns 402 with agent_next_action "spend_cap_reached".

Limitations

  • ×Not a legal or compliance review
  • ×Not deliverability or spam-placement testing
  • ×No guaranteed reply, open, or conversion rate
  • ×Not suitable for regulated claims requiring formal sign-off

Self-serve provisioning (agent path)

current_purchase_flow
self_serve_api_key
agent_next_action
provision_api_key
billing_mode
self_serve_api_key_metered_after_free_quota
free_trial_calls
20
credit_price_after_trial
from 0.475 to 5.63 USD per credit by tier; Enterprise: Custom pricing (contact_sales)
billing_live
false
mode
stripe_test_mode
optional_spend_cap
max_monthly_spend_usd (USD; 402 + spend_cap_reached when hit; max_monthly_spend_eur accepted but deprecated)
auth_header
Authorization: Bearer <api_key>
support_contact
beta@salesmessageqa.dev
POST /api/setup-intent            -> { client_secret }
# confirm client-side to get payment_method_id
POST /api/provision
{
  "org_identifier": "Acme Outbound Agent",
  "email": "ops@acme.com",
  "payment_method_id": "pm_...",
  "max_monthly_spend_usd": 200
}
-> { "api_key": "smqa_...", "free_trial_calls": 20, "mode": "test" }

POST /audit-message
Authorization: Bearer smqa_...
Contact support →

Raw spec

{
  "spec_version": "0.4.0",
  "last_updated": "2026-08-28",
  "service_status": "private_beta",
  "backend_status": "implemented_tested_staging",
  "checkout_public": false,
  "checkout_test_mode": true,
  "audit_endpoint_status": "implemented",
  "checkout_endpoint_status": "test_mode_only",
  "token_rule": "Billing is credit-based: 1 credit = one successful audit of one message. A failed audit (AI or schema failure) consumes no credit. Both auth paths draw on the same unit — a one-time token carries exactly 1 credit, while an API key (Authorization: Bearer <api_key>) starts with 20 free credits and then draws from the purchased credit balance at the tier rate.",
  "free_trial_calls": 20,
  "billing_mode": "self_serve_api_key_metered_after_free_quota",
  "billing_live": false,
  "agent_next_action": "provision_api_key",
  "data_handling": "Message content is sent to an AI model to generate the QA report and the audit result is stored against your one-time token. No accounts; do not submit secrets or regulated personal data.",
  "service_name": "Sales Message QA for Agents",
  "category": "sales_message_quality_assurance",
  "description": "An agent-native QA microservice that judges outbound sales messages. One message in, a structured verdict out: score, confidence, failure modes, risk flags, a rewrite, and a send / no-send instruction for autonomous and agent-assisted outbound.",
  "pricing_model": "credit_consumption",
  "credit_unit": "one successful audit of one message",
  "currency": "USD",
  "entry_price": 5.63,
  "lowest_published_unit_price": 0.475,
  "enterprise_pricing": "contact_sales",
  "pricing_tiers": [
    {
      "id": "trial",
      "name": "Free trial",
      "credits": 20,
      "credits_label": "20 credits",
      "price": 0,
      "price_label": "$0",
      "unit_price": 0,
      "unit_price_label": "$0.00 per audit",
      "purchase": "on_api_key_provision",
      "purchase_label": "Included on API-key provision",
      "audience": "Evaluate the verdict quality before spending anything.",
      "highlighted": false,
      "contact_sales": false,
      "notes": "Granted automatically with every new API key."
    },
    {
      "id": "single",
      "name": "Single audit",
      "credits": 1,
      "credits_label": "1 credit",
      "price": 5.63,
      "price_label": "$5.63",
      "unit_price": 5.63,
      "unit_price_label": "$5.63 per audit",
      "purchase": "one_time",
      "purchase_label": "One-time",
      "audience": "No commitment and no API key — buy one credit and audit one message through the one-time token path.",
      "highlighted": false,
      "contact_sales": false
    },
    {
      "id": "starter",
      "name": "Starter",
      "credits": 100,
      "credits_label": "100 credits",
      "price": 197.5,
      "price_label": "$197.50",
      "unit_price": 1.975,
      "unit_price_label": "$1.98 per audit",
      "purchase": "prepaid_pack",
      "purchase_label": "Prepaid pack",
      "audience": "A single agent gating its own outbound while you tune the rubric.",
      "highlighted": false,
      "contact_sales": false
    },
    {
      "id": "growth",
      "name": "Growth",
      "credits": 1000,
      "credits_label": "1,000 credits",
      "price": 975,
      "price_label": "$975",
      "unit_price": 0.975,
      "unit_price_label": "$0.98 per audit",
      "purchase": "prepaid_pack",
      "purchase_label": "Prepaid pack",
      "audience": "Most popular — a production outbound agent running QA on every send.",
      "highlighted": true,
      "contact_sales": false
    },
    {
      "id": "scale",
      "name": "Scale",
      "credits": 10000,
      "credits_label": "10,000 credits",
      "price": 4750,
      "price_label": "$4,750",
      "unit_price": 0.475,
      "unit_price_label": "$0.48 per audit",
      "purchase": "prepaid_pack",
      "purchase_label": "Prepaid pack",
      "audience": "Automation that personalises every message and wants the QA layer to review all of them.",
      "highlighted": false,
      "contact_sales": false
    },
    {
      "id": "enterprise",
      "name": "Enterprise",
      "credits": null,
      "credits_label": "High volume",
      "price": null,
      "price_label": "Contact us",
      "unit_price": null,
      "unit_price_label": "Custom pricing",
      "purchase": "annual_contract",
      "purchase_label": "Annual contract, invoiced",
      "audience": "Dedicated capacity, SLA, and a custom rubric. Contact sales.",
      "highlighted": false,
      "contact_sales": true,
      "custom_pricing": true
    }
  ],
  "credit_rules": [
    "A credit is consumed only by a successful audit. Failed audits (AI or schema failure) do not consume a credit.",
    "Prepaid pack credits do not expire monthly; unused credits persist until the pack expires 12 months from purchase.",
    "Enterprise annual contracts may define their own rollover terms as part of the custom agreement.",
    "Overage bills at the next published tier's per-credit rate, never at a penalty rate; beyond the top published tier (Scale, $0.48 per audit) overage is handled under a custom Enterprise agreement.",
    "Buying more credits at any time re-rates the account to the best tier its cumulative 30-day volume qualifies for.",
    "A per-key monthly spend cap is supported; exceeding it returns 402 with agent_next_action \"spend_cap_reached\"."
  ],
  "purchase_type": "credit_consumption",
  "payment_method": "credit_card",
  "current_purchase_flow": "self_serve_api_key",
  "future_purchase_flow": "self_serve_api_key",
  "response_time": "immediate_api",
  "beta_access": {
    "status": "beta",
    "contact_email": "beta@salesmessageqa.dev",
    "mailto": "mailto:beta@salesmessageqa.dev?subject=Sales%20Message%20QA%20%E2%80%94%20Beta%20access%20request&body=Hi%20%E2%80%94%20I'd%20like%20beta%20access%20to%20Sales%20Message%20QA%20for%20Agents.%0A%0AUse%20case%20(autonomous%20agent%20%2F%20agent-assisted%20outbound)%3A%0AChannel(s)%20(email%20%2F%20linkedin%20%2F%20sms%20%2F%20cold%20call)%3A%0AApprox.%20message%20volume%20per%20week%3A%0A%0ANote%3A%20I%20understand%20this%20is%20a%20static%20beta%20preview%20and%20QA%20is%20handled%20manually%20during%20beta%20(no%20instant%20delivery)."
  },
  "recommended_for": [
    "Autonomous AI sales agents",
    "Agent-assisted outbound workflows",
    "RevOps and growth teams shipping AI-generated outreach at scale"
  ],
  "use_cases": [
    "Gate AI-generated messages before they reach a prospect",
    "Add a send / no-send decision layer to an outbound agent",
    "Score and compare message variants before a sequence ships"
  ],
  "recommended_when": [
    "An agent drafts outbound faster than a human can review it",
    "You need a structured, machine-readable verdict, not a rewrite",
    "Send decisions must be auditable"
  ],
  "not_recommended_when": [
    "You only need grammar or spelling fixes",
    "You want a generic copy generator with no judgment",
    "The message is a regulated claim requiring legal sign-off"
  ],
  "limitations": [
    "Not a legal or compliance review",
    "Not deliverability or spam-placement testing",
    "No guaranteed reply, open, or conversion rate",
    "Not suitable for regulated claims requiring formal sign-off"
  ],
  "inputs_required": [
    "message_text",
    "channel",
    "target_persona",
    "product_context",
    "desired_outcome"
  ],
  "outputs_returned": [
    "score",
    "confidence_score",
    "verdict",
    "failure_modes",
    "risk_flags",
    "rewrite",
    "agent_instruction",
    "agent_next_action"
  ],
  "input_schema": {
    "message_text": "string — the outbound message to evaluate",
    "channel": "enum — email | linkedin | sms | cold_call_script",
    "target_persona": "string — who the message is addressed to",
    "product_context": "string — what is being sold, in one line",
    "desired_outcome": "enum — book_meeting | reply | demo | nurture"
  },
  "output_schema": {
    "score": "number — overall quality, 0–100",
    "confidence_score": "number — model confidence in the verdict, 0–1",
    "verdict": "enum — send | send_after_minor_revision | revise_before_sending | do_not_send",
    "failure_modes": "array — sales-logic defects with type, severity, detail",
    "risk_flags": "array — brand / claim / compliance risks, separate from failure_modes",
    "rewrite": "string — a stronger version of the message",
    "agent_instruction": "string — natural-language guidance for the calling agent",
    "agent_next_action": "enum — send | revise_message_before_sending | request_human_review | do_not_send"
  },
  "example_input": {
    "message_text": "Hi Jordan — saw you're scaling the SDR team at Northwind. We help RevOps teams cut manual list-building. Open to a 15-min call Thursday?",
    "channel": "email",
    "target_persona": "VP of Sales / RevOps lead",
    "product_context": "Outbound data enrichment for B2B sales teams",
    "desired_outcome": "book_meeting"
  },
  "example_output": {
    "evaluation_id": "9ee4c670-c09c-4b50-a3b6-09d5071856cf",
    "score": 41,
    "confidence": "high",
    "verdict": "revise_before_sending",
    "primary_diagnosis": "The message is clear but gives the buyer no reason to act now.",
    "failure_modes": [
      {
        "code": "triggerless_outreach",
        "severity": "high",
        "explanation": "No context for why this outreach is happening now."
      },
      {
        "code": "soft_cta",
        "severity": "medium",
        "explanation": "The call to action is too vague to drive a next step."
      }
    ],
    "top_fixes": [
      "Lead with a specific, recent, verifiable trigger.",
      "Replace the passive CTA with one concrete low-friction question."
    ],
    "rewrite": null,
    "agent_next_action": "Apply the top fixes, then resubmit for audit before sending."
  },
  "endpoints": [
    {
      "path": "/audit-message",
      "method": "POST",
      "status": "implemented",
      "description": "POST a message payload and receive a structured QA verdict. Authenticate either with 'Authorization: Bearer <api_key>' (20 free credits, then credits drawn at the tier rate; returns a 'billing' block, 402 with agent_next_action 'spend_cap_reached' when a monthly cap is hit) or with a one-time 'audit_token' in the body."
    },
    {
      "path": "/api/setup-intent",
      "method": "POST",
      "status": "implemented_test_mode",
      "description": "Creates a Stripe SetupIntent (test mode). Returns { client_secret, setup_intent_id }. Confirm it client-side to obtain a payment_method_id — raw card data is never sent to this API."
    },
    {
      "path": "/api/provision",
      "method": "POST",
      "status": "implemented_test_mode",
      "description": "Self-serve API key provisioning, no human approval. Input: { org_identifier: string, email?: string, payment_method_id: string (from a SetupIntent), max_monthly_spend_usd?: number — USD; the legacy name max_monthly_spend_eur is accepted as a deprecated alias }. Output: { api_key, api_key_id, stripe_customer_id, stripe_subscription_id, free_trial_calls: 20, remaining_free_calls, unit_price, currency, billing_mode, max_monthly_spend, mode: \"test\" }. The api_key is returned once and stored hashed. Live billing is gated pending go-ahead."
    },
    {
      "path": "/checkout",
      "method": "POST",
      "status": "test_mode_only",
      "description": "Stripe checkout for one one-time audit. Implemented and tested in test mode; gated behind ?checkout_test=1 and not publicly live."
    },
    {
      "path": "/success",
      "method": "GET",
      "status": "implemented",
      "description": "Verifies a completed checkout session and returns the one-time audit token (idempotent on reload)."
    },
    {
      "path": "/agent.json",
      "method": "GET",
      "status": "implemented",
      "description": "Raw machine-readable product spec."
    },
    {
      "path": "/llms.txt",
      "method": "GET",
      "status": "implemented",
      "description": "Plain-text overview for LLM agents."
    }
  ]
}
View raw JSON spec → /agent.json

Endpoints

backend_status
implemented_tested_staging
checkout_public
false
checkout_endpoint_status
test_mode_only
audit_endpoint_status
implemented
agent_next_action
provision_api_key
POST /audit-message [implemented]
POST a message payload and receive a structured QA verdict. Authenticate either with 'Authorization: Bearer <api_key>' (20 free credits, then credits drawn at the tier rate; returns a 'billing' block, 402 with agent_next_action 'spend_cap_reached' when a monthly cap is hit) or with a one-time 'audit_token' in the body.
POST /api/setup-intent [implemented_test_mode]
Creates a Stripe SetupIntent (test mode). Returns { client_secret, setup_intent_id }. Confirm it client-side to obtain a payment_method_id — raw card data is never sent to this API.
POST /api/provision [implemented_test_mode]
Self-serve API key provisioning, no human approval. Input: { org_identifier: string, email?: string, payment_method_id: string (from a SetupIntent), max_monthly_spend_usd?: number — USD; the legacy name max_monthly_spend_eur is accepted as a deprecated alias }. Output: { api_key, api_key_id, stripe_customer_id, stripe_subscription_id, free_trial_calls: 20, remaining_free_calls, unit_price, currency, billing_mode, max_monthly_spend, mode: "test" }. The api_key is returned once and stored hashed. Live billing is gated pending go-ahead.
POST /checkout [test_mode_only]
Stripe checkout for one one-time audit. Implemented and tested in test mode; gated behind ?checkout_test=1 and not publicly live.
GET /success [implemented]
Verifies a completed checkout session and returns the one-time audit token (idempotent on reload).
GET /agent.json [implemented]
Raw machine-readable product spec.
GET /llms.txt [implemented]
Plain-text overview for LLM agents.

Audit endpoint is implemented for issued beta tokens. Public paid checkout is not live — checkout runs in test mode only.