openapi: 3.0.2
info:
title: Klaviyo Accounts Custom Objects API
version: '2026-04-15'
description: The Klaviyo REST API. Please visit https://developers.klaviyo.com for more details.
contact:
name: Klaviyo Developer Experience Team
email: developers@klaviyo.com
url: https://developers.klaviyo.com
termsOfService: https://www.klaviyo.com/legal/api-terms
license:
name: License
url: https://www.klaviyo.com/legal
servers:
- url: https://a.klaviyo.com
description: Production
security:
- Klaviyo-API-Key: []
tags:
- name: Custom Objects
description: custom objects
paths:
/api/data-sources:
get:
operationId: get_data_sources
summary: Get Data Sources
description: 'Get all data sources in an account.
*Rate limits*:
Burst: `3/s`
Steady: `60/m`
**Scopes:**
`custom-objects:read`'
parameters:
- name: fields[data-source]
in: query
description: For more information please visit https://developers.klaviyo.com/en/v2026-04-15/reference/api-overview#sparse-fieldsets
required: false
schema:
type: array
items:
type: string
enum:
- description
- namespace
- title
- visibility
explode: false
- name: page[cursor]
in: query
description: For more information please visit https://developers.klaviyo.com/en/v2026-04-15/reference/api-overview#pagination
required: false
schema:
type: string
- name: page[size]
in: query
description: 'Default: 20. Min: 1. Max: 100.'
required: false
schema:
type: integer
default: 20
maximum: 100
minimum: 1
- name: revision
in: header
description: 'API endpoint revision (format: YYYY-MM-DD[.suffix])'
required: true
schema:
type: string
default: '2026-04-15'
responses:
'200':
description: Success
content:
application/vnd.api+json:
schema:
$ref: '#/components/schemas/GetDataSourceResponseCollection'
4XX:
$ref: '#/components/responses/ClientError'
5XX:
$ref: '#/components/responses/ServerError'
tags:
- Custom Objects
x-klaviyo-pre-release: None
x-klaviyo-ratelimit:
burst: 3/s
steady: 60/m
x-klaviyo-scopes:
- custom-objects:read
post:
operationId: create_data_source
summary: Create Data Source
description: 'Create a new data source in an account
*Rate limits*:
Burst: `3/s`
Steady: `60/m`
**Scopes:**
`custom-objects:write`'
parameters:
- name: revision
in: header
description: 'API endpoint revision (format: YYYY-MM-DD[.suffix])'
required: true
schema:
type: string
default: '2026-04-15'
requestBody:
description: Create data source
required: true
content:
application/vnd.api+json:
schema:
$ref: '#/components/schemas/DataSourceCreateQuery'
responses:
'201':
description: Success
content:
application/vnd.api+json:
schema:
$ref: '#/components/schemas/PostDataSourceResponse'
4XX:
$ref: '#/components/responses/ClientError'
5XX:
$ref: '#/components/responses/ServerError'
tags:
- Custom Objects
x-klaviyo-pre-release: None
x-klaviyo-ratelimit:
burst: 3/s
steady: 60/m
x-klaviyo-scopes:
- custom-objects:write
/api/data-sources/{id}:
get:
operationId: get_data_source
summary: Get Data Source
description: 'Retrieve a data source in an account.
*Rate limits*:
Burst: `3/s`
Steady: `60/m`
**Scopes:**
`custom-objects:read`'
parameters:
- name: id
in: path
description: The ID of the data source
required: true
schema:
description: The ID of the data source
type: string
- name: fields[data-source]
in: query
description: For more information please visit https://developers.klaviyo.com/en/v2026-04-15/reference/api-overview#sparse-fieldsets
required: false
schema:
type: array
items:
type: string
enum:
- description
- namespace
- title
- visibility
explode: false
- name: revision
in: header
description: 'API endpoint revision (format: YYYY-MM-DD[.suffix])'
required: true
schema:
type: string
default: '2026-04-15'
responses:
'200':
description: Success
content:
application/vnd.api+json:
schema:
$ref: '#/components/schemas/GetDataSourceResponse'
4XX:
$ref: '#/components/responses/ClientError'
5XX:
$ref: '#/components/responses/ServerError'
tags:
- Custom Objects
x-klaviyo-pre-release: None
x-klaviyo-ratelimit:
burst: 3/s
steady: 60/m
x-klaviyo-scopes:
- custom-objects:read
delete:
operationId: delete_data_source
summary: Delete Data Source
description: 'Delete a data source in an account.
*Rate limits*:
Burst: `3/s`
Steady: `60/m`
**Scopes:**
`custom-objects:write`'
parameters:
- name: id
in: path
description: The ID of the data source to delete
required: true
schema:
description: The ID of the data source to delete
type: string
- name: revision
in: header
description: 'API endpoint revision (format: YYYY-MM-DD[.suffix])'
required: true
schema:
type: string
default: '2026-04-15'
responses:
'204':
description: Success
4XX:
$ref: '#/components/responses/ClientError'
5XX:
$ref: '#/components/responses/ServerError'
tags:
- Custom Objects
x-klaviyo-pre-release: None
x-klaviyo-ratelimit:
burst: 3/s
steady: 60/m
x-klaviyo-scopes:
- custom-objects:write
/api/data-source-record-bulk-create-jobs:
post:
operationId: bulk_create_data_source_records
summary: Bulk Create Data Source Records
description: 'Create a bulk data source record import job to create a batch of records.
Accepts up to 500 records per request. The maximum allowed payload size is 4MB. The maximum allowed payload size per-record is 512KB.
To learn more, see our [Custom Objects API overview](https://developers.klaviyo.com/en/reference/custom_objects_api_overview).
*Rate limits*:
Burst: `3/s`
Steady: `15/m`
**Scopes:**
`custom-objects:write`'
parameters:
- name: revision
in: header
description: 'API endpoint revision (format: YYYY-MM-DD[.suffix])'
required: true
schema:
type: string
default: '2026-04-15'
requestBody:
description: Create a data source record job
required: true
content:
application/vnd.api+json:
schema:
$ref: '#/components/schemas/DataSourceRecordBulkCreateJobCreateQuery'
responses:
'204':
description: Success
4XX:
$ref: '#/components/responses/ClientError'
5XX:
$ref: '#/components/responses/ServerError'
tags:
- Custom Objects
x-klaviyo-operation-aliases:
- create_data_source_record_bulk_create_job
x-klaviyo-pre-release: None
x-klaviyo-ratelimit:
burst: 3/s
steady: 15/m
x-klaviyo-scopes:
- custom-objects:write
/api/data-source-record-create-jobs:
post:
operationId: create_data_source_record
summary: Create Data Source Record
description: 'Create a data source record import job to create a single record.
The maximum allowed payload size per-record is 512KB.
To learn more, see our [Custom Objects API overview](https://developers.klaviyo.com/en/reference/custom_objects_api_overview).
*Rate limits*:
Burst: `75/s`
Steady: `750/m`
**Scopes:**
`custom-objects:write`'
parameters:
- name: revision
in: header
description: 'API endpoint revision (format: YYYY-MM-DD[.suffix])'
required: true
schema:
type: string
default: '2026-04-15'
requestBody:
description: Create a data source record job
required: true
content:
application/vnd.api+json:
schema:
$ref: '#/components/schemas/DataSourceRecordCreateJobCreateQuery'
responses:
'204':
description: Success
4XX:
$ref: '#/components/responses/ClientError'
5XX:
$ref: '#/components/responses/ServerError'
tags:
- Custom Objects
x-klaviyo-operation-aliases:
- create_data_source_record_create_job
x-klaviyo-pre-release: None
x-klaviyo-ratelimit:
burst: 75/s
steady: 750/m
x-klaviyo-scopes:
- custom-objects:write
components:
schemas:
DataSourceRecordCreateJobCreateQuery:
type: object
properties:
data:
$ref: '#/components/schemas/DataSourceRecordCreateJobCreateQueryResourceObject'
required:
- data
DataSourceRecordBulkCreateJobCreateQueryResourceObject:
type: object
properties:
type:
$ref: '#/components/schemas/DataSourceRecordBulkCreateJobEnum'
attributes:
type: object
properties:
data-source-records:
description: The records to ingest.
type: object
example:
data:
- type: data-source-record
attributes:
record:
key1: value1
key2: value2
nullable: true
properties:
data:
type: array
items:
$ref: '#/components/schemas/DataSourceRecordResourceObject'
required:
- data
relationships:
type: object
properties:
data-source:
type: object
properties:
data:
type: object
properties:
type:
$ref: '#/components/schemas/DataSourceEnum'
id:
description: The data source to which the records belong.
type: string
example: 01J7C23V8XWMRG13FMD7VZN6GW
required:
- type
- id
required:
- type
- attributes
DataSourceRecordBulkCreateJobCreateQuery:
type: object
properties:
data:
$ref: '#/components/schemas/DataSourceRecordBulkCreateJobCreateQueryResourceObject'
required:
- data
GetDataSourceResponseCollection:
type: object
properties:
data:
type: array
items:
$ref: '#/components/schemas/DataSourceResponseObjectResource'
links:
$ref: '#/components/schemas/CollectionLinks'
required:
- data
DataSourceCreateQuery:
type: object
properties:
data:
$ref: '#/components/schemas/DataSourceCreateQueryResourceObject'
required:
- data
DataSourceRecordCreateJobEnum:
type: string
enum:
- data-source-record-create-job
DataSourceRecordCreateJobCreateQueryResourceObject:
type: object
properties:
type:
$ref: '#/components/schemas/DataSourceRecordCreateJobEnum'
attributes:
type: object
properties:
data-source-record:
description: The records to ingest.
type: object
example:
data:
type: data-source-record
attributes:
record:
key1: value1
key2: value2
properties:
data:
$ref: '#/components/schemas/DataSourceRecordResourceObject'
required:
- data
required:
- data-source-record
relationships:
type: object
properties:
data-source:
type: object
properties:
data:
type: object
properties:
type:
$ref: '#/components/schemas/DataSourceEnum'
id:
description: The data source to which the records belong.
type: string
example: 01J7C23V8XWMRG13FMD7VZN6GW
required:
- type
- id
required:
- type
- attributes
DataSourceEnum:
type: string
enum:
- data-source
DataSourceResponseObjectResource:
type: object
properties:
type:
$ref: '#/components/schemas/DataSourceEnum'
id:
description: The ID of the data source
type: string
example: 01KH1D6P9Y8TJ7Q6MHXWZMPDN3
attributes:
type: object
properties:
title:
description: The title of the data source
type: string
example: My Data Source
visibility:
description: The status of the data source
type: string
enum:
- private
- shared
description:
description: The description of the data source
type: string
example: This is a data source
namespace:
description: The namespace of the data source
type: string
example: custom-objects
required:
- title
- visibility
- description
- namespace
links:
$ref: '#/components/schemas/ObjectLinks'
required:
- type
- id
- attributes
- links
DataSourceCreateQueryResourceObject:
type: object
properties:
type:
$ref: '#/components/schemas/DataSourceEnum'
attributes:
type: object
properties:
title:
description: The title of the data source. Must be between 1 and 255 characters and unique within the namespace.
type: string
visibility:
description: Visibility of data source.
type: string
example: private
default: private
enum:
- private
- shared
nullable: true
description:
type: string
default: ''
nullable: true
namespace:
description: The namespace of the data source.
type: string
example: custom-objects
default: custom-objects
nullable: true
required:
- title
required:
- type
- attributes
DataSourceRecordBulkCreateJobEnum:
type: string
enum:
- data-source-record-bulk-create-job
DataSourceRecordEnum:
type: string
enum:
- data-source-record
PostDataSourceResponse:
type: object
properties:
data:
type: object
properties:
type:
$ref: '#/components/schemas/DataSourceEnum'
id:
description: The ID of the data source
type: string
example: 01KH1D6P9Y8TJ7Q6MHXWZMPDN3
attributes:
type: object
properties:
title:
description: The title of the data source
type: string
example: My Data Source
visibility:
description: The status of the data source
type: string
enum:
- private
- shared
description:
description: The description of the data source
type: string
example: This is a data source
namespace:
description: The namespace of the data source
type: string
example: custom-objects
required:
- title
- visibility
- description
- namespace
links:
$ref: '#/components/schemas/ObjectLinks'
required:
- type
- id
- attributes
- links
links:
$ref: '#/components/schemas/ObjectLinks'
required:
- data
DataSourceRecordResourceObject:
type: object
properties:
type:
$ref: '#/components/schemas/DataSourceRecordEnum'
attributes:
type: object
properties:
record:
type: object
required:
- record
required:
- type
- attributes
GetDataSourceResponse:
type: object
properties:
data:
$ref: '#/components/schemas/DataSourceResponseObjectResource'
links:
$ref: '#/components/schemas/ObjectLinks'
required:
- data
ObjectLinks:
type: object
properties:
self:
type: string
format: uri
required:
- self
CollectionLinks:
type: object
properties:
self:
type: string
format: uri
first:
type: string
format: uri
last:
type: string
format: uri
prev:
type: string
format: uri
next:
type: string
format: uri
required:
- self
responses:
ClientError:
description: Client Error
content:
application/vnd.api+json:
schema:
type: object
properties:
errors:
type: array
items:
type: object
required:
- id
- code
- title
- detail
properties:
id:
type: string
code:
type: string
title:
type: string
detail:
type: string
source:
type: object
properties:
pointer:
type: string
parameter:
type: string
required:
- errors
ServerError:
description: Server Error
content:
application/vnd.api+json:
schema:
type: object
properties:
errors:
type: array
items:
type: object
required:
- id
- code
- title
- detail
properties:
id:
type: string
code:
type: string
title:
type: string
detail:
type: string
source:
type: object
properties:
pointer:
type: string
parameter:
type: string
required:
- errors
securitySchemes:
Klaviyo-API-Key:
type: apiKey
in: header
name: Authorization
description: Private key authentication for /api/ endpoints is performed by setting the `Authorization` header to `Klaviyo-API-Key your-private-api-key`
For more information please visit https://developers.klaviyo.com/en/v2026-04-15/reference/api-overview#authentication
x-default: Klaviyo-API-Key your-private-api-key
x-readme:
explorer-enabled: false
proxy-enabled: true
samples-enabled: true