# Conditional Requests & Updates

The Sway Charts REST API relies on standard HTTP conditional update and request mechanism (<http://en.wikipedia.org/wiki/HTTP_ETag>) to ensure that:

* No update is missed and client is always updating the latest resource version (conditional `PUT` and `DELETE` requests).
* The client already has the latest version of the resource and there is no need to re-compute the representation again (conditional `GET` requests).

The Sway Charts REST API relies on the `ETag/If-Match/If-None-Match` HTTP headers for conditional requests.

## Conditional GETs

Some `GET` requests to the REST API (except for collection queries) support conditions with the `ETag` headers according to the following algorithm:

1. Client makes a GET request to a resource without the `If-None-Match` header.
2. Server always returns a representation of the resource with an `ETag` header set. The `ETag` header uniquely and transparently identifies the version of the resource.
3. If a resource is updated, its version is incremented and previous `ETag`s are no longer valid.
4. Client makes a `GET` request to a resource specifying the `If-None-Match` header with the value of previously received `ETag`.
5. If `ETag` matches the current version on the server, the server responds with the `304 Not Modified` status code and empty body. The server includes the `ETag` header to the response.
6. If `ETag` doesn't match the current version on the server, the server responds with a new resource representation and includes the new `ETag` header in the response.

## Conditional PUTs and DELETEs

All `PUT` and `DELETE` requests to the REST API must contain the `ETag` headers according to the following algorithm:

1. Client makes a GET request to a resource without the `If-None-Match` header.
2. Server always returns a representation of the resource with an `ETag` header set. The `ETag` header shall uniquely identify the version of the resource.
3. If a resource is updated, its version is incremented and previous `ETags` are no longer valid.
4. Client makes a `PUT` or `DELETE` request to a resource specifying the `If-Match` header with the value of previously received `ETag`.
5. If `ETag` matches the current version on the server, the server proceeds with the request.
6. If `ETag` doesn't match the current version on the server, the server responds with the `412 Precondition Failed` status. Client is expected to retrieve the latest resource version and retry the request.
7. If the client doesn't submit the `If-Match` header, status code of `403 Forbidden` is returned along with the error details.

This prohibits "stale update" problems when there are several simultaneous updates for the same resource and one update overrides the other.


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://sway-technologies.gitbook.io/sway-charts-api-documentation/rest-api-specification/getting-started/conditional-requests-and-updates.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
