# Request

> Base class for all Package Manager asynchronous operations. Use this class to track the status and results of package operations, such as adding, removing, or updating packages.

## Definition

* **Type:** Class
* **Namespace:** [UnityEditor.PackageManager.Requests](/engine/6000.6/script-reference/unityeditor/packagemanager/requests.md)
* **Assembly:** UnityEditor.CoreModule
* **Implements:** [ISerializationCallbackReceiver](/engine/6000.6/script-reference/unityengine/iserializationcallbackreceiver.md)

```csharp
public abstract class Request : ISerializationCallbackReceiver
```

## Remarks

* All [Client](/engine/6000.6/script-reference/unityeditor/packagemanager/client.md) (such as [Client.Add](/engine/6000.6/script-reference/unityeditor/packagemanager/client/add.md), [Client.Remove](/engine/6000.6/script-reference/unityeditor/packagemanager/client/remove.md), and [Client.List](/engine/6000.6/script-reference/unityeditor/packagemanager/client/list.md)) return an object derived from the Request class.
* Check the `IsCompleted` property to know when the operation is done.
* Always check the `Status` property of the `Request` for a [StatusCode](/engine/6000.6/script-reference/unityeditor/packagemanager/statuscode.md) of `Success` before accessing results to make sure the operation was successful.

```csharp
using UnityEngine;
using UnityEditor.PackageManager;
using UnityEditor.PackageManager.Requests;

[ExecuteInEditMode]
public class RequestExample : MonoBehaviour
{
    ListRequest m_Request;

    void Start()
    {
        Debug.Log("Requesting packages list...");
        m_Request = Client.List();
    }

    void Update()
    {
        if (m_Request != null && m_Request.IsCompleted)
        {
            if (m_Request.Status == StatusCode.Success)
            {
                foreach (var package in m_Request.Result)
                {
                    Debug.Log($"Package: {package.name} ({package.version})");
                }
            }
            else
            {
                Debug.Log($"Package list request failed: {m_Request.Error}");
            }
            m_Request = null;
        }
    }
}
```

**Related information**

* [Client](/engine/6000.6/script-reference/unityeditor/packagemanager/client.md)
* [PackageInfo](/engine/6000.6/script-reference/unityeditor/packagemanager/packageinfo.md)
* [Request.Error](/engine/6000.6/script-reference/unityeditor/packagemanager/requests/request/error.md)
* [StatusCode](/engine/6000.6/script-reference/unityeditor/packagemanager/statuscode.md)

## Properties

| Property                                                                                                  | Description                                |
| --------------------------------------------------------------------------------------------------------- | ------------------------------------------ |
| [Error](/engine/6000.6/script-reference/unityeditor/packagemanager/requests/request/error.md)             | The error returned by the request, if any. |
| [IsCompleted](/engine/6000.6/script-reference/unityeditor/packagemanager/requests/request/iscompleted.md) | Whether the request is complete.           |
| [Status](/engine/6000.6/script-reference/unityeditor/packagemanager/requests/request/status.md)           | The request status.                        |
