# Introduction

It extracts data from **ANY Digital Document**, revealing valuable information and actionable data.

![ Alfred transforms any document scanned or digital into data you can manipulate](https://2255375864-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-Mae8GCwLSd9I2djPI-M%2F-Maj3F0H9MW_GG58wj02%2F-Maj3iOEi6viKmMwMZQU%2Fabc.png?alt=media\&token=0b13ed91-fc3b-4717-80dc-07b0f0dbe48f)

The platform employs a blend of computer vision, natural language processing, statistical modeling, and machine learning techniques to interpret and analyze text that is unstructured or semi-structured. This advanced approach allows for the efficient processing and understanding of complex textual information across various document types.

{% hint style="info" %}
You can view [Release Notes](https://app.gitbook.com/@tagshelf-1/s/privatetest1/~/drafts/-Maj3igdY5wPDmoXDQQH/release-notes/releases) here.
{% endhint %}

## Navigating the documentation <a href="#navigating-the-documentation" id="navigating-the-documentation"></a>

Our API Documentation is meticulously organized to enhance your understanding and use of Alfred. Each section is grouped by endpoint domain, offering a targeted approach to exploring our API's functionalities. Within each endpoint domain, you'll find thorough explanations that delve into the specifics of each endpoint. These detailed sections encompass everything from an overarching view to the minute details of configurable options and parameters.&#x20;

This method makes it easy and fast to find the information you need, whether you're integrating a specific feature or seeking a comprehensive understanding of our API's capabilities. Our aim is to provide you with a user-friendly, informative guide that makes your journey through Alfred's API both efficient and enlightening.

{% hint style="success" %}
Looking to use Tagshelf in your preferred programming language? On GitHub we provide free bindings in [C#](https://www.nuget.org/packages/TagShelf.Alfred.ApiWrapper/), JavaScript and Python. You can also import a [Postman collection](https://static.tagshelf.io/postman/alfred/api-v1-examples-basic.json)[.](https://static.tagshelf.io/postman/alfred/api-v1-examples-basic.json)
{% endhint %}

## Enumerations <a href="#enumerations" id="enumerations"></a>

The status of a job during execution is represented by its **stage** attribute, which correlates to the [JobStage](https://docs.tagshelf.dev/endpoints/job/job-stages) enumeration. This enumeration's values are communicated as strings in [*snake case*](https://en.wikipedia.org/wiki/Snake_case) format. Similarly, the progression of a file through the processing pipeline is denoted by its **status** attribute. This attribute aligns with the [FileStatus](https://docs.tagshelf.dev/endpoints/file/file-status) enumeration, and its values are also relayed as strings in [*snake case*](https://en.wikipedia.org/wiki/Snake_case) format.

Through these enumeration systems, Alfred's API offers a structured and clear method to track and manage the workflow of batch jobs and file processing. These enumerations, are integral to ensuring that API consumers can seamlessly monitor and respond to the dynamic states of jobs and files within the system.

## Rate Limiting <a href="#rate-limiting" id="rate-limiting"></a>

You can make up to **2500** API requests per minute.&#x20;

Authenticated requests are associated with the authenticated user, regardless of whether HMAC or an OAuth token was used. This means that all requests authorized by a user share the same quota of 2500 requests per minute even if they authenticate with different tokens owned by the same user.

The returned HTTP headers of any API request show your current rate limit status:

| **Header Name**         | **Description**                                                                                                         |
| ----------------------- | ----------------------------------------------------------------------------------------------------------------------- |
| *X-RateLimit-Limit*     | The maximum number of requests you're permitted to make per hour.                                                       |
| *X-RateLimit-Remaining* | The maximum number of requests you're permitted to make per hour.                                                       |
| *X-RateLimit-Reset*     | The time at which the current rate limit window resets in [UTC epoch seconds](https://en.wikipedia.org/wiki/Unix_time). |

{% hint style="warning" %}
If you exceed the rate limit, an error response returns with HTTP status code **403**.
{% endhint %}

## User-Agent <a href="#user-agent" id="user-agent"></a>

All API requests **MUST** include a valid *User-Agent* header key-value pair. Requests without a valid User-Agent header will be rejected.

We request that you use your TagShelf username, or the name of your application, for the User-Agent header key-value pair. This allows us to identify your API requests properly and contact you if there are problems.

Here's an example:

```
User-Agent: Amazing-Magical-App
```

{% hint style="warning" %}
Keep in mind that when testing our endpoints using **cURL** or **Postman**, it may not be necessary to explicitly specify a User-Agent, as these tools often automatically include a valid User-Agent header by default. However, if you use an alternative client and fail to provide a valid User-Agent header, you are likely to receive an HTTP **403** status code in response.
{% endhint %}
