openapi: 3.2.0 info: title: Ppro Merchants API version: 1.0.0 license: name: Proprietary identifier: Proprietary description: 'Operations tagged Merchants across 2 of this provider''s published API definitions: ppro-onboarding-openapi.yml, ppro-openapi-boarding-v2.yaml. Each path carries the servers of the definition it was published in.' servers: - url: https://api.sandbox.eu.ppro.com description: Production security: [] tags: - name: Merchants description: Merchant management paths: /v1/merchants: post: summary: Create a Merchant operationId: createMerchant tags: - Merchants requestBody: required: true content: application/json: schema: $ref: '#/components/schemas/CreateMerchantRequest' responses: '201': description: Merchant created successfully headers: Location: $ref: '#/components/headers/Location' content: application/json: schema: $ref: '#/components/schemas/CreateMerchantResponse' '400': $ref: '#/components/responses/BadRequest' '403': $ref: '#/components/responses/Forbidden' '404': $ref: '#/components/responses/NotFound' '405': $ref: '#/components/responses/MethodNotAllowed' '409': $ref: '#/components/responses/Conflict' '429': $ref: '#/components/responses/TooManyRequests' '500': $ref: '#/components/responses/InternalServerError' '504': $ref: '#/components/responses/GatewayTimeout' servers: - url: https://api.sandbox.eu.ppro.com description: Production /v1/merchants/{merchant-id}: get: summary: Get Merchant Details operationId: getMerchant tags: - Merchants parameters: - $ref: '#/components/parameters/merchant-id' responses: '200': description: Merchant details content: application/json: schema: $ref: '#/components/schemas/MerchantDetails' '400': $ref: '#/components/responses/BadRequest' '403': $ref: '#/components/responses/Forbidden' '404': $ref: '#/components/responses/NotFound' '405': $ref: '#/components/responses/MethodNotAllowed' '409': $ref: '#/components/responses/Conflict' '429': $ref: '#/components/responses/TooManyRequests' '500': $ref: '#/components/responses/InternalServerError' '504': $ref: '#/components/responses/GatewayTimeout' patch: summary: Update a Merchant operationId: updateMerchant tags: - Merchants parameters: - $ref: '#/components/parameters/merchant-id' requestBody: required: true content: application/json: schema: $ref: '#/components/schemas/UpdateMerchantRequest' responses: '200': description: Merchant updated successfully content: application/json: schema: $ref: '#/components/schemas/MerchantDetails' '400': $ref: '#/components/responses/BadRequest' '403': $ref: '#/components/responses/Forbidden' '404': $ref: '#/components/responses/NotFound' '405': $ref: '#/components/responses/MethodNotAllowed' '409': $ref: '#/components/responses/Conflict' '429': $ref: '#/components/responses/TooManyRequests' '500': $ref: '#/components/responses/InternalServerError' '504': $ref: '#/components/responses/GatewayTimeout' put: summary: Replace a Merchant operationId: replaceMerchant tags: - Merchants parameters: - $ref: '#/components/parameters/merchant-id' requestBody: required: true content: application/json: schema: $ref: '#/components/schemas/ReplaceMerchantRequest' responses: '200': description: Merchant replaced successfully content: application/json: schema: $ref: '#/components/schemas/MerchantDetails' '400': $ref: '#/components/responses/BadRequest' '403': $ref: '#/components/responses/Forbidden' '404': $ref: '#/components/responses/NotFound' '405': $ref: '#/components/responses/MethodNotAllowed' '409': $ref: '#/components/responses/Conflict' '429': $ref: '#/components/responses/TooManyRequests' '500': $ref: '#/components/responses/InternalServerError' '504': $ref: '#/components/responses/GatewayTimeout' delete: summary: Deactivate a Merchant operationId: deactivateMerchant tags: - Merchants parameters: - $ref: '#/components/parameters/merchant-id' responses: '204': description: Merchant deactivated or already deactivated. '400': $ref: '#/components/responses/BadRequest' '403': $ref: '#/components/responses/Forbidden' '404': $ref: '#/components/responses/NotFound' '405': $ref: '#/components/responses/MethodNotAllowed' '409': $ref: '#/components/responses/Conflict' '429': $ref: '#/components/responses/TooManyRequests' '500': $ref: '#/components/responses/InternalServerError' '504': $ref: '#/components/responses/GatewayTimeout' servers: - url: https://api.sandbox.eu.ppro.com description: Production /v1/merchants/{merchant-id}/people: get: summary: List People for Merchant operationId: listMerchantPeople tags: - Merchants parameters: - $ref: '#/components/parameters/merchant-id' responses: '200': description: List of People associated with the merchant content: application/json: schema: type: array items: $ref: '#/components/schemas/MerchantPersonDetails' '400': $ref: '#/components/responses/BadRequest' '403': $ref: '#/components/responses/Forbidden' '404': $ref: '#/components/responses/NotFound' '405': $ref: '#/components/responses/MethodNotAllowed' '409': $ref: '#/components/responses/Conflict' '429': $ref: '#/components/responses/TooManyRequests' '500': $ref: '#/components/responses/InternalServerError' '504': $ref: '#/components/responses/GatewayTimeout' post: summary: Associate a person with a Merchant operationId: associatePersonWithMerchant tags: - Merchants parameters: - $ref: '#/components/parameters/merchant-id' requestBody: required: true content: application/json: schema: $ref: '#/components/schemas/PersonLinkRequest' responses: '201': description: Person associated with merchant successfully '400': $ref: '#/components/responses/BadRequest' '403': $ref: '#/components/responses/Forbidden' '404': $ref: '#/components/responses/NotFound' '405': $ref: '#/components/responses/MethodNotAllowed' '409': $ref: '#/components/responses/Conflict' '429': $ref: '#/components/responses/TooManyRequests' '500': $ref: '#/components/responses/InternalServerError' '504': $ref: '#/components/responses/GatewayTimeout' servers: - url: https://api.sandbox.eu.ppro.com description: Production /v1/merchants/{merchant-id}/people/{person-id}: delete: summary: Dissociate a person from a Merchant operationId: dissociatePersonFromMerchant tags: - Merchants parameters: - $ref: '#/components/parameters/merchant-id' - $ref: '#/components/parameters/person-id' responses: '204': description: Person dissociated from merchant successfully '400': $ref: '#/components/responses/BadRequest' '403': $ref: '#/components/responses/Forbidden' '404': $ref: '#/components/responses/NotFound' '405': $ref: '#/components/responses/MethodNotAllowed' '409': $ref: '#/components/responses/Conflict' '429': $ref: '#/components/responses/TooManyRequests' '500': $ref: '#/components/responses/InternalServerError' '504': $ref: '#/components/responses/GatewayTimeout' servers: - url: https://api.sandbox.eu.ppro.com description: Production components: responses: InternalServerError: description: Internal Server Error content: application/json: schema: $ref: '#/components/schemas/Error' TooManyRequests: description: Too many requests content: application/json: schema: $ref: '#/components/schemas/Error' Forbidden: description: Forbidden content: application/json: schema: $ref: '#/components/schemas/Error' BadRequest: description: Bad Request content: application/json: schema: $ref: '#/components/schemas/Error' NotFound: description: Resource not found content: application/json: schema: $ref: '#/components/schemas/Error' MethodNotAllowed: description: Method not allowed content: application/json: schema: $ref: '#/components/schemas/Error' Conflict: description: Resource conflict content: application/json: schema: $ref: '#/components/schemas/Error' GatewayTimeout: description: Gateway Timeout content: application/json: schema: $ref: '#/components/schemas/Error' schemas: UpdateMerchantRequest: title: UpdateMerchantRequest type: object properties: legalEntityName: $ref: '#/components/schemas/LegalEntityName' legalEntityType: $ref: '#/components/schemas/LegalEntityType' tradeName: allOf: - $ref: '#/components/schemas/MerchantTradeName' registrationNumber: allOf: - $ref: '#/components/schemas/LegalEntityRegistrationNumber' incorporationDate: allOf: - $ref: '#/components/schemas/IncorporationDate' address: $ref: '#/components/schemas/Address' phoneNumber: allOf: - $ref: '#/components/schemas/PhoneNumber' simpleApiWebhooksUrl: allOf: - $ref: '#/components/schemas/SimpleApiWebhooksUrl' url: allOf: - $ref: '#/components/schemas/WebsiteUrl' mcc: $ref: '#/components/schemas/MerchantCategoryCode' averageTransactionValue: allOf: - $ref: '#/components/schemas/AverageTransactionValue' monthlyTransactionCount: allOf: - $ref: '#/components/schemas/MonthlyTransactionCount' currency: allOf: - $ref: '#/components/schemas/Currency' paymentDescriptor: allOf: - $ref: '#/components/schemas/PaymentDescriptor' LegalEntityType: type: string enum: - COMPANY - PARTNERSHIP - SOLE_TRADER - INDIVIDUAL - NON_PROFIT description: 'Classification of the business structure. Allowed values: COMPANY, PARTNERSHIP, SOLE_TRADER, INDIVIDUAL, NON_PROFIT.' example: COMPANY ExternalReference: type: string pattern: ^[A-Z0-9]{1,32}$ description: Unique reference, assigned by external client. example: ENTITY1234567890 PaymentDescriptor: title: PaymentDescriptor type: string pattern: ^[A-Za-z0-9.',& /+\-]{0,255}$ description: The text customers see on their bank statement for transactions from this store. example: Example LLC Store CreatedAt: type: string format: date-time description: Timestamp when the resource was created. UTC timezone. Format YYYY-MM-DDTHH:MM:SS.ssssssZ PhoneNumber: type: string pattern: ^[\+]?[0-9\s\-\(\)]{7,20}$ example: +1 234-567-8900 WebsiteUrl: type: string format: uri maxLength: 255 description: An e-commerce website or public-facing digital storefront. example: https://www.example.com LegalEntityRegistrationNumber: type: string pattern: ^[A-Za-z0-9]{1,255}$ description: A unique identifier assigned to the business upon incorporation by a government or regulatory authority. PlatformId: type: string pattern: ^([A-Z0-9]{5,32}|platform_[a-zA-Z0-9-]{21})$ description: Unique identifier for the platform example: PLATFORMID123456 MerchantCategoryCode: type: string pattern: ^[0-9]{4}$ description: Merchant Category Code assigned to the business, indicating the type of goods or services sold. example: '5411' MonthlyTransactionCount: type: integer format: int64 description: The expected or historical number of transactions processed per month. example: 1000 CreatePersonRequest: title: CreatePersonRequest type: object properties: externalPersonReference: $ref: '#/components/schemas/ExternalReference' firstName: type: string pattern: ^[\p{L}\p{M}\s'\-]{1,255}$ description: The legal given name of the person. example: John lastName: type: string pattern: ^[\p{L}\p{M}\s'\-]{1,255}$ description: The legal surname or family name of the person. example: Doe middleName: type: string pattern: ^[\p{L}\p{M}\s'\-]{1,255}$ description: An optional middle name of the person, if applicable. example: Michael nativeName: type: string pattern: ^[\p{L}\p{M}\p{Zs}'\-\.]{1,255}$ description: The person’s name in their native script (e.g., Cyrillic, Kanji), if different from Latin characters. example: 道 birthDate: type: string format: date description: The person’s birth date, in ISO-8601 format YYYY-MM-DD. example: '2000-01-01' address: $ref: '#/components/schemas/Address' email: $ref: '#/components/schemas/EmailAddress' required: - firstName - lastName - birthDate - address example: externalPersonReference: REF123 firstName: John lastName: Doe middleName: Michael nativeName: 道 birthDate: '2000-01-01' address: street: 123 Main St city: Anytown region: CA postalCode: '12345' country: US email: john.doe@example.com CreateMerchantResponse: title: CreateMerchantResponse description: Merchant created payload including initial people assignments. allOf: - $ref: '#/components/schemas/MerchantDetails' - type: object properties: people: type: array items: $ref: '#/components/schemas/MerchantPersonDetails' MerchantId: type: string pattern: ^([A-Z0-9]{5,32}|merchant_[a-zA-Z0-9-]{21})$ description: Unique identifier for the merchant example: MERCHANTID456 Error: $schema: https://json-schema.org/draft/2020-12/schema title: Error type: object properties: status: type: integer format: int32 description: HTTP status code failureMessage: type: string timestamp: type: string format: date-time description: Timestamp when the error occurred required: - status - failureMessage - timestamp MerchantDetails: title: MerchantDetails description: Merchant record as returned by Entity . allOf: - type: object properties: id: $ref: '#/components/schemas/MerchantId' pspId: $ref: '#/components/schemas/PspId' externalMerchantReference: description: Unique reference, assigned by external client. Note that the same reference cannot be used for both a Merchant and a Platform. $ref: '#/components/schemas/ExternalReference' legalEntityName: $ref: '#/components/schemas/LegalEntityName' legalEntityType: $ref: '#/components/schemas/LegalEntityType' tradeName: $ref: '#/components/schemas/MerchantTradeName' registrationNumber: $ref: '#/components/schemas/LegalEntityRegistrationNumber' incorporationDate: $ref: '#/components/schemas/IncorporationDate' address: $ref: '#/components/schemas/Address' phoneNumber: $ref: '#/components/schemas/PhoneNumber' email: $ref: '#/components/schemas/EmailAddress' simpleApiWebhooksUrl: $ref: '#/components/schemas/SimpleApiWebhooksUrl' platformId: $ref: '#/components/schemas/PlatformId' createdAt: $ref: '#/components/schemas/CreatedAt' updatedAt: $ref: '#/components/schemas/UpdatedAt' url: $ref: '#/components/schemas/WebsiteUrl' mcc: $ref: '#/components/schemas/MerchantCategoryCode' averageTransactionValue: $ref: '#/components/schemas/AverageTransactionValue' monthlyTransactionCount: $ref: '#/components/schemas/MonthlyTransactionCount' currency: $ref: '#/components/schemas/Currency' paymentDescriptor: $ref: '#/components/schemas/PaymentDescriptor' required: - id - externalMerchantReference - legalEntityName - legalEntityType - address - createdAt - updatedAt - url - mcc MerchantPersonDetails: title: MerchantPersonDetails type: object description: Person linked to a merchant with assigned relationship type. properties: relationshipType: $ref: '#/components/schemas/RelationshipType' person: $ref: '#/components/schemas/PersonDetails' required: - relationshipType - person example: relationshipType: ULTIMATE_BENEFICIAL_OWNER person: id: person_abcdefghijklmno123456 externalPersonReference: REF123 firstName: John lastName: Doe address: street: 123 Main St city: Anytown region: CA postalCode: '12345' country: US birthDate: '2000-01-01' email: john.doe@ppro.com createdAt: '2023-01-01T00:00:00Z' updatedAt: '2023-01-01T00:00:00Z' MerchantTradeName: type: string pattern: ^(?=.{1,255}$).*\S.* description: The name the business operates under in public-facing contexts. This is the "doing business as" (DBA) name and may differ from the legal name. example: Example LLC Address: title: Address type: object properties: street: type: string pattern: ^[0-9a-zA-Z\s\-\.,'/#]{1,255}$ example: 123 Main St city: type: string pattern: ^[0-9a-zA-Z\s\-\.,'/#]{1,255}$ example: Anytown region: type: string pattern: ^[0-9a-zA-Z\s\-\.,'/#]{1,255}$ example: CA postalCode: type: string pattern: ^[0-9A-Z\s\-]{1,20}$ description: 'Required for countries that use postal codes. This field can be omitted for the following country codes: AO,AI,AG,AW,BS,BZ,BJ,BM,BO,BQ,BW,CF,TD,KM,CG,CD,CK,CI,CW,DJ,DM,TL,GQ,ER,FJ,TF,GA,GM,GY,GD,HK,HM,IO,MO,MH,MS,NR,NU,NF,PW,PA,WS,KN,LC,VC,ST,SC,SL,SX,SB,SS,GS,SH,TC,TK,TO,TV,UG,AE,VA,VU,YE,ZW' example: '12345' country: $ref: '#/components/schemas/CountryCode' required: - street - city - country example: street: 123 Main St city: Anytown region: CA postalCode: '12345' country: US IncorporationDate: type: string format: date description: The date the business was legally registered or incorporated. example: '2020-01-01' PersonDetails: title: PersonDetails type: object description: Person record with audit timestamps aligned to Entity . properties: id: $ref: '#/components/schemas/PersonId' externalPersonReference: $ref: '#/components/schemas/ExternalReference' firstName: type: string pattern: ^[\p{L}\p{M}\s'\-]{1,255}$ description: The legal given name of the person. example: John lastName: type: string pattern: ^[\p{L}\p{M}\s'\-]{1,255}$ description: The legal surname or family name of the person. example: Doe middleName: type: string pattern: ^[\p{L}\p{M}\s'\-]{1,255}$ description: An optional middle name of the person, if applicable. nativeName: type: string pattern: ^[\p{L}\p{M}\p{Zs}'\-\.]{1,255}$ description: The person’s name in their native script (e.g., Cyrillic, Kanji), if different from Latin characters. birthDate: type: string format: date description: The person’s birth date, in ISO-8601 format YYYY-MM-DD. address: $ref: '#/components/schemas/Address' email: $ref: '#/components/schemas/EmailAddress' createdAt: $ref: '#/components/schemas/CreatedAt' updatedAt: $ref: '#/components/schemas/UpdatedAt' required: - id - firstName - lastName - address - createdAt - updatedAt example: id: person_abcdefghijklmno123456 externalPersonReference: REF123 firstName: John lastName: Doe address: street: 123 Main St city: Anytown region: CA postalCode: '12345' country: US birthDate: '2000-01-01' email: john.doe@ppro.com createdAt: '2023-01-01T00:00:00Z' updatedAt: '2023-01-01T00:00:00Z' LegalEntityName: type: string pattern: ^(?=.{1,255}$).*\S.* description: The officially registered name of the business as recorded in legal or governmental registries. example: Example LLC EmailAddress: type: string format: email pattern: ^.{1,255}$ description: An email address. example: john.doe@example.com CreateMerchantRequest: title: CreateMerchantRequest type: object properties: externalMerchantReference: description: Unique reference, assigned by external client. Note that the same reference cannot be used for both a Merchant and a Platform. $ref: '#/components/schemas/ExternalReference' legalEntityName: $ref: '#/components/schemas/LegalEntityName' legalEntityType: $ref: '#/components/schemas/LegalEntityType' tradeName: $ref: '#/components/schemas/MerchantTradeName' registrationNumber: $ref: '#/components/schemas/LegalEntityRegistrationNumber' incorporationDate: $ref: '#/components/schemas/IncorporationDate' address: $ref: '#/components/schemas/Address' phoneNumber: $ref: '#/components/schemas/PhoneNumber' people: type: array items: $ref: '#/components/schemas/CreateMerchantPersonRequest' simpleApiWebhooksUrl: $ref: '#/components/schemas/SimpleApiWebhooksUrl' platformId: description: Connect the merchant to a platform. $ref: '#/components/schemas/PlatformId' pspId: description: Connect the merchant to a PSP. Only for PSP customers. $ref: '#/components/schemas/PspId' url: $ref: '#/components/schemas/WebsiteUrl' mcc: $ref: '#/components/schemas/MerchantCategoryCode' averageTransactionValue: $ref: '#/components/schemas/AverageTransactionValue' monthlyTransactionCount: $ref: '#/components/schemas/MonthlyTransactionCount' currency: $ref: '#/components/schemas/Currency' paymentDescriptor: $ref: '#/components/schemas/PaymentDescriptor' required: - externalMerchantReference - legalEntityName - legalEntityType - address - url - mcc Currency: type: string pattern: ^[A-Z]{3}$ description: ISO-4217 currency code (e.g., EUR, USD) example: EUR PersonId: type: string pattern: ^person_[a-zA-Z0-9-]{21}$ description: Unique identifier for the person example: person_abcdefghijklmno123456 RelationshipType: type: string enum: - DIRECTOR - ULTIMATE_BENEFICIAL_OWNER description: The relationship type of the person in relation to the business (e.g., DIRECTOR, ULTIMATE_BENEFICIAL_OWNER) example: DIRECTOR ReplaceMerchantRequest: title: ReplaceMerchantRequest type: object properties: legalEntityName: $ref: '#/components/schemas/LegalEntityName' legalEntityType: $ref: '#/components/schemas/LegalEntityType' tradeName: $ref: '#/components/schemas/MerchantTradeName' registrationNumber: $ref: '#/components/schemas/LegalEntityRegistrationNumber' incorporationDate: $ref: '#/components/schemas/IncorporationDate' address: $ref: '#/components/schemas/Address' phoneNumber: $ref: '#/components/schemas/PhoneNumber' simpleApiWebhooksUrl: $ref: '#/components/schemas/SimpleApiWebhooksUrl' url: $ref: '#/components/schemas/WebsiteUrl' mcc: $ref: '#/components/schemas/MerchantCategoryCode' averageTransactionValue: $ref: '#/components/schemas/AverageTransactionValue' monthlyTransactionCount: $ref: '#/components/schemas/MonthlyTransactionCount' currency: $ref: '#/components/schemas/Currency' paymentDescriptor: $ref: '#/components/schemas/PaymentDescriptor' required: - legalEntityName - legalEntityType - address - url - mcc PersonLinkRequest: title: PersonLinkRequest description: Request payload to associate an existing person with a merchant. type: object properties: personId: $ref: '#/components/schemas/PersonId' relationshipType: $ref: '#/components/schemas/RelationshipType' required: - personId - relationshipType AverageTransactionValue: type: number description: The typical value of a single transaction. Major units, example 50.00 example: 50 UpdatedAt: type: string format: date-time description: Timestamp when the resource was last updated. UTC timezone. Format YYYY-MM-DDTHH:MM:SS.ssssssZ PspId: type: string pattern: ^([a-zA-Z0-9]{3,41}|psp_[a-zA-Z0-9-]{21})$ description: Unique identifier for the PSP example: psp_abcdefghijklmno123456 CreateMerchantPersonRequest: title: CreateMerchantPersonRequest type: object properties: relationshipType: $ref: '#/components/schemas/RelationshipType' personId: $ref: '#/components/schemas/PersonId' description: Unique identifier for the existing person to assign. Do not provide if creating a new person and attach. person: $ref: '#/components/schemas/CreatePersonRequest' description: Object containing the details for the new person to create and attach. Do not provide if attaching an existing person." required: - relationshipType example: relationshipType: ULTIMATE_BENEFICIAL_OWNER person: externalPersonReference: REF123 firstName: John lastName: Doe middleName: Michael nativeName: 道 birthDate: '2000-01-01' address: street: 123 Main St city: Anytown region: CA postalCode: '12345' country: US email: john.doe@example.com SimpleApiWebhooksUrl: type: string format: uri maxLength: 255 description: The endpoint where Simple API (v1) event webhooks should be sent. example: https://www.example.com/webhook CountryCode: type: string pattern: ^[A-Z]{2}$ description: ISO 3166-1 alpha-2 Country Code example: US parameters: merchant-id: name: merchant-id in: path required: true schema: $ref: '#/components/schemas/MerchantId' person-id: name: person-id in: path required: true schema: $ref: '#/components/schemas/PersonId' headers: Location: description: Path of the created resource. schema: type: string format: uri-reference example: /api/merchants/ABC123XYZ x-refined-from: - ppro-onboarding-openapi.yml - ppro-openapi-boarding-v2.yaml