# List documents

URL: https://docs.hanzo.ai/docs/openapi/esign/get-esign-documents

> Returns your org's documents, newest first.

`GET /v1/esign/documents`

> [eSign →](https://docs.hanzo.ai/docs/openapi/esign) · [All API references →](https://docs.hanzo.ai/docs/openapi) · [Get started →](https://docs.hanzo.ai/docs/guides)

|               |                                           |
| ------------- | ----------------------------------------- |
| **Address**   | `https://api.hanzo.ai/v1/esign/documents` |
| **Method**    | `GET`                                     |
| **Operation** | `get_esign_documents`                     |
| **Auth**      | `Authorization: Bearer $HANZO_API_KEY`    |

Returns your org's documents, newest first.

Each carries its status, recipients and field layout. The listing is capped at
200 and there is no paging, so treat it as the recent window rather than a
complete export. It reads the caller's own tenant store, so no other org's
documents can appear in it.

## Request

`GET /v1/esign/documents` takes no parameters and no body — the credential is the whole request.

## Response

| Status    | Body                 | Meaning |
| --------- | -------------------- | ------- |
| `200`     | esign.esignDocuments | ok      |
| `default` | problem-details      | refused |

`200` body — 35 fields.

| Field                                      | In   | Type                    | Always | Description                                                                                                                                                                          |
| ------------------------------------------ | ---- | ----------------------- | ------ | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ |
| `documents`                                | body | esign.esignDocument\[]  | —      | Documents is the caller org's documents, newest first, capped at 200.                                                                                                                |
| `documents[].completedAt`                  | body | integer (int64)         | —      | CompletedAt is when the document sealed, in unix milliseconds; null until it does.                                                                                                   |
| `documents[].createdAt`                    | body | integer (int64)         | —      | CreatedAt is when the document was uploaded, in unix milliseconds.                                                                                                                   |
| `documents[].externalId`                   | body | string                  | —      | ExternalID is the caller's own identifier for this document, echoed back as it was given; null when none was.                                                                        |
| `documents[].fields`                       | body | esign.esignField\[]     | —      | Fields is every field on the document, ordered by page and then by when it was placed.                                                                                               |
| `documents[].fields[].customText`          | body | string                  | —      | CustomText is the value a non-signature field was filled with, empty until it is.                                                                                                    |
| `documents[].fields[].fieldMeta`           | body | any                     | —      | FieldMeta is the caller's own metadata for this field, stored verbatim at placement and never interpreted.                                                                           |
| `documents[].fields[].height`              | body | number (double)         | —      | Height is the field's height, -1 when the renderer is to choose one.                                                                                                                 |
| `documents[].fields[].id`                  | body | string                  | —      | ID is the field id.                                                                                                                                                                  |
| `documents[].fields[].inserted`            | body | boolean                 | —      | Inserted is whether this field has been filled in.                                                                                                                                   |
| `documents[].fields[].page`                | body | number (double)         | —      | Page is the 1-based page the field sits on.                                                                                                                                          |
| `documents[].fields[].positionX`           | body | number (double)         | —      | PositionX is the field's horizontal position on that page.                                                                                                                           |
| `documents[].fields[].positionY`           | body | number (double)         | —      | PositionY is the field's vertical position on that page.                                                                                                                             |
| `documents[].fields[].recipientId`         | body | string                  | —      | RecipientID is who must fill this field.                                                                                                                                             |
| `documents[].fields[].type`                | body | string                  | —      | Type is what the field collects — SIGNATURE, DATE, NAME, EMAIL, TEXT and the rest.                                                                                                   |
| `documents[].fields[].width`               | body | number (double)         | —      | Width is the field's width, -1 when the renderer is to choose one.                                                                                                                   |
| `documents[].id`                           | body | string                  | —      | ID is the document id.                                                                                                                                                               |
| `documents[].message`                      | body | string                  | —      | Message is the covering message stored with the document; null when none was given.                                                                                                  |
| `documents[].recipients`                   | body | esign.esignRecipient\[] | —      | Recipients is everyone on the document, ordered by signing order and then by when they were added — which is also the order a SEQUENTIAL document enforces.                          |
| `documents[].recipients[].email`           | body | string                  | —      | Email is where this recipient's signing link is meant to go, lower-cased.                                                                                                            |
| `documents[].recipients[].id`              | body | string                  | —      | ID is the recipient id, which is what a field is placed against.                                                                                                                     |
| `documents[].recipients[].name`            | body | string                  | —      | Name is the recipient's display name, empty when none was given.                                                                                                                     |
| `documents[].recipients[].readStatus`      | body | string                  | —      | ReadStatus is NOT\_OPENED until they first open their link, then OPENED.                                                                                                             |
| `documents[].recipients[].rejectionReason` | body | string                  | —      | RejectionReason is why they declined, null unless they did.                                                                                                                          |
| `documents[].recipients[].role`            | body | string                  | —      | Role is SIGNER, CC, VIEWER, APPROVER or ASSISTANT.                                                                                                                                   |
| `documents[].recipients[].sendStatus`      | body | string                  | —      | SendStatus is NOT\_SENT until the document goes out, then SENT.                                                                                                                      |
| `documents[].recipients[].signedAt`        | body | integer (int64)         | —      | SignedAt is when they finished or declined, in unix milliseconds; null while neither has happened.                                                                                   |
| `documents[].recipients[].signingOrder`    | body | number (double)         | —      | SigningOrder is their position in a SEQUENTIAL document, null when they were added without one.                                                                                      |
| `documents[].recipients[].signingStatus`   | body | string                  | —      | SigningStatus is NOT\_SIGNED, SIGNED or REJECTED.                                                                                                                                    |
| `documents[].signingOrder`                 | body | string                  | —      | SigningOrder is PARALLEL or SEQUENTIAL, fixed when the document was created.                                                                                                         |
| `documents[].source`                       | body | string                  | —      | Source is how the document came to exist.                                                                                                                                            |
| `documents[].status`                       | body | string                  | —      | Status is DRAFT while recipients and fields may still be added, PENDING once it has gone out, then COMPLETED when every signer has finished or REJECTED if any one of them declined. |
| `documents[].subject`                      | body | string                  | —      | Subject is the covering subject line stored with the document; null when none was given.                                                                                             |
| `documents[].title`                        | body | string                  | —      | Title is the document's name, and the stem of the download filename.                                                                                                                 |
| `documents[].updatedAt`                    | body | integer (int64)         | —      | UpdatedAt is when the document last changed, in unix milliseconds.                                                                                                                   |

Failure carries the platform error shape — see [Errors](https://docs.hanzo.ai/docs/errors).

## Examples

**CLI**

```bash
hanzo esign documents list
```

**SDK**

**.ts**

```ts
import { Configuration, EsignApi } from 'hanzoai';

const api = new EsignApi(new Configuration({ accessToken: process.env.HANZO_API_KEY }));
const { data } = await api.getEsignDocuments();
```

**.py**

```python
from hanzoai.cloud import ApiClient, Configuration
from hanzoai.cloud.api import EsignApi

client = ApiClient(Configuration(access_token=os.environ["HANZO_API_KEY"]))
result = EsignApi(client).get_esign_documents()
```

**.go**

```go
cfg := hanzoai.NewConfiguration()
cfg.AddDefaultHeader("Authorization", "Bearer "+os.Getenv("HANZO_API_KEY"))
client := hanzoai.NewAPIClient(cfg)

resp, _, err := client.EsignAPI.GetEsignDocuments(context.Background()).Execute()
if err != nil {
	return err
}
```

**.rs**

```rust
use hanzo_client::apis::{configuration::Configuration, esign_api};

let mut cfg = Configuration::new();
cfg.bearer_access_token = std::env::var("HANZO_API_KEY").ok();

let result = esign_api::get_esign_documents(&cfg, Default::default()).await?;
```

**.java**

```java
import ai.hanzo.cloud.ApiClient;
import ai.hanzo.cloud.api.EsignApi;

ApiClient client = new ApiClient();
client.setBearerToken(System.getenv("HANZO_API_KEY"));

var result = new EsignApi(client).getEsignDocuments();
```

**HTTP**

```bash
curl https://api.hanzo.ai/v1/esign/documents \
  -H "Authorization: Bearer $HANZO_API_KEY"
```

**MCP**

MCP reaches **esign** through the `esign` tool, which names its 9 operations with its own verbs — this one among them, under a name only MCP declares. `describe` explains any of them:

```bash
curl -X POST https://api.hanzo.ai/v1/mcp \
  -H "Content-Type: application/json" \
  -d '{
       "jsonrpc": "2.0",
       "id": 1,
       "method": "tools/call",
       "params": {
         "name": "describe",
         "arguments": {
           "op": "list_esign_documents"
         }
       }
     }'
```

---

[eSign API](https://docs.hanzo.ai/docs/openapi/esign) · [All Hanzo APIs](https://docs.hanzo.ai/docs/openapi) · [Interactive reference](https://docs.hanzo.ai/docs/openapi/reference)
