---
title: "Get Agent Config History Entry"
method: GET
path: "/agents/{job_id}/config/history/{version}"
tags: ["Agents"]
---

# Get Agent Config History Entry

`GET /agents/{job_id}/config/history/{version}`

## Request

- Base URL: `https://api.streamkap.com`
- URL: `https://api.streamkap.com/agents/{job_id}/config/history/{version}`
- Auth: HTTP bearer
- TypeScript: <https://skmtc.dev/streamkap/apis/streamkap-rest-api/docs/agents/:job_id/config/history/:version/get.ts> (a function with typed inputs; its response is checked against the schema)

Return the masked full config for a specific history version.

The stored snapshot is re-validated against the current agent config
rules. If those rules have tightened since the snapshot was written, the
response is 422 with the validation errors (the same shape the rollback
endpoint returns). 404 if no history entry exists at that version.

## Path parameters

- `job_id` string, required
- `version` integer, required

## Response `200`

Successful Response

- AgentConfigHistoryDetailResponse: Response for ``GET /agents/{id}/config/history/{version}``. Same masking rules as ``AgentConfigResponse`` - partial ``sk-a****xyzw`` for ``apiKey`` / ``clientSecret``, full ``********`` for ``bearerToken`` / ``headerValue`` / any ``headers`` dict value.
  - `version` integer, required
  - `changedByEmail` string, nullable
  - `changedTimestamp` string, date-time, required
  - `changeKind` 'create' | 'update' | 'rollback', required
  - `rollbackSourceVersion` integer, nullable
  - `changeNote` string, nullable
  - `agentConfig` CreateAgentConfigRequest, required: Request body for POST /agents/config - create a config-based agent.
    - `name` string, required: Agent display name
    - `description` string, nullable: Human-readable context for the agent
    - `enabled` boolean: Kill switch. When false, the Flink runtime accepts the deploy but stops emitting output — used by support to disable a runaway tenant agent without a full cancel/redeploy.
    - `agentType` 'workflow' | 'react'
    - `input` AgentInputConfig, required: Input configuration for the agent.
      - `topicPattern` string, required: Regex pattern for input topics, e.g. '^(orders)$'
      - `inputSerialization` 'JsonConfluent' | 'AvroConfluent'
      - `fields` string[], nullable: Column-level filter - only these fields sent to LLM
      - `createTableSQL` string, nullable: Flink SQL CREATE TABLE (required if filterSQL is set)
      - `filterSQL` string, nullable: WHERE clause predicate for row-level filtering
    - `output` AgentOutputConfig, required: Output configuration for the agent.
      - `topic` string, required: Fixed output topic name
      - `deadLetterTopic` string, nullable: DLQ topic name
      - `outputSerialization` 'JsonConfluent' | 'AvroConfluent'
      - `schema` object: Output schema: {field_name: TYPE_STRING}
    - `llm` AgentLlmConfig, required: Inline LLM configuration embedded on the agent. Carries provider, credentials, model, and tuning controls as a single object. Values can be copied from a saved ``AgentLlmConnection`` (which carries default model, tuning and reasoning controls) and overridden per agent; the object is stored as sent and used by the agent runtime at deploy. Two credential shapes (exactly one, same rule as ``ValidateLlmRequest``): 1. **Inline** - ``apiKey`` is filled directly. Streamkap encrypts it at rest and decrypts it only at deploy / test-run. 2. **Linked** - ``llmConnectionId`` references one of the tenant's saved LLM connections and ``apiKey`` is left empty. Streamkap resolves the real key server-side at deploy and at test-run, so a client never needs to hold or re-send the stored key when editing an existing agent. ``provider == ollama`` accepts an empty key without a link (the runtime is local and unauthenticated).
      - `provider` 'anthropic' | 'openai' | 'openai-responses' | 'ollama' | 'azure' | 'azure-openai' | 'bedrock' | 'qwen' | 'openai-compatible', required: Unified LLM provider enum. A single ``AgentLlmConnection`` carries one provider and a set of capabilities (chat / embedding). Each provider supports a fixed set of capabilities, validated on every write.
      - `model` string, required: Model name, e.g. claude-sonnet-4-20250514
      - `apiKey` string: API key - use '${SECRET:ENV_VAR_NAME}' for env var resolution. Empty when llmConnectionId is set.
      - `llmConnectionId` string, nullable: Id of one of the tenant's saved LLM connections (``llmConnections[].id`` in ``GET /agents/connections``). When set with an empty ``apiKey``, Streamkap resolves the real key server-side at deploy and at test-run.
      - `baseUrl` string, nullable: Base URL for OpenAI-compatible proxies
      - `temperature` number, nullable: Sampling temperature (null = matrix-skipped)
      - `maxTokens` integer, nullable: Max output tokens (null = matrix-skipped)
      - `timeout` integer, nullable: Request timeout in seconds (null = matrix-skipped)
      - `reasoningEffort` 'none' | 'minimal' | 'low' | 'medium' | 'high' | 'xhigh', nullable: OpenAI / GPT-5 reasoning effort. The accepted set is per-model; a value the chosen provider + model does not support is rejected with 422.
      - `thinkingBudgetTokens` integer, nullable: Anthropic Claude 4 extended-thinking budget (tokens). Non-null enables thinking.
      - `ollamaThink` boolean, nullable: Ollama 'think' toggle for reasoning models
      - `maxRetries` integer, nullable: Universal — max retry attempts on LLM call. Accepted by every provider.
      - `region` string, nullable: Bedrock: AWS region (e.g. us-east-1). Ignored for non-bedrock providers.
      - `strict` boolean, nullable: openai-responses: enable JSON-schema strict mode.
      - `store` boolean, nullable: openai-responses: server-side response storage flag.
      - `instructions` string, nullable: openai-responses: system-level instructions passed as a top-level Responses param.
      - `additionalKwargs` object, nullable: openai-responses / azure-openai: free-form extra request params forwarded verbatim by the runtime.
      - `apiVersion` string, nullable: azure-openai: Azure OpenAI API version (e.g. '2024-02-01'). Required for azure-openai.
      - `azureEndpoint` string, nullable: azure-openai: Azure resource endpoint (e.g. https://<resource>.openai.azure.com). Required.
      - `azureUrlPathMode` 'AUTO' | 'LEGACY' | 'UNIFIED', nullable: azure-openai: URL path resolution — AUTO / LEGACY / UNIFIED. Optional.
    - `prompts` AgentPromptConfig, required: Prompt configuration for the agent. The final system prompt is assembled automatically from the agent type template + output schema + tool descriptions + ``customInstructions``. The ``system`` field stores the assembled result (set by Streamkap, not the user).
      - `system` string: Assembled system prompt (generated by Streamkap)
      - `customInstructions` string: User-provided instructions appended to the auto-generated prompt
      - `user` string: User prompt template - {input_json} is replaced with the input record
    - `mcpServer` AgentMcpServerConfig: Top-level MCP server config shared across all MCP tools. Two shapes: - **Streamkap MCP**: ``projectKeyId`` set; ``serverUrl`` and ``headers`` are resolved server-side at deploy time from the agentic-enabled Project Key. - **External MCP**: ``serverUrl`` + ``headers`` set inline; ``projectKeyId`` omitted. Headers are composed at deploy time from the matching saved external connection (bearer / custom-header).
      - `projectKeyId` string, nullable: ID of an agentic-enabled Project Key. When set, deploy-time resolves the Streamkap MCP serverUrl + auth header from the PK row. Mutually exclusive with serverUrl - one or the other, never both.
      - `serverUrl` string, nullable: External MCP server URL. Required when projectKeyId is unset. Server-stamped from the PK row when projectKeyId is set.
      - `headers` object: Auth headers for MCP server
    - `tools` AgentToolConfig[]: Agent tools (MCP, HTTP, transform)
      - `name` string, required: Tool name (must be unique)
      - `type` 'http' | 'transform' | 'mcp', required
      - `description` string: Tool description for the LLM
      - `config` object: Type-specific configuration
      - `parameters` AgentToolParameterConfig[]: Tool parameters the LLM can provide
        - `name` string, required: Parameter name
        - `type` string: Parameter type (string, number, boolean)
        - `description` string: Parameter description for the LLM
    - `memory` AgentMemoryConfig: Memory configuration for the agent.
      - `keyField` string, nullable: Field to partition memory by (e.g. 'customer_id'). Default: topic key
      - `shortTerm` AgentShortTermMemoryConfig: Short-term (conversation) memory config.
        - `enabled` boolean: Enable short-term memory
        - `ttlMs` integer: Time-to-live in milliseconds (default: 1 hour)
        - `maxEntries` integer: Max conversation entries per key
      - `longTerm` AgentLongTermMemoryConfig: Long-term (vector store) memory config. References a saved ``AgentVectorStoreConnection`` by id; its credentials are resolved server-side at deploy time. Older agents may still carry ``destinationId`` (a Pinecone destination connector). If ``vectorStoreConnectionId`` is set it wins; otherwise ``destinationId`` is used. New agents should use ``vectorStoreConnectionId``.
        - `enabled` boolean: Enable long-term memory
        - `vectorStoreConnectionId` string, nullable: Reference to a saved AgentVectorStoreConnection. Resolved at deploy time.
        - `namespace` string, nullable: Per-agent namespace override (falls back to connection's defaultNamespace)
        - `destinationId` string, nullable: (Legacy) ObjectId of a Pinecone destination connector. Prefer vectorStoreConnectionId.
    - `knowledgeBases` AgentKnowledgeBaseRef[]: Knowledge bases this agent can query at runtime for RAG
      - `id` string, required: Knowledge base entity ID
      - `name` string: Display name (denormalized for UI)
    - `processing` AgentProcessingConfig: Processing configuration for the agent.
      - `parallelism` integer: Parallelism
      - `checkpointIntervalMin` integer: Checkpoint interval in minutes
      - `maxIterations` integer: Max tool-call iterations per record (react type only)
      - `maxTokensPerHour` integer: Per-TaskManager rolling-hour token budget. 0 = unlimited. When exceeded, records pass through with a `_budget_exceeded: true` marker.

## Other responses

- `422`: Validation Error

## Changes

- **2026-08-04** `2a3df099f4a9`: 1 info
  - endpoint added

[Operation history](https://skmtc.dev/streamkap/apis/streamkap-rest-api/changes/agents/:job_id/config/history/:version/get.md)

---

[API](https://skmtc.dev/streamkap/apis/streamkap-rest-api.md) - [All operations](https://skmtc.dev/streamkap/apis/streamkap-rest-api/llms.txt) - [OpenAPI document](https://skmtc.dev/streamkap/apis/streamkap-rest-api/revisions/56dda39bb53c?raw)
