Cint Fielding Assistant API

Get, update Target Group Fielding Assistant assignments. Fielding Assistant provides optional modules to automate common workflows and optimise your Target Group.

OpenAPI Specification

cint-fielding-assistant-api-openapi.yml Raw ↑
openapi: 3.0.3
info:
  title: Demand Accounts Fielding Assistant 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: Fielding Assistant
  description: Get, update Target Group Fielding Assistant assignments. Fielding Assistant provides optional modules to automate common workflows and optimise your Target Group.
paths:
  /demand/accounts/{account_id}/projects/{project_id}/target-groups/{target_group_id}/fielding-assistant-assignment:
    parameters:
    - $ref: '#/components/parameters/AccountID'
    - $ref: '#/components/parameters/ProjectID'
    - $ref: '#/components/parameters/TargetGroupID'
    - $ref: '#/components/parameters/CintAPIVersion-2025-12-18'
    get:
      operationId: get_fielding_assistant_assignment
      summary: Retrieves the Fielding Assistant assignment for a target group
      description: "Retrieves the current Fielding Assistant configuration for a target group. The response will show which modules, if any, are currently enabled. Examples:\n\n  * Pricing\n  * Quota overlay\n  * Pacing\n  * Soft launch"
      tags:
      - Fielding Assistant
      responses:
        '200':
          description: The Fielding Assistant assignment details were retrieved successfully.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/FieldingAssistantModulesAssignment'
              example:
                pricing:
                  type: dynamic
                  maximum_cpi":
                    value: '5.00'
                    currency_code: USD
                    currency_scale: 2
                pacing:
                  type: linear
                  increment_interval: P1D
                quota_overlay:
                  prevent_overfill": true
                  balance_fill: true
                soft_launch: null
          headers:
            ETag:
              $ref: '#/components/headers/ETag'
        '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:
      operationId: create_or_update_fielding_assistant_assignment
      summary: Create or update the Fielding Assistant assignment
      description: 'Creates or fully replaces the Fielding Assistant assignment for a target group. This is an "all or nothing" operation.

        To modify an existing assignment, you must first GET the current configuration, make your changes,

        and then PUT the entire modified object back. Sending a request with only one module will disable all others.

        To disable all modules, send an empty object `{}`. This endpoint uses the `If-Match` header for optimistic locking.

        '
      tags:
      - Fielding Assistant
      parameters:
      - $ref: '#/components/parameters/IfMatch'
      - $ref: '#/components/parameters/IfNoneMatch'
      requestBody:
        description: Fielding assistant assignment request.
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/FieldingAssistantModulesAssignmentRequestModel'
            examples:
              full_configuration:
                summary: Enable Dynamic Pricing and Linear Pacing
                description: Example configuration with dynamic pricing, linear pacing, and quota overlay modules enabled
                value:
                  pricing:
                    type: dynamic
                    maximum_cpi:
                      value: '5.00'
                      currency_code: USD
                  pacing:
                    type: linear
                    increment_interval: P1D
                  quota_overlay:
                    prevent_overfill: true
                    balance_fill: true
              disable_all:
                summary: Disable All Modules
                description: Send an empty object to disable all Fielding Assistant modules
                value: {}
      responses:
        '204':
          description: Fielding assistant assignment on target group successfully created or updated.
        '400':
          $ref: '#/components/responses/Error_BadRequest'
        '401':
          $ref: '#/components/responses/Error_Unauthorized'
        '403':
          $ref: '#/components/responses/Error_Forbidden'
        '404':
          $ref: '#/components/responses/Error_NotFound'
        '412':
          $ref: '#/components/responses/Precondition_Failed'
        '500':
          $ref: '#/components/responses/Error_Internal'
