<!--
This file was generated by Spark. Do not edit it by hand.
-->
# AshJsonApi.Domain
The entrypoint for adding JSON:API behavior to an Ash domain
## json_api
Global configuration for JSON:API
### Nested DSLs
* [open_api](#json_api-open_api)
* [routes](#json_api-routes)
* base_route
* get
* index
* post
* patch
* delete
* related
* relationship
* post_to_relationship
* patch_relationship
* delete_from_relationship
* route
* get
* index
* post
* patch
* delete
* related
* relationship
* post_to_relationship
* patch_relationship
* delete_from_relationship
* route
### Examples
```
json_api do
prefix "/json_api"
log_errors? true
end
```
### Options
| Name | Type | Default | Docs |
|------|------|---------|------|
| [`router`](#json_api-router){: #json_api-router } | `atom` | | The router that you created for this Domain. Used by test helpers to send requests |
| [`show_raised_errors?`](#json_api-show_raised_errors?){: #json_api-show_raised_errors? } | `boolean` | `false` | For security purposes, if an error is *raised* then Ash simply shows a generic error. If you want to show those errors, set this to true. |
| [`prefix`](#json_api-prefix){: #json_api-prefix } | `String.t` | | The route prefix at which you are serving the JSON:API |
| [`serve_schema?`](#json_api-serve_schema?){: #json_api-serve_schema? } | `boolean` | `false` | Whether or not create a /schema route that serves the JSON schema of your API |
| [`authorize?`](#json_api-authorize?){: #json_api-authorize? } | `boolean` | `true` | Whether or not to perform authorization on requests. |
| [`log_errors?`](#json_api-log_errors?){: #json_api-log_errors? } | `boolean` | `true` | Whether or not to log any errors produced |
| [`include_nil_values?`](#json_api-include_nil_values?){: #json_api-include_nil_values? } | `boolean` | `true` | Whether or not to include properties for values that are nil in the JSON output |
### json_api.open_api
OpenAPI configurations
### Examples
```
json_api do
...
open_api do
tag "Users"
group_by :api
end
end
```
### Options
| Name | Type | Default | Docs |
|------|------|---------|------|
| [`tag`](#json_api-open_api-tag){: #json_api-open_api-tag } | `String.t` | | Tag to be used when used by :group_by |
| [`group_by`](#json_api-open_api-group_by){: #json_api-open_api-group_by } | `:domain \| :resource` | `:resource` | Group by :domain or :resource |
### json_api.routes
Configure the routes that will be exposed via the JSON:API
### Nested DSLs
* [base_route](#json_api-routes-base_route)
* get
* index
* post
* patch
* delete
* related
* relationship
* post_to_relationship
* patch_relationship
* delete_from_relationship
* route
* [get](#json_api-routes-get)
* [index](#json_api-routes-index)
* [post](#json_api-routes-post)
* [patch](#json_api-routes-patch)
* [delete](#json_api-routes-delete)
* [related](#json_api-routes-related)
* [relationship](#json_api-routes-relationship)
* [post_to_relationship](#json_api-routes-post_to_relationship)
* [patch_relationship](#json_api-routes-patch_relationship)
* [delete_from_relationship](#json_api-routes-delete_from_relationship)
* [route](#json_api-routes-route)
### Examples
```
routes do
base "/posts"
get :read
get :me, route: "/me"
index :read
post :confirm_name, route: "/confirm_name"
patch :update
related :comments, :read
relationship :comments, :read
post_to_relationship :comments
patch_relationship :comments
delete_from_relationship :comments
end
```
### json_api.routes.base_route
```elixir
base_route route, resource \\ nil
```
Sets a prefix for a list of contained routes
### Nested DSLs
* [get](#json_api-routes-base_route-get)
* [index](#json_api-routes-base_route-index)
* [post](#json_api-routes-base_route-post)
* [patch](#json_api-routes-base_route-patch)
* [delete](#json_api-routes-base_route-delete)
* [related](#json_api-routes-base_route-related)
* [relationship](#json_api-routes-base_route-relationship)
* [post_to_relationship](#json_api-routes-base_route-post_to_relationship)
* [patch_relationship](#json_api-routes-base_route-patch_relationship)
* [delete_from_relationship](#json_api-routes-base_route-delete_from_relationship)
* [route](#json_api-routes-base_route-route)
### Examples
```
base_route "/posts" do
index :read
get :read
end
base_route "/comments" do
index :read
end
```
### Arguments
| Name | Type | Default | Docs |
|------|------|---------|------|
| [`route`](#json_api-routes-base_route-route){: #json_api-routes-base_route-route .spark-required} | `String.t` | | The route prefix to use for contained routes |
| [`resource`](#json_api-routes-base_route-resource){: #json_api-routes-base_route-resource } | `module` | | The resource that the contained routes will use by default |
### json_api.routes.base_route.get
```elixir
get resource \\ nil, action
```
A GET route to retrieve a single record
### Examples
```
get :read
```
```
get :read, path_param_is_composite_key: :id
```
### Arguments
| Name | Type | Default | Docs |
|------|------|---------|------|
| [`resource`](#json_api-routes-base_route-get-resource){: #json_api-routes-base_route-get-resource } | `module` | | The resource that the route's action is defined on |
| [`action`](#json_api-routes-base_route-get-action){: #json_api-routes-base_route-get-action .spark-required} | `atom` | | The action to call when this route is hit |
### Options
| Name | Type | Default | Docs |
|------|------|---------|------|
| [`route`](#json_api-routes-base_route-get-route){: #json_api-routes-base_route-get-route } | `String.t` | `"/:id"` | The path of the route |
| [`default_fields`](#json_api-routes-base_route-get-default_fields){: #json_api-routes-base_route-get-default_fields } | `list(atom)` | | A list of fields to be shown in the attributes of the called route |
| [`primary?`](#json_api-routes-base_route-get-primary?){: #json_api-routes-base_route-get-primary? } | `boolean` | `false` | Whether or not this is the route that should be linked to by default when rendering links to this type of route |
| [`metadata`](#json_api-routes-base_route-get-metadata){: #json_api-routes-base_route-get-metadata } | `(any, any, any -> any)` | | A function to generate arbitrary top-level metadata for the JSON:API response |
| [`modify_conn`](#json_api-routes-base_route-get-modify_conn){: #json_api-routes-base_route-get-modify_conn } | `(any, any, any, any -> any)` | | A function to modify the conn before responding. Used for things like setting headers based on the response. Takes `conn, subject, result, request`. See the modify_conn guide for more details and examples. |
| [`action_names_in_schema`](#json_api-routes-base_route-get-action_names_in_schema){: #json_api-routes-base_route-get-action_names_in_schema } | `keyword` | | A mapping of action names to how they should appear in the OpenAPI schema. You only need to set this if you see a warning during schema generation. |
| [`name`](#json_api-routes-base_route-get-name){: #json_api-routes-base_route-get-name } | `String.t` | | A globally unique name for this route, to be used when generating docs and open api specifications |
| [`description`](#json_api-routes-base_route-get-description){: #json_api-routes-base_route-get-description } | `String.t` | | A human-friendly description of this specific route to use in generated documentation and OpenAPI. If provided, this overrides the action description. |
| [`derive_sort?`](#json_api-routes-base_route-get-derive_sort?){: #json_api-routes-base_route-get-derive_sort? } | `boolean` | `true` | Whether or not to derive a sort parameter based on the sortable fields of the resource |
| [`derive_filter?`](#json_api-routes-base_route-get-derive_filter?){: #json_api-routes-base_route-get-derive_filter? } | `boolean` | `true` | Whether or not to derive a filter parameter based on the sortable fields of the resource |
| [`path_param_is_composite_key`](#json_api-routes-base_route-get-path_param_is_composite_key){: #json_api-routes-base_route-get-path_param_is_composite_key } | `atom` | | The path parameter that should be parsed as a composite primary key. When specified (e.g., :id), the parameter will be split using the resource's primary key delimiter and mapped to individual primary key fields. This is required for resources with composite primary keys to work correctly with GET, PATCH, and DELETE operations. See the composite primary keys documentation for more details. |
### Introspection
Target: `AshJsonApi.Resource.Route`
### json_api.routes.base_route.index
```elixir
index resource \\ nil, action
```
A GET route to retrieve a list of records
### Examples
```
index :read
```
### Arguments
| Name | Type | Default | Docs |
|------|------|---------|------|
| [`resource`](#json_api-routes-base_route-index-resource){: #json_api-routes-base_route-index-resource } | `module` | | The resource that the route's action is defined on |
| [`action`](#json_api-routes-base_route-index-action){: #json_api-routes-base_route-index-action .spark-required} | `atom` | | The action to call when this route is hit |
### Options
| Name | Type | Default | Docs |
|------|------|---------|------|
| [`paginate?`](#json_api-routes-base_route-index-paginate?){: #json_api-routes-base_route-index-paginate? } | `boolean` | `true` | |
| [`route`](#json_api-routes-base_route-index-route){: #json_api-routes-base_route-index-route } | `String.t` | `"/"` | The path of the route |
| [`default_fields`](#json_api-routes-base_route-index-default_fields){: #json_api-routes-base_route-index-default_fields } | `list(atom)` | | A list of fields to be shown in the attributes of the called route |
| [`primary?`](#json_api-routes-base_route-index-primary?){: #json_api-routes-base_route-index-primary? } | `boolean` | `false` | Whether or not this is the route that should be linked to by default when rendering links to this type of route |
| [`metadata`](#json_api-routes-base_route-index-metadata){: #json_api-routes-base_route-index-metadata } | `(any, any, any -> any)` | | A function to generate arbitrary top-level metadata for the JSON:API response |
| [`modify_conn`](#json_api-routes-base_route-index-modify_conn){: #json_api-routes-base_route-index-modify_conn } | `(any, any, any, any -> any)` | | A function to modify the conn before responding. Used for things like setting headers based on the response. Takes `conn, subject, result, request`. See the modify_conn guide for more details and examples. |
| [`action_names_in_schema`](#json_api-routes-base_route-index-action_names_in_schema){: #json_api-routes-base_route-index-action_names_in_schema } | `keyword` | | A mapping of action names to how they should appear in the OpenAPI schema. You only need to set this if you see a warning during schema generation. |
| [`name`](#json_api-routes-base_route-index-name){: #json_api-routes-base_route-index-name } | `String.t` | | A globally unique name for this route, to be used when generating docs and open api specifications |
| [`description`](#json_api-routes-base_route-index-description){: #json_api-routes-base_route-index-description } | `String.t` | | A human-friendly description of this specific route to use in generated documentation and OpenAPI. If provided, this overrides the action description. |
| [`derive_sort?`](#json_api-routes-base_route-index-derive_sort?){: #json_api-routes-base_route-index-derive_sort? } | `boolean` | `true` | Whether or not to derive a sort parameter based on the sortable fields of the resource |
| [`derive_filter?`](#json_api-routes-base_route-index-derive_filter?){: #json_api-routes-base_route-index-derive_filter? } | `boolean` | `true` | Whether or not to derive a filter parameter based on the sortable fields of the resource |
| [`path_param_is_composite_key`](#json_api-routes-base_route-index-path_param_is_composite_key){: #json_api-routes-base_route-index-path_param_is_composite_key } | `atom` | | The path parameter that should be parsed as a composite primary key. When specified (e.g., :id), the parameter will be split using the resource's primary key delimiter and mapped to individual primary key fields. This is required for resources with composite primary keys to work correctly with GET, PATCH, and DELETE operations. See the composite primary keys documentation for more details. |
### Introspection
Target: `AshJsonApi.Resource.Route`
### json_api.routes.base_route.post
```elixir
post resource \\ nil, action
```
A POST route to create a record
### Examples
```
post :create
```
### Arguments
| Name | Type | Default | Docs |
|------|------|---------|------|
| [`resource`](#json_api-routes-base_route-post-resource){: #json_api-routes-base_route-post-resource } | `module` | | The resource that the route's action is defined on |
| [`action`](#json_api-routes-base_route-post-action){: #json_api-routes-base_route-post-action .spark-required} | `atom` | | The action to call when this route is hit |
### Options
| Name | Type | Default | Docs |
|------|------|---------|------|
| [`route`](#json_api-routes-base_route-post-route){: #json_api-routes-base_route-post-route } | `String.t` | `"/"` | The path of the route |
| [`default_fields`](#json_api-routes-base_route-post-default_fields){: #json_api-routes-base_route-post-default_fields } | `list(atom)` | | A list of fields to be shown in the attributes of the called route |
| [`primary?`](#json_api-routes-base_route-post-primary?){: #json_api-routes-base_route-post-primary? } | `boolean` | `false` | Whether or not this is the route that should be linked to by default when rendering links to this type of route |
| [`metadata`](#json_api-routes-base_route-post-metadata){: #json_api-routes-base_route-post-metadata } | `(any, any, any -> any)` | | A function to generate arbitrary top-level metadata for the JSON:API response |
| [`modify_conn`](#json_api-routes-base_route-post-modify_conn){: #json_api-routes-base_route-post-modify_conn } | `(any, any, any, any -> any)` | | A function to modify the conn before responding. Used for things like setting headers based on the response. Takes `conn, subject, result, request`. See the modify_conn guide for more details and examples. |
| [`query_params`](#json_api-routes-base_route-post-query_params){: #json_api-routes-base_route-post-query_params } | `list(atom)` | `[]` | A list of action inputs to accept as query parameters. |
| [`action_names_in_schema`](#json_api-routes-base_route-post-action_names_in_schema){: #json_api-routes-base_route-post-action_names_in_schema } | `keyword` | | A mapping of action names to how they should appear in the OpenAPI schema. You only need to set this if you see a warning during schema generation. |
| [`name`](#json_api-routes-base_route-post-name){: #json_api-routes-base_route-post-name } | `String.t` | | A globally unique name for this route, to be used when generating docs and open api specifications |
| [`description`](#json_api-routes-base_route-post-description){: #json_api-routes-base_route-post-description } | `String.t` | | A human-friendly description of this specific route to use in generated documentation and OpenAPI. If provided, this overrides the action description. |
| [`derive_sort?`](#json_api-routes-base_route-post-derive_sort?){: #json_api-routes-base_route-post-derive_sort? } | `boolean` | `true` | Whether or not to derive a sort parameter based on the sortable fields of the resource |
| [`derive_filter?`](#json_api-routes-base_route-post-derive_filter?){: #json_api-routes-base_route-post-derive_filter? } | `boolean` | `true` | Whether or not to derive a filter parameter based on the sortable fields of the resource |
| [`path_param_is_composite_key`](#json_api-routes-base_route-post-path_param_is_composite_key){: #json_api-routes-base_route-post-path_param_is_composite_key } | `atom` | | The path parameter that should be parsed as a composite primary key. When specified (e.g., :id), the parameter will be split using the resource's primary key delimiter and mapped to individual primary key fields. This is required for resources with composite primary keys to work correctly with GET, PATCH, and DELETE operations. See the composite primary keys documentation for more details. |
| [`relationship_arguments`](#json_api-routes-base_route-post-relationship_arguments){: #json_api-routes-base_route-post-relationship_arguments } | `list(atom \| {:id, atom})` | `[]` | Arguments to be used to edit relationships. See the [relationships guide](/documentation/topics/relationships.md) for more. |
| [`upsert?`](#json_api-routes-base_route-post-upsert?){: #json_api-routes-base_route-post-upsert? } | `boolean` | `false` | Whether or not to use the `upsert?: true` option when calling `Ash.create/2`. |
| [`upsert_identity`](#json_api-routes-base_route-post-upsert_identity){: #json_api-routes-base_route-post-upsert_identity } | `atom` | `false` | Which identity to use for the upsert |
### Introspection
Target: `AshJsonApi.Resource.Route`
### json_api.routes.base_route.patch
```elixir
patch resource \\ nil, action
```
A PATCH route to update a record
### Examples
```
patch :update
```
```
patch :update, path_param_is_composite_key: :id
```
### Arguments
| Name | Type | Default | Docs |
|------|------|---------|------|
| [`resource`](#json_api-routes-base_route-patch-resource){: #json_api-routes-base_route-patch-resource } | `module` | | The resource that the route's action is defined on |
| [`action`](#json_api-routes-base_route-patch-action){: #json_api-routes-base_route-patch-action .spark-required} | `atom` | | The action to call when this route is hit |
### Options
| Name | Type | Default | Docs |
|------|------|---------|------|
| [`relationship_arguments`](#json_api-routes-base_route-patch-relationship_arguments){: #json_api-routes-base_route-patch-relationship_arguments } | `any` | `[]` | Arguments to be used to edit relationships. See the [relationships guide](/documentation/topics/relationships.md) for more. |
| [`read_action`](#json_api-routes-base_route-patch-read_action){: #json_api-routes-base_route-patch-read_action } | `atom` | | The read action to use to look the record up before updating |
| [`route`](#json_api-routes-base_route-patch-route){: #json_api-routes-base_route-patch-route } | `String.t` | `"/:id"` | The path of the route |
| [`default_fields`](#json_api-routes-base_route-patch-default_fields){: #json_api-routes-base_route-patch-default_fields } | `list(atom)` | | A list of fields to be shown in the attributes of the called route |
| [`primary?`](#json_api-routes-base_route-patch-primary?){: #json_api-routes-base_route-patch-primary? } | `boolean` | `false` | Whether or not this is the route that should be linked to by default when rendering links to this type of route |
| [`metadata`](#json_api-routes-base_route-patch-metadata){: #json_api-routes-base_route-patch-metadata } | `(any, any, any -> any)` | | A function to generate arbitrary top-level metadata for the JSON:API response |
| [`modify_conn`](#json_api-routes-base_route-patch-modify_conn){: #json_api-routes-base_route-patch-modify_conn } | `(any, any, any, any -> any)` | | A function to modify the conn before responding. Used for things like setting headers based on the response. Takes `conn, subject, result, request`. See the modify_conn guide for more details and examples. |
| [`query_params`](#json_api-routes-base_route-patch-query_params){: #json_api-routes-base_route-patch-query_params } | `list(atom)` | `[]` | A list of action inputs to accept as query parameters. |
| [`action_names_in_schema`](#json_api-routes-base_route-patch-action_names_in_schema){: #json_api-routes-base_route-patch-action_names_in_schema } | `keyword` | | A mapping of action names to how they should appear in the OpenAPI schema. You only need to set this if you see a warning during schema generation. |
| [`name`](#json_api-routes-base_route-patch-name){: #json_api-routes-base_route-patch-name } | `String.t` | | A globally unique name for this route, to be used when generating docs and open api specifications |
| [`description`](#json_api-routes-base_route-patch-description){: #json_api-routes-base_route-patch-description } | `String.t` | | A human-friendly description of this specific route to use in generated documentation and OpenAPI. If provided, this overrides the action description. |
| [`derive_sort?`](#json_api-routes-base_route-patch-derive_sort?){: #json_api-routes-base_route-patch-derive_sort? } | `boolean` | `true` | Whether or not to derive a sort parameter based on the sortable fields of the resource |
| [`derive_filter?`](#json_api-routes-base_route-patch-derive_filter?){: #json_api-routes-base_route-patch-derive_filter? } | `boolean` | `true` | Whether or not to derive a filter parameter based on the sortable fields of the resource |
| [`path_param_is_composite_key`](#json_api-routes-base_route-patch-path_param_is_composite_key){: #json_api-routes-base_route-patch-path_param_is_composite_key } | `atom` | | The path parameter that should be parsed as a composite primary key. When specified (e.g., :id), the parameter will be split using the resource's primary key delimiter and mapped to individual primary key fields. This is required for resources with composite primary keys to work correctly with GET, PATCH, and DELETE operations. See the composite primary keys documentation for more details. |
### Introspection
Target: `AshJsonApi.Resource.Route`
### json_api.routes.base_route.delete
```elixir
delete resource \\ nil, action
```
A DELETE route to destroy a record
### Examples
```
delete :destroy
```
```
delete :destroy, path_param_is_composite_key: :id
```
### Arguments
| Name | Type | Default | Docs |
|------|------|---------|------|
| [`resource`](#json_api-routes-base_route-delete-resource){: #json_api-routes-base_route-delete-resource } | `module` | | The resource that the route's action is defined on |
| [`action`](#json_api-routes-base_route-delete-action){: #json_api-routes-base_route-delete-action .spark-required} | `atom` | | The action to call when this route is hit |
### Options
| Name | Type | Default | Docs |
|------|------|---------|------|
| [`read_action`](#json_api-routes-base_route-delete-read_action){: #json_api-routes-base_route-delete-read_action } | `atom` | | The read action to use to look the record up before updating |
| [`route`](#json_api-routes-base_route-delete-route){: #json_api-routes-base_route-delete-route } | `String.t` | `"/:id"` | The path of the route |
| [`default_fields`](#json_api-routes-base_route-delete-default_fields){: #json_api-routes-base_route-delete-default_fields } | `list(atom)` | | A list of fields to be shown in the attributes of the called route |
| [`primary?`](#json_api-routes-base_route-delete-primary?){: #json_api-routes-base_route-delete-primary? } | `boolean` | `false` | Whether or not this is the route that should be linked to by default when rendering links to this type of route |
| [`metadata`](#json_api-routes-base_route-delete-metadata){: #json_api-routes-base_route-delete-metadata } | `(any, any, any -> any)` | | A function to generate arbitrary top-level metadata for the JSON:API response |
| [`modify_conn`](#json_api-routes-base_route-delete-modify_conn){: #json_api-routes-base_route-delete-modify_conn } | `(any, any, any, any -> any)` | | A function to modify the conn before responding. Used for things like setting headers based on the response. Takes `conn, subject, result, request`. See the modify_conn guide for more details and examples. |
| [`query_params`](#json_api-routes-base_route-delete-query_params){: #json_api-routes-base_route-delete-query_params } | `list(atom)` | `[]` | A list of action inputs to accept as query parameters. |
| [`action_names_in_schema`](#json_api-routes-base_route-delete-action_names_in_schema){: #json_api-routes-base_route-delete-action_names_in_schema } | `keyword` | | A mapping of action names to how they should appear in the OpenAPI schema. You only need to set this if you see a warning during schema generation. |
| [`name`](#json_api-routes-base_route-delete-name){: #json_api-routes-base_route-delete-name } | `String.t` | | A globally unique name for this route, to be used when generating docs and open api specifications |
| [`description`](#json_api-routes-base_route-delete-description){: #json_api-routes-base_route-delete-description } | `String.t` | | A human-friendly description of this specific route to use in generated documentation and OpenAPI. If provided, this overrides the action description. |
| [`derive_sort?`](#json_api-routes-base_route-delete-derive_sort?){: #json_api-routes-base_route-delete-derive_sort? } | `boolean` | `true` | Whether or not to derive a sort parameter based on the sortable fields of the resource |
| [`derive_filter?`](#json_api-routes-base_route-delete-derive_filter?){: #json_api-routes-base_route-delete-derive_filter? } | `boolean` | `true` | Whether or not to derive a filter parameter based on the sortable fields of the resource |
| [`path_param_is_composite_key`](#json_api-routes-base_route-delete-path_param_is_composite_key){: #json_api-routes-base_route-delete-path_param_is_composite_key } | `atom` | | The path parameter that should be parsed as a composite primary key. When specified (e.g., :id), the parameter will be split using the resource's primary key delimiter and mapped to individual primary key fields. This is required for resources with composite primary keys to work correctly with GET, PATCH, and DELETE operations. See the composite primary keys documentation for more details. |
### Introspection
Target: `AshJsonApi.Resource.Route`
### json_api.routes.base_route.related
```elixir
related resource \\ nil, relationship, action
```
A GET route to read the related resources of a relationship
### Examples
```
related :comments, :read
```
### Arguments
| Name | Type | Default | Docs |
|------|------|---------|------|
| [`resource`](#json_api-routes-base_route-related-resource){: #json_api-routes-base_route-related-resource } | `module` | | The resource that the route's action is defined on |
| [`relationship`](#json_api-routes-base_route-related-relationship){: #json_api-routes-base_route-related-relationship .spark-required} | `atom` | | |
| [`action`](#json_api-routes-base_route-related-action){: #json_api-routes-base_route-related-action .spark-required} | `atom` | | The action to call when this route is hit |
### Options
| Name | Type | Default | Docs |
|------|------|---------|------|
| [`route`](#json_api-routes-base_route-related-route){: #json_api-routes-base_route-related-route } | `String.t` | | The path of the route - Defaults to /:id/[relationship_name] |
| [`default_fields`](#json_api-routes-base_route-related-default_fields){: #json_api-routes-base_route-related-default_fields } | `list(atom)` | | A list of fields to be shown in the attributes of the called route |
| [`primary?`](#json_api-routes-base_route-related-primary?){: #json_api-routes-base_route-related-primary? } | `boolean` | `false` | Whether or not this is the route that should be linked to by default when rendering links to this type of route |
| [`metadata`](#json_api-routes-base_route-related-metadata){: #json_api-routes-base_route-related-metadata } | `(any, any, any -> any)` | | A function to generate arbitrary top-level metadata for the JSON:API response |
| [`modify_conn`](#json_api-routes-base_route-related-modify_conn){: #json_api-routes-base_route-related-modify_conn } | `(any, any, any, any -> any)` | | A function to modify the conn before responding. Used for things like setting headers based on the response. Takes `conn, subject, result, request`. See the modify_conn guide for more details and examples. |
| [`query_params`](#json_api-routes-base_route-related-query_params){: #json_api-routes-base_route-related-query_params } | `list(atom)` | `[]` | A list of action inputs to accept as query parameters. |
| [`action_names_in_schema`](#json_api-routes-base_route-related-action_names_in_schema){: #json_api-routes-base_route-related-action_names_in_schema } | `keyword` | | A mapping of action names to how they should appear in the OpenAPI schema. You only need to set this if you see a warning during schema generation. |
| [`name`](#json_api-routes-base_route-related-name){: #json_api-routes-base_route-related-name } | `String.t` | | A globally unique name for this route, to be used when generating docs and open api specifications |
| [`description`](#json_api-routes-base_route-related-description){: #json_api-routes-base_route-related-description } | `String.t` | | A human-friendly description of this specific route to use in generated documentation and OpenAPI. If provided, this overrides the action description. |
| [`derive_sort?`](#json_api-routes-base_route-related-derive_sort?){: #json_api-routes-base_route-related-derive_sort? } | `boolean` | `true` | Whether or not to derive a sort parameter based on the sortable fields of the resource |
| [`derive_filter?`](#json_api-routes-base_route-related-derive_filter?){: #json_api-routes-base_route-related-derive_filter? } | `boolean` | `true` | Whether or not to derive a filter parameter based on the sortable fields of the resource |
| [`path_param_is_composite_key`](#json_api-routes-base_route-related-path_param_is_composite_key){: #json_api-routes-base_route-related-path_param_is_composite_key } | `atom` | | The path parameter that should be parsed as a composite primary key. When specified (e.g., :id), the parameter will be split using the resource's primary key delimiter and mapped to individual primary key fields. This is required for resources with composite primary keys to work correctly with GET, PATCH, and DELETE operations. See the composite primary keys documentation for more details. |
### Introspection
Target: `AshJsonApi.Resource.Route`
### json_api.routes.base_route.relationship
```elixir
relationship resource \\ nil, relationship, action
```
A READ route to read the relationship, returns resource identifiers.
### Examples
```
relationship :comments, :read
```
### Arguments
| Name | Type | Default | Docs |
|------|------|---------|------|
| [`resource`](#json_api-routes-base_route-relationship-resource){: #json_api-routes-base_route-relationship-resource } | `module` | | The resource that the route's action is defined on |
| [`relationship`](#json_api-routes-base_route-relationship-relationship){: #json_api-routes-base_route-relationship-relationship .spark-required} | `atom` | | |
| [`action`](#json_api-routes-base_route-relationship-action){: #json_api-routes-base_route-relationship-action .spark-required} | `atom` | | The action to call when this route is hit |
### Options
| Name | Type | Default | Docs |
|------|------|---------|------|
| [`route`](#json_api-routes-base_route-relationship-route){: #json_api-routes-base_route-relationship-route } | `String.t` | | The path of the route - Defaults to /:id/relationships/[relationship_name] |
| [`default_fields`](#json_api-routes-base_route-relationship-default_fields){: #json_api-routes-base_route-relationship-default_fields } | `list(atom)` | | A list of fields to be shown in the attributes of the called route |
| [`primary?`](#json_api-routes-base_route-relationship-primary?){: #json_api-routes-base_route-relationship-primary? } | `boolean` | `false` | Whether or not this is the route that should be linked to by default when rendering links to this type of route |
| [`metadata`](#json_api-routes-base_route-relationship-metadata){: #json_api-routes-base_route-relationship-metadata } | `(any, any, any -> any)` | | A function to generate arbitrary top-level metadata for the JSON:API response |
| [`modify_conn`](#json_api-routes-base_route-relationship-modify_conn){: #json_api-routes-base_route-relationship-modify_conn } | `(any, any, any, any -> any)` | | A function to modify the conn before responding. Used for things like setting headers based on the response. Takes `conn, subject, result, request`. See the modify_conn guide for more details and examples. |
| [`query_params`](#json_api-routes-base_route-relationship-query_params){: #json_api-routes-base_route-relationship-query_params } | `list(atom)` | `[]` | A list of action inputs to accept as query parameters. |
| [`action_names_in_schema`](#json_api-routes-base_route-relationship-action_names_in_schema){: #json_api-routes-base_route-relationship-action_names_in_schema } | `keyword` | | A mapping of action names to how they should appear in the OpenAPI schema. You only need to set this if you see a warning during schema generation. |
| [`name`](#json_api-routes-base_route-relationship-name){: #json_api-routes-base_route-relationship-name } | `String.t` | | A globally unique name for this route, to be used when generating docs and open api specifications |
| [`description`](#json_api-routes-base_route-relationship-description){: #json_api-routes-base_route-relationship-description } | `String.t` | | A human-friendly description of this specific route to use in generated documentation and OpenAPI. If provided, this overrides the action description. |
| [`derive_sort?`](#json_api-routes-base_route-relationship-derive_sort?){: #json_api-routes-base_route-relationship-derive_sort? } | `boolean` | `true` | Whether or not to derive a sort parameter based on the sortable fields of the resource |
| [`derive_filter?`](#json_api-routes-base_route-relationship-derive_filter?){: #json_api-routes-base_route-relationship-derive_filter? } | `boolean` | `true` | Whether or not to derive a filter parameter based on the sortable fields of the resource |
| [`path_param_is_composite_key`](#json_api-routes-base_route-relationship-path_param_is_composite_key){: #json_api-routes-base_route-relationship-path_param_is_composite_key } | `atom` | | The path parameter that should be parsed as a composite primary key. When specified (e.g., :id), the parameter will be split using the resource's primary key delimiter and mapped to individual primary key fields. This is required for resources with composite primary keys to work correctly with GET, PATCH, and DELETE operations. See the composite primary keys documentation for more details. |
### Introspection
Target: `AshJsonApi.Resource.Route`
### json_api.routes.base_route.post_to_relationship
```elixir
post_to_relationship resource \\ nil, relationship
```
A POST route to create related entities using resource identifiers
### Examples
```
post_to_relationship :comments
```
### Arguments
| Name | Type | Default | Docs |
|------|------|---------|------|
| [`resource`](#json_api-routes-base_route-post_to_relationship-resource){: #json_api-routes-base_route-post_to_relationship-resource } | `module` | | The resource that the route's action is defined on |
| [`relationship`](#json_api-routes-base_route-post_to_relationship-relationship){: #json_api-routes-base_route-post_to_relationship-relationship .spark-required} | `atom` | | |
### Options
| Name | Type | Default | Docs |
|------|------|---------|------|
| [`route`](#json_api-routes-base_route-post_to_relationship-route){: #json_api-routes-base_route-post_to_relationship-route } | `String.t` | | The path of the route - Defaults to /:id/relationships/[relationship_name] |
| [`default_fields`](#json_api-routes-base_route-post_to_relationship-default_fields){: #json_api-routes-base_route-post_to_relationship-default_fields } | `list(atom)` | | A list of fields to be shown in the attributes of the called route |
| [`primary?`](#json_api-routes-base_route-post_to_relationship-primary?){: #json_api-routes-base_route-post_to_relationship-primary? } | `boolean` | `false` | Whether or not this is the route that should be linked to by default when rendering links to this type of route |
| [`metadata`](#json_api-routes-base_route-post_to_relationship-metadata){: #json_api-routes-base_route-post_to_relationship-metadata } | `(any, any, any -> any)` | | A function to generate arbitrary top-level metadata for the JSON:API response |
| [`modify_conn`](#json_api-routes-base_route-post_to_relationship-modify_conn){: #json_api-routes-base_route-post_to_relationship-modify_conn } | `(any, any, any, any -> any)` | | A function to modify the conn before responding. Used for things like setting headers based on the response. Takes `conn, subject, result, request`. See the modify_conn guide for more details and examples. |
| [`query_params`](#json_api-routes-base_route-post_to_relationship-query_params){: #json_api-routes-base_route-post_to_relationship-query_params } | `list(atom)` | `[]` | A list of action inputs to accept as query parameters. |
| [`action_names_in_schema`](#json_api-routes-base_route-post_to_relationship-action_names_in_schema){: #json_api-routes-base_route-post_to_relationship-action_names_in_schema } | `keyword` | | A mapping of action names to how they should appear in the OpenAPI schema. You only need to set this if you see a warning during schema generation. |
| [`name`](#json_api-routes-base_route-post_to_relationship-name){: #json_api-routes-base_route-post_to_relationship-name } | `String.t` | | A globally unique name for this route, to be used when generating docs and open api specifications |
| [`description`](#json_api-routes-base_route-post_to_relationship-description){: #json_api-routes-base_route-post_to_relationship-description } | `String.t` | | A human-friendly description of this specific route to use in generated documentation and OpenAPI. If provided, this overrides the action description. |
| [`derive_sort?`](#json_api-routes-base_route-post_to_relationship-derive_sort?){: #json_api-routes-base_route-post_to_relationship-derive_sort? } | `boolean` | `true` | Whether or not to derive a sort parameter based on the sortable fields of the resource |
| [`derive_filter?`](#json_api-routes-base_route-post_to_relationship-derive_filter?){: #json_api-routes-base_route-post_to_relationship-derive_filter? } | `boolean` | `true` | Whether or not to derive a filter parameter based on the sortable fields of the resource |
| [`path_param_is_composite_key`](#json_api-routes-base_route-post_to_relationship-path_param_is_composite_key){: #json_api-routes-base_route-post_to_relationship-path_param_is_composite_key } | `atom` | | The path parameter that should be parsed as a composite primary key. When specified (e.g., :id), the parameter will be split using the resource's primary key delimiter and mapped to individual primary key fields. This is required for resources with composite primary keys to work correctly with GET, PATCH, and DELETE operations. See the composite primary keys documentation for more details. |
### Introspection
Target: `AshJsonApi.Resource.Route`
### json_api.routes.base_route.patch_relationship
```elixir
patch_relationship resource \\ nil, relationship
```
A PATCH route to update a relationship using resource identifiers
### Examples
```
patch_relationship :comments
```
### Arguments
| Name | Type | Default | Docs |
|------|------|---------|------|
| [`resource`](#json_api-routes-base_route-patch_relationship-resource){: #json_api-routes-base_route-patch_relationship-resource } | `module` | | The resource that the route's action is defined on |
| [`relationship`](#json_api-routes-base_route-patch_relationship-relationship){: #json_api-routes-base_route-patch_relationship-relationship .spark-required} | `atom` | | |
### Options
| Name | Type | Default | Docs |
|------|------|---------|------|
| [`route`](#json_api-routes-base_route-patch_relationship-route){: #json_api-routes-base_route-patch_relationship-route } | `String.t` | | The path of the route - Defaults to /:id/relationships/[relationship_name] |
| [`default_fields`](#json_api-routes-base_route-patch_relationship-default_fields){: #json_api-routes-base_route-patch_relationship-default_fields } | `list(atom)` | | A list of fields to be shown in the attributes of the called route |
| [`primary?`](#json_api-routes-base_route-patch_relationship-primary?){: #json_api-routes-base_route-patch_relationship-primary? } | `boolean` | `false` | Whether or not this is the route that should be linked to by default when rendering links to this type of route |
| [`metadata`](#json_api-routes-base_route-patch_relationship-metadata){: #json_api-routes-base_route-patch_relationship-metadata } | `(any, any, any -> any)` | | A function to generate arbitrary top-level metadata for the JSON:API response |
| [`modify_conn`](#json_api-routes-base_route-patch_relationship-modify_conn){: #json_api-routes-base_route-patch_relationship-modify_conn } | `(any, any, any, any -> any)` | | A function to modify the conn before responding. Used for things like setting headers based on the response. Takes `conn, subject, result, request`. See the modify_conn guide for more details and examples. |
| [`query_params`](#json_api-routes-base_route-patch_relationship-query_params){: #json_api-routes-base_route-patch_relationship-query_params } | `list(atom)` | `[]` | A list of action inputs to accept as query parameters. |
| [`action_names_in_schema`](#json_api-routes-base_route-patch_relationship-action_names_in_schema){: #json_api-routes-base_route-patch_relationship-action_names_in_schema } | `keyword` | | A mapping of action names to how they should appear in the OpenAPI schema. You only need to set this if you see a warning during schema generation. |
| [`name`](#json_api-routes-base_route-patch_relationship-name){: #json_api-routes-base_route-patch_relationship-name } | `String.t` | | A globally unique name for this route, to be used when generating docs and open api specifications |
| [`description`](#json_api-routes-base_route-patch_relationship-description){: #json_api-routes-base_route-patch_relationship-description } | `String.t` | | A human-friendly description of this specific route to use in generated documentation and OpenAPI. If provided, this overrides the action description. |
| [`derive_sort?`](#json_api-routes-base_route-patch_relationship-derive_sort?){: #json_api-routes-base_route-patch_relationship-derive_sort? } | `boolean` | `true` | Whether or not to derive a sort parameter based on the sortable fields of the resource |
| [`derive_filter?`](#json_api-routes-base_route-patch_relationship-derive_filter?){: #json_api-routes-base_route-patch_relationship-derive_filter? } | `boolean` | `true` | Whether or not to derive a filter parameter based on the sortable fields of the resource |
| [`path_param_is_composite_key`](#json_api-routes-base_route-patch_relationship-path_param_is_composite_key){: #json_api-routes-base_route-patch_relationship-path_param_is_composite_key } | `atom` | | The path parameter that should be parsed as a composite primary key. When specified (e.g., :id), the parameter will be split using the resource's primary key delimiter and mapped to individual primary key fields. This is required for resources with composite primary keys to work correctly with GET, PATCH, and DELETE operations. See the composite primary keys documentation for more details. |
### Introspection
Target: `AshJsonApi.Resource.Route`
### json_api.routes.base_route.delete_from_relationship
```elixir
delete_from_relationship resource \\ nil, relationship
```
A DELETE route to remove related entities using resource identifiers
### Examples
```
delete_from_relationship :comments
```
### Arguments
| Name | Type | Default | Docs |
|------|------|---------|------|
| [`resource`](#json_api-routes-base_route-delete_from_relationship-resource){: #json_api-routes-base_route-delete_from_relationship-resource } | `module` | | The resource that the route's action is defined on |
| [`relationship`](#json_api-routes-base_route-delete_from_relationship-relationship){: #json_api-routes-base_route-delete_from_relationship-relationship .spark-required} | `atom` | | |
### Options
| Name | Type | Default | Docs |
|------|------|---------|------|
| [`route`](#json_api-routes-base_route-delete_from_relationship-route){: #json_api-routes-base_route-delete_from_relationship-route } | `String.t` | | The path of the route - Defaults to /:id/relationships/[relationship_name] |
| [`default_fields`](#json_api-routes-base_route-delete_from_relationship-default_fields){: #json_api-routes-base_route-delete_from_relationship-default_fields } | `list(atom)` | | A list of fields to be shown in the attributes of the called route |
| [`primary?`](#json_api-routes-base_route-delete_from_relationship-primary?){: #json_api-routes-base_route-delete_from_relationship-primary? } | `boolean` | `false` | Whether or not this is the route that should be linked to by default when rendering links to this type of route |
| [`metadata`](#json_api-routes-base_route-delete_from_relationship-metadata){: #json_api-routes-base_route-delete_from_relationship-metadata } | `(any, any, any -> any)` | | A function to generate arbitrary top-level metadata for the JSON:API response |
| [`modify_conn`](#json_api-routes-base_route-delete_from_relationship-modify_conn){: #json_api-routes-base_route-delete_from_relationship-modify_conn } | `(any, any, any, any -> any)` | | A function to modify the conn before responding. Used for things like setting headers based on the response. Takes `conn, subject, result, request`. See the modify_conn guide for more details and examples. |
| [`query_params`](#json_api-routes-base_route-delete_from_relationship-query_params){: #json_api-routes-base_route-delete_from_relationship-query_params } | `list(atom)` | `[]` | A list of action inputs to accept as query parameters. |
| [`action_names_in_schema`](#json_api-routes-base_route-delete_from_relationship-action_names_in_schema){: #json_api-routes-base_route-delete_from_relationship-action_names_in_schema } | `keyword` | | A mapping of action names to how they should appear in the OpenAPI schema. You only need to set this if you see a warning during schema generation. |
| [`name`](#json_api-routes-base_route-delete_from_relationship-name){: #json_api-routes-base_route-delete_from_relationship-name } | `String.t` | | A globally unique name for this route, to be used when generating docs and open api specifications |
| [`description`](#json_api-routes-base_route-delete_from_relationship-description){: #json_api-routes-base_route-delete_from_relationship-description } | `String.t` | | A human-friendly description of this specific route to use in generated documentation and OpenAPI. If provided, this overrides the action description. |
| [`derive_sort?`](#json_api-routes-base_route-delete_from_relationship-derive_sort?){: #json_api-routes-base_route-delete_from_relationship-derive_sort? } | `boolean` | `true` | Whether or not to derive a sort parameter based on the sortable fields of the resource |
| [`derive_filter?`](#json_api-routes-base_route-delete_from_relationship-derive_filter?){: #json_api-routes-base_route-delete_from_relationship-derive_filter? } | `boolean` | `true` | Whether or not to derive a filter parameter based on the sortable fields of the resource |
| [`path_param_is_composite_key`](#json_api-routes-base_route-delete_from_relationship-path_param_is_composite_key){: #json_api-routes-base_route-delete_from_relationship-path_param_is_composite_key } | `atom` | | The path parameter that should be parsed as a composite primary key. When specified (e.g., :id), the parameter will be split using the resource's primary key delimiter and mapped to individual primary key fields. This is required for resources with composite primary keys to work correctly with GET, PATCH, and DELETE operations. See the composite primary keys documentation for more details. |
### Introspection
Target: `AshJsonApi.Resource.Route`
### json_api.routes.base_route.route
```elixir
route resource \\ nil, method, route, action
```
A route for a generic action.
### Examples
```
route :get, "say_hi/:name", :say_hello
```
### Arguments
| Name | Type | Default | Docs |
|------|------|---------|------|
| [`resource`](#json_api-routes-base_route-route-resource){: #json_api-routes-base_route-route-resource } | `module` | | The resource that the route's action is defined on |
| [`method`](#json_api-routes-base_route-route-method){: #json_api-routes-base_route-route-method .spark-required} | `atom` | | The HTTP method for the route, e.g `:get`, or `:post` |
| [`route`](#json_api-routes-base_route-route-route){: #json_api-routes-base_route-route-route .spark-required} | `String.t` | | The path of the route |
| [`action`](#json_api-routes-base_route-route-action){: #json_api-routes-base_route-route-action .spark-required} | `atom` | | The action to call when this route is hit |
### Options
| Name | Type | Default | Docs |
|------|------|---------|------|
| [`wrap_in_result?`](#json_api-routes-base_route-route-wrap_in_result?){: #json_api-routes-base_route-route-wrap_in_result? } | `boolean` | `false` | Whether or not the action result should be wrapped in `{result: <result>}` |
| [`default_fields`](#json_api-routes-base_route-route-default_fields){: #json_api-routes-base_route-route-default_fields } | `list(atom)` | | A list of fields to be shown in the attributes of the called route |
| [`primary?`](#json_api-routes-base_route-route-primary?){: #json_api-routes-base_route-route-primary? } | `boolean` | `false` | Whether or not this is the route that should be linked to by default when rendering links to this type of route |
| [`metadata`](#json_api-routes-base_route-route-metadata){: #json_api-routes-base_route-route-metadata } | `(any, any, any -> any)` | | A function to generate arbitrary top-level metadata for the JSON:API response |
| [`modify_conn`](#json_api-routes-base_route-route-modify_conn){: #json_api-routes-base_route-route-modify_conn } | `(any, any, any, any -> any)` | | A function to modify the conn before responding. Used for things like setting headers based on the response. Takes `conn, subject, result, request`. See the modify_conn guide for more details and examples. |
| [`query_params`](#json_api-routes-base_route-route-query_params){: #json_api-routes-base_route-route-query_params } | `list(atom)` | `[]` | A list of action inputs to accept as query parameters. |
| [`action_names_in_schema`](#json_api-routes-base_route-route-action_names_in_schema){: #json_api-routes-base_route-route-action_names_in_schema } | `keyword` | | A mapping of action names to how they should appear in the OpenAPI schema. You only need to set this if you see a warning during schema generation. |
| [`name`](#json_api-routes-base_route-route-name){: #json_api-routes-base_route-route-name } | `String.t` | | A globally unique name for this route, to be used when generating docs and open api specifications |
| [`description`](#json_api-routes-base_route-route-description){: #json_api-routes-base_route-route-description } | `String.t` | | A human-friendly description of this specific route to use in generated documentation and OpenAPI. If provided, this overrides the action description. |
| [`derive_sort?`](#json_api-routes-base_route-route-derive_sort?){: #json_api-routes-base_route-route-derive_sort? } | `boolean` | `true` | Whether or not to derive a sort parameter based on the sortable fields of the resource |
| [`derive_filter?`](#json_api-routes-base_route-route-derive_filter?){: #json_api-routes-base_route-route-derive_filter? } | `boolean` | `true` | Whether or not to derive a filter parameter based on the sortable fields of the resource |
| [`path_param_is_composite_key`](#json_api-routes-base_route-route-path_param_is_composite_key){: #json_api-routes-base_route-route-path_param_is_composite_key } | `atom` | | The path parameter that should be parsed as a composite primary key. When specified (e.g., :id), the parameter will be split using the resource's primary key delimiter and mapped to individual primary key fields. This is required for resources with composite primary keys to work correctly with GET, PATCH, and DELETE operations. See the composite primary keys documentation for more details. |
### Introspection
Target: `AshJsonApi.Resource.Route`
### Introspection
Target: `AshJsonApi.Domain.BaseRoute`
### json_api.routes.get
```elixir
get resource, action
```
A GET route to retrieve a single record
### Examples
```
get :read
```
```
get :read, path_param_is_composite_key: :id
```
### Arguments
| Name | Type | Default | Docs |
|------|------|---------|------|
| [`resource`](#json_api-routes-get-resource){: #json_api-routes-get-resource } | `module` | | The resource that the route's action is defined on |
| [`action`](#json_api-routes-get-action){: #json_api-routes-get-action .spark-required} | `atom` | | The action to call when this route is hit |
### Options
| Name | Type | Default | Docs |
|------|------|---------|------|
| [`route`](#json_api-routes-get-route){: #json_api-routes-get-route } | `String.t` | `"/:id"` | The path of the route |
| [`default_fields`](#json_api-routes-get-default_fields){: #json_api-routes-get-default_fields } | `list(atom)` | | A list of fields to be shown in the attributes of the called route |
| [`primary?`](#json_api-routes-get-primary?){: #json_api-routes-get-primary? } | `boolean` | `false` | Whether or not this is the route that should be linked to by default when rendering links to this type of route |
| [`metadata`](#json_api-routes-get-metadata){: #json_api-routes-get-metadata } | `(any, any, any -> any)` | | A function to generate arbitrary top-level metadata for the JSON:API response |
| [`modify_conn`](#json_api-routes-get-modify_conn){: #json_api-routes-get-modify_conn } | `(any, any, any, any -> any)` | | A function to modify the conn before responding. Used for things like setting headers based on the response. Takes `conn, subject, result, request`. See the modify_conn guide for more details and examples. |
| [`action_names_in_schema`](#json_api-routes-get-action_names_in_schema){: #json_api-routes-get-action_names_in_schema } | `keyword` | | A mapping of action names to how they should appear in the OpenAPI schema. You only need to set this if you see a warning during schema generation. |
| [`name`](#json_api-routes-get-name){: #json_api-routes-get-name } | `String.t` | | A globally unique name for this route, to be used when generating docs and open api specifications |
| [`description`](#json_api-routes-get-description){: #json_api-routes-get-description } | `String.t` | | A human-friendly description of this specific route to use in generated documentation and OpenAPI. If provided, this overrides the action description. |
| [`derive_sort?`](#json_api-routes-get-derive_sort?){: #json_api-routes-get-derive_sort? } | `boolean` | `true` | Whether or not to derive a sort parameter based on the sortable fields of the resource |
| [`derive_filter?`](#json_api-routes-get-derive_filter?){: #json_api-routes-get-derive_filter? } | `boolean` | `true` | Whether or not to derive a filter parameter based on the sortable fields of the resource |
| [`path_param_is_composite_key`](#json_api-routes-get-path_param_is_composite_key){: #json_api-routes-get-path_param_is_composite_key } | `atom` | | The path parameter that should be parsed as a composite primary key. When specified (e.g., :id), the parameter will be split using the resource's primary key delimiter and mapped to individual primary key fields. This is required for resources with composite primary keys to work correctly with GET, PATCH, and DELETE operations. See the composite primary keys documentation for more details. |
### Introspection
Target: `AshJsonApi.Resource.Route`
### json_api.routes.index
```elixir
index resource, action
```
A GET route to retrieve a list of records
### Examples
```
index :read
```
### Arguments
| Name | Type | Default | Docs |
|------|------|---------|------|
| [`resource`](#json_api-routes-index-resource){: #json_api-routes-index-resource } | `module` | | The resource that the route's action is defined on |
| [`action`](#json_api-routes-index-action){: #json_api-routes-index-action .spark-required} | `atom` | | The action to call when this route is hit |
### Options
| Name | Type | Default | Docs |
|------|------|---------|------|
| [`paginate?`](#json_api-routes-index-paginate?){: #json_api-routes-index-paginate? } | `boolean` | `true` | |
| [`route`](#json_api-routes-index-route){: #json_api-routes-index-route } | `String.t` | `"/"` | The path of the route |
| [`default_fields`](#json_api-routes-index-default_fields){: #json_api-routes-index-default_fields } | `list(atom)` | | A list of fields to be shown in the attributes of the called route |
| [`primary?`](#json_api-routes-index-primary?){: #json_api-routes-index-primary? } | `boolean` | `false` | Whether or not this is the route that should be linked to by default when rendering links to this type of route |
| [`metadata`](#json_api-routes-index-metadata){: #json_api-routes-index-metadata } | `(any, any, any -> any)` | | A function to generate arbitrary top-level metadata for the JSON:API response |
| [`modify_conn`](#json_api-routes-index-modify_conn){: #json_api-routes-index-modify_conn } | `(any, any, any, any -> any)` | | A function to modify the conn before responding. Used for things like setting headers based on the response. Takes `conn, subject, result, request`. See the modify_conn guide for more details and examples. |
| [`action_names_in_schema`](#json_api-routes-index-action_names_in_schema){: #json_api-routes-index-action_names_in_schema } | `keyword` | | A mapping of action names to how they should appear in the OpenAPI schema. You only need to set this if you see a warning during schema generation. |
| [`name`](#json_api-routes-index-name){: #json_api-routes-index-name } | `String.t` | | A globally unique name for this route, to be used when generating docs and open api specifications |
| [`description`](#json_api-routes-index-description){: #json_api-routes-index-description } | `String.t` | | A human-friendly description of this specific route to use in generated documentation and OpenAPI. If provided, this overrides the action description. |
| [`derive_sort?`](#json_api-routes-index-derive_sort?){: #json_api-routes-index-derive_sort? } | `boolean` | `true` | Whether or not to derive a sort parameter based on the sortable fields of the resource |
| [`derive_filter?`](#json_api-routes-index-derive_filter?){: #json_api-routes-index-derive_filter? } | `boolean` | `true` | Whether or not to derive a filter parameter based on the sortable fields of the resource |
| [`path_param_is_composite_key`](#json_api-routes-index-path_param_is_composite_key){: #json_api-routes-index-path_param_is_composite_key } | `atom` | | The path parameter that should be parsed as a composite primary key. When specified (e.g., :id), the parameter will be split using the resource's primary key delimiter and mapped to individual primary key fields. This is required for resources with composite primary keys to work correctly with GET, PATCH, and DELETE operations. See the composite primary keys documentation for more details. |
### Introspection
Target: `AshJsonApi.Resource.Route`
### json_api.routes.post
```elixir
post resource, action
```
A POST route to create a record
### Examples
```
post :create
```
### Arguments
| Name | Type | Default | Docs |
|------|------|---------|------|
| [`resource`](#json_api-routes-post-resource){: #json_api-routes-post-resource } | `module` | | The resource that the route's action is defined on |
| [`action`](#json_api-routes-post-action){: #json_api-routes-post-action .spark-required} | `atom` | | The action to call when this route is hit |
### Options
| Name | Type | Default | Docs |
|------|------|---------|------|
| [`route`](#json_api-routes-post-route){: #json_api-routes-post-route } | `String.t` | `"/"` | The path of the route |
| [`default_fields`](#json_api-routes-post-default_fields){: #json_api-routes-post-default_fields } | `list(atom)` | | A list of fields to be shown in the attributes of the called route |
| [`primary?`](#json_api-routes-post-primary?){: #json_api-routes-post-primary? } | `boolean` | `false` | Whether or not this is the route that should be linked to by default when rendering links to this type of route |
| [`metadata`](#json_api-routes-post-metadata){: #json_api-routes-post-metadata } | `(any, any, any -> any)` | | A function to generate arbitrary top-level metadata for the JSON:API response |
| [`modify_conn`](#json_api-routes-post-modify_conn){: #json_api-routes-post-modify_conn } | `(any, any, any, any -> any)` | | A function to modify the conn before responding. Used for things like setting headers based on the response. Takes `conn, subject, result, request`. See the modify_conn guide for more details and examples. |
| [`query_params`](#json_api-routes-post-query_params){: #json_api-routes-post-query_params } | `list(atom)` | `[]` | A list of action inputs to accept as query parameters. |
| [`action_names_in_schema`](#json_api-routes-post-action_names_in_schema){: #json_api-routes-post-action_names_in_schema } | `keyword` | | A mapping of action names to how they should appear in the OpenAPI schema. You only need to set this if you see a warning during schema generation. |
| [`name`](#json_api-routes-post-name){: #json_api-routes-post-name } | `String.t` | | A globally unique name for this route, to be used when generating docs and open api specifications |
| [`description`](#json_api-routes-post-description){: #json_api-routes-post-description } | `String.t` | | A human-friendly description of this specific route to use in generated documentation and OpenAPI. If provided, this overrides the action description. |
| [`derive_sort?`](#json_api-routes-post-derive_sort?){: #json_api-routes-post-derive_sort? } | `boolean` | `true` | Whether or not to derive a sort parameter based on the sortable fields of the resource |
| [`derive_filter?`](#json_api-routes-post-derive_filter?){: #json_api-routes-post-derive_filter? } | `boolean` | `true` | Whether or not to derive a filter parameter based on the sortable fields of the resource |
| [`path_param_is_composite_key`](#json_api-routes-post-path_param_is_composite_key){: #json_api-routes-post-path_param_is_composite_key } | `atom` | | The path parameter that should be parsed as a composite primary key. When specified (e.g., :id), the parameter will be split using the resource's primary key delimiter and mapped to individual primary key fields. This is required for resources with composite primary keys to work correctly with GET, PATCH, and DELETE operations. See the composite primary keys documentation for more details. |
| [`relationship_arguments`](#json_api-routes-post-relationship_arguments){: #json_api-routes-post-relationship_arguments } | `list(atom \| {:id, atom})` | `[]` | Arguments to be used to edit relationships. See the [relationships guide](/documentation/topics/relationships.md) for more. |
| [`upsert?`](#json_api-routes-post-upsert?){: #json_api-routes-post-upsert? } | `boolean` | `false` | Whether or not to use the `upsert?: true` option when calling `Ash.create/2`. |
| [`upsert_identity`](#json_api-routes-post-upsert_identity){: #json_api-routes-post-upsert_identity } | `atom` | `false` | Which identity to use for the upsert |
### Introspection
Target: `AshJsonApi.Resource.Route`
### json_api.routes.patch
```elixir
patch resource, action
```
A PATCH route to update a record
### Examples
```
patch :update
```
```
patch :update, path_param_is_composite_key: :id
```
### Arguments
| Name | Type | Default | Docs |
|------|------|---------|------|
| [`resource`](#json_api-routes-patch-resource){: #json_api-routes-patch-resource } | `module` | | The resource that the route's action is defined on |
| [`action`](#json_api-routes-patch-action){: #json_api-routes-patch-action .spark-required} | `atom` | | The action to call when this route is hit |
### Options
| Name | Type | Default | Docs |
|------|------|---------|------|
| [`relationship_arguments`](#json_api-routes-patch-relationship_arguments){: #json_api-routes-patch-relationship_arguments } | `any` | `[]` | Arguments to be used to edit relationships. See the [relationships guide](/documentation/topics/relationships.md) for more. |
| [`read_action`](#json_api-routes-patch-read_action){: #json_api-routes-patch-read_action } | `atom` | | The read action to use to look the record up before updating |
| [`route`](#json_api-routes-patch-route){: #json_api-routes-patch-route } | `String.t` | `"/:id"` | The path of the route |
| [`default_fields`](#json_api-routes-patch-default_fields){: #json_api-routes-patch-default_fields } | `list(atom)` | | A list of fields to be shown in the attributes of the called route |
| [`primary?`](#json_api-routes-patch-primary?){: #json_api-routes-patch-primary? } | `boolean` | `false` | Whether or not this is the route that should be linked to by default when rendering links to this type of route |
| [`metadata`](#json_api-routes-patch-metadata){: #json_api-routes-patch-metadata } | `(any, any, any -> any)` | | A function to generate arbitrary top-level metadata for the JSON:API response |
| [`modify_conn`](#json_api-routes-patch-modify_conn){: #json_api-routes-patch-modify_conn } | `(any, any, any, any -> any)` | | A function to modify the conn before responding. Used for things like setting headers based on the response. Takes `conn, subject, result, request`. See the modify_conn guide for more details and examples. |
| [`query_params`](#json_api-routes-patch-query_params){: #json_api-routes-patch-query_params } | `list(atom)` | `[]` | A list of action inputs to accept as query parameters. |
| [`action_names_in_schema`](#json_api-routes-patch-action_names_in_schema){: #json_api-routes-patch-action_names_in_schema } | `keyword` | | A mapping of action names to how they should appear in the OpenAPI schema. You only need to set this if you see a warning during schema generation. |
| [`name`](#json_api-routes-patch-name){: #json_api-routes-patch-name } | `String.t` | | A globally unique name for this route, to be used when generating docs and open api specifications |
| [`description`](#json_api-routes-patch-description){: #json_api-routes-patch-description } | `String.t` | | A human-friendly description of this specific route to use in generated documentation and OpenAPI. If provided, this overrides the action description. |
| [`derive_sort?`](#json_api-routes-patch-derive_sort?){: #json_api-routes-patch-derive_sort? } | `boolean` | `true` | Whether or not to derive a sort parameter based on the sortable fields of the resource |
| [`derive_filter?`](#json_api-routes-patch-derive_filter?){: #json_api-routes-patch-derive_filter? } | `boolean` | `true` | Whether or not to derive a filter parameter based on the sortable fields of the resource |
| [`path_param_is_composite_key`](#json_api-routes-patch-path_param_is_composite_key){: #json_api-routes-patch-path_param_is_composite_key } | `atom` | | The path parameter that should be parsed as a composite primary key. When specified (e.g., :id), the parameter will be split using the resource's primary key delimiter and mapped to individual primary key fields. This is required for resources with composite primary keys to work correctly with GET, PATCH, and DELETE operations. See the composite primary keys documentation for more details. |
### Introspection
Target: `AshJsonApi.Resource.Route`
### json_api.routes.delete
```elixir
delete resource, action
```
A DELETE route to destroy a record
### Examples
```
delete :destroy
```
```
delete :destroy, path_param_is_composite_key: :id
```
### Arguments
| Name | Type | Default | Docs |
|------|------|---------|------|
| [`resource`](#json_api-routes-delete-resource){: #json_api-routes-delete-resource } | `module` | | The resource that the route's action is defined on |
| [`action`](#json_api-routes-delete-action){: #json_api-routes-delete-action .spark-required} | `atom` | | The action to call when this route is hit |
### Options
| Name | Type | Default | Docs |
|------|------|---------|------|
| [`read_action`](#json_api-routes-delete-read_action){: #json_api-routes-delete-read_action } | `atom` | | The read action to use to look the record up before updating |
| [`route`](#json_api-routes-delete-route){: #json_api-routes-delete-route } | `String.t` | `"/:id"` | The path of the route |
| [`default_fields`](#json_api-routes-delete-default_fields){: #json_api-routes-delete-default_fields } | `list(atom)` | | A list of fields to be shown in the attributes of the called route |
| [`primary?`](#json_api-routes-delete-primary?){: #json_api-routes-delete-primary? } | `boolean` | `false` | Whether or not this is the route that should be linked to by default when rendering links to this type of route |
| [`metadata`](#json_api-routes-delete-metadata){: #json_api-routes-delete-metadata } | `(any, any, any -> any)` | | A function to generate arbitrary top-level metadata for the JSON:API response |
| [`modify_conn`](#json_api-routes-delete-modify_conn){: #json_api-routes-delete-modify_conn } | `(any, any, any, any -> any)` | | A function to modify the conn before responding. Used for things like setting headers based on the response. Takes `conn, subject, result, request`. See the modify_conn guide for more details and examples. |
| [`query_params`](#json_api-routes-delete-query_params){: #json_api-routes-delete-query_params } | `list(atom)` | `[]` | A list of action inputs to accept as query parameters. |
| [`action_names_in_schema`](#json_api-routes-delete-action_names_in_schema){: #json_api-routes-delete-action_names_in_schema } | `keyword` | | A mapping of action names to how they should appear in the OpenAPI schema. You only need to set this if you see a warning during schema generation. |
| [`name`](#json_api-routes-delete-name){: #json_api-routes-delete-name } | `String.t` | | A globally unique name for this route, to be used when generating docs and open api specifications |
| [`description`](#json_api-routes-delete-description){: #json_api-routes-delete-description } | `String.t` | | A human-friendly description of this specific route to use in generated documentation and OpenAPI. If provided, this overrides the action description. |
| [`derive_sort?`](#json_api-routes-delete-derive_sort?){: #json_api-routes-delete-derive_sort? } | `boolean` | `true` | Whether or not to derive a sort parameter based on the sortable fields of the resource |
| [`derive_filter?`](#json_api-routes-delete-derive_filter?){: #json_api-routes-delete-derive_filter? } | `boolean` | `true` | Whether or not to derive a filter parameter based on the sortable fields of the resource |
| [`path_param_is_composite_key`](#json_api-routes-delete-path_param_is_composite_key){: #json_api-routes-delete-path_param_is_composite_key } | `atom` | | The path parameter that should be parsed as a composite primary key. When specified (e.g., :id), the parameter will be split using the resource's primary key delimiter and mapped to individual primary key fields. This is required for resources with composite primary keys to work correctly with GET, PATCH, and DELETE operations. See the composite primary keys documentation for more details. |
### Introspection
Target: `AshJsonApi.Resource.Route`
### json_api.routes.related
```elixir
related resource, relationship, action
```
A GET route to read the related resources of a relationship
### Examples
```
related :comments, :read
```
### Arguments
| Name | Type | Default | Docs |
|------|------|---------|------|
| [`resource`](#json_api-routes-related-resource){: #json_api-routes-related-resource } | `module` | | The resource that the route's action is defined on |
| [`relationship`](#json_api-routes-related-relationship){: #json_api-routes-related-relationship .spark-required} | `atom` | | |
| [`action`](#json_api-routes-related-action){: #json_api-routes-related-action .spark-required} | `atom` | | The action to call when this route is hit |
### Options
| Name | Type | Default | Docs |
|------|------|---------|------|
| [`route`](#json_api-routes-related-route){: #json_api-routes-related-route } | `String.t` | | The path of the route - Defaults to /:id/[relationship_name] |
| [`default_fields`](#json_api-routes-related-default_fields){: #json_api-routes-related-default_fields } | `list(atom)` | | A list of fields to be shown in the attributes of the called route |
| [`primary?`](#json_api-routes-related-primary?){: #json_api-routes-related-primary? } | `boolean` | `false` | Whether or not this is the route that should be linked to by default when rendering links to this type of route |
| [`metadata`](#json_api-routes-related-metadata){: #json_api-routes-related-metadata } | `(any, any, any -> any)` | | A function to generate arbitrary top-level metadata for the JSON:API response |
| [`modify_conn`](#json_api-routes-related-modify_conn){: #json_api-routes-related-modify_conn } | `(any, any, any, any -> any)` | | A function to modify the conn before responding. Used for things like setting headers based on the response. Takes `conn, subject, result, request`. See the modify_conn guide for more details and examples. |
| [`query_params`](#json_api-routes-related-query_params){: #json_api-routes-related-query_params } | `list(atom)` | `[]` | A list of action inputs to accept as query parameters. |
| [`action_names_in_schema`](#json_api-routes-related-action_names_in_schema){: #json_api-routes-related-action_names_in_schema } | `keyword` | | A mapping of action names to how they should appear in the OpenAPI schema. You only need to set this if you see a warning during schema generation. |
| [`name`](#json_api-routes-related-name){: #json_api-routes-related-name } | `String.t` | | A globally unique name for this route, to be used when generating docs and open api specifications |
| [`description`](#json_api-routes-related-description){: #json_api-routes-related-description } | `String.t` | | A human-friendly description of this specific route to use in generated documentation and OpenAPI. If provided, this overrides the action description. |
| [`derive_sort?`](#json_api-routes-related-derive_sort?){: #json_api-routes-related-derive_sort? } | `boolean` | `true` | Whether or not to derive a sort parameter based on the sortable fields of the resource |
| [`derive_filter?`](#json_api-routes-related-derive_filter?){: #json_api-routes-related-derive_filter? } | `boolean` | `true` | Whether or not to derive a filter parameter based on the sortable fields of the resource |
| [`path_param_is_composite_key`](#json_api-routes-related-path_param_is_composite_key){: #json_api-routes-related-path_param_is_composite_key } | `atom` | | The path parameter that should be parsed as a composite primary key. When specified (e.g., :id), the parameter will be split using the resource's primary key delimiter and mapped to individual primary key fields. This is required for resources with composite primary keys to work correctly with GET, PATCH, and DELETE operations. See the composite primary keys documentation for more details. |
### Introspection
Target: `AshJsonApi.Resource.Route`
### json_api.routes.relationship
```elixir
relationship resource, relationship, action
```
A READ route to read the relationship, returns resource identifiers.
### Examples
```
relationship :comments, :read
```
### Arguments
| Name | Type | Default | Docs |
|------|------|---------|------|
| [`resource`](#json_api-routes-relationship-resource){: #json_api-routes-relationship-resource } | `module` | | The resource that the route's action is defined on |
| [`relationship`](#json_api-routes-relationship-relationship){: #json_api-routes-relationship-relationship .spark-required} | `atom` | | |
| [`action`](#json_api-routes-relationship-action){: #json_api-routes-relationship-action .spark-required} | `atom` | | The action to call when this route is hit |
### Options
| Name | Type | Default | Docs |
|------|------|---------|------|
| [`route`](#json_api-routes-relationship-route){: #json_api-routes-relationship-route } | `String.t` | | The path of the route - Defaults to /:id/relationships/[relationship_name] |
| [`default_fields`](#json_api-routes-relationship-default_fields){: #json_api-routes-relationship-default_fields } | `list(atom)` | | A list of fields to be shown in the attributes of the called route |
| [`primary?`](#json_api-routes-relationship-primary?){: #json_api-routes-relationship-primary? } | `boolean` | `false` | Whether or not this is the route that should be linked to by default when rendering links to this type of route |
| [`metadata`](#json_api-routes-relationship-metadata){: #json_api-routes-relationship-metadata } | `(any, any, any -> any)` | | A function to generate arbitrary top-level metadata for the JSON:API response |
| [`modify_conn`](#json_api-routes-relationship-modify_conn){: #json_api-routes-relationship-modify_conn } | `(any, any, any, any -> any)` | | A function to modify the conn before responding. Used for things like setting headers based on the response. Takes `conn, subject, result, request`. See the modify_conn guide for more details and examples. |
| [`query_params`](#json_api-routes-relationship-query_params){: #json_api-routes-relationship-query_params } | `list(atom)` | `[]` | A list of action inputs to accept as query parameters. |
| [`action_names_in_schema`](#json_api-routes-relationship-action_names_in_schema){: #json_api-routes-relationship-action_names_in_schema } | `keyword` | | A mapping of action names to how they should appear in the OpenAPI schema. You only need to set this if you see a warning during schema generation. |
| [`name`](#json_api-routes-relationship-name){: #json_api-routes-relationship-name } | `String.t` | | A globally unique name for this route, to be used when generating docs and open api specifications |
| [`description`](#json_api-routes-relationship-description){: #json_api-routes-relationship-description } | `String.t` | | A human-friendly description of this specific route to use in generated documentation and OpenAPI. If provided, this overrides the action description. |
| [`derive_sort?`](#json_api-routes-relationship-derive_sort?){: #json_api-routes-relationship-derive_sort? } | `boolean` | `true` | Whether or not to derive a sort parameter based on the sortable fields of the resource |
| [`derive_filter?`](#json_api-routes-relationship-derive_filter?){: #json_api-routes-relationship-derive_filter? } | `boolean` | `true` | Whether or not to derive a filter parameter based on the sortable fields of the resource |
| [`path_param_is_composite_key`](#json_api-routes-relationship-path_param_is_composite_key){: #json_api-routes-relationship-path_param_is_composite_key } | `atom` | | The path parameter that should be parsed as a composite primary key. When specified (e.g., :id), the parameter will be split using the resource's primary key delimiter and mapped to individual primary key fields. This is required for resources with composite primary keys to work correctly with GET, PATCH, and DELETE operations. See the composite primary keys documentation for more details. |
### Introspection
Target: `AshJsonApi.Resource.Route`
### json_api.routes.post_to_relationship
```elixir
post_to_relationship resource, relationship
```
A POST route to create related entities using resource identifiers
### Examples
```
post_to_relationship :comments
```
### Arguments
| Name | Type | Default | Docs |
|------|------|---------|------|
| [`resource`](#json_api-routes-post_to_relationship-resource){: #json_api-routes-post_to_relationship-resource } | `module` | | The resource that the route's action is defined on |
| [`relationship`](#json_api-routes-post_to_relationship-relationship){: #json_api-routes-post_to_relationship-relationship .spark-required} | `atom` | | |
### Options
| Name | Type | Default | Docs |
|------|------|---------|------|
| [`route`](#json_api-routes-post_to_relationship-route){: #json_api-routes-post_to_relationship-route } | `String.t` | | The path of the route - Defaults to /:id/relationships/[relationship_name] |
| [`default_fields`](#json_api-routes-post_to_relationship-default_fields){: #json_api-routes-post_to_relationship-default_fields } | `list(atom)` | | A list of fields to be shown in the attributes of the called route |
| [`primary?`](#json_api-routes-post_to_relationship-primary?){: #json_api-routes-post_to_relationship-primary? } | `boolean` | `false` | Whether or not this is the route that should be linked to by default when rendering links to this type of route |
| [`metadata`](#json_api-routes-post_to_relationship-metadata){: #json_api-routes-post_to_relationship-metadata } | `(any, any, any -> any)` | | A function to generate arbitrary top-level metadata for the JSON:API response |
| [`modify_conn`](#json_api-routes-post_to_relationship-modify_conn){: #json_api-routes-post_to_relationship-modify_conn } | `(any, any, any, any -> any)` | | A function to modify the conn before responding. Used for things like setting headers based on the response. Takes `conn, subject, result, request`. See the modify_conn guide for more details and examples. |
| [`query_params`](#json_api-routes-post_to_relationship-query_params){: #json_api-routes-post_to_relationship-query_params } | `list(atom)` | `[]` | A list of action inputs to accept as query parameters. |
| [`action_names_in_schema`](#json_api-routes-post_to_relationship-action_names_in_schema){: #json_api-routes-post_to_relationship-action_names_in_schema } | `keyword` | | A mapping of action names to how they should appear in the OpenAPI schema. You only need to set this if you see a warning during schema generation. |
| [`name`](#json_api-routes-post_to_relationship-name){: #json_api-routes-post_to_relationship-name } | `String.t` | | A globally unique name for this route, to be used when generating docs and open api specifications |
| [`description`](#json_api-routes-post_to_relationship-description){: #json_api-routes-post_to_relationship-description } | `String.t` | | A human-friendly description of this specific route to use in generated documentation and OpenAPI. If provided, this overrides the action description. |
| [`derive_sort?`](#json_api-routes-post_to_relationship-derive_sort?){: #json_api-routes-post_to_relationship-derive_sort? } | `boolean` | `true` | Whether or not to derive a sort parameter based on the sortable fields of the resource |
| [`derive_filter?`](#json_api-routes-post_to_relationship-derive_filter?){: #json_api-routes-post_to_relationship-derive_filter? } | `boolean` | `true` | Whether or not to derive a filter parameter based on the sortable fields of the resource |
| [`path_param_is_composite_key`](#json_api-routes-post_to_relationship-path_param_is_composite_key){: #json_api-routes-post_to_relationship-path_param_is_composite_key } | `atom` | | The path parameter that should be parsed as a composite primary key. When specified (e.g., :id), the parameter will be split using the resource's primary key delimiter and mapped to individual primary key fields. This is required for resources with composite primary keys to work correctly with GET, PATCH, and DELETE operations. See the composite primary keys documentation for more details. |
### Introspection
Target: `AshJsonApi.Resource.Route`
### json_api.routes.patch_relationship
```elixir
patch_relationship resource, relationship
```
A PATCH route to update a relationship using resource identifiers
### Examples
```
patch_relationship :comments
```
### Arguments
| Name | Type | Default | Docs |
|------|------|---------|------|
| [`resource`](#json_api-routes-patch_relationship-resource){: #json_api-routes-patch_relationship-resource } | `module` | | The resource that the route's action is defined on |
| [`relationship`](#json_api-routes-patch_relationship-relationship){: #json_api-routes-patch_relationship-relationship .spark-required} | `atom` | | |
### Options
| Name | Type | Default | Docs |
|------|------|---------|------|
| [`route`](#json_api-routes-patch_relationship-route){: #json_api-routes-patch_relationship-route } | `String.t` | | The path of the route - Defaults to /:id/relationships/[relationship_name] |
| [`default_fields`](#json_api-routes-patch_relationship-default_fields){: #json_api-routes-patch_relationship-default_fields } | `list(atom)` | | A list of fields to be shown in the attributes of the called route |
| [`primary?`](#json_api-routes-patch_relationship-primary?){: #json_api-routes-patch_relationship-primary? } | `boolean` | `false` | Whether or not this is the route that should be linked to by default when rendering links to this type of route |
| [`metadata`](#json_api-routes-patch_relationship-metadata){: #json_api-routes-patch_relationship-metadata } | `(any, any, any -> any)` | | A function to generate arbitrary top-level metadata for the JSON:API response |
| [`modify_conn`](#json_api-routes-patch_relationship-modify_conn){: #json_api-routes-patch_relationship-modify_conn } | `(any, any, any, any -> any)` | | A function to modify the conn before responding. Used for things like setting headers based on the response. Takes `conn, subject, result, request`. See the modify_conn guide for more details and examples. |
| [`query_params`](#json_api-routes-patch_relationship-query_params){: #json_api-routes-patch_relationship-query_params } | `list(atom)` | `[]` | A list of action inputs to accept as query parameters. |
| [`action_names_in_schema`](#json_api-routes-patch_relationship-action_names_in_schema){: #json_api-routes-patch_relationship-action_names_in_schema } | `keyword` | | A mapping of action names to how they should appear in the OpenAPI schema. You only need to set this if you see a warning during schema generation. |
| [`name`](#json_api-routes-patch_relationship-name){: #json_api-routes-patch_relationship-name } | `String.t` | | A globally unique name for this route, to be used when generating docs and open api specifications |
| [`description`](#json_api-routes-patch_relationship-description){: #json_api-routes-patch_relationship-description } | `String.t` | | A human-friendly description of this specific route to use in generated documentation and OpenAPI. If provided, this overrides the action description. |
| [`derive_sort?`](#json_api-routes-patch_relationship-derive_sort?){: #json_api-routes-patch_relationship-derive_sort? } | `boolean` | `true` | Whether or not to derive a sort parameter based on the sortable fields of the resource |
| [`derive_filter?`](#json_api-routes-patch_relationship-derive_filter?){: #json_api-routes-patch_relationship-derive_filter? } | `boolean` | `true` | Whether or not to derive a filter parameter based on the sortable fields of the resource |
| [`path_param_is_composite_key`](#json_api-routes-patch_relationship-path_param_is_composite_key){: #json_api-routes-patch_relationship-path_param_is_composite_key } | `atom` | | The path parameter that should be parsed as a composite primary key. When specified (e.g., :id), the parameter will be split using the resource's primary key delimiter and mapped to individual primary key fields. This is required for resources with composite primary keys to work correctly with GET, PATCH, and DELETE operations. See the composite primary keys documentation for more details. |
### Introspection
Target: `AshJsonApi.Resource.Route`
### json_api.routes.delete_from_relationship
```elixir
delete_from_relationship resource, relationship
```
A DELETE route to remove related entities using resource identifiers
### Examples
```
delete_from_relationship :comments
```
### Arguments
| Name | Type | Default | Docs |
|------|------|---------|------|
| [`resource`](#json_api-routes-delete_from_relationship-resource){: #json_api-routes-delete_from_relationship-resource } | `module` | | The resource that the route's action is defined on |
| [`relationship`](#json_api-routes-delete_from_relationship-relationship){: #json_api-routes-delete_from_relationship-relationship .spark-required} | `atom` | | |
### Options
| Name | Type | Default | Docs |
|------|------|---------|------|
| [`route`](#json_api-routes-delete_from_relationship-route){: #json_api-routes-delete_from_relationship-route } | `String.t` | | The path of the route - Defaults to /:id/relationships/[relationship_name] |
| [`default_fields`](#json_api-routes-delete_from_relationship-default_fields){: #json_api-routes-delete_from_relationship-default_fields } | `list(atom)` | | A list of fields to be shown in the attributes of the called route |
| [`primary?`](#json_api-routes-delete_from_relationship-primary?){: #json_api-routes-delete_from_relationship-primary? } | `boolean` | `false` | Whether or not this is the route that should be linked to by default when rendering links to this type of route |
| [`metadata`](#json_api-routes-delete_from_relationship-metadata){: #json_api-routes-delete_from_relationship-metadata } | `(any, any, any -> any)` | | A function to generate arbitrary top-level metadata for the JSON:API response |
| [`modify_conn`](#json_api-routes-delete_from_relationship-modify_conn){: #json_api-routes-delete_from_relationship-modify_conn } | `(any, any, any, any -> any)` | | A function to modify the conn before responding. Used for things like setting headers based on the response. Takes `conn, subject, result, request`. See the modify_conn guide for more details and examples. |
| [`query_params`](#json_api-routes-delete_from_relationship-query_params){: #json_api-routes-delete_from_relationship-query_params } | `list(atom)` | `[]` | A list of action inputs to accept as query parameters. |
| [`action_names_in_schema`](#json_api-routes-delete_from_relationship-action_names_in_schema){: #json_api-routes-delete_from_relationship-action_names_in_schema } | `keyword` | | A mapping of action names to how they should appear in the OpenAPI schema. You only need to set this if you see a warning during schema generation. |
| [`name`](#json_api-routes-delete_from_relationship-name){: #json_api-routes-delete_from_relationship-name } | `String.t` | | A globally unique name for this route, to be used when generating docs and open api specifications |
| [`description`](#json_api-routes-delete_from_relationship-description){: #json_api-routes-delete_from_relationship-description } | `String.t` | | A human-friendly description of this specific route to use in generated documentation and OpenAPI. If provided, this overrides the action description. |
| [`derive_sort?`](#json_api-routes-delete_from_relationship-derive_sort?){: #json_api-routes-delete_from_relationship-derive_sort? } | `boolean` | `true` | Whether or not to derive a sort parameter based on the sortable fields of the resource |
| [`derive_filter?`](#json_api-routes-delete_from_relationship-derive_filter?){: #json_api-routes-delete_from_relationship-derive_filter? } | `boolean` | `true` | Whether or not to derive a filter parameter based on the sortable fields of the resource |
| [`path_param_is_composite_key`](#json_api-routes-delete_from_relationship-path_param_is_composite_key){: #json_api-routes-delete_from_relationship-path_param_is_composite_key } | `atom` | | The path parameter that should be parsed as a composite primary key. When specified (e.g., :id), the parameter will be split using the resource's primary key delimiter and mapped to individual primary key fields. This is required for resources with composite primary keys to work correctly with GET, PATCH, and DELETE operations. See the composite primary keys documentation for more details. |
### Introspection
Target: `AshJsonApi.Resource.Route`
### json_api.routes.route
```elixir
route resource, method, route, action
```
A route for a generic action.
### Examples
```
route :get, "say_hi/:name", :say_hello
```
### Arguments
| Name | Type | Default | Docs |
|------|------|---------|------|
| [`resource`](#json_api-routes-route-resource){: #json_api-routes-route-resource } | `module` | | The resource that the route's action is defined on |
| [`method`](#json_api-routes-route-method){: #json_api-routes-route-method .spark-required} | `atom` | | The HTTP method for the route, e.g `:get`, or `:post` |
| [`route`](#json_api-routes-route-route){: #json_api-routes-route-route .spark-required} | `String.t` | | The path of the route |
| [`action`](#json_api-routes-route-action){: #json_api-routes-route-action .spark-required} | `atom` | | The action to call when this route is hit |
### Options
| Name | Type | Default | Docs |
|------|------|---------|------|
| [`wrap_in_result?`](#json_api-routes-route-wrap_in_result?){: #json_api-routes-route-wrap_in_result? } | `boolean` | `false` | Whether or not the action result should be wrapped in `{result: <result>}` |
| [`default_fields`](#json_api-routes-route-default_fields){: #json_api-routes-route-default_fields } | `list(atom)` | | A list of fields to be shown in the attributes of the called route |
| [`primary?`](#json_api-routes-route-primary?){: #json_api-routes-route-primary? } | `boolean` | `false` | Whether or not this is the route that should be linked to by default when rendering links to this type of route |
| [`metadata`](#json_api-routes-route-metadata){: #json_api-routes-route-metadata } | `(any, any, any -> any)` | | A function to generate arbitrary top-level metadata for the JSON:API response |
| [`modify_conn`](#json_api-routes-route-modify_conn){: #json_api-routes-route-modify_conn } | `(any, any, any, any -> any)` | | A function to modify the conn before responding. Used for things like setting headers based on the response. Takes `conn, subject, result, request`. See the modify_conn guide for more details and examples. |
| [`query_params`](#json_api-routes-route-query_params){: #json_api-routes-route-query_params } | `list(atom)` | `[]` | A list of action inputs to accept as query parameters. |
| [`action_names_in_schema`](#json_api-routes-route-action_names_in_schema){: #json_api-routes-route-action_names_in_schema } | `keyword` | | A mapping of action names to how they should appear in the OpenAPI schema. You only need to set this if you see a warning during schema generation. |
| [`name`](#json_api-routes-route-name){: #json_api-routes-route-name } | `String.t` | | A globally unique name for this route, to be used when generating docs and open api specifications |
| [`description`](#json_api-routes-route-description){: #json_api-routes-route-description } | `String.t` | | A human-friendly description of this specific route to use in generated documentation and OpenAPI. If provided, this overrides the action description. |
| [`derive_sort?`](#json_api-routes-route-derive_sort?){: #json_api-routes-route-derive_sort? } | `boolean` | `true` | Whether or not to derive a sort parameter based on the sortable fields of the resource |
| [`derive_filter?`](#json_api-routes-route-derive_filter?){: #json_api-routes-route-derive_filter? } | `boolean` | `true` | Whether or not to derive a filter parameter based on the sortable fields of the resource |
| [`path_param_is_composite_key`](#json_api-routes-route-path_param_is_composite_key){: #json_api-routes-route-path_param_is_composite_key } | `atom` | | The path parameter that should be parsed as a composite primary key. When specified (e.g., :id), the parameter will be split using the resource's primary key delimiter and mapped to individual primary key fields. This is required for resources with composite primary keys to work correctly with GET, PATCH, and DELETE operations. See the composite primary keys documentation for more details. |
### Introspection
Target: `AshJsonApi.Resource.Route`
<style type="text/css">.spark-required::after { content: "*"; color: red !important; }</style>