K2K Apps
Kafka 2 Kafka application management
Retrieves a single K2KApp by name.
The bearer token can be obtained by creating a ServiceAccount.
Includes metrics in the response, if available.
Happy response.
Defines a K2KApp (Kafka-to-Kafka application).
Error object.
GET /api/v0/apps/k2k/{name} HTTP/1.1
Host: api.example.com
Authorization: Bearer YOUR_SECRET_TOKEN
Accept: */*
{
"apiVersion": "text",
"kind": "text",
"metadata": {
"name": "text",
"displayName": "text",
"description": "text",
"id": "text",
"lrn": "text",
"creationTimestamp": "2026-01-01T00:00:00.000Z",
"generation": 1
},
"spec": {
"sourceKafkaLRN": "environments:kafka-connection/my-source-environment/plaintext",
"targetKafkaLRN": "environments:kafka-connection/my-target-environment/plaintext",
"topics": [
"text"
],
"deploymentNamespaceLRN": "kubernetes:namespace/my-environment/incluster/my-namespace",
"replicas": 1,
"kubernetes": {
"commonMetadata": {
"labels": {
"ANY_ADDITIONAL_PROPERTY": "text"
},
"annotations": {
"ANY_ADDITIONAL_PROPERTY": "text"
}
},
"securityContext": {
"runAsUser": 1,
"runAsGroup": 1,
"runAsNonRoot": true
},
"imagePullSecrets": [
{
"name": "text"
}
],
"serviceAccount": "text",
"image": "text",
"resources": {
"requests": {
"cpu": "text",
"memory": "text"
},
"limits": {
"cpu": "text",
"memory": "text"
}
}
},
"replicator": {
"schemaMapping": true,
"exactlyOnce": true,
"headerReplication": true,
"autoCreateTopics": true,
"autoCreateControlTopics": true,
"keepRecordCreationTimestamp": true,
"errorHandling": {
"onCommitSyncTimeout": "fail",
"onControlMessageDeserializationError": "fail"
},
"tracingHeaders": {
"partition": true,
"offset": true,
"topic": true,
"pipeline": true
},
"coordination": {
"commit": {
"topic": "text",
"syncTimeoutSeconds": 1,
"batchSize": 1,
"batchTimeoutSeconds": 1
},
"assignment": {
"topic": "text",
"graceWindowSeconds": 1,
"fencingMaxParallelism": 1
}
},
"bidirectional": {
"enabled": true,
"mode": "cluster",
"headerName": "text"
}
},
"targetTopicMapping": {},
"paused": true,
"configOverrides": {
"ANY_ADDITIONAL_PROPERTY": "anything"
},
"startFrom": "2025-01-14T10:00:00Z"
},
"status": {
"updatedAt": "2026-01-01T00:00:00.000Z",
"state": "deploying",
"statusLastTransitionAt": "2026-01-01T00:00:00.000Z",
"statusMessage": "text",
"observedGeneration": 1,
"deployment": {
"inSync": true,
"managedResources": [
{
"name": "text",
"namespace": "text",
"kind": "text",
"status": "text",
"reason": "text"
}
],
"pods": [
{
"name": "text",
"namespace": "text",
"state": "text",
"reason": "text",
"lastTermination": {
"message": "text",
"time": "2026-01-01T00:00:00.000Z"
}
}
]
},
"kafka": {
"consumerGroup": "text"
}
},
"metrics": {
"state": "unknown",
"updated_at": "2026-01-01T00:00:00.000Z",
"error_message": "text",
"source_topics": [
{
"lrn": "text",
"name": "text",
"throughput": {
"last_retrieved_at": "2026-01-01T00:00:00.000Z",
"stale": true,
"bytes_per_second": 1,
"records_per_second": 1
},
"offsets": {
"last_retrieved_at": "2026-01-01T00:00:00.000Z",
"stale": true,
"partitions": [
{
"partition": 0,
"log_end_offset": 1,
"consumer_offset": 1,
"lag": 1,
"truncated": true
}
]
}
}
],
"destination_topics": [
{
"lrn": "text",
"name": "text",
"throughput": {
"last_retrieved_at": "2026-01-01T00:00:00.000Z",
"stale": true,
"bytes_per_second": 1,
"records_per_second": 1
},
"offsets": {
"last_retrieved_at": "2026-01-01T00:00:00.000Z",
"stale": true,
"partitions": [
{
"partition": 0,
"log_end_offset": 1
}
]
}
}
],
"errors": [
"text"
],
"stalled": true,
"stall_message": "text",
"stale": true
}
}Creates a new K2KApp or updates an existing one.
The bearer token can be obtained by creating a ServiceAccount.
Contains common fields shared by HQ manifests.
Happy response.
Contains common fields shared by HQ manifests.
Error object.
PUT /api/v0/apps/k2k/{name} HTTP/1.1
Host: api.example.com
Authorization: Bearer YOUR_SECRET_TOKEN
Content-Type: application/yaml
Accept: */*
Content-Length: 1485
"apiVersion: text
kind: text
metadata:
name: text
displayName: text
description: text
spec:
sourceKafkaLRN: environments:kafka-connection/my-source-environment/plaintext
targetKafkaLRN: environments:kafka-connection/my-target-environment/plaintext
topics:
- text
deploymentNamespaceLRN: kubernetes:namespace/my-environment/incluster/my-namespace
replicas: 1
kubernetes:
commonMetadata:
labels:
ANY_ADDITIONAL_PROPERTY: text
annotations:
ANY_ADDITIONAL_PROPERTY: text
securityContext:
runAsUser: 1
runAsGroup: 1
runAsNonRoot: true
imagePullSecrets:
- name: text
serviceAccount: text
image: text
resources:
requests:
cpu: text
memory: text
limits:
cpu: text
memory: text
replicator:
schemaMapping: true
exactlyOnce: true
headerReplication: true
autoCreateTopics: true
autoCreateControlTopics: true
keepRecordCreationTimestamp: true
errorHandling:
onCommitSyncTimeout: fail
onControlMessageDeserializationError: fail
tracingHeaders:
partition: true
offset: true
topic: true
pipeline: true
coordination:
commit:
topic: text
syncTimeoutSeconds: 1
batchSize: 1
batchTimeoutSeconds: 1
assignment:
topic: text
graceWindowSeconds: 1
fencingMaxParallelism: 1
bidirectional:
enabled: true
mode: cluster
headerName: text
targetTopicMapping: {}
paused: true
configOverrides:
ANY_ADDITIONAL_PROPERTY: anything
startFrom: '2025-01-14T10:00:00Z'
"{
"apiVersion": "text",
"kind": "text",
"metadata": {
"name": "text",
"displayName": "text",
"description": "text",
"id": "text",
"lrn": "text",
"creationTimestamp": "2026-01-01T00:00:00.000Z",
"generation": 1
},
"spec": {
"sourceKafkaLRN": "environments:kafka-connection/my-source-environment/plaintext",
"targetKafkaLRN": "environments:kafka-connection/my-target-environment/plaintext",
"topics": [
"text"
],
"deploymentNamespaceLRN": "kubernetes:namespace/my-environment/incluster/my-namespace",
"replicas": 1,
"kubernetes": {
"commonMetadata": {
"labels": {
"ANY_ADDITIONAL_PROPERTY": "text"
},
"annotations": {
"ANY_ADDITIONAL_PROPERTY": "text"
}
},
"securityContext": {
"runAsUser": 1,
"runAsGroup": 1,
"runAsNonRoot": true
},
"imagePullSecrets": [
{
"name": "text"
}
],
"serviceAccount": "text",
"image": "text",
"resources": {
"requests": {
"cpu": "text",
"memory": "text"
},
"limits": {
"cpu": "text",
"memory": "text"
}
}
},
"replicator": {
"schemaMapping": true,
"exactlyOnce": true,
"headerReplication": true,
"autoCreateTopics": true,
"autoCreateControlTopics": true,
"keepRecordCreationTimestamp": true,
"errorHandling": {
"onCommitSyncTimeout": "fail",
"onControlMessageDeserializationError": "fail"
},
"tracingHeaders": {
"partition": true,
"offset": true,
"topic": true,
"pipeline": true
},
"coordination": {
"commit": {
"topic": "text",
"syncTimeoutSeconds": 1,
"batchSize": 1,
"batchTimeoutSeconds": 1
},
"assignment": {
"topic": "text",
"graceWindowSeconds": 1,
"fencingMaxParallelism": 1
}
},
"bidirectional": {
"enabled": true,
"mode": "cluster",
"headerName": "text"
}
},
"targetTopicMapping": {},
"paused": true,
"configOverrides": {
"ANY_ADDITIONAL_PROPERTY": "anything"
},
"startFrom": "2025-01-14T10:00:00Z"
},
"status": {
"updatedAt": "2026-01-01T00:00:00.000Z",
"state": "deploying",
"statusLastTransitionAt": "2026-01-01T00:00:00.000Z",
"statusMessage": "text",
"observedGeneration": 1,
"deployment": {
"inSync": true,
"managedResources": [
{
"name": "text",
"namespace": "text",
"kind": "text",
"status": "text",
"reason": "text"
}
],
"pods": [
{
"name": "text",
"namespace": "text",
"state": "text",
"reason": "text",
"lastTermination": {
"message": "text",
"time": "2026-01-01T00:00:00.000Z"
}
}
]
},
"kafka": {
"consumerGroup": "text"
}
}
}Deletes a single K2KApp by name.
The bearer token can be obtained by creating a ServiceAccount.
Deletes the K2KApp instantly and skips waiting for deletion of any corresponding K8s resources.
Happy response.
Contains common fields shared by HQ manifests.
Error object.
DELETE /api/v0/apps/k2k/{name} HTTP/1.1
Host: api.example.com
Authorization: Bearer YOUR_SECRET_TOKEN
Accept: */*
{
"apiVersion": "text",
"kind": "text",
"metadata": {
"name": "text",
"displayName": "text",
"description": "text",
"id": "text",
"lrn": "text",
"creationTimestamp": "2026-01-01T00:00:00.000Z",
"generation": 1
},
"spec": {
"sourceKafkaLRN": "environments:kafka-connection/my-source-environment/plaintext",
"targetKafkaLRN": "environments:kafka-connection/my-target-environment/plaintext",
"topics": [
"text"
],
"deploymentNamespaceLRN": "kubernetes:namespace/my-environment/incluster/my-namespace",
"replicas": 1,
"kubernetes": {
"commonMetadata": {
"labels": {
"ANY_ADDITIONAL_PROPERTY": "text"
},
"annotations": {
"ANY_ADDITIONAL_PROPERTY": "text"
}
},
"securityContext": {
"runAsUser": 1,
"runAsGroup": 1,
"runAsNonRoot": true
},
"imagePullSecrets": [
{
"name": "text"
}
],
"serviceAccount": "text",
"image": "text",
"resources": {
"requests": {
"cpu": "text",
"memory": "text"
},
"limits": {
"cpu": "text",
"memory": "text"
}
}
},
"replicator": {
"schemaMapping": true,
"exactlyOnce": true,
"headerReplication": true,
"autoCreateTopics": true,
"autoCreateControlTopics": true,
"keepRecordCreationTimestamp": true,
"errorHandling": {
"onCommitSyncTimeout": "fail",
"onControlMessageDeserializationError": "fail"
},
"tracingHeaders": {
"partition": true,
"offset": true,
"topic": true,
"pipeline": true
},
"coordination": {
"commit": {
"topic": "text",
"syncTimeoutSeconds": 1,
"batchSize": 1,
"batchTimeoutSeconds": 1
},
"assignment": {
"topic": "text",
"graceWindowSeconds": 1,
"fencingMaxParallelism": 1
}
},
"bidirectional": {
"enabled": true,
"mode": "cluster",
"headerName": "text"
}
},
"targetTopicMapping": {},
"paused": true,
"configOverrides": {
"ANY_ADDITIONAL_PROPERTY": "anything"
},
"startFrom": "2025-01-14T10:00:00Z"
},
"status": {
"updatedAt": "2026-01-01T00:00:00.000Z",
"state": "deploying",
"statusLastTransitionAt": "2026-01-01T00:00:00.000Z",
"statusMessage": "text",
"observedGeneration": 1,
"deployment": {
"inSync": true,
"managedResources": [
{
"name": "text",
"namespace": "text",
"kind": "text",
"status": "text",
"reason": "text"
}
],
"pods": [
{
"name": "text",
"namespace": "text",
"state": "text",
"reason": "text",
"lastTermination": {
"message": "text",
"time": "2026-01-01T00:00:00.000Z"
}
}
]
},
"kafka": {
"consumerGroup": "text"
}
}
}Updates an existing K2KApp.
The bearer token can be obtained by creating a ServiceAccount.
Contains common fields shared by HQ manifests.
Happy response.
Contains common fields shared by HQ manifests.
Error object.
PATCH /api/v0/apps/k2k/{name} HTTP/1.1
Host: api.example.com
Authorization: Bearer YOUR_SECRET_TOKEN
Content-Type: application/yaml
Accept: */*
Content-Length: 1485
"apiVersion: text
kind: text
metadata:
name: text
displayName: text
description: text
spec:
sourceKafkaLRN: environments:kafka-connection/my-source-environment/plaintext
targetKafkaLRN: environments:kafka-connection/my-target-environment/plaintext
topics:
- text
deploymentNamespaceLRN: kubernetes:namespace/my-environment/incluster/my-namespace
replicas: 1
kubernetes:
commonMetadata:
labels:
ANY_ADDITIONAL_PROPERTY: text
annotations:
ANY_ADDITIONAL_PROPERTY: text
securityContext:
runAsUser: 1
runAsGroup: 1
runAsNonRoot: true
imagePullSecrets:
- name: text
serviceAccount: text
image: text
resources:
requests:
cpu: text
memory: text
limits:
cpu: text
memory: text
replicator:
schemaMapping: true
exactlyOnce: true
headerReplication: true
autoCreateTopics: true
autoCreateControlTopics: true
keepRecordCreationTimestamp: true
errorHandling:
onCommitSyncTimeout: fail
onControlMessageDeserializationError: fail
tracingHeaders:
partition: true
offset: true
topic: true
pipeline: true
coordination:
commit:
topic: text
syncTimeoutSeconds: 1
batchSize: 1
batchTimeoutSeconds: 1
assignment:
topic: text
graceWindowSeconds: 1
fencingMaxParallelism: 1
bidirectional:
enabled: true
mode: cluster
headerName: text
targetTopicMapping: {}
paused: true
configOverrides:
ANY_ADDITIONAL_PROPERTY: anything
startFrom: '2025-01-14T10:00:00Z'
"{
"apiVersion": "text",
"kind": "text",
"metadata": {
"name": "text",
"displayName": "text",
"description": "text",
"id": "text",
"lrn": "text",
"creationTimestamp": "2026-01-01T00:00:00.000Z",
"generation": 1
},
"spec": {
"sourceKafkaLRN": "environments:kafka-connection/my-source-environment/plaintext",
"targetKafkaLRN": "environments:kafka-connection/my-target-environment/plaintext",
"topics": [
"text"
],
"deploymentNamespaceLRN": "kubernetes:namespace/my-environment/incluster/my-namespace",
"replicas": 1,
"kubernetes": {
"commonMetadata": {
"labels": {
"ANY_ADDITIONAL_PROPERTY": "text"
},
"annotations": {
"ANY_ADDITIONAL_PROPERTY": "text"
}
},
"securityContext": {
"runAsUser": 1,
"runAsGroup": 1,
"runAsNonRoot": true
},
"imagePullSecrets": [
{
"name": "text"
}
],
"serviceAccount": "text",
"image": "text",
"resources": {
"requests": {
"cpu": "text",
"memory": "text"
},
"limits": {
"cpu": "text",
"memory": "text"
}
}
},
"replicator": {
"schemaMapping": true,
"exactlyOnce": true,
"headerReplication": true,
"autoCreateTopics": true,
"autoCreateControlTopics": true,
"keepRecordCreationTimestamp": true,
"errorHandling": {
"onCommitSyncTimeout": "fail",
"onControlMessageDeserializationError": "fail"
},
"tracingHeaders": {
"partition": true,
"offset": true,
"topic": true,
"pipeline": true
},
"coordination": {
"commit": {
"topic": "text",
"syncTimeoutSeconds": 1,
"batchSize": 1,
"batchTimeoutSeconds": 1
},
"assignment": {
"topic": "text",
"graceWindowSeconds": 1,
"fencingMaxParallelism": 1
}
},
"bidirectional": {
"enabled": true,
"mode": "cluster",
"headerName": "text"
}
},
"targetTopicMapping": {},
"paused": true,
"configOverrides": {
"ANY_ADDITIONAL_PROPERTY": "anything"
},
"startFrom": "2025-01-14T10:00:00Z"
},
"status": {
"updatedAt": "2026-01-01T00:00:00.000Z",
"state": "deploying",
"statusLastTransitionAt": "2026-01-01T00:00:00.000Z",
"statusMessage": "text",
"observedGeneration": 1,
"deployment": {
"inSync": true,
"managedResources": [
{
"name": "text",
"namespace": "text",
"kind": "text",
"status": "text",
"reason": "text"
}
],
"pods": [
{
"name": "text",
"namespace": "text",
"state": "text",
"reason": "text",
"lastTermination": {
"message": "text",
"time": "2026-01-01T00:00:00.000Z"
}
}
]
},
"kafka": {
"consumerGroup": "text"
}
}
}Lists all K2KApps.
The bearer token can be obtained by creating a ServiceAccount.
Includes metrics summaries in the response, if available.
Happy response.
Contains K2KApps (Kafka-to-Kafka applications).
Error object.
GET /api/v0/apps/k2k HTTP/1.1
Host: api.example.com
Authorization: Bearer YOUR_SECRET_TOKEN
Accept: */*
{
"items": [
{
"apiVersion": "text",
"kind": "text",
"metadata": {
"name": "text",
"displayName": "text",
"description": "text",
"id": "text",
"lrn": "text",
"creationTimestamp": "2026-01-01T00:00:00.000Z",
"generation": 1
},
"spec": {
"sourceKafkaLRN": "environments:kafka-connection/my-source-environment/plaintext",
"targetKafkaLRN": "environments:kafka-connection/my-target-environment/plaintext",
"topics": [
"text"
],
"deploymentNamespaceLRN": "kubernetes:namespace/my-environment/incluster/my-namespace",
"replicas": 1,
"kubernetes": {
"commonMetadata": {
"labels": {
"ANY_ADDITIONAL_PROPERTY": "text"
},
"annotations": {
"ANY_ADDITIONAL_PROPERTY": "text"
}
},
"securityContext": {
"runAsUser": 1,
"runAsGroup": 1,
"runAsNonRoot": true
},
"imagePullSecrets": [
{
"name": "text"
}
],
"serviceAccount": "text",
"image": "text",
"resources": {
"requests": {
"cpu": "text",
"memory": "text"
},
"limits": {
"cpu": "text",
"memory": "text"
}
}
},
"replicator": {
"schemaMapping": true,
"exactlyOnce": true,
"headerReplication": true,
"autoCreateTopics": true,
"autoCreateControlTopics": true,
"keepRecordCreationTimestamp": true,
"errorHandling": {
"onCommitSyncTimeout": "fail",
"onControlMessageDeserializationError": "fail"
},
"tracingHeaders": {
"partition": true,
"offset": true,
"topic": true,
"pipeline": true
},
"coordination": {
"commit": {
"topic": "text",
"syncTimeoutSeconds": 1,
"batchSize": 1,
"batchTimeoutSeconds": 1
},
"assignment": {
"topic": "text",
"graceWindowSeconds": 1,
"fencingMaxParallelism": 1
}
},
"bidirectional": {
"enabled": true,
"mode": "cluster",
"headerName": "text"
}
},
"targetTopicMapping": {},
"paused": true,
"configOverrides": {
"ANY_ADDITIONAL_PROPERTY": "anything"
},
"startFrom": "2025-01-14T10:00:00Z"
},
"status": {
"updatedAt": "2026-01-01T00:00:00.000Z",
"state": "deploying",
"statusLastTransitionAt": "2026-01-01T00:00:00.000Z",
"statusMessage": "text",
"observedGeneration": 1,
"deployment": {
"inSync": true,
"managedResources": [
{
"name": "text",
"namespace": "text",
"kind": "text",
"status": "text",
"reason": "text"
}
],
"pods": [
{
"name": "text",
"namespace": "text",
"state": "text",
"reason": "text",
"lastTermination": {
"message": "text",
"time": "2026-01-01T00:00:00.000Z"
}
}
]
},
"kafka": {
"consumerGroup": "text"
}
}
},
{
"metrics_summary": {
"topics_count": 1,
"partitions_count": 1,
"total_bytes_per_second_read": 1,
"total_bytes_per_second_written": 1,
"total_records_per_second_read": 1,
"total_records_per_second_written": 1,
"state": "unknown",
"updated_at": "2026-01-01T00:00:00.000Z",
"error_message": "text"
}
}
]
}Creates a new K2KApp.
The bearer token can be obtained by creating a ServiceAccount.
Contains common fields shared by HQ manifests.
Happy response.
Contains common fields shared by HQ manifests.
Error object.
POST /api/v0/apps/k2k HTTP/1.1
Host: api.example.com
Authorization: Bearer YOUR_SECRET_TOKEN
Content-Type: application/yaml
Accept: */*
Content-Length: 1485
"apiVersion: text
kind: text
metadata:
name: text
displayName: text
description: text
spec:
sourceKafkaLRN: environments:kafka-connection/my-source-environment/plaintext
targetKafkaLRN: environments:kafka-connection/my-target-environment/plaintext
topics:
- text
deploymentNamespaceLRN: kubernetes:namespace/my-environment/incluster/my-namespace
replicas: 1
kubernetes:
commonMetadata:
labels:
ANY_ADDITIONAL_PROPERTY: text
annotations:
ANY_ADDITIONAL_PROPERTY: text
securityContext:
runAsUser: 1
runAsGroup: 1
runAsNonRoot: true
imagePullSecrets:
- name: text
serviceAccount: text
image: text
resources:
requests:
cpu: text
memory: text
limits:
cpu: text
memory: text
replicator:
schemaMapping: true
exactlyOnce: true
headerReplication: true
autoCreateTopics: true
autoCreateControlTopics: true
keepRecordCreationTimestamp: true
errorHandling:
onCommitSyncTimeout: fail
onControlMessageDeserializationError: fail
tracingHeaders:
partition: true
offset: true
topic: true
pipeline: true
coordination:
commit:
topic: text
syncTimeoutSeconds: 1
batchSize: 1
batchTimeoutSeconds: 1
assignment:
topic: text
graceWindowSeconds: 1
fencingMaxParallelism: 1
bidirectional:
enabled: true
mode: cluster
headerName: text
targetTopicMapping: {}
paused: true
configOverrides:
ANY_ADDITIONAL_PROPERTY: anything
startFrom: '2025-01-14T10:00:00Z'
"{
"apiVersion": "text",
"kind": "text",
"metadata": {
"name": "text",
"displayName": "text",
"description": "text",
"id": "text",
"lrn": "text",
"creationTimestamp": "2026-01-01T00:00:00.000Z",
"generation": 1
},
"spec": {
"sourceKafkaLRN": "environments:kafka-connection/my-source-environment/plaintext",
"targetKafkaLRN": "environments:kafka-connection/my-target-environment/plaintext",
"topics": [
"text"
],
"deploymentNamespaceLRN": "kubernetes:namespace/my-environment/incluster/my-namespace",
"replicas": 1,
"kubernetes": {
"commonMetadata": {
"labels": {
"ANY_ADDITIONAL_PROPERTY": "text"
},
"annotations": {
"ANY_ADDITIONAL_PROPERTY": "text"
}
},
"securityContext": {
"runAsUser": 1,
"runAsGroup": 1,
"runAsNonRoot": true
},
"imagePullSecrets": [
{
"name": "text"
}
],
"serviceAccount": "text",
"image": "text",
"resources": {
"requests": {
"cpu": "text",
"memory": "text"
},
"limits": {
"cpu": "text",
"memory": "text"
}
}
},
"replicator": {
"schemaMapping": true,
"exactlyOnce": true,
"headerReplication": true,
"autoCreateTopics": true,
"autoCreateControlTopics": true,
"keepRecordCreationTimestamp": true,
"errorHandling": {
"onCommitSyncTimeout": "fail",
"onControlMessageDeserializationError": "fail"
},
"tracingHeaders": {
"partition": true,
"offset": true,
"topic": true,
"pipeline": true
},
"coordination": {
"commit": {
"topic": "text",
"syncTimeoutSeconds": 1,
"batchSize": 1,
"batchTimeoutSeconds": 1
},
"assignment": {
"topic": "text",
"graceWindowSeconds": 1,
"fencingMaxParallelism": 1
}
},
"bidirectional": {
"enabled": true,
"mode": "cluster",
"headerName": "text"
}
},
"targetTopicMapping": {},
"paused": true,
"configOverrides": {
"ANY_ADDITIONAL_PROPERTY": "anything"
},
"startFrom": "2025-01-14T10:00:00Z"
},
"status": {
"updatedAt": "2026-01-01T00:00:00.000Z",
"state": "deploying",
"statusLastTransitionAt": "2026-01-01T00:00:00.000Z",
"statusMessage": "text",
"observedGeneration": 1,
"deployment": {
"inSync": true,
"managedResources": [
{
"name": "text",
"namespace": "text",
"kind": "text",
"status": "text",
"reason": "text"
}
],
"pods": [
{
"name": "text",
"namespace": "text",
"state": "text",
"reason": "text",
"lastTermination": {
"message": "text",
"time": "2026-01-01T00:00:00.000Z"
}
}
]
},
"kafka": {
"consumerGroup": "text"
}
}
}Retrieves the current committed offsets for all topics and partitions associated with a K2K application's consumer group. The application does not need to be running for this operation. Note: This reads from the K2K internal control topic, not from Kafka's standard __consumer_offsets topic, as K2K uses a custom offset storage mechanism.
The bearer token can be obtained by creating a ServiceAccount.
The unique name for the K2K application.
my-replicator-appMaximum number of topics to return per page.
50Example: 50Pagination cursor from previous response's next_cursor.
eyJ0b3BpYyI6InVzZXItYWN0aXZpdHkifQ==A search keyword to filter topics by name (case-insensitive partial match). Topics whose names contain the search string will be included in results. Filtering is applied before pagination, so total_count and pagination reflect the filtered result set.
eventsConsumer group offsets retrieved successfully.
Consumer group offset information for a K2K application.
The name of the K2K application.
my-replicator-appThe Kafka consumer group ID used by this application.
k2k-my-replicator-appTotal number of topics across all pages.
1247Whether more results exist beyond this page.
trueCursor for retrieving the next page of results. Null if this is the last page.
eyJ0b3BpYyI6InVzZXItYWN0aXZpdHkifQ==Bad Request - invalid pagination parameters. Possible causes: limit exceeds maximum (250), limit less than 1, or invalid/expired cursor format.
K2K application not found.
Agent not connected or unavailable.
Error object.
GET /api/v0/apps/k2k/{name}/position/offsets HTTP/1.1
Host: api.example.com
Authorization: Bearer YOUR_SECRET_TOKEN
Accept: */*
{
"application_name": "my-replicator-app",
"consumer_group": "k2k-my-replicator-app",
"topics": [
{
"topic_name": "source-events",
"partitions": [
{
"partition": 0,
"offset": 1234567
}
]
}
],
"total_count": 1247,
"has_more": true,
"next_cursor": "eyJ0b3BpYyI6InVzZXItYWN0aXZpdHkifQ=="
}Update the committed offsets for multiple topic partitions for a given K2K application. Precondition: The K2K application must be stopped before calling this endpoint. If the application is running, a 409 Conflict error is returned. This is an atomic, all-or-nothing operation using Kafka Transactions. This endpoint replaces the deprecated endpoint (PUT /v0/apps/k2k/{name}/offsets/{topicName}).
The bearer token can be obtained by creating a ServiceAccount.
The unique name for the K2K application.
my-app-prodRequest to set consumer group offsets. At least one offset must be provided via either 'positions' (preferred) or 'offsets' (deprecated).
Offsets successfully updated.
my-app-prodBad Request - invalid request format or exceeds limits. Possible causes: invalid request format, request exceeds maximum of 1000 topics, or missing agent capabilities.
K2K application not found.
Conflict - application must be stopped to modify offsets.
Agent not connected or unavailable.
Error object.
PUT /api/v0/apps/k2k/{name}/position/offsets HTTP/1.1
Host: api.example.com
Authorization: Bearer YOUR_SECRET_TOKEN
Content-Type: application/json
Accept: */*
Content-Length: 99
{
"positions": {
"source-events": [
{
"partition": 0,
"offset": 1234567
},
{
"partition": 1,
"offset": 2345678
}
]
}
}{
"application_name": "my-app-prod",
"updated_partitions": [
{
"topic": "user-login-events",
"partition": 0,
"offset": 12345
}
]
}Sets the committed offsets for specific topic partitions of a K2K application by resolving a single timestamp to offsets. Precondition: The K2K application must be stopped before calling this endpoint. If the application is running, a 409 Conflict error is returned. Two-Phase Operation: 1. HQ resolves the timestamp to offsets via the Agent (single gRPC call) 2. HQ publishes the resolved offsets to the K2K control topic. Design: A single timestamp applies to all specified partitions. This aligns the HTTP API with the gRPC contract, avoiding hidden complexity. For different timestamps, clients make separate API calls. Edge Cases (per Kafka offsetsForTimes semantics): Timestamp before earliest message returns the earliest offset; timestamp after latest message skips partition (no offset available); partition with no messages is skipped.
The bearer token can be obtained by creating a ServiceAccount.
The unique name for the K2K application.
my-replicator-appRequest to set consumer group offsets by timestamp. At least one topic with partitions must be provided. A single timestamp applies to all specified partitions.
The target timestamp (RFC3339 format). All specified partitions will be set to the first message at or after this timestamp.
2025-01-14T10:00:00ZOffsets successfully updated.
Response after setting offsets by timestamp.
The name of the K2K application.
my-replicator-appThe timestamp that was used for resolution.
2025-01-14T10:00:00ZBad Request - request exceeds limits. Maximum of 1000 topics per request allowed.
K2K application not found.
Conflict - application must be stopped to modify offsets.
Agent not connected or unavailable.
Error object.
PUT /api/v0/apps/k2k/{name}/position/timestamp HTTP/1.1
Host: api.example.com
Authorization: Bearer YOUR_SECRET_TOKEN
Content-Type: application/json
Accept: */*
Content-Length: 97
{
"timestamp": "2025-01-14T10:00:00Z",
"partitions": {
"source-events": [
0,
1,
2
],
"user-activity": [
0,
1
]
}
}{
"application_name": "my-replicator-app",
"timestamp": "2025-01-14T10:00:00Z",
"updated_partitions": [
{
"topic": "user-login-events",
"partition": 0,
"offset": 12345
}
],
"skipped_partitions": [
{
"topic": "source-events",
"partition": 2,
"reason": "no_offset_for_timestamp"
}
]
}Provides Server-Sent Events (SSE) for K2KApp updates. TODO.
The bearer token can be obtained by creating a ServiceAccount.
Error object.
Implements the RFC7807 "Problem Details", see https://www.rfc-editor.org/rfc/rfc7807.
Enumerates possible error types.
Describes the problem in a human readable fashion.
Is a copy of the http status code.
Contains in case of an "unauthorised" type of error, the url of the SSO provider, if any.
Is set to the id of this request. Can be used to correlate backend logs.
GET /api/v1/apps/k2k/live/sse HTTP/1.1
Host: api.example.com
Authorization: Bearer YOUR_SECRET_TOKEN
Accept: */*
Error object.
{
"type": "not_found",
"title": "text",
"status": 1,
"invalid_fields": [
{
"name": "text",
"error": "reference_not_found",
"title": "text",
"pointer": "text"
}
],
"sso_url": "text",
"request_id": "text"
}Renders a K2K app template for migration with the given consumer group and connections.
The bearer token can be obtained by creating a ServiceAccount.
The consumer group LRN to include in the template.
The source KafkaConnection LRN.
The target KafkaConnection LRN.
The deployment Kubernetes namespace LRN.
Successfully rendered the migration template.
Contains common fields shared by HQ manifests.
Error object.
GET /api/v1/k2k/migration-template?consumer_group_lrn=text&source_connection_lrn=text&target_connection_lrn=text&deployment_namespace_lrn=text HTTP/1.1
Host: api.example.com
Authorization: Bearer YOUR_SECRET_TOKEN
Accept: */*
{
"apiVersion": "text",
"kind": "text",
"metadata": {
"name": "text",
"displayName": "text",
"description": "text",
"id": "text",
"lrn": "text",
"creationTimestamp": "2026-01-01T00:00:00.000Z",
"generation": 1
},
"spec": {
"sourceKafkaLRN": "environments:kafka-connection/my-source-environment/plaintext",
"targetKafkaLRN": "environments:kafka-connection/my-target-environment/plaintext",
"topics": [
"text"
],
"deploymentNamespaceLRN": "kubernetes:namespace/my-environment/incluster/my-namespace",
"replicas": 1,
"kubernetes": {
"commonMetadata": {
"labels": {
"ANY_ADDITIONAL_PROPERTY": "text"
},
"annotations": {
"ANY_ADDITIONAL_PROPERTY": "text"
}
},
"securityContext": {
"runAsUser": 1,
"runAsGroup": 1,
"runAsNonRoot": true
},
"imagePullSecrets": [
{
"name": "text"
}
],
"serviceAccount": "text",
"image": "text",
"resources": {
"requests": {
"cpu": "text",
"memory": "text"
},
"limits": {
"cpu": "text",
"memory": "text"
}
}
},
"replicator": {
"schemaMapping": true,
"exactlyOnce": true,
"headerReplication": true,
"autoCreateTopics": true,
"autoCreateControlTopics": true,
"keepRecordCreationTimestamp": true,
"errorHandling": {
"onCommitSyncTimeout": "fail",
"onControlMessageDeserializationError": "fail"
},
"tracingHeaders": {
"partition": true,
"offset": true,
"topic": true,
"pipeline": true
},
"coordination": {
"commit": {
"topic": "text",
"syncTimeoutSeconds": 1,
"batchSize": 1,
"batchTimeoutSeconds": 1
},
"assignment": {
"topic": "text",
"graceWindowSeconds": 1,
"fencingMaxParallelism": 1
}
},
"bidirectional": {
"enabled": true,
"mode": "cluster",
"headerName": "text"
}
},
"targetTopicMapping": {},
"paused": true,
"configOverrides": {
"ANY_ADDITIONAL_PROPERTY": "anything"
},
"startFrom": "2025-01-14T10:00:00Z"
}
}Lists all K2K migrations.
The bearer token can be obtained by creating a ServiceAccount.
Successfully retrieved the list of migrations.
Contains a list of K2K migrations.
Error object.
GET /api/v1/k2k/migrations HTTP/1.1
Host: api.example.com
Authorization: Bearer YOUR_SECRET_TOKEN
Accept: */*
{
"items": [
{
"name": "text",
"display_name": "text",
"lrn": "text",
"id": "text",
"created_at": "2026-01-01T00:00:00.000Z",
"k2k_app": "text",
"consumer_group_id": "text",
"status": "check_migration_readiness",
"status_message": "text",
"allowed_next_states": [
"check_migration_readiness"
],
"events": [
{
"time": "2026-01-01T00:00:00.000Z",
"message": "text",
"offsets": [
{
"topic": "user-login-events",
"partition": 0,
"offset": 12345
}
]
}
]
}
]
}Creates a new K2K migration.
The bearer token can be obtained by creating a ServiceAccount.
Request body for creating a new K2K migration.
The unique name for the migration.
Sets the display name of the new K2KMigration. If not provided, the value of "name" will be used.
The K2K app migrating the data the consumer group processes.
The ID of the consumer group whose offsets should be migrated.
Successfully created the migration.
Represents a K2K consumer group offset migration.
The unique name of the migration.
Contains the resource identifier for use in access control policies.
The timestamp when the migration was created.
The name of the K2K app this migration is associated with.
The ID of the consumer group being migrated.
Enumerates K2K migration status types.
A human-readable message about the current status.
Error object.
POST /api/v1/k2k/migrations HTTP/1.1
Host: api.example.com
Authorization: Bearer YOUR_SECRET_TOKEN
Content-Type: application/json
Accept: */*
Content-Length: 81
{
"name": "text",
"display_name": "text",
"k2k_app": "text",
"consumer_group_id": "text"
}{
"name": "text",
"display_name": "text",
"lrn": "text",
"id": "text",
"created_at": "2026-01-01T00:00:00.000Z",
"k2k_app": "text",
"consumer_group_id": "text",
"status": "check_migration_readiness",
"status_message": "text",
"allowed_next_states": [
"check_migration_readiness"
],
"events": [
{
"time": "2026-01-01T00:00:00.000Z",
"message": "text",
"offsets": [
{
"topic": "user-login-events",
"partition": 0,
"offset": 12345
}
]
}
]
}Gets a K2K migration by name.
The bearer token can be obtained by creating a ServiceAccount.
The unique name of the migration.
Successfully retrieved the migration.
Represents a K2K consumer group offset migration.
The unique name of the migration.
Contains the resource identifier for use in access control policies.
The timestamp when the migration was created.
The name of the K2K app this migration is associated with.
The ID of the consumer group being migrated.
Enumerates K2K migration status types.
A human-readable message about the current status.
Error object.
GET /api/v1/k2k/migrations/{name} HTTP/1.1
Host: api.example.com
Authorization: Bearer YOUR_SECRET_TOKEN
Accept: */*
{
"name": "text",
"display_name": "text",
"lrn": "text",
"id": "text",
"created_at": "2026-01-01T00:00:00.000Z",
"k2k_app": "text",
"consumer_group_id": "text",
"status": "check_migration_readiness",
"status_message": "text",
"allowed_next_states": [
"check_migration_readiness"
],
"events": [
{
"time": "2026-01-01T00:00:00.000Z",
"message": "text",
"offsets": [
{
"topic": "user-login-events",
"partition": 0,
"offset": 12345
}
]
}
]
}Deletes a K2K migration by name.
The bearer token can be obtained by creating a ServiceAccount.
The unique name of the migration.
Successfully deleted the migration.
No content
Error object.
DELETE /api/v1/k2k/migrations/{name} HTTP/1.1
Host: api.example.com
Authorization: Bearer YOUR_SECRET_TOKEN
Accept: */*
No content
Updates the state of a K2K migration.
The bearer token can be obtained by creating a ServiceAccount.
The unique name of the migration.
Request body for updating the state of a K2K migration.
User-triggerable migration actions.
Successfully updated the migration.
Represents a K2K consumer group offset migration.
The unique name of the migration.
Contains the resource identifier for use in access control policies.
The timestamp when the migration was created.
The name of the K2K app this migration is associated with.
The ID of the consumer group being migrated.
Enumerates K2K migration status types.
A human-readable message about the current status.
Error object.
PATCH /api/v1/k2k/migrations/{name} HTTP/1.1
Host: api.example.com
Authorization: Bearer YOUR_SECRET_TOKEN
Content-Type: application/json
Accept: */*
Content-Length: 38
{
"status": "check_migration_readiness"
}{
"name": "text",
"display_name": "text",
"lrn": "text",
"id": "text",
"created_at": "2026-01-01T00:00:00.000Z",
"k2k_app": "text",
"consumer_group_id": "text",
"status": "check_migration_readiness",
"status_message": "text",
"allowed_next_states": [
"check_migration_readiness"
],
"events": [
{
"time": "2026-01-01T00:00:00.000Z",
"message": "text",
"offsets": [
{
"topic": "user-login-events",
"partition": 0,
"offset": 12345
}
]
}
]
}Last updated
Was this helpful?

