Cint Profiling Templates API

Create, manage and reuse audience descriptions and templates to allow for efficient and automated targeting workflows on the Cint Exchange.

OpenAPI Specification

cint-profiling-templates-api-openapi.yml Raw ↑
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