Creates a usage charge
Query
mutation appUsageRecordCreate($description: String!, $price: MoneyInput!, $subscriptionLineItemId: ID!) {
appUsageRecordCreate(description: $description, price: $price, subscriptionLineItemId: $subscriptionLineItemId) {
userErrors {
field
message
}
appUsageRecord {
id
}
}
}
Variables
{
"subscriptionLineItemId": "gid://shopify/AppSubscriptionLineItem/1029266946?v=1&index=1",
"price": {
"amount": 1,
"currencyCode": "USD"
},
"description": "Super Mega Plan 1000 emails"
}
cURL
curl -X POST \
https://your-development-store.myshopify.com/admin/api/2026-04/graphql.json \
-H 'Content-Type: application/json' \
-H 'X-Shopify-Access-Token: {access_token}' \
-d '{
"query": "mutation appUsageRecordCreate($description: String!, $price: MoneyInput!, $subscriptionLineItemId: ID!) { appUsageRecordCreate(description: $description, price: $price, subscriptionLineItemId: $subscriptionLineItemId) { userErrors { field message } appUsageRecord { id } } }",
"variables": {
"subscriptionLineItemId": "gid://shopify/AppSubscriptionLineItem/1029266946?v=1&index=1",
"price": {
"amount": 1,
"currencyCode": "USD"
},
"description": "Super Mega Plan 1000 emails"
}
}'
React Router
import { authenticate } from "../shopify.server";
export const loader = async ({request}) => {
const { admin } = await authenticate.admin(request);
const response = await admin.graphql(
`#graphql
mutation appUsageRecordCreate($description: String!, $price: MoneyInput!, $subscriptionLineItemId: ID!) {
appUsageRecordCreate(description: $description, price: $price, subscriptionLineItemId: $subscriptionLineItemId) {
userErrors {
field
message
}
appUsageRecord {
id
}
}
}`,
{
variables: {
"subscriptionLineItemId": "gid://shopify/AppSubscriptionLineItem/1029266946?v=1&index=1",
"price": {
"amount": 1,
"currencyCode": "USD"
},
"description": "Super Mega Plan 1000 emails"
},
},
);
const json = await response.json();
return json.data;
}
Ruby
session = ShopifyAPI::Auth::Session.new(
shop: "your-development-store.myshopify.com",
access_token: access_token
)
client = ShopifyAPI::Clients::Graphql::Admin.new(
session: session
)
query = <<~QUERY
mutation appUsageRecordCreate($description: String!, $price: MoneyInput!, $subscriptionLineItemId: ID!) {
appUsageRecordCreate(description: $description, price: $price, subscriptionLineItemId: $subscriptionLineItemId) {
userErrors {
field
message
}
appUsageRecord {
id
}
}
}
QUERY
variables = {
"subscriptionLineItemId": "gid://shopify/AppSubscriptionLineItem/1029266946?v=1&index=1",
"price": {
"amount": 1,
"currencyCode": "USD"
},
"description": "Super Mega Plan 1000 emails"
}
response = client.query(query: query, variables: variables)
Node.js
const client = new shopify.clients.Graphql({session});
const data = await client.query({
data: {
"query": `mutation appUsageRecordCreate($description: String!, $price: MoneyInput!, $subscriptionLineItemId: ID!) {
appUsageRecordCreate(description: $description, price: $price, subscriptionLineItemId: $subscriptionLineItemId) {
userErrors {
field
message
}
appUsageRecord {
id
}
}
}`,
"variables": {
"subscriptionLineItemId": "gid://shopify/AppSubscriptionLineItem/1029266946?v=1&index=1",
"price": {
"amount": 1,
"currencyCode": "USD"
},
"description": "Super Mega Plan 1000 emails"
},
},
});
Shopify CLI
shopify app execute \
--query \
'mutation appUsageRecordCreate($description: String!, $price: MoneyInput!, $subscriptionLineItemId: ID!) {
appUsageRecordCreate(description: $description, price: $price, subscriptionLineItemId: $subscriptionLineItemId) {
userErrors {
field
message
}
appUsageRecord {
id
}
}
}' \
--variables \
'{
"subscriptionLineItemId": "gid://shopify/AppSubscriptionLineItem/1029266946?v=1&index=1",
"price": {
"amount": 1,
"currencyCode": "USD"
},
"description": "Super Mega Plan 1000 emails"
}'
Direct API Access
const response = await fetch('shopify:admin/api/2026-04/graphql.json', {
method: 'POST',
body: JSON.stringify({
query: `
mutation appUsageRecordCreate($description: String!, $price: MoneyInput!, $subscriptionLineItemId: ID!) {
appUsageRecordCreate(description: $description, price: $price, subscriptionLineItemId: $subscriptionLineItemId) {
userErrors {
field
message
}
appUsageRecord {
id
}
}
}
`,
variables: {
"subscriptionLineItemId": "gid://shopify/AppSubscriptionLineItem/1029266946?v=1&index=1",
"price": {
"amount": 1,
"currencyCode": "USD"
},
"description": "Super Mega Plan 1000 emails"
},
}),
});
const { data } = await response.json();
console.log(data);
Response
{
"appUsageRecordCreate": {
"userErrors": [],
"appUsageRecord": {
"id": "gid://shopify/AppUsageRecord/1034618209"
}
}
}
Creating a usage record above the capped amount returns an error
Description
If the usage record would cause the capped amount specified on the usage pricing plan to be exceeded an error is returned.
Query
mutation appUsageRecordCreate($description: String!, $price: MoneyInput!, $subscriptionLineItemId: ID!) {
appUsageRecordCreate(description: $description, price: $price, subscriptionLineItemId: $subscriptionLineItemId) {
userErrors {
field
message
}
appUsageRecord {
id
}
}
}
Variables
{
"subscriptionLineItemId": "gid://shopify/AppSubscriptionLineItem/1029266946?v=1&index=1",
"price": {
"amount": 100,
"currencyCode": "USD"
},
"description": "Super Mega Plan 1000 emails"
}
cURL
curl -X POST \
https://your-development-store.myshopify.com/admin/api/2026-04/graphql.json \
-H 'Content-Type: application/json' \
-H 'X-Shopify-Access-Token: {access_token}' \
-d '{
"query": "mutation appUsageRecordCreate($description: String!, $price: MoneyInput!, $subscriptionLineItemId: ID!) { appUsageRecordCreate(description: $description, price: $price, subscriptionLineItemId: $subscriptionLineItemId) { userErrors { field message } appUsageRecord { id } } }",
"variables": {
"subscriptionLineItemId": "gid://shopify/AppSubscriptionLineItem/1029266946?v=1&index=1",
"price": {
"amount": 100,
"currencyCode": "USD"
},
"description": "Super Mega Plan 1000 emails"
}
}'
React Router
import { authenticate } from "../shopify.server";
export const loader = async ({request}) => {
const { admin } = await authenticate.admin(request);
const response = await admin.graphql(
`#graphql
mutation appUsageRecordCreate($description: String!, $price: MoneyInput!, $subscriptionLineItemId: ID!) {
appUsageRecordCreate(description: $description, price: $price, subscriptionLineItemId: $subscriptionLineItemId) {
userErrors {
field
message
}
appUsageRecord {
id
}
}
}`,
{
variables: {
"subscriptionLineItemId": "gid://shopify/AppSubscriptionLineItem/1029266946?v=1&index=1",
"price": {
"amount": 100,
"currencyCode": "USD"
},
"description": "Super Mega Plan 1000 emails"
},
},
);
const json = await response.json();
return json.data;
}
Ruby
session = ShopifyAPI::Auth::Session.new(
shop: "your-development-store.myshopify.com",
access_token: access_token
)
client = ShopifyAPI::Clients::Graphql::Admin.new(
session: session
)
query = <<~QUERY
mutation appUsageRecordCreate($description: String!, $price: MoneyInput!, $subscriptionLineItemId: ID!) {
appUsageRecordCreate(description: $description, price: $price, subscriptionLineItemId: $subscriptionLineItemId) {
userErrors {
field
message
}
appUsageRecord {
id
}
}
}
QUERY
variables = {
"subscriptionLineItemId": "gid://shopify/AppSubscriptionLineItem/1029266946?v=1&index=1",
"price": {
"amount": 100,
"currencyCode": "USD"
},
"description": "Super Mega Plan 1000 emails"
}
response = client.query(query: query, variables: variables)
Node.js
const client = new shopify.clients.Graphql({session});
const data = await client.query({
data: {
"query": `mutation appUsageRecordCreate($description: String!, $price: MoneyInput!, $subscriptionLineItemId: ID!) {
appUsageRecordCreate(description: $description, price: $price, subscriptionLineItemId: $subscriptionLineItemId) {
userErrors {
field
message
}
appUsageRecord {
id
}
}
}`,
"variables": {
"subscriptionLineItemId": "gid://shopify/AppSubscriptionLineItem/1029266946?v=1&index=1",
"price": {
"amount": 100,
"currencyCode": "USD"
},
"description": "Super Mega Plan 1000 emails"
},
},
});
Shopify CLI
shopify app execute \
--query \
'mutation appUsageRecordCreate($description: String!, $price: MoneyInput!, $subscriptionLineItemId: ID!) {
appUsageRecordCreate(description: $description, price: $price, subscriptionLineItemId: $subscriptionLineItemId) {
userErrors {
field
message
}
appUsageRecord {
id
}
}
}' \
--variables \
'{
"subscriptionLineItemId": "gid://shopify/AppSubscriptionLineItem/1029266946?v=1&index=1",
"price": {
"amount": 100,
"currencyCode": "USD"
},
"description": "Super Mega Plan 1000 emails"
}'
Direct API Access
const response = await fetch('shopify:admin/api/2026-04/graphql.json', {
method: 'POST',
body: JSON.stringify({
query: `
mutation appUsageRecordCreate($description: String!, $price: MoneyInput!, $subscriptionLineItemId: ID!) {
appUsageRecordCreate(description: $description, price: $price, subscriptionLineItemId: $subscriptionLineItemId) {
userErrors {
field
message
}
appUsageRecord {
id
}
}
}
`,
variables: {
"subscriptionLineItemId": "gid://shopify/AppSubscriptionLineItem/1029266946?v=1&index=1",
"price": {
"amount": 100,
"currencyCode": "USD"
},
"description": "Super Mega Plan 1000 emails"
},
}),
});
const { data } = await response.json();
console.log(data);
Response
{
"appUsageRecordCreate": {
"userErrors": [
{
"field": null,
"message": "Failed to create usage charge"
}
],
"appUsageRecord": null
}
}
Creating usage record with idempotency key exceeding 255 characters results in an error.
Query
mutation appUsageRecordCreate($description: String!, $price: MoneyInput!, $subscriptionLineItemId: ID!, $idempotencyKey: String) {
appUsageRecordCreate(description: $description, price: $price, subscriptionLineItemId: $subscriptionLineItemId, idempotencyKey: $idempotencyKey) {
userErrors {
field
message
}
appUsageRecord {
id
}
}
}
Variables
{
"subscriptionLineItemId": "gid://shopify/AppSubscriptionLineItem/1029266946?v=1&index=1",
"price": {
"amount": 1,
"currencyCode": "USD"
},
"description": "Super Mega Plan 1000 emails",
"idempotencyKey": "****************************************************************************************************************************************************************************************************************************************************************"
}
cURL
curl -X POST \
https://your-development-store.myshopify.com/admin/api/2026-04/graphql.json \
-H 'Content-Type: application/json' \
-H 'X-Shopify-Access-Token: {access_token}' \
-d '{
"query": "mutation appUsageRecordCreate($description: String!, $price: MoneyInput!, $subscriptionLineItemId: ID!, $idempotencyKey: String) { appUsageRecordCreate(description: $description, price: $price, subscriptionLineItemId: $subscriptionLineItemId, idempotencyKey: $idempotencyKey) { userErrors { field message } appUsageRecord { id } } }",
"variables": {
"subscriptionLineItemId": "gid://shopify/AppSubscriptionLineItem/1029266946?v=1&index=1",
"price": {
"amount": 1,
"currencyCode": "USD"
},
"description": "Super Mega Plan 1000 emails",
"idempotencyKey": "****************************************************************************************************************************************************************************************************************************************************************"
}
}'
React Router
import { authenticate } from "../shopify.server";
export const loader = async ({request}) => {
const { admin } = await authenticate.admin(request);
const response = await admin.graphql(
`#graphql
mutation appUsageRecordCreate($description: String!, $price: MoneyInput!, $subscriptionLineItemId: ID!, $idempotencyKey: String) {
appUsageRecordCreate(description: $description, price: $price, subscriptionLineItemId: $subscriptionLineItemId, idempotencyKey: $idempotencyKey) {
userErrors {
field
message
}
appUsageRecord {
id
}
}
}`,
{
variables: {
"subscriptionLineItemId": "gid://shopify/AppSubscriptionLineItem/1029266946?v=1&index=1",
"price": {
"amount": 1,
"currencyCode": "USD"
},
"description": "Super Mega Plan 1000 emails",
"idempotencyKey": "****************************************************************************************************************************************************************************************************************************************************************"
},
},
);
const json = await response.json();
return json.data;
}
Ruby
session = ShopifyAPI::Auth::Session.new(
shop: "your-development-store.myshopify.com",
access_token: access_token
)
client = ShopifyAPI::Clients::Graphql::Admin.new(
session: session
)
query = <<~QUERY
mutation appUsageRecordCreate($description: String!, $price: MoneyInput!, $subscriptionLineItemId: ID!, $idempotencyKey: String) {
appUsageRecordCreate(description: $description, price: $price, subscriptionLineItemId: $subscriptionLineItemId, idempotencyKey: $idempotencyKey) {
userErrors {
field
message
}
appUsageRecord {
id
}
}
}
QUERY
variables = {
"subscriptionLineItemId": "gid://shopify/AppSubscriptionLineItem/1029266946?v=1&index=1",
"price": {
"amount": 1,
"currencyCode": "USD"
},
"description": "Super Mega Plan 1000 emails",
"idempotencyKey": "****************************************************************************************************************************************************************************************************************************************************************"
}
response = client.query(query: query, variables: variables)
Node.js
const client = new shopify.clients.Graphql({session});
const data = await client.query({
data: {
"query": `mutation appUsageRecordCreate($description: String!, $price: MoneyInput!, $subscriptionLineItemId: ID!, $idempotencyKey: String) {
appUsageRecordCreate(description: $description, price: $price, subscriptionLineItemId: $subscriptionLineItemId, idempotencyKey: $idempotencyKey) {
userErrors {
field
message
}
appUsageRecord {
id
}
}
}`,
"variables": {
"subscriptionLineItemId": "gid://shopify/AppSubscriptionLineItem/1029266946?v=1&index=1",
"price": {
"amount": 1,
"currencyCode": "USD"
},
"description": "Super Mega Plan 1000 emails",
"idempotencyKey": "****************************************************************************************************************************************************************************************************************************************************************"
},
},
});
Shopify CLI
shopify app execute \
--query \
'mutation appUsageRecordCreate($description: String!, $price: MoneyInput!, $subscriptionLineItemId: ID!, $idempotencyKey: String) {
appUsageRecordCreate(description: $description, price: $price, subscriptionLineItemId: $subscriptionLineItemId, idempotencyKey: $idempotencyKey) {
userErrors {
field
message
}
appUsageRecord {
id
}
}
}' \
--variables \
'{
"subscriptionLineItemId": "gid://shopify/AppSubscriptionLineItem/1029266946?v=1&index=1",
"price": {
"amount": 1,
"currencyCode": "USD"
},
"description": "Super Mega Plan 1000 emails",
"idempotencyKey": "****************************************************************************************************************************************************************************************************************************************************************"
}'
Direct API Access
const response = await fetch('shopify:admin/api/2026-04/graphql.json', {
method: 'POST',
body: JSON.stringify({
query: `
mutation appUsageRecordCreate($description: String!, $price: MoneyInput!, $subscriptionLineItemId: ID!, $idempotencyKey: String) {
appUsageRecordCreate(description: $description, price: $price, subscriptionLineItemId: $subscriptionLineItemId, idempotencyKey: $idempotencyKey) {
userErrors {
field
message
}
appUsageRecord {
id
}
}
}
`,
variables: {
"subscriptionLineItemId": "gid://shopify/AppSubscriptionLineItem/1029266946?v=1&index=1",
"price": {
"amount": 1,
"currencyCode": "USD"
},
"description": "Super Mega Plan 1000 emails",
"idempotencyKey": "****************************************************************************************************************************************************************************************************************************************************************"
},
}),
});
const { data } = await response.json();
console.log(data);
Response
{
"appUsageRecordCreate": {
"userErrors": [
{
"field": [
"idempotencyKey"
],
"message": "Idempotency key exceeds the maximum length."
}
],
"appUsageRecord": null
}
}
Creating usage record with idempotency key returns an error when another request for the same shop, app, idempotency key is in progress.
Query
mutation appUsageRecordCreate($description: String!, $price: MoneyInput!, $subscriptionLineItemId: ID!, $idempotencyKey: String) {
appUsageRecordCreate(description: $description, price: $price, subscriptionLineItemId: $subscriptionLineItemId, idempotencyKey: $idempotencyKey) {
userErrors {
field
message
}
appUsageRecord {
id
}
}
}
Variables
{
"subscriptionLineItemId": "gid://shopify/AppSubscriptionLineItem/1029266946?v=1&index=1",
"price": {
"amount": 1,
"currencyCode": "USD"
},
"description": "Super Mega Plan 1000 emails",
"idempotencyKey": "Some idempotency key"
}
cURL
curl -X POST \
https://your-development-store.myshopify.com/admin/api/2026-04/graphql.json \
-H 'Content-Type: application/json' \
-H 'X-Shopify-Access-Token: {access_token}' \
-d '{
"query": "mutation appUsageRecordCreate($description: String!, $price: MoneyInput!, $subscriptionLineItemId: ID!, $idempotencyKey: String) { appUsageRecordCreate(description: $description, price: $price, subscriptionLineItemId: $subscriptionLineItemId, idempotencyKey: $idempotencyKey) { userErrors { field message } appUsageRecord { id } } }",
"variables": {
"subscriptionLineItemId": "gid://shopify/AppSubscriptionLineItem/1029266946?v=1&index=1",
"price": {
"amount": 1,
"currencyCode": "USD"
},
"description": "Super Mega Plan 1000 emails",
"idempotencyKey": "Some idempotency key"
}
}'
React Router
import { authenticate } from "../shopify.server";
export const loader = async ({request}) => {
const { admin } = await authenticate.admin(request);
const response = await admin.graphql(
`#graphql
mutation appUsageRecordCreate($description: String!, $price: MoneyInput!, $subscriptionLineItemId: ID!, $idempotencyKey: String) {
appUsageRecordCreate(description: $description, price: $price, subscriptionLineItemId: $subscriptionLineItemId, idempotencyKey: $idempotencyKey) {
userErrors {
field
message
}
appUsageRecord {
id
}
}
}`,
{
variables: {
"subscriptionLineItemId": "gid://shopify/AppSubscriptionLineItem/1029266946?v=1&index=1",
"price": {
"amount": 1,
"currencyCode": "USD"
},
"description": "Super Mega Plan 1000 emails",
"idempotencyKey": "Some idempotency key"
},
},
);
const json = await response.json();
return json.data;
}
Ruby
session = ShopifyAPI::Auth::Session.new(
shop: "your-development-store.myshopify.com",
access_token: access_token
)
client = ShopifyAPI::Clients::Graphql::Admin.new(
session: session
)
query = <<~QUERY
mutation appUsageRecordCreate($description: String!, $price: MoneyInput!, $subscriptionLineItemId: ID!, $idempotencyKey: String) {
appUsageRecordCreate(description: $description, price: $price, subscriptionLineItemId: $subscriptionLineItemId, idempotencyKey: $idempotencyKey) {
userErrors {
field
message
}
appUsageRecord {
id
}
}
}
QUERY
variables = {
"subscriptionLineItemId": "gid://shopify/AppSubscriptionLineItem/1029266946?v=1&index=1",
"price": {
"amount": 1,
"currencyCode": "USD"
},
"description": "Super Mega Plan 1000 emails",
"idempotencyKey": "Some idempotency key"
}
response = client.query(query: query, variables: variables)
Node.js
const client = new shopify.clients.Graphql({session});
const data = await client.query({
data: {
"query": `mutation appUsageRecordCreate($description: String!, $price: MoneyInput!, $subscriptionLineItemId: ID!, $idempotencyKey: String) {
appUsageRecordCreate(description: $description, price: $price, subscriptionLineItemId: $subscriptionLineItemId, idempotencyKey: $idempotencyKey) {
userErrors {
field
message
}
appUsageRecord {
id
}
}
}`,
"variables": {
"subscriptionLineItemId": "gid://shopify/AppSubscriptionLineItem/1029266946?v=1&index=1",
"price": {
"amount": 1,
"currencyCode": "USD"
},
"description": "Super Mega Plan 1000 emails",
"idempotencyKey": "Some idempotency key"
},
},
});
Shopify CLI
shopify app execute \
--query \
'mutation appUsageRecordCreate($description: String!, $price: MoneyInput!, $subscriptionLineItemId: ID!, $idempotencyKey: String) {
appUsageRecordCreate(description: $description, price: $price, subscriptionLineItemId: $subscriptionLineItemId, idempotencyKey: $idempotencyKey) {
userErrors {
field
message
}
appUsageRecord {
id
}
}
}' \
--variables \
'{
"subscriptionLineItemId": "gid://shopify/AppSubscriptionLineItem/1029266946?v=1&index=1",
"price": {
"amount": 1,
"currencyCode": "USD"
},
"description": "Super Mega Plan 1000 emails",
"idempotencyKey": "Some idempotency key"
}'
Direct API Access
const response = await fetch('shopify:admin/api/2026-04/graphql.json', {
method: 'POST',
body: JSON.stringify({
query: `
mutation appUsageRecordCreate($description: String!, $price: MoneyInput!, $subscriptionLineItemId: ID!, $idempotencyKey: String) {
appUsageRecordCreate(description: $description, price: $price, subscriptionLineItemId: $subscriptionLineItemId, idempotencyKey: $idempotencyKey) {
userErrors {
field
message
}
appUsageRecord {
id
}
}
}
`,
variables: {
"subscriptionLineItemId": "gid://shopify/AppSubscriptionLineItem/1029266946?v=1&index=1",
"price": {
"amount": 1,
"currencyCode": "USD"
},
"description": "Super Mega Plan 1000 emails",
"idempotencyKey": "Some idempotency key"
},
}),
});
const { data } = await response.json();
console.log(data);
Response
{
"appUsageRecordCreate": {
"userErrors": [
{
"field": [
"idempotencyKey"
],
"message": "Another request for the same idempotency key is being processed. Please try again."
}
],
"appUsageRecord": null
}
}