Skip to main content
This walks through one complete POST /api/v1/rank call: what to send, what comes back, and which fields actually drive a decision.

Send the request

Only two things are strictly required: at least one asset with a url, and an audience — either inline (audience) or a saved one (audience_id). Everything else has a default.

Read the response

The fields that matter

ranked comes back sorted. score is the final value after any close-pair refinement; score_before_refine is the raw SSR score. Both are relative within this batch.
Present only when you sent copy_context and the image-only ablation succeeded. copy_lift is the difference between the full-ad-package score and the image-only score — what the words added on top of the picture.
confidence is a coarse label. confidence_details carries the numbers behind it, including sample_std_dev across repetitions. A large spread means the pipeline disagreed with itself and the ordering is soft. See Reading confidence.
Non-null only when close-pair refinement ran a pairwise panel on this asset. It reports the winner, whether the panel flipped the original SSR order, the votes, and consistency.
Per-asset failures land here rather than failing the whole request. A batch can succeed with assets_failed > 0 — always check it.
summary.credits_used is 2 in this example for 2 assets — but that is a coincidence. The asset with copy_context cost 2 evaluations (full package plus image-only ablation) and the bare image asset cost 1, minus failures. Budget against scoring_evaluations, never against asset count. See Limits and billing.

Next

Rank API guide

Every request field, copy-context aliases, and batch refinement.

Pairwise API

When you need a direct five-voter comparison instead of a score.