Documentation. This page is ready
Order Bulk Delete Manager is a professional Shopify app for efficient order management
The app follows a serverless architecture deployed on Vercel with edge caching for optimal performance
orders
Fetches orders with pagination and filtering support
query GetOrders($first: Int!, $query: String, $sortKey: OrderSortKeys, $reverse: Boolean, $after: String) {
orders(first: $first, query: $query, sortKey: $sortKey, reverse: $reverse, after: $after) {
edges {
cursor
node {
id
name
createdAt
totalPriceSet { shopMoney { amount currencyCode } }
displayFinancialStatus
displayFulfillmentStatus
lineItems(first: 10) {
edges {
node {
title
quantity
originalUnitPriceSet { shopMoney { amount currencyCode } }
}
}
}
}
}
pageInfo {
hasNextPage
hasPreviousPage
endCursor
startCursor
}
}
}orderDelete
Permanently deletes a single order by ID
mutation OrderDelete($orderId: ID!) {
orderDelete(orderId: $orderId) {
deletedId
userErrors {
field
message
}
}
}| Parameter | Type | Description |
|---|---|---|
first | Int! | Number of orders to fetch (max 250) |
query | String | Search query string for filtering |
sortKey | OrderSortKeys | Field to sort by (CREATED_AT, UPDATED_AT, etc.) |
reverse | Boolean | Reverse sort order (true/false) |
after | String | Cursor for pagination |
Shopify enforces rate limits on API calls. The app handles these automatically.
Tip: Work in batches of 50 or fewer orders for optimal performance
Stores Shopify session tokens for authentication
model Session {
id String @id
shop String
state String
isOnline Boolean @default(false)
scope String?
expires DateTime?
accessToken String
userId BigInt?
firstName String?
lastName String?
email String?
accountOwner Boolean @default(false)
locale String?
collaborator Boolean? @default(false)
emailVerified Boolean? @default(false)
}Tracks installed shops and their settings
model AppInstallation {
id String @id @default(uuid())
shop String @unique
isActive Boolean @default(true)
installedAt DateTime @default(now())
uninstalledAt DateTime?
@@index([shop])
}Records all deletion actions for compliance
model AuditLog {
id String @id @default(uuid())
shop String
action String
orderId String?
orderName String?
orderValue String?
reason String?
performedBy String?
metadata Json?
createdAt DateTime @default(now())
@@index([shop])
@@index([createdAt])
@@index([action])
}Tracks GDPR webhook requests and responses
model GDPRRequest {
id String @id @default(uuid())
shop String
requestType String // 'customers/data_request', 'customers/redact', 'shop/redact'
customerId String?
customerEmail String?
payload Json
status String @default("PENDING") // PENDING, COMPLETED, FAILED
completedAt DateTime?
createdAt DateTime @default(now())
@@index([shop])
@@index([requestType])
@@index([status])
}app/installed
POST /webhooks/app/installed
Triggered when a merchant installs the app
app/uninstalled
POST /webhooks/app/uninstalled
Triggered when a merchant uninstalls the app
app/scopes_update
POST /webhooks/app/scopes_update
Triggered when app permissions change
customers/data_request
InfoPOST /webhooks/compliance
Request for customer data export
Required Response 200 OK with customer data or confirmation
customers/redact
WarningPOST /webhooks/compliance
Request to delete customer data
Action Remove all customer PII from records
shop/redact
CriticalPOST /webhooks/compliance
Request to delete all shop data
Action Complete data deletion within 48 hours
The app requests minimal permissions needed for functionality
| Scope | Purpose |
|---|---|
read_orders | View orders for display and filtering |
write_orders | Delete orders as requested |
read_customers | Display customer names (optional) |
| Metric | Target | Actual |
|---|---|---|
| Initial Load | < 2s | ~1.2s |
| Page Navigation | < 500ms | ~200ms |
| Filter/Search | < 300ms | ~150ms |
| Single Delete | < 1s | ~800ms |
| Bulk Delete (50) | < 30s | ~20s |
Orders Not Loading
Spinner shows indefinitely, Empty order list despite having orders
Cannot Delete Orders
Error message after delete attempt, Orders remain after confirmation
Slow Performance
Long loading times, Laggy interface
App Not Installing
Installation fails, Permission errors
| Error Code | Meaning | Solution |
|---|---|---|
| 401 | Session expired | Refresh page or reinstall app |
| 403 | Permission denied | Check app permissions |
| 429 | Rate limited | Wait and retry in smaller batches |
| 500 | Server error | Contact support |