--- title: API Architecture description: Architectural overview of the Teleport gRPC API. --- ## Authentication The Auth API uses mTLS to authenticate a client-server connection. Therefore, the client must provide TLS certificates signed by the Auth server to access the API. These are easy to create and provide using [Credential loaders](#credentials). ## Authorization The client certificates signed by the Auth server will be associated with a specific user. This user will be used to authorize API requests made by the client. It is recommended to make a new user and role for each client. This makes it easier to track client actions, as well as carefully control client permissions. For example, if your client needs to use `client.GetRole()`, the user must have permission to perform the `read` action on the `role` resource. You should create a user and role with the minimum permissions required. (!docs/pages/includes/permission-warning.mdx!) ```code # Copy and Paste the below and run on the Teleport Auth server. cat > api-role.yaml < While all Credential loaders support mTLS connections, only some support SSH connections (see the chart above). Take a look at this client constructor [example](https://pkg.go.dev/github.com/gravitational/teleport/api/client#example-New) to see what these connection options look like.