Pinch Merchants API
Payfac-as-a-Service / Managed Merchants — create sub-merchant accounts under your own credentials, update merchant details, list managed merchants, and upload compliance documents; 3 paths / 4 operations.
Payfac-as-a-Service / Managed Merchants — create sub-merchant accounts under your own credentials, update merchant details, list managed merchants, and upload compliance documents; 3 paths / 4 operations.
openapi: 3.1.0
info:
title: pinch-api-merchants
version: '2020.1'
servers:
- url: https://api.getpinch.com.au/test
security:
- sec0: []
paths:
/merchants/managed:
post:
summary: Create Managed Merchant
description: ''
operationId: create-managed-merchant
requestBody:
content:
application/json:
schema:
type: object
required:
- companyName
- companyEmail
- bankAccountRoutingNumber
- bankAccountNumber
- contacts
- ipAddress
- userAgent
properties:
companyName:
type: string
description: Full company name
legalEntityName:
type: string
companyEmail:
type: string
description: Can be a general email for the company rather than a person
companyPhone:
type: string
description: General phone number for the company
companyWebsiteUrl:
type: string
companyRegistrationNumber:
type: string
bankAccountName:
type: string
description: Account Name for the disbursement account
bankAccountRoutingNumber:
type: string
description: BSB for the disbursement account. Should be 6 digits excluding spaces or
dashes.
bankAccountNumber:
type: string
description: Account Number for the disbursement account. Should be between 3 and 9
digits excluding dashes and spaces.
streetAddress:
type: string
description: Primary address information
suburb:
type: string
description: Primary address information
state:
type: string
description: Primary address information
postcode:
type: string
description: Primary address information
country:
type: string
bankStatementLabel:
type: string
natureOfBusiness:
type: string
organisationType:
type: string
notes:
type: string
contacts:
type: array
description: At least 1 contact is required
items:
properties:
firstName:
type: string
lastName:
type: string
email:
type: string
contactType:
type: string
enum:
- owner
- director
- shareholder
- executive
phone:
type: string
streetAddress:
type: string
suburb:
type: string
postcode:
type: string
state:
type: string
country:
type: string
dob:
type: string
description: Recommended ISO format (yyyy-mm-dd)
format: date
isPrimaryContact:
type: boolean
required:
- email
- contactType
- isPrimaryContact
type: object
ipAddress:
type: string
description: The external IP Address of the user creating the merchant
userAgent:
type: string
description: The User Agent of the user creating the merchant
merchantIdentifiers:
type: array
description: Optional list of Identifiers for the Merchant in external providers.
items:
properties:
merchantIdentifier:
type: string
description: The external identifier of the merchant
identityProvider:
type: string
description: The external provider where this identifier is from
enum:
- fiserv
- bnz
- cybersource
type: object
reportingIdentifier:
type: string
description: Identifier to be used on Daily/Monthly reporting
timeZone:
type: string
description: Merchant timezone in tz format (See [tz list](https://en.wikipedia.org/wiki/List_of_tz_database_time_zones))
examples:
Request Example:
value:
companyName: Test Managed Company
legalEntityName: null
companyEmail: test.managed.company@mailinator.com
companyPhone: null
companyWebsiteUrl: null
companyRegistrationNumber: null
bankAccountRoutingNumber: '000000'
bankAccountNumber: '000000000'
bankAccountName: Test Managed Account
streetAddress: null
suburb: null
state: null
postcode: null
country: AU
bankStatementLabel: ''
natureOfBusiness: null
organisationType: ''
notes: ''
contacts:
- isPrimaryContact: false
firstName: ''
lastName: ''
email: ''
phone: null
streetAddress: null
suburb: null
postcode: null
state: null
country: null
dob: null
governmentNumberSupplied: false
contactType: ''
ownership: null
jobTitle: null
responses:
'200':
description: '200'
content:
application/json:
examples:
Result:
value: "{\n \"id\": \"mch_XXXXXXX\",\n \"testMerchantId\": \"mch_test_XXXXX\"\
,\n \"testOnlyMerchant\": true,\n \"companyName\": \"Test Managed Company\"\
,\n \"legalEntityName\": null,\n \"companyEmail\": \"test.managed.company@mailinator.com\"\
,\n \"companyPhone\": null,\n \"companyWebsiteUrl\": null,\n \"companyRegistrationNumber\"\
: null,\n \"bankAccountRoutingNumber\": \"000000\",\n \"bankAccountNumber\"\
: \"000000000\",\n \"bankAccountName\": \"Test Managed Account\",\n \"streetAddress\"\
: null,\n \"suburb\": null,\n \"state\": null,\n \"postcode\": null,\n \
\ \"country\": \"AU\",\n \"bankStatementLabel\": \"\",\n \"createdDateUtc\"\
: \"2021-04-21T02:08:27.7128967Z\",\n \"natureOfBusiness\": null,\n \"organisationType\"\
: \"\",\n \"compliance\": {\n \"merchantNotes\": \"New Merchant Created\"\
,\n \"propertyErrors\": null,\n \"complianceOfficerNotes\": null,\n\
\ \"status\": \"new\",\n \"submissionDate\": \"2021-04-21T02:08:27.8146977Z\"\
,\n \"decisionDate\": null,\n \"liveEnabled\": false,\n \"transactionsEnabled\"\
: false,\n \"settlementsEnabled\": false\n },\n \"contacts\": [\n \
\ {\n \"id\": \"con_XXXXXXXXXXXXXX\",\n \"isPrimaryContact\"\
: true,\n \"firstName\": \"\",\n \"lastName\": \"\",\n \
\ \"email\": \"\",\n \"phone\": null,\n \"streetAddress\"\
: null,\n \"suburb\": null,\n \"postcode\": null,\n \
\ \"state\": null,\n \"country\": null,\n \"dob\": null,\n\
\ \"governmentNumberSupplied\": false,\n \"contactType\": \"\
owner\",\n \"ownership\": null,\n \"jobTitle\": null\n \
\ }\n ]\n}"
schema:
type: object
properties:
id:
type: string
example: mch_XXXXXXX
testMerchantId:
type: string
example: mch_test_XXXXX
testOnlyMerchant:
type: boolean
example: true
default: true
companyName:
type: string
example: Test Managed Company
legalEntityName: {}
companyEmail:
type: string
example: test.managed.company@mailinator.com
companyPhone: {}
companyWebsiteUrl: {}
companyRegistrationNumber: {}
bankAccountRoutingNumber:
type: string
example: '000000'
bankAccountNumber:
type: string
example: '000000000'
bankAccountName:
type: string
example: Test Managed Account
streetAddress: {}
suburb: {}
state: {}
postcode: {}
country:
type: string
example: AU
bankStatementLabel:
type: string
example: ''
createdDateUtc:
type: string
example: '2021-04-21T02:08:27.7128967Z'
natureOfBusiness: {}
organisationType:
type: string
example: ''
compliance:
type: object
properties:
merchantNotes:
type: string
example: New Merchant Created
propertyErrors: {}
complianceOfficerNotes: {}
status:
type: string
example: new
submissionDate:
type: string
example: '2021-04-21T02:08:27.8146977Z'
decisionDate: {}
liveEnabled:
type: boolean
example: false
default: true
transactionsEnabled:
type: boolean
example: false
default: true
settlementsEnabled:
type: boolean
example: false
default: true
contacts:
type: array
items:
type: object
properties:
id:
type: string
example: con_XXXXXXXXXXXXXX
isPrimaryContact:
type: boolean
example: true
default: true
firstName:
type: string
example: ''
lastName:
type: string
example: ''
email:
type: string
example: ''
phone: {}
streetAddress: {}
suburb: {}
postcode: {}
state: {}
country: {}
dob: {}
governmentNumberSupplied:
type: boolean
example: false
default: true
contactType:
type: string
example: owner
ownership: {}
jobTitle: {}
'400':
description: '400'
content:
application/json:
examples:
Result:
value: "[\n {\n \"propertyName\": \"CompanyName\",\n \"errorMessage\"\
: \"'Company Name' must not be empty.\",\n \"attemptedValue\": \"\",\n \
\ \"customState\": null,\n \"severity\": 0,\n \"errorCode\": \"NotEmptyValidator\"\
,\n \"formattedMessageArguments\": [],\n \"formattedMessagePlaceholderValues\"\
: {\n \"PropertyName\": \"Company Name\",\n \"PropertyValue\"\
: \"\"\n },\n \"resourceName\": \"NotEmptyValidator\"\n },\n {\n\
\ \"propertyName\": \"CompanyEmail\",\n \"errorMessage\": \"'Company\
\ Email' must not be empty.\",\n \"attemptedValue\": \"\",\n \"customState\"\
: null,\n \"severity\": 0,\n \"errorCode\": \"NotEmptyValidator\",\n\
\ \"formattedMessageArguments\": [],\n \"formattedMessagePlaceholderValues\"\
: {\n \"PropertyName\": \"Company Email\",\n \"PropertyValue\"\
: \"\"\n },\n \"resourceName\": \"NotEmptyValidator\"\n },\n {\n\
\ \"propertyName\": \"CompanyEmail\",\n \"errorMessage\": \"'Company\
\ Email' is not a valid email address.\",\n \"attemptedValue\": \"\",\n \
\ \"customState\": null,\n \"severity\": 0,\n \"errorCode\": \"\
EmailValidator\",\n \"formattedMessageArguments\": [],\n \"formattedMessagePlaceholderValues\"\
: {\n \"PropertyName\": \"Company Email\",\n \"PropertyValue\"\
: \"\"\n },\n \"resourceName\": \"EmailValidator\"\n },\n {\n\
\ \"propertyName\": \"BankAccountRoutingNumber\",\n \"errorMessage\"\
: \"'Bank Account Routing Number' must not be empty.\",\n \"attemptedValue\"\
: \"\",\n \"customState\": null,\n \"severity\": 0,\n \"errorCode\"\
: \"NotEmptyValidator\",\n \"formattedMessageArguments\": [],\n \"formattedMessagePlaceholderValues\"\
: {\n \"PropertyName\": \"Bank Account Routing Number\",\n \"\
PropertyValue\": \"\"\n },\n \"resourceName\": \"NotEmptyValidator\"\
\n },\n {\n \"propertyName\": \"BankAccountNumber\",\n \"errorMessage\"\
: \"'Bank Account Number' must not be empty.\",\n \"attemptedValue\": \"\"\
,\n \"customState\": null,\n \"severity\": 0,\n \"errorCode\"\
: \"NotEmptyValidator\",\n \"formattedMessageArguments\": [],\n \"formattedMessagePlaceholderValues\"\
: {\n \"PropertyName\": \"Bank Account Number\",\n \"PropertyValue\"\
: \"\"\n },\n \"resourceName\": \"NotEmptyValidator\"\n }\n]"
schema:
type: array
items:
type: object
properties:
propertyName:
type: string
example: CompanyName
errorMessage:
type: string
example: '''Company Name'' must not be empty.'
attemptedValue:
type: string
example: ''
customState: {}
severity:
type: integer
example: 0
default: 0
errorCode:
type: string
example: NotEmptyValidator
formattedMessageArguments:
type: array
formattedMessagePlaceholderValues:
type: object
properties:
PropertyName:
type: string
example: Company Name
PropertyValue:
type: string
example: ''
resourceName:
type: string
example: NotEmptyValidator
deprecated: false
x-readme:
code-samples:
- language: csharp
code: "var result = await api.Merchant.CreateManagedMerchant(new ManagedMerchantCreateOptions()\n\
{\n \tCompanyName = \"Ben's Whitelabling\",\n\t CompanyEmail = \"benwhitelabel@mailinator.com\"\
,\n\t\tBsb = \"012-000\",\n\t\tAccountNumber = \"123456\",\n\t\tContactEmail = \"benwhitelabel@mailinator.com\"\
,\n\t\tContactFirstName = \"Ben\",\n \tContactLastName = \"Whitelabel\"\n});"
samples-languages:
- csharp
get:
summary: List Managed Merchants
description: ''
operationId: list-managed-merchants
responses:
'200':
description: '200'
content:
application/json:
examples:
Result:
value: "[\n {\n \"id\": \"mch_XXXXX\",\n \"testMerchantId\": \"mch_test_XXXX\"\
,\n \"testOnlyMerchant\": true,\n \"companyName\": \"Test Managed Company\"\
,\n \"legalEntityName\": null,\n \"companyEmail\": \"test.managed.company@mailinator.com\"\
,\n \"companyPhone\": null,\n \"companyWebsiteUrl\": null,\n \
\ \"companyRegistrationNumber\": null,\n \"bankAccountRoutingNumber\": \"000000\"\
,\n \"bankAccountNumber\": \"000000000\",\n \"bankAccountName\": \"\
Test Managed Account\",\n \"streetAddress\": null,\n \"suburb\": null,\n\
\ \"state\": null,\n \"postcode\": null,\n \"country\": \"AU\"\
,\n \"bankStatementLabel\": \"\",\n \"createdDateUtc\": \"2021-04-21T02:08:27.7128967\"\
,\n \"natureOfBusiness\": null,\n \"organisationType\": \"\",\n \
\ \"compliance\": {\n \"merchantNotes\": \"New Merchant Created\",\n\
\ \"propertyErrors\": null,\n \"complianceOfficerNotes\": null,\n\
\ \"status\": \"new\",\n \"submissionDate\": \"2021-04-21T02:08:27.8146977Z\"\
,\n \"decisionDate\": null,\n \"liveEnabled\": false,\n \
\ \"transactionsEnabled\": false,\n \"settlementsEnabled\": false\n\
\ },\n \"contacts\": [\n {\n \"id\": \"con_XXXXX\"\
,\n \"isPrimaryContact\": true,\n \"firstName\": \"\"\
,\n \"lastName\": \"\",\n \"email\": \"\",\n \
\ \"phone\": null,\n \"streetAddress\": null,\n \
\ \"suburb\": null,\n \"postcode\": null,\n \"state\"\
: null,\n \"country\": null,\n \"dob\": null,\n \
\ \"governmentNumberSupplied\": false,\n \"contactType\"\
: \"owner\",\n \"ownership\": null,\n \"jobTitle\":\
\ null\n }\n ]\n }\n]"
schema:
type: array
items:
type: object
properties:
id:
type: string
example: mch_XXXXX
testMerchantId:
type: string
example: mch_test_XXXX
testOnlyMerchant:
type: boolean
example: true
default: true
companyName:
type: string
example: Test Managed Company
legalEntityName: {}
companyEmail:
type: string
example: test.managed.company@mailinator.com
companyPhone: {}
companyWebsiteUrl: {}
companyRegistrationNumber: {}
bankAccountRoutingNumber:
type: string
example: '000000'
bankAccountNumber:
type: string
example: '000000000'
bankAccountName:
type: string
example: Test Managed Account
streetAddress: {}
suburb: {}
state: {}
postcode: {}
country:
type: string
example: AU
bankStatementLabel:
type: string
example: ''
createdDateUtc:
type: string
example: '2021-04-21T02:08:27.7128967'
natureOfBusiness: {}
organisationType:
type: string
example: ''
compliance:
type: object
properties:
merchantNotes:
type: string
example: New Merchant Created
propertyErrors: {}
complianceOfficerNotes: {}
status:
type: string
example: new
submissionDate:
type: string
example: '2021-04-21T02:08:27.8146977Z'
decisionDate: {}
liveEnabled:
type: boolean
example: false
default: true
transactionsEnabled:
type: boolean
example: false
default: true
settlementsEnabled:
type: boolean
example: false
default: true
contacts:
type: array
items:
type: object
properties:
id:
type: string
example: con_XXXXX
isPrimaryContact:
type: boolean
example: true
default: true
firstName:
type: string
example: ''
lastName:
type: string
example: ''
email:
type: string
example: ''
phone: {}
streetAddress: {}
suburb: {}
postcode: {}
state: {}
country: {}
dob: {}
governmentNumberSupplied:
type: boolean
example: false
default: true
contactType:
type: string
example: owner
ownership: {}
jobTitle: {}
'400':
description: '400'
content:
application/json:
examples:
Result:
value: '{}'
schema:
type: object
properties: {}
deprecated: false
/merchants/update:
post:
summary: Update Merchant
description: ''
operationId: update-merchant
requestBody:
content:
application/json:
schema:
type: object
properties:
companyName:
type: string
legalEntityName:
type: string
companyEmail:
type: string
companyPhone:
type: string
companyWebsiteUrl:
type: string
companyRegistrationNumber:
type: string
bankAccountRoutingNumber:
type: string
bankAccountNumber:
type: string
bankAccountName:
type: string
streetAddress:
type: string
suburb:
type: string
state:
type: string
postcode:
type: string
country:
type: string
bankStatementLabel:
type: string
natureOfBusiness:
type: string
organisationType:
type: string
notes:
type: string
contacts:
type: array
items:
properties:
firstName:
type: string
lastName:
type: string
email:
type: string
contactType:
type: string
enum:
- owner
- director
- shareholder
- executive
phone:
type: string
streetAddress:
type: string
suburb:
type: string
postcode:
type: string
state:
type: string
country:
type: string
dob:
type: string
description: Recommended ISO format (yyyy-mm-dd)
format: date
isPrimaryContact:
type: boolean
required:
- email
- contactType
- isPrimaryContact
type: object
required:
- companyName
- companyEmail
examples:
Request Example:
value:
companyName: ''
legalEntityName: null
companyEmail: ''
companyPhone: null
companyWebsiteUrl: null
companyRegistrationNumber: null
bankAccountRoutingNumber: ''
bankAccountNumber: ''
bankAccountName: ''
streetAddress: null
suburb: null
state: null
postcode: null
country: AU
bankStatementLabel: ''
natureOfBusiness: null
organisationType: ''
notes: ''
contacts:
- id: con_
isPrimaryContact: false
firstName: ''
lastName: ''
email: ''
phone: null
streetAddress: null
suburb: null
postcode: null
state: null
country: null
dob: null
governmentNumberSupplied: false
contactType: ''
ownership: null
jobTitle: null
responses:
'200':
description: '200'
content:
application/json:
examples:
Result:
value: "{\n \"id\": \"mch_XXXXXX\",\n \"testMerchantId\": \"mch_test_XXXXX\",\n\
\ \"testOnlyMerchant\": false,\n \"companyName\": \"Test Merchant 123\",\n \
\ \"legalEntityName\": null,\n \"companyEmail\": \"test.merchant@mailinator.com\"\
,\n \"companyPhone\": null,\n \"companyWebsiteUrl\": null,\n \"companyRegistrationNumber\"\
: null,\n \"bankAccountRoutingNumber\": \"000000\",\n \"bankAccountNumber\"\
: \"000000000\",\n \"bankAccountName\": \"Test Bank Account\",\n \"streetAddress\"\
: null,\n \"suburb\": null,\n \"state\": null,\n \"postcode\": null,\n \
\ \"country\": \"AU\",\n \"bankStatementLabel\": \"TEST MERCHANT\",\n \"createdDateUtc\"\
: \"2021-04-14T00:30:18.226759\",\n \"logoUrl\": null,\n \"natureOfBusiness\"\
: null,\n \"organisationType\": \"\",\n \"compliance\": {\n \"merchantNotes\"\
: \"New Merchant Created\",\n \"propertyErrors\": null,\n \"complianceOfficerNotes\"\
: null,\n \"status\": \"new\",\n \"submissionDate\": \"2021-04-14T00:30:18.8283947Z\"\
,\n \"decisionDate\": null,\n \"liveEnabled\": false,\n \"transactionsEnabled\"\
: false,\n \"settlementsEnabled\": false\n },\n \"contacts\": [\n \
\ {\n \"id\": \"con_XXXXXX\",\n \"isPrimaryContact\": true,\n\
\ \"firstName\": \"Test\",\n \"lastName\": \"Contact\",\n \
\ \"email\": \"test.contact@mailinator.com\",\n \"phone\": null,\n\
\ \"streetAddress\": null,\n \"suburb\": null,\n \
\ \"postcode\": null,\n \"state\": null,\n \"country\": null,\n\
# --- truncated at 32 KB (48 KB total) ---
# Full source: https://raw.githubusercontent.com/api-evangelist/pinch-payments/refs/heads/main/openapi/pinch-payments-merchants.yml