> ## Documentation Index
> Fetch the complete documentation index at: https://gcore-doc-1256a.mintlify.site/llms.txt
> Use this file to discover all available pages before exploring further.

# Create and manage projects

export const MethodSection = ({children}) => children ?? null;

export const MethodSwitch = ({children}) => {
  const tabs = React.Children.toArray(children).filter(c => c && c.props && c.props.id);
  const firstId = tabs.length > 0 ? tabs[0].props.id : "";
  const [active, setActive] = React.useState(firstId);
  React.useEffect(() => {
    try {
      const saved = localStorage.getItem("gcore_docs_method");
      if (saved && tabs.find(t => t.props.id === saved)) {
        setActive(saved);
      }
    } catch (_) {}
  }, []);
  React.useEffect(() => {
    try {
      document.querySelectorAll("h2[id], h3[id]").forEach(heading => {
        const visible = heading.offsetParent !== null;
        document.querySelectorAll(`a[href="#${heading.id}"]`).forEach(link => {
          if (link.closest("h1,h2,h3,h4,h5,h6")) return;
          const li = link.closest("li");
          if (li) li.style.display = visible ? "" : "none";
        });
      });
    } catch (_) {}
  }, [active]);
  const handleClick = id => {
    setActive(id);
    try {
      localStorage.setItem("gcore_docs_method", id);
    } catch (_) {}
  };
  return <div>
      <div className="not-prose flex gap-0 border-b border-zinc-200 dark:border-zinc-800 mb-8 mt-2" role="tablist">
        {tabs.map(tab => {
    const isActive = active === tab.props.id;
    return <button key={tab.props.id} role="tab" aria-selected={isActive} onClick={() => handleClick(tab.props.id)} className={["px-4 py-2 text-sm font-medium border-b-2 -mb-px transition-colors cursor-pointer", isActive ? "border-primary text-primary" : "border-transparent text-zinc-500 hover:text-zinc-800 dark:hover:text-zinc-200"].join(" ")}>
              {tab.props.label}
            </button>;
  })}
      </div>

      {tabs.map(tab => <div key={tab.props.id} style={{
    display: active === tab.props.id ? "" : "none"
  }}>
          {tab.props.children}
        </div>)}
    </div>;
};

