Jpm integrations get started
Skill jpmorgan-payments/pdp-skills/skills/jpm-integrations-get-started
Triage and credential intake for merchants starting with J.P. Morgan Payments APIs. Use this skill when the user wants to migrate from another payment provider to JPM or start a new JPM integration from scratch. Sets up a .env file (generated fresh or updated in place) with the clientId, certificate path, and private key path that downstream skills will read at runtime. Does not persist credential contents.From its SKILL.md
npx -y skills add jpmorgan-payments/pdp-skills --skill jpm-integrations-get-startedAssembled from the repository path, not quoted from the project. Check it against their README if it does not work.
3 things to look at
- skips confirmationTells the agent to proceed without asking first, 2 times: "Do not ask the user "generate or update?" — the file's presence and contents determine the branch." and 1 more.
- reads credentialsReads from 3 credential sources: `.env` and 2 more.
- 6 stars6 stars. Stars are a popularity signal and not a quality one, but at this level it is likely that nobody has read this closely except its author, and you would be relying on your own review.
SKILL.md
7.5 KB, ~1.8k tokens by cl100k_base, as published. Nobody here has run it
JPM Integrations — Get Started
Run a conversational intake for merchants getting started with J.P. Morgan Payments APIs. Follow the steps in order. Use AskUserQuestion for every multiple-choice question.
Disclaimer (show before Step 1)
Before running the intake, show the user this disclaimer verbatim and wait for them to acknowledge before proceeding:
Disclaimer: We do not assume any responsibility for any issues, damages, or losses that may arise from using the code generated or modified by this skill. These skills rely on AI agents to produce code, and all generated code should be carefully reviewed and verified by a qualified engineer before being deployed to a production environment.
Use AskUserQuestion:
- Question: "Do you acknowledge the disclaimer above and want to proceed?"
- Header: "Acknowledge"
- Options:
- "Yes — proceed"
- "No — exit"
If No, exit this skill.
Step 1 — Triage intent
Ask:
- Question: "What are you trying to do with J.P. Morgan Payments?"
- Header: "Goal"
- Options:
- "Migrate from another provider" — moving from a non-JPM processor (Stripe, Adyen, etc.)
- "Start a new JPM integration" — greenfield project
Remember the answer as intent.
Step 2 — Onboarded?
Ask:
- Question: "Have you completed JPM onboarding and received your clientId, certificate, and private key?"
- Header: "Onboarded?"
- Options:
- "Yes — I have all three"
- "No — not yet"
If No, go to Step 5. If Yes, go to Step 3.
Step 3 — Set up the .env file
Read templates/env.example (relative to this skill directory) to determine the variable names this integration expects. Then look in the user's current working directory for a .env file and branch based on what you find. Do not ask the user "generate or update?" — the file's presence and contents determine the branch.
3a — .env exists and has every expected variable set
Tell the user (one line): "Your .env already has all expected JPM variables — skipping .env setup." Go to Step 4.
3b — .env exists but is missing one or more expected variables
List the missing variable names to the user (names only — never echo values from the existing file), then ask:
- Question: "I'll append the missing variables to your existing
.envwith placeholder values. Proceed?" - Header: "Update .env?"
- Options:
- "Yes — add them"
- "No — I'll handle it"
If Yes:
- Append each missing variable (with a placeholder value) to the bottom of
.env. Do not overwrite values the user has already set. - Read
.gitignorein the project root. If a line equal to.envis not present, append.envto it. If.gitignoredoesn't exist, create one containing.env. - Confirm to the user which variables were added (by name only) and remind them to fill in any placeholders before running downstream skills.
Go to Step 4 either way.
3c — No .env found
Ask:
- Question: "No
.envfound in the project. Generate a sample one from the skill template?" - Header: ".env setup"
- Options:
- "Yes — generate sample"
- "No — I'll create it myself"
If Yes:
- Copy
templates/env.exampleto.env.examplein the user's current working directory. - Read
.gitignorein the project root. If a line equal to.envis not present, append.envto it. If.gitignoredoesn't exist, create one containing.env. - Tell the user: "Created
.env.examplein your project root and ensured.envis gitignored. Copy.env.exampleto.env, fill in the values, and do not commit.env. Downstream skills will read these at runtime."
Go to Step 4 either way.
Step 4 — Implement auth?
This step runs after the .env has been generated or updated. The user has confirmed possession (or imminent possession via .env) of clientId + cert + key. Credential validation happens downstream when jpm-oauth (or the next skill that needs them) actually loads the .env.
Ask:
- Question: "Would you like me to implement the JPM OAuth flow now?"
- Header: "Implement auth?"
- Options:
- "Yes — generate auth code"
- "No — I'll do it later"
If No: exit.
If Yes:
-
Detect language and libraries. Look in the user's current working directory for a dependency manifest. Check in this order and stop at the first match:
package.json→ JavaScript / TypeScriptrequirements.txt,pyproject.toml,Pipfile,setup.py→ Pythonpom.xml→ Java (Maven)build.gradle,build.gradle.kts→ Java / Kotlin (Gradle)go.mod→ GoCargo.toml→ RustGemfile→ Rubycomposer.json→ PHP*.csproj,*.fsproj→ .NET
If a manifest is found, scan its dependencies for any HTTP client (axios, node-fetch, got, undici, requests, httpx, okhttp, reqwest, etc.) and any JWT/crypto library (jsonwebtoken, jose, pyjwt, jjwt, golang-jwt, etc.) the project already uses. The point of this scan is to reuse what's already there rather than introduce new dependencies.
-
Decide whether to ask the user. The principle: only ask for what you couldn't infer.
- If language is detected and at least one HTTP client and a JWT library are already present in the manifest, do not ask — just announce: "Detected
<language>with<http-lib>and<jwt-lib>— the auth implementation will use those." - Otherwise prompt the user (free text) for the gaps only:
- Programming language (if not detected)
- Preferred HTTP client (if none in manifest) — user can answer "any"
- Preferred JWT library (if none in manifest) — user can answer "any"
- If language is detected and at least one HTTP client and a JWT library are already present in the manifest, do not ask — just announce: "Detected
-
Hand off to
jpm-oauth. Invoke thejpm-oauthskill via the Skill tool. The OAuth skill picks up the conversation context — credentials location, SHA-1 thumbprint, integration intent from Step 1, and target stack (language + HTTP client + JWT library) — and only asks the user for what it doesn't already know (target environment CAT/PROD, JWT TTL, and output location for the generated code). Theresource_idis read fromJPM_RESOURCE_IDin the.envat runtime — the user fills it in using the comment already in.env.example, no question is asked. Exit this skill oncejpm-oauthtakes over.
Step 5 — Not yet onboarded
<!-- TODO(content+legal): confirm exact wording with the content and legal teams before release. -->Tell the user:
JPM onboarding is handled by your Relationship Manager (RM). Please reach out to your RM to begin onboarding and to receive your clientId, certificate, and private key. Once you have them, run this skill again.
Then exit.
Rules
- Never write clientId, cert contents, or private key contents to any persistent file under your control. The only files this skill creates or modifies are
.env.example(placeholders only), the user's.env(only to append missing variable names with placeholder values — never overwriting existing values), and.gitignore(to ensure.envis ignored). - Always mask the clientId when echoing it back (last 4 chars only).
- Never echo or log the contents of the private key, nor any value already set in the user's
.env.
What ships with it: 2 files
3.1 KB alongside SKILL.md, 1 of them executable
scripts/
- validate-creds.mjsruns2.7 KB
templates/
- env.example442 B
Gives 0 of the 12 instructions most secrets credentials skills give in ~1.8k tokens
Counted across 219 of the 226 authors here whose files we hold, read 2026-09-06
- Rotate secrets regularlyin 12 of 219, across 9 files
- Use different secrets per environmentin 10 of 219, across 7 files
- Mask secrets in logsin 10 of 219, across 7 files
- Enable audit loggingin 10 of 219, across 9 files
- Encrypt secrets at restin 9 of 219, across 6 files
- Use short-lived tokens when possiblein 9 of 219, across 6 files
- Rotate exposed credentials immediatelyin 9 of 219, across 6 files
- Use hierarchical numbering for numbered sequencesin 9 of 219
- Identify secret types, owners, and rotation requirementsin 8 of 219, across 5 files
- Choose a secrets backend and access modelin 8 of 219, across 5 files
- Validate rotation and audit loggingin 8 of 219, across 5 files
- Document secret requirementsin 8 of 219, across 5 files
Said here and by no other author read
- Show the disclaimer verbatim before intake
- Read the env template for expected variable names
- Branch .env setup on the file's presence and contents
- Append missing variables with placeholder values only
- Ensure .env is listed in .gitignore
- Detect language and libraries from the dependency manifest
Grouped from the skills themselves: near-identical wordings counted once, and counted by distinct author, so one author publishing three of these counts once. Length counted with cl100k_base; the agent that loads this file may tokenize it differently.