jpm-oauth

jpm-oauth is a skill for Claude Code from jpmorgan-payments/pdp-skills. It costs 170 tokens per session (2,496 once invoked), scanned A, original, Apache-2.0.

A code-generation workflow for J.P. Morgan Payments OAuth authentication. OAuth is a way for an application to obtain permission to use an API, and JWT is a signed token format used during authentication.

In plain words
What is it for?
Use it to create code that signs requests with a private key, exchanges the result for an access token through J.P. Morgan's IDAnywhere service, and reuses the token until shortly before it expires.
Why use it?
It removes the need to manually implement certificate-based token exchange and token reuse in a merchant application.

Skill for Claude Code

Written for Claude Code: shipped in a Claude Code plugin. Also seen: names the AskUserQuestion tool.

Part of the jpm-payments-skills plugin — 5 skills shipped together

Good fit Use it to create code that signs requests with a private key, exchanges the result for an access token through J.P. Morgan's IDAnywhere service, and reuses the token until shortly before it expires.

Compare 6 skills from other repositories ↓
Install with agentmods
npx agentmods add skills/jpmorgan-payments/pdp-skills/jpm-oauth
Install

Getting it into your agent

One page per mod, every tool's command on it. A separate URL per tool would split the same page into five that compete with each other.

Any agent
npx skills add jpmorgan-payments/pdp-skills --skill jpm-oauth
Clone the repo
git clone --depth 1 https://github.com/jpmorgan-payments/pdp-skills

Made for: Claude Code.

Or install jpm-payments-skills, the plugin that ships this one along with the rest of its 5 skills.

Wrote this? Show the measurements

A badge with what this costs and how it scanned, read live from this page, so it follows the numbers instead of freezing them. Markdown for a README, HTML for a documentation site or a project page.

agentmods badge for jpm-oauth