<MethodSwitch>
  <MethodSection id="portal" label="Customer Portal">
    Projects are goal-specific folders where you can create Edge Cloud products including Virtual Machines, volumes, and networks. Each project acts as a separate environment; its resources are isolated from the resources in any other project. You can control access to these resources by specifying user permissions on a per-project basis.

    You can view projects in the Gcore Customer Portal via either the **Project** dropdown or the **Cloud Management** page.

    <Tabs>
      <Tab title="From the Project dropdown">
        1\. Navigate to the Cloud page and select the **Project** dropdown.

        2\. Select **View all projects**.

        <Frame>
          <img src="https://mintcdn.com/gcore-doc-1256a/AL6TkMd7NPay-uo-/images/docs/cloud/getting-started/projects/create-a-project/open-projects-from-dropdown.png?fit=max&auto=format&n=AL6TkMd7NPay-uo-&q=85&s=8110ab3c5d036e7cd3dd54660a9062c6" alt="A dropdown displaying a list of projects" width="5704" height="1304" data-path="images/docs/cloud/getting-started/projects/create-a-project/open-projects-from-dropdown.png" />
        </Frame>

        3\. The **Projects** page will open. Here you can view, search for, and manage your projects.

        To open the resource management panel for a particular project, click **Open project**.

        <Frame>
          <img src="https://mintcdn.com/gcore-doc-1256a/ZnNFjl9KkjcJVP9a/images/docs/cloud/getting-started/projects/create-a-project/projects-page-open-project.png?fit=max&auto=format&n=ZnNFjl9KkjcJVP9a&q=85&s=91b91df10a01d4918139393c149539bd" alt="A list of projects with the highlighted Open project button" width="3480" height="2252" data-path="images/docs/cloud/getting-started/projects/create-a-project/projects-page-open-project.png" />
        </Frame>
      </Tab>

      <Tab title="From the Cloud Management page">
        1\. Navigate to **Cloud** > **Cloud Management**.

        2\. Click **Projects**.

        3\. The **Projects** page will open. Here you can view, search for, and manage your projects.

        To open the resource management panel for a particular project, click the project name.

        <Frame>
          <img src="https://mintcdn.com/gcore-doc-1256a/AL6TkMd7NPay-uo-/images/docs/cloud/getting-started/projects/create-a-project/open-projects.png?fit=max&auto=format&n=AL6TkMd7NPay-uo-&q=85&s=d905c1e79d2754cc7afb243802029bfd" alt="A list of projects with the highlighted project name" width="4988" height="2324" data-path="images/docs/cloud/getting-started/projects/create-a-project/open-projects.png" />
        </Frame>
      </Tab>
    </Tabs>

    ## View projects in different layouts

    You can change the layout on the **Projects** page to display the information in two ways:

    * **List view**. Presents all projects as a concise list with only the project name and description displayed.

    <Frame>
      <img src="https://mintcdn.com/gcore-doc-1256a/ZnNFjl9KkjcJVP9a/images/docs/cloud/getting-started/projects/create-a-project/projects-page-list.png?fit=max&auto=format&n=ZnNFjl9KkjcJVP9a&q=85&s=c8e1cdfd9535eaf06f6f1dd5d1658144" alt="" width="3388" height="1872" data-path="images/docs/cloud/getting-started/projects/create-a-project/projects-page-list.png" />
    </Frame>

    * **Grid view**. Presents all projects as tiles with extra information displayed: project name, ID, and a list of Edge Cloud resources that you can create by clicking the plus button.

    <Frame>
      <img src="https://mintcdn.com/gcore-doc-1256a/AL6TkMd7NPay-uo-/images/docs/cloud/getting-started/projects/create-a-project/projects-page-grid.png?fit=max&auto=format&n=AL6TkMd7NPay-uo-&q=85&s=52511c03302f93cfd506e3e7974458e1" alt="" width="3468" height="2244" data-path="images/docs/cloud/getting-started/projects/create-a-project/projects-page-grid.png" />
    </Frame>

    You can switch between two layouts by clicking the layout icon to the right of the search bar.

    <Frame>
      <img src="https://mintcdn.com/gcore-doc-1256a/AL6TkMd7NPay-uo-/images/docs/cloud/getting-started/projects/create-a-project/layout-icon.png?fit=max&auto=format&n=AL6TkMd7NPay-uo-&q=85&s=44310230320dde82bd16b41e4dac472e" alt="A search bar with adjacent buttons to change page layout" width="3388" height="456" data-path="images/docs/cloud/getting-started/projects/create-a-project/layout-icon.png" />
    </Frame>

    ## Create a project

    When you first navigate to the Cloud page, you'll have only one **Default** project. This project is created automatically for every account and can't be deleted.

    You can create more projects to organize your cloud resources. The number of projects doesn't affect your expenses, you only pay for resources used.

    To create a project:

    1\. Navigate to the **Projects** page.

    2\. In the upper-right corner of the screen, select **Create project**.

    <Frame>
      <img src="https://mintcdn.com/gcore-doc-1256a/AL6TkMd7NPay-uo-/images/docs/cloud/getting-started/projects/create-a-project/create-project.png?fit=max&auto=format&n=AL6TkMd7NPay-uo-&q=85&s=aeeeacf764384528f41061e41fd4e857" alt="The Projects page with the Create project button highlighted" width="3388" height="1872" data-path="images/docs/cloud/getting-started/projects/create-a-project/create-project.png" />
    </Frame>

    3\. Enter your project name. Optionally, add a description.

    <Info>
      **Info**

      A project name can contain between 3 and 63 characters, including Latin letters, numbers, hyphens, underscores, spaces, and dots. The name can't end with a hyphen.
    </Info>

    4\. Click **Create project**.

    <Frame>
      <img src="https://mintcdn.com/gcore-doc-1256a/AL6TkMd7NPay-uo-/images/docs/cloud/getting-started/projects/create-a-project/create-project-annotated.png?fit=max&auto=format&n=AL6TkMd7NPay-uo-&q=85&s=de2822a2dad64914c2a717d19c578ec0" alt="A dialog with configuration of project name and description" width="3132" height="1356" data-path="images/docs/cloud/getting-started/projects/create-a-project/create-project-annotated.png" />
    </Frame>

    The new project will appear in your project list.

    ## Manage projects

    You can edit the project name and description, delete a project if you have the [appropriate permissions](/cloud/getting-started/projects/users/user-roles-and-rights), and configure access to the project.

    If you have a large number of projects, you can also use search to find the one that you need.

    ### Edit project name or description

    1\. Navigate to the **Projects** page.

    2\. Click the three-dot icon next to the project you want to edit.

    3\. Select **Settings**.

    <Frame>
      <img src="https://mintcdn.com/gcore-doc-1256a/AL6TkMd7NPay-uo-/images/docs/cloud/getting-started/projects/create-a-project/annotated-project-settings.png?fit=max&auto=format&n=AL6TkMd7NPay-uo-&q=85&s=e8fc57d483939455e1fd863949e7e9b5" alt="Project settings menu with Open and Settings options" width="3700" height="1396" data-path="images/docs/cloud/getting-started/projects/create-a-project/annotated-project-settings.png" />
    </Frame>

    4\. Update project information and then click **Save changes** to apply the updates.

    <Frame>
      <img src="https://mintcdn.com/gcore-doc-1256a/AL6TkMd7NPay-uo-/images/docs/cloud/getting-started/projects/create-a-project/project-settings-save-changes.png?fit=max&auto=format&n=AL6TkMd7NPay-uo-&q=85&s=3404456112504387dda2a3f8e72f9e30" alt="Project settings menu with options to change project name and description" width="5392" height="1684" data-path="images/docs/cloud/getting-started/projects/create-a-project/project-settings-save-changes.png" />
    </Frame>

    ### Manage project access

    To view and modify user access to the project, you need [Client Administrator](/cloud/getting-started/projects/users/user-roles-and-rights#client-administrator) or [Project Administrator](/cloud/getting-started/projects/users/user-roles-and-rights#project-administrator) access.

    To change access to the project:

    1\. Open the **Projects** page and find the project you want to update.

    2\. Click the three-dot icon next to the project you want to manage.

    3\. Select **Settings**.

    <Frame>
      <img src="https://mintcdn.com/gcore-doc-1256a/AL6TkMd7NPay-uo-/images/docs/cloud/getting-started/projects/create-a-project/annotated-project-settings.png?fit=max&auto=format&n=AL6TkMd7NPay-uo-&q=85&s=e8fc57d483939455e1fd863949e7e9b5" alt="Project settings menu with Open and Settings options" width="3700" height="1396" data-path="images/docs/cloud/getting-started/projects/create-a-project/annotated-project-settings.png" />
    </Frame>

    4\. Open the **Access** tab. You'll see the list of users associated with the project and their access levels. To manage user access, follow the instructions in our guide on [how to manage user access to your project](/cloud/getting-started/projects/users/manage-user-access-to-your-project).

    To configure user access within your account, click "Manage users via profile".

    <Frame>
      <img src="https://mintcdn.com/gcore-doc-1256a/AL6TkMd7NPay-uo-/images/docs/cloud/getting-started/projects/create-a-project/access-project-settings.png?fit=max&auto=format&n=AL6TkMd7NPay-uo-&q=85&s=0d873c71ae8f6be2014d2bf597009be6" alt="Project access tab displaying one user added to the project" width="6072" height="1368" data-path="images/docs/cloud/getting-started/projects/create-a-project/access-project-settings.png" />
    </Frame>

    ### Delete a project

    To delete a project, you need [Client Administrator](/cloud/getting-started/projects/users/user-roles-and-rights#client-administrator) or [Project Administrator](/cloud/getting-started/projects/users/user-roles-and-rights#project-administrator) access.

    <Warning>
      **Warning**

      When you delete a project, all resources inside that project will be permanently deleted and can't be restored. Default projects can't be deleted.
    </Warning>

    To delete a project:

    1\. Navigate to the **Projects** page.

    2\. Click the three-dot icon next to the project you want to delete.

    <Frame>
      <img src="https://mintcdn.com/gcore-doc-1256a/AL6TkMd7NPay-uo-/images/docs/cloud/getting-started/projects/create-a-project/project-settings-delete.png?fit=max&auto=format&n=AL6TkMd7NPay-uo-&q=85&s=3376e9377367c00f9bff7a42a5e7544f" alt="Project settings menu with Open, Settings, and Delete options" width="3672" height="1240" data-path="images/docs/cloud/getting-started/projects/create-a-project/project-settings-delete.png" />
    </Frame>

    3\. Select **Delete**.

    4\. Confirm your action by typing "Delete" in the text field.

    5\. Click **Yes, delete**.

    <Frame>
      <img src="https://mintcdn.com/gcore-doc-1256a/AL6TkMd7NPay-uo-/images/docs/cloud/getting-started/projects/create-a-project/project-conifirm-deletetion.png?fit=max&auto=format&n=AL6TkMd7NPay-uo-&q=85&s=1b4c82744a1d5e1af42c0891eca9f319" alt="Delete project dialog" width="2572" height="904" data-path="images/docs/cloud/getting-started/projects/create-a-project/project-conifirm-deletetion.png" />
    </Frame>

    6\. Your project has been successfully deleted.
  </MethodSection>

  <MethodSection id="api" label="REST API">
    Projects are global, account-level resources — no region is required to create or manage them. Every account starts with a non-deletable **Default** project; additional projects can be created to separate teams, billing units, or environments.

    <Info>
      A permanent [API token](/account-settings/api-tokens) is required.
    </Info>

    Set the following environment variable before running the examples:

    ```bash theme={null}
    export GCORE_API_KEY="{YOUR_API_KEY}"
    ```

    ## Create a project

    The [create project](https://api.gcore.com/docs/cloud#tag/Projects/operation/ProjectListViewSet.post) endpoint creates a new project under the account associated with the API token. The response contains the project ID, which is needed for subsequent operations.

    | Parameter     | Required | Description                                                                                                                    |
    | ------------- | -------- | ------------------------------------------------------------------------------------------------------------------------------ |
    | `name`        | Yes      | Unique project name; 3–63 characters, Latin letters, numbers, hyphens, underscores, spaces, and dots; cannot end with a hyphen |
    | `description` | No       | Optional description                                                                                                           |

    <Tabs>
      <Tab title="Python SDK">
        ```python theme={null}
        import os
        from gcore import Gcore

        client = Gcore(api_key=os.environ["GCORE_API_KEY"])

        project = client.cloud.projects.create(
            name="my-project",
            description="Production environment",
        )
        print(f"Project ID:  {project.id}")    # save as PROJECT_ID
        print(f"Name:        {project.name}")
        print(f"State:       {project.state}")
        print(f"Is default:  {project.is_default}")
        ```
      </Tab>

      <Tab title="Go SDK">
        ```go theme={null}
        import (
            "context"
            "fmt"
            "log"
            "os"

            gcore "github.com/G-Core/gcore-go"
            "github.com/G-Core/gcore-go/cloud"
            "github.com/G-Core/gcore-go/option"
            "github.com/G-Core/gcore-go/packages/param"
        )

        client := gcore.NewClient(option.WithAPIKey(os.Getenv("GCORE_API_KEY")))
        ctx := context.Background()

        project, err := client.Cloud.Projects.New(ctx, cloud.ProjectNewParams{
            Name:        "my-project",
            Description: param.NewOpt("Production environment"),
        })
        if err != nil {
            log.Fatal(err)
        }
        fmt.Printf("Project ID: %d\n", project.ID)    // save as PROJECT_ID
        fmt.Printf("Name:       %s\n", project.Name)
        fmt.Printf("State:      %s\n", project.State)
        ```
      </Tab>

      <Tab title="curl">
        ```bash theme={null}
        curl -X POST "https://api.gcore.com/cloud/v1/projects" \
          -H "Authorization: APIKey $GCORE_API_KEY" \
          -H "Content-Type: application/json" \
          -d '{
            "name": "my-project",
            "description": "Production environment"
          }'
        ```

        Response:

        ```json theme={null}
        {
          "id": 1202779,
          "name": "my-project",
          "description": "Production environment",
          "state": "ACTIVE",
          "is_default": false,
          "client_id": 1000503,
          "created_at": "2026-05-31T06:43:54.717473",
          "deleted_at": null,
          "task_id": null
        }
        ```
      </Tab>
    </Tabs>

    ## List projects

    The [list projects](https://api.gcore.com/docs/cloud#tag/Projects/operation/ProjectListViewSet.get) endpoint returns all projects associated with the account. Each project includes its numeric ID, name, and state.

    <Tabs>
      <Tab title="Python SDK">
        ```python theme={null}
        projects = client.cloud.projects.list()
        print(f"Count: {projects.count}")
        for p in projects.results:
            print(f"  id={p.id}  name={p.name}  state={p.state}  is_default={p.is_default}")
        ```
      </Tab>

      <Tab title="Go SDK">
        ```go theme={null}
        page, err := client.Cloud.Projects.List(ctx, cloud.ProjectListParams{})
        if err != nil {
            log.Fatal(err)
        }
        fmt.Printf("Count: %d\n", page.Count)
        for _, p := range page.Results {
            fmt.Printf("  id=%d  name=%s  state=%s\n", p.ID, p.Name, p.State)
        }
        ```
      </Tab>

      <Tab title="curl">
        ```bash theme={null}
        curl "https://api.gcore.com/cloud/v1/projects" \
          -H "Authorization: APIKey $GCORE_API_KEY"
        ```

        Response:

        ```json theme={null}
        {
          "count": 2,
          "results": [
            {
              "id": 1186668,
              "name": "Default",
              "state": "ACTIVE",
              "is_default": true,
              "client_id": 1000503,
              "created_at": "2026-04-17T12:43:36.848841",
              "deleted_at": null
            },
            {
              "id": 1202779,
              "name": "my-project",
              "state": "ACTIVE",
              "is_default": false,
              "client_id": 1000503,
              "created_at": "2026-05-31T06:43:54.717473",
              "deleted_at": null
            }
          ]
        }
        ```
      </Tab>
    </Tabs>

    ## Get project details

    The [get project](https://api.gcore.com/docs/cloud#tag/Projects/operation/ProjectViewSet.get) endpoint returns the full record for a single project, including its creation time and whether it is the default project.

    <Tabs>
      <Tab title="Python SDK">
        ```python theme={null}
        PROJECT_ID = 1202779

        project = client.cloud.projects.get(project_id=PROJECT_ID)
        print(f"Name:        {project.name}")
        print(f"Description: {project.description}")
        print(f"State:       {project.state}")
        print(f"Is default:  {project.is_default}")
        print(f"Created at:  {project.created_at}")
        ```
      </Tab>

      <Tab title="Go SDK">
        ```go theme={null}
        projectID := int64(1202779)

        project, err := client.Cloud.Projects.Get(ctx, cloud.ProjectGetParams{
            ProjectID: param.NewOpt(projectID),
        })
        if err != nil {
            log.Fatal(err)
        }
        fmt.Printf("Name:       %s\n", project.Name)
        fmt.Printf("State:      %s\n", project.State)
        fmt.Printf("Is default: %v\n", project.IsDefault)
        ```
      </Tab>

      <Tab title="curl">
        ```bash theme={null}
        PROJECT_ID=1202779

        curl "https://api.gcore.com/cloud/v1/projects/$PROJECT_ID" \
          -H "Authorization: APIKey $GCORE_API_KEY"
        ```

        Response:

        ```json theme={null}
        {
          "id": 1202779,
          "name": "my-project",
          "description": "Production environment",
          "state": "ACTIVE",
          "is_default": false,
          "client_id": 1000503,
          "created_at": "2026-05-31T06:43:54.717473",
          "deleted_at": null,
          "task_id": null
        }
        ```
      </Tab>
    </Tabs>

    ## Update a project

    The [update project](https://api.gcore.com/docs/cloud#tag/Projects/operation/ProjectViewSet.patch) endpoint changes a project's name or description. Only the fields included in the request are modified. The update takes effect immediately — no task polling is needed.

    <Tabs>
      <Tab title="Python SDK">
        ```python theme={null}
        PROJECT_ID = 1202779

        project = client.cloud.projects.update(
            project_id=PROJECT_ID,
            name="my-project-v2",
            description="Updated description",
        )
        print(f"Name:        {project.name}")
        print(f"Description: {project.description}")
        ```
      </Tab>

      <Tab title="Go SDK">
        ```go theme={null}
        projectID := int64(1202779)

        project, err := client.Cloud.Projects.Update(ctx, cloud.ProjectUpdateParams{
            ProjectID:   param.NewOpt(projectID),
            Name:        param.NewOpt("my-project-v2"),
            Description: param.NewOpt("Updated description"),
        })
        if err != nil {
            log.Fatal(err)
        }
        fmt.Printf("Name: %s\n", project.Name)
        ```
      </Tab>

      <Tab title="curl">
        ```bash theme={null}
        PROJECT_ID=1202779

        curl -X PATCH "https://api.gcore.com/cloud/v1/projects/$PROJECT_ID" \
          -H "Authorization: APIKey $GCORE_API_KEY" \
          -H "Content-Type: application/json" \
          -d '{"name": "my-project-v2", "description": "Updated description"}'
        ```

        Response:

        ```json theme={null}
        {
          "id": 1202779,
          "name": "my-project-v2",
          "description": "Updated description",
          "state": "ACTIVE",
          "is_default": false,
          "client_id": 1000503
        }
        ```
      </Tab>
    </Tabs>

    ## Delete a project

    The [delete project](https://api.gcore.com/docs/cloud#tag/Projects/operation/ProjectViewSet.delete) endpoint permanently removes a project and all cloud resources inside it across every region. Default projects cannot be deleted. The operation is asynchronous — poll the returned task until it reaches `FINISHED`.

    <Warning>
      Deleting a project removes all resources inside it permanently. This action cannot be undone.
    </Warning>

    <Tabs>
      <Tab title="Python SDK">
        ```python theme={null}
        PROJECT_ID = 1202779

        task_ids = client.cloud.projects.delete(project_id=PROJECT_ID)
        client.cloud.tasks.poll(task_ids.tasks[0])
        print("Project deleted.")
        ```
      </Tab>

      <Tab title="Go SDK">
        ```go theme={null}
        projectID := int64(1202779)

        if err := client.Cloud.Projects.DeleteAndPoll(ctx, cloud.ProjectDeleteParams{
            ProjectID: param.NewOpt(projectID),
        }); err != nil {
            log.Fatal(err)
        }
        fmt.Println("Project deleted.")
        ```
      </Tab>

      <Tab title="curl">
        ```bash theme={null}
        PROJECT_ID=1202779

        curl -X DELETE "https://api.gcore.com/cloud/v1/projects/$PROJECT_ID" \
          -H "Authorization: APIKey $GCORE_API_KEY"
        ```

        Response:

        ```json theme={null}
        {
          "tasks": ["32f31af7-7b03-4408-a7f5-3df3909930e9"]
        }
        ```

        Poll <code>GET [https://api.gcore.com/cloud/v1/tasks/\{task\_id}](https://api.gcore.com/cloud/v1/tasks/\{task_id})</code> every 5 seconds until `state` is `FINISHED`.
      </Tab>
    </Tabs>
  </MethodSection>
</MethodSwitch>
