Connect Plastiq to ChatGPT: Manage Payers, Billers, and Payments
Learn how to connect Plastiq to ChatGPT using a managed MCP server. This guide covers architecture, tool generation, rate limits, and real-world workflows.
If you need your AI agents to initiate vendor payments, manage biller profiles, or orchestrate complex B2B payment intents, you must connect Plastiq to ChatGPT. Giving a Large Language Model (LLM) the ability to execute real financial operations requires a secure, tightly controlled translation layer between the model's tool calling capabilities and Plastiq's REST APIs. If your team uses Claude, check out our guide on connecting Plastiq to Claude or explore our broader architectural overview on connecting Plastiq to AI Agents.
You can either spend engineering cycles building, hosting, and maintaining a custom Model Context Protocol (MCP) server, or you can use a managed integration infrastructure. This guide explains exactly how to generate an authenticated MCP server for Plastiq using Truto, connect it natively to ChatGPT, and execute strict payment workflows using natural language.
The Engineering Reality of the Plastiq API
Building a custom MCP server is an exercise in infrastructure maintenance. You are not just building a basic proxy - you are translating the exact quirks, validation rules, and nested data structures of the Plastiq API into flat JSON schemas that an LLM can understand. When you expose Plastiq to ChatGPT, you have to account for several domain-specific API patterns.
The Two-Step Payment Intent Dance
Plastiq enforces strict financial control flows. You cannot simply hit a generic "pay vendor" endpoint. The API requires a two-step orchestration. First, you must draft a Payment Intent (create_a_plastiq_payment_intent), which requires assembling a valid paymentMethod, a verified recipient, and a payer. The intent validates the underlying funding source and calculates fees. Only after the intent is successfully staged and free of blocking warnings can you execute the actual payment (create_a_plastiq_payment). If your custom server does not expose these as distinct, sequential tools, the LLM will hallucinate the transaction state.
Nested Biller Search Pagination
When querying the Plastiq network for existing vendors, the list_all_plastiq_billers endpoint does not return a flat array of companies. It returns a list of biller groups, and each group contains a nested billers array with individual entity records. Standard CRUD mappers fail here. You must explicitly teach the LLM how to parse the groupId and extract the underlying categoryId and businessAddress fields from the nested array.
Polymorphic Recipient Schemas
Creating a recipient requires exact polymorphic payloads based on the payout method. An ACH recipient requires different banking details than a Wire or Check recipient. All of these fall under the receivingMethod object. If the LLM sends an incomplete payload, the API rejects it. Maintaining the JSON Schema documentation for these polymorphic endpoints inside a custom MCP server is a massive headache when Plastiq updates their validation rules.
Strict Rate Limiting and 429s
Financial APIs aggressively throttle traffic to prevent abuse. Truto does not retry, throttle, or apply backoff on rate limit errors. When the upstream Plastiq API returns an HTTP 429 Too Many Requests, Truto passes that error directly back to the caller. Truto normalizes the upstream rate limit information into standardized headers (ratelimit-limit, ratelimit-remaining, ratelimit-reset) following the IETF specification. Your AI agent framework or custom client is entirely responsible for reading these headers and implementing exponential backoff. Do not assume the integration layer will absorb rate limit spikes.
Creating the Plastiq MCP Server
Truto dynamically generates MCP tools based on Plastiq's API documentation and your environment's integration configuration. Every tool is derived from a documentation record, acting as a quality gate - if an endpoint lacks a schema description, it is not exposed to the LLM.
You can create a secure MCP server URL for a connected Plastiq account using either the Truto UI or the API.
Method 1: Via the Truto UI
- Log into your Truto dashboard and navigate to the Integrated Accounts page.
- Select your connected Plastiq account.
- Click the MCP Servers tab.
- Click Create MCP Server.
- Configure your server constraints (e.g., allow only
readmethods, or specify an expiration date). - Copy the generated MCP server URL (e.g.,
https://api.truto.one/mcp/your-secure-token).
Method 2: Via the Truto API
You can programmatically provision an MCP server. This is useful if you are building an application that spins up agentic environments on demand. The API validates the configuration, generates a secure hex string, hashes it using an internal HMAC signing key, and stores it in edge KV storage for fast validation.
curl -X POST https://api.truto.one/integrated-account/{plastiq_account_id}/mcp \
-H "Authorization: Bearer YOUR_TRUTO_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"name": "Plastiq Payment Agent",
"config": {
"methods": ["read", "write"],
"require_api_token_auth": false
}
}'The response will contain the unique URL the LLM needs to interact with the API:
{
"id": "mcp_abc123",
"name": "Plastiq Payment Agent",
"url": "https://api.truto.one/mcp/a1b2c3d4e5f67890"
}Connecting Plastiq to ChatGPT
Once you have the URL, connecting it to ChatGPT takes seconds. You do not need to deal with OAuth flows or authorization headers in the client - the token embedded in the URL inherently scopes requests to the specific integrated Plastiq account.
Method A: Via the ChatGPT UI
- Open ChatGPT and go to Settings.
- Select Apps and click Advanced settings.
- Toggle on Developer mode (MCP support requires this).
- Under MCP servers / Custom connectors, click Add new server.
- Name the connector "Plastiq B2B Payments".
- Paste your Truto MCP URL into the Server URL field and click Save.
ChatGPT will immediately ping the /initialize and tools/list JSON-RPC endpoints to discover the available Plastiq tools.
Method B: Via Manual Config File (SSE Transport)
If you are using a custom desktop client, the ChatGPT MacOS app, or Claude Desktop, you can connect using a standard JSON configuration file. Use the @modelcontextprotocol/server-sse package to proxy the Server-Sent Events stream.
Add this to your MCP configuration JSON file:
{
"mcpServers": {
"plastiq_payments": {
"command": "npx",
"args": [
"-y",
"@modelcontextprotocol/server-sse",
"https://api.truto.one/mcp/a1b2c3d4e5f67890"
]
}
}
}Plastiq Hero Tools for AI Agents
Truto automatically generates descriptive snake_case tool names and flat JSON schemas for query and body parameters. Here are the highest-leverage Plastiq operations you can execute via ChatGPT.
create_a_plastiq_payment_intent
This tool is the core of the Plastiq integration. It stages a payment for execution. The LLM must supply a valid paymentMethod, a recipient, and a payer. Truto maps these nested objects into the proxy payload. The API returns the staged intent, including calculated fees, the estimated delivery date, and critical warnings or statusReasons that the LLM must review before execution.
"Draft a new payment intent for payer ID 555 to recipient ID 777. The source amount should be $2,500. Use payment method ID bank_123. Tell me the estimated delivery date and the total fee amount calculated by Plastiq."
create_a_plastiq_payment
After an intent is verified, this tool executes the transaction. The LLM references the existing intent by passing the paymentIntent.id. If the payment fails immediately, the statusReasons field dictates why (e.g., insufficient funds, missing compliance data).
"Execute the payment for payment intent pi_9876. Confirm the final status of the transaction and provide the resulting payment ID."
plastiq_billers_search
Before you set up a net-new recipient, you should check if they already exist in the Plastiq biller network. This tool searches by business name and returns a structured list of biller groups. The LLM parses the groupId and individual biller addresses to find the correct vendor match.
"Search Plastiq for billers named 'Global Office Supplies'. Return the exact business address and category ID for the closest match in the network."
create_a_plastiq_recipient
If a vendor is not in the network, this tool creates a custom recipient for payment disbursement. It requires an exact receivingMethod payload defining ACH, EFT, Check, or Wire routing rules. The LLM must ensure it provides at least an email or phone number in the contact block.
"Set up a new ACH recipient for 'Alpha Consulting'. Their routing number is 123456789 and account number is 987654321. Send payment notifications to billing@alphaconsulting.com. Associate this recipient with payer ID 102."
get_single_plastiq_payment_intent_by_id
Financial operations require strict monitoring. This tool retrieves the full details of an existing intent. AI agents use this to audit a stalled payment, check if it expired (expiresAt), or verify delivery options.
"Retrieve payment intent pi_456 for payer ID 102. Summarize any warnings attached to the intent and verify if the delivery option allows for expedited ACH transfer."
create_a_plastiq_payer
Onboarding a new client or subsidiary requires creating a payer entity. This tool establishes the core business profile, requiring a business name, address, and primary contact. The API returns an id and externalId which subsequent tools need to process payments.
"Create a new payer profile for 'Beta Logistics LLC' located at 100 Main St, Austin TX, 78701. The primary contact is finance@betalogistics.com. Give me the new Payer ID once created."
To view the complete inventory of available API operations, schemas, and parameter requirements, visit the Plastiq integration page.
Workflows in Action
When you give ChatGPT access to the Plastiq MCP server, it can orchestrate complex, multi-step operations autonomously. The model handles the sequential logic, taking the output from one tool and mapping it to the required inputs of the next.
Scenario 1: Accounts Payable Vendor Setup and Payment
Persona: Accounts Payable Clerk automating invoice execution.
"Search the Plastiq network for 'Omega Web Hosting'. If they exist, draft a payment intent for $850 using my payer ID 'pyr_123' and my saved payment method 'pm_456'. Execute the payment immediately if there are no warnings. If they don't exist, stop and tell me to gather their ACH details."
plastiq_billers_search: ChatGPT queries the network for "Omega Web Hosting" and finds a matching biller ID.create_a_plastiq_payment_intent: The agent constructs the intent payload using the discovered recipient ID, the provided payer ID, and the payment method ID.create_a_plastiq_payment: Upon receiving a clean intent response, the agent issues the final command to capture funds and initiate the disbursement.
sequenceDiagram
participant User as User (ChatGPT)
participant MCP as Truto MCP Server
participant Upstream as Plastiq API
User->>MCP: Call plastiq_billers_search<br>(name: "Omega Web Hosting")
MCP->>Upstream: GET /v1/billers?name=...
Upstream-->>MCP: Returns biller group array
MCP-->>User: Biller ID found (blr_888)
User->>MCP: Call create_a_plastiq_payment_intent<br>(recipient: blr_888, amount: 850)
MCP->>Upstream: POST /v1/paymentIntents
Upstream-->>MCP: Intent ID (pi_999), fees calculated
MCP-->>User: Intent staged successfully
User->>MCP: Call create_a_plastiq_payment<br>(intent_id: pi_999)
MCP->>Upstream: POST /v1/payments
Upstream-->>MCP: Payment executing
MCP-->>User: Payment completeScenario 2: Error Handling and Payment Reversal
Persona: Finance Operations Manager auditing a stalled disbursement.
"Check the status of payment intent pi_774. If it has compliance warnings or if the delivery date is past due, refund the associated payment and update the recipient ID rec_552 to 'status: INACTIVE'."
get_single_plastiq_payment_intent_by_id: ChatGPT fetches the exact record and reads the nestedstatusReasonsarray.create_a_plastiq_payment_refund: The agent identifies a failure flag. It extracts the underlying payment ID from the intent and triggers a refund.update_a_plastiq_recipient_by_id: Finally, the agent patches the recipient record to prevent future automated payments from hitting the flagged account.
Security and Access Control
Exposing B2B payments to an LLM demands strict guardrails. Plastiq MCP servers enforce authorization at the infrastructure layer, ensuring the model can only execute exactly what you permit.
- Method Filtering: When creating the server, you can restrict operations to a specific list. Setting
methods: ["read"]allows the agent to audit payments and search billers, but entirely removes thecreate,update, anddeletetools from the LLM's context window. - Tag Filtering: You can restrict tools by functional domains. If you only want an agent to manage CRM-style records without touching transactions, you can filter by specific resource tags.
- Double Authentication: By enabling
require_api_token_auth: true, the URL token is no longer sufficient on its own. The connecting client must also pass a valid Truto API token in theAuthorizationheader, preventing leaked URLs from resulting in unauthorized Plastiq transactions. - Ephemeral Servers: You can pass an
expires_attimestamp during server creation. Truto schedules an alarm on its edge infrastructure to instantly destroy the token, KV entries, and database records at the exact second of expiration.
Moving Past the Boilerplate
Connecting Plastiq to ChatGPT via a custom MCP server requires engineers to write pagination handlers, map polymorphic ACH payloads, and manually parse HTTP 429 headers. By routing these tasks through Truto, you abstract the protocol boilerplate.
The server securely scopes operations to a specific tenant, filters allowed methods, and dynamically translates upstream JSON Schemas into flat LLM tool definitions. Your engineering team focuses on prompt engineering and workflow orchestration, while the integration layer handles the financial API translation.
FAQ
- How does Truto handle Plastiq API rate limits?
- Truto does not retry or apply backoff on rate limit errors. It passes the HTTP 429 error directly to the caller and normalizes the rate limit information into standard headers (ratelimit-limit, ratelimit-remaining, ratelimit-reset). The caller is responsible for implementing retry logic.
- Can I restrict ChatGPT to read-only Plastiq operations?
- Yes. When creating the MCP server via the Truto UI or API, you can apply method filtering. Setting the config to `methods: ["read"]` ensures the LLM can only query data, removing tools like create_a_plastiq_payment from its context.
- What happens if a Plastiq endpoint requires complex nested payloads?
- Truto automatically flattens Plastiq's nested JSON schemas (such as polymorphic receivingMethod objects for ACH or Wire) into a flat property map for the LLM. The MCP router handles reconstructing the correct query and body parameters before making the proxy request.
- Is the Plastiq MCP URL secure?
- Yes. The token is cryptographically hashed and stored at the edge. For higher security, you can enable `require_api_token_auth` to enforce standard API token validation on top of the URL token, and set an `expires_at` timestamp for ephemeral access.