> ## Documentation Index
> Fetch the complete documentation index at: https://gcore.com/docs/llms.txt
> Use this file to discover all available pages before exploring further.

# Add or generate SSH key

> To generate a key, omit the `public_key` parameter from the request body



## OpenAPI

````yaml /api-reference/services_documented/cloud_api.yaml post /cloud/v1/ssh_keys/{project_id}
openapi: 3.1.0
info:
  title: Gcore OpenAPI – Cloud API
  description: >-
    This OpenAPI is an aggregated OpenAPI specification that unifies all Gcore
    products into a single file. It covers Cloud, CDN, DNS, WAAP, DDoS
    Protection, Object Storage, Streaming, and FastEdge services.
  version: '2026-05-15T06:37:28.230198+00:00'
servers:
  - url: https://api.gcore.com
security:
  - APIKey: []
tags:
  - name: Bare Metal
    x-displayName: Bare Metal
  - name: Container as a Service
    x-displayName: Container as a Service
  - name: Cost Reports
    x-displayName: Cost Reports
  - name: DDoS Protection
    x-displayName: DDoS Protection
  - name: Everywhere Inference
    x-displayName: Everywhere Inference
  - name: Everywhere Inference Apps
    x-displayName: Everywhere Inference Apps
  - name: File Shares
    x-displayName: File Shares
  - name: Floating IPs
    x-displayName: Floating IPs
  - name: Function as a Service
    x-displayName: Function as a Service
  - name: GPU Bare Metal
    x-displayName: GPU Bare Metal
  - name: GPU Virtual
    x-displayName: GPU Virtual
  - name: IP Ranges
    x-displayName: IP Ranges
  - name: Images
    x-displayName: Images
  - name: Instances
    x-displayName: Instances
  - name: Load Balancers
    x-displayName: Load Balancers
  - name: Logging
    x-displayName: Logging
  - name: Managed Kubernetes
    x-displayName: Managed Kubernetes
  - name: Managed PostgreSQL
    x-displayName: Managed PostgreSQL
  - name: Networks
    x-displayName: Networks
  - name: Placement Groups
    x-displayName: Placement Groups
  - name: Projects
    x-displayName: Projects
  - name: Quotas
    x-displayName: Quotas
  - name: Regions
    x-displayName: Regions
  - name: Registry
    x-displayName: Registry
  - name: Reservations
    x-displayName: Reservations
  - name: Reserved IPs
    x-displayName: Reserved IPs
  - name: Routers
    x-displayName: Routers
  - name: SSH Keys
    x-displayName: SSH Keys
  - name: Secrets
    x-displayName: Secrets
  - name: Security Groups
    x-displayName: Security Groups
  - name: Snapshot Schedules
    x-displayName: Snapshot Schedules
  - name: Snapshots
    x-displayName: Snapshots
  - name: Tasks
    x-displayName: Tasks
  - name: User Actions
    x-displayName: User Actions
  - name: User Role Assignments
    x-displayName: User Role Assignments
  - name: Volumes
    x-displayName: Volumes
paths:
  /cloud/v1/ssh_keys/{project_id}:
    post:
      tags:
        - SSH Keys
      summary: Add or generate SSH key
      description: To generate a key, omit the `public_key` parameter from the request body
      operationId: SSHKeyCollectionViewSet.post
      parameters:
        - in: path
          name: project_id
          required: true
          description: Project ID
          schema:
            description: Project ID
            example: 1
            examples:
              - 1
            title: Project Id
            type: integer
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/CreateSSHKeySerializer'
      responses:
        '201':
          description: Created
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/CreatedSSHKeySerializer'
      x-codeSamples:
        - lang: Python
          source: |-
            import os
            from gcore import Gcore

            client = Gcore(
                api_key=os.environ.get("GCORE_API_KEY"),  # This is the default and can be omitted
            )
            ssh_key_created = client.cloud.ssh_keys.create(
                project_id=1,
                name="my-ssh-key",
            )
            print(ssh_key_created.id)
        - lang: Go
          source: "package main\n\nimport (\n\t\"context\"\n\t\"fmt\"\n\n\t\"github.com/G-Core/gcore-go\"\n\t\"github.com/G-Core/gcore-go/cloud\"\n\t\"github.com/G-Core/gcore-go/option\"\n)\n\nfunc main() {\n\tclient := gcore.NewClient(\n\t\toption.WithAPIKey(\"My API Key\"),\n\t)\n\tsshKeyCreated, err := client.Cloud.SSHKeys.New(context.TODO(), cloud.SSHKeyNewParams{\n\t\tProjectID: gcore.Int(1),\n\t\tName:      \"my-ssh-key\",\n\t})\n\tif err != nil {\n\t\tpanic(err.Error())\n\t}\n\tfmt.Printf(\"%+v\\n\", sshKeyCreated.ID)\n}\n"
