Contains objects used to interact with the Admin API. This object is returned as part of different contexts, such as [`admin`](/docs/api/shopify-app-remix/authenticate/admin), [`unauthenticated.admin`](/docs/api/shopify-app-remix/unauthenticated/unauthenticated-admin), and [`webhook`](/docs/api/shopify-app-remix/authenticate/webhook).
Provides utilities that apps can use to make requests to the Admin API.
Methods for interacting with the Shopify Admin GraphQL API
Methods for interacting with the Shopify Admin REST API There are methods for interacting with individual REST resources. You can also make `GET`, `POST`, `PUT` and `DELETE` requests should the REST resources not meet your needs.
query: Operation extends keyof Operations
options: GraphQLQueryOptions
export type GraphQLClient
The version of the API to use for the request.
Additional headers to include in the request.
The total number of times to try the request if it fails.
The variables to pass to the operation.
RemixRestClient & {resources: Resources}
Performs a GET request on the given path.
Performs a POST request on the given path.
Performs a PUT request on the given path.
Performs a DELETE request on the given path.
Contains objects used to interact with the Admin API. This object is returned as part of different contexts, such as [`admin`](/docs/api/shopify-app-remix/authenticate/admin), [`unauthenticated.admin`](/docs/api/shopify-app-remix/unauthenticated/unauthenticated-admin), and [`webhook`](/docs/api/shopify-app-remix/authenticate/webhook).
import { ActionFunctionArgs } from "@remix-run/node";
import { authenticate } from "../shopify.server";
export const action = async ({ request }: ActionFunctionArgs) => {
const { admin } = await authenticate.admin(request);
const response = await admin.graphql(
`#graphql
mutation populateProduct($input: ProductInput!) {
productCreate(input: $input) {
product {
id
}
}
}`,
{
variables: {
input: { title: "Product Name" },
},
},
);
const productData = await response.json();
return json({
productId: productData.data?.productCreate?.product?.id,
});
}
import { shopifyApp } from "@shopify/shopify-app-remix/server";
const shopify = shopifyApp({
// ...
});
export default shopify;
export const authenticate = shopify.authenticate;
import { ActionFunctionArgs } from "@remix-run/node";
import { authenticate } from "../shopify.server";
export const action = async ({ request }: ActionFunctionArgs) => {
const { admin } = await authenticate.admin(request);
try {
const response = await admin.graphql(
`#graphql
query incorrectQuery {
products(first: 10) {
nodes {
not_a_field
}
}
}`,
);
return json({ data: await response.json() });
} catch (error) {
if (error instanceof GraphqlQueryError) {
// error.body.errors:
// { graphQLErrors: [
// { message: "Field 'not_a_field' doesn't exist on type 'Product'" }
// ] }
return json({ errors: error.body?.errors }, { status: 500 });
}
return json({ message: "An error occurred" }, { status: 500 });
}
}
import { shopifyApp } from "@shopify/shopify-app-remix/server";
const shopify = shopifyApp({
// ...
});
export default shopify;
export const authenticate = shopify.authenticate;
import { LoaderFunctionArgs, json } from "@remix-run/node";
import { authenticate } from "../shopify.server";
export const loader = async ({ request }: LoaderFunctionArgs) => {
const {
admin,
session,
} = await authenticate.admin(request);
return json(
admin.rest.resources.Order.count({ session }),
);
};
import { shopifyApp } from "@shopify/shopify-app-remix/server";
import { restResources } from "@shopify/shopify-api/rest/admin/2023-07";
const shopify = shopifyApp({
restResources,
// ...etc
});
export default shopify;
export const authenticate = shopify.authenticate;
import { LoaderFunctionArgs, json } from "@remix-run/node";
import { authenticate } from "../shopify.server";
export const loader = async ({ request }: LoaderFunctionArgs) => {
const {
admin,
session,
} = await authenticate.admin(request);
const response = await admin.rest.get({
path: "/customers/count.json",
});
const customers = await response.json();
return json({ customers });
};
import { shopifyApp } from "@shopify/shopify-app-remix/server";
import { restResources } from "@shopify/shopify-api/rest/admin/2023-04";
const shopify = shopifyApp({
restResources,
// ...etc
});
export default shopify;
export const authenticate = shopify.authenticate;
import { LoaderFunctionArgs, json } from "@remix-run/node";
import { authenticate } from "../shopify.server";
export const loader = async ({ request }: LoaderFunctionArgs) => {
const {
admin,
session,
} = await authenticate.admin(request);
const response = admin.rest.post({
path: "customers/7392136888625/send_invite.json",
body: {
customer_invite: {
to: "new_test_email@shopify.com",
from: "j.limited@example.com",
bcc: ["j.limited@example.com"],
subject: "Welcome to my new shop",
custom_message: "My awesome new store",
},
},
});
const customerInvite = await response.json();
return json({ customerInvite });
};
import { shopifyApp } from "@shopify/shopify-app-remix/server";
import { restResources } from "@shopify/shopify-api/rest/admin/2023-04";
const shopify = shopifyApp({
restResources,
// ...etc
});
export default shopify;
export const authenticate = shopify.authenticate;