0

Get Bulk Operation

by
Published today

Get a bulk operation by ID (numeric ID or BulkOperation GID): its status (CREATED, RUNNING, COMPLETED, FAILED, ...), object count and, once COMPLETED, the url of the JSONL result (partialDataUrl when it FAILED part-way).

Script shopify Verified

The script

Submitted by hugo989 Typescript (fetch-only)
Verified 2 hours ago
1
//native
2

3
/**
4
 * Get Bulk Operation
5
 * Get a bulk operation by ID (numeric ID or BulkOperation GID): its status (CREATED, RUNNING, COMPLETED, FAILED, ...), object count and, once COMPLETED, the url of the JSONL result (partialDataUrl when it FAILED part-way).
6
 */
7
export async function main(auth: RT.Shopify, bulk_operation_id: string) {
8
  const id = bulk_operation_id.startsWith("gid://")
9
    ? bulk_operation_id
10
    : `gid://shopify/BulkOperation/${bulk_operation_id}`
11

12
  const response = await fetch(
13
    `https://${auth.store_name}.myshopify.com/admin/api/2026-10/graphql.json`,
14
    {
15
      method: "POST",
16
      headers: {
17
        "X-Shopify-Access-Token": auth.token,
18
        "Content-Type": "application/json",
19
        Accept: "application/json",
20
      },
21
      body: JSON.stringify({
22
        query: `query ($id: ID!) { bulkOperation(id: $id) { id status type errorCode createdAt completedAt objectCount rootObjectCount fileSize url partialDataUrl query } }`,
23
        variables: { id },
24
      }),
25
    }
26
  )
27

28
  if (!response.ok) {
29
    throw new Error(`${response.status} ${await response.text()}`)
30
  }
31

32
  const { data, errors } = await response.json()
33
  if (errors) {
34
    throw new Error(JSON.stringify(errors))
35
  }
36

37
  return data.bulkOperation
38
}
39