{
  "schemaVersion": "1.0",
  "item": {
    "slug": "smartbill-invoicing",
    "name": "SmartBill Invoicing",
    "source": "tencent",
    "type": "skill",
    "category": "开发工具",
    "sourceUrl": "https://clawhub.ai/Maverick-AI-Tech/smartbill-invoicing",
    "canonicalUrl": "https://clawhub.ai/Maverick-AI-Tech/smartbill-invoicing",
    "targetPlatform": "OpenClaw"
  },
  "install": {
    "downloadMode": "redirect",
    "downloadUrl": "/downloads/smartbill-invoicing",
    "sourceDownloadUrl": "https://wry-manatee-359.convex.site/api/v1/download?slug=smartbill-invoicing",
    "sourcePlatform": "tencent",
    "targetPlatform": "OpenClaw",
    "installMethod": "Manual import",
    "extraction": "Extract archive",
    "prerequisites": [
      "OpenClaw"
    ],
    "packageFormat": "ZIP package",
    "includedAssets": [
      "references/invoice-example.json",
      "references/smartbill-api.md",
      "agents/openai.yaml",
      "scripts/smartbill_cli.py",
      "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. 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. 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/smartbill-invoicing"
    },
    "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/smartbill-invoicing",
    "agentPageUrl": "https://openagent3.xyz/skills/smartbill-invoicing/agent",
    "manifestUrl": "https://openagent3.xyz/skills/smartbill-invoicing/agent.json",
    "briefUrl": "https://openagent3.xyz/skills/smartbill-invoicing/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. 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. Summarize what changed and any follow-up checks I should run."
      }
    ]
  },
  "documentation": {
    "source": "clawhub",
    "primaryDoc": "SKILL.md",
    "sections": [
      {
        "title": "SmartBill Invoicing",
        "body": "Use scripts/smartbill_cli.py for deterministic SmartBill API calls instead of ad-hoc HTTP snippets."
      },
      {
        "title": "Workflow",
        "body": "Collect invoice input from the user.\nValidate payload locally before sending:\n\npython scripts/smartbill_cli.py validate-payload --input references/invoice-example.json --show-payload\n\n\nDry-run to inspect the normalized payload without calling the API:\n\npython scripts/smartbill_cli.py create-invoice --input <invoice.json> --dry-run\n\n\nIssue final invoice after explicit user confirmation:\n\npython scripts/smartbill_cli.py create-invoice --input <invoice.json> --allow-final\n\n\nRetrieve PDF once series and number are known:\n\npython scripts/smartbill_cli.py download-invoice-pdf --series-name <SERIES> --number <NO> --output <file.pdf>\nUse the exact number string returned by SmartBill (zero-padded, e.g. \"0123\"). Do not strip leading zeros or convert to an integer.\n--output accepts absolute or relative paths and must end in .pdf."
      },
      {
        "title": "Required Environment",
        "body": "Set these before calling SmartBill:\n\nSMARTBILL_USERNAME - SmartBill login email\nSMARTBILL_TOKEN - SmartBill API token\nSMARTBILL_COMPANY_VAT_CODE - default CIF (optional but recommended)\n\nOptional overrides:\n\nSMARTBILL_API_BASE (default: https://ws.smartbill.ro/SBORO/api)\nSMARTBILL_TIMEOUT_SECONDS (default: 30)\nSMARTBILL_RETRIES (default: 2)\nSMARTBILL_DEBUG (default: unset) — set to 1, true, or yes to enable request/response debug logging to stderr"
      },
      {
        "title": "Command Guide",
        "body": "validate-payload\n\nParse and normalize payload shape (bare invoice object or { \"invoice\": {...} } wrapper both accepted).\nValidate minimum required structure before API calls.\n\n\ncreate-invoice\n\nCreate invoice via POST /invoice.\nRequires --allow-final to issue a final invoice.\nSupports --dry-run (prints normalized payload, no API call) and --force-draft.\nPass --debug (or set SMARTBILL_DEBUG=1) to print full request/response payloads to stderr.\n\n\nget-series\n\nQuery available SmartBill series via GET /series.\n\n\ndownload-invoice-pdf\n\nFetch PDF via GET /invoice/pdf using CIF + series + number.\n--output accepts an absolute or relative .pdf path. Relative paths are resolved against the current working directory. The resolved path must fall within an OpenClaw-allowed media root or the current working directory."
      },
      {
        "title": "Payload Format",
        "body": "The invoice payload is a flat JSON object sent directly to the SmartBill API. See references/invoice-example.json for the canonical minimal example and references/smartbill-api.md for field documentation.\n\nBoth formats are accepted as input to the CLI:\n\nBare invoice object: { \"companyVatCode\": \"...\", \"client\": {...}, ... }\nWrapped: { \"invoice\": { \"companyVatCode\": \"...\", \"client\": {...}, ... } }\n\nThe CLI unwraps automatically and sends the invoice object directly to the API."
      },
      {
        "title": "Operational Rules",
        "body": "Always use --dry-run first to confirm the normalized payload before hitting the API.\nTreat final invoice issuance (isDraft: false) as a high-impact action requiring explicit user confirmation.\nSet client.saveToDb: false and products[].saveToDb: false to avoid persisting test data.\nPreserve SmartBill response data (series, number, message) in run logs. Store number verbatim as returned — it is zero-padded (e.g. \"0123\") and must never be stripped of leading zeros or cast to an integer.\nRespect SmartBill rate limits: max 30 calls per 10 seconds."
      },
      {
        "title": "References",
        "body": "Read references/smartbill-api.md for payload field reference, endpoint mapping, and auth/rate-limit notes.\nUse references/invoice-example.json as the canonical starting payload template."
      }
    ],
    "body": "SmartBill Invoicing\n\nUse scripts/smartbill_cli.py for deterministic SmartBill API calls instead of ad-hoc HTTP snippets.\n\nWorkflow\nCollect invoice input from the user.\nValidate payload locally before sending:\npython scripts/smartbill_cli.py validate-payload --input references/invoice-example.json --show-payload\nDry-run to inspect the normalized payload without calling the API:\npython scripts/smartbill_cli.py create-invoice --input <invoice.json> --dry-run\nIssue final invoice after explicit user confirmation:\npython scripts/smartbill_cli.py create-invoice --input <invoice.json> --allow-final\nRetrieve PDF once series and number are known:\npython scripts/smartbill_cli.py download-invoice-pdf --series-name <SERIES> --number <NO> --output <file.pdf>\nUse the exact number string returned by SmartBill (zero-padded, e.g. \"0123\"). Do not strip leading zeros or convert to an integer.\n--output accepts absolute or relative paths and must end in .pdf.\nRequired Environment\n\nSet these before calling SmartBill:\n\nSMARTBILL_USERNAME - SmartBill login email\nSMARTBILL_TOKEN - SmartBill API token\nSMARTBILL_COMPANY_VAT_CODE - default CIF (optional but recommended)\n\nOptional overrides:\n\nSMARTBILL_API_BASE (default: https://ws.smartbill.ro/SBORO/api)\nSMARTBILL_TIMEOUT_SECONDS (default: 30)\nSMARTBILL_RETRIES (default: 2)\nSMARTBILL_DEBUG (default: unset) — set to 1, true, or yes to enable request/response debug logging to stderr\nCommand Guide\nvalidate-payload\nParse and normalize payload shape (bare invoice object or { \"invoice\": {...} } wrapper both accepted).\nValidate minimum required structure before API calls.\ncreate-invoice\nCreate invoice via POST /invoice.\nRequires --allow-final to issue a final invoice.\nSupports --dry-run (prints normalized payload, no API call) and --force-draft.\nPass --debug (or set SMARTBILL_DEBUG=1) to print full request/response payloads to stderr.\nget-series\nQuery available SmartBill series via GET /series.\ndownload-invoice-pdf\nFetch PDF via GET /invoice/pdf using CIF + series + number.\n--output accepts an absolute or relative .pdf path. Relative paths are resolved against the current working directory. The resolved path must fall within an OpenClaw-allowed media root or the current working directory.\nPayload Format\n\nThe invoice payload is a flat JSON object sent directly to the SmartBill API. See references/invoice-example.json for the canonical minimal example and references/smartbill-api.md for field documentation.\n\nBoth formats are accepted as input to the CLI:\n\nBare invoice object: { \"companyVatCode\": \"...\", \"client\": {...}, ... }\nWrapped: { \"invoice\": { \"companyVatCode\": \"...\", \"client\": {...}, ... } }\n\nThe CLI unwraps automatically and sends the invoice object directly to the API.\n\nOperational Rules\nAlways use --dry-run first to confirm the normalized payload before hitting the API.\nTreat final invoice issuance (isDraft: false) as a high-impact action requiring explicit user confirmation.\nSet client.saveToDb: false and products[].saveToDb: false to avoid persisting test data.\nPreserve SmartBill response data (series, number, message) in run logs. Store number verbatim as returned — it is zero-padded (e.g. \"0123\") and must never be stripped of leading zeros or cast to an integer.\nRespect SmartBill rate limits: max 30 calls per 10 seconds.\nReferences\nRead references/smartbill-api.md for payload field reference, endpoint mapping, and auth/rate-limit notes.\nUse references/invoice-example.json as the canonical starting payload template."
  },
  "trust": {
    "sourceLabel": "tencent",
    "provenanceUrl": "https://clawhub.ai/Maverick-AI-Tech/smartbill-invoicing",
    "publisherUrl": "https://clawhub.ai/Maverick-AI-Tech/smartbill-invoicing",
    "owner": "Maverick-AI-Tech",
    "version": "1.0.9",
    "license": null,
    "verificationStatus": "Indexed source record"
  },
  "links": {
    "detailUrl": "https://openagent3.xyz/skills/smartbill-invoicing",
    "downloadUrl": "https://openagent3.xyz/downloads/smartbill-invoicing",
    "agentUrl": "https://openagent3.xyz/skills/smartbill-invoicing/agent",
    "manifestUrl": "https://openagent3.xyz/skills/smartbill-invoicing/agent.json",
    "briefUrl": "https://openagent3.xyz/skills/smartbill-invoicing/agent.md"
  }
}