Etcd KV API
Key-value store operations including put, get, delete, and range queries
Key-value store operations including put, get, delete, and range queries
openapi: 3.1.0
info:
title: etcd HTTP Gateway Auth KV API
description: The etcd HTTP/JSON gateway translates HTTP requests into gRPC calls, enabling clients without gRPC support to interact with the etcd v3 key-value store. The gateway exposes the full etcd v3 API surface including key-value operations (put, get, delete, range queries), watch streams for change notifications, lease management for TTL-based key expiration, cluster membership management, maintenance operations such as snapshots and defragmentation, and authentication and authorization controls. The gateway is served on port 2379 by default and accepts JSON-encoded request bodies that mirror the protobuf message structures of the underlying gRPC API.
version: '3.5'
contact:
name: etcd Community
url: https://etcd.io/community/
termsOfService: https://github.com/etcd-io/etcd/blob/main/LICENSE
servers:
- url: http://{host}:{port}/v3
description: etcd gRPC Gateway
variables:
host:
default: localhost
port:
default: '2379'
security:
- bearerAuth: []
tags:
- name: KV
description: Key-value store operations including put, get, delete, and range queries
paths:
/kv/put:
post:
operationId: kvPut
summary: Etcd Put a key-value pair
description: Stores a key-value pair in the etcd cluster. If the key already exists, the value is updated. Supports setting a lease ID to associate the key with a TTL-based lease that will delete the key when it expires. The prev_kv option returns the previous key-value pair before the update.
tags:
- KV
requestBody:
required: true
content:
application/json:
schema:
$ref: '#/components/schemas/PutRequest'
responses:
'200':
description: Key-value pair stored successfully
content:
application/json:
schema:
$ref: '#/components/schemas/PutResponse'
'400':
description: Bad request
content:
application/json:
schema:
$ref: '#/components/schemas/Error'
'401':
description: Unauthorized - authentication required
content:
application/json:
schema:
$ref: '#/components/schemas/Error'
/kv/range:
post:
operationId: kvRange
summary: Etcd Get a range of key-value pairs
description: Retrieves key-value pairs from the etcd cluster. A single key can be fetched by specifying only the key field. A range of keys can be fetched by specifying both key and range_end. Setting range_end to the key plus one byte fetches all keys with the given prefix. The limit parameter controls the maximum number of results returned, and the revision parameter enables point-in-time queries against a specific store revision.
tags:
- KV
requestBody:
required: true
content:
application/json:
schema:
$ref: '#/components/schemas/RangeRequest'
responses:
'200':
description: Key-value pairs retrieved successfully
content:
application/json:
schema:
$ref: '#/components/schemas/RangeResponse'
'400':
description: Bad request
content:
application/json:
schema:
$ref: '#/components/schemas/Error'
'401':
description: Unauthorized - authentication required
content:
application/json:
schema:
$ref: '#/components/schemas/Error'
/kv/deleterange:
post:
operationId: kvDeleteRange
summary: Etcd Delete a range of key-value pairs
description: Deletes one or more key-value pairs from the etcd cluster. A single key can be deleted by specifying only the key field. A range of keys is deleted by specifying both key and range_end. The prev_kv option returns the deleted key-value pairs before deletion. The count-only option returns only the count of deleted keys without performing the actual deletion.
tags:
- KV
requestBody:
required: true
content:
application/json:
schema:
$ref: '#/components/schemas/DeleteRangeRequest'
responses:
'200':
description: Key-value pairs deleted successfully
content:
application/json:
schema:
$ref: '#/components/schemas/DeleteRangeResponse'
'400':
description: Bad request
content:
application/json:
schema:
$ref: '#/components/schemas/Error'
'401':
description: Unauthorized - authentication required
content:
application/json:
schema:
$ref: '#/components/schemas/Error'
/kv/txn:
post:
operationId: kvTxn
summary: Etcd Execute a transaction
description: Executes an atomic compare-and-swap transaction against the etcd key-value store. A transaction consists of a set of compare conditions, a success branch of operations executed if all conditions are true, and a failure branch executed if any condition is false. Transactions are atomic and isolated, providing strong consistency guarantees within the etcd cluster.
tags:
- KV
requestBody:
required: true
content:
application/json:
schema:
$ref: '#/components/schemas/TxnRequest'
responses:
'200':
description: Transaction executed successfully
content:
application/json:
schema:
$ref: '#/components/schemas/TxnResponse'
'400':
description: Bad request
content:
application/json:
schema:
$ref: '#/components/schemas/Error'
'401':
description: Unauthorized - authentication required
content:
application/json:
schema:
$ref: '#/components/schemas/Error'
/kv/compaction:
post:
operationId: kvCompact
summary: Etcd Compact the event history
description: Compacts the etcd event history up to the given revision. All superseded keys with revisions less than the compaction revision are removed from the store, and watch operations cannot be made against compacted revisions. The physical option triggers a physical deletion of compacted keys immediately rather than deferring to the next compaction cycle.
tags:
- KV
requestBody:
required: true
content:
application/json:
schema:
$ref: '#/components/schemas/CompactionRequest'
responses:
'200':
description: Compaction completed successfully
content:
application/json:
schema:
$ref: '#/components/schemas/CompactionResponse'
'400':
description: Bad request
content:
application/json:
schema:
$ref: '#/components/schemas/Error'
components:
schemas:
TxnResponse:
type: object
description: Response from a transaction execution
properties:
header:
$ref: '#/components/schemas/ResponseHeader'
succeeded:
type: boolean
description: True if all compare conditions were true and the success branch was executed
responses:
type: array
description: Results of the operations executed in the branch that ran
items:
type: object
description: Operation response
DeleteRangeResponse:
type: object
description: Response from a delete range operation
properties:
header:
$ref: '#/components/schemas/ResponseHeader'
deleted:
type: string
description: Number of keys deleted
prev_kvs:
type: array
description: Previous key-value pairs that were deleted when prev_kv was requested
items:
$ref: '#/components/schemas/KeyValue'
PutResponse:
type: object
description: Response from a put operation
properties:
header:
$ref: '#/components/schemas/ResponseHeader'
prev_kv:
$ref: '#/components/schemas/KeyValue'
Compare:
type: object
description: A condition in a transaction that compares a key's attribute to a target value
properties:
result:
type: string
enum:
- EQUAL
- GREATER
- LESS
- NOT_EQUAL
description: The comparison operation to apply
target:
type: string
enum:
- VERSION
- CREATE
- MOD
- VALUE
- LEASE
description: The attribute of the key to compare
key:
type: string
description: The key to compare in base64-encoded format
range_end:
type: string
description: The range end for comparing a range of keys
version:
type: string
description: Version to compare against when target is VERSION
create_revision:
type: string
description: Create revision to compare against when target is CREATE
mod_revision:
type: string
description: Mod revision to compare against when target is MOD
value:
type: string
description: Value to compare against when target is VALUE in base64-encoded format
lease:
type: string
description: Lease ID to compare against when target is LEASE
CompactionRequest:
type: object
description: Request to compact the etcd event history
required:
- revision
properties:
revision:
type: string
description: Revision to compact up to (all revisions below this will be removed)
physical:
type: boolean
description: When true, triggers an immediate physical deletion of compacted data
CompactionResponse:
type: object
description: Response from a compaction operation
properties:
header:
$ref: '#/components/schemas/ResponseHeader'
RangeRequest:
type: object
description: Request to retrieve a range of key-value pairs from the etcd cluster
required:
- key
properties:
key:
type: string
description: The first key in the range in base64-encoded format
range_end:
type: string
description: The upper bound of the range in base64-encoded format (exclusive). If not specified, only the key is retrieved. If set to key plus one byte, all keys with the given prefix are retrieved.
limit:
type: string
description: Maximum number of key-value pairs to return. 0 means no limit.
revision:
type: string
description: Point-in-time revision for the query. 0 means the current revision.
sort_order:
type: string
enum:
- NONE
- ASCEND
- DESCEND
description: Sort order for the results
sort_target:
type: string
enum:
- KEY
- VERSION
- CREATE
- MOD
- VALUE
description: Field to sort results by
serializable:
type: boolean
description: When true, uses serializable (stale) reads for higher throughput. When false (default), uses linearizable reads for strong consistency.
keys_only:
type: boolean
description: When true, returns only keys without values
count_only:
type: boolean
description: When true, returns only the count without the key-value pairs
min_mod_revision:
type: string
description: Filter for keys with mod_revision greater than or equal to this value
max_mod_revision:
type: string
description: Filter for keys with mod_revision less than or equal to this value
min_create_revision:
type: string
description: Filter for keys with create_revision greater than or equal to this value
max_create_revision:
type: string
description: Filter for keys with create_revision less than or equal to this value
ResponseHeader:
type: object
description: Header included in every etcd response containing cluster metadata and the revision at which the response was generated.
properties:
cluster_id:
type: string
description: ID of the etcd cluster
member_id:
type: string
description: ID of the member that generated the response
revision:
type: string
description: Key-value store revision at the time of the response
raft_term:
type: string
description: Raft term at the time of the response
Error:
type: object
description: Error response from the etcd API
properties:
error:
type: string
description: Human-readable error message
code:
type: integer
description: gRPC status code for the error
message:
type: string
description: Detailed error message
RangeResponse:
type: object
description: Response from a range query
properties:
header:
$ref: '#/components/schemas/ResponseHeader'
kvs:
type: array
description: List of key-value pairs matching the range query
items:
$ref: '#/components/schemas/KeyValue'
more:
type: boolean
description: True if more key-value pairs exist beyond the limit specified in the request
count:
type: string
description: Total number of keys in the range matching the request
RequestOp:
type: object
description: An operation within a transaction's success or failure branch
properties:
request_range:
$ref: '#/components/schemas/RangeRequest'
request_put:
$ref: '#/components/schemas/PutRequest'
request_delete_range:
$ref: '#/components/schemas/DeleteRangeRequest'
request_txn:
$ref: '#/components/schemas/TxnRequest'
DeleteRangeRequest:
type: object
description: Request to delete a range of key-value pairs from the etcd cluster
required:
- key
properties:
key:
type: string
description: The first key in the range to delete in base64-encoded format
range_end:
type: string
description: The upper bound of the range to delete in base64-encoded format (exclusive)
prev_kv:
type: boolean
description: When true, returns the deleted key-value pairs before deletion
PutRequest:
type: object
description: Request to store a key-value pair in the etcd cluster
required:
- key
- value
properties:
key:
type: string
description: The key to store in base64-encoded format
value:
type: string
description: The value to store in base64-encoded format
lease:
type: string
description: Lease ID to associate with the key for TTL-based expiration
prev_kv:
type: boolean
description: When true, returns the previous key-value pair before the update
ignore_value:
type: boolean
description: When true, updates the key without changing the value (only updates lease)
ignore_lease:
type: boolean
description: When true, updates the key without changing the lease
KeyValue:
type: object
description: A key-value pair stored in the etcd cluster. Keys and values are base64-encoded byte strings. The version field is the version of the key, the create_revision is the cluster revision when the key was created, and the mod_revision is the cluster revision when the key was last modified.
properties:
key:
type: string
description: The key in base64-encoded format
create_revision:
type: string
description: Revision of the etcd cluster when the key was created
mod_revision:
type: string
description: Revision of the etcd cluster when the key was last modified
version:
type: string
description: Version of the key, monotonically increasing for each put on the key
value:
type: string
description: The value in base64-encoded format
lease:
type: string
description: Lease ID attached to the key, or 0 if no lease is attached
TxnRequest:
type: object
description: An atomic compare-and-swap transaction consisting of conditions, success operations, and failure operations
properties:
compare:
type: array
description: Conditions that must all be true for the success branch to execute
items:
$ref: '#/components/schemas/Compare'
success:
type: array
description: Operations to execute when all compare conditions are true
items:
$ref: '#/components/schemas/RequestOp'
failure:
type: array
description: Operations to execute when any compare condition is false
items:
$ref: '#/components/schemas/RequestOp'
securitySchemes:
bearerAuth:
type: http
scheme: bearer
bearerFormat: JWT
description: JWT token obtained from the /auth/authenticate endpoint. Include in the Authorization header as "Bearer {token}".
externalDocs:
description: etcd gRPC Gateway Documentation
url: https://etcd.io/docs/v3.5/dev-guide/api_grpc_gateway/