Reach & engagement protection

Social caption pre-flight check

Score Reels, TikTok captions, carousel covers, Pinterest descriptions, and YouTube Shorts copy before scheduling. Catch the captions that sound like every other brand account — and the ones that quietly bury whatever was interesting about the post.

Get API key All use cases Docs

What we've seen in practice

Captions are the most-templated content on the internet, and it's getting worse fast. Agent-written social copy almost always defaults to the same hook patterns because those are what training data over-represents. The simplest sniff test is to delete the brand name and the niche-specific noun and ask whether the caption still makes sense for a coffee shop, a SaaS company, and a personal trainer. If the answer is yes, revise.

Business value

  • Stops the most common failure mode of agent-written social copy: a strong hook collapsed into a generic 'follow for more' close.
  • Cheap enough to run on every variant in an A/B harness, so the worst-performing copy never gets impression budget.
  • Surfaces the specific phrase to rewrite, not just a score — so the caption agent fixes one line instead of regenerating the whole post.

Agent job to be done

Be a caption editor who's seen ten thousand posts. Keep the creative idea. Reject the formulaic phrasing that makes platforms deprioritize captions ('don't make this mistake,' 'you won't believe,' 'here's what nobody tells you').

format: captionintended_use: publishdomain: social caption pre-flight

Per-platform calibration matters more than you'd think

Instagram captions and TikTok captions fail in different ways. IG slop tends to be polished and empty ('your perfect day starts here'); TikTok slop tends to be hook-stuffed and clickbait-y ('wait for it...'). If you're running the gate across both platforms with a single threshold, you'll catch one and miss the other. Set platform-specific evidence weights — TikTok benefits from elevating fatigued_hook weight; IG benefits from elevating specificity_gap.

When to call VeracityAPI

Run after final caption draft, hashtag selection, and on-screen-text generation — before the post enters the scheduler.

What text to submit

Caption body, hook line, on-screen text, CTA, and optionally the first pinned comment. Skip transcript unless the caption explicitly references it. Hashtags don't need scoring; they confuse specificity_risk.

Decision policy

  • allow: low risk AND the caption mentions at least one concrete noun (place, product, person, number, or specific moment).
  • revise: slop_risk ≥ 0.40 OR the hook is one of the platform-fatigued openers ('POV:', 'When you...', 'Tell me you...' without an actual punchline).
  • human_review: high risk on captions that make safety/medical/financial claims, or that name an identifiable creator without consent.
  • Local override: never publish a caption that doesn't pass a 'would this work for any brand?' test. If yes, it's too generic.

Request template

The exact payload shape this use case sends. The sample below uses representative content for this workflow; substitute your own.

curl https://api.veracityapi.com/v1/analyze \
  -H "Authorization: Bearer $VERACITY_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"type":"text","content":"Avoid this tourist scam at all costs. It happens everywhere and ruins trips. Follow for more travel safety tips.","context":{"format":"caption","intended_use":"publish","domain":"social caption pre-flight"},"store_content":false}'

Automation recipe

  • Scheduler creates the post package: video/image, caption, hashtags, platform, post time.
  • Caption agent scores the caption with format=caption, intended_use=publish.
  • If revise, the rewrite agent gets the evidence array plus a brand-voice constraint and produces one variant.
  • Rescore once. If still revise or human_review, fall back to the safest minimal caption (hook + CTA) and log for editor review.
  • Track post-by-post which caption variant won at 24h; feed back into the brand-voice constraint over time.

Evidence spans agents should inspect

  • 'fatigued_hook' — openers platforms have visibly down-weighted ('don't make this mistake,' 'nobody talks about,' 'red flags')
  • 'generic_close' — CTAs that could fit any brand ('follow for more tips,' 'comment below,' 'tag a friend')
  • 'broad_claim' — sweeping statements without a specific anchor ('most people don't realize,' 'always happens')
  • 'caption_bloat' — sentences that add length without changing what the reader takes away

Policy pseudocode

if (result.recommended_action === "allow") continueWorkflow();
if (result.recommended_action === "revise") rewriteWith(result.evidence, result.recommended_fixes);
if (result.recommended_action === "human_review") queueForHumanReview(result);
if (result.recommended_action === "reject") discardOrRebuild();

KPIs to track

  • % of captions revised before scheduling
  • median reach per post, broken out by allow vs. revised-then-published
  • saves + shares per impression (the algorithm signal that actually matters)
  • % of posts that fall back to the minimal caption (high = your brand voice constraint is too tight)
  • caption-rewrite latency at p95 — needs to fit inside your scheduler window

What can go wrong

  • Short captions (under 50 chars) produce lower-confidence scores. Pair with a named-noun check.
  • Platform algorithms aren't being measured directly. The signal is helpfulness/specificity, which correlates with engagement but doesn't predict it.
  • Don't optimize the brand personality out of the captions. Specific is not the same as polished — voice-y captions with real opinions often score well and outperform safe ones.

Cost and latency notes

Analyze only is $0.005 per 1,000 characters; Analyze + revise with auto_revise=true is $0.010 per 1,000 characters. Both round up to the nearest 1,000 characters. Short captions/emails usually cost $0.005; longer pages or chapters scale linearly by length. Current v0.1 latency is LLM-bound, so batch/concurrent orchestration is recommended for high-volume pipelines.

Agent evaluation checklist