Machine-readable manifests

Nine machine-readable files that are the canonical source of truth for HoneyCoin coverage, errors, webhooks, flows, sandbox fixtures, and agent rules. Agents and tooling should read these directly.

The /manifests/ directory in the docs repo holds the canonical, machine-readable representation of every coverage matrix, error catalogue, webhook schema, and agent rule HoneyCoin publishes. Human-facing pages on this site are rendered from these files. Agents, SDK generators, and route builders should read them directly rather than scraping prose.

📘

Where they live

Repo: HoneyCoin-Inc/honeycoin-readme-docs, branch v1.0.4, path manifests/. Once v1.0.4 ships, they'll be reachable at https://docs.honeycoin.app/manifests/<name> as well.

Inventory

ManifestPurposeSize
coverage.jsonEvery supported country, currency, collection method, payout destination, operator, and per-corridor min/max amount.~11 KB
wallets.jsonEvery supported chain with address type, regex, token support, onramp/offramp eligibility, and the ownership model.~8 KB
errors.jsonCanonical response shape plus the full catalogue of API errors, transaction errors, and webhook errors with retryable flags and developer actions.~6 KB
webhooks.jsonWebhook envelope, signature rules, delivery and retry policy, and every event with dataFields, statusValues, and recipe cross-links.~4 KB
wallet-webhooks.jsonThe same for wallet webhooks plus the resend endpoint.~2 KB
flows.jsonFlow definitions (collect-mobile-money, send-payout, onramp, offramp, wallet-receive) with step-by-step decision points.~7 KB
test-data.jsonSandbox fixtures for success, failure, OTP, and redirect paths per recipe.~4 KB
changelog.jsonStructured changelog with version, date, breaking, added, changed, deprecated, fixed arrays.~2 KB
agent-policy.yamlThe list of rules every AI agent must follow when generating HoneyCoin integrations. Rendered as Agent instructions.~4 KB

Conventions

Every manifest follows the same envelope:

{
  "version": "2026-05-19",
  "description": "Plain-English purpose of this file.",
  ...
}
  • version — ISO date. Pin to this in production for reproducible behavior; cache for at most 24 hours.
  • description — One-line statement of intent. Useful for agent self-description prompts.

Quick samples

coverage.json — country and operator lookup

{
  "name": "Kenya",
  "countryCode": "KE",
  "currency": "KES",
  "collections": [
    {
      "method": "mobile_money",
      "minAmount": 5,
      "maxAmount": 250000,
      "operators": ["mpesa", "airtel"],
      "operatorIdRequired": false,
      "requiredFields": ["amount", "currency", "externalReference", "phoneNumber"]
    },
    {
      "method": "bank_transfer",
      "minAmount": 50,
      "maxAmount": 999999,
      "requiredFields": ["amount", "currency", "externalReference", "email"]
    }
  ],
  "payouts": [
    { "destination": "MoMo",         "minAmount": 10, "maxAmount": 250000, "operators": ["mpesa", "airtel"] },
    { "destination": "Bank Account", "minAmount": 10, "maxAmount": 999999, "requiresBankCode": true },
    { "destination": "Paybill",      "minAmount": 10, "maxAmount": 250000 },
    { "destination": "Till",         "minAmount": 10, "maxAmount": 250000 }
  ]
}

errors.json — branch on errorCode

{
  "errorCode": "DUPLICATE_EXTERNAL_REFERENCE",
  "httpStatus": 409,
  "retryable": false,
  "developerAction": "Use a new externalReference. The supplied value has already been used for a different transaction."
}

agent-policy.yaml — the rules themselves

rules:
  - id: finality
    severity: critical
    summary: Wait for status: successful before releasing value.
  - id: external-reference
    severity: critical
    summary: Unique externalReference on every money movement request.
  ...

Using manifests in code

Fetch directly with curl, httpx, or your HTTP client of choice. Cache for at most 24 hours and surface the version field in your logs.

curl https://docs.honeycoin.app/manifests/coverage.json | jq '.countries[] | select(.countryCode == "KE")'
import httpx

coverage = httpx.get("https://docs.honeycoin.app/manifests/coverage.json").json()
errors   = httpx.get("https://docs.honeycoin.app/manifests/errors.json").json()

def supports(country_code: str, method: str) -> bool:
    for c in coverage["countries"]:
        if c["countryCode"] == country_code:
            return any(m["method"] == method for m in c["collections"])
    return False

def is_retryable(error_code: str) -> bool:
    # errorCode-keyed entries live under apiErrors; transactionErrors are
    # matched by messagePattern/category and webhookErrors by description.
    return any(e["errorCode"] == error_code and e["retryable"] for e in errors["apiErrors"])
const coverage = await fetch("https://docs.honeycoin.app/manifests/coverage.json").then(r => r.json());
const errors   = await fetch("https://docs.honeycoin.app/manifests/errors.json").then(r => r.json());

const supports = (countryCode, method) =>
  coverage.countries
    .find(c => c.countryCode === countryCode)
    ?.collections.some(m => m.method === method)
  ?? false;

Known caveats

🚧

flows.json recipe paths

Several entries in flows.json reference recipePath strings like /recipes/collect-mobile-money. These paths originate from the Mintlify-based docs rebuild and may not resolve once v1.0.4 deploys. Treat recipePath as illustrative until the team confirms equivalent slugs in this docs version.

🚧

Manifest schemas

JSON Schemas for these manifests are planned for a future release. Until they are published, the manifests do not carry a $schema reference, so validate against the documented shapes on this page rather than expecting a resolvable schema URL.

Refresh cadence

ManifestRefresh trigger
coverage.json, wallets.jsonHoneyCoin adds or removes a country, currency, rail, operator, chain, or token.
errors.jsonNew error code added; retryable flag changed; remediation guidance updated.
webhooks.json, wallet-webhooks.jsonNew event added; envelope or signature scheme changed.
flows.json, test-data.jsonNew recipe shipped; sandbox fixture updated.
changelog.jsonEvery docs release.
agent-policy.yamlNew rule added or severity changed.

Each refresh bumps the version date. Agents in production should log the version they consumed for auditability.

Related