openapi: 3.0.1 info: description: 'Consumer-to-Extole integration endpoints: consumer event submission, zone rendering, profile management, and SDK-backing operations for browser and native app environments.' title: Integration API - Consumer to Extole Audiences Blocks API version: '1.0' servers: - description: Production url: https://{brand}.extole.io variables: brand: default: yourcompany description: Your Extole client subdomain (e.g. 'mycompany' for mycompany.extole.io) security: - HEADER: [] - QUERY: [] - COOKIE: [] tags: - name: Blocks paths: /v2/blocks: get: description: Returns all content blocks for the client. operationId: listBlocks parameters: - in: query name: search_query schema: type: string - in: query name: limit schema: format: int32 type: integer - in: query name: offset schema: format: int32 type: integer responses: '200': content: application/json: schema: items: $ref: '#/components/schemas/BlockResponse' type: array description: Successful response '400': content: application/json: examples: binding_error: $ref: '#/components/examples/binding_error' invalid_json: $ref: '#/components/examples/invalid_json' invalid_limit: $ref: '#/components/examples/invalid_limit' invalid_offset: $ref: '#/components/examples/invalid_offset' invalid_parameter: $ref: '#/components/examples/invalid_parameter' max_fetch_size_1000: $ref: '#/components/examples/max_fetch_size_1000' missing_request_body: $ref: '#/components/examples/missing_request_body' schema: $ref: '#/components/schemas/RestExceptionResponse' description: Bad Request '401': content: application/json: examples: method_unauthorized: $ref: '#/components/examples/method_unauthorized' schema: $ref: '#/components/schemas/RestExceptionResponse' description: Unauthorized '402': content: application/json: examples: payment_required: $ref: '#/components/examples/payment_required' schema: $ref: '#/components/schemas/RestExceptionResponse' description: Payment Required '403': content: application/json: examples: access_denied: $ref: '#/components/examples/access_denied' method_unauthorized: $ref: '#/components/examples/method_unauthorized' missing_access_token: $ref: '#/components/examples/missing_access_token' schema: $ref: '#/components/schemas/RestExceptionResponse' description: Forbidden '415': content: application/json: examples: unsupported_media_type: $ref: '#/components/examples/unsupported_media_type' schema: $ref: '#/components/schemas/RestExceptionResponse' description: Unsupported Media Type '429': content: application/json: examples: too_many_requests: $ref: '#/components/examples/too_many_requests' schema: $ref: '#/components/schemas/RestExceptionResponse' description: Too Many Requests summary: List blocks tags: - Blocks x-extole-bundle: management x-extole-visibility: visible post: description: Creates a new named content block used as a reusable fragment in campaign experiences. Returns the created block with its server-assigned id. operationId: createBlock requestBody: content: application/json: example: filter_type: BLACK list_type: CIDR value: value schema: $ref: '#/components/schemas/BlockCreateRequest' responses: '200': content: application/json: schema: $ref: '#/components/schemas/BlockResponse' description: Successful response '400': content: application/json: examples: binding_error: $ref: '#/components/examples/binding_error' block_duplicate: $ref: '#/components/examples/block_duplicate' block_value_invalid: $ref: '#/components/examples/block_value_invalid' invalid_json: $ref: '#/components/examples/invalid_json' invalid_parameter: $ref: '#/components/examples/invalid_parameter' missing_request_body: $ref: '#/components/examples/missing_request_body' schema: $ref: '#/components/schemas/RestExceptionResponse' description: Bad Request '401': content: application/json: examples: method_unauthorized: $ref: '#/components/examples/method_unauthorized' schema: $ref: '#/components/schemas/RestExceptionResponse' description: Unauthorized '402': content: application/json: examples: payment_required: $ref: '#/components/examples/payment_required' schema: $ref: '#/components/schemas/RestExceptionResponse' description: Payment Required '403': content: application/json: examples: access_denied: $ref: '#/components/examples/access_denied' method_unauthorized: $ref: '#/components/examples/method_unauthorized' missing_access_token: $ref: '#/components/examples/missing_access_token' schema: $ref: '#/components/schemas/RestExceptionResponse' description: Forbidden '415': content: application/json: examples: unsupported_media_type: $ref: '#/components/examples/unsupported_media_type' schema: $ref: '#/components/schemas/RestExceptionResponse' description: Unsupported Media Type '429': content: application/json: examples: too_many_requests: $ref: '#/components/examples/too_many_requests' schema: $ref: '#/components/schemas/RestExceptionResponse' description: Too Many Requests summary: Create a block tags: - Blocks x-extole-bundle: management x-extole-visibility: visible /v2/blocks/global: get: description: Returns all globally available content blocks that can be shared across clients. operationId: listGlobalBlocks parameters: - in: query name: search_query schema: type: string - in: query name: limit schema: format: int32 type: integer - in: query name: offset schema: format: int32 type: integer responses: '200': content: application/json: schema: items: $ref: '#/components/schemas/BlockResponse' type: array description: Successful response '400': content: application/json: examples: binding_error: $ref: '#/components/examples/binding_error' invalid_json: $ref: '#/components/examples/invalid_json' invalid_limit: $ref: '#/components/examples/invalid_limit' invalid_offset: $ref: '#/components/examples/invalid_offset' invalid_parameter: $ref: '#/components/examples/invalid_parameter' max_fetch_size_1000: $ref: '#/components/examples/max_fetch_size_1000' missing_request_body: $ref: '#/components/examples/missing_request_body' schema: $ref: '#/components/schemas/RestExceptionResponse' description: Bad Request '401': content: application/json: examples: method_unauthorized: $ref: '#/components/examples/method_unauthorized' schema: $ref: '#/components/schemas/RestExceptionResponse' description: Unauthorized '402': content: application/json: examples: payment_required: $ref: '#/components/examples/payment_required' schema: $ref: '#/components/schemas/RestExceptionResponse' description: Payment Required '403': content: application/json: examples: access_denied: $ref: '#/components/examples/access_denied' method_unauthorized: $ref: '#/components/examples/method_unauthorized' missing_access_token: $ref: '#/components/examples/missing_access_token' schema: $ref: '#/components/schemas/RestExceptionResponse' description: Forbidden '415': content: application/json: examples: unsupported_media_type: $ref: '#/components/examples/unsupported_media_type' schema: $ref: '#/components/schemas/RestExceptionResponse' description: Unsupported Media Type '429': content: application/json: examples: too_many_requests: $ref: '#/components/examples/too_many_requests' schema: $ref: '#/components/schemas/RestExceptionResponse' description: Too Many Requests summary: List global blocks tags: - Blocks x-extole-bundle: management x-extole-visibility: visible /v2/blocks/{blockId}: get: description: Returns the content block for the specified id. operationId: getBlock parameters: - in: path name: blockId required: true schema: type: string responses: '200': content: application/json: schema: $ref: '#/components/schemas/BlockResponse' description: Successful response '400': content: application/json: examples: binding_error: $ref: '#/components/examples/binding_error' block_duplicate: $ref: '#/components/examples/block_duplicate' block_value_invalid: $ref: '#/components/examples/block_value_invalid' invalid_json: $ref: '#/components/examples/invalid_json' invalid_parameter: $ref: '#/components/examples/invalid_parameter' missing_request_body: $ref: '#/components/examples/missing_request_body' schema: $ref: '#/components/schemas/RestExceptionResponse' description: Bad Request '401': content: application/json: examples: method_unauthorized: $ref: '#/components/examples/method_unauthorized' schema: $ref: '#/components/schemas/RestExceptionResponse' description: Unauthorized '402': content: application/json: examples: payment_required: $ref: '#/components/examples/payment_required' schema: $ref: '#/components/schemas/RestExceptionResponse' description: Payment Required '403': content: application/json: examples: access_denied: $ref: '#/components/examples/access_denied' method_unauthorized: $ref: '#/components/examples/method_unauthorized' missing_access_token: $ref: '#/components/examples/missing_access_token' schema: $ref: '#/components/schemas/RestExceptionResponse' description: Forbidden '415': content: application/json: examples: unsupported_media_type: $ref: '#/components/examples/unsupported_media_type' schema: $ref: '#/components/schemas/RestExceptionResponse' description: Unsupported Media Type '429': content: application/json: examples: too_many_requests: $ref: '#/components/examples/too_many_requests' schema: $ref: '#/components/schemas/RestExceptionResponse' description: Too Many Requests summary: Get a block tags: - Blocks x-extole-bundle: management x-extole-visibility: visible delete: description: Removes the content block for the specified id. Returns the deleted block. operationId: deleteBlock parameters: - in: path name: blockId required: true schema: type: string responses: '200': content: application/json: schema: $ref: '#/components/schemas/BlockResponse' description: Successful response '400': content: application/json: examples: binding_error: $ref: '#/components/examples/binding_error' block_duplicate: $ref: '#/components/examples/block_duplicate' block_value_invalid: $ref: '#/components/examples/block_value_invalid' invalid_json: $ref: '#/components/examples/invalid_json' invalid_parameter: $ref: '#/components/examples/invalid_parameter' missing_request_body: $ref: '#/components/examples/missing_request_body' schema: $ref: '#/components/schemas/RestExceptionResponse' description: Bad Request '401': content: application/json: examples: method_unauthorized: $ref: '#/components/examples/method_unauthorized' schema: $ref: '#/components/schemas/RestExceptionResponse' description: Unauthorized '402': content: application/json: examples: payment_required: $ref: '#/components/examples/payment_required' schema: $ref: '#/components/schemas/RestExceptionResponse' description: Payment Required '403': content: application/json: examples: access_denied: $ref: '#/components/examples/access_denied' method_unauthorized: $ref: '#/components/examples/method_unauthorized' missing_access_token: $ref: '#/components/examples/missing_access_token' schema: $ref: '#/components/schemas/RestExceptionResponse' description: Forbidden '415': content: application/json: examples: unsupported_media_type: $ref: '#/components/examples/unsupported_media_type' schema: $ref: '#/components/schemas/RestExceptionResponse' description: Unsupported Media Type '429': content: application/json: examples: too_many_requests: $ref: '#/components/examples/too_many_requests' schema: $ref: '#/components/schemas/RestExceptionResponse' description: Too Many Requests summary: Delete a block tags: - Blocks x-extole-bundle: management x-extole-visibility: visible /v2/blocks/test: post: description: Evaluates the block configuration against a test payload without persisting any changes. Returns the rendered output and any validation errors. operationId: testBlock requestBody: content: application/json: example: list_type: CIDR value: value schema: $ref: '#/components/schemas/BlockCheckRequest' responses: '200': content: application/json: schema: $ref: '#/components/schemas/BlockCheckResponse' description: Successful response '400': content: application/json: examples: binding_error: $ref: '#/components/examples/binding_error' block_duplicate: $ref: '#/components/examples/block_duplicate' block_value_invalid: $ref: '#/components/examples/block_value_invalid' invalid_json: $ref: '#/components/examples/invalid_json' invalid_parameter: $ref: '#/components/examples/invalid_parameter' missing_request_body: $ref: '#/components/examples/missing_request_body' schema: $ref: '#/components/schemas/RestExceptionResponse' description: Bad Request '401': content: application/json: examples: method_unauthorized: $ref: '#/components/examples/method_unauthorized' schema: $ref: '#/components/schemas/RestExceptionResponse' description: Unauthorized '402': content: application/json: examples: payment_required: $ref: '#/components/examples/payment_required' schema: $ref: '#/components/schemas/RestExceptionResponse' description: Payment Required '403': content: application/json: examples: access_denied: $ref: '#/components/examples/access_denied' method_unauthorized: $ref: '#/components/examples/method_unauthorized' missing_access_token: $ref: '#/components/examples/missing_access_token' schema: $ref: '#/components/schemas/RestExceptionResponse' description: Forbidden '415': content: application/json: examples: unsupported_media_type: $ref: '#/components/examples/unsupported_media_type' schema: $ref: '#/components/schemas/RestExceptionResponse' description: Unsupported Media Type '429': content: application/json: examples: too_many_requests: $ref: '#/components/examples/too_many_requests' schema: $ref: '#/components/schemas/RestExceptionResponse' description: Too Many Requests summary: Test a block tags: - Blocks x-extole-bundle: management x-extole-visibility: visible components: examples: invalid_json: summary: invalid_json value: code: invalid_json http_status_code: 400 message: JSON is invalid parameters: {} unique_id: 00000000-0000-0000-0000-000000000000 missing_access_token: summary: missing_access_token value: code: missing_access_token http_status_code: 403 message: No access_token was provided with this request. parameters: {} unique_id: 00000000-0000-0000-0000-000000000000 payment_required: summary: payment_required value: code: payment_required http_status_code: 402 message: The access_token provided is associated with an unpaid account. parameters: {} unique_id: 00000000-0000-0000-0000-000000000000 invalid_offset: summary: invalid_offset value: code: invalid_offset http_status_code: 400 message: Offset should be a non negative integer parameters: {} unique_id: 00000000-0000-0000-0000-000000000000 unsupported_media_type: summary: unsupported_media_type value: code: unsupported_media_type http_status_code: 415 message: Request had an unsupported or no media type parameters: {} unique_id: 00000000-0000-0000-0000-000000000000 method_unauthorized: summary: method_unauthorized value: code: method_unauthorized http_status_code: 401 message: Unauthorized access to this endpoint parameters: {} unique_id: 00000000-0000-0000-0000-000000000000 missing_request_body: summary: missing_request_body value: code: missing_request_body http_status_code: 400 message: Missing request body parameters: {} unique_id: 00000000-0000-0000-0000-000000000000 binding_error: summary: binding_error value: code: binding_error http_status_code: 400 message: Argument is not of the expected type parameters: {} unique_id: 00000000-0000-0000-0000-000000000000 access_denied: summary: access_denied value: code: access_denied http_status_code: 403 message: The access_token provided is not permitted to access the specified resource. parameters: {} unique_id: 00000000-0000-0000-0000-000000000000 block_value_invalid: summary: block_value_invalid value: code: block_value_invalid http_status_code: 400 message: Normalized email block email address is not valid parameters: {} unique_id: 00000000-0000-0000-0000-000000000000 too_many_requests: summary: too_many_requests value: code: too_many_requests http_status_code: 429 message: The server is unable to process your request at the moment, please retry later. parameters: {} unique_id: 00000000-0000-0000-0000-000000000000 invalid_parameter: summary: invalid_parameter value: code: invalid_parameter http_status_code: 400 message: Parameter is invalid. parameters: {} unique_id: 00000000-0000-0000-0000-000000000000 invalid_limit: summary: invalid_limit value: code: invalid_limit http_status_code: 400 message: Limit should be a non negative integer parameters: {} unique_id: 00000000-0000-0000-0000-000000000000 block_duplicate: summary: block_duplicate value: code: block_duplicate http_status_code: 400 message: Block duplicate parameters: {} unique_id: 00000000-0000-0000-0000-000000000000 max_fetch_size_1000: summary: max_fetch_size_1000 value: code: max_fetch_size_1000 http_status_code: 400 message: Maximum allowed difference between limit and offset should be 1000 parameters: {} unique_id: 00000000-0000-0000-0000-000000000000 schemas: BlockCheckResponse: properties: block_Id: nullable: true type: string result: enum: - BLACKLISTED - NOT_LISTED - WHITELISTED type: string required: - block_Id - result type: object BlockResponse: properties: block_id: type: string client_id: nullable: true type: string created_date: $ref: '#/components/schemas/ZonedDateTime' filter_type: enum: - BLACK - WHITE type: string list_type: enum: - CIDR - EMAIL_DOMAIN - NORMALIZED_EMAIL - USER_AGENT type: string source: type: string user_id: nullable: true type: string value: type: string required: - block_id - client_id - created_date - filter_type - list_type - source - user_id - value type: object BlockCreateRequest: description: Body of a `POST /v2/blocks` request. properties: filter_type: enum: - BLACK - WHITE type: string list_type: enum: - CIDR - EMAIL_DOMAIN - NORMALIZED_EMAIL - USER_AGENT type: string value: type: string required: - filter_type - list_type - value type: object BlockCheckRequest: properties: list_type: enum: - CIDR - EMAIL_DOMAIN - NORMALIZED_EMAIL - USER_AGENT type: string value: type: string required: - list_type - value type: object ZonedDateTime: description: '[RFC 3339](https://datatracker.ietf.org/doc/html/rfc3339#section-5.6) or [RFC 9557](https://datatracker.ietf.org/doc/html/rfc9557#section-4) date-time with a numeric [UTC offset](https://datatracker.ietf.org/doc/html/rfc3339#section-5.6) and an optional [IANA time-zone](https://datatracker.ietf.org/doc/html/rfc9557#section-4) suffix in square brackets. Precision up to milliseconds.' example: '2025-10-24T02:00:00-07:00' pattern: ^\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:\d{2}(\.\d{1,3})?(Z|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9])(\[[^\]]+\])?$ type: string RestExceptionResponse: description: Represents the API error response properties: code: description: Specific error code for this error type, documented per endpoint type: string http_status_code: description: HTTP status code that was returned with this error, useful if client get response code format: int32 type: integer message: description: User readable English description of the error type: string parameters: additionalProperties: description: Attributes related to the error, varies be error code, documented per endpoint type: object description: Attributes related to the error, varies be error code, documented per endpoint type: object unique_id: description: Unique id associated with this error, useful for discussions with Extole type: string required: - code - http_status_code - message - parameters - unique_id type: object securitySchemes: COOKIE: in: cookie name: extole_token type: apiKey HEADER: in: header name: Authorization type: apiKey x-bearer-format: bearer QUERY: in: query name: access_token type: apiKey x-tagGroups: - name: Integration API - Consumer to Extole tags: - Authentication - Content - Email - Events - Persons - Profile Assets - Profiles