---
displayed_sidebar: jsClientSidebar
slug: /references/js-client/AdminCustomResource
---

import ParameterTypes from "@site/src/components/ParameterTypes"

# AdminCustomResource

This class is used to send requests custom API Routes. All its method
are available in the JS Client under the `medusa.admin.custom` property.

## Methods

### delete

Send a `DELETE` request to a custom API Route. The method accepts a type parameters `TResponse` indicating the type of response, which defaults to `any`.

#### Example

```ts
import Medusa from "@medusajs/medusa-js"
const medusa = new Medusa({ baseUrl: MEDUSA_BACKEND_URL, maxRetries: 3 })
// must be previously logged in or use api token
medusa.admin.custom.delete(`/blog/posts/${postId}`).then(() => {
  // deleted successfully
})
```

#### Parameters

<ParameterTypes parameters={[
  {
    "name": "path",
    "type": "`string`",
    "description": "The path of the custom API Route.",
    "optional": false,
    "defaultValue": "",
    "expandable": false,
    "children": []
  },
  {
    "name": "options",
    "type": "[`RequestOptions`](../internal/interfaces/internal.RequestOptions.mdx)",
    "description": "Configurations to apply on the request.",
    "optional": true,
    "defaultValue": "",
    "expandable": false,
    "children": [
      {
        "name": "numberOfRetries",
        "type": "`number`",
        "description": "The number of times to retry a request before failing.",
        "optional": true,
        "defaultValue": "",
        "expandable": false,
        "children": []
      },
      {
        "name": "timeout",
        "type": "`number`",
        "description": "The number of milliseconds before the request times out.",
        "optional": true,
        "defaultValue": "",
        "expandable": false,
        "children": []
      }
    ]
  },
  {
    "name": "customHeaders",
    "type": "Record<`string`, `any`\\>",
    "description": "Custom headers to attach to the request.",
    "optional": true,
    "defaultValue": "",
    "expandable": false,
    "children": []
  }
]} />

#### Returns

<ParameterTypes parameters={[
  {
    "name": "ResponsePromise",
    "type": "[`ResponsePromise`](../internal/types/internal.ResponsePromise.mdx)<`TResponse`\\>",
    "optional": false,
    "defaultValue": "",
    "description": "The response data.",
    "expandable": false,
    "children": []
  }
]} />

___

### get

Send a `GET` request to a custom API Route. The method accepts a tuple of type parameters: the first `TQuery` is the type of accepted query parameters,
which defaults to `Record<string, any>`; the second `TResponse` is the type of response, which defaults to `any`.

#### Example

```ts
import Medusa from "@medusajs/medusa-js"
const medusa = new Medusa({ baseUrl: MEDUSA_BACKEND_URL, maxRetries: 3 })
type PostsResponse = {
posts: Post[]
}
// must be previously logged in or use api token
medusa.admin.custom.get<Record<string, any>, PostsResponse>(
  "/blog/posts"
)
.then(({ posts }) => {
  console.log(posts.length);
})
```

#### Parameters

<ParameterTypes parameters={[
  {
    "name": "path",
    "type": "`string`",
    "description": "The path of the custom API Route.",
    "optional": false,
    "defaultValue": "",
    "expandable": false,
    "children": []
  },
  {
    "name": "query",
    "type": "`TQuery`",
    "description": "Query path parameters to pass in the request.",
    "optional": true,
    "defaultValue": "",
    "expandable": false,
    "children": []
  },
  {
    "name": "options",
    "type": "[`RequestOptions`](../internal/interfaces/internal.RequestOptions.mdx)",
    "description": "Configurations to apply on the request.",
    "optional": true,
    "defaultValue": "",
    "expandable": false,
    "children": [
      {
        "name": "numberOfRetries",
        "type": "`number`",
        "description": "The number of times to retry a request before failing.",
        "optional": true,
        "defaultValue": "",
        "expandable": false,
        "children": []
      },
      {
        "name": "timeout",
        "type": "`number`",
        "description": "The number of milliseconds before the request times out.",
        "optional": true,
        "defaultValue": "",
        "expandable": false,
        "children": []
      }
    ]
  },
  {
    "name": "customHeaders",
    "type": "Record<`string`, `any`\\>",
    "description": "Custom headers to attach to the request.",
    "optional": true,
    "defaultValue": "",
    "expandable": false,
    "children": []
  }
]} />

#### Returns

<ParameterTypes parameters={[
  {
    "name": "ResponsePromise",
    "type": "[`ResponsePromise`](../internal/types/internal.ResponsePromise.mdx)<`TResponse`\\>",
    "optional": false,
    "defaultValue": "",
    "description": "The response data.",
    "expandable": false,
    "children": []
  }
]} />

___

### post

Send a `POST` request to a custom API Route. The method accepts a tuple of type parameters: the first `TPayload` is the type of accepted body parameters,
which defaults to `Record<string, any>`; the second `TResponse` is the type of response, which defaults to `any`.

#### Example

```ts
import Medusa from "@medusajs/medusa-js"
const medusa = new Medusa({ baseUrl: MEDUSA_BACKEND_URL, maxRetries: 3 })
type PostRequest = {
  title: string
}
type PostResponse = {
  post: Post
}
// must be previously logged in or use api token
medusa.admin.custom.post<PostRequest, PostResponse>(
  "/blog/posts",
  {
    title: "My post",
  }
)
.then(({ post }) => {
  console.log(post.id);
})
```

#### Parameters

<ParameterTypes parameters={[
  {
    "name": "path",
    "type": "`string`",
    "description": "The path of the custom API Route.",
    "optional": false,
    "defaultValue": "",
    "expandable": false,
    "children": []
  },
  {
    "name": "payload",
    "type": "`TPayload`",
    "description": "Body parameters to pass in the request.",
    "optional": true,
    "defaultValue": "",
    "expandable": false,
    "children": []
  },
  {
    "name": "options",
    "type": "[`RequestOptions`](../internal/interfaces/internal.RequestOptions.mdx)",
    "description": "Configurations to apply on the request.",
    "optional": true,
    "defaultValue": "",
    "expandable": false,
    "children": [
      {
        "name": "numberOfRetries",
        "type": "`number`",
        "description": "The number of times to retry a request before failing.",
        "optional": true,
        "defaultValue": "",
        "expandable": false,
        "children": []
      },
      {
        "name": "timeout",
        "type": "`number`",
        "description": "The number of milliseconds before the request times out.",
        "optional": true,
        "defaultValue": "",
        "expandable": false,
        "children": []
      }
    ]
  },
  {
    "name": "customHeaders",
    "type": "Record<`string`, `any`\\>",
    "description": "Custom headers to attach to the request.",
    "optional": true,
    "defaultValue": "",
    "expandable": false,
    "children": []
  }
]} />

#### Returns

<ParameterTypes parameters={[
  {
    "name": "ResponsePromise",
    "type": "[`ResponsePromise`](../internal/types/internal.ResponsePromise.mdx)<`TResponse`\\>",
    "optional": false,
    "defaultValue": "",
    "description": "The response data.",
    "expandable": false,
    "children": []
  }
]} />
