{"_id":"@authyo/n8n-nodes-authyo","_rev":"4-ee43edfb1a06a7d6369fdfc6cf7cc26d","name":"@authyo/n8n-nodes-authyo","dist-tags":{"latest":"0.1.3"},"versions":{"0.1.0":{"name":"@authyo/n8n-nodes-authyo","version":"0.1.0","keywords":["n8n-community-node-package","n8n","authyo","otp","otp-verification","2fa","mfa","passwordless","authentication","sms","whatsapp","email","voice","identity","security"],"author":{"name":"Authyo","email":"support@authyo.io"},"license":"MIT","_id":"@authyo/n8n-nodes-authyo@0.1.0","maintainers":[{"name":"konceptwise","email":"mayur@smsidea.co.in"}],"homepage":"https://authyo.io","bugs":{"url":"https://github.com/authyo/n8n-nodes-authyo/issues"},"n8n":{"nodes":["dist/nodes/Authyo/Authyo.node.js"],"credentials":["dist/credentials/AuthyoApi.credentials.js"],"n8nNodesApiVersion":1},"dist":{"shasum":"b0f14cfbfcfcb299f9a10682be1f9f9a4720f1ff","tarball":"https://registry.npmjs.org/@authyo/n8n-nodes-authyo/-/n8n-nodes-authyo-0.1.0.tgz","fileCount":16,"integrity":"sha512-HIVARFSNOgJ02Wi7xg0DF8NH0DzL+CHWvY/xuDzXGg1YmS3wEnNt/DiS0QN/1XHF33CprVPIIsD7rdBClQVJ/Q==","signatures":[{"sig":"MEUCIAljU1vrdJG71NhaeWspN6Ok8g7t4jGNOyAvakKkZd57AiEAyIYEReka3wQD9sy7qtmcoE9rx/KWjtl9Af7U8UkXyrw=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":35078},"main":"index.js","engines":{"node":">=20.15"},"gitHead":"24a65761d0e7f34f30235e6abbb80bcbf667a5a1","scripts":{"dev":"tsc --watch","lint":"eslint nodes credentials package.json","scan":"npx @n8n/scan-community-package @authyo/n8n-nodes-authyo","build":"npx rimraf dist .tsbuildinfo && tsc && gulp build:icons","format":"prettier nodes credentials --write","lintfix":"eslint nodes credentials package.json --fix","prepublishOnly":"npm run build && npm run lint"},"_npmUser":{"name":"konceptwise","email":"mayur@smsidea.co.in"},"repository":{"url":"git+https://github.com/authyo/n8n-nodes-authyo.git","type":"git"},"_npmVersion":"12.0.1","description":"n8n community node for Authyo - send and verify one-time passcodes (OTP) over SMS, WhatsApp, Voice and Email","directories":{},"_nodeVersion":"24.18.0","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"gulp":"^5.0.0","eslint":"^8.57.0","rimraf":"^5.0.5","prettier":"^3.5.3","typescript":"^5.8.2","n8n-workflow":"*","@typescript-eslint/parser":"~8.32.0","eslint-plugin-n8n-nodes-base":"^1.16.3"},"peerDependencies":{"n8n-workflow":"*"},"_npmOperationalInternal":{"tmp":"tmp/n8n-nodes-authyo_0.1.0_1784721672228_0.31286504484093003","host":"s3://npm-registry-packages-npm-production"}},"0.1.1":{"name":"@authyo/n8n-nodes-authyo","version":"0.1.1","keywords":["n8n-community-node-package","n8n","authyo","otp","otp-verification","2fa","mfa","passwordless","authentication","sms","whatsapp","email","voice","identity","security"],"author":{"name":"Authyo","email":"support@authyo.io"},"license":"MIT","_id":"@authyo/n8n-nodes-authyo@0.1.1","maintainers":[{"name":"konceptwise","email":"mayur@smsidea.co.in"}],"homepage":"https://authyo.io","bugs":{"url":"https://github.com/authyo/authyo-n8n-nodes/issues"},"n8n":{"nodes":["dist/nodes/Authyo/Authyo.node.js"],"credentials":["dist/credentials/AuthyoApi.credentials.js"],"n8nNodesApiVersion":1},"dist":{"shasum":"0a0274c1517702b6313d623f6c1050f8a5d35a08","tarball":"https://registry.npmjs.org/@authyo/n8n-nodes-authyo/-/n8n-nodes-authyo-0.1.1.tgz","fileCount":16,"integrity":"sha512-NbuCCm0YjA6FsITdfL3uiKIn1D9bEAfkqdtByO4ndsldYoihbvyarkzqVisL2kmbjSklu0fsCiHUtBJ8i/rvyw==","signatures":[{"sig":"MEYCIQDLeRQZoH9veh6bVRsgduFLMuel0ahzTGYwWIBtCwp8ngIhAJOyAmRD0aK6Yc1o4v8ZPB31PwpMxQXpNvruR4sa4orF","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@authyo%2fn8n-nodes-authyo@0.1.1","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":35078},"main":"index.js","engines":{"node":">=20.15"},"gitHead":"da10be010292d8962f02f53bb2ea11ecf89b3307","scripts":{"dev":"tsc --watch","lint":"eslint nodes credentials package.json","scan":"npx @n8n/scan-community-package @authyo/n8n-nodes-authyo","build":"npx rimraf dist .tsbuildinfo && tsc && gulp build:icons","format":"prettier nodes credentials --write","lintfix":"eslint nodes credentials package.json --fix","prepublishOnly":"npm run build && npm run lint"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:e922f405-81f2-4d40-94f3-86ba75195ad4"}},"repository":{"url":"git+https://github.com/authyo/authyo-n8n-nodes.git","type":"git"},"_npmVersion":"12.0.1","description":"n8n community node for Authyo - send and verify one-time passcodes (OTP) over SMS, WhatsApp, Voice and Email","directories":{},"_nodeVersion":"22.23.1","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"gulp":"^5.0.0","eslint":"^8.57.0","rimraf":"^5.0.5","prettier":"^3.5.3","typescript":"^5.8.2","n8n-workflow":"*","@typescript-eslint/parser":"~8.32.0","eslint-plugin-n8n-nodes-base":"^1.16.3"},"peerDependencies":{"n8n-workflow":"*"},"_npmOperationalInternal":{"tmp":"tmp/n8n-nodes-authyo_0.1.1_1784725029197_0.12947050833171558","host":"s3://npm-registry-packages-npm-production"}},"0.1.2":{"name":"@authyo/n8n-nodes-authyo","version":"0.1.2","keywords":["n8n-community-node-package","n8n","authyo","otp","otp-verification","2fa","mfa","passwordless","authentication","sms","whatsapp","email","voice","identity","security"],"author":{"name":"Authyo","email":"support@authyo.io"},"license":"MIT","_id":"@authyo/n8n-nodes-authyo@0.1.2","maintainers":[{"name":"konceptwise","email":"mayur@smsidea.co.in"}],"homepage":"https://authyo.io","bugs":{"url":"https://github.com/authyo/authyo-n8n-nodes/issues"},"n8n":{"nodes":["dist/nodes/Authyo/Authyo.node.js"],"credentials":["dist/credentials/AuthyoApi.credentials.js"],"n8nNodesApiVersion":1},"dist":{"shasum":"b84aa35efcfc984501320b9017d8d9a85c831ea7","tarball":"https://registry.npmjs.org/@authyo/n8n-nodes-authyo/-/n8n-nodes-authyo-0.1.2.tgz","fileCount":12,"integrity":"sha512-lpW/skkXAykv+H8lftkdI2GVB2cWtzo3GtssG55cEIk5aa/wKhNF5mYZuUZ/aGqfU0e73aD4YnxKjoB22rqwqQ==","signatures":[{"sig":"MEQCIGAiPAWyeIJRAr7NPURtR/BFmR75f2oi5shdkr9lM3vEAiBQJoF4nnvbR/Cw0RzxFgQ/t0TIfhbRdK/LTGMsnRfKtg==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@authyo%2fn8n-nodes-authyo@0.1.2","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":33215},"main":"index.js","engines":{"node":">=20.15"},"gitHead":"45e6d869c61bf6d8ed15705d9f920fb09cd10f98","scripts":{"dev":"tsc --watch","lint":"eslint nodes credentials package.json","scan":"npx @n8n/scan-community-package @authyo/n8n-nodes-authyo","build":"npx rimraf dist .tsbuildinfo && tsc && gulp build:icons","format":"prettier nodes credentials --write","lintfix":"eslint nodes credentials package.json --fix","prepublishOnly":"npm run build && npm run lint"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:e922f405-81f2-4d40-94f3-86ba75195ad4"}},"repository":{"url":"git+https://github.com/authyo/authyo-n8n-nodes.git","type":"git"},"_npmVersion":"12.0.1","description":"n8n community node for Authyo - send and verify one-time passcodes (OTP) over SMS, WhatsApp, Voice and Email","directories":{},"_nodeVersion":"22.23.1","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"gulp":"^5.0.0","eslint":"^8.57.0","rimraf":"^5.0.5","prettier":"^3.5.3","typescript":"^5.8.2","n8n-workflow":"*","@typescript-eslint/parser":"~8.32.0","eslint-plugin-n8n-nodes-base":"^1.16.3"},"peerDependencies":{"n8n-workflow":"*"},"_npmOperationalInternal":{"tmp":"tmp/n8n-nodes-authyo_0.1.2_1784870176435_0.04306548741190075","host":"s3://npm-registry-packages-npm-production"}},"0.1.3":{"name":"@authyo/n8n-nodes-authyo","version":"0.1.3","description":"n8n community node for Authyo - send and verify one-time passcodes (OTP) over SMS, WhatsApp, Voice and Email","keywords":["n8n-community-node-package","n8n","authyo","otp","otp-verification","2fa","mfa","passwordless","authentication","sms","whatsapp","email","voice","identity","security"],"license":"MIT","homepage":"https://authyo.io","author":{"name":"Authyo","email":"support@authyo.io"},"repository":{"type":"git","url":"git+https://github.com/authyo/authyo-n8n-nodes.git"},"bugs":{"url":"https://github.com/authyo/authyo-n8n-nodes/issues"},"engines":{"node":">=20.15"},"main":"index.js","scripts":{"build":"npx rimraf dist .tsbuildinfo && tsc && gulp build:icons","dev":"tsc --watch","format":"prettier nodes credentials --write","lint":"eslint nodes credentials package.json","lintfix":"eslint nodes credentials package.json --fix","scan":"npx @n8n/scan-community-package @authyo/n8n-nodes-authyo","prepublishOnly":"npm run build && npm run lint"},"publishConfig":{"access":"public"},"n8n":{"n8nNodesApiVersion":1,"credentials":["dist/credentials/AuthyoApi.credentials.js"],"nodes":["dist/nodes/Authyo/Authyo.node.js"]},"devDependencies":{"@typescript-eslint/parser":"~8.32.0","eslint":"^8.57.0","eslint-plugin-n8n-nodes-base":"^1.16.3","gulp":"^5.0.0","n8n-workflow":"*","prettier":"^3.5.3","rimraf":"^5.0.5","typescript":"^5.8.2"},"peerDependencies":{"n8n-workflow":"*"},"gitHead":"9da172e91c48b1214d695bb72e4d53844e8bf0b1","_id":"@authyo/n8n-nodes-authyo@0.1.3","_nodeVersion":"22.23.1","_npmVersion":"12.0.1","dist":{"integrity":"sha512-BABniH7qrLAB+WPpkhnU9jgDP4WSq2lfYJyNVfArHxgiTSbD67Bmged6qV1FPOj0cGExOexxtpgfVOMTs6jt5Q==","shasum":"40eb20172b4790c5e21c97fb0a289813ae229a16","tarball":"https://registry.npmjs.org/@authyo/n8n-nodes-authyo/-/n8n-nodes-authyo-0.1.3.tgz","fileCount":13,"unpackedSize":35267,"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@authyo%2fn8n-nodes-authyo@0.1.3","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"signatures":[{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEUCIQClSILOfJscS5/nuK0HqyLvLK4IPAGwdaCdS1B/k2RGNwIgTRkjat/ZhtwedQicf6BiPZEYPXsxaxcAfYTDLuJc+Rg="}]},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:e922f405-81f2-4d40-94f3-86ba75195ad4"}},"directories":{},"maintainers":[{"name":"konceptwise","email":"mayur@smsidea.co.in"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/n8n-nodes-authyo_0.1.3_1784871100587_0.3324753711280075"},"_hasShrinkwrap":false}},"time":{"created":"2026-07-22T12:01:11.987Z","modified":"2026-07-24T05:31:41.103Z","0.1.0":"2026-07-22T12:01:12.387Z","0.1.1":"2026-07-22T12:57:09.362Z","0.1.2":"2026-07-24T05:16:16.597Z","0.1.3":"2026-07-24T05:31:40.748Z"},"bugs":{"url":"https://github.com/authyo/authyo-n8n-nodes/issues"},"author":{"name":"Authyo","email":"support@authyo.io"},"license":"MIT","homepage":"https://authyo.io","keywords":["n8n-community-node-package","n8n","authyo","otp","otp-verification","2fa","mfa","passwordless","authentication","sms","whatsapp","email","voice","identity","security"],"repository":{"type":"git","url":"git+https://github.com/authyo/authyo-n8n-nodes.git"},"description":"n8n community node for Authyo - send and verify one-time passcodes (OTP) over SMS, WhatsApp, Voice and Email","maintainers":[{"name":"konceptwise","email":"mayur@smsidea.co.in"}],"readme":"# @authyo/n8n-nodes-authyo\n\nAn [n8n](https://n8n.io) community node for [Authyo](https://authyo.io) — send and verify one-time passcodes (OTP) over **SMS, WhatsApp, Voice, and Email**, and manage the sessions they produce.\n\n[Installation](#installation) · [Credentials](#credentials) · [Operations](#operations) · [Usage](#usage) · [Resources](#resources)\n\n## Installation\n\n**n8n UI (self-hosted):** Settings → Community Nodes → Install → `@authyo/n8n-nodes-authyo`\n\n**Manual:**\n\n```bash\ncd ~/.n8n/custom\nnpm install @authyo/n8n-nodes-authyo\n```\n\nRestart n8n. \"Authyo\" then appears in the node panel.\n\n## Credentials\n\nYou need an Authyo application's **App Key** and **App Secret**, both found in the [Authyo dashboard](https://app.authyo.io) under your application's settings.\n\nIn n8n, create an **Authyo API** credential and paste them in. Press **Test** — this validates the pair against `/auth/authentication` without sending an OTP or spending credit.\n\n> **Authorized Endpoint must be blank.** If your Authyo application has an Authorized Endpoint (URL allow-list) configured, calls from n8n are rejected with `Invalid endpoint`. n8n is a server-to-server caller and sends no `Origin`/`Referer` header. Either leave Authorized Endpoint blank, or add your n8n instance's egress IPs to the allow-list.\n\n## Operations\n\n### OTP\n\n| Operation | Description |\n|---|---|\n| **Send** | Deliver a passcode to a phone number or email. Returns a **mask ID** identifying the OTP session. |\n| **Verify** | Check the code the user entered against its mask ID. Returns a session JWT on success. |\n\n**Send** supports an explicit channel (`SMS`, `WhatsApp`, `Voice`, `Email`) or *Application Default*, which uses the channel priority and fallback configured on the application. Optional: OTP length, expiry in seconds (60 second minimum), or supplying your own code.\n\n### Session\n\n| Operation | Description |\n|---|---|\n| **Verify Token** | Check whether a session JWT is still valid. |\n| **Revoke** | Invalidate a session token, logging the user out. |\n\n### Application\n\n| Operation | Description |\n|---|---|\n| **Get Configuration** | Fetch the customization settings for the connected application. |\n\n## Usage\n\n### Where the mask ID lives\n\nSend OTP returns the mask ID nested inside an array:\n\n```\n{{ $json.data.results[0].maskId }}\n```\n\nVerify OTP needs that exact value. The session JWT that Verify returns is at `data.token`, **not** at the top level.\n\n### The maskId problem — and the clean way to solve it\n\nSend and Verify are two separate events, separated by a human typing a code. The mask ID has to survive that gap.\n\nThe cleanest solution keeps everything inside **one workflow execution**, so the mask ID never has to be stored anywhere:\n\n```\nForm Trigger            (page 1 — collect email or phone)\n  └─ Send OTP           (Authyo node, renamed \"Send OTP\")\n       └─ Form          (page 2 — asks the user for the code)\n            └─ Verify OTP   (Authyo node — maskId still in scope)\n                 └─ IF  {{ $json.success }}\n                      ├─ true  → Form Ending / your action\n                      └─ false → back to the Form page to re-prompt\n```\n\nThe **Form** node continues a multi-page form on the same execution, so a previous node's output stays reachable:\n\n```\n{{ $('Send OTP').first().json.data.results[0].maskId }}\n```\n\n> **The node name in that expression must match the node's actual name on the canvas.** The diagram above assumes the first Authyo node was renamed to `Send OTP`. If you leave the default names, they will be `Authyo` and `Authyo1`, and the expression becomes `$('Authyo').first()...`. Use `.first()` rather than `.item` — after a pause, `.item` has no paired input item to resolve against.\n\n**Alternative — the Wait node.** If your workflow does not begin with a Form Trigger, use a **Wait** node with resume mode *On Form Submitted* instead of the Form node. It also pauses the same execution, so the same expression works. Two things to set:\n\n- Enable **Limit Wait Time** and set it slightly *beyond* your OTP expiry, so an abandoned run does not sit forever.\n- The Wait node has a single output — there is no separate timeout branch. Put an **IF** after it if you need to distinguish \"resumed\" from \"timed out\".\n\nWhile building either version, use the **Test URL** and click *Execute workflow*. The Production URL only serves an active workflow and gives you no execution log to debug against.\n\n**Across separate workflows.** If you send from one workflow and verify from another (e.g. a webhook your own front-end calls), no execution is shared, so you must persist the mask ID yourself — keyed by phone or email in Postgres/Redis — or return it to the front-end and have it send the value back on verify.\n\n### Error handling\n\nAuthyo answers **HTTP 200 even on failure**, signalling the real outcome via `success: false` in the body. n8n keys off the status code, so this node inspects the body and raises a proper n8n error — invalid credentials, a blocked account, or a rate limit will fail the node rather than silently continuing down the success branch.\n\n**One case is deliberately not an error: a wrong or expired code.** That is the expected outcome of Verify, not a broken workflow, so it is passed through as normal data with `success: false`. Branch on it with an IF node:\n\n```\n{{ $json.success }}     → true: verified   false: wrong or expired code\n{{ $json.message }}     → e.g. \"Invalid OTP\", \"OTP has expired\"\n```\n\nThis means you do **not** need Continue-On-Fail to handle a mistyped code — and you should not enable it, because it would also swallow genuine credential and rate-limit errors, which are the ones you want to hear about.\n\n### Response fields worth knowing\n\n| What | Where |\n|---|---|\n| Mask ID | `data.results[0].maskId` |\n| Session JWT | `data.token` — **not** at the top level |\n| Channel actually used | `data.results[0].authType` |\n| Cost of the send | `data.results[0].charge` / `.currency` |\n| Throttle backoff | `retryAfterSeconds`, when present |\n\n## Resources\n\n- [Authyo documentation](https://authyo.io/docs)\n- [Official JavaScript SDK — `@authyo/auth-js`](https://www.npmjs.com/package/@authyo/auth-js)\n- [n8n community nodes documentation](https://docs.n8n.io/integrations/community-nodes/)\n\n## License\n\n[MIT](LICENSE)\n","readmeFilename":"README.md"}