openapi: 3.2.0
info:
version: 2.6.1
title: Moneris Products API
description: 'Moneris API Platform
[
](https://god.gw.postman.com/run-collection/25575461-f04750a0-88e9-4c83-8b58-a3aff15eeea8?action=collection%2Ffork&collection-url=entityId%3D25575461-f04750a0-88e9-4c83-8b58-a3aff15eeea8%26entityType%3Dcollection%26workspaceId%3D5d2a9a0f-57a7-441c-b2af-fe6315e80a08)'
termsOfService: https://www.moneris.com/en/legal/terms-of-use
contact:
url: https://api-developer.moneris.com
email: UnifiedAPI@moneris.com
license:
name: Moneris
url: https://developer.moneris.com/Agreements/Terms%20of%20Use
x-audience: external-public
servers:
- url: https://api.sb.moneris.io
description: Sandbox server (uses test data)
x-internal: false
- url: https://api.moneris.io
description: Production server (uses live data)
x-internal: false
tags:
- name: Products
description: Product recommendations
paths:
/onboarding/product-recommendations:
parameters:
- $ref: '#/components/parameters/apiVersion'
- $ref: '#/components/parameters/correlationId'
- $ref: '#/components/parameters/acceptLanguage'
post:
summary: List Recommended Products
operationId: getRecommenderProducts
requestBody:
required: true
content:
application/json:
schema:
$ref: '#/components/schemas/productRecommendationRequest'
tags:
- Products
description: 'Get recommender products to fetch multiple items related to a client
'
security:
- OAuth2:
- onboarding.order.read
- OAuth2:
- onboarding.order.write
- ApiKeyAuth: []
responses:
'200':
description: Successful response corresponding to the provided payload
headers:
Api-Version:
$ref: '#/components/headers/apiVersion'
X-Correlation-Id:
$ref: '#/components/headers/correlationId'
Sunset:
$ref: '#/components/headers/sunset'
X-RateLimit-Limit:
$ref: '#/components/headers/rateLimitCount'
X-RateLimit-Remaining:
$ref: '#/components/headers/rateLimitRemaining'
content:
application/json:
schema:
$ref: '#/components/schemas/productRecommendation'
example:
allowToSell: true
solutions:
- solutionIdentifier: 1
solutionName: Moneris® Go
solutionDescription: A Moneris Go terminal is ideal for merchants who want flexible functionality inside a sleek white touchscreen device.
solutionImageUrl: https://ordernow.moneris.com/landing/moneris_go/PAX_3QU.webp
solutionPrices:
- pricingLabel: Credit Card Processing Fee
pricingText: 2.65% + $0.10
- pricingLabel: Keyed-in transactions
pricingText: 2.85% + $0.30
- pricingLabel: Interac Debit processing fee
pricingText: $0.10
- pricingLabel: Monthly fee per terminal
pricingText: $9.99/month
solutionFeatures:
- description: Wireless connectivity
- description: Credit & debit payments
- description: Smart terminal
- description: Stylish and sleek design
additionalSolutionDetailsUrl: https://ordernow.moneris.com/landing/moneris-go
maximumQuantity: 1
carrierOptions:
- Rogers
- Telus
'400':
$ref: '#/components/responses/badRequest'
'401':
$ref: '#/components/responses/unauthorized'
'403':
$ref: '#/components/responses/forbidden'
'422':
$ref: '#/components/responses/unprocessableContent'
'429':
$ref: '#/components/responses/tooManyRequests'
'500':
$ref: '#/components/responses/internalServer'
'503':
$ref: '#/components/responses/serviceUnavailable'
components:
schemas:
solution:
type: object
description: An object containing all details related to a solution.
required:
- solutionIdentifier
- solutionName
- solutionDescription
- solutionImageUrl
properties:
solutionIdentifier:
type: integer
description: The unique identifier for the solution.
format: int32
solutionName:
type: string
description: The name of the solution.
solutionDescription:
type: string
description: A detailed description of the solution.
solutionImageUrl:
type: string
description: The URL of the image associated with the solution.
solutionPrices:
type: array
description: A list of pricing options associated with the solution.
items:
$ref: '#/components/schemas/solutionPricing'
solutionFeatures:
type: array
description: A list of features associated with the solution.
items:
$ref: '#/components/schemas/solutionFeature'
promotionalBlock:
type:
- string
- 'null'
description: A promotional block associated with the solution.
additionalSolutionDetailsUrl:
type:
- string
- 'null'
description: The URL for additional details about the solution.
maximumQuantity:
type: integer
description: The maximum quantity of the solution that can be purchased.
format: int32
carrierOptions:
type: array
description: A list of carrier options available for the solution.
items:
type: string
isInstore:
type: boolean
description: A boolean value indicating whether the solution is available for in-store transactions.
motoTransactionPercentage:
description: The percentage of transactions processed through mail order / telephone order.
type: number
format: decimal
minimum: 0
maximum: 100
example: 90.5
hasMultipleLocations:
type: boolean
description: A boolean value indicating whether the business has multiple locations.
directSellingPercentage:
description: The percentage of transactions processed through direct selling.
type: number
format: decimal
minimum: 0
maximum: 100
example: 90.5
isOnline:
type: boolean
description: A boolean value indicating whether the solution is available for online transactions.
solutionPricing:
type: object
description: An object containing all details related to a pricing option for a solution.
required:
- pricingLabel
- pricingText
properties:
pricingLabel:
type: string
description: The label associated with the pricing option.
pricingText:
type: string
description: The text associated with the pricing option.
partnerName:
type:
- string
- 'null'
description: The name of the partner that referred the lead to the business.
maxLength: 30
solutionFeature:
type: object
description: An object containing all details related to a feature of a solution.
required:
- description
properties:
description:
type: string
description: A detailed description of the feature.
merchantCategoryCode:
type: string
description: A four-digit code that classifies the type of business or service provided by the merchant, based on standard industry categories.
minLength: 4
maxLength: 4
example: '0742'
parameterError:
title: Parameter error
description: Request property or header related error.
type: object
properties:
parameterName:
type: string
description: Property or header name. Can contain nested path separated by '.'
example: address.postalCode
parameterValue:
type:
- string
- 'null'
description: Property or header value string representation.
example: MAP3J8
reasonCode:
type: string
description: Reason that triggered the error.
enum:
- INVALID_FORMAT
- REQUIRED_FIELD
- INVALID_VALUE
example: INVALID_FORMAT
errorMessage:
type:
- string
- 'null'
description: Human readable description of the error.
example: String 'MAP3J8' does not match the postal code pattern.
required:
- parameterName
- reasonCode
isAllowedToSell:
type: boolean
description: A boolean value indicating whether the business is allowed to sell the solution.
annualVolume:
type: integer
description: The annual volume of transactions processed by the business.
format: int32
hasExistingRelationship:
type: boolean
description: A boolean value indicating whether the business has an existing relationship with the service provider.
productRecommendation:
type: object
description: An object containing all details related to a product recommendation.
properties:
allowToSell:
type: boolean
description: A boolean value indicating whether the business is allowed to sell the solution.
solutions:
type: array
description: A list of solution items.
items:
$ref: '#/components/schemas/solution'
error:
description: Error response details.
properties:
type:
description: 'A URI reference that identifies the problem type. Ideally it should be a stable URL to the documentation of the details about this type of error but it also can be a URN. If nothing can be provided, a "about:blank" value is returned.
'
type: string
format: uri
example: https://api-developer.moneris.com/responsehandling
title:
description: 'A short, human-readable summary of the problem type. It SHOULD NOT change from occurrence to occurrence of the problem, except for purposes of localization
'
type:
- string
- 'null'
example: INSUFFICIENT_FUNDS
status:
description: 'it conveys the HTTP status code used for the convenience of the consumer.
'
type:
- integer
- 'null'
format: int32
minimum: 100
maximum: 505
detail:
description: 'A human-readable message providing more details about the error. For card errors, these messages can be shown to your users.
'
type:
- string
- 'null'
example: Funds are insufficient to execute the operation.
instance:
description: 'A URI reference that identifies the specific occurrence of the problem. Typically, this resolves to a resource that might include more details about the problem.
'
type:
- string
- 'null'
example: /payments/12f3e0a8-1d68-2b86-dd30-4ca51bb66e10
format: uri-reference
category:
description: "The type of error returned. \n - `API_ERROR`: This occurs due to an intermittent issue. \n - `IDEMPOTENCY_ERROR`: The idempotency key has already been used.\n - `INVALID_REQUEST_ERROR`: The data provided in the request is invalid.\n - `DECLINED_ERROR`: Transaction was declined by the issuer.\n - `UNAUTHORIZED_ERROR`: Caller not authenticated, or not allowed to execute the current operation.\n - `INTERNAL_SERVER_ERROR`: An internal issue with our servers has occured.\n"
enum:
- API_ERROR
- IDEMPOTENCY_ERROR
- INVALID_REQUEST_ERROR
- DECLINED_ERROR
- UNAUTHORIZED_ERROR
- INTERNAL_SERVER_ERROR
- null
type:
- string
- 'null'
example: DECLINED_ERROR
errors:
type: array
description: List of validation errors when error category is INVALID_REQUEST_ERROR.
items:
type: object
$ref: '#/components/schemas/parameterError'
example:
- parameterName: address.postalCode
parameterValue: MAP3J8
errorMessage: address.Postal code does not match regular expression
reasonCode: INVALID_FORMAT
title: API Error
type: object
required:
- type
ecommerceTransactionPercentage:
description: The percentage of transactions processed through e-commerce.
type: number
format: decimal
minimum: 0
maximum: 100
example: 90.5
province:
type: string
description: 'Province or state ISO 3166-2 code '
minLength: 1
maxLength: 3
format: iso-3166-2
example: 'ON'
apiVersion:
description: 'The endpoint''s API Version. Must be provided through headers.
'
type: string
example: '2025-08-14'
default: '2025-08-14'
hasMajorityOwnership:
type: boolean
description: A boolean value indicating whether the business has majority ownership.
productRecommendationRequest:
type: object
required:
- annualVolume
- hasMajorityOwnership
- hasExistingRelationship
- hasMultipleLocations
- locationProvince
- merchantCategoryCode
description: Recommender products payload attributes
properties:
partnerName:
$ref: '#/components/schemas/partnerName'
annualVolume:
$ref: '#/components/schemas/annualVolume'
hasMajorityOwnership:
$ref: '#/components/schemas/hasMajorityOwnership'
hasExistingRelationship:
$ref: '#/components/schemas/hasExistingRelationship'
hasMultipleLocations:
$ref: '#/components/schemas/hasMultipleLocations'
locationProvince:
$ref: '#/components/schemas/province'
merchantCategoryCode:
$ref: '#/components/schemas/merchantCategoryCode'
solutionId:
$ref: '#/components/schemas/solutionId'
isAllowedToSell:
$ref: '#/components/schemas/isAllowedToSell'
isOnline:
$ref: '#/components/schemas/isOnline'
isInstore:
$ref: '#/components/schemas/isInstore'
directSellingPercentage:
$ref: '#/components/schemas/directSellingPercentage'
motoTransactionPercentage:
$ref: '#/components/schemas/motoTransactionPercentage'
ecommerceTransactionPercentage:
$ref: '#/components/schemas/ecommerceTransactionPercentage'
solutionId:
description: A unique identifier for the solutions object.
type: integer
format: int32
example: 1
responses:
unauthorized:
description: Not authorized. The user does not have a valid API Key or Access Token.
headers:
Api-Version:
$ref: '#/components/headers/apiVersion'
X-Correlation-Id:
$ref: '#/components/headers/correlationId'
Sunset:
$ref: '#/components/headers/sunset'
X-RateLimit-Limit:
$ref: '#/components/headers/rateLimitCount'
X-RateLimit-Remaining:
$ref: '#/components/headers/rateLimitRemaining'
WWW-Authenticate:
schema:
type: string
example: Bearer, error="invalid_token"
content:
application/problem+json:
schema:
$ref: '#/components/schemas/error'
example:
type: https://developer.moneris.com/en/More/Testing/Response%20Codes
title: UNAUTHORIZED_REQUEST
status: 401
detail: null
instance: null
category: UNAUTHORIZED_ERROR
errors: []
serviceUnavailable:
description: Service Temporarily Unavailable
headers:
Api-Version:
$ref: '#/components/headers/apiVersion'
X-Correlation-Id:
$ref: '#/components/headers/correlationId'
Sunset:
$ref: '#/components/headers/sunset'
Retry-After:
$ref: '#/components/headers/retryAfter'
content:
application/problem+json:
schema:
$ref: '#/components/schemas/error'
example:
type: https://api-developer.moneris.com/responsehandling/
title: SERVICE_UNAVAILABLE
status: 503
detail: null
instance: null
category: INTERNAL_SERVER_ERROR
errors: []
forbidden:
description: Forbidden. The user does not have permission to access the requested resource.
headers:
Api-Version:
$ref: '#/components/headers/apiVersion'
X-Correlation-Id:
$ref: '#/components/headers/correlationId'
Sunset:
$ref: '#/components/headers/sunset'
X-RateLimit-Limit:
$ref: '#/components/headers/rateLimitCount'
X-RateLimit-Remaining:
$ref: '#/components/headers/rateLimitRemaining'
WWW-Authenticate:
schema:
type: string
example: Bearer, error="insufficient_scope"
content:
application/problem+json:
schema:
$ref: '#/components/schemas/error'
example:
type: https://developer.moneris.com/en/More/Testing/Response%20Codes
title: FORBIDDEN_REQUEST
status: 403
detail: null
instance: null
category: UNAUTHORIZED_ERROR
errors: []
internalServer:
description: Unexpected error.
headers:
Api-Version:
$ref: '#/components/headers/apiVersion'
X-Correlation-Id:
$ref: '#/components/headers/correlationId'
Sunset:
$ref: '#/components/headers/sunset'
X-RateLimit-Limit:
$ref: '#/components/headers/rateLimitCount'
X-RateLimit-Remaining:
$ref: '#/components/headers/rateLimitRemaining'
content:
application/problem+json:
schema:
$ref: '#/components/schemas/error'
example:
type: https://api-developer.moneris.com/responsehandling/
title: INTERNAL_SERVER_ERROR
status: 500
detail: null
instance: null
category: INTERNAL_SERVER_ERROR
errors: []
tooManyRequests:
description: Too Many Requests
headers:
Api-Version:
$ref: '#/components/headers/apiVersion'
X-Correlation-Id:
$ref: '#/components/headers/correlationId'
Sunset:
$ref: '#/components/headers/sunset'
X-RateLimit-Limit:
$ref: '#/components/headers/rateLimitCount'
X-RateLimit-Remaining:
$ref: '#/components/headers/rateLimitRemaining'
X-RateLimit-Reset:
$ref: '#/components/headers/rateLimitReset'
Retry-After:
$ref: '#/components/headers/rateLimitReset'
badRequest:
description: Bad Request.
headers:
Api-Version:
$ref: '#/components/headers/apiVersion'
X-Correlation-Id:
$ref: '#/components/headers/correlationId'
Sunset:
$ref: '#/components/headers/sunset'
X-RateLimit-Limit:
$ref: '#/components/headers/rateLimitCount'
X-RateLimit-Remaining:
$ref: '#/components/headers/rateLimitRemaining'
content:
application/problem+json:
schema:
$ref: '#/components/schemas/error'
unprocessableContent:
description: "The API cannot complete the requested action due to semantic or business validation errors. \n"
headers:
Api-Version:
$ref: '#/components/headers/apiVersion'
X-Correlation-Id:
$ref: '#/components/headers/correlationId'
Sunset:
$ref: '#/components/headers/sunset'
X-RateLimit-Limit:
$ref: '#/components/headers/rateLimitCount'
X-RateLimit-Remaining:
$ref: '#/components/headers/rateLimitRemaining'
content:
application/problem+json:
schema:
$ref: '#/components/schemas/error'
parameters:
acceptLanguage:
in: header
name: Accept-Language
description: 'This value indicates the natural language and locale that the client prefers
'
required: true
schema:
type: string
correlationId:
in: header
name: X-Correlation-Id
example: 06f1e47b-a1b5-4902-be9c-bccc506127c4
description: "Correlates a series of requests within the same flow.\n\nNote: This ID is generated by Moneris with every request or response, if it doesn't exist. \nMerchants are to echo back the value with every request that is part of the call flow.\"\n"
required: false
schema:
type: string
example: 06f1e47b-a1b5-4902-be9c-bccc506127c4
apiVersion:
in: header
name: Api-Version
required: true
example: '2024-09-17'
description: "The endpoint's API Version. \n\nMust be provided through the headers section. \n"
schema:
$ref: '#/components/schemas/apiVersion'
securitySchemes:
ApiKeyAuth:
type: apiKey
in: header
name: X-Api-Key
description: 'An API key is a token that a client provides when making API calls.
API keys are supposed to be a secret that only the client and server know about.
'
OAuth2:
type: oauth2
description: 'OAuth 2.0 is an authorization protocol that gives an API client limited access to user data on a web server.
OAuth relies on authentication scenarios, that allows the resource owner (user) to share the protected content from the server, hosting the resource, without sharing their credentials. For that purpose, an OAuth 2.0 server issues access tokens that the client applications can use to access protected resources on behalf of the resource owner.
Moneris recommends the use of OAuth 2.0 as it provides fine grained authorization levels.
'
flows:
clientCredentials:
tokenUrl: /oauth2/token
scopes:
payment.read: Grants read access to payment related APIs
payment.write: Grants read & write access to payment related APIs
refund.read: Grants read access to refunds
refund.write: Grants read & write access to refunds
customer.read: Grants read access to customer data
customer.write: Grants read & write access to customer data
kount.read: Grants read access to Kount inquiries
kount.write: Grants read & write access to Kount inquiries
onboarding.merchant.read: Grants read access to merchant onboarding related APIs
onboarding.merchant.write: Grants read & write access to merchant onboarding related APIs
onboarding.order.read: Grants read access to onboarding orders related APIs
onboarding.order.write: Grants read & write access to onboarding orders related APIs
dispute.read: Grants read access to disputes
dispute.write: Grants read & write access to disputes