# Manage folders and labels with Kotlin/Java

Source: https://developer.nylas.com/docs/v3/sdks/kotlin-java/manage-folders-labels/

This page explains how to use the Nylas Kotlin/Java SDK and Email API to manage the folders and labels in an email inbox. For more information, see the [Email documentation](/docs/v3/email/).

## Before you begin

Before you start, you must have done the following tasks:

- [Installed and set up the Nylas Kotlin/Java SDK](/docs/v3/sdks/kotlin-java/).
- [Authenticated one or more users](/docs/v3/sdks/kotlin-java/#authenticate-users).

## List folders and labels

Depending on the user's email provider, there are two possible ways their inbox might be organized: using either folders or labels. Gmail uses labels, and all other providers use folders. Nylas consolidates both folders and labels under the [Folders endpoint](/docs/reference/api/folders/).

The following examples list all folders and labels from a user's inbox.

```java
public class SendDraft {
  public static void main(String[] args) throws NylasSdkTimeoutError, NylasApiError {
    NylasClient nylas = new NylasClient.Builder("<NYLAS_API_KEY>").build();
    ListResponse<Folder> folders = nylas.folders().list("<NYLAS_GRANT_ID>");

    for(Folder folder : folders.getData()){
      System.out.println(folder.getName());
    }
  }
}
```

```kt
fun main(args: Array<String>) {
  val nylas: NylasClient = NylasClient(apiKey = "<NYLAS_API_KEY>")
  val labels = nylas.folders().list("<NYLAS_GRANT_ID>")

  for (label in labels.data){
    println(label.name)
  }
}
```

## Create folders and labels

The examples below create either a folder or label. Nylas automatically determines which to create based on the user's provider.

```java
public class CreateLabels {
  public static void main(String[] args) throws NylasSdkTimeoutError, NylasApiError {
    NylasClient nylas = new NylasClient.Builder("<NYLAS_API_KEY>").build();
    CreateFolderRequest request = new CreateFolderRequest("My Custom folder", "", "", "");
    Response<Folder> label = nylas.folders().create("<NYLAS_GRANT_ID>", request);

    System.out.println(label);
  }
}
```

```kt
fun main(args: Array<String>) {
  val nylas: NylasClient = NylasClient(apiKey = "<NYLAS_API_KEY>")
  val request = CreateFolderRequest("My Custom folder")
  val labels = nylas.folders().create("<NYLAS_GRANT_ID>",  request).data

  for(label in labels) {
    println(label.name)
  }
}
```

## Organize an inbox with folders and labels

The following examples use the Kotlin/Java SDK to get the most recent message in a user's inbox and either move it to your new folder or apply the new label (see [Create folders and labels](#create-folders-and-labels)).

```java
ListMessagesQueryParams queryParams = new ListMessagesQueryParams.Builder().
    inFolder(Collections.singletonList("inbox")).
    limit(1).
    build();

UpdateMessageRequest messageRequest = new UpdateMessageRequest.Builder().
    folders(Collections.singletonList(label.getData().getId())).build();

ListResponse<Message> message = nylas.messages().list(dotenv.get("NYLAS_GRANT_ID"), queryParams);
assert message.getData().get(0).getId() != null;

nylas.messages().update(dotenv.get("NYLAS_GRANT_ID"), message.getData().get(0).getId(), messageRequest);
```

```kt
val queryParams = ListMessagesQueryParams.Builder().inFolder(listOf("inbox")).limit(1).build()
val message = nylas.messages().list(dotenv["NYLAS_GRANT_ID"], queryParams)
val messageRequest = UpdateMessageRequest.Builder().folders(listOf(labels.id)).build()
val messageId = message.data[0].id

if (messageId != null) {
  nylas.messages().update(dotenv["NYLAS_GRANT_ID"], messageId, messageRequest)
}
```