# subscriptionBillingAttempt - admin-graphql - QUERY
Version: 2025-01

## Description
Returns a SubscriptionBillingAttempt by ID.

### Access Scopes



## Arguments
* [id](/docs/api/admin-graphql/2025-01/scalars/ID): ID! - The ID of the `SubscriptionBillingAttempt` to return.


## Returns
* [completedAt](/docs/api/admin-graphql/2025-01/scalars/DateTime): DateTime The date and time when the billing attempt was completed.
* [createdAt](/docs/api/admin-graphql/2025-01/scalars/DateTime): DateTime! The date and time when the billing attempt was created.
* [errorCode](/docs/api/admin-graphql/2025-01/enums/SubscriptionBillingAttemptErrorCode): SubscriptionBillingAttemptErrorCode A code corresponding to a payment error during processing.
* [errorMessage](/docs/api/admin-graphql/2025-01/scalars/String): String A message describing a payment error during processing.
* [id](/docs/api/admin-graphql/2025-01/scalars/ID): ID! A globally-unique ID.
* [idempotencyKey](/docs/api/admin-graphql/2025-01/scalars/String): String! A unique key generated by the client to avoid duplicate payments.
* [nextActionUrl](/docs/api/admin-graphql/2025-01/scalars/URL): URL The URL where the customer needs to be redirected so they can complete the 3D Secure payment flow.
* [order](/docs/api/admin-graphql/2025-01/objects/Order): Order The result of this billing attempt if completed successfully.
* [originTime](/docs/api/admin-graphql/2025-01/scalars/DateTime): 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.
* [paymentGroupId](/docs/api/admin-graphql/2025-01/scalars/String): String The reference shared between retried payment attempts.
* [paymentSessionId](/docs/api/admin-graphql/2025-01/scalars/String): String The reference shared between payment attempts with similar payment details.
* [processingError](/docs/api/admin-graphql/2025-01/interfaces/SubscriptionBillingAttemptProcessingError): SubscriptionBillingAttemptProcessingError Error information from processing the billing attempt.
* [ready](/docs/api/admin-graphql/2025-01/scalars/Boolean): Boolean! Whether the billing attempt is still processing.
* [respectInventoryPolicy](/docs/api/admin-graphql/2025-01/scalars/Boolean): Boolean! Whether the billing attempt respects the merchant's inventory policy.
* [subscriptionContract](/docs/api/admin-graphql/2025-01/objects/SubscriptionContract): SubscriptionContract! The subscription contract.


