--- title: subscriptionBillingAttempt - GraphQL Admin description: Returns a `SubscriptionBillingAttempt` resource by ID. api_version: 2025-10 api_name: admin type: query api_type: graphql source_url: html: https://shopify.dev/docs/api/admin-graphql/latest/queries/subscriptionbillingattempt md: https://shopify.dev/docs/api/admin-graphql/latest/queries/subscriptionbillingattempt.md --- # subscription​Billing​Attempt query Returns a `SubscriptionBillingAttempt` resource by ID. ## Arguments * id [ID!](https://shopify.dev/docs/api/admin-graphql/latest/scalars/ID) required The ID of the `SubscriptionBillingAttempt` to return. *** ## Possible returns * Subscription​Billing​Attempt [Subscription​Billing​Attempt](https://shopify.dev/docs/api/admin-graphql/latest/objects/SubscriptionBillingAttempt) A record of an execution of the subscription billing process. Billing attempts use idempotency keys to avoid duplicate order creation. When a billing attempt completes successfully, it creates an [`Order`](https://shopify.dev/docs/api/admin-graphql/latest/objects/Order). The attempt includes associated payment transactions and any errors that occur during billing. If 3D Secure authentication is required, the `nextActionUrl` field provides the redirect URL for customer verification. * completed​At [Date​Time](https://shopify.dev/docs/api/admin-graphql/latest/scalars/DateTime) The date and time when the billing attempt was completed. * created​At [Date​Time!](https://shopify.dev/docs/api/admin-graphql/latest/scalars/DateTime) non-null The date and time when the billing attempt was created. * id [ID!](https://shopify.dev/docs/api/admin-graphql/latest/scalars/ID) non-null A globally-unique ID. * idempotency​Key [String!](https://shopify.dev/docs/api/admin-graphql/latest/scalars/String) non-null A unique key generated by the client to avoid duplicate payments. * next​Action​Url [URL](https://shopify.dev/docs/api/admin-graphql/latest/scalars/URL) The URL where the customer needs to be redirected so they can complete the 3D Secure payment flow. * order [Order](https://shopify.dev/docs/api/admin-graphql/latest/objects/Order) The result of this billing attempt if completed successfully. * origin​Time [Date​Time](https://shopify.dev/docs/api/admin-graphql/latest/scalars/DateTime) The date and time used to calculate fulfillment intervals for a billing attempt that successfully completed after the current anchor date. To prevent fulfillment from being pushed to the next anchor date, this field can override the billing attempt date. * payment​Group​Id [String](https://shopify.dev/docs/api/admin-graphql/latest/scalars/String) The reference shared between retried payment attempts. * payment​Session​Id [String](https://shopify.dev/docs/api/admin-graphql/latest/scalars/String) The reference shared between payment attempts with similar payment details. * processing​Error [Subscription​Billing​Attempt​Processing​Error](https://shopify.dev/docs/api/admin-graphql/latest/interfaces/SubscriptionBillingAttemptProcessingError) Error information from processing the billing attempt. * ready [Boolean!](https://shopify.dev/docs/api/admin-graphql/latest/scalars/Boolean) non-null Whether the billing attempt is still processing. * respect​Inventory​Policy [Boolean!](https://shopify.dev/docs/api/admin-graphql/latest/scalars/Boolean) non-null Whether the billing attempt respects the merchant's inventory policy. * subscription​Contract [Subscription​Contract!](https://shopify.dev/docs/api/admin-graphql/latest/objects/SubscriptionContract) non-null The subscription contract. * transactions [Order​Transaction​Connection!](https://shopify.dev/docs/api/admin-graphql/latest/connections/OrderTransactionConnection) non-null The transactions created by the billing attempt. * first [Int](https://shopify.dev/docs/api/admin-graphql/latest/scalars/Int) ### Arguments The first `n` elements from the [paginated list](https://shopify.dev/api/usage/pagination-graphql). * after [String](https://shopify.dev/docs/api/admin-graphql/latest/scalars/String) The elements that come after the specified [cursor](https://shopify.dev/api/usage/pagination-graphql). * last [Int](https://shopify.dev/docs/api/admin-graphql/latest/scalars/Int) The last `n` elements from the [paginated list](https://shopify.dev/api/usage/pagination-graphql). * before [String](https://shopify.dev/docs/api/admin-graphql/latest/scalars/String) The elements that come before the specified [cursor](https://shopify.dev/api/usage/pagination-graphql). * reverse [Boolean](https://shopify.dev/docs/api/admin-graphql/latest/scalars/Boolean) Default:false Reverse the order of the underlying list. *** * error​Code [Subscription​Billing​Attempt​Error​Code](https://shopify.dev/docs/api/admin-graphql/latest/enums/SubscriptionBillingAttemptErrorCode) Deprecated * error​Message [String](https://shopify.dev/docs/api/admin-graphql/latest/scalars/String) Deprecated *** ## Examples * ### Query for a billing attempt with a processing error #### Description Shows how to query for error details. #### Query ```graphql query findBillingAttempt($subscriptionBillingAttempt: ID!) { subscriptionBillingAttempt(id: $subscriptionBillingAttempt) { id nextActionUrl idempotencyKey ready order { id } subscriptionContract { id } processingError { __typename code message ... on SubscriptionBillingAttemptInsufficientStockProductVariantsError { insufficientStockProductVariants(first: 3) { edges { node { id title } } } } } } } ``` #### Variables ```json { "subscriptionBillingAttempt": "gid://shopify/SubscriptionBillingAttempt/693432113" } ``` #### cURL ```bash curl -X POST \ https://your-development-store.myshopify.com/admin/api/2025-10/graphql.json \ -H 'Content-Type: application/json' \ -H 'X-Shopify-Access-Token: {access_token}' \ -d '{ "query": "query findBillingAttempt($subscriptionBillingAttempt: ID!) { subscriptionBillingAttempt(id: $subscriptionBillingAttempt) { id nextActionUrl idempotencyKey ready order { id } subscriptionContract { id } processingError { __typename code message ... on SubscriptionBillingAttemptInsufficientStockProductVariantsError { insufficientStockProductVariants(first: 3) { edges { node { id title } } } } } } }", "variables": { "subscriptionBillingAttempt": "gid://shopify/SubscriptionBillingAttempt/693432113" } }' ``` #### React Router ```javascript import { authenticate } from "../shopify.server"; export const loader = async ({request}) => { const { admin } = await authenticate.admin(request); const response = await admin.graphql( `#graphql query findBillingAttempt($subscriptionBillingAttempt: ID!) { subscriptionBillingAttempt(id: $subscriptionBillingAttempt) { id nextActionUrl idempotencyKey ready order { id } subscriptionContract { id } processingError { __typename code message ... on SubscriptionBillingAttemptInsufficientStockProductVariantsError { insufficientStockProductVariants(first: 3) { edges { node { id title } } } } } } }`, { variables: { "subscriptionBillingAttempt": "gid://shopify/SubscriptionBillingAttempt/693432113" }, }, ); const json = await response.json(); return json.data; } ``` #### Ruby ```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 query findBillingAttempt($subscriptionBillingAttempt: ID!) { subscriptionBillingAttempt(id: $subscriptionBillingAttempt) { id nextActionUrl idempotencyKey ready order { id } subscriptionContract { id } processingError { __typename code message ... on SubscriptionBillingAttemptInsufficientStockProductVariantsError { insufficientStockProductVariants(first: 3) { edges { node { id title } } } } } } } QUERY variables = { "subscriptionBillingAttempt": "gid://shopify/SubscriptionBillingAttempt/693432113" } response = client.query(query: query, variables: variables) ``` #### Node.js ```javascript const client = new shopify.clients.Graphql({session}); const data = await client.query({ data: { "query": `query findBillingAttempt($subscriptionBillingAttempt: ID!) { subscriptionBillingAttempt(id: $subscriptionBillingAttempt) { id nextActionUrl idempotencyKey ready order { id } subscriptionContract { id } processingError { __typename code message ... on SubscriptionBillingAttemptInsufficientStockProductVariantsError { insufficientStockProductVariants(first: 3) { edges { node { id title } } } } } } }`, "variables": { "subscriptionBillingAttempt": "gid://shopify/SubscriptionBillingAttempt/693432113" }, }, }); ``` #### Response ```json { "subscriptionBillingAttempt": { "id": "gid://shopify/SubscriptionBillingAttempt/693432113", "nextActionUrl": null, "idempotencyKey": "unique-token", "ready": true, "order": { "id": "gid://shopify/Order/148977776" }, "subscriptionContract": { "id": "gid://shopify/SubscriptionContract/593791907" }, "processingError": { "__typename": "SubscriptionBillingAttemptInsufficientStockProductVariantsError", "code": "INSUFFICIENT_INVENTORY", "message": "Insufficient inventory.", "insufficientStockProductVariants": { "edges": [ { "node": { "id": "gid://shopify/ProductVariant/43729076", "title": "151cm" } } ] } } } } ``` * ### Query for a subscription billing attempt #### Description Finds a subscription billing attempt by id. #### Query ```graphql query findBillingAttempt($subscriptionBillingAttempt: ID!) { subscriptionBillingAttempt(id: $subscriptionBillingAttempt) { id nextActionUrl idempotencyKey ready order { id } subscriptionContract { id } errorMessage errorCode } } ``` #### Variables ```json { "subscriptionBillingAttempt": "gid://shopify/SubscriptionBillingAttempt/693432112" } ``` #### cURL ```bash curl -X POST \ https://your-development-store.myshopify.com/admin/api/2025-10/graphql.json \ -H 'Content-Type: application/json' \ -H 'X-Shopify-Access-Token: {access_token}' \ -d '{ "query": "query findBillingAttempt($subscriptionBillingAttempt: ID!) { subscriptionBillingAttempt(id: $subscriptionBillingAttempt) { id nextActionUrl idempotencyKey ready order { id } subscriptionContract { id } errorMessage errorCode } }", "variables": { "subscriptionBillingAttempt": "gid://shopify/SubscriptionBillingAttempt/693432112" } }' ``` #### React Router ```javascript import { authenticate } from "../shopify.server"; export const loader = async ({request}) => { const { admin } = await authenticate.admin(request); const response = await admin.graphql( `#graphql query findBillingAttempt($subscriptionBillingAttempt: ID!) { subscriptionBillingAttempt(id: $subscriptionBillingAttempt) { id nextActionUrl idempotencyKey ready order { id } subscriptionContract { id } errorMessage errorCode } }`, { variables: { "subscriptionBillingAttempt": "gid://shopify/SubscriptionBillingAttempt/693432112" }, }, ); const json = await response.json(); return json.data; } ``` #### Ruby ```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 query findBillingAttempt($subscriptionBillingAttempt: ID!) { subscriptionBillingAttempt(id: $subscriptionBillingAttempt) { id nextActionUrl idempotencyKey ready order { id } subscriptionContract { id } errorMessage errorCode } } QUERY variables = { "subscriptionBillingAttempt": "gid://shopify/SubscriptionBillingAttempt/693432112" } response = client.query(query: query, variables: variables) ``` #### Node.js ```javascript const client = new shopify.clients.Graphql({session}); const data = await client.query({ data: { "query": `query findBillingAttempt($subscriptionBillingAttempt: ID!) { subscriptionBillingAttempt(id: $subscriptionBillingAttempt) { id nextActionUrl idempotencyKey ready order { id } subscriptionContract { id } errorMessage errorCode } }`, "variables": { "subscriptionBillingAttempt": "gid://shopify/SubscriptionBillingAttempt/693432112" }, }, }); ``` #### Response ```json { "subscriptionBillingAttempt": { "id": "gid://shopify/SubscriptionBillingAttempt/693432112", "nextActionUrl": null, "idempotencyKey": "unique-token", "ready": true, "order": { "id": "gid://shopify/Order/148977776" }, "subscriptionContract": { "id": "gid://shopify/SubscriptionContract/593791907" }, "errorMessage": null, "errorCode": null } } ``` [Open in GraphiQL](http://localhost:3457/graphiql?query=query%20findBillingAttempt\(%24subscriptionBillingAttempt%3A%20ID!\)%20%7B%0A%20%20subscriptionBillingAttempt\(id%3A%20%24subscriptionBillingAttempt\)%20%7B%0A%20%20%20%20id%0A%20%20%20%20nextActionUrl%0A%20%20%20%20idempotencyKey%0A%20%20%20%20ready%0A%20%20%20%20order%20%7B%0A%20%20%20%20%20%20id%0A%20%20%20%20%7D%0A%20%20%20%20subscriptionContract%20%7B%0A%20%20%20%20%20%20id%0A%20%20%20%20%7D%0A%20%20%20%20processingError%20%7B%0A%20%20%20%20%20%20__typename%0A%20%20%20%20%20%20code%0A%20%20%20%20%20%20message%0A%20%20%20%20%20%20...%20on%20SubscriptionBillingAttemptInsufficientStockProductVariantsError%20%7B%0A%20%20%20%20%20%20%20%20insufficientStockProductVariants\(first%3A%203\)%20%7B%0A%20%20%20%20%20%20%20%20%20%20edges%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20node%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20id%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20title%0A%20%20%20%20%20%20%20%20%20%20%20%20%7D%0A%20%20%20%20%20%20%20%20%20%20%7D%0A%20%20%20%20%20%20%20%20%7D%0A%20%20%20%20%20%20%7D%0A%20%20%20%20%7D%0A%20%20%7D%0A%7D\&variables=%7B%0A%20%20%22subscriptionBillingAttempt%22%3A%20%22gid%3A%2F%2Fshopify%2FSubscriptionBillingAttempt%2F693432113%22%0A%7D) ##### GQL ```graphql query findBillingAttempt($subscriptionBillingAttempt: ID!) { subscriptionBillingAttempt(id: $subscriptionBillingAttempt) { id nextActionUrl idempotencyKey ready order { id } subscriptionContract { id } processingError { __typename code message ... on SubscriptionBillingAttemptInsufficientStockProductVariantsError { insufficientStockProductVariants(first: 3) { edges { node { id title } } } } } } } ``` ##### cURL ```bash curl -X POST \ https://your-development-store.myshopify.com/admin/api/2025-10/graphql.json \ -H 'Content-Type: application/json' \ -H 'X-Shopify-Access-Token: {access_token}' \ -d '{ "query": "query findBillingAttempt($subscriptionBillingAttempt: ID!) { subscriptionBillingAttempt(id: $subscriptionBillingAttempt) { id nextActionUrl idempotencyKey ready order { id } subscriptionContract { id } processingError { __typename code message ... on SubscriptionBillingAttemptInsufficientStockProductVariantsError { insufficientStockProductVariants(first: 3) { edges { node { id title } } } } } } }", "variables": { "subscriptionBillingAttempt": "gid://shopify/SubscriptionBillingAttempt/693432113" } }' ``` ##### React Router ```javascript import { authenticate } from "../shopify.server"; export const loader = async ({request}) => { const { admin } = await authenticate.admin(request); const response = await admin.graphql( `#graphql query findBillingAttempt($subscriptionBillingAttempt: ID!) { subscriptionBillingAttempt(id: $subscriptionBillingAttempt) { id nextActionUrl idempotencyKey ready order { id } subscriptionContract { id } processingError { __typename code message ... on SubscriptionBillingAttemptInsufficientStockProductVariantsError { insufficientStockProductVariants(first: 3) { edges { node { id title } } } } } } }`, { variables: { "subscriptionBillingAttempt": "gid://shopify/SubscriptionBillingAttempt/693432113" }, }, ); const json = await response.json(); return json.data; } ``` ##### Node.js ```javascript const client = new shopify.clients.Graphql({session}); const data = await client.query({ data: { "query": `query findBillingAttempt($subscriptionBillingAttempt: ID!) { subscriptionBillingAttempt(id: $subscriptionBillingAttempt) { id nextActionUrl idempotencyKey ready order { id } subscriptionContract { id } processingError { __typename code message ... on SubscriptionBillingAttemptInsufficientStockProductVariantsError { insufficientStockProductVariants(first: 3) { edges { node { id title } } } } } } }`, "variables": { "subscriptionBillingAttempt": "gid://shopify/SubscriptionBillingAttempt/693432113" }, }, }); ``` ##### Ruby ```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 query findBillingAttempt($subscriptionBillingAttempt: ID!) { subscriptionBillingAttempt(id: $subscriptionBillingAttempt) { id nextActionUrl idempotencyKey ready order { id } subscriptionContract { id } processingError { __typename code message ... on SubscriptionBillingAttemptInsufficientStockProductVariantsError { insufficientStockProductVariants(first: 3) { edges { node { id title } } } } } } } QUERY variables = { "subscriptionBillingAttempt": "gid://shopify/SubscriptionBillingAttempt/693432113" } response = client.query(query: query, variables: variables) ``` ## Input variables JSON ```json { "subscriptionBillingAttempt": "gid://shopify/SubscriptionBillingAttempt/693432113" } ``` ## Response JSON ```json { "subscriptionBillingAttempt": { "id": "gid://shopify/SubscriptionBillingAttempt/693432113", "nextActionUrl": null, "idempotencyKey": "unique-token", "ready": true, "order": { "id": "gid://shopify/Order/148977776" }, "subscriptionContract": { "id": "gid://shopify/SubscriptionContract/593791907" }, "processingError": { "__typename": "SubscriptionBillingAttemptInsufficientStockProductVariantsError", "code": "INSUFFICIENT_INVENTORY", "message": "Insufficient inventory.", "insufficientStockProductVariants": { "edges": [ { "node": { "id": "gid://shopify/ProductVariant/43729076", "title": "151cm" } } ] } } } } ```