aba-payway-cof
Store an ABA account or card token once, then charge it on demand (MIT) or via recurring schedules.
Skill by Ruzaid-aman
Chalk Labs
Need help deploying aba-payway-cof?
Chalk Labs sets up agents like this inside real teams: connected to your tools, tested on your data, with a human in the loop where it matters.
Install
Works with Claude Code, Claude apps, Codex, Cursor, Gemini CLI, GitHub Copilot, VS Code, OpenCode, Goose, Windsurf. Read the repository before you give any tool access to your data.
npx agentmarket install skill/ruzaid-aman-aba-payway-cof
Asks which of your tools to add it to (Claude Code, Codex, Cursor, VS Code, Windsurf, Gemini CLI, Claude Desktop) and shows the change first. See https://agentmart.dev/cli.
Get the weekly diff
The weekly diff: one email a week with new agent tools, notable updates and grade changes, plus security alerts for tools you follow. Double opt-in, one-click unsubscribe.
About
Reviews
Write a reviewNo reviews yet. Installed it? Reviews come from verified installers only. How reviews work
Permissions
What this skill can do and what it asks for, from its SKILL.md. Checked Oct 25, 2026.
- Tools
- No tools found
- Secrets
- None asked for
- Install scripts
- None found
Network hosts it talks to 1
codeload.github.com· found in install command
Files it touches
~/.claude/skills/aba-payway-cof
What's inside
- Skill name
aba-payway-cof- Description
- Store an ABA account or card token once, then charge it on demand (MIT) or via recurring schedules.
- License
- MIT
- Metadata
- version: 1.1.0
- Instructions
- 137 lines in SKILL.md · view on GitHub
Files (1)
- SKILL.md
SKILL.md (first lines)
# Credentials on File (CoF)
Store an ABA account or card token once, then charge it on demand (MIT) or via
recurring schedules. Three commands matter: link-account, link-card, charge.
## Quick Start — link an account
```ts
// QR/deeplink arrives in the response; the token (pwt) is pushed to callbackUrl.
const link = await payway.credentialsOnFile.linkAccount({
requestId: 'req0001', // 5–24 alphanumeric, unique
ctid: 'customer123', // your customer id, 5–24 alphanumeric (REQUIRED)
tokenFlag: 'CITI_FLEX', // CITI_FLEX | CITO_FLEX (REQUIRED)
currency: 'USD', // REQUIRED (profile-enabled)
callbackUrl: 'https://merchant.example/payway/callback',
returnDeeplink: { ios_scheme: 'myapp://linked', android_scheme: 'myapp://linked' },
});
```
## Quick Start — link a card (browser form, recommended)
```ts
const html = payway.credentialsOnFile.getLinkCardFormHtml({
requestId: 'req0002', ctid: 'customer123', tokenFlag: 'CITI_FLEX',
currency: 'USD', frequency: '1M', // live docs: "Required for Link Card" — SDK warns when omitted
continueSuccessUrl: 'https://merchant.example/done', // hosted form's Done button target
callbackUrl: 'https://merchant.example/payway/callback',
});
res.type('html').send(html); // browser POSTs urlencoded → gateway's hosted card page
```
The API route (`credentialsOnFile.linkCard()`) exists too, but this endpoint
ALWAYS answers with the hosted HTML page — the CLI saves it to
`payway-output/link-card-<request-id>.html` and exits 0 (the saved page IS the
success signal). `returnUrl`/`returnDeeplink` are NOT sent on link-card
(deprecated params; not in the live-documented request).
## Quick Start — charge the stored token
```ts
const charge = await payway.credentialsOnFile.payment({
transactionId: 'order-0001', amount: 4.5, currency: 'USD',
ctid: 'customer123', paymentToken: pwt, // the pwt from the link callback
tokenFlag: 'MITU_FLEX', // charging flags (see below)
firstName: 'John', lastName: 'Doe', email: 'j@example.com', phone: '+855…', // hash positions
items: [{ name: 'Item', price: 4.5, quantity: 1 }],
returnParams: 'order=0001',
payout: [{ acc: '500000001', amt: 4.5 }], // ⚠️ {acc, amt} keys (purchase-path shape; seeded sandbox account)
customFields: { plan: 'pro' },
shippingFee: 0.5,
});
```
**Charging flags (live docs):** `CITU_FLEX | MITU_FLEX | MITU_FIX | MITR_FLEX | MITR_FIX`
(customer-initiated vs merchant-initiated, fixed vs variable). Linking flags
(`CITI_FLEX | CITO_FLEX`) belong to the link endpoints, NOT to charges — the CLI
rejects them for charging locally. LIVE (2026-09-15, §26 AOF-9): `CITU_FLEX` is the
verified-good charge flag on an account token (it is a request classification, NOT a
copy of the link-time flag — a CITI_FLEX-linked token charges fine under CITU_FLEX);
MIT flags answer `105` on this profile; omitting the flag is a gateway `04`.
## §16 hash orders (sandbox-verified 2026-08-31)
- link-account: `merchant_id.request_time.ctid.return_deeplink.callback_url.request_id.token_flag.currency`
- link-card: `merchant_id.request_time.ctid.callback_url.request_id.token_flag.frequency.amount.currency.continue_success_url`
(`amount` has NO body field and always hashes as `''`; `frequency` hashes its
supplied value — 1W|1M|2M — or `''` when omitted, but is live-documented as
required for Link Card)
- charge (payment-credential): `request_time.merchant_id.tran_id.amount.currency.items.ctid.pwt.first_name.last_name.email.phone.purchase_type.callback_url.custom_fields.return_params.payout.token_flag.shipping_fee` — **no request_id** (deprecated, not sent)
## Error families
- `status.code "04"` + `errors{}` map → `PayWayBusinessError.fieldErrors` (per-field binding errors).
- `1`/`01`/`PTL02` → `PayWaySignatureError` (carries the endpoint hash-order hint).
- `98` merchant not found · `104` **Merchant not enabled token flag** — since 2026-09-15 (§26) this is FLAG-SCOPED on profiles with account-on-file enabled: CITI_FLEX/CITO_FLEX link-account succeeds (`00` + qr_string), while CITO_FIX/CITR_FLEX still 104 and the card leg stays 104 (account-only enablement). Read it as "this flag/channel is not enabled", not "the profile is dead" · `105` invalid payment credential token (live 2026-09-15 §26: unknown/expired pwt, MIT flags on an account token, or a token the CUSTOMER removed in ABA Mobile — the app-side unlink kills charging but `getTokenDetails` keeps reporting `status: 1` and NO removal callback fires, so 105 at charge time is the ONLY detection signal) · `09` data not found (live: getTokenDetails for a request that never linked).
## §24 live facts (2026-09-12) + §26 AOF enablement (2026-09-15)
- **Hosted outcome is readable server-side**: `linkCard()`'s thrown
`PayWayBusinessError` carries `responseUrl` + `hostedPage`
(`{url, payload, code, message}` decoded from the
`302 → /add-card/<base64>` redirect target) — the HTML body is only a shell.
- **`removeToken` answers `00 Success` even for a NON-EXISTENT token** — it
cannot probe existence; use `getTokenDetails()` (09 = not found) instead.
- **No CoF callback fires for a FAILED link attempt** — silence after a hosted
error page is expected (§24 LC-4). The pwt-callback body schema is NOW
LIVE-CAPTURED (§26 AOF-7): `{request_id, payment_credential:{ctid, pwt,
source_of_fund, type, status: 1, expired_at, token_flag, frequency,
subscribed_amount, amount_limit_per_tran, currency}}` — `payment_credential.status`
is the CREDENTIAL status (1 = active), not a transaction status. The callback's
`x-payway-hmac-sha512` header does NOT verify under our canonicalization and 19
offline orderings failed (§26 AOF-8) — the receiver refuses to persist unverifiable
pwts; recover via `getTokenDetails(request_id)` (transitive auth). The receiver still
verifies BOTH channels (`signatureSource: header|body`) for fixtures/other contracts.
- **§26**: `link-account` succeeds on AOF-enabled profiles — `00` + `data.qr_string`
(an `ABAAOF…` payload) + a `type=account_on_file` deeplink (NOT the payment
`type=payway` form — use the gateway-supplied `data.deeplink`, don't build it
yourself); `expire_in` is an absolute epoch (expiry instant) — and the live
QR window is creation + **~90 SECONDS**, not the documented 10 minutes
(§26 AOF-12); the CLI renders the wall-clock deadline. The
CLI presents the QR end-to-end: PNG to `payway-output/cof-link-account-<request-id>.png`,
`--open-image`/`--no-open-image` (auto on TTY), `--json` gains `qrPngPath`. `cof charge`
renders an approval QR the same way IF the live response ever carries one (live shape is
status-only — defensive). Charge success returns ONLY `{status:{code:"00"}}` — no
tran_id; YOUR tran_id + `check-transaction` is the reconciliation path (live: APPROVED
+ apv, amount fields read 0 on the credential tran, §26 AOF-9/10). Lifecycle ops live-00:
renew (90-day window restarts, pwt unchanged), remove (local prune; charge-after-remove
= 105), re-link (fresh QR + epoch expire_in). **App-side unlink (AOF-14):** when the
customer removes the account in ABA Mobile, charging dies (105) but `getTokenDetails`
still says `status: 1` and NO callback is delivered — poll charges, don't trust details,
don't wait for a removal webhook. **pwt stability (AOF-13):** re-linking the same
ctid+account+flag after ANY removal returns the IDENTICAL pwt. **QR window (AOF-12):
creation + ~90 seconds, not the documented 10 minutes** — scan immediately.
## CLI
```sh
payway-sdk cof link-account -r req0001 -c customer123 -f CITI_FLEX --currency USD --callback-url <url> \
--return-deeplink '{"ios_scheme":"myapp://linked","android_scheme":"myapp://linked"}'
payway-sdk cof link-card-form -c customer123 -f CITI_FLEX --callback-url <url> -o link-card.html # local, no API call
payway-sdk cof link-card -r req0002 -c customer123 -f CITI_FLEX --frequency 1M --callback-url <url>
payway-sdk cof charge -t order-0001 -a 4.50 --token <pwt> --ctid customer123 --token-flag CITU_FLEX # live-verified charge flag (§26 AOF-9)
payway-sdk cof token-flag-sweep -c customer123 --json # diagnostic: 1 POST per linking flag + card leg; uniform 104 = profile blocker (no receiver needed)
payway-sdk webhook trigger --event cof-link.linked --url <receiver>/aba-payway-webhook --ctid customer123 # dry-run the capture path (synthetic pwt, body-hash channel)
payway-sdk webhook show --record wh_… # full record dump: headers + raw body + signature source (Q18 evidence inspection)
```From Ruzaid-aman/ABA-Payway-SDK-unofficial, MIT.
More from Ruzaid-aman/ABA-Payway-SDK-unofficial
- 0.570score
aba-payway-integration
Ruzaid-aman
Explain how to use this skill, select a PayWay flow, or integrate, test, review and troubleshoot ABA PayWay in a merchant project.
SkillAFreshness: AClaude Code +9 - 0.567score
aba-payway-customer-qr
Ruzaid-aman
Handle Merchant Portal Customer Module static QRs (Printed QR channel) — decoded payload anatomy, callback handling, and reconciliation via…
SkillAFreshness: AClaude Code +9 - 0.565score
aba-payway-agent
Ruzaid-aman
Use when operating the agentic PayWay CLI with provider modes, the 14 tools (incl.
SkillAFreshness: AClaude Code +9 - 0.565score
aba-payway-knowledge-base
Ruzaid-aman
Use when you need PayWay integration guidance offline — the built-in knowledge base of integration and support topics (setup…
SkillAFreshness: AClaude Code +9 - 0.564score
aba-payway-hash
Ruzaid-aman
Verify ABA PayWay webhook signatures with timing-safe HMAC verification.
SkillAFreshness: AClaude Code +9 - 0.564score
aba-payway-first-payment
Ruzaid-aman
Start an ABA PayWay payment, choose QR or hosted checkout or payment link, verify it, and fulfill once.
SkillAFreshness: AClaude Code +9 - 0.558score
aba-payway-journal
Ruzaid-aman
Query the local ABA PayWay transaction journal — timelines, stats, reconciliation, anomalies, and RCA for AI agents.
SkillAFreshness: AClaude Code +9 - 0.554score
aba-payway-purchase
Ruzaid-aman
Create a signed ABA PayWay checkout purchase with aba-payway-ts.
SkillAFreshness: AClaude Code +9 - 0.551score
aba-payway-qr
Ruzaid-aman
Generate an online ABA PayWay KHQR payment QR code.
SkillAFreshness: AClaude Code +9 - 0.521score
aba-payway-beneficiary
Ruzaid-aman
Manage the ABA PayWay payout beneficiary whitelist — add payees, update status, and test with seeded sandbox beneficiaries.
SkillBFreshness: BClaude Code +9 - 0.521score
aba-payway-bulk-operations
Ruzaid-aman
Run one transaction operation (close, check, detail) across many ABA PayWay transaction IDs with per-item results, rate-limit pacing, and evidence reports.
SkillBFreshness: BClaude Code +9 - 0.518score
aba-payway-payout
Ruzaid-aman
Make an ABA PayWay payout / split-payout and manage payout beneficiaries (whitelist, currency matching, error codes).
SkillBFreshness: BClaude Code +9
Signals
- Stars
- 0
- Forks
- 0
- Open issues
- 0
- Last commit (this folder)
- Sep 15, 2026 (1 month ago)
From GitHub (fetched Oct 24, 2026).
Details
- Version
- 1.1.0
- License
- MIT
- First seen
- Oct 24, 2026
- Last checked
- Oct 24, 2026
- Source
- GitHubgithub-graphql
More from Ruzaid-aman
- 0.570score
aba-payway-integration
Ruzaid-aman
Explain how to use this skill, select a PayWay flow, or integrate, test, review and troubleshoot ABA PayWay in a merchant project.
SkillAFreshness: AClaude Code +9 - 0.567score
aba-payway-customer-qr
Ruzaid-aman
Handle Merchant Portal Customer Module static QRs (Printed QR channel) — decoded payload anatomy, callback handling, and reconciliation via…
SkillAFreshness: AClaude Code +9 - 0.565score
aba-payway-knowledge-base
Ruzaid-aman
Use when you need PayWay integration guidance offline — the built-in knowledge base of integration and support topics (setup…
SkillAFreshness: AClaude Code +9 - 0.565score
aba-payway-agent
Ruzaid-aman
Use when operating the agentic PayWay CLI with provider modes, the 14 tools (incl.
SkillAFreshness: AClaude Code +9 - 0.564score
aba-payway-first-payment
Ruzaid-aman
Start an ABA PayWay payment, choose QR or hosted checkout or payment link, verify it, and fulfill once.
SkillAFreshness: AClaude Code +9 - 0.564score
aba-payway-hash
Ruzaid-aman
Verify ABA PayWay webhook signatures with timing-safe HMAC verification.
SkillAFreshness: AClaude Code +9
Done for you
Rather not set it up yourself?
Chalk Labs scopes, builds and runs agents for your team: the task audit, the eval harness, the integrations and the weekly ops report. Fixed scope, priced before we start.
See how we build AI agents →Read the case studies
Chalk Labs is a two-founder AI and growth studio. We build AI agents, CRMs and MVPs for Web3 and AI companies, and have shipped 50+ product and token launches.
- launches shipped
- 50+
- launches shipped
- media placements
- 500+
- media placements
- founders on every account
- 2
- founders on every account
Press we've placed: Forbes · CoinDesk · Decrypt · Cointelegraph · The Block
Rahil Jain, Co-founder, Chalk Labs. Ex-Goldman Sachs engineer. You talk to the person who builds it.
Get aba-payway-cof running in your business
Tell us what you want to automate. A founder replies within one working day with a plan, not a pitch deck.
Cite this page
aba-payway-cof skill. Agent Mart. https://agentmart.dev/skills/ruzaid-aman-aba-payway-cof (last updated 2026-10-24)