For the complete documentation index, see llms.txt. This page is also available as Markdown.

K2K Apps

Kafka 2 Kafka application management

get

Retrieves a single K2KApp by name.

Authorizations
AuthorizationstringRequired

The bearer token can be obtained by creating a ServiceAccount.

Path parameters
namestringRequired
Query parameters
expand_metricsbooleanOptional

Includes metrics in the response, if available.

Responses
200

Happy response.

application/json

Defines a K2KApp (Kafka-to-Kafka application).

apiVersionstring · min: 1Required
kindstring · min: 1Required
get/api/v0/apps/k2k/{name}
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
  }
}
put

Creates a new K2KApp or updates an existing one.

Authorizations
AuthorizationstringRequired

The bearer token can be obtained by creating a ServiceAccount.

Path parameters
namestringRequired
Body

Contains common fields shared by HQ manifests.

apiVersionstring · min: 1Required
kindstring · min: 1Required
Responses
201

Happy response.

application/json

Contains common fields shared by HQ manifests.

apiVersionstring · min: 1Required
kindstring · min: 1Required
put/api/v0/apps/k2k/{name}
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"
    }
  }
}
delete

Deletes a single K2KApp by name.

Authorizations
AuthorizationstringRequired

The bearer token can be obtained by creating a ServiceAccount.

Path parameters
namestringRequired
Query parameters
forcebooleanOptional

Deletes the K2KApp instantly and skips waiting for deletion of any corresponding K8s resources.

Responses
200

Happy response.

application/json

Contains common fields shared by HQ manifests.

apiVersionstring · min: 1Required
kindstring · min: 1Required
delete/api/v0/apps/k2k/{name}
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"
    }
  }
}
patch

Updates an existing K2KApp.

Authorizations
AuthorizationstringRequired

The bearer token can be obtained by creating a ServiceAccount.

Path parameters
namestringRequired
Body

Contains common fields shared by HQ manifests.

apiVersionstring · min: 1Required
kindstring · min: 1Required
Responses
200

Happy response.

application/json

Contains common fields shared by HQ manifests.

apiVersionstring · min: 1Required
kindstring · min: 1Required
patch/api/v0/apps/k2k/{name}
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"
    }
  }
}
get

Lists all K2KApps.

Authorizations
AuthorizationstringRequired

The bearer token can be obtained by creating a ServiceAccount.

Query parameters
expand_metrics_summarybooleanOptional

Includes metrics summaries in the response, if available.

Responses
200

Happy response.

application/json

Contains K2KApps (Kafka-to-Kafka applications).

get/api/v0/apps/k2k
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"
      }
    }
  ]
}
post

Creates a new K2KApp.

Authorizations
AuthorizationstringRequired

The bearer token can be obtained by creating a ServiceAccount.

Body

Contains common fields shared by HQ manifests.

apiVersionstring · min: 1Required
kindstring · min: 1Required
Responses
201

Happy response.

application/json

Contains common fields shared by HQ manifests.

apiVersionstring · min: 1Required
kindstring · min: 1Required
post/api/v0/apps/k2k
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"
    }
  }
}

Get Consumer Group Offsets

get

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.

Authorizations
AuthorizationstringRequired

The bearer token can be obtained by creating a ServiceAccount.

Path parameters
namestringRequired

The unique name for the K2K application.

Example: my-replicator-app
Query parameters
limitinteger · min: 1 · max: 250Optional

Maximum number of topics to return per page.

Default: 50Example: 50
cursorstringOptional

Pagination cursor from previous response's next_cursor.

Example: eyJ0b3BpYyI6InVzZXItYWN0aXZpdHkifQ==
querystringOptional

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.

Example: events
Responses
200

Consumer group offsets retrieved successfully.

application/json

Consumer group offset information for a K2K application.

application_namestringRequired

The name of the K2K application.

Example: my-replicator-app
consumer_groupstringRequired

The Kafka consumer group ID used by this application.

Example: k2k-my-replicator-app
total_countintegerRequired

Total number of topics across all pages.

Example: 1247
has_morebooleanRequired

Whether more results exist beyond this page.

Example: true
next_cursorstring · nullableOptional

Cursor for retrieving the next page of results. Null if this is the last page.

Example: eyJ0b3BpYyI6InVzZXItYWN0aXZpdHkifQ==
get/api/v0/apps/k2k/{name}/position/offsets
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 Consumer Group Offsets for multiple partitions

put

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}).

Authorizations
AuthorizationstringRequired

The bearer token can be obtained by creating a ServiceAccount.

Path parameters
namestringRequired

The unique name for the K2K application.

Example: my-app-prod
Body

Request to set consumer group offsets. At least one offset must be provided via either 'positions' (preferred) or 'offsets' (deprecated).

Responses
200

Offsets successfully updated.

application/json
application_namestringRequiredExample: my-app-prod
put/api/v0/apps/k2k/{name}/position/offsets
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
    }
  ]
}

Set Consumer Group Offsets by Timestamp

put

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.

Authorizations
AuthorizationstringRequired

The bearer token can be obtained by creating a ServiceAccount.

Path parameters
namestringRequired

The unique name for the K2K application.

Example: my-replicator-app
Body

Request to set consumer group offsets by timestamp. At least one topic with partitions must be provided. A single timestamp applies to all specified partitions.

timestampstring · date-timeRequired

The target timestamp (RFC3339 format). All specified partitions will be set to the first message at or after this timestamp.

Example: 2025-01-14T10:00:00Z
Responses
200

Offsets successfully updated.

application/json

Response after setting offsets by timestamp.

application_namestringRequired

The name of the K2K application.

Example: my-replicator-app
timestampstring · date-timeRequired

The timestamp that was used for resolution.

