documentation/topics/links.md

# Links

In JSON:API, there are various pre-specified links.

## Self links to routes

Whenever you hit a route, there will be a `self` link in the top-level `links` object that points to the current request url.

## Pagination links on index routes

There will be `first`, `last`, `prev`, and `next` links on paginatable index routes, allowing clients to navigate through the pages of results.

## Self links on individual entities

In order to get a self link generated for an individual entity, you must designate one of your `get` routes as `primary? true`. For example:

```elixir
get :read, primary?: true
```

Then, each entity will have a `self` link in its `links` key.

## Related links

### Relationship Self Links

Relationship self links are links to endpoints that return only the linkage, _not_ the actual data of the related entities. To generate a relationship self link for a relationship, mark one of your `relationship` routes as `primary? true`. For example:

```elixir
relationship :comments, :read, primary?: true
```

### Relationship Related Links

Relationship _related_ links, on the other hand, are endpoints that return the related entities themselves, acting as modified index routes over the destination of the relationship. To generate one of these, mark one of your `related` routes as `primary? true`. For example:

```elixir
related :comments, :read, primary?: true
```