{
  "schemaVersion": "1.0",
  "item": {
    "slug": "universal-checkout",
    "name": "Zinc Universal Checkout",
    "source": "tencent",
    "type": "skill",
    "category": "开发工具",
    "sourceUrl": "https://clawhub.ai/a5huynh/universal-checkout",
    "canonicalUrl": "https://clawhub.ai/a5huynh/universal-checkout",
    "targetPlatform": "OpenClaw"
  },
  "install": {
    "downloadMode": "redirect",
    "downloadUrl": "/downloads/universal-checkout",
    "sourceDownloadUrl": "https://wry-manatee-359.convex.site/api/v1/download?slug=universal-checkout",
    "sourcePlatform": "tencent",
    "targetPlatform": "OpenClaw",
    "installMethod": "Manual import",
    "extraction": "Extract archive",
    "prerequisites": [
      "OpenClaw"
    ],
    "packageFormat": "ZIP package",
    "includedAssets": [
      "references/errors.md",
      "README.md",
      "SKILL.md"
    ],
    "primaryDoc": "SKILL.md",
    "quickSetup": [
      "Download the package from Yavira.",
      "Extract the archive and review SKILL.md first.",
      "Import or place the package into your OpenClaw setup."
    ],
    "agentAssist": {
      "summary": "Hand the extracted package to your coding agent with a concrete install brief instead of figuring it out manually.",
      "steps": [
        "Download the package from Yavira.",
        "Extract it into a folder your agent can access.",
        "Paste one of the prompts below and point your agent at the extracted folder."
      ],
      "prompts": [
        {
          "label": "New install",
          "body": "I downloaded a skill package from Yavira. Read SKILL.md from the extracted folder and install it by following the included instructions. Then review README.md for any prerequisites, environment setup, or post-install checks. Tell me what you changed and call out any manual steps you could not complete."
        },
        {
          "label": "Upgrade existing",
          "body": "I downloaded an updated skill package from Yavira. Read SKILL.md from the extracted folder, compare it with my current installation, and upgrade it while preserving any custom configuration unless the package docs explicitly say otherwise. Then review README.md for any prerequisites, environment setup, or post-install checks. Summarize what changed and any follow-up checks I should run."
        }
      ]
    },
    "sourceHealth": {
      "source": "tencent",
      "status": "healthy",
      "reason": "direct_download_ok",
      "recommendedAction": "download",
      "checkedAt": "2026-05-07T17:22:31.273Z",
      "expiresAt": "2026-05-14T17:22:31.273Z",
      "httpStatus": 200,
      "finalUrl": "https://wry-manatee-359.convex.site/api/v1/download?slug=afrexai-annual-report",
      "contentType": "application/zip",
      "probeMethod": "head",
      "details": {
        "probeUrl": "https://wry-manatee-359.convex.site/api/v1/download?slug=afrexai-annual-report",
        "contentDisposition": "attachment; filename=\"afrexai-annual-report-1.0.0.zip\"",
        "redirectLocation": null,
        "bodySnippet": null
      },
      "scope": "source",
      "summary": "Source download looks usable.",
      "detail": "Yavira can redirect you to the upstream package for this source.",
      "primaryActionLabel": "Download for OpenClaw",
      "primaryActionHref": "/downloads/universal-checkout"
    },
    "validation": {
      "installChecklist": [
        "Use the Yavira download entry.",
        "Review SKILL.md after the package is downloaded.",
        "Confirm the extracted package contains the expected setup assets."
      ],
      "postInstallChecks": [
        "Confirm the extracted package includes the expected docs or setup files.",
        "Validate the skill or prompts are available in your target agent workspace.",
        "Capture any manual follow-up steps the agent could not complete."
      ]
    },
    "downloadPageUrl": "https://openagent3.xyz/downloads/universal-checkout",
    "agentPageUrl": "https://openagent3.xyz/skills/universal-checkout/agent",
    "manifestUrl": "https://openagent3.xyz/skills/universal-checkout/agent.json",
    "briefUrl": "https://openagent3.xyz/skills/universal-checkout/agent.md"
  },
  "agentAssist": {
    "summary": "Hand the extracted package to your coding agent with a concrete install brief instead of figuring it out manually.",
    "steps": [
      "Download the package from Yavira.",
      "Extract it into a folder your agent can access.",
      "Paste one of the prompts below and point your agent at the extracted folder."
    ],
    "prompts": [
      {
        "label": "New install",
        "body": "I downloaded a skill package from Yavira. Read SKILL.md from the extracted folder and install it by following the included instructions. Then review README.md for any prerequisites, environment setup, or post-install checks. Tell me what you changed and call out any manual steps you could not complete."
      },
      {
        "label": "Upgrade existing",
        "body": "I downloaded an updated skill package from Yavira. Read SKILL.md from the extracted folder, compare it with my current installation, and upgrade it while preserving any custom configuration unless the package docs explicitly say otherwise. Then review README.md for any prerequisites, environment setup, or post-install checks. Summarize what changed and any follow-up checks I should run."
      }
    ]
  },
  "documentation": {
    "source": "clawhub",
    "primaryDoc": "SKILL.md",
    "sections": [
      {
        "title": "Zinc Orders",
        "body": "Place and manage orders on online retailers through the Zinc API (https://api.zinc.com)."
      },
      {
        "title": "Prerequisites",
        "body": "ZINC_API_KEY env var must be set. Get one from https://app.zinc.com."
      },
      {
        "title": "Authentication",
        "body": "All requests use Bearer token auth:\n\nAuthorization: Bearer $ZINC_API_KEY"
      },
      {
        "title": "Create Order — POST /orders",
        "body": "Place a new order. Orders process asynchronously.\n\nRequired fields:\n\nproducts — array of { url, quantity?, variant? } objects\n\nurl: direct product page URL on a supported retailer\nquantity: integer (default 1)\nvariant: array of { label, value } for size/color/etc.\n\n\nshipping_address — object with first_name, last_name, address_line1, address_line2, city, state (2-letter), postal_code, phone_number, country (ISO alpha-2, e.g. \"US\")\nmax_price — integer, maximum price in cents\n\nOptional fields:\n\nidempotency_key — string (max 36 chars) to prevent duplicates\nretailer_credentials_id — short ID like zn_acct_XXXXXXXX\nmetadata — arbitrary key-value object\npo_number — purchase order number string\n\nResponse: order object with id (UUID), status, items, shipping_address, created_at, tracking_numbers, etc.\n\nOrder statuses: pending → in_progress → order_placed | order_failed | cancelled"
      },
      {
        "title": "List Orders — GET /orders",
        "body": "Returns { orders: [...] } array of order objects."
      },
      {
        "title": "Get Order — GET /orders/{id}",
        "body": "Retrieve a single order by UUID."
      },
      {
        "title": "Example: Place an Order",
        "body": "curl -X POST https://api.zinc.com/orders \\\n  -H \"Authorization: Bearer $ZINC_API_KEY\" \\\n  -H \"Content-Type: application/json\" \\\n  -d '{\n    \"products\": [{ \"url\": \"https://example.com/product\", \"quantity\": 1 }],\n    \"max_price\": 5000,\n    \"shipping_address\": {\n      \"first_name\": \"Jane\",\n      \"last_name\": \"Doe\",\n      \"address_line1\": \"123 Main St\",\n      \"city\": \"San Francisco\",\n      \"state\": \"CA\",\n      \"postal_code\": \"94105\",\n      \"phone_number\": \"5551234567\",\n      \"country\": \"US\"\n    }\n  }'"
      },
      {
        "title": "Error Handling",
        "body": "See references/errors.md for the full error code reference.\n\nKey points:\n\nHTTP errors return { code, message, details }\nOrder processing failures appear in webhook/order response as error_type\nCommon issues: max_price_exceeded, product_out_of_stock, invalid_shipping_address"
      },
      {
        "title": "Order Status Tracking",
        "body": "Orders process asynchronously and typically take 5–10 minutes. After placing an order:\n\nSchedule a cron job to check the order status ~7 minutes after creation.\nUse GET /orders/{id} to poll.\nReport the result back to the user in the same channel.\nIf still pending/in_progress, schedule another check in 5 minutes.\n\nTerminal statuses: order_placed, order_failed, cancelled — stop polling.\nNon-terminal: pending, in_progress — schedule another check in 3–5 minutes.\n\nExample cron job (isolated, announce back to the channel):\n\n{\n  \"name\": \"zinc-order-check-<short_id>\",\n  \"schedule\": { \"kind\": \"at\", \"at\": \"<ISO-8601 ~7min from now>\" },\n  \"payload\": {\n    \"kind\": \"agentTurn\",\n    \"message\": \"Check Zinc order <order_id> via GET https://api.zinc.com/orders/<order_id>\"\n  },\n  \"sessionTarget\": \"isolated\",\n  \"delivery\": {\n    \"mode\": \"announce\",\n    \"channel\": \"<channel>\",\n    \"to\": \"<channel_id>\"\n  }\n}"
      },
      {
        "title": "Safety",
        "body": "Always confirm with the user before placing an order (POST /orders). This spends real money.\nReading orders (GET) is always safe.\nValidate that max_price is reasonable before submitting."
      }
    ],
    "body": "Zinc Orders\n\nPlace and manage orders on online retailers through the Zinc API (https://api.zinc.com).\n\nPrerequisites\nZINC_API_KEY env var must be set. Get one from https://app.zinc.com.\nAuthentication\n\nAll requests use Bearer token auth:\n\nAuthorization: Bearer $ZINC_API_KEY\n\nEndpoints\nCreate Order — POST /orders\n\nPlace a new order. Orders process asynchronously.\n\nRequired fields:\n\nproducts — array of { url, quantity?, variant? } objects\nurl: direct product page URL on a supported retailer\nquantity: integer (default 1)\nvariant: array of { label, value } for size/color/etc.\nshipping_address — object with first_name, last_name, address_line1, address_line2, city, state (2-letter), postal_code, phone_number, country (ISO alpha-2, e.g. \"US\")\nmax_price — integer, maximum price in cents\n\nOptional fields:\n\nidempotency_key — string (max 36 chars) to prevent duplicates\nretailer_credentials_id — short ID like zn_acct_XXXXXXXX\nmetadata — arbitrary key-value object\npo_number — purchase order number string\n\nResponse: order object with id (UUID), status, items, shipping_address, created_at, tracking_numbers, etc.\n\nOrder statuses: pending → in_progress → order_placed | order_failed | cancelled\n\nList Orders — GET /orders\n\nReturns { orders: [...] } array of order objects.\n\nGet Order — GET /orders/{id}\n\nRetrieve a single order by UUID.\n\nExample: Place an Order\ncurl -X POST https://api.zinc.com/orders \\\n  -H \"Authorization: Bearer $ZINC_API_KEY\" \\\n  -H \"Content-Type: application/json\" \\\n  -d '{\n    \"products\": [{ \"url\": \"https://example.com/product\", \"quantity\": 1 }],\n    \"max_price\": 5000,\n    \"shipping_address\": {\n      \"first_name\": \"Jane\",\n      \"last_name\": \"Doe\",\n      \"address_line1\": \"123 Main St\",\n      \"city\": \"San Francisco\",\n      \"state\": \"CA\",\n      \"postal_code\": \"94105\",\n      \"phone_number\": \"5551234567\",\n      \"country\": \"US\"\n    }\n  }'\n\nError Handling\n\nSee references/errors.md for the full error code reference.\n\nKey points:\n\nHTTP errors return { code, message, details }\nOrder processing failures appear in webhook/order response as error_type\nCommon issues: max_price_exceeded, product_out_of_stock, invalid_shipping_address\nOrder Status Tracking\n\nOrders process asynchronously and typically take 5–10 minutes. After placing an order:\n\nSchedule a cron job to check the order status ~7 minutes after creation.\nUse GET /orders/{id} to poll.\nReport the result back to the user in the same channel.\nIf still pending/in_progress, schedule another check in 5 minutes.\n\nTerminal statuses: order_placed, order_failed, cancelled — stop polling. Non-terminal: pending, in_progress — schedule another check in 3–5 minutes.\n\nExample cron job (isolated, announce back to the channel):\n\n{\n  \"name\": \"zinc-order-check-<short_id>\",\n  \"schedule\": { \"kind\": \"at\", \"at\": \"<ISO-8601 ~7min from now>\" },\n  \"payload\": {\n    \"kind\": \"agentTurn\",\n    \"message\": \"Check Zinc order <order_id> via GET https://api.zinc.com/orders/<order_id>\"\n  },\n  \"sessionTarget\": \"isolated\",\n  \"delivery\": {\n    \"mode\": \"announce\",\n    \"channel\": \"<channel>\",\n    \"to\": \"<channel_id>\"\n  }\n}\n\nSafety\nAlways confirm with the user before placing an order (POST /orders). This spends real money.\nReading orders (GET) is always safe.\nValidate that max_price is reasonable before submitting."
  },
  "trust": {
    "sourceLabel": "tencent",
    "provenanceUrl": "https://clawhub.ai/a5huynh/universal-checkout",
    "publisherUrl": "https://clawhub.ai/a5huynh/universal-checkout",
    "owner": "a5huynh",
    "version": "1.0.1",
    "license": null,
    "verificationStatus": "Indexed source record"
  },
  "links": {
    "detailUrl": "https://openagent3.xyz/skills/universal-checkout",
    "downloadUrl": "https://openagent3.xyz/downloads/universal-checkout",
    "agentUrl": "https://openagent3.xyz/skills/universal-checkout/agent",
    "manifestUrl": "https://openagent3.xyz/skills/universal-checkout/agent.json",
    "briefUrl": "https://openagent3.xyz/skills/universal-checkout/agent.md"
  }
}