Example: 2025-01-14T10:00:00Z
put/api/v0/apps/k2k/{name}/position/timestamp
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"
    }
  ]
}
get

Provides Server-Sent Events (SSE) for K2KApp updates. TODO.

Authorizations
AuthorizationstringRequired

The bearer token can be obtained by creating a ServiceAccount.

Responses
default

Error object.

application/json

Implements the RFC7807 "Problem Details", see https://www.rfc-editor.org/rfc/rfc7807.

typestring · enumOptional

Enumerates possible error types.

Possible values:
titlestringRequired

Describes the problem in a human readable fashion.

statusintegerRequired

Is a copy of the http status code.

sso_urlstringOptional

Contains in case of an "unauthorised" type of error, the url of the SSO provider, if any.

request_idstringOptional

Is set to the id of this request. Can be used to correlate backend logs.

get/api/v1/apps/k2k/live/sse
GET /api/v1/apps/k2k/live/sse HTTP/1.1
Host: api.example.com
Authorization: Bearer YOUR_SECRET_TOKEN
Accept: */*
default

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"
}
get

Renders a K2K app template for migration with the given consumer group and connections.

Authorizations
AuthorizationstringRequired

The bearer token can be obtained by creating a ServiceAccount.

Query parameters
consumer_group_lrnstringRequired

The consumer group LRN to include in the template.

source_connection_lrnstringRequired

The source KafkaConnection LRN.

target_connection_lrnstringRequired

The target KafkaConnection LRN.

deployment_namespace_lrnstringRequired

The deployment Kubernetes namespace LRN.

Responses
200

Successfully rendered the migration template.

application/json

Contains common fields shared by HQ manifests.

apiVersionstring · min: 1Required
kindstring · min: 1Required
get/api/v1/k2k/migration-template
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"
  }
}
get

Lists all K2K migrations.

Authorizations
AuthorizationstringRequired

The bearer token can be obtained by creating a ServiceAccount.

Responses
200

Successfully retrieved the list of migrations.

application/json

Contains a list of K2K migrations.

get/api/v1/k2k/migrations
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
            }
          ]
        }
      ]
    }
  ]
}
post

Creates a new K2K migration.

Authorizations
AuthorizationstringRequired

The bearer token can be obtained by creating a ServiceAccount.

Body

Request body for creating a new K2K migration.

namestring · hq-resource-name · min: 1 · max: 63Required

The unique name for the migration.

display_namestring · max: 150Optional

Sets the display name of the new K2KMigration. If not provided, the value of "name" will be used.

k2k_appstring · hq-resource-name · min: 1Required

The K2K app migrating the data the consumer group processes.

consumer_group_idstring · min: 1Required

The ID of the consumer group whose offsets should be migrated.

Responses
201

Successfully created the migration.

application/json

Represents a K2K consumer group offset migration.

namestringRequired

The unique name of the migration.

display_namestringRequired
lrnstringRequired

Contains the resource identifier for use in access control policies.

idstringRequired
created_atstring · date-timeRequired

The timestamp when the migration was created.

k2k_appstringRequired

The name of the K2K app this migration is associated with.

consumer_group_idstringRequired

The ID of the consumer group being migrated.

statusstring · enumRequired

Enumerates K2K migration status types.

Possible values:
status_messagestringRequired

A human-readable message about the current status.

post/api/v1/k2k/migrations
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
        }
      ]
    }
  ]
}
get

Gets a K2K migration by name.

Authorizations
AuthorizationstringRequired

The bearer token can be obtained by creating a ServiceAccount.

Path parameters
namestringRequired

The unique name of the migration.

Responses
200

Successfully retrieved the migration.

application/json

Represents a K2K consumer group offset migration.

namestringRequired

The unique name of the migration.

display_namestringRequired
lrnstringRequired

Contains the resource identifier for use in access control policies.

idstringRequired
created_atstring · date-timeRequired

The timestamp when the migration was created.

k2k_appstringRequired

The name of the K2K app this migration is associated with.

consumer_group_idstringRequired

The ID of the consumer group being migrated.

statusstring · enumRequired

Enumerates K2K migration status types.

Possible values:
status_messagestringRequired

A human-readable message about the current status.

get/api/v1/k2k/migrations/{name}
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
        }
      ]
    }
  ]
}
delete

Deletes a K2K migration by name.

Authorizations
AuthorizationstringRequired

The bearer token can be obtained by creating a ServiceAccount.

Path parameters
namestringRequired

The unique name of the migration.

Responses
204

Successfully deleted the migration.

No content

delete/api/v1/k2k/migrations/{name}
DELETE /api/v1/k2k/migrations/{name} HTTP/1.1
Host: api.example.com
Authorization: Bearer YOUR_SECRET_TOKEN
Accept: */*

No content

patch

Updates the state of a K2K migration.

Authorizations
AuthorizationstringRequired

The bearer token can be obtained by creating a ServiceAccount.

Path parameters
namestringRequired

The unique name of the migration.

Body

Request body for updating the state of a K2K migration.

statusstring · enumRequired

User-triggerable migration actions.

Possible values:
Responses
200

Successfully updated the migration.

application/json

Represents a K2K consumer group offset migration.

namestringRequired

The unique name of the migration.

display_namestringRequired
lrnstringRequired

Contains the resource identifier for use in access control policies.

idstringRequired
created_atstring · date-timeRequired

The timestamp when the migration was created.

k2k_appstringRequired

The name of the K2K app this migration is associated with.

consumer_group_idstringRequired

The ID of the consumer group being migrated.

statusstring · enumRequired

Enumerates K2K migration status types.

Possible values:
status_messagestringRequired

A human-readable message about the current status.

patch/api/v1/k2k/migrations/{name}
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?