Core Concepts

What Brand Intelligence does

Adobe Brand Intelligence validates creative assets against your organization's brand guidelines. You submit assets - images, documents, layouts - and Brand Intelligence checks each one against a set of brand rules (colour palette, typography, logo usage, and so on). For each asset, Brand Intelligence returns findings with human-readable messages and attributions.

The REST API base URL is https://brand-intelligence.adobe.com. Your tenant is resolved from your access token; Use GET /index to discover your tenant's ID and name.

Use GET /campaigns?skill=validate to list available campaigns. An optional campaignId on a validation request selects a campaign.

Async invocation model

Validation is asynchronous. You submit a batch of items and receive an invocationId immediately; Brand Intelligence processes each item in the background and you poll for results.

POST /skills/validate                       → 202 Accepted  { invocationId }
GET  /skills/validate/{invocation_id}       → invocation status + counts
GET  /skills/validate/{invocation_id}/items → per-asset results

This design keeps the API responsive for large batches.

Asset sources

The REST API accepts uploaded assets only. Each item must use itemSource: "upload" and reference an upload:

  1. Request an upload location with POST /storage/temp (no request body).
  2. Upload the asset bytes to the returned uploadUrl before uploadUrlExpiresAt.
  3. Set the item's sourceRef to the returned uploadId when submitting validation.

uploadId identifies the temporary upload; itemId identifies an item returned by the validation results endpoints. Use the returned itemId for item detail and feedback requests. See Using curl for the full upload flow.

Resource hierarchy

Invocation
└── Items (one per submitted entry)
    └── Violations (reviewer feedback + pipeline findings on the item)

Invocation - represents a single validation run. Created by POST /skills/validate, with skill: "validate" in the response. Tracks overall status and aggregate counts (successCount, failureCount).

Item - represents one submitted entry within an invocation. Contains a result.summaryText and result.violations, result.passes, and result.rejections lists.

Violation - a single finding on an item. Violations are either generated by the validation pipeline (violationSource: system) or created by your application on behalf of a human reviewer (violationSource: user).

Invocation lifecycle

An invocation moves through the following states:

Status
Meaning
queued
Invocation is waiting for processing to start or for capacity under the concurrency limit.
running
One or more items are being validated.
completed
All items finished processing. Check successCount / failureCount for the outcome.
failed
The invocation as a whole failed to process.
cancelled
Invocation was cancelled before completion.

Once an invocation reaches completed, failed, or cancelled it will not change state again. Poll until you see one of these terminal states before processing results.

Item status values

Each item within an invocation moves through its own status independently:

Status
Meaning
pending
Item uploaded and ready; processing has not begun.
queued
Item is queued behind the tenant's concurrency cap.
running
Validation is actively running.
completed
Validation completed. Results are available.
failed
Validation failed for this item.
cancelled
Item's validation was cancelled.
rejected
Item was rejected rather than validated.

Validation results

Each item's detail (GET /skills/validate/{invocation_id}/items/{item_id}) contains a result object with:

For a successfully completed item, an empty violations array means no violations were reported. Check the item's status before treating an empty list as a successful validation. See Review Feedback for how to accept, reject, or add violations. Updates require the current recordVersion in a quoted If-Match header; successful updates return 204 No Content and the new version in ETag.

See the API Reference for the full ValidateItemViolation schema.

Pagination

GET /skills/invocations?skill=validate lists invocations submitted by the current user, most recent first. The skill query parameter is required (validate or iassemble). This endpoint and GET /campaigns support cursor-based pagination: pass an optional limit (1–100) and use the previous response's page.next as start. The limit is a hint, not a guaranteed page size. When page.next is absent or null, there are no further pages. Campaign listing defaults to skill=validate if the filter is omitted.

Authentication

The signed upload URL authorizes the separate storage PUT; do not send your IMS token to storage.

Every request requires an IMS Bearer token in the Authorization header. Tokens are valid for 24 hours. See Authentication for setup instructions.