shopify-admin-gift-card-issuance

SkillCommerce & finance

Issue Shopify gift cards (store credit) to customers as a goodwill gesture, post-return incentive, or loyalty reward.

Available today. Use it from your connected AI after setup.

Connect ahel once, and every AI you use reads what you have installed.

Then ask your AI: use the shopify-admin-gift-card-issuance skill

What this skill tells your AI

The instructions your AI receives, as published by 40rty-ai/shopify-admin-skills in skills/conversion-optimization/shopify-admin-gift-card-issuance/SKILL.md and read by ahel’s review.

Purpose

Issues Shopify native gift cards to customers programmatically — as goodwill for a delayed shipment, as store credit instead of a cash refund, or as a loyalty reward. Uses Shopify's built-in gift card system; no 3rd-party app required. Gift cards issued here are redeemable at checkout exactly like manual gift cards. Note: giftCardCreate is available on all Shopify plans but may require the store to have gift cards enabled in settings.

Prerequisites

  • shopify auth login --store <domain>
  • API scopes: read_customers, write_gift_cards
  • Gift cards must be enabled in Shopify admin → Settings → Gift cards

Parameters

ParameterTypeRequiredDefaultDescription
storestringyesStore domain (e.g., mystore.myshopify.com)
formatstringnohumanOutput format: human or json
dry_runboolnofalsePreview operations without executing mutations
customer_emailstringyes*Customer email to look up and associate with the gift card
customer_idstringyes*Customer GID (alternative to email)
amountfloatyesGift card value in the store's default currency
reasonstringnoInternal note logged on the gift card (e.g., "Goodwill: delayed shipment #1042")
expires_onstringnoExpiry date in ISO 8601 (e.g., 2026-12-31); if omitted, gift card does not expire
tag_customerstringnoOptional tag to add to the customer record (e.g., goodwill-issued)

*One of customer_email or customer_id is required.

Safety

⚠️ Step 2 executes giftCardCreate which issues real monetary value against your store. Gift cards cannot be deleted once created — they can only be disabled. Run with dry_run: true to confirm the customer, amount, and expiry before committing. Verify the amount carefully — issued value is immediately redeemable at checkout.

Workflow Steps

  1. OPERATION: customer — query Inputs: Look up by customer_email (using customers search) or directly by customer_id Expected output: Customer id, firstName, lastName, email; confirm customer exists before issuing

  2. OPERATION: giftCardCreate — mutation Inputs: input.initialValue, input.customerId, input.expiresOn (optional), input.note (reason) Expected output: giftCard.id, giftCard.code, giftCard.balance, giftCard.expiresOn, userErrors

GraphQL Operations

# customer:query — validated against api_version 2025-01
query CustomerByEmail($query: String!) {
  customers(first: 1, query: $query) {
    edges {
      node {
        id
        firstName
        lastName
        defaultEmailAddress {
          emailAddress
        }
        tags
      }
    }
  }
}
# giftCardCreate:mutation — validated against api_version 2025-01
mutation GiftCardCreate($input: GiftCardCreateInput!) {
  giftCardCreate(input: $input) {
    giftCard {
      id
      code
      balance {
        amount
        currencyCode
      }
      expiresOn
      note
      customer {
        id
      }
    }
    userErrors {
      field
      message
    }
  }
}

Session Tracking

Claude MUST emit the following output at each stage. This is mandatory.

On start, emit:

╔══════════════════════════════════════════════╗
║  SKILL: gift-card-issuance                   ║
║  Store: <store domain>                       ║
║  Started: <YYYY-MM-DD HH:MM UTC>             ║
╚══════════════════════════════════════════════╝

After each step, emit:

[N/TOTAL] <QUERY|MUTATION>  <OperationName>
          → Params: <brief summary of key inputs>
          → Result: <count or outcome>

If dry_run: true, prefix every mutation step with [DRY RUN] and do not execute it.

On completion, emit:

For format: human (default):

══════════════════════════════════════════════
OUTCOME SUMMARY
  Customer:        <name> (<email>)
  Gift card code:  <code>
  Amount:          <amount> <currency>
  Expires:         <date or "Does not expire">
  Errors:          0
  Output:          none
══════════════════════════════════════════════

For format: json, emit:

{
  "skill": "gift-card-issuance",
  "store": "<domain>",
  "started_at": "<ISO8601>",
  "completed_at": "<ISO8601>",
  "dry_run": false,
  "steps": [
    { "step": 1, "operation": "CustomerByEmail", "type": "query", "params_summary": "email <email>", "result_summary": "customer <id>", "skipped": false },
    { "step": 2, "operation": "GiftCardCreate", "type": "mutation", "params_summary": "amount <amount>, customer <id>", "result_summary": "gift card <code>", "skipped": false }
  ],
  "outcome": {
    "customer_id": "<id>",
    "customer_email": "<email>",
    "gift_card_id": "<id>",
    "gift_card_code": "<code>",
    "amount": "<amount>",
    "currency": "<currency>",
    "expires_on": "<date or null>",
    "errors": 0,
    "output_file": null
  }
}

Output Format

No CSV. The session summary reports the gift card code and amount inline. The support agent copies the code to share with the customer.

Gift card issued:
  Customer:  Jane Smith (jane@example.com)
  Code:      ABCD-EFGH-IJKL-MNOP
  Value:     $25.00 USD
  Expires:   2026-12-31 (or "Does not expire")
  Note:      Goodwill: delayed shipment #1042

Error Handling

ErrorCauseRecovery
Customer not foundEmail doesn't match any customerVerify email; guest checkout customers may not have a customer record
userErrors from giftCardCreateInvalid amount (≤ 0) or missing required fieldVerify amount is a positive number
Gift cards not enabledStore settings don't allow gift cardsEnable in Shopify admin → Settings → Gift cards
write_gift_cards scope missingAuth was done without this scopeRe-run shopify store auth with write_gift_cards scope

Best Practices

  1. Always run dry_run: true to confirm customer lookup succeeds and amount is correct before issuing.
  2. Always include a reason note — it appears in the gift card record and helps your team audit issuances later.
  3. Set tag_customer: goodwill-issued to track which customers have received goodwill gift cards — combine with loyalty-segment-export to monitor their subsequent purchase behavior.
  4. Use expires_on for promotional gift cards (e.g., holiday campaigns) to create urgency; omit for goodwill issuances so the customer feels the gesture is genuine.
  5. For batch issuances (e.g., a service outage affecting 100 customers), loop through a customer list using format: json to capture each gift card code for your records.

Signals

GitHub stars
187
Forks
18
Last commit
Aug 2026

ahel review

  • S4info
    community integration — published by 40rty-ai, not shopify

Automated review, not a security audit. Ruleset v1.

Advanced
Catalog kind
skill
Gateway key
shopify-admin-gift-card-issuance
Source
github.com/40rty-ai/shopify-admin-skills