Axis Cosmetics · website help
Ask for help updating the site
Tell your assistant what you’d like to change and send them this page. Include a Product link or image if you have one. The instructions below cover ordinary catalogue changes through Shopify Admin or Shopify CLI.
What to send
You can share this page’s link and describe the change in your own words. This example gives your assistant a little more direction.
Message to your assistant
Please use https://axis-cosmetics.com/pages/agent-handoff as the instructions for this Axis Cosmetics update. Change: [describe the change]. Target: [pan name or Product link]. Image: [attach if relevant]. Use my authorized access to store uwws1x-uf.myshopify.com. Read and record the exact Product, variant, inventory location, Pan Shade or Pan Finish first. Make only the requested field changes using the page's Admin or Shopify CLI procedure. Inspect API userErrors, reread the saved values, check the affected buyer view, and report before/after values and anything unfinished. Never request a password or token in chat.
Working with an assistant on your computer
For catalogue or stock edits, share this page with an assistant that has authorized Shopify access; no download is needed. For theme, video or 3D work, set up a local copy:
-
Clone the website
Sign in to the private Axis repository. Install GitHub Desktop, then choose Code → Open with GitHub Desktop → Clone. Accept the Git LFS prompt. Before later edits, use Fetch origin → Pull origin.
-
Open it in your assistant
Open the cloned folder in Codex, or choose Code → Local → project folder in Claude desktop. Ask the assistant to read
AGENTS.mdfirst. -
Install the tools
Install the repo’s Node.js 22.16.0. In a new terminal, install Shopify CLI globally and check both tools:
node --version npm --version npm install -g @shopify/cli@latest shopify version -
Check Shopify access
For theme work, run this read-only check and complete Shopify sign-in. Confirm the theme roles before editing. For Product or stock API edits, the assistant should use
shopify store authbelow.shopify theme list --store uwws1x-uf.myshopify.com
Use Clone rather than Download ZIP for edits: ZIP has no pull or commit history and may omit large media. GitHub and Shopify access are separate. Before a live theme change, have the assistant back up live and preview on the development theme.
If you’re the assistant
Use the owner’s request as authority for the specific edit. This page identifies the store and method; it does not provide access. The store’s permanent API address is uwws1x-uf.myshopify.com. In Shopify Admin, the URL contains /store/axis-cosmetics-2/. Verify the store and exact record before saving.
- Product
- Name, copy, price, SKU, stock, publication and normal photo.
- Pan Shade
- Builder visibility, Product link, finish, order, fallback colour and transparent overlay.
- Pan Finish
- Finish tab name, order and swatch effect. Keep the case-sensitive Key stable.
- Fast Bundle
- Which pans can be bought in a complete palette and the package price.
- Theme Editor
- Exposed builder colours, background, shade spacing, ring and section padding.
- Identify the exact Product, Pan Shade or theme section and record its current values.
- Change only the requested fields. For a new pan, establish its Product, mapped collection and live Fast Bundle eligibility before activating Pan Shade.
- Verify the affected buyer view. For a purchasable pan, test a complete palette and checkout; for appearance, preview desktop and mobile.
- Report the changed record or setting, before/after values and what was checked. If access or the target is unclear, say what remains undone.
For an agent using Shopify CLI
These commands work without the website repository. They use Shopify’s Admin GraphQL API, so the assistant needs an installed current Shopify CLI and an account the owner has authorized for the relevant store and scopes. For an Admin-only agent, use the matching screens in the Catalogue Guide.
- Connect and check the store. Run
shopify store authwith only the scopes needed for the request. Shopify opens its own authorization flow. Do not ask the owner to paste a token. If the command is unavailable, update Shopify CLI or use authorized Shopify Admin. - Read first. Run a GraphQL query, record the exact IDs and existing fields, and resolve duplicate names before editing. For stock, identify the inventory item, location and current available count. Keep the snapshot outside this public page.
- Write one narrow change. Put the chosen mutation and JSON variables in local files. Run with
--allow-mutationsonly after reviewing the values and store. Check both top-levelerrorsand mutationuserErrors; a successful command exit alone is not proof of a saved change. - Read back and test. Rerun the read query, then inspect the affected Product, Shade Gallery and palette builder. For a purchasable pan, select a complete palette and check Fast Bundle cart/checkout. Report the exact changed IDs and before/after values.
1. Connect, verify the store and find the record
Choose scopes for the actual task. This example covers the catalogue paths below; Shopify may ask the owner to authorize them. Do not use shopify theme push for Product or stock data.
shopify store auth --store uwws1x-uf.myshopify.com --scopes read_products,write_products,read_inventory,write_inventory,read_metaobjects,write_metaobjects
Run a read-only identity check. The returned myshopifyDomain must be uwws1x-uf.myshopify.com:
shopify store execute --store uwws1x-uf.myshopify.com --version 2026-10 --query 'query { shop { name myshopifyDomain } }' --json
Save this Product read as product.graphql. Search by exact handle where possible, then match the Product and variant IDs to the owner’s target. If a connection’s hasNextPage is true, put its endCursor into the matching JSON cursor and rerun. Narrow to one Product before paginating variants or inventory Locations. Never infer that an unseen page is empty.
query AxisProduct($search: String!, $productAfter: String, $variantAfter: String, $locationAfter: String) {
products(first: 5, query: $search, after: $productAfter) {
nodes {
id handle title descriptionHtml status
variants(first: 5, after: $variantAfter) { nodes {
id price sku inventoryPolicy
inventoryItem { id tracked inventoryLevels(first: 5, after: $locationAfter) {
nodes { location { id } quantities(names: ["available"]) { name quantity } }
pageInfo { hasNextPage endCursor }
} }
} pageInfo { hasNextPage endCursor } }
}
pageInfo { hasNextPage endCursor }
}
}
Save this as product.json, replacing the handle. All cursors start at null:
{"search":"handle:peach-flesh-1","productAfter":null,"variantAfter":null,"locationAfter":null}
shopify store execute --store uwws1x-uf.myshopify.com --version 2026-10 --query-file product.graphql --variable-file product.json --json
For Pan Shade or Pan Finish, save this separate read as metaobjects.graphql. Follow endCursor by updating after until hasNextPage is false. Match pan_product to the Product ID or the finish’s exact key.
query AxisMetaobjects($type: String!, $after: String) {
metaobjects(type: $type, first: 50, after: $after) {
nodes { id handle fields { key value } }
pageInfo { hasNextPage endCursor }
}
}
Save as metaobjects.json; use pan_finish instead for finish edits:
{"type":"pan_shade","after":null}
shopify store execute --store uwws1x-uf.myshopify.com --version 2026-10 --query-file metaobjects.graphql --variable-file metaobjects.json --json
For a Product without stock tracking, do not assume setting Available will affect checkout. If location names are needed, obtain read_locations scope or confirm the Location in Shopify Admin.
2. Change Product name, description, price or SKU
Product name and description belong to the Product. Save only the requested field alongside its ID. Price here means the single pan’s base variant price; the complete-palette package price belongs to the published Fast Bundle offer. If the owner says only “change the price,” establish which buyer price they mean first. Example change.graphql and change.json for a title:
mutation ChangeProduct($product: ProductUpdateInput!) {
productUpdate(product: $product) {
product { id title descriptionHtml }
userErrors { field message }
}
}
{"product":{"id":"gid://shopify/Product/REPLACE_ID","title":"New title"}}
For description, put descriptionHtml in the Product object instead of title. For price, use the exact variant ID and parent Product ID. If the displayed price differs after saving, check compare-at and market-specific pricing before claiming success:
mutation ChangePrice($productId: ID!, $variants: [ProductVariantsBulkInput!]!) {
productVariantsBulkUpdate(productId: $productId, variants: $variants) {
productVariants { id price }
userErrors { field message }
}
}
{"productId":"gid://shopify/Product/REPLACE_ID","variants":[{"id":"gid://shopify/ProductVariant/REPLACE_ID","price":"8.90"}]}
For SKU, use the variant’s Inventory Item ID, not its Product ID:
mutation ChangeSku($id: ID!, $input: InventoryItemInput!) {
inventoryItemUpdate(id: $id, input: $input) {
inventoryItem { id sku }
userErrors { field message }
}
}
{"id":"gid://shopify/InventoryItem/REPLACE_ID","input":{"sku":"NEW-UNIQUE-SKU"}}
Save one of the GraphQL operations above in change.graphql, its matching JSON object in change.json, replace every placeholder with the read IDs, then run:
shopify store execute --store uwws1x-uf.myshopify.com --version 2026-10 --query-file change.graphql --variable-file change.json --allow-mutations --json
3. Change the available stock at one Location
Use this for an owner-specified exact Available count, after reading the current count at the correct Location. Put the current number in changeFromQuantity; if it changed meanwhile, reread rather than overriding it. Generate a fresh UUID for key for each intended change, and reuse that same key only when retrying the same uncertain request. Do not use ignoreCompareQuantity. If the request is to add or subtract units rather than set a counted total, use Shopify’s inventory adjustment procedure instead.
mutation SetStock($input: InventorySetQuantitiesInput!, $key: String!) {
inventorySetQuantities(input: $input) @idempotent(key: $key) {
inventoryAdjustmentGroup { createdAt }
userErrors { code field message }
}
}
{"input":{"name":"available","reason":"correction","quantities":[{"inventoryItemId":"gid://shopify/InventoryItem/REPLACE_ID","locationId":"gid://shopify/Location/REPLACE_ID","quantity":42,"changeFromQuantity":100}]},"key":"REPLACE_WITH_FRESH_UUID"}
Run the same shopify store execute write command shown above, then reread that inventory item and Location. Zero available stock is different from hiding a Pan Shade. Check whether the variant is tracked and whether overselling is enabled before interpreting the storefront result.
4. Change a Pan Shade or Pan Finish
Use the exact Metaobject ID found in step 1. fields patches only the named keys; do not send a whole values replacement. For a Pan Shade, the current keys are pan_product (Product GID), active ("true" or "false"), finish_key (MATTE, DUOCHROME, METALLIC), sort_order (integer string), hex_primary (hex colour), and overlay_image (Shopify File GID). For a Pan Finish, the editable keys are name, sort_order, and swatch_style; leave its case-sensitive key unchanged. The existing definition also has legacy pan_product and retail_product fields; leave them alone.
mutation PatchPan($id: ID!, $metaobject: MetaobjectUpdateInput!) {
metaobjectUpdate(id: $id, metaobject: $metaobject) {
metaobject { id handle fields { key value } }
userErrors { field message code }
}
}
{"id":"gid://shopify/Metaobject/REPLACE_ID","metaobject":{"fields":[{"key":"active","value":"false"}]}}
For a finish tab name, replace the JSON field with {"key":"name","value":"New label"} and use that Pan Finish ID. For Pan Shade ordering, use sort_order with a unique value within its finish; finish order must be unique across finishes. Supported swatch styles are solid, metallic/shimmer, and duochrome/glitter. hex_primary is only the fallback colour: if an overlay image is present, a colour change may require a new image. Before hiding or moving a pan, confirm another active, storefront-resolvable pan remains in its finish; an empty finish can disable Add to Bag. If moving finishes, update its mapped Product collection too, or the next catalogue sync may reverse the move. Run the same CLI write command, inspect errors, and reread the metaobject.
5. New pans, images and Fast Bundle
These tasks span several Shopify objects and the Fast Bundle app. A CLI-authenticated agent can inspect Products and metaobjects, but must not claim the new pan is sellable until the published Fast Bundle offer is checked in its app UI and a complete palette reaches cart/checkout.
- Create an Active, published, single-variant Product with unique SKU, price, tracked inventory and normal Product media. Put it in exactly one source collection:
matte-eyeshadow→MATTE,duochrome-eyeshadow→DUOCHROME, orshimmer→METALLIC. - In Apps → Fast Bundle, confirm the live published offer includes this Product and can select it. The app’s saved checkbox alone is insufficient: inspect the rendered offer and buyer cart path. If the agent has no Fast Bundle access, report this as unfinished and leave the Pan Shade inactive.
- Create or update its Content → Metaobjects → Pan Shade entry, link the exact Product, set the matching finish key, unique sort order and fallback colour, then set Active on only after the preceding checks. Keep at least one active pan in every finish.
- For a cut-out, preserve the source photo and prepare a square transparent PNG with the round pan centred and reaching all four sides; check the alpha over a checkerboard. Upload it to Content → Files, then select it in Pan Shade’s Optional overlay image. Product media is separate; update it too only when requested. Reread the file reference and inspect builder and Shade Gallery on mobile and desktop.
A theme preview does not isolate Product, stock, collection, metaobject or Fast Bundle changes. These are shared store data. For new pan creation or file upload by API, follow Shopify’s current Product, metaobject, and Files procedures; do not guess those multi-step inputs. If the required Admin/app access is missing, give the owner the exact remaining steps instead of marking the task complete.
API reference: store auth, store execute, Product update, inventory set, and metaobject update. Check current documentation if Shopify CLI or API versions change.
More detail
The visual Catalogue Guide has examples. Its July 2026 screenshots are historical; current Shopify Admin and the live buyer view decide what is true today.
New theme code, videos and 3D models need a developer with access to the website repository. This page does not provide Shopify access. Use an authorized Admin session or connection, and never ask for passwords or API tokens in chat.