Cint Profiling Templates API
Create, manage and reuse audience descriptions and templates to allow for efficient and automated targeting workflows on the Cint Exchange.
Create, manage and reuse audience descriptions and templates to allow for efficient and automated targeting workflows on the Cint Exchange.
openapi: 3.0.3
info:
title: Demand Accounts Profiling Templates API
description: 'Cint''s demand ordering API is REST oriented. It has predictable resource based URLs, accepts JSON-encoded request bodies, returns JSON-encoded responses, and uses standard HTTP response codes, authentication, and verbs. Error responses are also JSON-encoded and follow a standard format, providing a unique error ID and detailed information about what went wrong.
Authentication is handled via bearer tokens passed in the `Authorization` header. All requests must also include a `Cint-API-Version` header with a date in `YYYY-MM-DD` format to specify the desired API version. Depending on the version you use, endpoint behavior may differ as we improve our API with every version release.
While many operations work on a single object per request, the demand ordering API also provides asynchronous batch endpoints for performing bulk updates efficiently on certain resources. For safety, `POST` requests support an `Idempotency-Key` header to allow for safe retries without accidentally performing the same operation twice.
'
version: '2025-12-18'
servers:
- description: Production server
url: https://api.cint.com/v1
security:
- BearerAuth: []
tags:
- name: Profiling Templates
description: Create, manage and reuse audience descriptions and templates to allow for efficient and automated targeting workflows on the Cint Exchange.
paths:
/demand/accounts/{account_id}/profiling-templates:
parameters:
- $ref: '#/components/parameters/AccountID'
- $ref: '#/components/parameters/CintAPIVersion-2025-12-18'
get:
tags:
- Profiling Templates
operationId: list_profile_templates
summary: List profile templates
description: This endpoint returns a paginated list of your available profile templates. You can filter the list by scope and locale.
parameters:
- $ref: '#/components/parameters/PageSize'
- $ref: '#/components/parameters/StartAfter'
- $ref: '#/components/parameters/EndBefore'
- $ref: '#/components/parameters/Order'
- $ref: '#/components/parameters/ProfilingTemplatesScope'
- $ref: '#/components/parameters/ProfilingTemplatesLocales'
responses:
'200':
description: Returns a paginated list of profile templates.
content:
application/json:
schema:
$ref: '#/components/schemas/ProfileTemplatesList'
example:
next_cursor: a1b2c3d4-e5f6-7890-abcd-ef1234567890
templates:
- id: 01HY7WJ4QZ5XN6ZJ8Y9X0A1B2C
name: Standard B2C Demographics
description: A standard demographic template for B2C surveys.
label: Standard B2C Demographics
scope: global
locales:
- eng-us
- eng-gb
- deu-de
- id: 01HY7WJ4R0A2B3C4D5E6F7G8H9
name: Custom Tech Industry Survey
description: A custom template for tech industry surveys.
label: Custom Tech Industry Survey
scope: account
locales:
- eng-us
'400':
$ref: '#/components/responses/Error_BadRequest'
'401':
$ref: '#/components/responses/Error_Unauthorized'
'403':
$ref: '#/components/responses/Error_Forbidden'
'404':
$ref: '#/components/responses/Error_NotFound'
'500':
$ref: '#/components/responses/Error_Internal'
post:
tags:
- Profiling Templates
operationId: create_profile_template
summary: Create a profile template
description: This endpoint creates a new profile template with a specified name, scope, and set of questions.
requestBody:
required: true
content:
application/json:
schema:
$ref: '#/components/schemas/ProfileTemplateRequest'
example:
name: New IT Decision Makers Template
scope: account
locales:
- eng-us
questions:
- question_id: job_title
answer_options:
- cio
- cto
- it_manager
- question_id: company_size
answer_options:
- 1-50
- 51-200
- 201-1000
responses:
'201':
description: Returns the newly created profile template, including its unique `id`.
content:
application/json:
schema:
$ref: '#/components/schemas/ProfileTemplateResponse'
example:
id: 01HY7XM...NEWLY_CREATED_ID
name: New IT Decision Makers Template
scope: account
locales:
- eng-us
created_at: '2024-01-15T14:30:00Z'
updated_at: '2024-01-15T14:30:00Z'
questions:
- question_id: job_title
answer_options:
- cio
- cto
- it_manager
- question_id: company_size
answer_options:
- 1-50
- 51-200
- 201-1000
'400':
$ref: '#/components/responses/Error_BadRequest'
'401':
$ref: '#/components/responses/Error_Unauthorized'
'403':
$ref: '#/components/responses/Error_Forbidden'
'404':
$ref: '#/components/responses/Error_NotFound'
'500':
$ref: '#/components/responses/Error_Internal'
/demand/accounts/{account_id}/profiling-templates/{profile_template_id}:
parameters:
- $ref: '#/components/parameters/AccountID'
- $ref: '#/components/parameters/ProfileTemplateID'
- $ref: '#/components/parameters/CintAPIVersion-2025-12-18'
get:
tags:
- Profiling Templates
operationId: get_profile_template
summary: Get a profile template
description: This endpoint returns a single profile template, specified by its unique `id`.
parameters:
- $ref: '#/components/parameters/ProfilingTemplatesLocales'
responses:
'200':
description: Returns the specified profile template.
content:
application/json:
schema:
$ref: '#/components/schemas/ProfileTemplateResponse'
example:
id: 01HY7WJ4QZ5XN6ZJ8Y9X0A1B2C
name: Standard B2C Demographics
scope: global
locales:
- eng-us
- eng-gb
- deu-de
created_at: '2023-10-26T10:00:00Z'
updated_at: '2023-10-26T10:15:00Z'
questions:
- question_id: gender
answer_options:
- male
- female
- other
- question_id: age
answer_options:
- 18-24
- 25-34
- 35-44
'400':
$ref: '#/components/responses/Error_BadRequest'
'401':
$ref: '#/components/responses/Error_Unauthorized'
'403':
$ref: '#/components/responses/Error_Forbidden'
'404':
$ref: '#/components/responses/Error_NotFound'
'500':
$ref: '#/components/responses/Error_Internal'
put:
tags:
- Profiling Templates
operationId: edit_profile_template
summary: Edit a profile template
description: This endpoint updates an existing profile template. You can modify its name, scope, locales, and questions.
requestBody:
required: true
content:
application/json:
schema:
$ref: '#/components/schemas/ProfileTemplateRequest'
example:
name: Updated Standard B2C Demographics
scope: global
locales:
- eng-us
- eng-gb
- deu-de
- fra-fr
questions:
- question_id: gender
answer_options:
- male
- female
- other
- prefer_not_to_say
- question_id: age
answer_options:
- 18-24
- 25-34
- 35-44
- 45-54
responses:
'200':
description: OK
content:
application/json:
schema:
$ref: '#/components/schemas/ProfileTemplateResponse'
'400':
$ref: '#/components/responses/Error_BadRequest'
'401':
$ref: '#/components/responses/Error_Unauthorized'
'403':
$ref: '#/components/responses/Error_Forbidden'
'404':
$ref: '#/components/responses/Error_NotFound'
'500':
$ref: '#/components/responses/Error_Internal'
delete:
tags:
- Profiling Templates
operationId: delete_profile_template
summary: Delete a profile template
description: 'This endpoint permanently deletes a profile template.
:::danger Destructive Action
This operation cannot be undone.
:::
'
parameters:
- $ref: '#/components/parameters/ProfilingTemplatesLocales'
responses:
'204':
description: Confirms that the profile template was deleted successfully.
headers:
traceparent:
$ref: '#/components/headers/Traceparent'
tracestate:
$ref: '#/components/headers/Tracestate'
'401':
$ref: '#/components/responses/Error_Unauthorized'
'403':
$ref: '#/components/responses/Error_Forbidden'
'404':
$ref: '#/components/responses/Error_NotFound'
'500':
$ref: '#/components/responses/Error_Internal'
components:
schemas:
ProfileTemplateScopeless:
type: object
properties:
name:
type: string
description: A user-defined name for the template.
example: My Template
description:
type: string
description: A description for the template.
example: My Template Description
label:
type: string
description: A label for the template.
example: My Template Label
locales:
type: array
description: A list of locale codes where this template is applicable.
items:
$ref: '#/components/schemas/LocaleCode'
TemplateRegularProfiles:
type: object
required:
- object
- quotas_enabled
- targets
properties:
object:
type: string
description: A field that identifies the profile type. The value is always `regular` for this schema.
enum:
- regular
example: regular
name:
type: string
description: The name of the profile.
example: Age
description:
type: string
description: A short summary of the profile.
example: What is your age?
quotas_enabled:
type: boolean
description: Indicates if quotas are enabled for this profile.
example: true
targets:
description: Defines the specific quota targets and their conditions for this profile.
$ref: '#/components/schemas/TemplatesQuotaV3'
ProfileTemplatesList:
type: object
properties:
templates:
type: array
description: A list of profile template summary objects.
items:
$ref: '#/components/schemas/ProfileTemplateListItem'
next_cursor:
$ref: '#/components/schemas/NextCursor'
InvalidParam:
type: object
description: Describes a single invalid parameter in a request.
properties:
name:
type: string
description: The name of the parameter that failed validation.
reason:
type: string
description: A short explanation of why the parameter was invalid.
required:
- name
- reason
TemplateQuotaDetailsV3:
description: 'Represents a single quota target within a profile template. A target consists of a set of conditions and may or may not have a specific percentage of completes allocated to it. The structure will be one of the following options:
* An object with a `quota` field for targets with a defined percentage.
* An object without a `quota` field for targets that are for profiling only.
'
oneOf:
- type: object
description: A target that defines a set of conditions and the percentage of completes allocated to them
required:
- conditions
- quota
properties:
name:
type: string
description: The name of the target.
example: Target Name
text:
type: string
description: The display text for the condition.
example: Condition Text
text_translated:
type: string
description: Translated text of the condition used for display purpose.
example: Condition Text
conditions:
type: array
description: List of conditions.
minItems: 1
items:
$ref: '#/components/schemas/InterlockProfileConditionsV3'
quota:
type: object
required:
- completes_goal_percentage
properties:
completes_goal_percentage:
type: number
multipleOf: 0.01
minimum: 0
maximum: 100
description: The percentage of the total completes goal that is allocated to this target.
example: 40
- title: No quota
type: object
description: A target that defines a set of conditions that do not have a specific quota percentage assigned.
required:
- conditions
properties:
name:
type: string
description: The name of the target.
example: Target Name
text:
type: string
description: The display text for the condition.
example: Condition Text
text_translated:
type: string
description: Translated text of the condition used for display purpose.
example: Condition Text
conditions:
type: array
description: List of conditions for the quota.
minItems: 1
items:
$ref: '#/components/schemas/InterlockProfileConditionsV3'
QuestionID:
type: integer
description: The unique identifier for a profiling question.
example: 12413
ProfileTemplateID:
type: string
description: A unique identifier for the template.
format: uuid
example: 12345678-1234-1234-1234-123456789012
ProfileTemplateOverview:
description: Represents the overview information for a profile template, combining the base details with its `scope`.
allOf:
- $ref: '#/components/schemas/ProfileTemplateScopeless'
- properties:
scope:
type: string
description: 'The scope of the profile template, which determines its availability.
* `global`: Choose this if you want the template to be available for all accounts.
* `account`: Choose this if you want the template to be available only for a specified account.
'
enum:
- global
- account
example: global
LocaleCode:
type: string
description: Unique text code of the locale.
example: eng_us
Traceparent:
type: string
description: 'The traceparent header carries essential trace context information. This includes the trace ID and parent span ID as defined by the W3C trace context specification. It is used to pinpoint the position of an incoming request within the trace graph, facilitating the tracking of distributed operations.
Note: This field is optional and will be automatically generated by the service if not provided in the request. The generated value will be included in the response header.'
example: 00-0af7651916cd43dd8448eb211c80319c-b7ad6b7169203331-01
ProfileTemplateListItem:
type: object
description: A summary view of a profile template, typically returned in a list. It combines the template's overview with its unique `id`.
allOf:
- properties:
id:
$ref: '#/components/schemas/ProfileTemplateID'
- $ref: '#/components/schemas/ProfileTemplateOverview'
Error:
type: object
description: The standard error object returned for all failed API requests.
required:
- object
- detail
properties:
id:
type: string
format: uuid
description: A unique identifier for this specific error instance.
object:
type: string
description: A short informative string identifying the type of the error
pattern: ^([a-z]*_)*([a-z]*)$
detail:
type: string
description: An error message provides a concise overview of the cause of the error.
invalid_params:
type: array
nullable: true
description: An optional field containing a list of invalid parameters may be presented in validation errors for additional information.
items:
$ref: '#/components/schemas/InvalidParam'
ProfileTargetsRangeConditionsV3:
title: Range condition
type: object
description: A profiling condition that targets a numeric range (e.g. age).
required:
- object
- question_id
- min
- max
properties:
object:
type: string
description: The type of profiling condition. For this object, the value is always 'range'.
enum:
- range
example: range
question_id:
$ref: '#/components/schemas/QuestionID'
min:
type: integer
format: int32
minimum: 1
maximum: 99
description: The minimum numeric value (inclusive).
example: 18
max:
type: integer
format: int32
minimum: 1
maximum: 99
description: The maximum numeric value (inclusive).
example: 24
ProfileTemplateRequest:
description: The request payload for creating or updating a profile template.
allOf:
- $ref: '#/components/schemas/ProfileTemplateScopeless'
- properties:
profiling:
$ref: '#/components/schemas/ProfilingTemplate'
- required:
- name
- locales
- label
- profiling
InterlockProfileConditionsV3:
description: A polymorphic object representing a single profiling condition, which can be a `selection`, `range`, or `open_ended` type.
oneOf:
- $ref: '#/components/schemas/ProfileTargetsSelectionConditionsV3'
- $ref: '#/components/schemas/ProfileTargetsRangeConditionsV3'
- $ref: '#/components/schemas/ProfileTargetsOpenEndedConditionsV3'
ProfileTemplateResponse:
type: object
description: The response payload for a single, complete profile template, including its overview details and full profiling question set.
allOf:
- properties:
id:
$ref: '#/components/schemas/ProfileTemplateID'
- $ref: '#/components/schemas/ProfileTemplateOverview'
- properties:
profiling:
$ref: '#/components/schemas/ProfilingTemplate'
ProfileTargetsSelectionConditionsV3:
title: Selection condition
type: object
description: A profiling condition that targets a specific answer option (e.g. gender).
required:
- object
- question_id
- option
properties:
object:
type: string
description: The type of profiling condition. For this object, the value is always 'selection'.
enum:
- selection
example: selection
question_id:
$ref: '#/components/schemas/QuestionID'
option:
type: string
description: The unique identifier for the selected answer option.
example: '1'
Tracestate:
type: string
description: 'The tracestate header provides additional contextual information to the traceparent header. This enriches the tracing context and offers more fine-grained control
Note: This field is optional and will be automatically generated by the service if not provided in the request. The generated value will be included in the response header.'
example: ot=foo:bar;k1:13
TemplatesQuotaV3:
type: array
description: A list of quota targets for the profile template.
minItems: 1
items:
$ref: '#/components/schemas/TemplateQuotaDetailsV3'
AccountID:
description: The account's unique identifier.
type: integer
format: int32
example: 101
NextCursor:
description: 'An identifier for pagination that indicates there are more items available.
When present, use this value to retrieve the next page of results.
'
type: string
nullable: true
example: bff6a669-a469-409d-8c94-dcf92258043a
ProfileTargetsOpenEndedConditionsV3:
title: Open-ended condition
description: A profiling condition that targets open-ended text values.
oneOf:
- title: Allow All Values
description: If `allow_all_values` is true, `open_ended_values` must be null.
type: object
properties:
object:
type: string
description: The type of profiling condition. For this object, the value is always 'open_ended'.
enum:
- open_ended
example: open_ended
question_id:
$ref: '#/components/schemas/QuestionID'
allow_all_values:
type: boolean
enum:
- true
description: Flag to allow all values.
open_ended_values:
type: array
minItems: 0
maxItems: 0
items:
type: string
nullable: true
description: Must be null when `allow_all_values` is true.
required:
- object
- question_id
- allow_all_values
- open_ended_values
- title: Specific Open End Values
description: If `allow_all_values` is false, `open_ended_values` must contain at least one open end value.
type: object
properties:
object:
type: string
description: Object field to distinguish between different types of control selections. Always is `open_ended`.
enum:
- open_ended
example: open_ended
question_id:
$ref: '#/components/schemas/QuestionID'
allow_all_values:
type: boolean
enum:
- false
description: Flag to allow only specific open end values.
open_ended_values:
type: array
items:
type: string
minItems: 1
maxItems: 10000
description: List of applicable open end values. Required when `allow_all_values` is false. Note that only 10,000 values may be provided. For more than 10,000, please contact your integration consultant.
required:
- object
- question_id
- allow_all_values
- open_ended_values
example:
object: open_ended
question_id: 45
open_ended_values: []
allow_all_values: true
ProfilingTemplate:
type: object
required:
- profile_adjustment_type
- profiles
properties:
profile_adjustment_type:
type: string
description: The method used to specify quota targets. The only supported value is `percentage`, where you specify a proportion of the total completes for each target.
example: percentage
enum:
- percentage
profiles:
type: array
minItems: 1
description: List of regular profiles.
items:
$ref: '#/components/schemas/TemplateRegularProfiles'
parameters:
Order:
name: order
in: query
description: 'The order in which to return the list objects.
Default is `desc`, which returns objects in descending created_at order.
'
schema:
type: string
enum:
- desc
- asc
default: desc
ProfileTemplateID:
name: profile_template_id
in: path
schema:
$ref: '#/components/schemas/ProfileTemplateID'
required: true
description: A unique identifier for the profile template.
ProfilingTemplatesLocales:
name: locales
in: query
description: 'Comma-separated list of locales to filter templates by. If multiple locales are provided,
templates that match any of the locales will be returned (OR logic).
Examples:
- eng_us
- eng_us,jpn_jp
'
schema:
type: string
example: eng_us,jpn_jp
CintAPIVersion-2025-12-18:
name: Cint-API-Version
in: header
required: true
schema:
type: string
example: 2025-12-18
description: 'This header is MANDATORY for all API requests. The API version format is `YYYY-MM-DD`.
'
EndBefore:
name: end_before
in: query
description: Returns a list of objects that come before the provided pagination cursor. This is used for navigating to a previous page.
schema:
type: string
example: 7daa40ad-303b-40a2-89df-a9760400cde7
PageSize:
name: page_size
in: query
description: A limit on the number of objects to be returned, between 1 and 100.
schema:
type: integer
default: 10
example: 15
StartAfter:
name: start_after
in: query
description: Returns a list of objects after the provided pagination cursor, using the next_cursor from the previous response.
schema:
type: string
example: bff6a669-a469-409d-8c94-dcf92258043a
ProfilingTemplatesScope:
name: scope
in: query
description: Filter templates by scope. If scope is not provided, both global and account templates will be returned.
schema:
type: string
enum:
- global
- account
example: account
AccountID:
name: account_id
description: The account's unique identifier.
in: path
required: true
schema:
$ref: '#/components/schemas/AccountID'
responses:
Error_NotFound:
description: A requested resource isn't found.
content:
application/json:
schema:
$ref: '#/components/schemas/Error'
example:
id: 7a5972ba-0825-4360-b852-fa2430e47034
object: not_found_error
detail: resource not found
Error_Internal:
description: A request failed due to an internal error.
content:
application/json:
schema:
$ref: '#/components/schemas/Error'
example:
id: d94b8bb2-a540-4a91-9c05-2aa3ae9a5e1e
object: unexpected_internal_error
detail: an internal error has led to the failure of this operation
Error_Forbidden:
description: A requested is forbidden.
content:
application/json:
schema:
$ref: '#/components/schemas/Error'
example:
id: fe68cdd2-ee87-4dbf-8950-63c5cbca94c7
object: authorization_error
detail: you don't have the right permissions to perform this operation
Error_Unauthorized:
description: A request is unauthorized.
content:
application/json:
schema:
$ref: '#/components/schemas/Error'
example:
id: 1dcf0f40-f0d1-4cf6-8c00-c3d019d32faf
object: authorization_error
detail: no valid authorization provided for this operation
Error_BadRequest:
description: A request is not valid and can't be processed.
content:
application/json:
schema:
$ref: '#/components/schemas/Error'
example:
id: 9e278238-d011-4e05-8327-1ce1d5d26254
object: bad_request_error
detail: Expected field 'foo' is missing.
headers:
Tracestate:
description: The `tracestate` header complements the `traceparent` header by carrying vendor-specific trace information. This allows different services to add their own data to a trace.
required: false
schema:
$ref: '#/components/schemas/Tracestate'
Traceparent:
description: The `traceparent` header carries the trace ID and parent span ID, as defined by the W3C Trace Context specification. It's used to trace a single request as it moves through multiple services.
required: false
schema:
$ref: '#/components/schemas/Traceparent'
securitySchemes:
BearerAuth:
type: http
scheme: bearer
bearerFormat: JWT
description: Bearer token used for authentication and authorization. See [Authentication Process](https://developer.cint.com/en/guides#authentication-process) documentation for more information.
ApiKeyAuth:
type: apiKey
in: header
name: Authorization
description: API Key Authentication