Skip to content

Delivery quote

POST
/v1/quote
curl --request POST \
--url https://api.infiniteaudience.ai/v1/quote \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '{ "audience_id": "example", "destination": "download", "template_id": "example", "field_list": [ "example" ], "include_unmatched": true, "output_format": "csv", "output_compression": "none" }'

Returns a price estimate for a proposed delivery without executing it. Provide the audience ID, destination, and optionally field_list or template_id (mutually exclusive) to receive a structured cost breakdown and credit balance information. If neither is provided, the Standard IAG attribute set is used. No commitment is made and nothing is stored. Download is the currently active destination; LiveRamp and Narrative return 503 before a quote or billable record is created until their partner pushes are implemented. Returns two cost figures: cost_estimate is license-aware (identities this audience already holds an active 12-month license for elsewhere are excluded from the billable count) and max_cost_estimate is the worst-case ceiling assuming no identity is pre-licensed. See license_pricing.status for whether cost_estimate reflects a live or cached computation, or degraded non-blockingly to the max figure. Requires ‘discovery’ scope.

Media typeapplication/json
object
audience_id
required

ID of the audience to quote a delivery for.

string
destination
required

Intended destination. liveramp and narrative currently return DELIVERY_DESTINATION_UNAVAILABLE without billing.

string
Allowed values: download liveramp narrative
template_id

Enrichment template ID. Only standard_iag is valid. Mutually exclusive with field_list. If neither is provided, the Standard IAG attribute set (all attributes with product_usage containing audience) is used.

string | null
field_list

Explicit attribute list — every attribute must be a valid audience attribute (see GET /v1/catalog/fields). Mutually exclusive with template_id. If neither is provided, the Standard IAG attribute set is used.

Array<string> | null
include_unmatched

Include unmatched input rows in matched-audience output.

boolean
default: true
output_format

Artifact format being quoted, independent of matched-input format.

string
default: csv
Allowed values: csv avro json jsonl
output_compression

Gzip is supported for csv/json/jsonl. Avro uses native DEFLATE and rejects outer gzip.

string
default: none
Allowed values: none gzip

Price quote — no commitment made.

Media typeapplication/json
object
audience_id
required
string
subtype
required
string
Allowed values: filter matched similarity propensity
destination
required
string
template_id
required
string | null
field_list
required
Array<string> | null
output_format
required
string
Allowed values: csv avro json jsonl
output_compression
required
string
Allowed values: none gzip
already_delivered
required

true if this billing identity (audience composition and segment revisions, resolved fields, unmatched-row policy, and destination) has already been delivered. Artifact format/compression are deliberately excluded, so changing only those axes permits a free re-export.

boolean
quote_id
required

ID of the persisted quote backing this estimate. null when already_delivered is true (a free re-delivery has no pending cost, so nothing is persisted).

string | null
cost_estimate
required

The license-aware, expected-to-be-charged estimate — reflects any active licenses this audience’s identities already hold elsewhere (see license_pricing.status). Equals max_cost_estimate exactly when license_pricing.status is unavailable.

object
base_cost
required

Base audience-delivery cost.

number
match_cost
required

One-time deferred file-match cost included only until the underlying run is first delivered.

number
field_cost
required

Total surcharge for requested attributes.

number
destination_cost
required

Destination surcharge (0 for download).

number
total_cost
required

Sum of all cost components.

number
unit_price
required

Effective cost per record.

number
billing_count
required

Number of records that will be billed.

integer
max_cost_estimate
required

The worst-case ceiling, computed as if no identity in this audience were already licensed anywhere. Always present and always the same value regardless of license_pricing.status — use this for a stable upper bound.

object
base_cost
required

Base audience-delivery cost.

number
match_cost
required

One-time deferred file-match cost included only until the underlying run is first delivered.

number
field_cost
required

Total surcharge for requested attributes.

number
destination_cost
required

Destination surcharge (0 for download).

number
total_cost
required

Sum of all cost components.

number
unit_price
required

Effective cost per record.

number
billing_count
required

Number of records that will be billed.

integer
license_pricing
required
object
status
required

Whether cost_estimate reflects a freshly-computed license split (live), a recent cached one (cached, still authoritative — only the underlying counts are reused, dollars are always recomputed from current rates), or could not be determined in time (unavailable — cost_estimate equals max_cost_estimate exactly in this case, so no consumer sees a misleading number).

string
Allowed values: live cached unavailable
evaluated_at
required

When the license split backing cost_estimate was computed. For a cached split this is the ORIGINAL computation time, not now — use it to judge staleness. Null when status is unavailable.

string | null format: date-time
already_licensed_count
required

How many of this audience’s candidate identities already hold an active license elsewhere and were therefore excluded from cost_estimate’s billable count. Null when status is unavailable.

integer | null
record_count
required

Current audience size.

integer
match_count
required

Matched subtype only — resolved rows from most recent delivery.

integer | null
billing_model
required

Resolved from the org’s own billing_model, or ‘postpay’ for parent_billed (agency) orgs. Determines which of available_balance/shortfall vs. budget_ceiling/accrued_balance is populated below.

