Payware MCP Server
OfficialProvides comprehensive payment processing integration with payware APIs, enabling creation and management of EUR transactions, QR/barcode payment generation, transaction status monitoring, and callback handling for European payment systems
Click on "Deploy Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@Payware MCP Server create a transaction for 25.50 EUR with payment description 'coffee order'"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
payware MCP Server
Official MCP (Model Context Protocol) server for payware payment API integration. This server enables AI assistants to interact with payware APIs, automating integration workflows for all partner types.
Releases are published to npm as @payware/mcp-server and to the official MCP Registry as io.github.payware/mcp-server. MIT licensed, see LICENSE.
Who Is This For?
Merchants - Accept payments, manage products, generate transaction reports
ISVs (Independent Software Vendors) - Build multi-merchant platforms with OAuth2 token management
Payment Institutions - Process A2A transfers, handle Payment Choice Architecture with multiple payment methods
Related MCP server: PayHere Documentation MCP Server
What's New in 2.2.0
Execution lock - A payment institution finalizes with
EXECUTINGimmediately before money moves, thenCONFIRMEDonce the Merchant Leg has completed, orFAILED;transferTypeandfeeLegOutcomeare newDeferred Merchant Leg - Merchants, and ISVs for them, can allow a credit transfer that settles later with
deferredAllowedCode examples -
payware_generate_code_examplewrites complete, signed programs for real routes only, including the institution finalize flow
Features
🔐 Authentication Tools
RSA Key Generation: Generate secure 2048-bit RSA key pairs
JWT Token Creation: Create properly formatted JWT tokens
Sandbox Setup: Configure sandbox authentication
💳 Transaction Tools
Create Transaction: Support PLAIN, QR, and BARCODE transactions
Process Transaction: Process transactions with Payment Choice Architecture support
Transaction Status: Check transaction status by ID
Transaction History: Get finalized transaction details
Callback Simulation: Test callback scenarios for merchants and payment institutions
📍 Point of Interaction (POI) Tools
Set Price: Configure POI with amount, currency, and payment details
Cancel Price: Clear active price from POI
Get POI: Retrieve POI details and current state
Get Status: Check POI transaction status
Get QR Code: Generate QR code for POI payments
List POIs: List all POIs for a merchant
📣 Campaign, Placement and Airing Tools
For merchants, and for ISVs acting for them. Changes need the merchant's PRM plan; reading works on every plan.
Placements: Distribute a product through posters, TV spots, packaging, links or tags, each with its own
plID, so every payment it starts is attributed to it. Includes the QR code, barcode and short link of each placementCampaigns: Group placements, across products, and read their combined results
Airing Rules: Schedule when a placement is on air, with recurrences, time windows and time zones, and replace a whole schedule in one call
Airing Calendar: Every airing across all products in a time range
Results: Offers shown, payments started and confirmed, and confirmed amounts per placement or campaign
📋 Logs Tools (Premium)
Query Logs: Search and filter application logs by level, logger, message content, and date range
Log Status: Check log availability and storage information
Download Logs: Get compressed archive of logs for offline analysis
🛠️ Utility Tools
Code Examples: A complete program for one API call, or the JWT helper, in Python, Node.js, PHP, Java, C# or curl, signed as payware requires and calling the real route
Integration Overview: Base URLs, request signing and every operation the code examples cover, per partner type
Request Formatting: Format and validate API requests
Quick Start
1. Installation
From npm (recommended):
npm install -g @payware/mcp-serverFrom source:
git clone https://github.com/payware/mcp-server.git
cd mcp-server
npm install2. Environment Configuration
Copy the example environment file and configure your credentials:
cp .env.example .envEdit .env file:
# Partner ID from payware dashboard
PAYWARE_PARTNER_ID=your_partner_id_here
# Path to private key file (relative to project root)
PAYWARE_SANDBOX_PRIVATE_KEY_PATH=keys/sandbox-your-private-key.pem
PAYWARE_PRODUCTION_PRIVATE_KEY_PATH=keys/production-your-private-key.pem
# Optional: Sandbox base URL (defaults to https://sandbox.payware.eu/api)
PAYWARE_SANDBOX_URL=https://sandbox.payware.eu/api⚠️ Security Note: Never commit the .env file to version control. It contains sensitive credentials.
Choosing toolsets
Every tool definition goes into the assistant's context on every turn, and a merchant has over 70 of them. To offer only the groups you use, set PAYWARE_MCP_TOOLSETS to a comma-separated list:
PAYWARE_MCP_TOOLSETS=products,placementsToolsets: auth, transactions, products, placements, data, logs, poi, shops, onboarding, utils. Unset, or all, loads every tool. An unknown name is ignored with a warning in the server log. A tool outside the chosen toolsets is neither listed nor callable; this narrows what the assistant is offered and does not change what your partner account may do. An ISV that obtains OAuth2 tokens through this server includes auth.
3. Start the MCP Server
npm start4. Basic Integration Flow
Generate RSA Keys
Tool: payware_authentication_generate_rsa_keysCreate JWT Token
Tool: payware_authentication_create_jwt_token Parameters: - partnerId: (from PAYWARE_PARTNER_ID) - privateKey: (from environment-specific key path)Setup Sandbox
Tool: payware_authentication_setup_sandbox_auth Parameters: - partnerId: (from PAYWARE_PARTNER_ID)Create Transaction
Tool: payware_operations_create_transaction Parameters: - partnerId: (from PAYWARE_PARTNER_ID) - privateKey: (from environment-specific key path) - amount: 10.00 - currency: EUR - reasonL1: "Payment description" - type: PLAINCheck Status
Tool: payware_operations_get_transaction_status Parameters: - partnerId: (from PAYWARE_PARTNER_ID) - privateKey: (from environment-specific key path) - transactionId: TRANSACTION_ID
API Request Structure
The payware MCP server transforms flat parameter inputs into the proper nested JSON structure required by the payware API:
Create Transaction Request Structure
{
// ROOT LEVEL - Transaction metadata
"shop": "SHOP001", // Optional: Shop code
"account": "GB29NWBK60161331926810", // Optional: Account identifier
"friendlyName": "Your Shop Name", // Optional: Account holder name
"callbackUrl": "https://callback.url", // Optional: HTTPS callback URL
"passbackParams": "{\"orderId\":\"12345\"}", // Optional: Callback parameters
// TRANSACTION DATA - Required transaction information
"trData": {
"amount": "25.50", // String/Number: Amount (can be "0.00" for flexible amounts)
"currency": "EUR", // REQUIRED: ISO 3-character currency code
"reasonL1": "Payment for services", // REQUIRED: Transaction description (max 100 chars)
"reasonL2": "Order #12345" // Optional: Additional description (max 100 chars)
},
// TRANSACTION OPTIONS - Transaction behavior settings
"trOptions": {
"type": "QR", // PLAIN, QR, or BARCODE (default: PLAIN)
"timeToLive": 300 // Seconds: 60-600 (default: 120)
},
// QR OPTIONS - Only included when type=QR
"qrOptions": {
"qrFormat": "PNG", // PNG, JPG, SVG (default: SVG)
"qrBorder": 4, // Border modules: 1-10 (default: 4)
"qrErrorCorrection": "QUARTILE", // LOW, MEDIUM, QUARTILE, HIGH (default: QUARTILE)
"qrScale": 16, // Pixel size: 1-100 (default: 16, irrelevant for SVG)
"qrVersion": 10 // QR version: 1-40 (default: 3)
},
// BARCODE OPTIONS - Only included when type=BARCODE
"barOptions": {
"barFormat": "SVG", // PNG, SVG, JPG (default: SVG)
"barModuleWidth": 2, // Module width: 1-10 (default: 2)
"barBarHeight": 100, // Height: 15-1000 (default: 100)
"barFontSize": 12, // Font size: 0-24 (default: 12)
"barHumanReadableLocation": "NONE" // NONE, BOTTOM, TOP (default: NONE)
}
}Parameter Mapping
When using MCP tools, parameters are automatically mapped to the correct API structure:
MCP Tool Parameter | API Location | Description |
| Authentication | Used for JWT signing, not sent in request |
| Root Level | Transaction metadata |
|
| Core transaction data |
|
| Transaction behavior ( |
|
| QR code settings (when type=QR) |
|
| Barcode settings (when type=BARCODE) |
Available Tools
Code Generation & Documentation
payware_generate_code_example
A complete program for one payware API call, in Python, Node.js, PHP, Java, C# or curl
Each program signs its request with an RS256 JWT (contentSha256 for a body; on behalf of a merchant for an ISV, except the OAuth2 endpoints) and calls a route the server has. The operations, by partner type:
Transactions (all): create_transaction, get_transaction_status, process_transaction, cancel_transaction, get_transaction_history
Institution finalize (payment_institution): finalize_transaction, the whole flow - process, then
EXECUTINGimmediately before money moves, thenCONFIRMEDonce the Merchant Leg has completed orFAILED, onPATCH /api/transactions/{transactionId}Products and audio (merchant, isv): create_product, get_product, list_products, update_product, delete_product, register_audio, get_audios, get_audio, update_audio, delete_audio
OAuth2 (isv): obtain_token, get_token_info, rotate_token
Reports (all, production only): list_reports, generate_report, get_report_status, export_report
authentication: the JWT helper on its own
payware_generate_documentation
An integration overview for one partner type
Base URLs, how requests are signed, and every operation above that the partner type has, with its route.
Authentication
payware_authentication_generate_rsa_keys
Generate RSA key pair for API authentication.
Parameters:
keySize(optional): RSA key size in bits (default: 2048)
payware_authentication_create_jwt_token
Create JWT token for API authentication.
Parameters:
partnerId(required): Partner ID from paywareprivateKey(required): RSA private key in PEM format
payware_authentication_validate_jwt
Validate JWT token format and signature.
Parameters:
token(required): JWT token to validatepartnerId(required): Partner ID for validation
payware_authentication_test_jwt
Test JWT token with payware API.
Parameters:
token(required): JWT token to testpartnerId(required): Partner ID
payware_authentication_setup_sandbox_auth
Setup sandbox authentication configuration.
Parameters:
partnerId(required): Partner ID from paywareprivateKey(optional): Private key for validation
Transactions
Transaction Status Overview
payware transactions can have the following statuses:
ACTIVE Status:
⏳ ACTIVE: Active transaction pending processing or finalizing. Once the payer's institution has started the payment it stays ACTIVE past
timeToLiveuntil the money has moved (seconds for an instant transfer, days withdeferredAllowed), so never infer EXPIRED from the clockThis is the only status returned by
payware_operations_get_transaction_status(a payment institution also seesEXECUTINGon a transaction it has locked)Use GET
/transactions/{id}endpoint
Final Statuses:
✅ CONFIRMED: Successfully finalized
❌ DECLINED: Declined by the user, processing or finalizing payment institutions
💥 FAILED: Failed due to technical reasons or other
⏰ EXPIRED: Time to live of the transaction has passed
🚫 CANCELLED: Transaction canceled by the originator
These final statuses are only available through payware_operations_get_transaction_history using GET /transactions-history/{id} endpoint.
payware_operations_create_transaction
Create a new transaction with full API structure support.
Key Parameters:
currency(required): ISO 4217 code payware knows (an unknown code is refused)reasonL1(required): Transaction description (max 100 chars)partnerId(required): Partner ID from payware dashboardprivateKey(required): RSA private key for JWT signingamount(optional): Currency value (default: "0.00" for flexible amounts)type(optional): PLAIN, QR, or BARCODE (default: PLAIN)timeToLive(optional): Payment timeout in seconds, 60-600 (default: 120)deferredAllowed(optional):truelets the payer's institution pay by a credit transfer that settles later; refused with producer or terminal fields (ERR_DEFERRED_TRANSFER_NOT_ALLOWED). A deferred payment stays ACTIVE until it settles, which can take days
QR Options (when type=QR):
qrFormat: PNG, JPG, SVG (default: SVG)qrErrorCorrection: LOW, MEDIUM, QUARTILE, HIGH (default: QUARTILE)qrScale(1-100, default 16),qrBorder(1-10, default 4),qrVersion(1-40, default 3): size and appearance
Barcode Options (when type=BARCODE):
barFormat: PNG, SVG, JPG (default: SVG)barModuleWidth(1-10, default 2),barBarHeight(15-1000, default 100),barFontSize(0-24, default 12),barHumanReadableLocation(NONE, BOTTOM, TOP, default NONE)
payware_operations_get_transaction_status
Get status of ACTIVE transactions only. For completed/finalized transactions use history tool.
Parameters:
transactionId(required): Transaction ID (starts with 'pw')partnerId(required): Partner IDprivateKey(required): Private key for JWT signing
payware_operations_simulate_callback
Simulate callback scenarios for testing.
Parameters:
transactionId(required): Transaction IDstatus(optional): CONFIRMED, DECLINED, FAILED, EXPIRED, or CANCELLED (default: CONFIRMED)callbackUrl(optional): URL where callback would be sentamount(optional): Transaction amount (default: 10.00)currency(optional): Currency (default: EUR)type(optional): Transaction type (default: PLAIN)
Utilities
payware_generate_code_example
Generate a complete program for one payware API call. The operations are listed under Code Generation & Documentation above.
Parameters:
operation(required): the operation, for examplecreate_transactionorfinalize_transactionlanguage(optional): python, nodejs, php, java, csharp, curl (default: python)partner_type(optional): merchant, isv, payment_institution (default: merchant)include_comments(optional): the program with comments, inside a page naming the route (default: true); false gives the program aloneinclude_error_handling(optional): report a failed status or a network error (default: true)
The programs read PAYWARE_PARTNER_ID and PAYWARE_PRIVATE_KEY_PATH (a PKCS#8 PEM), PAYWARE_BASE_URL when set, and for an ISV's call on behalf of a merchant PAYWARE_MERCHANT_PARTNER_ID and PAYWARE_OAUTH2_TOKEN.
payware_generate_documentation
An integration overview for one partner type.
Parameters:
language(optional): the language the next steps refer to (default: python)partner_type(optional): merchant, isv, payment_institution (default: merchant)
payware_utils_format_request
Format and validate API requests with deterministic JSON serialization for SHA-256 consistency.
Parameters:
type(required): transaction, headers, or curldata(optional): Data to formatjwtToken(optional): JWT token for headerssignature(optional): Request signatureendpoint(optional): API endpoint for curlmethod(optional): HTTP method (default: POST)
payware_utils_format_json_deterministic
Format JSON with deterministic property ordering for consistent SHA-256 calculation.
Parameters:
data(required): Object to serializeminimize(optional): Remove whitespace (default: true)
payware_utils_server_info
Get MCP server information and configuration.
Note: All transaction data is serialized using consistent property ordering to prevent content hash mismatch errors.
Dependencies
@modelcontextprotocol/sdk: MCP server frameworkaxios: HTTP client for API callsjsonwebtoken: JWT token creationdotenv: reads.envexpress,cors: the HTTP proxy mode only
RSA keys are generated with Node's own crypto, and multipart uploads use Node's own FormData.
Environment
Sandbox by default, production on request: tools that call payware take
useSandbox(defaulttrue);falsecalls production and signs with the production key (PAYWARE_PRODUCTION_PRIVATE_KEY_PATH). Reports run on production only.Base URLs:
https://sandbox.payware.eu/apiandhttps://api.payware.eu/api; the OAuth2 endpoints sit at the host root (/oauth2/...); soundbite recognition has its own hosts,https://soundbite-sandbox.payware.eu/apiandhttps://soundbite.payware.eu/apiCurrencies: any ISO 4217 code payware knows; amounts follow the currency's minor unit
Transaction media types: PLAIN, QR, BARCODE
Security
⚠️ Important Security Notes:
Environment Variables
REQUIRED: Use environment variables for all credentials
Never commit
.envfiles to version controlUse different credentials for development and production
Store private key files outside web-accessible directories
Private Key Security
Generate separate key pairs for sandbox and production
Store private keys with restricted file permissions (600)
Never embed private keys in source code
Rotate keys regularly according to security policies
API Security
Calls go to sandbox unless a tool is given
useSandbox: falseKeep sandbox and production keys apart: each environment refuses the other's signature
Implement proper error handling in production
Use HTTPS for all API communications
Validate all input parameters
Implement rate limiting and monitoring
JSON Serialization & SHA-256 Consistency
⚠️ CRITICAL: payware API requires deterministic JSON serialization for SHA-256 calculation
Property Order: JSON objects must have consistent property ordering
Minimized Format: No whitespace or formatting in request bodies
SHA-256 Calculation: Must be calculated from the exact same JSON string sent to API
Implementation: This server uses deterministic JSON serialization to ensure consistency
Example of correct JSON format:
{"trData":{"amount":"25.50","currency":"EUR","reasonL1":"Payment description"},"trOptions":{"timeToLive":300,"type":"PLAIN"}}Why this matters:
Different property orders produce different SHA-256 hashes
Hash mismatch results in
ERR_INVALID_CONTENT_HASHerrorsServer validates that JWT
contentSha256matches request body SHA-256
Troubleshooting
Common Issues
Authentication Failed (ERR_INVALID_SIGNATURE)
Root Cause: Public key registered with payware doesn't match your private key
Solution: Ensure the public key registered on payware site corresponds to your private key
Verification: Use
openssl rsa -in privateKey.pem -puboutto extract public key from private keyStatus: ✅ Resolved - Keys must be properly registered on payware partner portal
Content Hash Mismatch Error (ERR_INVALID_CONTENT_HASH)
Root Cause: Inconsistent JSON property ordering
Solution: Use deterministic JSON serialization (implemented in this server)
Symptoms: Server logs show different expected vs actual SHA-256 hashes
Prevention: Always use
createMinimizedJSON()from/src/core/utils/json-serializer.jsStatus: ✅ Fixed - Deterministic JSON serialization implemented
Transaction Creation Failed
Ensure all required parameters are provided
Check amount is non-negative
Verify transaction type is supported
Status: ✅ Working - Create and cancel operations confirmed functional
MCP Connection Issues
Ensure server is started with
npm startCheck that MCP client is properly configured
Verify no firewall blocking stdio communication
Note: Use MCP Inspector (
npm run inspector) for debugging
Proxy and Bridge Tools
HTTP Proxy Server (npm run proxy):
Bridges MCP tools to HTTP REST API
Useful for testing tools via HTTP requests
Documentation:
README-proxy.md
MCP Bridge (npm run bridge):
Connects MCP server to MCP Inspector
Essential for debugging and development
Use with:
npm run inspector
Testing Status
npm test runs every tool of every role against a local fake payware server (no credentials, no network): verb and path against the server's routes, the JWT and its contentSha256, sandbox against production keys, the server's validation rules for the fields the tools send, and the MCP result shape, including isError on a refusal. The fake server is a model of payware, not payware: the suite does not call the real sandbox, so a server change it does not model can still break a tool.
Support
For issues related to:
MCP Server: Check server logs and MCP client configuration
payware API: Refer to payware documentation and sandbox status
Integration: Use code examples and formatting tools provided
Key Issues: Ensure public key is registered on payware partner portal
License
MIT License
Available Tools
75 toolspayware_authentication_create_jwt_tokenCRead-onlyIdempotent
[Merchant] Create JWT token for payware API authentication according to official documentation
Inputs: partnerId, privateKey, useSandbox, requestBody.
payware_authentication_generate_rsa_keysCRead-onlyIdempotent
[Merchant] Generate RSA key pair for payware API authentication
Inputs: keySize.
payware_authentication_setup_sandbox_authCRead-onlyIdempotent
[Merchant] Setup sandbox authentication configuration for payware API
Inputs: partnerId, privateKey.
payware_authentication_test_jwtBRead-onlyIdempotent
[Merchant] Test JWT token creation process with detailed step-by-step breakdown, showing deterministic JSON serialization, SHA-256 hash calculation, and final JWT structure
Inputs: partnerId, useSandbox, requestPayload, showPrivateKey.
payware_authentication_validate_jwtARead-onlyIdempotent
[Merchant] Validate and debug a payware JWT: decode header and payload, check the claims against the API's rules (algorithm, audience including the ISV on-behalf form, 5-minute freshness), and verify the contentSha256 hash against the request body when one is given
Inputs: jwtToken (required), expectedPayload.
payware_campaigns_create_campaignA
[Merchant] Create a campaign. Attach placements to it by giving its campaignId when you create or replace a placement.
Endpoint: POST /campaigns (PRM plan)
Inputs: name (required), endsOn, status, startsOn, +2 more.
payware_campaigns_delete_campaignADestructiveIdempotent
[Merchant] Delete a campaign. Its placements stay, detached from it, and keep working.
Endpoint: DELETE /campaigns/{campaignId} (PRM plan)
Inputs: campaignId (required), useSandbox.
payware_campaigns_get_campaignARead-onlyIdempotent
[Merchant] Get a campaign, with the IDs of its placements you can see.
Endpoint: GET /campaigns/{campaignId}
Inputs: campaignId (required), useSandbox.
payware_campaigns_get_campaign_statsARead-onlyIdempotent
[Merchant] A campaign's results over [from, to): offers shown when a bank resolved one of its placement IDs (resolutions), offers shown after a recognised soundbite tap (recognitions), payments started (transactions) and confirmed, and confirmed amounts by currency.
Endpoint: GET /campaigns/{campaignId}/stats (PRM plan)
Inputs: campaignId (required), to, from, useSandbox.
payware_campaigns_list_campaignsARead-onlyIdempotent
[Merchant] List the merchant's campaigns. A campaign groups placements, possibly of different products, and reports their combined results.
Endpoint: GET /campaigns
Changing anything here needs the PRM plan, and below it a change answers 403 ERR_UNAUTHORIZED_OPERATION; reading works on every plan, results only on PRM. A merchant that leaves PRM keeps its placements read-only, and a printed placement code then pays as its plain product with no attribution.
Inputs: useSandbox.
payware_campaigns_update_campaignADestructiveIdempotent
[Merchant] Replace a campaign's details. An omitted startsOn, endsOn or externalRef is cleared; an omitted status keeps the current one. Get the campaign first and send every value you want to keep.
Endpoint: PUT /campaigns/{campaignId} (PRM plan)
Inputs: name (required), campaignId (required), endsOn, status, +3 more.
payware_data_cancel_exportADestructiveIdempotent
[Merchant] Cancel a running export process. Only exports in QUEUED status can be cancelled.
Inputs: exportId (required), partnerId, privateKey.
payware_data_cancel_reportADestructiveIdempotent
[Merchant] Cancel a running report generation. Only reports in QUEUED status can be cancelled.
Inputs: requestId (required), partnerId, privateKey.
payware_data_download_exportAIdempotent
[Merchant] Download a READY export file (production only). A text export (CSV, HTML, XML) is previewed; with saveToFile the file is written to payware-mcp-downloads in the system temp directory and the result names its path. A binary export (PDF, XLS(X), DOCX, ODT, ODS, RTF) needs saveToFile.
Inputs: exportId (required), partnerId, privateKey, saveToFile.
payware_data_export_reportA
[Merchant] Export a READY report in a specific format (PDF, CSV, Excel, JSON). The report must be in READY status first.
Inputs: requestId (required), partnerId, privateKey, outputFormat.
payware_data_generate_reportA
[Merchant] Generate an asynchronous data report for merchant data analysis and reporting. Production only - not supported in sandbox.
⚠️ Running a report is entitlement-checked as of 2026-08-22. Naming a report answers 403
ERR_REPORT_NOT_AVAILABLE when that report is not included in the caller's plan or partner type.
Until that date only the menu was filtered - the door was not - so a caller that hard-coded a
report id it had never been offered could still run it, and may now start failing.
Always resolve the id from payware_data_list_reports rather than hard-coding one. That call
and this check share a single rule, so the menu and the door cannot drift apart: if a report is in
that list, this call will accept it.
Distinguish the two failures:
403
ERR_REPORT_NOT_AVAILABLE- the report exists, this caller may not run it. Not retryable; it is a plan boundary, not a transient error.404
ERR_REPORT_UNIT_ID_NOT_FOUND- no report is registered under that id at all. Usually a typo or a stale id.
For an ISV acting on behalf of a merchant, the plan that applies is the merchant's, and reports are outside the Basic plan entirely.
Inputs: reportUnitId (required), dateTo, locale, dateFrom, +4 more.
payware_data_get_export_listARead-onlyIdempotent
[Merchant] Get all export attempts for a specific report request. Returns list of exports in various formats with their status and download information. Production only - not supported in sandbox.
Inputs: requestId (required), partnerId, privateKey.
payware_data_get_export_statusBRead-onlyIdempotent
[Merchant] Get the status of a report export request. Use this to monitor export progress.
Inputs: exportId (required), partnerId, privateKey.
payware_data_get_report_requestsARead-onlyIdempotent
[Merchant] Get all execution requests for a specific report type. Returns historical execution records with status and parameters. Production only - not supported in sandbox.
Inputs: reportId (required), partnerId, privateKey.
payware_data_get_report_statusARead-onlyIdempotent
[Merchant] Get the status of an asynchronous report generation request. Use this to monitor report progress.
Inputs: requestId (required), partnerId, privateKey.
payware_data_list_reportsARead-onlyIdempotent
[Merchant] List all available report types with their configurations, descriptions, and visibility settings. Production only - not supported in sandbox.
Inputs: partnerId, privateKey.
payware_generate_code_exampleARead-onlyIdempotent
[Merchant] Generate a complete program for one payware API call, or the JWT helper, in python, nodejs, php, java, csharp, curl. Each program signs its request as payware requires (RS256 JWT with contentSha256 for a body, on behalf of a merchant for an ISV) and calls the real route. finalize_transaction (payment institutions) is the whole institution flow: process, EXECUTING immediately before money moves, then CONFIRMED once the Merchant Leg has completed, or FAILED.
Inputs: operation (required), language, partner_type, include_comments, +1 more.
payware_generate_documentationBRead-onlyIdempotent
[Merchant] An integration overview for one partner type: base URLs, how requests are signed, and every operation payware_generate_code_example can write, with its route.
Inputs: language, partner_type.
payware_logs_download_urlARead-onlyIdempotent
[Merchant] Get download URL for logs archive. Premium plan required. Returns URL for downloading logs as gzipped JSON file.
Inputs: to, from, partnerId, privateKey, +1 more.
payware_logs_queryARead-onlyIdempotent
[Merchant] Query application logs with filters. Premium plan required. Returns paginated JSON log entries for debugging and monitoring your integration.
Inputs: to, from, level, limit, +6 more.
payware_logs_statusARead-onlyIdempotent
[Merchant] Get log availability and storage information. Premium plan required. Shows if logs are available, total size, and file count.
Inputs: partnerId, privateKey, useSandbox.
payware_operations_cancel_transactionADestructiveIdempotent
[Merchant] Cancel an ACTIVE transaction created by this merchant. Only the merchant who created the transaction can cancel it, and only before it has been processed.
Inputs: statusMessage (required), transactionId (required), partnerId, privateKey, +1 more.
payware_operations_create_transactionA
[Merchant] Create a new payware transaction. Parameters map to the following API structure:
📋 ROOT LEVEL (Transaction metadata):
shop, account, friendlyName, callbackUrl, passbackParams
producerPartnerId, terminalId, terminalManufacturer (POS terminal producer attribution - see below)
💰 TRANSACTION DATA (trData object):
amount, currency, reasonL1, reasonL2
⚙️ TRANSACTION OPTIONS (trOptions object):
type, timeToLive, deferredAllowed (deferred Merchant Leg opt-in - see below)
📱 QR OPTIONS (qrOptions object - only when type=QR):
qrFormat, qrBorder, qrErrorCorrection, qrScale, qrVersion
🔗 BARCODE OPTIONS (barOptions object - only when type=BARCODE):
barFormat, barModuleWidth, barBarHeight, barFontSize, barHumanReadableLocation
🔐 AUTHENTICATION (not sent to API, used for JWT signing):
partnerId, privateKey
Actual API Request Structure:
{
"shop": "...",
"account": "...",
"friendlyName": "...",
"callbackUrl": "...",
"passbackParams": "...",
"trData": {
"amount": "25.50",
"currency": "EUR",
"reasonL1": "...",
"reasonL2": "..."
},
"trOptions": {
"type": "QR",
"timeToLive": 300
},
"qrOptions": { ... }
}⏳ DEFERRED MERCHANT LEG (optional, trOptions.deferredAllowed)
By default the payer's institution pays this transaction with an instant or an internal transfer.
deferredAllowed: true also lets it use an ordinary credit transfer that settles later. Rules:
Honoured only on your own call without POS terminal producer fields. With
producerPartnerId,terminalIdorterminalManufacturerthe transaction is refused with 400ERR_DEFERRED_TRANSFER_NOT_ALLOWED: a till payment stays instant or internal.A deferred payment stays ACTIVE, i.e. pending, until the transfer settles, which can take days, and so can stay ACTIVE past its
timeToLive. Keep polling or wait for the callback; never treat it as expired yourself. CONFIRMED arrives once the money has reached your account.Echoed as
deferredAllowed: truein the create response and on status reads when set; absent otherwise. Leave it out for instant or internal only.
🏭 POS TERMINAL PRODUCER ATTRIBUTION (optional, root level)
Only relevant if the transaction originates on a POS terminal whose producer has a revenue-share agreement with payware. Three fields, all optional:
producerPartnerId- the 8-character partnerId payware issued to the terminal producer. An unrecognised value fails the transaction with a 400 (ERR_INVALID_PRODUCER_ID) - it is deliberately not ignored, so that a terminal configured with the wrong id fails on its first sale where an installer can see it. Omit the field entirely when there is no producer arrangement; never send an empty string.terminalId- the producer's own identifier for the physical terminal. Max 64 chars, no control characters. payware records it and never interprets it: no format, no uniqueness enforcement, and nothing about pricing or attribution depends on it.terminalManufacturer- device manufacturer as the terminal reports it. Max 64 chars, no control characters. Recorded for provenance. payware's internal attribution review counts each producer's sales by reported manufacturer, so a build running on another vendor's hardware stands out; it is never blocked.
Two things worth knowing:
It never changes what the merchant is charged. The producer's share comes out of payware's own fee, not out of a higher price for the merchant, whose fee always follows the fee hierarchy.
None of the three is returned. They do not appear in the create response, in
get_transaction_status, in transaction history, or in any callback. What a producer earned is visible on their own dashboard and settlements - attribution is recorded against the fee, not against the transaction.
If an ISV's software made the call, the ISV is attributed and the producer is not, even when the ISV's software is running on that producer's hardware.
Inputs: currency (required), reasonL1 (required), shop, type, +25 more.
payware_operations_get_transaction_historyARead-onlyIdempotent
[Merchant] Get history of completed/finalized transactions with final statuses.
Endpoint: GET /transactions-history/{transactionId} Use Case: Retrieve transactions with final statuses: CONFIRMED, DECLINED, FAILED, EXPIRED, CANCELLED. Note: For ACTIVE transactions, use 'payware_operations_get_transaction_status' instead.
📦 This is where the delivery address lives. For a SHIPPABLE transaction, deliveryAddress
(fullName, streetAddressLine1/2, zipCode, city, region, country, phoneNumber, email) is returned
here and only here. It was removed from the finalized callback on 2026-08-07: a callback is
delivered to whatever certificate the merchant's endpoint happens to present, which is an acceptable
trade for a transaction id and an amount and not one for a shopper's home address. This endpoint is
JWT-authenticated, tenant-scoped and runs over a verified channel. So the pattern is: the callback
tells you the shipment is ready, and this call gives you the address to ship to.
⚠️ Requires Standard or Premium. This endpoint was ungated until 2026-08-21 and is now on the same plan gate as the rest of the transaction surface, so a Basic merchant - or an ISV acting on behalf of one - now gets 403. If reading history started failing without a code change, this is why. Financial institutions are unaffected; banks are always Premium.
⏱️ Rate limited, like every payware endpoint. A 429 carries ERR_RATE_LIMIT_EXCEEDED and a
Retry-After header, in seconds; the request was not processed, so the identical request is safe to
retry once the window passes. The failure result exposes this as error.throttled,
error.retryable and error.retryAfterSeconds.
Inputs: transactionId (required), partnerId, privateKey, useSandbox.
payware_operations_get_transaction_statusARead-onlyIdempotent
[Merchant] Get status of an ACTIVE transaction by ID (for completed/expired transactions use transaction history tool).
Endpoint: GET /transactions/{transactionId} Use Case: Check status of ACTIVE transactions only. This endpoint only returns transactions with ACTIVE status. Note: For transactions with final statuses (CONFIRMED, DECLINED, FAILED, EXPIRED, CANCELLED), use 'payware_operations_get_transaction_history' instead.
⏳ ACTIVE can outlast timeToLive. Never infer EXPIRED from the clock. Once the payer's institution has
started the payment (it locks the transaction immediately before the money moves, which you do not see),
the transaction stays ACTIVE past timeToLive until the money has moved: seconds for an instant or
internal transfer, days for a deferred one (a transaction created with deferredAllowed: true). Its
timeToLive then stops at the value it had when the payment started. Keep polling, or wait for the
callback: a transaction is EXPIRED only when payware says so, in the callback or in transaction history,
and one that is no longer returned here has a final status there.
🛍️ Product-originated transactions carry a nested product object. Since 2026-07-22 the
presentation fields are grouped under product rather than sitting flat on the response - the old
top-level imageUrl is gone. Discriminate a product-originated transaction by the presence of the
object, not by probing individual fields:
{ "transactionId": "pw7e4rCToG", "amount": "57.60", "currency": "EUR",
"product": { "productId": "pr7e4rCToG", "type": "ITEM", "name": "Cotton T-shirt, black",
"shortDescription": "...", "longDescription": "...",
"imageUrl": "https://...", "imageDigest": "9f86d081...", "imageContentType": "image/png",
"imageBytes": 20480, "termsUrl": "https://...", "termsText": "...",
"regularPrice": "63.36", "shippable": false, "quickPay": true, "shopName": "My shop" } }Three things about that object:
imageDigestis an obligation, not decoration. It is the SHA-256 payware pinned for the image atimageUrl. Fetch the image, verify its bytes against this digest before rendering it to a payer, and fall back to a neutral placeholder on mismatch. Present only whenimageUrlis the product's own image.regularPriceis display-only, and appears only when there is a genuine saving - i.e. when it is higher than the transactionamount. The top-levelamountandcurrencyare authoritative and are what the payer pays; the object does not repeat them.Availability follows the merchant's plan.
imageUrlandtermsUrlare Standard and above;termsTextand the descriptions are universal. A missing field is a plan boundary, not an error.
For a pr/ps product identifier the values are resolved live; for the resulting pw transaction
they are the snapshot frozen at creation, so the response always reflects what the payer could have
been shown at scan time.
💰 Amounts follow the currency, not a fixed two decimals. amount, fee, payerAmount and
payeeAmount are decimal strings at the smallest unit their own currency can be paid in - none for
JPY, two for EUR, eight for BTC. Parse them with a decimal type; never compare them as strings, and
never assume two places. feeRate carries up to six decimals and feeFixed full stored precision:
both are informational, and recomputing the fee from them and submitting that at finalize is rejected
with ERR_FEE_MISMATCH. Echo fee back unchanged instead.
Inputs: transactionId (required), partnerId, privateKey, useSandbox.
payware_operations_process_transactionADestructive
[Merchant] Process a PEER transaction (for merchants accepting payments by scanning customer QR/barcode).
Use Case: Merchant scans customer's payware QR code or barcode to accept payment. Note: Only PEER transactions (created by customers) can be processed by merchants. Flow: Customer creates transaction → Merchant scans QR/barcode → Merchant processes transaction
API Request Structure:
{
"shop": "...",
"account": "...",
"friendlyName": "...",
"callbackUrl": "...",
"passbackParams": "...",
"trData": {
"amount": "25.50", // REQUIRED for processing
"currency": "EUR", // REQUIRED for processing
"reasonL1": "...", // REQUIRED for processing
"reasonL2": "..."
},
"trOptions": {
"timeToLive": 300 // Overwrites original transaction TTL
}
}Inputs: amount (required), currency (required), reasonL1 (required), transactionId (required), +11 more.
payware_operations_simulate_callbackARead-onlyIdempotent
[Merchant] Simulate callback scenarios for testing webhook handling.
Generates the payload a merchant's callbackUrl actually receives, so a handler can be built and
tested against the real shape. Four properties of that shape are easy to get wrong:
1. Absent means absent, not zero. The payload omits properties with no value rather than sending
null or 0. statusMessage, passbackParams, fee, feeFixed and feeRate are all simply
missing when they do not apply. A missing fee means the fee is unknown for that transaction - it
does not mean the transaction was free. Do not write a handler that reads payload.fee as a number
without checking it is there.
2. finalized is absent on EXPIRED. An expired transaction is closed by the platform's expiry
sweep, which sets no finalization moment. Every other status carries one.
3. EXPIRED is a non-payment, not a failure. The payer never paid within timeToLive. Release
the order or the stock, as you would for a cancellation - do not treat it as an error to retry.
4. Deduplicate on (transactionId, callbackType). payware retries a callback up to 15 times,
backing off from about a second to at most 5 minutes between attempts, until the endpoint answers any
2xx. That pair is stable across every retry of the same event, and it is the key payware guarantees.
A handler that does not deduplicate will eventually process one payment twice.
Not on this payload: deliveryAddress (removed 2026-08-07 - fetch it from
payware_operations_get_transaction_history, which is authenticated and tenant-scoped),
producerPartnerId, transactionType and initiatedBy (the last two are carried on
TRANSACTION_PROCESSED, which merchants do not receive).
Inputs: transactionId (required), fee, poiId, amount, +8 more.
payware_poi_cancel_priceADestructiveIdempotent
[Merchant] Cancel a pending price on a POI, resetting it to IDLE state.
Authentication: your own JWT (an ISV makes the same call on your behalf). Endpoint: DELETE /poi/{poiId}/price Use Case: Cancel a price that was set but not yet scanned (e.g., order cancelled).
The POI returns to IDLE and is ready for a new price.
Only before the scan. The scan is the customer's bank processing the payment, so from then on a POI sale cannot be cancelled by the merchant or an ISV, on any plan: this answers 409 ERR_POI_NO_PENDING_PAYMENT, and cancelling the transaction itself answers 409 ERR_ALREADY_PROCESSED. The sale completes or expires; the POI accepts the next price meanwhile.
Required: POI ID.
Inputs: poiId (required), useSandbox.
payware_poi_createA
[Merchant] Create a single POI (Point of Interaction) - a physical payment point a payer scans.
Endpoint: POST /poi -> 201 Created
A POI belongs to a shop, and a shop belongs to a merchant. shopCode is required - use
payware_shops_list to find one rather than guessing. Banks do not own POIs; a financial-institution
principal gets 403 on every POI endpoint, not an empty result.
ttlSeconds is the price-session TTL, not the POI's lifetime. It bounds how long a price set on
this POI stays claimable before the POI returns to IDLE. Range 60-600 seconds; the server
defaults it to 300.
Creating many at once? Use payware_poi_create_batch instead. It creates up to 50 in one
atomic call, which is both faster and safer than a loop over this tool: a loop that fails halfway
leaves a half-built estate with no record of where it stopped.
Inputs: shopCode (required), name, partnerId, privateKey, +3 more.
payware_poi_create_batchA
[Merchant] Create up to 50 POIs in a single atomic call - the tool for rolling out a terminal estate.
Endpoint: POST /poi/batch -> 201 Created, returning { created, pois: [...] }
Atomic means all or nothing. Either every entry is created or none is. That is the reason to
prefer this over a loop of payware_poi_create: a loop that fails on entry 27 leaves 26 POIs behind
with nothing recording where it stopped, and re-running it duplicates them.
A POI belongs to a shop, and a shop belongs to a merchant. shopCode is required - use
payware_shops_list to find one rather than guessing. Banks do not own POIs; a financial-institution
principal gets 403 on every POI endpoint, not an empty result.
ttlSeconds is the price-session TTL, not the POI's lifetime. It bounds how long a price set on
this POI stays claimable before the POI returns to IDLE. Range 60-600 seconds; the server
defaults it to 300.
Defaults and overrides. shopCode, ttlSeconds and callbackUrl at the top level apply to
every entry. An entry may override name, ttlSeconds and callbackUrl for itself. shopCode is
top-level only - one batch builds one shop.
Limits: 1 to 50 entries. An empty list is ERR_BATCH_EMPTY; more than 50 is
ERR_BATCH_TOO_LARGE. Both are refused locally before the request is sent. For a larger rollout,
split it into batches of 50 - each batch is atomic on its own, so record which batches succeeded.
Inputs: pois (required), shopCode (required), partnerId, privateKey, +3 more.
payware_poi_getARead-onlyIdempotent
[Merchant] Get details of a specific POI (Point of Interaction).
Authentication: your own JWT (an ISV makes the same call on your behalf). Endpoint: GET /poi/{poiId} Use Case: Retrieve full details of a physical payment point including configuration and current state.
Required: POI ID.
Inputs: poiId (required), useSandbox.
payware_poi_get_qrcodeARead-onlyIdempotent
[Merchant] Generate a QR code image for a POI that customers can scan.
Endpoint: GET /poi/{poiId}/image Authentication: your own JWT Use Case: Generate QR codes for printing or displaying on screens.
Formats: PNG (default), SVG, JPG
Returns the image itself (MCP image content); an SVG comes back as its markup.
Required: POI ID.
Inputs: poiId (required), format, useSandbox.
payware_poi_get_statusARead-onlyIdempotent
[Merchant] Get the current status of a POI and the outcome of its sales.
Authentication: your own JWT (an ISV makes the same call on your behalf). Endpoint: GET /poi/{poiId}/status[?sessionToken=...] Use Case: Follow a sale to its outcome - the backup to callbacks, and on Basic (no transaction endpoints) the only way when a callback is lost or there is no backend.
POI States:
IDLE: no pending price and no sale running
READY: price set, waiting for a scan (wins over BUSY: the POI can take the next price while a sale runs)
BUSY: a customer scanned and the sale is running
Every response carries lastTransactionId / lastTransactionStatus - the POI's most recent sale, running (ACTIVE) or finished (CONFIRMED, DECLINED, FAILED, CANCELLED, EXPIRED). Once the POI is back to IDLE, lastTransactionStatus is how the last sale ended.
With sessionToken (from payware_poi_set_price) the response also carries transactionId / transactionStatus for exactly that sale - use it when the POI may be re-armed before the previous sale finishes. Poll every 2-3 seconds and stop at a final status; the read is rate limited.
Required: POI ID.
Inputs: poiId (required), useSandbox, sessionToken.
payware_poi_listARead-onlyIdempotent
[Merchant] List all POIs (Points of Interaction) for a merchant.
Authentication: your own JWT (an ISV makes the same call on your behalf). Endpoint: GET /poi Use Case: Retrieve all physical payment points configured for a merchant.
POI states: IDLE (no price, no sale running), READY (price set, waiting for a scan), BUSY (scanned, sale running). A disabled POI is not a state: it shows isActive false.
Inputs: useSandbox.
payware_poi_set_priceADestructiveIdempotent
[Merchant] Set a pending price on a POI for customer payment.
Authentication: your own JWT (an ISV makes the same call on your behalf). Endpoint: PUT /poi/{poiId}/price Use Case: Set the amount a customer should pay when they scan the POI.
The POI moves to READY and waits for a scan until the TTL expires. The scan creates the transaction and the POI is BUSY until the sale is final.
Only amount, currency and ttlSeconds are accepted. There is no description, callback URL or passback field on a price - the callback URL is set on the POI when it is created, and a POI without one sends no callbacks.
Keep the returned sessionToken until the sale has a final status: pass it to payware_poi_get_status to read that sale's transaction and outcome.
Required: POI ID, amount, currency.
Inputs: poiId (required), amount (required), currency (required), ttlSeconds, +1 more.
payware_products_create_airingA
[Merchant] Add an airing rule to a placement: up to 100 rules per placement. Example: "daily 08:00-08:30 and 15:40-16:10" is one DAILY rule with two windows. Check warnings in the response: AIRING_OVERLAP means another soundbite placement of the same product airs at the same time in an overlapping region, and a tap then is attributed to neither.
Endpoint: POST /products/{productId}/placements/{placementId}/airings (PRM plan)
Inputs: windows (required), frequency (required), productId (required), startDate (required), +11 more.
payware_products_create_placementA
[Merchant] Create a placement for a product; a product has no limit on its placements. The response carries its placementId, which goes on the medium wherever the product ID would: a QR code (its payware link, or payware:{placementId}), an NFC tag, a BLE beacon, a link, a barcode or an SMS. A bank resolving it pays for the product, and the payment is attributed to the placement. For a SOUNDBITE carrier, add airing rules so taps during the airing are attributed.
Endpoint: POST /products/{productId}/placements (PRM plan)
Inputs: name (required), medium (required), carriers (required), productId (required), +9 more.
payware_products_create_productB
[Merchant] Create a new product for inventory management and payment processing.
Product Structure: 📦 PRODUCT METADATA: name, shortDescription, longDescription, sku, upc, shippable, active, shop 💰 PRODUCT DATA (prData object): type, regularPrice, currency, overlapPriority, timeToLive, activeFrom, activeTo, timeZone ⚙️ PRODUCT OPTIONS (prOptions object): imageUrl, termsUrl, termsText
Required: name Optional: All other parameters have sensible defaults
Inputs: name (required), sku, upc, shop, +18 more.
payware_products_create_scheduleA
[Merchant] Create a price schedule for a product to manage time-based pricing. Premium (PRM) plan only: the server answers 403 on any other plan (for an ISV, the merchant's plan).
Inputs: productId (required), dateTo, dateFrom, partnerId, +6 more.
payware_products_delete_airingADestructiveIdempotent
[Merchant] Delete one airing rule.
Endpoint: DELETE /products/{productId}/placements/{placementId}/airings/{ruleId} (PRM plan)
Inputs: ruleId (required), productId (required), placementId (required), useSandbox.
payware_products_delete_audioADestructiveIdempotent
[Merchant] Delete an audio file from a product. This action cannot be undone. Premium (PRM) plan only: the server answers 403 on any other plan (for an ISV, the merchant's plan).
Inputs: audioId (required), productId (required), partnerId, privateKey, +1 more.
payware_products_delete_placementADestructiveIdempotent
[Merchant] Delete a placement. Its printed codes and its payware link stop resolving, and its ID is never reused. To stop airing and attribution but keep printed codes working, replace it with active false instead.
Endpoint: DELETE /products/{productId}/placements/{placementId} (PRM plan)
Inputs: productId (required), placementId (required), useSandbox.
payware_products_delete_productBDestructiveIdempotent
[Merchant] Delete a product from the merchant account. This action cannot be undone.
Inputs: productId (required), partnerId, privateKey, useSandbox.
payware_products_delete_scheduleADestructiveIdempotent
[Merchant] Delete a price schedule. This action cannot be undone. Premium (PRM) plan only: the server answers 403 on any other plan (for an ISV, the merchant's plan).
Inputs: productId (required), scheduleId (required), partnerId, privateKey, +1 more.
payware_products_get_airingBRead-onlyIdempotent
[Merchant] Get one airing rule.
Endpoint: GET /products/{productId}/placements/{placementId}/airings/{ruleId}
Inputs: ruleId (required), productId (required), placementId (required), useSandbox.
payware_products_get_airing_calendarARead-onlyIdempotent
[Merchant] Every airing of the merchant's placements between from and to, across all products, ordered by start time and each in its rule's time zone. Answers "what is on air this week" in one call. The range may span at most 400 days.
Endpoint: GET /placements/calendar
Inputs: to (required), from (required), useSandbox.
payware_products_get_audioARead-onlyIdempotent
[Merchant] Get detailed information about a specific audio file. Premium (PRM) plan only: the server answers 403 on any other plan (for an ISV, the merchant's plan).
Inputs: audioId (required), productId (required), partnerId, privateKey, +1 more.
payware_products_get_audiosBRead-onlyIdempotent
[Merchant] Get all registered audio files for a product. Premium (PRM) plan only: the server answers 403 on any other plan (for an ISV, the merchant's plan).
Inputs: productId (required), partnerId, privateKey, useSandbox.
payware_products_get_next_airingsARead-onlyIdempotent
[Merchant] A placement's next airings, each in its rule's time zone so daylight-saving shifts are visible. Use it to check a rule does what was meant before relying on it.
Endpoint: GET /products/{productId}/placements/{placementId}/airings/next
Inputs: productId (required), placementId (required), count, useSandbox.
payware_products_get_placementBRead-onlyIdempotent
[Merchant] Get a placement.
Endpoint: GET /products/{productId}/placements/{placementId}
Inputs: productId (required), placementId (required), useSandbox.
payware_products_get_placement_imageARead-onlyIdempotent
[Merchant] A placement's QR code (carrying the placement's payware link, https://go.payware.eu/{placementId}, which needs no API call) or Code 128 barcode (carrying the plain ID), for print. PNG and JPG come back as an image, SVG as its markup.
Endpoint: GET /products/{productId}/placements/{placementId}/image
Inputs: productId (required), placementId (required), type, format, +1 more.
payware_products_get_placement_statsARead-onlyIdempotent
[Merchant] A placement's results over [from, to): offers shown when a bank resolved its ID (resolutions), offers shown after a recognised soundbite tap (recognitions), payments started (transactions) and confirmed, and confirmed amounts by currency.
Endpoint: GET /products/{productId}/placements/{placementId}/stats (PRM plan)
Inputs: productId (required), placementId (required), to, from, +1 more.
payware_products_get_productBRead-onlyIdempotent
[Merchant] Get detailed information about a specific product by ID
Inputs: productId (required), partnerId, privateKey, useSandbox.
payware_products_get_product_imageBRead-onlyIdempotent
[Merchant] Generate a QR code or barcode image for a product.
QR Code Options: Format, border, error correction, scale, version Barcode Options: Format, module width, bar height, font size, text location
Inputs: productId (required), type, qrScale, qrBorder, +11 more.
payware_products_get_scheduleARead-onlyIdempotent
[Merchant] Get detailed information about a specific price schedule. Premium (PRM) plan only: the server answers 403 on any other plan (for an ISV, the merchant's plan).
Inputs: productId (required), scheduleId (required), partnerId, privateKey, +1 more.
payware_products_get_schedulesARead-onlyIdempotent
[Merchant] Get all price schedules for a product. Premium (PRM) plan only: the server answers 403 on any other plan (for an ISV, the merchant's plan).
Inputs: productId (required), partnerId, privateKey, useSandbox.
payware_products_list_airingsARead-onlyIdempotent
[Merchant] List a placement's airing rules. A rule is a recurrence with time windows, in an IANA time zone; a soundbite tap during an airing is attributed to the placement.
Endpoint: GET /products/{productId}/placements/{placementId}/airings
Inputs: productId (required), placementId (required), useSandbox.
payware_products_list_placementsARead-onlyIdempotent
[Merchant] List a product's placements. A placement is one way the product is distributed - a poster, a TV spot, a packaging label - with its own ID (pl + 8 characters), so every payment it starts is attributed to it. One page at a time, newest first: a product has no limit on its placements, and the response is { content, number, size, totalElements, totalPages }, so ask for the next page while number + 1 < totalPages.
Endpoint: GET /products/{productId}/placements
Changing anything here needs the PRM plan, and below it a change answers 403 ERR_UNAUTHORIZED_OPERATION; reading works on every plan, results only on PRM. A merchant that leaves PRM keeps its placements read-only, and a printed placement code then pays as its plain product with no attribution.
Inputs: productId (required), page, size, useSandbox.
payware_products_list_productsARead-onlyIdempotent
[Merchant] Get a list of all products for the merchant account
Inputs: partnerId, privateKey, useSandbox.
payware_products_register_audioA
[Merchant] Premium (PRM) plan only: the server answers 403 on any other plan (for an ISV, the merchant's plan).
Register an audio file (soundbite) for a product to enable audio-based payment initiation.
Supported formats: MP3, WAV, OGG, M4A, FLAC, AAC, WMA, MP4, MOV, up to 100 MB, holding 2 to 120 seconds of audio Note: For video files, only the audio channel is registered
Inputs: audioPath (required), productId (required), partnerId, privateKey, +1 more.
payware_products_replace_airingsADestructiveIdempotent
[Merchant] Replace all of a placement's airing rules with this list, all or nothing: when any rule is refused, nothing is saved and each refused rule is listed by its index. An empty list removes every rule. Suited to loading an agency's schedule in one call.
Endpoint: PUT /products/{productId}/placements/{placementId}/airings (PRM plan)
Inputs: rules (required), productId (required), placementId (required), useSandbox.
payware_products_update_airingADestructiveIdempotent
[Merchant] Replace one airing rule: every field is replaced, so send the whole rule. Check warnings in the response for AIRING_OVERLAP.
Endpoint: PUT /products/{productId}/placements/{placementId}/airings/{ruleId} (PRM plan)
Inputs: ruleId (required), windows (required), frequency (required), productId (required), +12 more.
payware_products_update_audioADestructiveIdempotent
[Merchant] Update audio information (title) or reassign audio to another product. Premium (PRM) plan only: the server answers 403 on any other plan (for an ISV, the merchant's plan).
Inputs: audioId (required), productId (required), title, partnerId, +3 more.
payware_products_update_placementADestructiveIdempotent
[Merchant] Replace a placement's details. Every field is replaced, so an omitted optional field is cleared - an omitted campaignId detaches it from its campaign; an omitted active keeps the current value. Get the placement first and send every value you want to keep. The placement ID does not change, so printed codes keep working.
Endpoint: PUT /products/{productId}/placements/{placementId} (PRM plan)
Inputs: name (required), medium (required), carriers (required), productId (required), +10 more.
payware_products_update_productADestructiveIdempotent
[Merchant] Update an existing product. Only provide the fields you want to change. The tool reads the product first and sends it whole: the server resets a field a partial update leaves out (active, shippable and quickPay to FALSE, type, time zone and time to live to defaults), a server defect.
Product Structure: 📦 PRODUCT METADATA: name, shortDescription, longDescription, sku, upc, shippable, active, shop 💰 PRODUCT DATA (prData object): type, regularPrice, currency, overlapPriority, timeToLive, activeFrom, activeTo, timeZone ⚙️ PRODUCT OPTIONS (prOptions object): imageUrl, termsUrl, termsText
Inputs: productId (required), sku, upc, name, +19 more.
payware_products_update_scheduleADestructiveIdempotent
[Merchant] Update an existing price schedule. Only provide fields you want to change. The tool reads the schedule (and the product's time zone) first and sends it whole: the server resets a field a partial update leaves out (the discount to 0%, the dates to today), a server defect. Premium (PRM) plan only: the server answers 403 on any other plan (for an ISV, the merchant's plan).
Inputs: productId (required), scheduleId (required), dateTo, dateFrom, +7 more.
payware_shops_listARead-onlyIdempotent
[Merchant] List the merchant outlets (shops) the caller can act on.
Endpoint: GET /shops
Use this before any call that takes a shop / shopCode. Creating a transaction, creating a
product, creating a POI and batching POIs all take one, and an invalid code is a 400
(ERR_INVALID_SHOP_CODE). Omitting it falls back to the merchant's default shop, which is a
reasonable guess for a single-outlet merchant and the wrong outlet for everyone else - the sale lands
against the wrong shop, and nothing about the response says so.
Returned per shop (server ShopDTO): code (the value to pass as shop / shopCode), name,
isDefault, ecommerce, country and the shop's label, image and terms URLs.
⚠️ Requires Standard or Premium. A Basic merchant gets 403.
Note on financial institutions: banks do not own shops. A bank principal calling this gets 403, not an empty list.
Inputs: partnerId, privateKey, useSandbox.
payware_utils_format_json_deterministicBRead-onlyIdempotent
[Merchant] Format JSON payload with deterministic key sorting for consistent SHA-256 calculation and payware API compliance
Inputs: payload (required), showComparison, calculateSHA256, validateConsistency.
payware_utils_format_requestBRead-onlyIdempotent
[Merchant] Format and validate payware API requests with proper structure and headers
Inputs: type (required), data, method, endpoint, +1 more.
payware_utils_server_infoARead-onlyIdempotent
[Merchant] Get MCP server version, status, and environment information
Inputs: includeEnvironment.
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections.
Loading tool schema changelog…
TDQS
Scored across 75 tools
Tools are organized by domain (products, placements, airings, campaigns, transactions, POI, reports, logs, auth, utils) and each generally targets a distinct resource+action, with explicit cross-references such as get_transaction_status vs get_transaction_history. A few pairs still blur: validate_jwt vs test_jwt (both JWT debugging), generate_code_example vs generate_documentation (both emit integration guidance), and the four report/export read tools require careful reading to separate. With 75 tools, an agent will occasionally misselect, but the descriptions largely disambiguate.
All names are snake_case with a payware_ prefix and a domain segment, which is readable and predictable at the top level. However the sub-convention varies by domain: products/placements/airings/campaigns use verb_noun (create_product, update_airing), while POI and shops use noun_verb (poi_create, shops_list, poi_set_price). Two tools (generate_code_example, generate_documentation) lack a domain segment entirely, breaking the pattern.
75 tools is heavy for any single agent context, and while the underlying platform is genuinely broad (payments, catalog, placements, campaigns, reporting, logging, auth), many tools are narrow Premium-only CRUD variants (five audio tools, six airing tools, nine data/report tools). The surface could be consolidated into higher-level operations without losing capability, and the sheer count forces expensive tool selection.
Coverage is deep: full CRUD for products, schedules, audio, placements, airings and campaigns, plus transaction lifecycle (create/process/status/history/cancel), POI management, reports/exports and JWT tooling. Minor gaps exist, notably no POI update/delete, no shop management beyond list, no transaction search/listing for merchants, and no refund/settlement operations — workable but not airtight.
Maintenance
Related MCP Connectors
Search PayU docs, browse the payment integration catalog, and fetch production-ready code.
Create payment orders, checkout, subscriptions & UPI via PineLabs Plural PG gateway
Create and manage checkout pages, event ticketing, forms, customers, payments and subscriptions.
Provides access to Avalara developer documentation, integration guides, and code examples
Related MCP Servers
- AlicenseAqualityDmaintenanceEnables AI agents to integrate Midtrans payments by providing comprehensive documentation, API references, and code examples for 15+ payment methods across 5 languages. Includes tools for generating charge requests, webhook handlers, and searching documentation without requiring API keys.917 PyPI1MIT
- AlicenseNot gradedqualityDmaintenanceProvides AI-ready documentation for the PayHere payment gateway, enabling access to API references, SDK guides, and documentation search through MCP tools.MIT

@payre/mcpofficial
AlicenseAqualityCmaintenanceEnables AI assistants to securely interact with Payre's Web3 payment gateway for generating crypto checkout invoices, monitoring settlements, managing payout destinations, and inspecting analytics.18MIT- FlicenseNot gradedqualityAmaintenanceEnables AI coding agents and MCP hosts to add stablecoin checkout, payment links, payment status checks, webhook verification, and webhook-based access logic to applications.-