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