diff --git a/docs/components/content/app/AgoliaDocSearch.client.vue b/docs/components/content/app/AgoliaDocSearch.client.vue
deleted file mode 100644
index 65c9f77ff..000000000
--- a/docs/components/content/app/AgoliaDocSearch.client.vue
+++ /dev/null
@@ -1,64 +0,0 @@
-
-
-
-
-
-
-
diff --git a/docs/content/1.guide/1.getting-started/2.usage.md b/docs/content/1.guide/1.getting-started/2.usage.md
index 40178d586..6e55cba58 100644
--- a/docs/content/1.guide/1.getting-started/2.usage.md
+++ b/docs/content/1.guide/1.getting-started/2.usage.md
@@ -1,7 +1,3 @@
----
-description: ''
----
-
# Usage
## Standard
diff --git a/docs/content/3.plugins/1.introduction.md b/docs/content/3.plugins/1.introduction.md
new file mode 100644
index 000000000..5b57e11eb
--- /dev/null
+++ b/docs/content/3.plugins/1.introduction.md
@@ -0,0 +1,40 @@
+# Introduction
+
+Pinia ORM can also be extended by a plugin system which you can use to extend the
+`Repository` or the global `config`
+
+## Writing a custom plugin
+
+Use `definePiniaOrmPlugin` to create a custom Pinia ORM plugin. The context option gives you
+`model`, `repository` and `config` which you can edit
+
+````ts{piniaOrmPlugin.ts}
+export default definePiniaOrmPlugin((context) => {
+ context.config.apiConfig = 'test'
+ return context
+})
+````
+
+Now add your custom plugin to the Pinia ORM instance:
+
+````ts
+import { createPinia, setActivePinia } from 'pinia'
+import { createORM } from 'pinia-orm'
+import { createApp } from 'vue'
+import { piniaOrmPlugin } from './plugins'
+
+const app = createApp({})
+const pinia = createPinia()
+const piniaOrm = createORM()
+piniaOrm().use(piniaOrmPlugin)
+pinia.use(piniaOrm)
+app.use(pinia)
+setActivePinia(pinia)
+````
+
+Now everytime e.g. you use `useRepo` which uses the global config you can do this
+
+````ts
+console.log(useRepo(User).config.apiConfig)
+// 'test'
+````
diff --git a/docs/content/3.plugins/2.axios/1.guide/1.setup.md b/docs/content/3.plugins/2.axios/1.guide/1.setup.md
new file mode 100644
index 000000000..3cfe8efd6
--- /dev/null
+++ b/docs/content/3.plugins/2.axios/1.guide/1.setup.md
@@ -0,0 +1,54 @@
+# Setup Axios
+
+This plugin gives you useful functions which is extending the `Repository`
+
+## Install Pinia ORM Axios Plugin
+
+::code-group
+ ```bash [Yarn]
+ yarn add @pinia-orm/axios
+ ```
+ ```bash [NPM]
+ npm install @pinia-orm/axios --save
+ ```
+ ```bash [PNPM]
+ pnpm add @pinia-orm/axios
+ ```
+::
+
+## Adding the plugin to your pinia ORM store
+
+You have to options here to use the plugin. Either you use `createPiniaOrmPluginAxios(options?: PinaOrmPluginOptions)`
+or you use `pinaOrmPluginAxios`. It depends if you want to pass options on initialization or later.
+
+::code-group
+ ```js{}[Vue3]
+ import { createPinia } from 'pinia'
+ import { createORM } from 'pinia-orm'
+ import { createPiniaOrmPluginAxios } from '@pinia-orm/axios'
+ import axios form 'axios'
+
+ const pinia = createPinia()
+ const piniaOrm = createORM()
+ piniaOrm().use(createPiniaOrmPluginAxios({
+ axios
+ }))
+ pinia.use(piniaOrm)
+ ```
+ ```js{}[Vue2]
+ import { createPinia, PiniaVuePlugin } from 'pinia'
+ import { createORM } from 'pinia-orm'
+ import { createPiniaOrmPluginAxios } from '@pinia-orm/axios'
+ import axios form 'axios'
+
+ Vue.use(PiniaVuePlugin)
+ const pinia = createPinia()
+ const piniaOrm = createORM()
+ piniaOrm().use(createPiniaOrmPluginAxios({
+ axios
+ }))
+ pinia.use(piniaOrm)
+ ```
+::
+
+
diff --git a/docs/content/3.plugins/2.axios/1.guide/2.configuration.md b/docs/content/3.plugins/2.axios/1.guide/2.configuration.md
new file mode 100644
index 000000000..5bd034c5c
--- /dev/null
+++ b/docs/content/3.plugins/2.axios/1.guide/2.configuration.md
@@ -0,0 +1,181 @@
+# Configurations
+
+Pinia ORM Axios plugin comes with various options to control request behavior. These options can be configured in three common places:
+
+- **Globally** - options can defined during installation
+- **Model** - options can be defined on a per-model basis
+- **Request** - options can be defined on a per-request basis
+
+Any axios options are permitted alongside any plugin options. Options are inherited in the same order, i.e. Global configuration is merged and preceded by Model configuration which is then merged and preceded by any Request configuration.
+
+### Global Configuration
+
+Options can be defined during plugin installation by passing an object as the second argument of the Pinia ORM `use()` method. At minimum, the axios instance is required while any other option is entirely optional.
+
+The following example configures the plugin with an axios instance (required), the `baseURL` option, and some common `headers` that all requests will inherit:
+
+```js
+import axios from 'axios'
+import { createORM } from 'pinia-orm'
+import { createPiniaOrmPluginAxios } from '@pinia-orm/axios'
+
+const piniaOrm = createORM()
+piniaOrm().use(createPiniaOrmPluginAxios({
+ axios,
+ headers: { 'X-Requested-With': 'XMLHttpRequest' },
+ baseURL: 'https://example.com/api/'
+}))
+```
+
+### Model Configuration
+
+Options can be defined on models by setting the static `config.axiosApi` property. This is an object where you may configure model-level request configuration.
+
+The following example configures a model with common `headers` and `baseURL` options:
+
+```js
+import { Model } from 'pinia-orm'
+
+class User extends Model {
+ static entity = 'users'
+
+ static fields () {
+ return {
+ id: this.attr(null),
+ name: this.attr('')
+ }
+ }
+
+ static config = {
+ axiosApi: {
+ headers: { 'X-Requested-With': 'XMLHttpRequest' },
+ baseURL: 'https://example.com/api/'
+ }
+ }
+}
+```
+
+### Request Configuration
+
+Options can be defined on a per-request basis. These options will inherit any global and model configurations which are subsequently passed on to the request.
+
+The following example configures a request with common `headers` and `baseURL` options:
+
+```js
+useAxiosRepo(User).api().get('/api/users', {
+ headers: { 'X-Requested-With': 'XMLHttpRequest' },
+ baseURL: 'https://example.com/api/'
+})
+```
+
+Request configurations vary depending on the type of request being made. Please refer to the [Usage Guide](usage) to read more.
+
+
+## Available Options
+
+In addition to [axios request options](https://github.com/axios/axios#request-config), the plugin can be configured with the following options:
+
+### `dataKey`
+
+- **Type**: `string`
+- **Default**: `undefined`
+
+ This option will inform the plugin of the resource key your elements may be nested under in the response body.
+
+ For example, your response body may be nested under a resource key called `data`:
+
+ ```js
+ {
+ ok: true,
+ data: {
+ id: 1,
+ name: 'John Doe'
+ }
+ }
+ ```
+
+ The following example sets the `dataKey` to `data` as this is the resource key which contains the required data for the model schema.
+
+ ```js
+ useAxiosRepo(User).api().get('/api/users', {
+ dataKey: 'data'
+ })
+ ```
+
+ The plugin will pass all the data within the data object to Pinia ORM which can then be successfully persisted to the store.
+
+ ::alert{type=warning}
+ This option is ignored when using the `dataTransformer` option.
+ ::
+
+### `dataTransformer`
+
+- **Type**: `(response: AxiosResponse) => Array | Object`
+- **Default**: `undefined`
+
+ This option will let you intercept and transform the response before persisting it to the store.
+
+ The method will receive a [Response](usage.md#handling-responses) object allowing you to access response properties such as response headers, as well as manipulate the data as you see fit.
+
+ Any method defined must return data to pass on to Pinia ORM.
+
+ You can also use object destructuring to get specific properties from the response object.
+
+ ```js
+ useAxiosRepo(User).api().get('/api/users', {
+ dataTransformer: ({ data, headers }) => {
+ // Do stuff with headers...
+ // Do stuff with data...
+
+ return data
+ }
+ })
+ ```
+
+ ::: warning
+ Using the `dataTransformer` option will ignore any `dataKey` option.
+ :::
+
+ **See also**: [Transforming Data](usage.md#transforming-data)
+
+### `persistBy`
+
+- **Type**: `string`
+- **Default**: `'save'`
+
+ This option determines which Pinia ORM persist method should be called when Pinia ORM Axios attempts to save the response data to the store.
+
+ You can set this option to any one of the following string values:
+
+ - `insert`
+
+### `save`
+
+- **Type**: `boolean`
+- **Default**: `true`
+
+ This option will determine whether Pinia ORM should persist the response data to the store or not.
+
+ By setting this option to `false`, the response data will not be persisted and you will have to handle persistence alternatively. The `entities` property in the [Response](usage.md#handling-responses) object will also be `null` since it will no longer be persisting data automatically.
+
+ **See also**: [Deferring Persistence](usage.md#deferring-persistence)
+
+### `delete`
+
+- **Type**: `string | number | (model: Model) => boolean`
+- **Default**: `undefined`
+
+ This option is primarily used with delete requests. It's argument signature is identical to the [Pinia ORM delete](https://vuex-orm.org/guide/data/deleting) method by which a primary key can be set as the value, or passing a predicate function. The corresponding record will be removed from the store after the request is made.
+
+ Setting this option will ignore any `save` options you may have set and therefore persistence is not possible when using this option.
+
+ **See also**: [Delete Requests](usage.md#delete-requests)
+
+### `actions`
+
+- **Type**: `Object`
+- **Default**: `{}`
+
+ This option allows for your own predefined api methods.
+
+ Please refer to the [Custom Actions](custom-actions) documentation to learn more.
diff --git a/docs/content/3.plugins/2.axios/1.guide/2.usage.md b/docs/content/3.plugins/2.axios/1.guide/2.usage.md
new file mode 100644
index 000000000..a796880af
--- /dev/null
+++ b/docs/content/3.plugins/2.axios/1.guide/2.usage.md
@@ -0,0 +1,222 @@
+# Usage
+
+Pinia ORM Axios adds a new repository composable `useAxiosRepo` with an asynchronous method `api()`, when called, instantiates a new axios request for a repository. From these requests, repositories are able to persist data to the store automatically.
+
+For example, a `useAxiosRepo(User)` model may typically want to fetch all users and persist the response to the store. Pinia ORM Axios can achieve this by performing a simple request:
+
+```js
+await useAxiosRepo(User).api().get('https://example.com/api/users')
+```
+
+## Performing Requests
+
+Pinia ORM Axios supports the most commonly used [axios request methods](https://github.com/axios/axios#request-method-aliases). These methods accept the same argument signature as their axios counterparts with the exception that the config can be expanded with additional plugin [options](configurations).
+
+### Supported Methods
+
+Here is a list of supported request methods:
+
+```js
+useAxiosRepo(User).api().get(url, config)
+useAxiosRepo(User).api().post(url, data, config)
+useAxiosRepo(User).api().put(url, data, config)
+useAxiosRepo(User).api().patch(url, data, config)
+useAxiosRepo(User).api().delete(url, config)
+useAxiosRepo(User).api().request(config)
+```
+
+Arguments given are passed on to the corresponding axios request method.
+
+- `url` is the server URL that will be used for the request.
+- `data` is the data to be sent as the request body (where applicable).
+- `config` is the plugin [config options](configurations) and also any valid [axios request config](https://github.com/axios/axios#request-config) options.
+
+### Request Configuration
+
+You can pass any of the plugin's options together with any axios request options for a request method.
+
+For example, let's configure the following `get` request:
+
+```js
+useAxiosRepo(User).api().get('/api/users', {
+ baseURL: 'https://example.com/',
+ dataKey: 'result'
+})
+```
+
+The [`baseURL`](https://github.com/axios/axios#request-config) is an axios request option which will be prepended to the request URL (unless the URL is absolute).
+
+The [`dataKey`](configurations.md#datakey) is a plugin option which informs the plugin of the resource key your elements may be nested under in the response body.
+
+> Please refer to the list of [supported request methods](#supported-methods) above to determine where the `config` argument can be given in the corresponding request method.
+
+**See also**: [Configurations](configurations)
+
+### Persisting Response Data
+
+By default, the response data from a request is automatically saved to the store corresponding to the model the request is made on.
+
+For example, let's perform a basic `get` request on a `useAxiosRepo(User)` model:
+
+```js
+useAxiosRepo(User).api().get('https://example.com/api/users')
+```
+
+The response body of the request may look like the following:
+
+```json
+[
+ {
+ "id": 1,
+ "name": "John Doe",
+ "age": 24
+ },
+ {
+ "id": 2,
+ "name": "Jane Doe",
+ "age": 21
+ }
+]
+```
+
+Pinia ORM Axios will automatically save this data to the store, and the users entity in the store may now look like the following:
+
+```js
+{
+ users: {
+ data: {
+ 1: { id: 1, name: 'John Doe', age: 24 },
+ 2: { id: 2, name: 'Jane Doe', age: 21 }
+ }
+ }
+}
+```
+
+Under the hood, the plugin will persist data to the store by determining which records require inserting and which require updating.
+
+If you do not want to persist response data automatically, you can defer persistence by configuring the request with the `{ save: false }` option.
+
+You may configure Pinia ORM Axios to persist data using an alternative Pinia ORM persist method other than the default `save`. For example, you can use `insert`:
+
+```js
+useAxiosRepo(User).api().get('/api/users', { persistBy: 'insert' })
+```
+
+**See also**:
+
+- [Deferring Persistence](#deferring-persistence)
+- [Pinia ORM - Inserting & Updating](https://vuex-orm.org/guide/data/inserting-and-updating.html#insert-or-update)
+
+### Delete Requests
+
+::: warning
+When performing a `delete` request, the plugin will not remove the corresponding entities from the store. It is not always possible to determine which record is to be deleted and often HTTP DELETE requests are performed on a resource URL.
+:::
+
+If you want to delete a record from the store after performing a delete request, you must pass the `delete` option.
+
+```js
+useAxiosRepo(User).api().delete('/api/users/1', {
+ delete: 1
+})
+```
+
+**See also**: [Configurations - delete](configurations.md#delete)
+
+## Handling Responses
+
+Every request performed will return a `Response` object as the resolved value. This object is responsible for carrying and handling the response body and ultimately executing actions such as persisting data to the store.
+
+The `Response` object contains two noteworthy properties:
+
+- `entities` is the list of entities persisted to the store by Pinia ORM.
+- `response` is the original [axios response schema](https://github.com/axios/axios#response-schema).
+
+You may access these properties through the returned value:
+
+```js
+const result = await useAxiosRepo(User).api().get('/api/users')
+
+// Retrieving the response status.
+result.response.status // 200
+
+// Entities persisted to the store from the response body.
+result.entities // { users: [{ ... }] }
+```
+
+**See also**: [API Reference - Response](../api/response.md)
+
+### Transforming Data
+
+You can configure the plugin to perform transformation on the response data, using the `dataTransformer` configuration option, before it is persisted to the store.
+
+For example, your API response may conform to the [JSON:API](https://jsonapi.org/) specification but may not match the schema for your `useAxiosRepo(User)` model. In such cases you may want to reformat the response data in a manner in which Pinia ORM can normalize.
+
+The `dataTransformer` method can also be used to hook into response data before it is persisted to the store, allowing you to access other response properties such as response headers, as well as manipulate the data as you see fit.
+
+To demonstrate how you may use this option, let's assume your response body looks like this:
+
+```js
+{
+ ok: true,
+ record: {
+ id: 1,
+ name: 'John Doe'
+ }
+}
+```
+
+The following example intercepts the response using a `dataTransformer` method to extract the data to be persisted from the nested property.
+
+```js
+useAxiosRepo(User).api().get('/api/users', {
+ dataTransformer: (response) => {
+ return response.data.record
+ }
+})
+```
+
+**See also**: [Configurations - dataTransformer](configurations.md#datatransformer)
+
+### Deferring Persistence
+
+By default, the response data from a request is automatically saved to the store but this may not always be desired.
+
+To prevent persisting data to the store, define and set the `save` option to `false`. The `Response` object conveniently provides `save()` method which allows you to persist the data at any time.
+
+For example, you might want to check if the response contains any errors:
+
+```js
+// Prevent persisting response data to the store.
+const result = await useAxiosRepo(User).api().get('/api/users', {
+ save: false
+})
+
+// Throw an error.
+if (result.response.data.error) {
+ throw new Error('Something is wrong.')
+}
+
+// Otherwise continue to persist to the store.
+result.save()
+```
+
+When deferring persistence you can also determine whether the response data has been persisted to the store using the convenient `isSaved` property:
+
+```js
+const result = await useAxiosRepo(User).api().get('/api/users', {
+ save: false
+})
+
+result.isSaved // false
+
+await result.save()
+
+result.isSaved // true
+```
+
+**See also**:
+
+- [Configurations - save](configurations.md#save)
+- [API Reference - Response - save()](../api/response.md#save)
+- [API Reference - Response - isSaved](../api/response.md#issaved)
diff --git a/docs/content/3.plugins/2.axios/1.guide/3.custom-actions.md b/docs/content/3.plugins/2.axios/1.guide/3.custom-actions.md
new file mode 100644
index 000000000..b6b462219
--- /dev/null
+++ b/docs/content/3.plugins/2.axios/1.guide/3.custom-actions.md
@@ -0,0 +1,93 @@
+# Custom Actions
+
+The Custom Actions lets you define your own predefined api methods. You can define any number of custom actions through your Model configurations through `actions` option.
+
+```js
+class User extends Model {
+ static entity = 'users'
+
+ static fields () {
+ return {
+ id: this.attr(null),
+ name: this.attr('')
+ }
+ }
+
+ static config = {
+ axiosApi: {
+ actions: {
+ fetch: {
+ method: 'get',
+ url: '/api/users'
+ }
+ }
+ }
+ }
+}
+```
+
+You can see that in the above example, we have defined `fetch` action with the option that defines the `method` and `url`.
+
+Now you may call this action as if it was a predefined method.
+
+```js
+useAxiosRepo(User).api().fetch()
+```
+
+The above method will perform api call to `/api/users` with `GET` method. Now the value for the action (in the example, which is the object that defines `method` and `url`) is the request configuration. Now you see that the above example is equivalent to calling:
+
+```js
+useAxiosRepo(User).api().request({
+ method: 'get',
+ url: '/api/users'
+})
+```
+
+Actions can also be defined as a function. In this case, just call the desired method with in action. With this approach, you can configure the convenience argument to the action, and gives you more powerful control.
+
+Remember that inside the function, `this` is bind to the Request object, not the Model where the actions are defined.
+
+```js
+class User extends Model {
+ static config = {
+ axiosApi: {
+ actions: {
+ fetchById (id) {
+ return this.get(`/api/users/${id}`)
+ }
+ }
+ }
+ }
+}
+```
+
+And you can call that action like so.
+
+```js
+useAxiosRepo(User).api().fetchById(1)
+```
+
+## When to Use Custom Actions?
+
+While the custom actions are convenient and easy to set up, you can always define methods to the Repository directly to get pretty much the same result. But
+if you don't have defined any custom `UserRepository` when its easier to use the model configuration.
+
+```js
+class UserRepository extends AxiosRepository {
+ static fetchById (id) {
+ return this.api().get(`/api/users/${id}`)
+ }
+}
+```
+
+In this case, you must call the method from Repository and not from `api()`.
+
+```js
+useAxiosRepo(User).fetchById(1)
+```
+
+To be honest, this is a much better way to define custom methods in terms of simplicity and also better with type safety when using TypeScript.
+
+The benefits of defining custom actions inside the configuration are that you can put those methods under Request object, so it becomes more consistent when calling it from the Model. Also, it could be easier to share custom actions between different Models.
+
+It's up to you how to define custom actions. Though if you have any ideas or feedback, we're more than happy to hear it from you!
diff --git a/docs/content/3.plugins/2.axios/2.api/1.repository.md b/docs/content/3.plugins/2.axios/2.api/1.repository.md
new file mode 100644
index 000000000..8ea72a0b3
--- /dev/null
+++ b/docs/content/3.plugins/2.axios/2.api/1.repository.md
@@ -0,0 +1,52 @@
+---
+sidebarDepth: 2
+---
+
+# Repository
+
+Pinia ORM Axios adds supporting properties and methods to the `Model` object.
+
+## Static Properties
+
+### `axios`
+
+- **Type**: `AxiosInstance | null`
+
+ The axios instance which was either set during plugin installation or set using the [`setAxios`](#setaxios) method. Pinia ORM Axios will use this axios instance to perform requests.
+
+### `apiConfig`
+
+- **Type**: `Object`
+- **Default**: `{}`
+
+ The property that holds the model configuration for requests.
+
+### `globalApiConfig`
+
+- **Type**: `Object`
+
+ The property that holds the global configuration. The value will be set automatically during the plugin installation process.
+
+::: warning WARNING
+Do not mutate this property programmatically.
+:::
+
+## Static Methods
+
+### `api`
+
+- `api(): Request`
+
+ Return a newly created [Request](request) instance.
+
+### `setAxios`
+
+- `setAxios(axios: AxiosInstance): void`
+
+ Set the axios instance manually. Typical setups will configure the axios instance during installation. However, in some cases (mostly with Nuxt), you may need to set the axios instance at a later stage.
+
+ ::: warning IMPORTANT
+ If you omit the axios instance during installation, it's important that one is set using `setAxios` before any attempt to make an API request.
+ :::
+
+ **See also**: [Nuxt.js Integration](../guide/setup.md#nuxt-js-integration)
diff --git a/docs/content/3.plugins/2.axios/2.api/2.request.md b/docs/content/3.plugins/2.axios/2.api/2.request.md
new file mode 100644
index 000000000..05f38341f
--- /dev/null
+++ b/docs/content/3.plugins/2.axios/2.api/2.request.md
@@ -0,0 +1,85 @@
+---
+sidebarDepth: 2
+---
+
+# Request
+
+The Request object is returned when calling the `api()` method on a repository. This object is the foundation for Pinia ORM Axios and enables you to call many of the supported axios methods to perform an API request. Any [Custom Actions](../guide/custom-actions) will also be defined on the Request object.
+
+```js
+const request = useAxiosRepo(User).api()
+```
+
+You can call request methods directly through chaining.
+
+```js
+const response = useAxiosRepo(User).api().get()
+```
+
+## Constructor
+
+- `constructor(model: typeof Model)`
+
+ By default, calling the `api()` method on a model will attach the model class to the Request object.
+
+ You may also create a Request instance by passing a model as the constructors only param.
+
+ ```js
+ import { Request } from '@pinia-orm/axios'
+
+ const request = new Request(useAxiosRepo(User))
+ ```
+
+## Instance Properties
+
+### `model`
+
+- **Type**: `typeof Model`
+
+ The model class that is attached to the Request instance.
+
+### `axios`
+
+- **Type**: `AxiosInstance`
+
+ The axios instance that will be used to perform the request.
+
+## Instance Methods
+
+### `get`
+
+- `get(url: string, config: Config = {}): Promise`
+
+ Performs a `GET` request. It takes the same arguments as the axios `get` method.
+
+### `post`
+
+- `post(url: string, data: any = {}, config: Config = {}): Promise`
+
+ Performs a `POST` request. It takes the same arguments as the axios `post` method.
+
+### `put`
+
+- `put(url: string, data: any = {}, config: Config = {}): Promise`
+
+ Performs a `PUT` request. It takes the same arguments as the axios `put` method.
+
+### `patch`
+
+- `patch(url: string, data: any = {}, config: Config = {}): Promise`
+
+ Performs a `PATCH` request. It takes the same arguments as the axios `patch` method.
+
+### `delete`
+
+- `delete(url: string, config: Config = {}): Promise`
+
+ Performs a `DELETE` request. It takes the same arguments as the axios `delete` method.
+
+### `request`
+
+- `request(config: Config): Promise`
+
+ Performs a request with the given config options. Requests will default to `GET` if the `method` option is not specified.
+
+ All request aliases call this method by merging the relevant configs. You may use this method if you are more familiar with using the axios API in favour of alias methods.
diff --git a/docs/content/3.plugins/2.axios/2.api/3.response.md b/docs/content/3.plugins/2.axios/2.api/3.response.md
new file mode 100644
index 000000000..68d2f275c
--- /dev/null
+++ b/docs/content/3.plugins/2.axios/2.api/3.response.md
@@ -0,0 +1,59 @@
+---
+sidebarDepth: 2
+---
+
+# Response
+
+API requests return a Response object. This is responsible for carrying and handling the response body and ultimately executing actions such as persisting data to the store.
+
+## Instance Properties
+
+### `response`
+
+- **Type**: `Object`
+
+ The axios response schema. Please refer to the [axios documentation](https://github.com/axios/axios#response-schema) for more details.
+
+### `entities`
+
+- **Type**: `Array | null`
+
+ The return value from the Pinia ORM persist method.
+
+ **See also**: [Configurations - save](../guide/configurations.md#save)
+
+### `isSaved`
+
+- **Type**: `boolean`
+
+ Set to `true` when response data has persisted to the store.
+
+### `model`
+
+- **Type**: `typeof Model`
+
+ The model class that initially made the request.
+
+### `config`
+
+- **Type**: `Object`
+
+ The configuration which was passed to the [Request](request) instance.
+
+## Instance Methods
+
+### `save`
+
+- `save(): Promise`
+
+ Save response data to the store.
+
+ **See also**: [Deferring Persistence](../guide/usage.md#deferring-persistence)
+
+### `delete`
+
+- `delete(): Promise`
+
+ Delete record from the store after a request has completed. This method relies on the `delete` option and will throw an error if it is not set.
+
+ **See also**: [Delete Requests](../guide/usage.md#delete-requests)
diff --git a/docs/content/3.plugins/_dir.yml b/docs/content/3.plugins/_dir.yml
new file mode 100644
index 000000000..0ebe984cb
--- /dev/null
+++ b/docs/content/3.plugins/_dir.yml
@@ -0,0 +1 @@
+icon: heroicons-outline:bookmark-alt
diff --git a/docs/content/3.changelog.md b/docs/content/4.changelog.md
similarity index 100%
rename from docs/content/3.changelog.md
rename to docs/content/4.changelog.md
diff --git a/packages/axios/.eslintrc b/packages/axios/.eslintrc
new file mode 100644
index 000000000..0323daac5
--- /dev/null
+++ b/packages/axios/.eslintrc
@@ -0,0 +1,17 @@
+{
+ "extends": [
+ "@nuxtjs/eslint-config-typescript"
+ ],
+ "rules": {
+ "brace-style": "off",
+ "no-useless-constructor": "off",
+ "no-use-before-define": "off",
+ "no-self-compare": "off",
+ "func-call-spacing": "off",
+ "valid-typeof": "off",
+ "no-console": [
+ "warn",
+ { "allow": ["clear", "info", "error", "dir", "trace", "time", "timeEnd", "warn"] }
+ ]
+ }
+}
diff --git a/packages/axios/.gitignore b/packages/axios/.gitignore
new file mode 100644
index 000000000..562fb249e
--- /dev/null
+++ b/packages/axios/.gitignore
@@ -0,0 +1,12 @@
+.cache
+.DS_Store
+.idea
+*.log
+*.tgz
+coverage
+dist
+lib-cov
+logs
+node_modules
+temp
+.idea
diff --git a/packages/axios/LICENSE b/packages/axios/LICENSE
new file mode 100644
index 000000000..206cdb527
--- /dev/null
+++ b/packages/axios/LICENSE
@@ -0,0 +1,21 @@
+The MIT License (MIT)
+
+Copyright (c) 2022-present Gregor Becker
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in all
+copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+SOFTWARE.
diff --git a/packages/axios/README.md b/packages/axios/README.md
new file mode 100644
index 000000000..b8d78e3ae
--- /dev/null
+++ b/packages/axios/README.md
@@ -0,0 +1,40 @@
+[](https://github.com/storm-tail/pinia-orm)
+
+# @pinia-orm/axios
+
+[![npm version][npm-version-src]][npm-version-href]
+[![npm downloads][npm-downloads-src]][npm-downloads-href]
+[![Github Actions CI][github-actions-ci-src]][github-actions-ci-href]
+[![License][license-src]][license-href]
+
+> Pinia ORM Axios Plugin based on [Vuex ORM Axios](https://github.com/vuex-orm/axios)
+
+- [✨ Release Notes](https://pinia-orm.codedredd.de/changelog)
+- [📖 Documentation](https://pinia-orm.codedredd.de)
+
+## Help me keep working on this project 💚
+
+- [Become a Sponsor on GitHub](https://github.com/sponsors/codedredd)
+- [One-time donation via PayPal](https://paypal.me/dredd1984)
+- [👾 Playground](https://pinia-orm-play.codedredd.de)
+
+