components:
  schemas:
    CreateSSHKeySerializer:
      properties:
        name:
          description: SSH key name
          example: my-ssh-key
          examples:
            - my-ssh-key
          maxLength: 255
          minLength: 1
          pattern: ^[a-zA-Z0-9][a-zA-Z 0-9._\-]{1,61}[a-zA-Z0-9._]$
          title: Name
          type: string
        public_key:
          description: >-
            The public part of an SSH key is the shareable portion of an SSH key
            pair. It can be safely sent to servers or services to grant access.
            It does not contain sensitive information.

            - If you’re uploading your own key, provide the public part here
            (usually found in a file like `id_ed25519.pub`).

            - If you want the platform to generate an Ed25519 key pair for you,
            leave this field empty — the system will return the private key in
            the response **once only**.
          example: >-
            ssh-ed25519
            AAAAC3NzaC1lZDI1NTE5AAAAIIjxL6g1II8NsO8odvBwGKvq2Dx/h/xrvsV9b9LVIYKm
            my-username@my-hostname
          examples:
            - >-
              ssh-ed25519
              AAAAC3NzaC1lZDI1NTE5AAAAIIjxL6g1II8NsO8odvBwGKvq2Dx/h/xrvsV9b9LVIYKm
              my-username@my-hostname
          title: Public Key
          type: string
          x-stainless-terraform-configurability: required
        shared_in_project:
          default: true
          description: SSH key is shared with all users in the project
          example: true
          examples:
            - true
            - false
          title: Shared In Project
          type: boolean
      required:
        - name
      title: Create SSH Key schema
      type: object
    CreatedSSHKeySerializer:
      properties:
        created_at:
          description: SSH key creation time
          example: '2025-06-16T17:05:50Z'
          examples:
            - '2025-06-16T17:05:50Z'
          format: date-time
          title: Created At
          type: string
        fingerprint:
          description: Fingerprint
          example: 86:75:ce:e7:e9:1e:f0:79:ec:6f:d8:92:9b:43:fc:4d
          examples:
            - 86:75:ce:e7:e9:1e:f0:79:ec:6f:d8:92:9b:43:fc:4d
          title: Fingerprint
          type: string
        id:
          description: SSH key ID
          example: 36a7a97a-0672-4911-8f2b-92cd4e5b0d91
          examples:
            - 36a7a97a-0672-4911-8f2b-92cd4e5b0d91
          format: uuid4
          title: Id
          type: string
        name:
          description: SSH key name
          example: my-ssh-key
          examples:
            - my-ssh-key
          maxLength: 255
          minLength: 1
          pattern: ^[a-zA-Z0-9][a-zA-Z 0-9._\-]{1,61}[a-zA-Z0-9._]$
          title: Name
          type: string
        private_key:
          anyOf:
            - type: string
            - type: 'null'
          description: >-
            The private part of an SSH key is the confidential portion of the
            key pair. It should never be shared or exposed. This key is used to
            prove your identity when connecting to a server. 


            If you omit the `public_key`, the platform will generate a key for
            you. The `private_key` will be returned **once** in the API
            response. Be sure to save it securely, as it cannot be retrieved
            again later. 


            Best practice: Save the private key to a secure location on your
            machine (e.g., `~/.ssh/id_ed25519`) and set the file permissions to
            be readable only by you.
          examples:
            - <private_key>
          title: Private Key
          x-stainless-terraform-configurability: computed
        project_id:
          description: Project ID
          example: 1
          examples:
            - 1
          title: Project Id
          type: integer
        public_key:
          description: >-
            The public part of an SSH key is the shareable portion of an SSH key
            pair. It can be safely sent to servers or services to grant access.
            It does not contain sensitive information.
          example: >-
            ssh-ed25519
            AAAAC3NzaC1lZDI1NTE5AAAAIIjxL6g1II8NsO8odvBwGKvq2Dx/h/xrvsV9b9LVIYKm
            my-username@my-hostname
          examples:
            - >-
              ssh-ed25519
              AAAAC3NzaC1lZDI1NTE5AAAAIIjxL6g1II8NsO8odvBwGKvq2Dx/h/xrvsV9b9LVIYKm
              my-username@my-hostname
          title: Public Key
          type: string
        shared_in_project:
          description: SSH key will be visible to all users in the project
          example: true
          examples:
            - true
          title: Shared In Project
          type: boolean
        state:
          $ref: '#/components/schemas/KeypairState'
          description: SSH key state
          examples:
            - ACTIVE
            - DELETING
      required:
        - id
        - public_key
        - name
        - fingerprint
        - state
        - project_id
        - shared_in_project
        - created_at
        - private_key
      title: Created SSH key response object
      type: object
    KeypairState:
      enum:
        - ACTIVE
        - DELETING
      title: KeypairState
      type: string
  securitySchemes:
    APIKey:
      description: >-
        API key for authentication. Make sure to include the word `apikey`,
        followed by a single space and then your token.

        Example: `apikey 1234$abcdef`
      type: apiKey
      in: header
      name: Authorization

````