---
title: "Get kubeconfig"
method: GET
path: "/api/v1/k8s/clusters/{cluster_id}/kubeconfig"
tags: ["Kubernetes"]
---

# Get kubeconfig

`GET /api/v1/k8s/clusters/{cluster_id}/kubeconfig`

Issue a kubeconfig for the cluster. Every kubeconfig expires — the default lifetime is **7 days**; use `expires_in` to choose another (10 minutes to 30 days). Grants full cluster-admin access while valid, so store it like a password, and [rotate access](#tag/Kubernetes/operation/rotateK8sKubeconfigAccess) to invalidate every issued kubeconfig at once.

For anything long-running (a workstation, CI), prefer the CLI: `raff kubernetes kubeconfig <cluster-id>` writes a kubeconfig that fetches a fresh token for every `kubectl` command, so it never expires and stores no credential on disk.

## Path parameters

- `cluster_id` string, required

## Query parameters

- `expires_in` integer

## Headers

- `X-Project-ID` string, uuid, required

## Response `200`

Kubeconfig for kubectl

- object
  - `success` boolean
  - `kubeconfig` string — kubeconfig YAML
  - `api_endpoint` string

## Other responses

- `404` — Resource not found

## Changes

- **2026-08-25** `b50bf0d2f777` — 1 info
  - added the new optional `query` request parameter `expires_in`
- **2026-08-23** `72c803a128b2` — 1 info
  - endpoint added

[Change history](https://skmtc.dev/rafftechnologies/apis/raff-api/changes/api/v1/k8s/clusters/:cluster_id/kubeconfig/get.md)

---

[API](https://skmtc.dev/rafftechnologies/apis/raff-api.md) · [All operations](https://skmtc.dev/rafftechnologies/apis/raff-api/llms.txt) · [OpenAPI document](https://skmtc-service-production.skmtc.workers.dev/v1/apis/rafftechnologies/raff-api/revisions/2f4df56be77c/schema)
