Payment Gateway · Beta
NMI
API integration
Ship Payment Gateway features without building the integration. Full NMI API access via Proxy and 60+ MCP-ready tools for AI agents — extend models and mappings to fit your product.
Built for specific customer use cases. Issues are resolved quickly.
Talk to usUse Cases
Why integrate with NMI
Common scenarios for SaaS companies building NMI integrations for their customers.
Embed native payment acceptance in your SaaS
Let your users charge their customers directly inside your product using saved cards, one-time sales, or authorization holds — without your platform ever touching raw card data or entering PCI scope.
Automate merchant onboarding for PayFac and ISV models
If you're acting as a payment facilitator or ISO, programmatically board sub-merchants by submitting applications, uploading KYC documents, and capturing legal consent so new users can start accepting payments the same day they sign up.
Power recurring billing for subscription businesses
Vertical SaaS platforms (gyms, memberships, SaaS-for-SaaS) can map their internal pricing tiers to NMI plans and subscriptions so end-user merchants can bill their own customers on a recurring schedule with zero manual work.
Sync invoicing and A/R workflows
Field service, professional services, and B2B platforms can generate invoices from work orders, email them to end customers via NMI, and reconcile paid status back into their own ledger through webhooks.
Support delayed-capture and cancellation flows for B2B commerce
ERPs and order management systems can authorize funds when an order is placed and only capture on shipment — or void the hold if the order is canceled — so your users' cash flow and accounting stay accurate automatically.
What You Can Build
Ship these features with Truto + NMI
Concrete product features your team can ship faster by leveraging Truto’s NMI integration instead of building from scratch.
Card-on-file charging with the NMI Customer Vault
Create and manage customer records, billing addresses, and shipping addresses in NMI so your users can charge saved payment methods with a single click from your UI.
Auth, capture, void, and refund controls in-app
Expose a full transaction lifecycle — sale, auth, capture, void, refund, credit, and validate — inside your dashboard so merchants never leave your product to manage payments.
Programmatic merchant application and underwriting flow
Build a native onboarding wizard that constructs an NMI application, uploads supporting documents, presents legal consent, and submits to underwriting — all inside your signup experience.
Subscription and plan management UI
Let merchants create plans, start and cancel subscriptions, and update billing details for their own customers directly from your interface, backed by NMI's recurring billing engine.
Invoice generation and delivery
Create invoices, send them to end customers via NMI's email delivery, and close them out when paid — perfect for field service, healthcare, and B2B workflows.
Event-driven payment sync via webhooks
Register webhook subscriptions programmatically so your platform reacts in real time to successful sales, failed recurring charges, invoice payments, and application status changes.
SuperAI
NMI AI agent tools
Comprehensive AI agent toolset with fine-grained control. Integrates with MCP clients like Cursor and Claude, or frameworks like LangChain.
nmi_payments_sale
Process a sale transaction in NMI — an authorization and capture in a single step. Pay with raw card details, an ACH bank account, a Collect.js payment_token, or a stored customer via customer_vault_id. Amounts are decimal strings (e.g. 10.00). Returns the transaction result including id, status, response (1 approved / 2 declined / 3 error), auth_code and response_text. Required: amount and a payment_details variant.
nmi_payments_auth
Process an authorization for a payment in NMI, to be used in conjunction with the capture endpoint to prepare the payment for settlement. Returns: transaction_id, condition, transaction_type, requested_amount, currency, authorization_code.
nmi_payments_credit
Process a credit in NMI without a prior payment, crediting funds directly to the customer's payment method. Returns: merchant, features, transaction_id, transaction_type, condition, processor_id, ponumber, order_description, order_id, customerid, customertaxid, website, shipping, currency, tax, surcharge, convenience_fee, misc_fee, misc_fee_name, cash_discount, tip, requested_amount,…
nmi_payments_validate
Validate a payment method in NMI without processing a payment. Returns the validation result including transaction_id, transaction_type, condition, response_code, and response_text.
nmi_payments_capture
Capture a previously authorized payment in NMI. Returns the transaction object including transaction_id, condition, currency, requested_amount, and an action block with amount, action_type, success, response_code, and response_text. Required: payment_id.
nmi_payments_void
Void an unsettled NMI payment. Returns the transaction object including transaction_id, condition, transaction_type, requested_amount, currency, card, and action. Required: payment_id. Only payments that have not yet been settled can be voided; send an empty JSON body when no void_reason applies.
nmi_payments_refund
Refund a previously settled NMI payment back to the customer's payment method. Returns: transaction_id, condition, amount. Required: payment_id. Only settled transactions can be refunded.
get_single_nmi_payment_by_id
Get a specific NMI payment by payment ID. Returns: transaction_id, transaction_type, condition, currency, requested_amount, billing_address, card, and action details. Required: id.
create_a_nmi_invoice
Create a new invoice in NMI and email it to the customer. Returns the created invoice object including its id. A JSON request body is required.
list_all_nmi_invoices
List all invoices for the merchant in NMI with optional filtering. Returns a collection of invoices including id, created_at, and updated_at for each record. Supports pagination.
get_single_nmi_invoice_by_id
Get a specific NMI invoice by id. Returns the invoice object including its id and currency. Required: id.
update_a_nmi_invoice_by_id
Update an existing NMI invoice by id. All variables besides currency may be updated; updating does not resend the invoice to the customer. Returns: id, currency, created_at, updated_at. Required: id.
nmi_invoices_close
Close an existing NMI invoice by invoice_id. Once closed, the invoice cannot be modified or paid. Returns: id, currency, created_at, updated_at. Required: invoice_id.
nmi_invoices_send
Email an existing NMI invoice to the customer. Takes no request body — send an empty JSON object. The invoice is addressed via the invoice_id parameter, and the email goes to the address on the invoice's billing contact. Returns the Invoice object. Required: invoice_id.
create_a_nmi_subscription
Create a recurring subscription in NMI. Attach the subscription to an existing plan via plan_id, or define the schedule inline with a plan object (amount plus day_frequency, or month_frequency with day_of_month). Pay with a stored customer (customer_vault_id in payment_details), raw card, ACH or payment_token. Returns the created Subscription including subscription_id and next_charge_date. Required: a plan reference and a payment_details variant.
list_all_nmi_subscriptions
List all NMI webhook subscriptions. Returns: id, callback_url, status, events, created_at, updated_at. Max 100 per page.
get_single_nmi_subscription_by_id
Get a specific webhook subscription in NMI by id. Returns the subscription object including its id, callback_url, status, events, created_at, and updated_at. Required: id.
update_a_nmi_subscription_by_id
Update an existing NMI subscription by id, modifying the subscribed events list or callback URL. Returns the updated subscription object including id, callback_url, events, status, created_at, and updated_at. Required: id.
delete_a_nmi_subscription_by_id
Delete an NMI subscription by id. The customer will no longer be charged. Returns: code, message. Required: id.
create_a_nmi_plan
Create a new recurring payment plan in NMI. Plans define recurring billing schedules that subscriptions can be associated with. Returns: id, name, amount, day_frequency, payments, month_frequency, day_of_month. Required: id, name, amount.
list_all_nmi_plans
List all recurring payment plans in NMI. Returns each plan's id, name, amount, day_frequency, payments, month_frequency, and day_of_month. Max 100 per page.
get_single_nmi_plan_by_id
Get a specific NMI recurring payment plan by id. Returns: id, name, amount, day_frequency, payments, month_frequency, day_of_month. Required: id.
update_a_nmi_plan_by_id
Update an existing NMI recurring payment plan. Returns the updated plan including id, name, amount, day_frequency, month_frequency, day_of_month, and payments. Required: id. Exercise caution — all customers subscribed to this plan will have their billing changed based on your edits.
delete_a_nmi_plan_by_id
Delete an NMI recurring payment plan by id. Returns an empty 204 response on success. Required: id.
create_a_nmi_customer
Create a customer in the NMI Customer Vault with one or more billing addresses and stored payment methods (card, ACH or Collect.js payment_token). Returns the created Customer including the vault id used for later charges. Required: billing (with payment_details).
list_all_nmi_customers
List customers stored in the NMI Customer Vault. Filter by customer vault id (exact or partial), name, company, email, billing or shipping address id, payment account number, creation date range, or expiring cards. Returns Customer objects with their billing and shipping addresses.
get_single_nmi_customer_by_id
Get a single NMI customer from the Customer Vault by id. Returns the customer record including its customer vault id, billing addresses, and associated payment method details. Required: id.
update_a_nmi_customer_by_id
Update an existing NMI customer in the customer vault, including bulk updates of billing and shipping addresses. Returns: customer_vault_id, billing, shipping. Required: id. All provided billing and shipping addresses will be updated.
delete_a_nmi_customer_by_id
Delete a customer from the NMI customer vault by id. This removes the customer and all associated billing and shipping addresses. Returns an empty 204 response on success. Required: id.
create_a_nmi_billing_address
Add a new billing address to an existing NMI customer vault record. Returns the customer object including the billing address with first_name, last_name, address_1, city, state, postal_code, and country. Required: customer_id.
get_single_nmi_billing_address_by_id
Retrieve a specific billing address for an NMI customer vault customer. Returns: id, first_name, last_name, address_1, address_2, company, city, state, postal_code, country, email, phone, cell_phone, fax. Required: customer_id, id.
update_a_nmi_billing_address_by_id
Update an existing billing address for an NMI customer. Returns the updated billing address including first_name, last_name, address_1, city, state, postal_code, country, email, and phone. Required: customer_id, id.
delete_a_nmi_billing_address_by_id
Delete a billing address from an NMI customer. The customer must retain at least one billing address after deletion. Returns an empty 204 response on success. Required: customer_id, id.
create_a_nmi_shipping_address
Add a shipping address to an existing NMI Customer Vault customer. All address fields are optional strings. Returns the created shipping address including its id. Required: customer_id.
get_single_nmi_shipping_address_by_id
Get a specific NMI customer shipping address by id. Returns: id, first_name, last_name, address_1, address_2, company, city, state, postal_code, country, email, phone, fax. Required: customer_id, id.
update_a_nmi_shipping_address_by_id
Update an existing shipping address for an NMI customer. Returns the updated shipping address object including its id. Required: customer_id, id.
delete_a_nmi_shipping_address_by_id
Delete a shipping address from an NMI customer. Returns an empty 204 response on success. Required: customer_id, id.
create_a_nmi_product
Create a product in the NMI product catalog, identified by a unique SKU, with cost, currency, optional category, tax/discount amounts and an optional base64 image. Returns the created Product. Required: product_sku, product_description, product_cost, product_currency.
list_all_nmi_products
List all products in NMI's Product Manager. Returns a list of product records including id, created_at, and updated_at.
get_single_nmi_product_by_id
Get a single NMI product by id (SKU) from the Product Manager. Returns: id. Required: id.
update_a_nmi_product_by_id
Update an existing product in the NMI Product Manager by id. Products can be used in invoices and other payment flows. Returns the updated product object. Required: id.
delete_a_nmi_product_by_id
Delete an NMI product from the Product Manager by id. Returns an empty 204 response on success. Required: id.
create_a_nmi_embedded_component_session
Create a short-lived session token for NMI embedded components that can be used to authenticate and fetch data. Returns: session_token, expires_at. The optional body accepts either gateway credentials (api_key, merchant_id) or merchant-central credentials (api_key, tenant_id, merchant_id).
list_all_nmi_affiliates
List sub-affiliate accounts under your NMI partner account. Returns: objectType, id, firstName, lastName, company, email, replyToEmail, phone, fax, url, address1, address2, city, state, zip, country, timezone, features, status, created, updated, parentAffiliateId, support, branding, accountInfo, billTo, rejectedCertificates.
create_a_nmi_merchant
Create a merchant account under your NMI partner account (v4 partner API). Field names are camelCase. Requires company and primary contact details, address, timezone, language, a username for the merchant's primary user, and accountInfo with the bank account used to bill the merchant. Returns the created Merchant object. Required: type, company, country, address1, city, state, zip, timezone, firstName, lastName, email, phone, language, username, accountInfo.
list_all_nmi_merchants
List all merchant accounts under your NMI partner account. Returns merchant records including id, company, email, status, type, created, and updated. The type filter accepts only gateway, test, splitFunding, or mobile.
get_single_nmi_merchant_by_id
Get all details of a specific NMI merchant account by id. Returns: objectType, id, type, created, updated, firstName, lastName, company, email, phone, fax, url, address1, address2, city, state, zip, country, timezone, costPlan, status, externalIdentifier, lastTransactionDate, parentAffiliateId, accountInfo, features, needsPendingServicesActivated, payFacBillingPeriod, rejectedCertificates.…
update_a_nmi_merchant_by_id
Update an NMI merchant by id — this PATCH endpoint supports three operations: assign a fee schedule, complete & send the welcome email, or agree to TOS and fees. Returns: objectType, id, type, created, updated, firstName, lastName, company, email, phone, fax, url, address1, address2, city, state, zip, country, timezone, costPlan, status, externalIdentifier, lastTransactionDate, parentAffiliateId,…
nmi_fee_schedules_get_fees
List all fees currently set on an existing NMI fee schedule. Returns each fee's objectType, feeType, name, sort, description, processor details, billMe flag, value, and applyTo targets. Required: fee_schedule_id.
list_all_nmi_fee_schedules
Search all fee schedules available on your NMI account. Returns a list of fee schedule records including id, name, costPlan, currency, merchants, affiliates, isDefault, and isCustom. Required: maxResults (1-1000). Optionally filter by parentAffiliateId to narrow results to a specific affiliate's fee schedules.
create_a_nmi_ctv_onboarding
Add (or upgrade) Customer Token Vault to an NMI gateway account. Returns per-network onboarding results including requestStatus, requestStatusCode, onboardStatus, and onboardId for each card network. Required: merchantId, applications. If upgrading from Customer Vault to Customer Token Vault, the old vault extension does not need to be disabled first.
nmi_signup_auth_get_token
Request an OAuth access token from NMI using the client_credentials grant. Returns: access_token, token_type, expires_in. Required: grant_type, client_id, client_secret. The token is valid for 60 minutes.
list_all_nmi_packages
List all available application packages in NMI. Returns: id, name, description.
get_single_nmi_package_by_id
Get a single NMI application package by id, including the full package rules, field definitions, and collections required for creating an application. Returns: id, name, description, package_rules, fields, collections. Required: id.
list_all_nmi_applications
List NMI merchant applications with optional filtering by status, date range, package, and sort direction. Returns: id, package_id, status, created_at, updated_at.
create_a_nmi_application
Create a new NMI merchant application with a package, fields, and collections. Returns the full application object including id, package_id, status, fields, collections, created_at, and updated_at. Required: package_id.
get_single_nmi_application_by_id
Get a single NMI merchant application by id. Returns the full application object including id, package_id, status, fields, collections, created_at, and updated_at. Required: id.
update_a_nmi_application_by_id
Partially update an NMI merchant application by id with fields and collections. An application can only be updated when it is in draft status. Returns the full application object including id, package_id, status, fields, collections, created_at, and updated_at. Required: id.
nmi_applications_submit
Submit an NMI merchant application for underwriting review. Returns the full application object including id, package_id, status, fields, collections, created_at, and updated_at. Required: application.
nmi_applications_upload_document
Upload a supporting document to an NMI merchant application. Returns the uploaded document object including its id, type, and created_at. Required: application, type, file. Documents can only be uploaded while the application is in draft or underwriter_requested_information status; accepted file formats are PNG, JPG, JPEG, and PDF with a max size of 20 MB.
nmi_applications_get_legal_consent
Get the legal consent URL for an NMI merchant application. The returned url is used with the Embed Helper to embed the legal consent widget so the applicant can review and accept the legal terms. Required: application (the application ID, e.g. app_341c7b5b432a3158).
nmi_applications_download_agreement
Download the signed agreement PDF for an NMI application. Returns the agreement as a binary PDF file (application/octet-stream, max 100 MB). The agreement can only be downloaded after the application has been submitted. Required: application.
nmi_applications_update_info
Add additional information to an NMI application that is in the underwriter_requested_information status. Returns: code, message. Required: application, note.
list_all_nmi_webhook_subscriptions
List all NMI webhook subscriptions. Returns: id, callback_url, status, events, created_at, updated_at.
create_a_nmi_webhook_subscription
Create a new NMI webhook subscription with a callback URL, signing secret, and list of events. Returns the created subscription including id, callback_url, events, status, created_at, and updated_at. Required: callback_url, secret, events.
get_single_nmi_webhook_subscription_by_id
Get a single NMI webhook subscription by id. Returns: id, callback_url, status, events, created_at, updated_at. Required: id.
update_a_nmi_webhook_subscription_by_id
Update an NMI webhook subscription's subscribed events list or callback URL. Returns the updated subscription object including id, callback_url, events, status, and created_at. Required: id.
delete_a_nmi_webhook_subscription_by_id
Delete an NMI webhook subscription by id. Returns: code, message. Required: id.
Why Truto
Why use Truto’s MCP server for NMI
Other MCP servers give you a static tool list for one app. Truto gives you a managed, multi-tenant MCP infrastructure across 650+ integrations.
Auto-generated, always up to date
Tools are dynamically generated from curated documentation — not hand-coded. As integrations evolve, tools stay current without manual maintenance.
Fine-grained access control
Scope each MCP server to read-only, write-only, specific methods, or tagged tool groups. Expose only what your AI agent needs — nothing more.
Multi-tenant by design
Each MCP server is scoped to a single connected account with its own credentials. The URL itself is the auth token — no shared secrets, no credential leaking across tenants.
Works with every MCP client
Standard JSON-RPC 2.0 protocol. Paste the URL into Claude, ChatGPT, Cursor, or any MCP-compatible agent framework — tools are discovered automatically.
Built-in auth, rate limits, and error handling
Tool calls execute through Truto’s proxy layer with automatic OAuth refresh, rate-limit handling, and normalized error responses. No raw API plumbing in your agent.
Expiring and auditable servers
Create time-limited MCP servers for contractors or automated workflows. Optional dual-auth requires both the URL and a Truto API token for high-security environments.
How It Works
From zero to integrated
Go live with NMI in under an hour. No boilerplate, no maintenance burden.
Link your customer’s NMI account
Use Truto’s frontend SDK to connect your customer’s NMI account. We handle all OAuth and API key flows — you don’t need to create the OAuth app.
We handle authentication
Don’t spend time refreshing access tokens or figuring out secure storage. We handle it and inject credentials into every API request.
Call our API, we call NMI
Truto’s Proxy API is a 1-to-1 mapping of the NMI API. You call us, we call NMI, and pass the response back in the same cycle.
Unified response format
Every response follows a single format across all integrations. We translate NMI’s pagination into unified cursor-based pagination. Data is always in the result attribute.
FAQs
Common questions about NMI on Truto
Authentication, rate limits, data freshness, and everything else you need to know before you integrate.
How does authentication work with NMI through Truto?
NMI uses API key–based authentication (security keys issued per merchant account or partner). Truto handles credential storage and injection so your end users connect their NMI account once and your platform can call the API on their behalf without you managing secrets.
Do we need to be PCI compliant to charge cards through NMI?
No. NMI's tokenization (Collect.js) and Customer Vault let you exchange raw card data for tokens on the client side, and Truto's API calls only pass tokens or vault IDs. Your servers never see PAN data, keeping you out of PCI scope.
Can we onboard merchants (PayFac / ISO model) programmatically?
Yes. The integration supports the full boarding flow: creating an application, uploading documents, retrieving legal consent, submitting to underwriting, and downloading signed agreements — so you can board sub-merchants without leaving your product.
What payment operations are supported?
Sale, auth, capture, void, refund, credit, and validate are all available, plus fetching a single transaction by ID. This covers both single-step (immediate charge) and dual-step (auth-then-capture) flows.
How do we get real-time updates on payments and subscriptions?
You can create, list, update, and delete NMI webhook subscriptions through the integration. Register endpoints to receive events for transaction outcomes, subscription lifecycle changes, invoice payments, and application status updates.
Can a single integration support multiple merchants under our platform?
Yes. NMI is built for partner hierarchies — you can list affiliates, create and manage merchants, view fee schedules, and manage packages, which lets your SaaS scale to many end-user merchants under one integration.
From the Blog
NMI integration guides
Deep dives, architecture guides, and practical tutorials for building NMI integrations.
NMI
Get NMI integrated into your app
Our team understands what it takes to make a NMI integration successful. A short, crisp 30 minute call with folks who understand the problem.