string
Allowed values: prepay postpay
available_balance
required

Prepay only — effective credit balance after holds. Null for postpay/agency orgs, which have no credit balance.

number | null
sufficient_balance
required

Prepay: whether available_balance ≥ total_cost. Postpay/agency: whether this delivery would stay within the org’s/agency’s optional budget ceiling (always true when no ceiling is set).

boolean
shortfall
required

Prepay only — credits needed beyond current balance (0 when sufficient). Null for postpay/agency.

number | null
budget_ceiling
required

Postpay/agency only — the org’s configured budget ceiling in USD. Null if unset (unlimited) or for prepay.

number | null
accrued_balance
required

Postpay/agency only — accrued USD spend so far this cycle. Null for prepay.

number | null
Example
{
"audience_id": "aud_abc123",
"subtype": "filter",
"destination": "download",
"template_id": "standard_iag",
"field_list": null,
"output_format": "csv",
"output_compression": "none",
"already_delivered": false,
"quote_id": "q_abc123",
"cost_estimate": {
"base_cost": 0.08,
"match_cost": 0,
"field_cost": 0.04,
"destination_cost": 0,
"total_cost": 0.12,
"unit_price": 0.0015,
"billing_count": 80000
},
"max_cost_estimate": {
"base_cost": 0.08,
"match_cost": 0,
"field_cost": 0.04,
"destination_cost": 0,
"total_cost": 0.12,
"unit_price": 0.0015,
"billing_count": 80000
},
"license_pricing": {
"status": "live",
"evaluated_at": "2026-08-21T12:00:00.000Z",
"already_licensed_count": 0
},
"record_count": 80000,
"match_count": null,
"billing_model": "prepay",
"available_balance": 5,
"sufficient_balance": true,
"shortfall": 0,
"budget_ceiling": null,
"accrued_balance": null
}

Invalid request — malformed body, missing required attribute, or failed validation. See error and message for details.

Media typeapplication/json
object
error
required

Stable machine-readable error code (e.g. INVALID_STATUS_TRANSITION, BILLING_INSUFFICIENT_BALANCE). Always present.

string
message

Human-readable explanation of the error.

string
code

Alternate machine-readable code — present on some endpoints as an alias for error for backward compatibility.

string
request_id

Opaque support/debug identifier when available.

string
key
additional properties
any
Examples
Examplevalidation_error
{
"error": "Bad Request",
"code": "MISSING_SEGMENTS",
"message": "segment_ids is required for filter audiences."
}

Missing or invalid Bearer token. Obtain one via POST /v1/auth/token. When a token was supplied but rejected, code distinguishes TOKEN_EXPIRED (the token’s lifetime has passed — request a new one via POST /v1/auth/token and retry) from TOKEN_INVALID (malformed or revoked — re-authenticate).

Media typeapplication/json
object
error
required

Stable machine-readable error code (e.g. INVALID_STATUS_TRANSITION, BILLING_INSUFFICIENT_BALANCE). Always present.

string
message

Human-readable explanation of the error.

string
code

Alternate machine-readable code — present on some endpoints as an alias for error for backward compatibility.

string
request_id

Opaque support/debug identifier when available.

string
key
additional properties
any
Examples
{
"error": "Unauthorized: Missing or invalid Authorization header"
}

Token is valid but lacks the required scope for this endpoint. Check the endpoint description for the required scope (discovery, purchase, or account).

Media typeapplication/json
object
error
required

Stable machine-readable error code (e.g. INVALID_STATUS_TRANSITION, BILLING_INSUFFICIENT_BALANCE). Always present.

string
message

Human-readable explanation of the error.

string
code

Alternate machine-readable code — present on some endpoints as an alias for error for backward compatibility.

string
request_id

Opaque support/debug identifier when available.

string
key
additional properties
any
Examples
Examplemissing_scope
{
"error": "SCOPE_REQUIRED",
"message": "This endpoint requires the purchase scope."
}

Resource not found or not accessible to the calling org.

Media typeapplication/json
object
error
required

Stable machine-readable error code (e.g. INVALID_STATUS_TRANSITION, BILLING_INSUFFICIENT_BALANCE). Always present.

string
message

Human-readable explanation of the error.

string
code

Alternate machine-readable code — present on some endpoints as an alias for error for backward compatibility.

string
request_id

Opaque support/debug identifier when available.

string
key
additional properties
any
Examples
Examplenot_found
{
"error": "Audience not found"
}

A required billing provider partnership is temporarily unavailable.

Media typeapplication/json
object
error
required

Stable machine-readable error code (e.g. INVALID_STATUS_TRANSITION, BILLING_INSUFFICIENT_BALANCE). Always present.

string
message

Human-readable explanation of the error.

string
code

Alternate machine-readable code — present on some endpoints as an alias for error for backward compatibility.

string
request_id

Opaque support/debug identifier when available.

string
key
additional properties
any
Examplegenerated
{
"error": "example",
"message": "example",
"code": "example",
"request_id": "example"
}