README.md
[![agentmods](https://agentmods.dev/badge/skills/jpmorgan-payments/pdp-skills/jpm-oauth/github.svg)](https://agentmods.dev/skills/jpmorgan-payments/pdp-skills/jpm-oauth)
Your own site
<a href="https://agentmods.dev/skills/jpmorgan-payments/pdp-skills/jpm-oauth"><img src="https://agentmods.dev/badge/skills/jpmorgan-payments/pdp-skills/jpm-oauth/github.svg" alt="Measured on agentmods" height="20"></a>

Or the 80×15 button, for a site that already has a row of RSS and ATOM ones. Only the verdict fits; the numbers stay here.

agentmods 80×15 button for jpm-oauth

Your own site · 80×15
<a href="https://agentmods.dev/skills/jpmorgan-payments/pdp-skills/jpm-oauth"><img src="https://agentmods.dev/badge/skills/jpmorgan-payments/pdp-skills/jpm-oauth.svg" alt="Reviewed on agentmods" width="80" height="20"></a>
Per session 170 Skills are progressive disclosure: only the name and description are preloaded; the body loads when the skill is used.
When invoked 2,496 The whole file, excluding the scripts and references it only reads on demand.
Security scan A 0 findings. A grade says what 26 rules found in the file — not that it is safe.
Origin original No closer match found in the catalogue.
Token cost

What it costs to keep this loaded

Counted locally with the o200k_base tokenizer, which is exact for GPT models; Claude uses its own tokenizer and its counts differ. Treat this as one consistent yardstick across the catalogue rather than a bill. Prices are per million input tokens.

ModelPer sessionOnce invoked
Fable 5.1 $0.00170 $0.02496
Opus 5 $0.00085 $0.01248
Sonnet 5 $0.00034 $0.00499
Haiku 4.5 $0.00017 $0.00250

Measured 8d ago against content hash 77579312bdb9, method: parsed. Prices are Anthropic first-party input rates as of 2026-09-12, from the pricing page.

Security

Grade A, and why

jpm-oauth scanned grade A with 0 findings against 26 rules in 11 categories — prompt injection, anti-refusal, data exfiltration, privilege escalation, supply chain, agent snooping, system-prompt leakage, SSRF and excessive agency — measured 8d ago.

A static scan of the body, not an audit. Every finding is printed with the line that produced it so you can judge whether it matters here. A mod is markdown that instructs an agent; that is exactly why what it instructs is worth reading.

Nothing flagged

None of the 26 patterns this scan looks for appear in this file: no shell pipes, no recursive deletes, no credential paths, no hidden text, no instruction-override or anti-refusal phrasing, no agent-config snooping. That is not a guarantee, it is the absence of the things that are checkable.

skills/jpm-oauth/SKILL.md · 153 lines

How it starts

The opening of the file, as written. The whole thing — 153 lines — stays where its author put it; the contents beside it link to each section on GitHub.

JPM OAuth implementation

Generate JWT-signing + access-token-exchange code that follows JPM's IDAnywhere OAuth contract. The generated module caches the access token until just before its server-set expiry, so the merchant's app reuses one token across many API calls instead of regenerating per request.

This skill is typically invoked from the end of jpm-integrations-get-started (its Step 4). When run standalone, it gathers the same inputs interactively.

Step 1 — Verify prerequisites

The merchant must have all four of:

  • clientId (e.g. CC-123456-D12992-232222-TEST)
  • certificate path (PEM .cer from JPM)
  • private key path (PEM key paired with the certificate)
  • SHA-1 thumbprint of the cert (40 hex chars; colons optional — code will normalize)

If you arrived from jpm-integrations-get-started, these are already in conversation context — use them.

If invoked standalone:

  1. Ask the user where the credentials live: file paths, an .env, or in conversation.
  2. If anything is missing, tell the user to run jpm-integrations-get-started first and exit. Do not invent placeholder values.

Step 2 — Environment

Ask:

  • Question: "Which JPM environment are you targeting?"
  • Header: "Environment"
  • Options:
    • "CAT (test)"
    • "PROD"
    • "Both — generate code that switches via env var"

Do not prompt the user for the resource_id. The generated module reads it from the JPM_RESOURCE_ID environment variable at runtime, and the intake skill's .env.example already includes that key with a comment pointing the user at the JPM onboarding email (where the value lives). Just remind the user in your wrap-up to fill JPM_RESOURCE_ID in their .env before running the auth module — and that CAT and PROD have different resource_id values, so the right one must be in the .env for the environment they're targeting.

Step 3 — Education and JWT TTL

Show the user this guidance verbatim before asking the TTL question:

Two TTLs to know about:

  • Access token TTL — set by JPM's IDAnywhere server, returned as expires_in (seconds) in every token response. The generated module reads this value and reuses the access token across requests until shortly before it expires. Don't treat it as fixed — server-side defaults can change.

  • JWT TTL — client-controlled (you pick). The JWT is the credential you hand to IDAnywhere to get an access token. JPM's guidance: 8 hours for PROD; longer is fine for CAT.

Anti-pattern to avoid: generating a fresh JWT and a fresh access token on every API call (think of it like running a card auth on a brand-new payment instrument every transaction — wasteful and slow). The access token is reusable until expiry. The generated module caches it in memory and only refreshes it when within ~30s of expiry. Call getAccessToken() once per outbound request and let the cache do its job.

Read the full file on GitHub · 153 lines

Files

What ships with it

4 files beside SKILL.md in the same directory: the scripts, references and assets a skill reads on demand. Not counted in the per-session cost; read them before you install if any of them is executable.

Changes

What this file has done since we first saw it

Hashed on every crawl. A supply-chain change to an agent config is a question of when, not whether, so the history is kept rather than the latest state alone.

  1. 8d ago Changed · +2 lines 77579312bdb9
  2. 12d ago First seen · 151 lines · 170 tokens per session scan A 5c9d76359fa2

Subscribe to this mod's changes

jpm-oauth is a skill published in the GitHub repository jpmorgan-payments/pdp-skills (8 stars, last pushed yesterday), licensed Apache-2.0. It adds 170 tokens to every session and 2,496 once invoked, about $0.0009 per session on Opus 5. A static security scan graded it A with 0 findings. No closer match exists in the catalogue, so it is treated as the original; first seen 2026-08-31.

Related

Other skills, from other repositories

messari-x402

Access Messari's full API via x402 pay-per-request — no API key needed. Asset data, market metrics, signals, news, fundraising, token unlocks, on-chain networks, and AI chat, all paid with USDC on Base.

moonpay/skills · 55 tokens

sumup-mcp

Use the SumUp MCP server (https://mcp.sumup.com/mcp) from Cursor, Claude Code, Codex, or any MCP-capable client. Use when the user mentions SumUp MCP, needs to wire mcp.sumup.com, or wants tool-based access to SumUp APIs.

sumup/sumup-skills · 66 tokens

payuni-query

A tool for checking PAYUNi transaction records through its Query API. PAYUNi is a Taiwan payment gateway, and a transaction query asks the gateway for an order’s current payment result.

paid-tw/skills · 37 tokens

kryptogo-pay-query

An implementation guide for querying KryptoGO Payment, a stablecoin payment service, to check individual or multiple payment records.

paid-tw/skills · 49 tokens

x402

Set up Browser Use Cloud payments with x402 — pay per request from a crypto wallet (USDC on Base mainnet), no signup or API key. Two setups it works out up front — "just use it" (set up a wallet so you or Claude Code can run cloud browser tasks paid from the wallet — Claude writes and runs throwaway scripts, nothing…

browser-use/browser-use · 175 tokens

tushare

A Python interface for Tushare, a financial data service that provides market and company information for stocks, funds, futures, and digital assets. It returns queried data as pandas tables.

HKUDS/Vibe-Trading · 79 tokens