{
  "schemaVersion": "1.0",
  "item": {
    "slug": "ynab-api",
    "name": "Ynab Api",
    "source": "tencent",
    "type": "skill",
    "category": "开发工具",
    "sourceUrl": "https://clawhub.ai/f-liva/ynab-api",
    "canonicalUrl": "https://clawhub.ai/f-liva/ynab-api",
    "targetPlatform": "OpenClaw"
  },
  "install": {
    "downloadMode": "redirect",
    "downloadUrl": "/downloads/ynab-api",
    "sourceDownloadUrl": "https://wry-manatee-359.convex.site/api/v1/download?slug=ynab-api",
    "sourcePlatform": "tencent",
    "targetPlatform": "OpenClaw",
    "installMethod": "Manual import",
    "extraction": "Extract archive",
    "prerequisites": [
      "OpenClaw"
    ],
    "packageFormat": "ZIP package",
    "includedAssets": [
      "README.md",
      "SKILL.md",
      "_meta.json",
      "references/api-guide.md",
      "references/category-examples.md",
      "scripts/daily-budget-check.sh"
    ],
    "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",
      "slug": "ynab-api",
      "status": "healthy",
      "reason": "direct_download_ok",
      "recommendedAction": "download",
      "checkedAt": "2026-05-11T08:20:11.949Z",
      "expiresAt": "2026-05-18T08:20:11.949Z",
      "httpStatus": 200,
      "finalUrl": "https://wry-manatee-359.convex.site/api/v1/download?slug=ynab-api",
      "contentType": "application/zip",
      "probeMethod": "head",
      "details": {
        "probeUrl": "https://wry-manatee-359.convex.site/api/v1/download?slug=ynab-api",
        "contentDisposition": "attachment; filename=\"ynab-api-2.4.0.zip\"",
        "redirectLocation": null,
        "bodySnippet": null,
        "slug": "ynab-api"
      },
      "scope": "item",
      "summary": "Item download looks usable.",
      "detail": "Yavira can redirect you to the upstream package for this item.",
      "primaryActionLabel": "Download for OpenClaw",
      "primaryActionHref": "/downloads/ynab-api"
    },
    "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/ynab-api",
    "agentPageUrl": "https://openagent3.xyz/skills/ynab-api/agent",
    "manifestUrl": "https://openagent3.xyz/skills/ynab-api/agent.json",
    "briefUrl": "https://openagent3.xyz/skills/ynab-api/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": "YNAB Budget Management",
        "body": "Manage your YNAB budget via the API with ready-to-use bash scripts. Requires curl and jq."
      },
      {
        "title": "Configuration",
        "body": "Set environment variables YNAB_API_KEY and YNAB_BUDGET_ID, or create ~/.config/ynab/config.json:\n\n{\n  \"api_key\": \"YOUR_YNAB_TOKEN\",\n  \"budget_id\": \"YOUR_BUDGET_ID\",\n  \"monthly_target\": 2000\n}\n\nThe monthly_target field sets your monthly spending cap (used by daily-spending-report.sh). Can also be set via YNAB_MONTHLY_TARGET env var.\n\nGet your token at https://app.ynab.com/settings/developer. Find your Budget ID in the YNAB URL."
      },
      {
        "title": "Available Scripts",
        "body": "All scripts are in {baseDir}/scripts/ and output to stdout.\n\nScriptPurposedaily-spending-report.shYesterday's expenses by category + monthly budget progress + analysisdaily-budget-check.shMorning overview: Age of Money, upcoming bills, overspending alertsgoals-progress.sh [month]Visual progress bars for category goalsscheduled-upcoming.sh [days]Upcoming scheduled transactions (default: 7 days)month-comparison.sh [m1] [m2]Month-over-month spending comparisontransfer.sh SRC DEST AMT DATE [MEMO]Create a properly linked account transferynab-helper.sh <command>General helper: search payees, list categories, add transactionssetup-automation.shTest config and list available scripts"
      },
      {
        "title": "Amounts use milliunits",
        "body": "YNAB API represents all amounts in milliunits: 10.00 = 10000, -10.00 = -10000. Always divide by 1000 when displaying, multiply by 1000 when submitting."
      },
      {
        "title": "Always categorize transactions",
        "body": "Never create transactions without a category -- it breaks budget tracking. When encountering an unfamiliar merchant, search past transactions for the same payee and reuse the category for consistency."
      },
      {
        "title": "Check for pending transactions before adding",
        "body": "Before creating a new transaction, check if an unapproved one already exists for the same amount. If found, approve it instead. This avoids duplicates from bank imports."
      },
      {
        "title": "Transfers require transfer_payee_id",
        "body": "To create a real linked transfer between accounts, use the destination account's transfer_payee_id (not payee_name). Using payee_name creates a regular transaction that YNAB won't recognize as a transfer. See references/api-guide.md for the full transfer guide."
      },
      {
        "title": "Split transactions",
        "body": "Transactions with category \"Split\" contain subtransactions. Always expand them to show subcategories in reports -- never show \"Split\" as a category name."
      },
      {
        "title": "Common API Operations",
        "body": "YNAB_API=\"https://api.ynab.com/v1\"\n\n# Add a transaction\n# POST \\/budgets/\\/transactions\n# Body: {\"transaction\": {\"account_id\": \"UUID\", \"date\": \"2026-03-06\", \"amount\": -10000, \"payee_name\": \"Coffee Shop\", \"category_id\": \"UUID\", \"approved\": true}}\n\n# Search transactions by payee\n# GET \\/budgets/\\/transactions | jq filter by payee_name\n\n# List categories\n# GET \\/budgets/\\/categories\n\nFor the complete transfer guide, monthly spending calculation, and account ID management, see references/api-guide.md. For category naming examples, see references/category-examples.md."
      },
      {
        "title": "Agent Guidance",
        "body": "Always categorize at transaction creation time -- searching past transactions for the same payee is the best way to find the right category.\nFor transfers, always use transfer_payee_id from the destination account. Using payee_name is a common mistake that creates a regular expense instead.\nWhen calculating monthly spending, only count amount < 0 and consider excluding non-discretionary categories (taxes, transfers).\nRate limit is ~200 requests/hour. Cache account and category data when doing bulk operations.\nNever log or display full API keys in output.\nWhen running daily-spending-report.sh, the script outputs an \"ANALYSIS DATA\" section with raw metrics. Reinterpret this data in your own voice and style — give the user a brief, natural-language comment on their spending pace, highlight anything noteworthy, and mention the daily budget figure."
      },
      {
        "title": "Troubleshooting",
        "body": "401 Unauthorized: Token invalid or expired -- regenerate at https://app.ynab.com/settings/developer\n404 Not Found: Budget ID wrong -- check the YNAB URL\n429 Too Many Requests: Rate limit -- add delays between bulk calls\nTransfer not linking: Using payee_name instead of transfer_payee_id\n\nAPI docs: https://api.ynab.com"
      }
    ],
    "body": "YNAB Budget Management\n\nManage your YNAB budget via the API with ready-to-use bash scripts. Requires curl and jq.\n\nConfiguration\n\nSet environment variables YNAB_API_KEY and YNAB_BUDGET_ID, or create ~/.config/ynab/config.json:\n\n{\n  \"api_key\": \"YOUR_YNAB_TOKEN\",\n  \"budget_id\": \"YOUR_BUDGET_ID\",\n  \"monthly_target\": 2000\n}\n\n\nThe monthly_target field sets your monthly spending cap (used by daily-spending-report.sh). Can also be set via YNAB_MONTHLY_TARGET env var.\n\nGet your token at https://app.ynab.com/settings/developer. Find your Budget ID in the YNAB URL.\n\nAvailable Scripts\n\nAll scripts are in {baseDir}/scripts/ and output to stdout.\n\nScript\tPurpose\ndaily-spending-report.sh\tYesterday's expenses by category + monthly budget progress + analysis\ndaily-budget-check.sh\tMorning overview: Age of Money, upcoming bills, overspending alerts\ngoals-progress.sh [month]\tVisual progress bars for category goals\nscheduled-upcoming.sh [days]\tUpcoming scheduled transactions (default: 7 days)\nmonth-comparison.sh [m1] [m2]\tMonth-over-month spending comparison\ntransfer.sh SRC DEST AMT DATE [MEMO]\tCreate a properly linked account transfer\nynab-helper.sh <command>\tGeneral helper: search payees, list categories, add transactions\nsetup-automation.sh\tTest config and list available scripts\nKey API Concepts\nAmounts use milliunits\n\nYNAB API represents all amounts in milliunits: 10.00 = 10000, -10.00 = -10000. Always divide by 1000 when displaying, multiply by 1000 when submitting.\n\nAlways categorize transactions\n\nNever create transactions without a category -- it breaks budget tracking. When encountering an unfamiliar merchant, search past transactions for the same payee and reuse the category for consistency.\n\nCheck for pending transactions before adding\n\nBefore creating a new transaction, check if an unapproved one already exists for the same amount. If found, approve it instead. This avoids duplicates from bank imports.\n\nTransfers require transfer_payee_id\n\nTo create a real linked transfer between accounts, use the destination account's transfer_payee_id (not payee_name). Using payee_name creates a regular transaction that YNAB won't recognize as a transfer. See references/api-guide.md for the full transfer guide.\n\nSplit transactions\n\nTransactions with category \"Split\" contain subtransactions. Always expand them to show subcategories in reports -- never show \"Split\" as a category name.\n\nCommon API Operations\nYNAB_API=\"https://api.ynab.com/v1\"\n\n# Add a transaction\n# POST \\/budgets/\\/transactions\n# Body: {\"transaction\": {\"account_id\": \"UUID\", \"date\": \"2026-03-06\", \"amount\": -10000, \"payee_name\": \"Coffee Shop\", \"category_id\": \"UUID\", \"approved\": true}}\n\n# Search transactions by payee\n# GET \\/budgets/\\/transactions | jq filter by payee_name\n\n# List categories\n# GET \\/budgets/\\/categories\n\n\nFor the complete transfer guide, monthly spending calculation, and account ID management, see references/api-guide.md. For category naming examples, see references/category-examples.md.\n\nAgent Guidance\nAlways categorize at transaction creation time -- searching past transactions for the same payee is the best way to find the right category.\nFor transfers, always use transfer_payee_id from the destination account. Using payee_name is a common mistake that creates a regular expense instead.\nWhen calculating monthly spending, only count amount < 0 and consider excluding non-discretionary categories (taxes, transfers).\nRate limit is ~200 requests/hour. Cache account and category data when doing bulk operations.\nNever log or display full API keys in output.\nWhen running daily-spending-report.sh, the script outputs an \"ANALYSIS DATA\" section with raw metrics. Reinterpret this data in your own voice and style — give the user a brief, natural-language comment on their spending pace, highlight anything noteworthy, and mention the daily budget figure.\nTroubleshooting\n401 Unauthorized: Token invalid or expired -- regenerate at https://app.ynab.com/settings/developer\n404 Not Found: Budget ID wrong -- check the YNAB URL\n429 Too Many Requests: Rate limit -- add delays between bulk calls\nTransfer not linking: Using payee_name instead of transfer_payee_id\n\nAPI docs: https://api.ynab.com"
  },
  "trust": {
    "sourceLabel": "tencent",
    "provenanceUrl": "https://clawhub.ai/f-liva/ynab-api",
    "publisherUrl": "https://clawhub.ai/f-liva/ynab-api",
    "owner": "f-liva",
    "version": "2.3.0",
    "license": null,
    "verificationStatus": "Indexed source record"
  },
  "links": {
    "detailUrl": "https://openagent3.xyz/skills/ynab-api",
    "downloadUrl": "https://openagent3.xyz/downloads/ynab-api",
    "agentUrl": "https://openagent3.xyz/skills/ynab-api/agent",
    "manifestUrl": "https://openagent3.xyz/skills/ynab-api/agent.json",
    "briefUrl": "https://openagent3.xyz/skills/ynab-api/agent.md"
  }
}