openapi: 3.0.3 info: title: Demand Accounts Exclusive Endpoints 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: Exclusive Endpoints description: For more information, if you need functionality in this section, please contact your account manager paths: /demand/accounts/{account_id}/business-units/{business_unit_id}/generate-price-prediction: parameters: - $ref: '#/components/parameters/CintAPIVersion-2025-12-18' post: operationId: generate_price_prediction summary: Generates a price prediction description: 'Predicts the cost per interview (CPI) for a potential target group using either a `rate_card` or `dynamic` pricing model. The model you choose must match the business unit''s pricing configuration. Private Exchange required. This endpoint is only available for accounts with a Private Exchange. If your account does not have this feature enabled, requests will fail with a 403 Forbiddenerror. Please contact your account manager if you need access to this functionality.' tags: - Exclusive Endpoints parameters: - $ref: '#/components/parameters/AccountID' - $ref: '#/components/parameters/BusinessUnitID' requestBody: required: true content: application/json: schema: $ref: '#/components/schemas/GetRedactedPricePredictionRequest' examples: rate_card: summary: Rate Card Prediction description: Request a price prediction using the rate card pricing model value: config: type: rate_card country_code: US expected_incidence_rate: 0.25 expected_length_of_interview_minutes: 15 maximum_cpi: value: '10.00' currency_code: USD dynamic: summary: Dynamic Pricing Prediction description: Request a price prediction using the dynamic pricing model value: config: type: dynamic user_requested_cpi: value: '5.50' currency_code: USD responses: '200': description: The price prediction was generated successfully. content: application/json: schema: $ref: '#/components/schemas/GetRedactedPricePredictionResponse' example: buyer_account_id: 101 buyer_business_unit_id: '1234' buyer_business_unit_exchange_rate_from_usd: 1.0 open_exchange_price: pricing_context: type: rate_card rate_card_token: some_rate_card_token cost_per_interview: value: '4.75' currency_code: USD currency_scale: 2 private_exchange_prices: - supplier_id: '43' pricing_context: type: dynamic cost_per_interview: value: '5.50' currency_code": USD currency_scale: 2 '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}/business-units/{business_unit_id}/target-groups/{target_group_id}/price: parameters: - $ref: '#/components/parameters/AccountID' - $ref: '#/components/parameters/BusinessUnitID' - $ref: '#/components/parameters/TargetGroupID' - $ref: '#/components/parameters/CintAPIVersion-2025-12-18' get: operationId: get_target_group_price summary: Retrieves the pricing details for a target group description: 'Retrieves the current pricing details for a specific target group. The response includes the cost per interview (CPI) and the pricing context (`rate_card` or `dynamic`) for both the Open Exchange and any applicable Private Exchange suppliers. Private Exchange required. This endpoint is only available for accounts with a Private Exchange. If your account does not have this feature enabled, requests will fail with a `403 Forbidden` error. Please contact your account manager if you need access to this functionality.' tags: - Exclusive Endpoints responses: '200': description: The pricing details for the target group were retrieved successfully. content: application/json: schema: $ref: '#/components/schemas/GetTargetGroupPriceResponse' example: price_type: specification buyer_account_id: 101 buyer_business_unit_id: '1234' target_group_id: 01BTGNYV6HRNK8K8VKZASZCFP1 buyer_business_unit_exchange_rate_from_usd: 1.0 pricing_config_token: MDFKSE42MDQ1RFg2Tk0wQjlBQ0Q5QVhQQzk7Nw== open_exchange_price: pricing_context: type: rate_card rate_card_token: some_rate_card_token cost_per_interview: value: '4.75' currency_code: USD currency_scale: 2 private_exchange_prices: - supplier_id: '43' pricing_context: type: dynamic cost_per_interview: value: '5.50' currency_code: USD currency_scale: 2 '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' components: schemas: RateCardToken: type: string description: An opaque token that uniquely identifies the rate card configuration used in a pricing calculation. example: MDFKSE42MDQ1RFg2Tk0wQjlBQ0Q5QVhQQzk7Nw== GetRedactedPricePredictionRequest: type: object description: The request body for generating a price prediction. required: - config properties: config: description: The pricing configuration. The `type` field within the object determines which model to use (`rate_card` or `dynamic`). oneOf: - $ref: '#/components/schemas/RateCardPredictionConfig' - $ref: '#/components/schemas/DynamicPricingPredictionConfig' PrivateExchangePricePrediction: type: object description: Contains the predicted pricing details for a single Private Exchange supplier. required: - pricing_context - supplier_id - cost_per_interview properties: pricing_context: description: The pricing context used in the calculation. The `type` field within the object indicates the model (`rate_card` or `dynamic`). oneOf: - $ref: '#/components/schemas/DynamicPricingContext' - $ref: '#/components/schemas/RateCardPricingContext' supplier_id: type: string description: The supplier ID of the private exchange supplier. example: '3214' cost_per_interview: $ref: '#/components/schemas/MonetaryAmount' 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 BusinessUnitID: type: string description: The unique ID of the business unit, which determines the currency used for the target group. example: '1234' MonetaryAmountRequestModel: type: object description: Represents a monetary value, including the amount and its currency. properties: value: type: string description: The monetary value, represented as a string to maintain precision. example: '2.7352' currency_code: $ref: '#/components/schemas/CurrencyCode' TargetGroupID: description: A unique identifier for the target group, in ULID format. type: string pattern: ^[0-9A-Z]{26}$ example: 01BTGNYV6HRNK8K8VKZASZCFP1 GetTargetGroupPriceResponse: type: object description: The pricing details for a target group, including the pricing context (e.g., dynamic or rate card) and cost per interview (CPI). required: - price_type - buyer_account_id - buyer_business_unit_id - target_group_id - buyer_business_unit_exchange_rate_from_usd - open_exchange_price - private_exchange_prices - pricing_config_token properties: price_type: type: string enum: - specification - prediction description: Indicates whether the price is a specification or a prediction. buyer_account_id: $ref: '#/components/schemas/AccountID' buyer_business_unit_id: $ref: '#/components/schemas/BusinessUnitID' target_group_id: $ref: '#/components/schemas/TargetGroupID' buyer_business_unit_exchange_rate_from_usd: type: number format: float description: The exchange rate from the buyer's business unit currency to USD at the time the target group was launched. pricing_config_token: $ref: '#/components/schemas/PricingConfigToken' open_exchange_price: type: object description: The pricing context and cost per interview for the Cint Open Exchange. required: - pricing_context - cost_per_interview properties: pricing_context: oneOf: - $ref: '#/components/schemas/DynamicPricingContext' - $ref: '#/components/schemas/RateCardPricingContext' cost_per_interview: $ref: '#/components/schemas/MonetaryAmount' private_exchange_prices: type: array description: Pricing details for each applicable Private Exchange supplier. items: type: object required: - supplier_id - pricing_context - cost_per_interview properties: pricing_context: oneOf: - $ref: '#/components/schemas/DynamicPricingContext' - $ref: '#/components/schemas/RateCardPricingContext' supplier_id: type: string example: '43' cost_per_interview: $ref: '#/components/schemas/MonetaryAmount' DynamicPricingContext: type: object description: The pricing context when a dynamic model is used. required: - type properties: type: type: string enum: - dynamic description: The pricing model. For this context, the value is always 'dynamic'. 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 PricingConfigToken: type: string description: A unique token representing an immutable pricing configuration. example: MDFKSE42MDQ1RFg2Tk0wQjlBQ0Q5QVhQQzk7Nw== RateCardPricingContext: type: object description: The pricing context when a rate card model is used. required: - type - rate_card_token properties: type: type: string enum: - rate_card description: The pricing model. For this context, the value is always 'rate_card'. maximum_cpi: $ref: '#/components/schemas/MonetaryAmount' description: The maximum cost per interview (CPI) allowed for this pricing context. cpi_boost: $ref: '#/components/schemas/MonetaryAmount' description: An additional amount added to the calculated rate card CPI. The final CPI will not exceed the `maximum_cpi`. rate_card_token: $ref: '#/components/schemas/RateCardToken' 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 DynamicPricingPredictionConfig: title: Dynamic pricing configuration type: object description: Configuration used for dynamic pricing, specifying the user-requested cost per interview. required: - type - user_requested_cpi properties: type: type: string enum: - dynamic description: The pricing model. For this configuration, the value is always 'dynamic'. (And 'rate_card' respectively). user_requested_cpi: allOf: - $ref: '#/components/schemas/MonetaryAmountRequestModel' description: The requested CPI chosen by the user. AccountID: description: The account's unique identifier. type: integer format: int32 example: 101 RateCardPredictionConfig: title: Rate card pricing configuration type: object description: Configuration used for rate card pricing. required: - type - country_code - expected_incidence_rate - expected_length_of_interview_minutes properties: type: type: string enum: - rate_card description: Descriptor of the pricing model type. maximum_cpi: allOf: - $ref: '#/components/schemas/MonetaryAmountRequestModel' description: The maximum cost per interview (CPI) that can be set for the target group. cpi_boost: allOf: - $ref: '#/components/schemas/MonetaryAmountRequestModel' description: An additional amount added on top of the CPI calculated from the rate card. The final CPI will not exceed the `maximum_cpi`. country_code: type: string description: The two-letter country code, adhering to ISO 3166-1 alpha-2. example: US expected_length_of_interview_minutes: type: integer format: int32 description: The expected median length of interview, in minutes. minimum: 1 maximum: 45 example: 1 expected_incidence_rate: type: number format: float description: The expected incidence rate (IR) of the target audience, expressed as a decimal (e.g., 0.25 for 25%). minimum: 0 maximum: 1 multipleOf: 0.01 example: 0.05 GetRedactedPricePredictionResponse: type: object description: A price prediction containing the estimated cost per interview (CPI) for the Open Exchange and applicable Private Exchanges. required: - buyer_account_id - buyer_business_unit_id - buyer_business_unit_exchange_rate_from_usd - open_exchange_price - private_exchange_prices properties: buyer_account_id: $ref: '#/components/schemas/AccountID' buyer_business_unit_id: $ref: '#/components/schemas/BusinessUnitID' buyer_business_unit_exchange_rate_from_usd: type: number format: float description: The live exchange rate towards USD. open_exchange_price: allOf: - $ref: '#/components/schemas/OpenExchangePricePrediction' private_exchange_prices: type: array items: allOf: - $ref: '#/components/schemas/PrivateExchangePricePrediction' OpenExchangePricePrediction: type: object description: Contains the predicted pricing details for the Cint Exchange. required: - pricing_context - cost_per_interview properties: pricing_context: description: The pricing context used in the calculation. The `type` field within the object indicates the model (`rate_card` or `dynamic`). oneOf: - $ref: '#/components/schemas/DynamicPricingContext' - $ref: '#/components/schemas/RateCardPricingContext' cost_per_interview: $ref: '#/components/schemas/MonetaryAmount' 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. parameters: 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`. ' BusinessUnitID: in: path name: business_unit_id schema: $ref: '#/components/schemas/BusinessUnitID' required: true description: The unique identifier for the business unit. 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' 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