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.jsonEndpoints
- 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.