openapi: 3.2.0 info: title: Custom Objects Service Custom Data Query Custom Data Query API description: API to manage and import custom objects version: 3.4.3 servers: - url: https://api.actonsoftware.com/custom-objects description: Generated server url security: - bearerAuth: [] tags: - name: Custom Data Query API description: Custom Data Query API paths: /v1/{accountId}/query/{objectId}/{datasetId}/joinWithOther: post: tags: - Custom Data Query API summary: Query data from a Custom Data dataset description: Performs a query on Custom Data dataset with a simple join with Account Object Context operationId: queryData parameters: - name: accountId in: path description: Account ID required: true schema: type: string - name: objectId in: path description: The Custom Data Schema Id for this request required: true schema: type: string - name: datasetId in: path description: The Custom Data Dataset Id for this request required: true schema: type: string requestBody: content: application/json: schema: $ref: '#/components/schemas/DataQueryRequestDTO' required: true responses: '200': description: Query executed successfully content: application/json: schema: type: object text/plain: schema: type: object '400': description: Bad request - invalid query parameters content: '*/*': schema: $ref: '#/components/schemas/HttpErrorResponse' '401': description: Unauthorized content: '*/*': schema: $ref: '#/components/schemas/HttpErrorResponse' '403': description: Forbidden content: application/json: schema: type: object text/plain: schema: type: object '404': description: Dataset or object not found content: application/json: schema: type: object text/plain: schema: type: object '500': description: Internal server error content: '*/*': schema: $ref: '#/components/schemas/HttpErrorResponse' /v1/{accountId}/query/{objectId}/{datasetId}/joinWithOtherInternal: post: tags: - Custom Data Query API summary: Internal query data from a custom object dataset description: Performs an internal query on custom object data with a simple join with Account Object Context operationId: internalQueryData parameters: - name: accountId in: path description: Account ID required: true schema: type: string - name: objectId in: path description: The Custom Object Schema Id for this request required: true schema: type: string - name: datasetId in: path description: The Custom Object Dataset Id for this request required: true schema: type: string requestBody: content: application/json: schema: $ref: '#/components/schemas/DataQueryRequestDTO' required: true responses: '200': description: Query executed successfully content: application/json: schema: type: object text/plain: schema: type: object '400': description: Bad request - invalid query parameters content: '*/*': schema: $ref: '#/components/schemas/HttpErrorResponse' '401': description: Unauthorized content: '*/*': schema: $ref: '#/components/schemas/HttpErrorResponse' '403': description: Forbidden content: application/json: schema: type: object text/plain: schema: type: object '404': description: Dataset or object not found content: application/json: schema: type: object text/plain: schema: type: object '500': description: Internal server error content: '*/*': schema: $ref: '#/components/schemas/HttpErrorResponse' /v1/{accountId}/query/joinWithOtherPreflight: post: tags: - Custom Data Query API summary: Cache hydration preflight for query performance description: Performs cache hydration to optimize subsequent query performance operationId: cacheHydrationPreflight parameters: - name: accountId in: path description: Account ID required: true schema: type: string responses: '200': description: Cache hydration completed successfully content: application/json: schema: type: object '400': description: Bad Request content: '*/*': schema: $ref: '#/components/schemas/HttpErrorResponse' '401': description: Unauthorized content: '*/*': schema: $ref: '#/components/schemas/HttpErrorResponse' '403': description: Forbidden content: application/json: schema: type: object '500': description: Internal server error content: '*/*': schema: $ref: '#/components/schemas/HttpErrorResponse' components: schemas: JoinStrategyDTO: type: object description: Configuration for join operations between Act-On Contacts and Custom Objects properties: useDefaults: type: boolean description: When set to true, other parameters are ignored and the defaults are used based on the relationship type of the custom object. Defaults to false joinEnabled: type: boolean description: Enable or disable join with other data. Defaults to true onlyMatching: type: boolean description: If true, only matching records will be joined. Defaults to false duplicates: type: string description: Strategy for handling duplicates. If not provided, defaults to 'noJoinFieldsDuplicates for Custom Objects with 'one-to-one' relationship and 'noActOnContactsJoinFieldsDuplicates' for 'one-to-many' relationship enum: - allow - noOtherJoinFieldsDuplicates - noBaseJoinFieldsDuplicates - noJoinFieldsDuplicates otherOrderByField: type: string description: Field name to order joined data by. If not provided, defaults to 'updatedDate' example: updatedDate otherSelector: type: string description: Selection strategy for joined data when duplicates exist. If not provided, defaults to 'last' enum: - first - last baseOrderByField: type: string description: Field name to order base data by. If not provided, defaults to 'sys.createdAt' example: sys.createdAt baseSelector: type: string description: Selection strategy for the base data when duplicates exist. If not provided, defaults to 'last' enum: - first - last SortFieldDTO: type: object description: Sort field configuration properties: field: type: string description: Field name to sort by. Must be prefixed with 'aoc.' for Act-On Contacts fields or 'co.' for custom object fields. example: aoc.email direction: type: string default: asc description: Sort direction enum: - asc - desc example: asc required: - field PaginationDTO: type: object description: Pagination information for data query requests properties: page: type: integer format: int32 description: Page number (0-based) for offset-based pagination example: 0 size: type: integer format: int32 description: Number of items per page example: 20 nextPageToken: type: string description: Token for cursor-based pagination. Use null or omit for the first page. pageStrategy: type: string description: Pagination strategy to use. Defaults to OFFSET if not specified. enum: - OFFSET - CURSOR HttpErrorResponse: type: object properties: errorId: type: string requestUri: type: string errorMessage: type: string errorList: type: array items: type: string status: type: string enum: - 100 CONTINUE - 101 SWITCHING_PROTOCOLS - 102 PROCESSING - 103 EARLY_HINTS - 103 CHECKPOINT - 200 OK - 201 CREATED - 202 ACCEPTED - 203 NON_AUTHORITATIVE_INFORMATION - 204 NO_CONTENT - 205 RESET_CONTENT - 206 PARTIAL_CONTENT - 207 MULTI_STATUS - 208 ALREADY_REPORTED - 226 IM_USED - 300 MULTIPLE_CHOICES - 301 MOVED_PERMANENTLY - 302 FOUND - 302 MOVED_TEMPORARILY - 303 SEE_OTHER - 304 NOT_MODIFIED - 305 USE_PROXY - 307 TEMPORARY_REDIRECT - 308 PERMANENT_REDIRECT - 400 BAD_REQUEST - 401 UNAUTHORIZED - 402 PAYMENT_REQUIRED - 403 FORBIDDEN - 404 NOT_FOUND - 405 METHOD_NOT_ALLOWED - 406 NOT_ACCEPTABLE - 407 PROXY_AUTHENTICATION_REQUIRED - 408 REQUEST_TIMEOUT - 409 CONFLICT - 410 GONE - 411 LENGTH_REQUIRED - 412 PRECONDITION_FAILED - 413 PAYLOAD_TOO_LARGE - 413 REQUEST_ENTITY_TOO_LARGE - 414 URI_TOO_LONG - 414 REQUEST_URI_TOO_LONG - 415 UNSUPPORTED_MEDIA_TYPE - 416 REQUESTED_RANGE_NOT_SATISFIABLE - 417 EXPECTATION_FAILED - 418 I_AM_A_TEAPOT - 419 INSUFFICIENT_SPACE_ON_RESOURCE - 420 METHOD_FAILURE - 421 DESTINATION_LOCKED - 422 UNPROCESSABLE_ENTITY - 423 LOCKED - 424 FAILED_DEPENDENCY - 425 TOO_EARLY - 426 UPGRADE_REQUIRED - 428 PRECONDITION_REQUIRED - 429 TOO_MANY_REQUESTS - 431 REQUEST_HEADER_FIELDS_TOO_LARGE - 451 UNAVAILABLE_FOR_LEGAL_REASONS - 500 INTERNAL_SERVER_ERROR - 501 NOT_IMPLEMENTED - 502 BAD_GATEWAY - 503 SERVICE_UNAVAILABLE - 504 GATEWAY_TIMEOUT - 505 HTTP_VERSION_NOT_SUPPORTED - 506 VARIANT_ALSO_NEGOTIATES - 507 INSUFFICIENT_STORAGE - 508 LOOP_DETECTED - 509 BANDWIDTH_LIMIT_EXCEEDED - 510 NOT_EXTENDED - 511 NETWORK_AUTHENTICATION_REQUIRED DataQueryRequestDTO: type: object description: The data query specification properties: otherObject: type: string description: Locator of the other data source to join with. otherDataset: type: string description: Optional locator (id, name) of the other data source dataset (if Custom Object) to join with. selectFields: type: array description: List of fields to select. Must be prefixed with 'aoc.' for Act-On Contacts fields or 'co.' for custom object fields. Use 'aoc.*' or 'co.*' to select all fields from respective source. items: type: string maxItems: 2000 minItems: 0 page: type: integer format: int32 deprecated: true description: 'Page number (0-based). DEPRECATED: Use pagination object instead.' example: 0 size: type: integer format: int32 deprecated: true description: 'Number of items per page. DEPRECATED: Use pagination object instead.' example: 20 pagination: $ref: '#/components/schemas/PaginationDTO' description: Pagination information supporting both offset and cursor-based pagination sortBy: type: string deprecated: true description: 'Sort by field. Reference Act-On Contacts fields by the prefix `aoc.` if they overlap with custom object fields. DEPRECATED: Use sortFields instead for multiple field sorting.' sortByDirection: type: string deprecated: true description: 'Sort direction. Either `asc` or `desc`. If anything else no sorting will be applied. DEPRECATED: Use sortFields instead for multiple field sorting.' sortFields: type: array description: List of fields to sort by with their directions. Takes precedence over sortBy/sortByDirection. Each field must be prefixed with 'aoc.' for Act-On Contacts fields or 'co.' for custom object fields. items: $ref: '#/components/schemas/SortFieldDTO' maxItems: 10 minItems: 0 filterExpression: type: string description: Filter expression. joinStrategy: $ref: '#/components/schemas/JoinStrategyDTO' description: Join strategy. searchTerm: type: string description: Search term. datetimeFieldsTimezone: type: string description: Override timezone for all DATETIME fields in the query. Must be a valid timezone identifier (e.g., 'US/Eastern', 'Europe/London', 'UTC'). If specified, this overrides both account-level and field-level timezone settings. securitySchemes: bearerAuth: type: http scheme: bearer bearerFormat: JWT x-readme: {}