## Examples
### Query for a billing attempt with a processing error
Curl example: "curl -X POST \\\nhttps://your-development-store.myshopify.com/admin/api/2025-01/graphql.json \\\n-H 'Content-Type: application/json' \\\n-H 'X-Shopify-Access-Token: {access_token}' \\\n-d '{\n\"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 } } } } } } }\",\n \"variables\": {\n    \"subscriptionBillingAttempt\": \"gid://shopify/SubscriptionBillingAttempt/693432113\"\n  }\n}'\n"
Node example: "const client = new shopify.clients.Graphql({session});\nconst data = await client.query({\n  data: {\n    \"query\": `query findBillingAttempt($subscriptionBillingAttempt: ID!) {\n      subscriptionBillingAttempt(id: $subscriptionBillingAttempt) {\n        id\n        nextActionUrl\n        idempotencyKey\n        ready\n        order {\n          id\n        }\n        subscriptionContract {\n          id\n        }\n        processingError {\n          __typename\n          code\n          message\n          ... on SubscriptionBillingAttemptInsufficientStockProductVariantsError {\n            insufficientStockProductVariants(first: 3) {\n              edges {\n                node {\n                  id\n                  title\n                }\n              }\n            }\n          }\n        }\n      }\n    }`,\n    \"variables\": {\n      \"subscriptionBillingAttempt\": \"gid://shopify/SubscriptionBillingAttempt/693432113\"\n    },\n  },\n});\n"
Ruby example: "session = ShopifyAPI::Auth::Session.new(\n  shop: \"your-development-store.myshopify.com\",\n  access_token: access_token\n)\nclient = ShopifyAPI::Clients::Graphql::Admin.new(\n  session: session\n)\n\nquery = <<~QUERY\n  query findBillingAttempt($subscriptionBillingAttempt: ID!) {\n    subscriptionBillingAttempt(id: $subscriptionBillingAttempt) {\n      id\n      nextActionUrl\n      idempotencyKey\n      ready\n      order {\n        id\n      }\n      subscriptionContract {\n        id\n      }\n      processingError {\n        __typename\n        code\n        message\n        ... on SubscriptionBillingAttemptInsufficientStockProductVariantsError {\n          insufficientStockProductVariants(first: 3) {\n            edges {\n              node {\n                id\n                title\n              }\n            }\n          }\n        }\n      }\n    }\n  }\nQUERY\n\nvariables = {\n  \"subscriptionBillingAttempt\": \"gid://shopify/SubscriptionBillingAttempt/693432113\"\n}\n\nresponse = client.query(query: query, variables: variables)\n" 
Remix example: "const { admin } = await authenticate.admin(request);\n\nconst response = await admin.graphql(\n  `#graphql\n  query findBillingAttempt($subscriptionBillingAttempt: ID!) {\n    subscriptionBillingAttempt(id: $subscriptionBillingAttempt) {\n      id\n      nextActionUrl\n      idempotencyKey\n      ready\n      order {\n        id\n      }\n      subscriptionContract {\n        id\n      }\n      processingError {\n        __typename\n        code\n        message\n        ... on SubscriptionBillingAttemptInsufficientStockProductVariantsError {\n          insufficientStockProductVariants(first: 3) {\n            edges {\n              node {\n                id\n                title\n              }\n            }\n          }\n        }\n      }\n    }\n  }`,\n  {\n    variables: {\n      \"subscriptionBillingAttempt\": \"gid://shopify/SubscriptionBillingAttempt/693432113\"\n    },\n  },\n);\n\nconst data = await response.json();\n"
Graphql query: "query findBillingAttempt($subscriptionBillingAttempt: ID!) {\n  subscriptionBillingAttempt(id: $subscriptionBillingAttempt) {\n    id\n    nextActionUrl\n    idempotencyKey\n    ready\n    order {\n      id\n    }\n    subscriptionContract {\n      id\n    }\n    processingError {\n      __typename\n      code\n      message\n      ... on SubscriptionBillingAttemptInsufficientStockProductVariantsError {\n        insufficientStockProductVariants(first: 3) {\n          edges {\n            node {\n              id\n              title\n            }\n          }\n        }\n      }\n    }\n  }\n}"
#### Graphql Input
{
  "subscriptionBillingAttempt": "gid://shopify/SubscriptionBillingAttempt/693432113"
}
#### Graphql Response
{
  "data": {
    "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
Curl example: "curl -X POST \\\nhttps://your-development-store.myshopify.com/admin/api/2025-01/graphql.json \\\n-H 'Content-Type: application/json' \\\n-H 'X-Shopify-Access-Token: {access_token}' \\\n-d '{\n\"query\": \"query findBillingAttempt($subscriptionBillingAttempt: ID!) { subscriptionBillingAttempt(id: $subscriptionBillingAttempt) { id nextActionUrl idempotencyKey ready order { id } subscriptionContract { id } errorMessage errorCode } }\",\n \"variables\": {\n    \"subscriptionBillingAttempt\": \"gid://shopify/SubscriptionBillingAttempt/693432112\"\n  }\n}'\n"
Node example: "const client = new shopify.clients.Graphql({session});\nconst data = await client.query({\n  data: {\n    \"query\": `query findBillingAttempt($subscriptionBillingAttempt: ID!) {\n      subscriptionBillingAttempt(id: $subscriptionBillingAttempt) {\n        id\n        nextActionUrl\n        idempotencyKey\n        ready\n        order {\n          id\n        }\n        subscriptionContract {\n          id\n        }\n        errorMessage\n        errorCode\n      }\n    }`,\n    \"variables\": {\n      \"subscriptionBillingAttempt\": \"gid://shopify/SubscriptionBillingAttempt/693432112\"\n    },\n  },\n});\n"
Ruby example: "session = ShopifyAPI::Auth::Session.new(\n  shop: \"your-development-store.myshopify.com\",\n  access_token: access_token\n)\nclient = ShopifyAPI::Clients::Graphql::Admin.new(\n  session: session\n)\n\nquery = <<~QUERY\n  query findBillingAttempt($subscriptionBillingAttempt: ID!) {\n    subscriptionBillingAttempt(id: $subscriptionBillingAttempt) {\n      id\n      nextActionUrl\n      idempotencyKey\n      ready\n      order {\n        id\n      }\n      subscriptionContract {\n        id\n      }\n      errorMessage\n      errorCode\n    }\n  }\nQUERY\n\nvariables = {\n  \"subscriptionBillingAttempt\": \"gid://shopify/SubscriptionBillingAttempt/693432112\"\n}\n\nresponse = client.query(query: query, variables: variables)\n" 
Remix example: "const { admin } = await authenticate.admin(request);\n\nconst response = await admin.graphql(\n  `#graphql\n  query findBillingAttempt($subscriptionBillingAttempt: ID!) {\n    subscriptionBillingAttempt(id: $subscriptionBillingAttempt) {\n      id\n      nextActionUrl\n      idempotencyKey\n      ready\n      order {\n        id\n      }\n      subscriptionContract {\n        id\n      }\n      errorMessage\n      errorCode\n    }\n  }`,\n  {\n    variables: {\n      \"subscriptionBillingAttempt\": \"gid://shopify/SubscriptionBillingAttempt/693432112\"\n    },\n  },\n);\n\nconst data = await response.json();\n"
Graphql query: "query findBillingAttempt($subscriptionBillingAttempt: ID!) {\n  subscriptionBillingAttempt(id: $subscriptionBillingAttempt) {\n    id\n    nextActionUrl\n    idempotencyKey\n    ready\n    order {\n      id\n    }\n    subscriptionContract {\n      id\n    }\n    errorMessage\n    errorCode\n  }\n}"
#### Graphql Input
{
  "subscriptionBillingAttempt": "gid://shopify/SubscriptionBillingAttempt/693432112"
}
#### Graphql Response
{
  "data": {
    "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
    }
  }
}