components:
  schemas:
    FieldingAssistantModulesAssignment:
      title: Fielding Assistant modules assignment
      description: A container for all enabled Fielding Assistant modules for a target group. Each module is optional; if a module is omitted or set to `null`, it is considered disabled.
      type: object
      properties:
        pricing:
          oneOf:
          - $ref: '#/components/schemas/ModuleDynamicPricing'
          - $ref: '#/components/schemas/ModuleRateCardPricing'
          nullable: true
        quota_overlay:
          allOf:
          - $ref: '#/components/schemas/ModuleQuotaOverlay'
          nullable: true
        pacing:
          oneOf:
          - $ref: '#/components/schemas/ModuleLinearPacing'
          - $ref: '#/components/schemas/ModuleAdaptivePacing'
          - $ref: '#/components/schemas/ModuleGeminiPacing'
          nullable: true
        soft_launch:
          allOf:
          - $ref: '#/components/schemas/ModuleSoftLaunch'
          nullable: true
    ModuleSoftLaunch:
      title: Soft launch
      type: object
      description: Manages a soft launch of a target group. During a soft launch, pacing modules are ignored.
      properties:
        end_at:
          type: string
          description: The soft launch will be finished at this date, and the target group paused regardless of the fill.
          format: date-time
          example: '2023-01-01T23:00:00.000Z'
        filling_goal_percentage:
          description: The percentage of the full filling goal to collect during the soft launch phase.
          type: integer
          minimum: 1
          maximum: 100
          example: 1
        demographics_strictness_percentage:
          description: Controls how strictly the soft launch's demographic distribution should follow the full launch's distribution. A value of `100` aims to match the distribution perfectly, while `0` allows any distribution.
          type: integer
          minimum: 0
          maximum: 100
          example: 1
      required:
      - end_at
      - filling_goal_percentage
      - demographics_strictness_percentage
    ETag:
      type: string
      description: The `ETag` header provides a unique identifier that represents the current version state of a particular resource.
      example: W/"1234"
    ModuleGeminiPacing:
      title: Gemini pacing
      type: object
      description: Always collects at most as many completes on each quota, as were collected on an exposed target group. Intended for Measurement control target groups.
      properties:
        type:
          type: string
          enum:
          - gemini
          description: The type of module. For this object, the value is always 'gemini'.
        exposed_target_group_id:
          type: string
          format: ulid
          description: Uniquely identifies exposed target group by ID.
          example: 01HC2Z6TM8C4F3Y5CA6S2JR475
      required:
      - type
      - exposed_target_group_id
    IncrementInterval:
      type: string
      format: duration
      example: P1DT5H
      description: 'The duration between each quota increment, in ISO-8601 format.


        Key details:


        * **Format:** Must follow the `PnDTnHnMnS` pattern (e.g., `P1D` for one day, `PT12H` for 12 hours).

        * **Limit:** The duration must be less than 398 days.

        '
    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
    ModuleDynamicPricing:
      title: Dynamic pricing
      type: object
      description: 'Controls the Cost Per Interview (CPI) to achieve a 100% fill rate by the target group''s end date as cost-effectively as possible.


        Key behaviors:


        * **Prerequisite:** This module can only be used for target groups configured with dynamic pricing.

        * You must specify either `total_budget` or `maximum_cpi`, but not both.

        * If you specify `minimum_cpi`, it must be lower than the `maximum_cpi`.

        * The `total_budget` setting can overrule the `minimum_cpi`.

        '
      properties:
        type:
          type: string
          enum:
          - dynamic
          description: The type of module. For this object, the value is always 'dynamic'.
        total_budget:
          description: The maximum total amount to spend for the target number of completes.
          allOf:
          - $ref: '#/components/schemas/MonetaryAmount'
        maximum_cpi:
          description: The maximum cost per interview (CPI) that the module is allowed to set.
          allOf:
          - $ref: '#/components/schemas/MonetaryAmount'
        minimum_cpi:
          description: The minimum cost per interview (CPI) that the module is allowed to set.
          allOf:
          - $ref: '#/components/schemas/MonetaryAmount'
      required:
      - type
    TargetGroupID:
      description: A unique identifier for the target group, in ULID format.
      type: string
      pattern: ^[0-9A-Z]{26}$
      example: 01BTGNYV6HRNK8K8VKZASZCFP1
    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
    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'
    MonetaryAmount:
      type: object
      description: Represents a monetary value, including the amount and its currency.
      properties:
        value:
          type: string
          description: A decimal encapsulated in a string representing the value in the denomination indicated by the code.
          example: '2.7352'
        currency_code:
          $ref: '#/components/schemas/CurrencyCode'
        currency_scale:
          allOf:
          - nullable: true
          - type: integer
            description: The number of digits after the decimal separator, as defined by ISO 4217.
            example: 2
    FieldingAssistantModulesAssignmentRequestModel:
      title: Fielding Assistant modules assignment
      description: Having an assignment enables Fielding Assistant modules on a specified target group.  All modules are optional, their omission means they are not enabled.
      type: object
      properties:
        pricing:
          description: The pricing module configuration. The `type` field within the object determines the model (`dynamic` or `rate_card`).
          oneOf:
          - $ref: '#/components/schemas/ModuleDynamicPricing'
          - $ref: '#/components/schemas/ModuleRateCardPricing'
          nullable: true
        quota_overlay:
          $ref: '#/components/schemas/ModuleQuotaOverlay'
        pacing:
          description: The pacing module configuration. The `type` field within the object determines the pacing strategy (`linear`, `adaptive`, or `gemini`).
          oneOf:
          - $ref: '#/components/schemas/ModuleLinearPacing'
          - $ref: '#/components/schemas/ModuleAdaptivePacing'
          - $ref: '#/components/schemas/ModuleGeminiPacing'
          nullable: true
        soft_launch:
          $ref: '#/components/schemas/ModuleSoftLaunch'
    ProjectID:
      description: The character string representing a unique project ID (ULID format).
      type: string
      pattern: ^[0-9A-Z]{26}$
      example: 01BTGNYV6HRNK8K8VKZASZCFP0
    ModuleRateCardPricing:
      title: Rate Card pricing
      type: object
      description: Manages pricing for a target group that uses a rate card model. This module cannot be used with `dynamic` pricing.
      properties:
        type:
          type: string
          enum:
          - rate_card
          description: The type of module. For this object, the value is always 'rate_card'.
        maximum_cpi:
          description: The maximum cost per interview (CPI) that the module is allowed to set.
          allOf:
          - $ref: '#/components/schemas/MonetaryAmount'
        boost_cpi:
          description: Additional amount to be added to the CPI inferred from the rate card. Respects the `maximum_cpi` setting limit.
          allOf:
          - $ref: '#/components/schemas/MonetaryAmount'
      required:
      - type
    ModuleLinearPacing:
      title: Linear even pacing
      type: object
      description: Paces fielding by incrementing the completes goal in regular intervals until the target group's end date.
      properties:
        type:
          type: string
          enum:
          - linear
          description: The type of module. For this object, the value is always 'linear'.
        increment_interval:
          $ref: '#/components/schemas/IncrementInterval'
      required:
      - type
      - increment_interval
    ModuleQuotaOverlay:
      title: Quota overlay
      type: object
      description: Controls how the overall completes goal is distributed across the target group's quotas.
      properties:
        prevent_overfill:
          type: boolean
          description: When `true`, this setting helps prevent quotas from exceeding their target number of completes.
          example: true
        balance_fill:
          type: boolean
          description: Whentrue, this setting ensures that quotas within the same demographic category fill at a similar rate.
          example: true
      required:
      - prevent_overfill
      - balance_fill
    CurrencyCode:
      type: string
      description: The three-letter ISO 4217 currency code, in uppercase. The code must correspond to a currency supported by Cint Exchange.
      example: USD
    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
    AccountID:
      description: The account's unique identifier.
      type: integer
      format: int32
      example: 101
    ModuleAdaptivePacing:
      title: Adaptive even pacing
      type: object
      description: Increments quotas in regular intervals, recalculating steps after each interval to evenly pace  the rest of the Completes Goal until the end date.
      properties:
        type:
          type: string
          enum:
          - adaptive
          description: The type of module. For this object, the value is always 'adaptive'.
        increment_interval:
          $ref: '#/components/schemas/IncrementInterval'
      required:
      - type
      - increment_interval
  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
    Precondition_Failed:
      description: The resource could not be modified because the ETag in the If-Match header does not match the current version. This means the resource was updated by another request after you retrieved it.
      headers:
        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'
        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'
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/Error'
          example:
            id: 3d61d9c3-68ee-4026-b436-6e76a2b33932
            object: precondition_failed_error
            detail: The resource has been modified since you last retrieved it. Please fetch the latest version and try your request again.
    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.
  parameters:
    ProjectID:
      name: project_id
      description: A unique identifier for the project, in ULID format.
      in: path
      required: true
      schema:
        $ref: '#/components/schemas/ProjectID'
    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`.

        '
    IfNoneMatch:
      name: If-None-Match
      description: The ETag value of the resource you intend to update. This is used for optimistic locking to prevent you from accidentally overwriting changes made by someone else. You can get the ETag from a GET request for the resource. The `ETag` value should always be wrapped in double quotes, whether it is part of a weak `ETag` or standalone. Using `*` will match any version state.
      in: header
      schema:
        type: string
        format: etag
        example: '1'
    IfMatch:
      name: If-Match
      description: The ETag value of the resource you intend to update. This is used for optimistic locking to prevent you from accidentally overwriting changes made by someone else. You can get the ETag from a GET request for the resource. The `ETag` value should always be wrapped in double quotes, whether it is part of a weak `ETag` or standalone.
      in: header
      schema:
        type: string
        format: etag
        example: W/"1234"
    TargetGroupID:
      name: target_group_id
      description: A unique identifier for the target group, in ULID format.
      in: path
      required: true
      schema:
        $ref: '#/components/schemas/TargetGroupID'
    AccountID:
      name: account_id
      description: The account's unique identifier.
      in: path
      required: true
      schema:
        $ref: '#/components/schemas/AccountID'
  headers:
    ETag:
      description: The `ETag` header provides a unique identifier that represents the current version of a resource. It's used for caching and to prevent concurrent modification issues.
      required: true
      schema:
        $ref: '#/components/schemas/ETag'
  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