---
title: "Activate a client-generated access key"
method: POST
path: "/v1/keys"
tags: ["keys"]
---

# Activate a client-generated access key

`POST /v1/keys`

## Request

- Base URL: `https://api.typenode.ai`
- URL: `https://api.typenode.ai/v1/keys`
- Auth: HTTP bearer

## Headers

- `Idempotency-Key` string, uuid, required

## Request body

- CreateKey
  - `capabilities` string[], required
  - `environment_ids` string[]
  - `expires_at` string, date-time, nullable
  - `name` string, required
  - `resources` object[]
    - `resource_id` string, uuid, required
    - `resource_type` string, required
  - `secret_digest` string, required
  - `token_prefix` string, required

## Response `202`

The admitted key-activation operation. The client retains the only raw key material.

- Operation
  - `actor` object, required
    - `actor_kind` 'member' | 'service_account', required
  - `completed_at` string, date-time, nullable, required
  - `created_at` string, date-time, required
  - `deployment` object
    - `committed_at` string, date-time, nullable, required
    - `confirming_started_at` string, date-time, nullable, required
    - `control_outcome` 'applied' | 'ignored_older' | 'already_current' | 'tombstone_won', nullable, required
    - `deployment_phase` 'preparing' | 'activating' | 'confirming_deployment' | 'needs_attention' | 'syncing_status' | 'deployed' | 'unchanged' | 'failed', required
    - `environment_id` string, uuid, required
    - `environment_name` string, required
    - `expected_generation` integer, required
    - `expected_sealed_release_id` string, nullable, required
    - `failure_code` 'workflow_invalid' | 'compilation_failed' | 'runtime_contract_unsupported' | 'configuration_reference_invalid' | 'stale_assignment' | 'stale_predecessor' | 'integrity_failed' | 'projection_failed' | 'destination_rejected' | 'unsupported_drift' | 'invalid_source' | 'workspace_departed' | 'workflow_closed', nullable, required
    - `generation` integer, nullable, required
    - `outcome` 'deployed' | 'unchanged' | 'failed', nullable, required
    - `receipt_id` string, nullable, required
    - `retryable` boolean, nullable, required
    - `safe_message` string, nullable, required
    - `sealed_release_id` string, nullable, required
  - `kind` 'trigger.control' | 'trigger.delete' | 'workflow.delete' | 'workflow.deploy' | 'workflow.unpublish' | 'credential.activate' | 'credential.revoke', required
  - `milestones` object[], required
    - `at` string, date-time, required
    - `name` string, required
  - `operation_id` string, uuid, required
  - `outcome_code` 'succeeded' | 'hold_expired' | 'cancelled_by_administrator' | 'superseded_by_workflow_delete' | 'superseded_by_credential_revoke' | 'proof_failed' | 'operation_failed', nullable, required
  - `proof_expires_at` string, date-time, nullable, required
  - `retry_after` string, date-time, nullable, required
  - `state` 'held' | 'queued' | 'in_progress' | 'succeeded' | 'failed' | 'cancelled', required
  - `status_url` string, required
  - `target` union, required
    - object
      - `kind` 'workflow', required
      - `workflow_id` string, uuid, required
    - object
      - `kind` 'trigger', required
      - `trigger_id` string, uuid, required
      - `workflow_id` string, uuid, required
    - object
      - `credential_id` string, uuid, required
      - `kind` 'credential', required
  - `terminal` boolean, required
  - `unpublish` UnpublishOperationDetails
    - `completion` object, nullable, required
      - `admission_closed` true, required
      - `at` string, date-time, required
      - `installed_release_removed` true, required
      - `projections_removed` true, required
    - `environment_id` string, uuid, required
    - `environment_name` string, required
    - `expected_generation` integer, required
    - `expected_sealed_release_id` string, required
    - `failure_code` 'busy' | 'no_active_release' | 'stale_predecessor' | 'lifecycle_pending', nullable, required
    - `remediation` 'finish_or_cancel_runs_and_submit_new_request' | 'refresh_published_release_and_submit_new_request' | 'wait_for_pending_operation_and_retry', nullable, required
    - `request_id` string, uuid, required: Client request identity from Idempotency-Key; operation_id identifies the server Operation.
    - `state` 'queued' | 'cleanup_pending' | 'completed' | 'refused', required
  - `updated_at` string, date-time, required

## Other responses

- `400`: Invalid credential restrictions or missing/malformed Idempotency-Key.
- `401`: Authentication required.
- `403`: credential.create and authority to confer every restriction are required.
- `409`: A nonterminal operation protects this target. `details.operation_url` is present only when the caller may read that exact receipt.
- `503`: Credential activation admission or its status store is temporarily unavailable.
- `default`: An error occurred (RFC 9457 problem+json).

---

[API](https://skmtc.dev/typenode/apis/typenode-management-api.md) · [All operations](https://skmtc.dev/typenode/apis/typenode-management-api/llms.txt) · [OpenAPI document](https://skmtc.dev/typenode/apis/typenode-management-api/revisions/9b943024aa98?raw)
