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
price
19 EUR
purchase_type
one_time
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.1.0
last_updated
2026-06-30

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

{
  "score": 74,
  "confidence_score": 0.86,
  "verdict": "revise_before_sending",
  "failure_modes": [
    {
      "type": "fake_personalization",
      "severity": "medium",
      "detail": "Opening references a public fact ('scaling the SDR team') with no specific trigger or insight."
    },
    {
      "type": "weak_value_clarity",
      "severity": "low",
      "detail": "'Cut manual list-building' is a feature, not a quantified outcome."
    }
  ],
  "risk_flags": [
    {
      "type": "unverified_claim",
      "severity": "low",
      "detail": "No proof point backs the implied efficiency gain."
    }
  ],
  "rewrite": "Hi Jordan — Northwind posted 4 new SDR roles this month. Teams scaling outbound that fast usually lose hours to manual list-building. We cut that to near-zero for RevOps leads like you. Worth 15 minutes Thursday to see if it fits?",
  "agent_instruction": "Do not send as-is. Apply the rewrite or strengthen the trigger and add one quantified proof point, then re-run QA.",
  "agent_next_action": "revise_message_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

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
metered_price
19 EUR per audit after the free quota
billing_live
false
mode
stripe_test_mode
optional_spend_cap
max_monthly_spend_eur (402 + spend_cap_reached when hit)
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_eur": 200
}
-> { "api_key": "smqa_...", "free_trial_calls": 20, "mode": "test" }

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

Raw spec

{
  "spec_version": "0.1.0",
  "last_updated": "2026-06-30",
  "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": "One-time token path: one token = one successful audit. API-key path: 20 free audits per key, then metered per successful audit.",
  "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.",
  "price": 19,
  "currency": "EUR",
  "purchase_type": "one_time",
  "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": {
    "score": 74,
    "confidence_score": 0.86,
    "verdict": "revise_before_sending",
    "failure_modes": [
      {
        "type": "fake_personalization",
        "severity": "medium",
        "detail": "Opening references a public fact ('scaling the SDR team') with no specific trigger or insight."
      },
      {
        "type": "weak_value_clarity",
        "severity": "low",
        "detail": "'Cut manual list-building' is a feature, not a quantified outcome."
      }
    ],
    "risk_flags": [
      {
        "type": "unverified_claim",
        "severity": "low",
        "detail": "No proof point backs the implied efficiency gain."
      }
    ],
    "rewrite": "Hi Jordan — Northwind posted 4 new SDR roles this month. Teams scaling outbound that fast usually lose hours to manual list-building. We cut that to near-zero for RevOps leads like you. Worth 15 minutes Thursday to see if it fits?",
    "agent_instruction": "Do not send as-is. Apply the rewrite or strengthen the trigger and add one quantified proof point, then re-run QA.",
    "agent_next_action": "revise_message_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 audits, then metered billing; 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_eur?: number }. 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 audits, then metered billing; 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_eur?: number }. 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.