Designing a stateless API requires following basic guidelines that ensure each request is self-contained and independent from the others. To do this, you should use HTTP methods and status codes to indicate actions and outcomes of requests. For instance, GET can be used to retrieve a resource, POST to create a new one, PUT to update an existing one, DELETE to remove a resource, and PATCH to modify part of a resource. Additionally, status codes like 200 OK, 201 Created, 204 No Content, 400 Bad Request, 404 Not Found, and 500 Internal Server Error should be used to communicate success or failure. URIs and query parameters can be used to identify and filter resources; for example, /users can access the collection of users, /users/123 can access a specific user, and /users?name=John can search for users by name. Headers and body should be used for sending and receiving data/metadata. For example, Content-Type header is used for specifying the format of data (e.g. JSON, XML or HTML), Accept header is used for indicating the preferred format of response, Authorization header is used for sending authentication/authorization information (e.g. token or key) while body is used for sending/receiving the actual data of resources (e.g. attributes/values of a user object). Hypermedia links and relations should also be employed in order to navigate/discover resources; Link header provides links to related resources like the next/previous page of collection while rel attribute describes the relationship between current resource and linked resource (e.g. self, next, prev, edit or delete). Finally, HATEOAS (Hypermedia as the Engine of Application State) principle enables clients to dynamically explore/interact with API based on links/relations provided by server.