Fat Zebra Merchants API

The Merchants API from Fat Zebra — 7 operation(s) for merchants.

Operations 10

POST /merchants FDMS TPP Merchant Onboarding #
GET /merchants List merchants #
POST /merchants/onboard Onboard merchants (internal) #
GET /merchants/{username} Show a merchant #
PATCH /merchants/{username} Update a merchant #
PUT /merchants/{username} Update a merchant (alias for PATCH) #
POST /merchants/{username}/activate Activate a merchant #
POST /merchants/{username}/suspend Suspend a merchant #
POST /merchants/{username}/cancel Cancel a merchant #
POST /merchants/{username}/credentials/rotate Rotate a merchant's credentials #

Work with this as data

Every API here is available over the APIs.io API and to AI agents over MCP.

MCP server

One button, every client — Claude, Cursor, VS Code and the rest.

https://apis.io/mcp

Tools for apis

7 MCP tools reach this
  • find_apisBrowse and filter every API in the catalog.
  • get_api_artifactsOne API's artifacts, grouped by type.
  • get_openapiThe primary OpenAPI for this API.
  • find_similar_apisAPIs that look like this one.
  • apis_io_searchSTART HERE — APIs, providers and tags for one query, each with its total.
  • resolveTurn a domain, URL or GitHub org into the provider it belongs to.
  • find_cohortsEvery scored population of providers in the catalog.
All 92 tools →

Call it yourself

curl for this page
This API
curl "https://apis.io/api/v1/apis/fat-zebra-merchants-api"
All apis
curl "https://apis.io/api/v1/apis?limit=25"

Discovery needs no key. Ratings and market analysis are Pro.

Get an API key

Free tier, no email required.

A second provider on the same verified email joins the account you already have.

OpenAPI Specification

fat-zebra-merchants-api-openapi.yml Raw ↑
openapi: 3.2.0
info:
  title: Fat Zebra Merchants API
  version: '1.0'
  description: 'Operations tagged Merchants across 2 of this provider''s published API definitions: fat-zebra-fdms-tpp-merchant-onboarding.json, fat-zebra-partner.json. Each path carries the servers of the definition it was published in.'
servers:
- url: https://acquiring-sandbox.fatzebra.com.au/api/v1
- url: https://gateway.pmnts.io/v2/partners
  description: Production
- url: https://gateway.pmnts-sandbox.io/v2/partners
  description: Sandbox
- url: https://gateway.pmnts-staging.io/v2/partners
  description: Staging
- url: https://gateway.test/v2/partners
  description: Local development
tags:
- name: Merchants
paths:
  /merchants:
    post:
      summary: FDMS TPP Merchant Onboarding
      description: ''
      operationId: onboard-a-merchant
      requestBody:
        content:
          application/json:
            schema:
              type: object
              properties:
                name:
                  type: string
                  description: Merchant Name
                trading_name:
                  type: string
                  description: Registered Trading Name (Free form text - 22 digit No special characters)
                legal_name:
                  type: string
                  description: Registered Legal Business Name (Free form text - 35 limitations No special characters)
                business_number:
                  type: string
                  description: Australian Business Number
                company_number:
                  type: string
                  description: Australian Company Number
                contact_website:
                  type: string
                  description: Company Website
                business_type:
                  type: string
                  description: Option that best describes the business (sole trader, partnership, corporation)
                merchant_category_code:
                  type: string
                  description: Merchant Category Code which best matches Customer type
                ecommerce_enabled:
                  type: boolean
                  description: Yes or No, if they are an ecommerce merchant then yes else no
                trading_address_contact_name:
                  type: string
                trading_address_line_1:
                  type: string
                trading_address_line_2:
                  type: string
                trading_address_line_3:
                  type: string
                trading_address_line_4:
                  type: string
                trading_address_city:
                  type: string
                trading_address_state:
                  type: string
                trading_address_postcode:
                  type: string
                trading_address_country:
                  type: string
                legal_address_contact_name:
                  type: string
                legal_address_line_1:
                  type: string
                legal_address_line_2:
                  type: string
                legal_address_line_3:
                  type: string
                legal_address_line_4:
                  type: string
                legal_address_city:
                  type: string
                legal_address_state:
                  type: string
                legal_address_postcode:
                  type: string
                legal_address_country:
                  type: string
                signed_date:
                  type: string
                  description: Date of signed agreement
                  format: date
                total_annual_cash_or_credit_debit_turnover:
                  type: integer
                  description: Annual business turnover
                  format: int32
                total_annual_credit_turnover:
                  type: integer
                  description: Annual Credit Card turnover
                  format: int32
                average_ticket_or_sales_amount:
                  type: integer
                  description: Average sale size
                  format: int32
                card_present:
                  type: boolean
                  description: Is Merchant Card Present
                deposit_required:
                  type: boolean
                  description: Deposit Required
                deposit_percentage:
                  type: integer
                  format: int32
                average_delivery_time:
                  type: integer
                  format: int32
                recurring_transactions:
                  type: boolean
                terminal_type:
                  type: string
                config_code:
                  type: string
                term_quantity:
                  type: integer
                  format: int32
      responses:
        '200':
          description: '200'
          content:
            application/json:
              examples:
                Result:
                  value: '{}'
              schema:
                type: object
                properties: {}
        '400':
          description: '400'
          content:
            application/json:
              examples:
                Result:
                  value: '{}'
              schema:
                type: object
                properties: {}
      deprecated: false
      x-readme:
        code-samples:
        - language: curl
          code: "curl https://acquiring-sandbox.fatzebra.com.au/api/v1/merchants\n  {\n\t\"name\":\"test\",\n\t\"display_name\":\"test\",\n\t\"merchant_id\":\"1234567890123\",\n\t\"username\":\"testmerchant21e\",\n\t\"trading_name\":\"Joes Computers\",\n\t\"legal_name\":\"Joe Sampson IT\",\n\t\"business_number\":\"89154014777\",\n\t\"company_number\":\"343455432\",\n\t\"merchant_category_code\":\"8999\",\n\t\"timezone\":\"Sydney\",\n\t\"merchant_bank\":\"FDMS Australia\",\n\t\"currencies\":\"AUD\",\n\t\"enable_backup\":\"false\"\n\t\"card_acceptor_name\":\"Joes Computers\",\n\t\"card_acceptor_location\":\"Sydney\",\n\t\"card_acceptor_country\":\"AU\",\n\t\"trading_phone_number\":\"0298932425\",\n\t\"trading_email\":\"joe@joescomputers.com.au\",\n\t\"contact_website\":\"test.com\",\n\t\"type_of_business\":\"corporation\",\n\t\"trading_address_contact_name\":\"Joes Computers\",\n\t\"trading_address_line_1\":\"18 Anderson Lane\",\n\t\"trading_address_line_2\":null,\n\t\"trading_address_line_3\":null,\n\t\"trading_address_city\":\"Sydney\",\n\t\"trading_address_state\":\"NSW\",\n\t\"trading_address_postcode\":\"2000\",\n\t\"trading_address_country\":\"Australia\",\n\t\"ecommerce_enabled\":\"true\",\n\t\"legal_address_contact_name\":\"Joe Joe\",\n\t\"legal_address_line_1\":\"18 Anderson Lane\",\n\t\"legal_address_line_2\":null,\n\t\"legal_address_line_3\":null,\n\t\"legal_address_city\":\"Sydney\",\n\t\"legal_address_state\":\"NSW\",\n\t\"legal_address_postcode\":\"2000\",\n\t\"legal_address_country\":\"Australia\",\n\t\"signed_date\":\"2019-01-01\",\n\t\"total_annual_cash_or_credit_debit_turnover\":\"1000000\",\n\t\"total_annual_credit_turnover\":\"500000\",\n\t\"average_ticket_or_sales_amount\":\"200\",\n\t\"card_present\":\"false\",\n\t\"deposit_required\":\"false\",\n\t\"deposit_percentage\":\"0\",\n\t\"average_delivery_time\":\"7\",\n\t\"recurring_transactions\":\"false\",\n\t\"terminal_type\":\"519\",\n\t\"config_code\":\"Retail\",\n\t\"term_quantity\":\"1\",\n\t\"eftpos_processing_required\":\"false\",\n\t\"visa_processing_required\":\"true\",\n\t\"amex_processing\":\"true\",\n\t\"amex_processing_existing\":\"true\",\n\t\"amex_se_number\":\"888888888\",\n\t\"amex_new_required\":\"false\",\n\t\"diners_processing\":\"true\",\n\t\"diners_se_number\":\"888888888\",\n\t\"principals\": {\n\t\t\t\t\"first_name\":\"Joe\",\n\t\t\t\t\"middle_initial\":\"M\",\n\t\t\t\t\"surname\":\"Smith\",\n\t\t\t\t\"principal_type\":\"Beneficial Owner\",\n\t\t\t\t\"dob\":\"1999-01-01\",\n\t\t\t\t\"address_line_1\":\"1 Smith Street\",\n\t\t\t\t\"address_line_2\":null,\n\t\t\t\t\"address_line_3\":null,\n\t\t\t\t\"city\":\"Sydney\",\n\t\t\t\t\"state\":\"NSW\",\n\t\t\t\t\"postcode\":\"2000\",\n\t\t\t\t\"country\":\"Australia\",\n\t\t\t\t\"phone_number\":null,\n\t\t\t\t\"passport_number\":null,\n\t\t\t\t\"drivers_license\":null,\n\t\t\t\t\"drivers_license_state\":null\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\"first_name\":\"Joe\",\n\t\t\t\t\"middle_initial\":\"M\",\n\t\t\t\t\"surname\":\"Smith\",\n\t\t\t\t\"principal_type\":\"Authorised Signatory\",\n\t\t\t\t\"dob\":\"1999-01-01\",\n\t\t\t\t\"address_line_1\":\"1 Smith Street\",\n\t\t\t\t\"address_line_2\":null,\n\t\t\t\t\"address_line_3\":null,\n\t\t\t\t\"city\":\"Sydney\",\n\t\t\t\t\"state\":\"NSW\",\n\t\t\t\t\"postcode\":\"2000\",\n\t\t\t\t\"country\":\"Australia\",\n\t\t\t\t\"phone_number\":null,\n\t\t\t\t\"passport_number\":null,\n\t\t\t\t\"drivers_license\":null,\n\t\t\t\t\"drivers_license_state\":null\n\t\t\t\t}\n}"
        - language: ruby
          code: 'require ''uri''

            require ''net/http''

            require ''openssl''


            url = URI("https://acquiring-sandbox.fatzebra.com.au/api/v1/merchants")


            http = Net::HTTP.new(url.host, url.port)

            http.use_ssl = true

            http.verify_mode = OpenSSL::SSL::VERIFY_NONE


            request = Net::HTTP::Post.new(url)

            request["accept"] = ''application/json''

            request["content-type"] = ''application/json''

            request.body = "{

            \"name\":\"test\",

            \"display_name\":\"test\",

            \"username\":\"testmerchant21e\",

            \"trading_name\":\"Joes Computers\",

            \"legal_name\":\"Joe Sampson IT\",

            \"business_number\":\"89154014777\",

            \"company_number\":\"343455432\",

            \"merchant_category_code\":\"8999\",

            \"timezone\":\"Sydney\",

            \"merchant_bank\":\"Commonwealth\",

            \"card_acceptor_name\":\"Joes Computers\",

            \"card_acceptor_location\":\"Sydney\",

            \"card_acceptor_country\":\"AU\",

            \"trading_phone_number\":\"0298932425\",

            \"trading_email\":\"joe@joescomputers.com.au\",

            \"contact_website\":\"test.com\",

            \"type_of_business\":\"type business\",

            \"trading_address_contact_name\":\"Joes Computers\",

            \"trading_address_line_1\":\"18 Anderson Lane\",

            \"trading_address_city\":\"Sydney\",

            \"trading_address_state\":\"NSW\",

            \"trading_address_postcode\":\"2000\",

            \"trading_address_country\":\"Australia\"}"


            response = http.request(request)

            puts response.read_body'
        samples-languages:
        - curl
        - ruby
      tags:
      - Merchants
      security:
      - sec0: []
    get:
      summary: List merchants
      description: ''
      operationId: list-merchants
      parameters:
      - name: filter[onboarded]
        in: query
        schema:
          type: boolean
      responses:
        '200':
          description: '200'
          content:
            application/json:
              examples:
                Result:
                  value: "{\n  \"count\": 2,\n  \"response\": [\n    {\n      \"username\": \"TEST\",\n      \"tpp_id\": 400,\n      \"tpp_job_id\": \"NY4000MB\",\n      \"tpp_name\": \"Acme Inc.\"\n      ...\n    },\n    {\n      \"username\": \"WAT\",\n      \"tpp_id\": 400,\n      \"tpp_job_id\": \"NY4000MB\",\n      \"tpp_name\": \"Acme Inc.\"\n      ...\n    }\n  ],\n  \"pagination\": {\n    \"current\": 1,\n    \"previous\": null,\n    \"next\": null,\n    \"per_page\": 10,\n    \"pages\": 1,\n    \"count\": 2\n  }   \n}"
        '400':
          description: '400'
          content:
            application/json:
              examples:
                Result:
                  value: '{}'
              schema:
                type: object
                properties: {}
      deprecated: false
      x-readme:
        code-samples:
        - language: curl
          code: curl https://apply.merchantsolutions.com.au/api/v1/merchants?onboarded=false
        samples-languages:
        - curl
      tags:
      - Merchants
      security:
      - sec0: []
    servers:
    - url: https://acquiring-sandbox.fatzebra.com.au/api/v1
  /merchants/onboard:
    post:
      summary: Onboard merchants (internal)
      description: ''
      operationId: update-merchants
      requestBody:
        content:
          application/json:
            schema:
              type: object
              required:
              - usernames
              properties:
                usernames:
                  type: array
                  items:
                    type: string
            examples:
              Request Example:
                value:
                  usernames:
                  - TEST
                  - WAT
      responses:
        '200':
          description: '200'
          content:
            application/json:
              examples:
                Result:
                  value: "{\n  \"merchants\": [\n    {\n      \"username\": \"TEST\",\n      \"onboarded_at: \"2018-01-01T23:51:17Z\"\n    },\n    {\n      \"username\": \"WAT\",\n      \"onboarded_at: \"2018-01-01T23:51:17Z\"\n    }\n  ]\n}"
        '400':
          description: '400'
          content:
            application/json:
              examples:
                Result:
                  value: '{}'
              schema:
                type: object
                properties: {}
      deprecated: false
      tags:
      - Merchants
      security:
      - sec0: []
    servers:
    - url: https://acquiring-sandbox.fatzebra.com.au/api/v1
  /merchants/{username}:
    parameters:
    - $ref: '#/components/parameters/Username'
    get:
      tags:
      - Merchants
      summary: Show a merchant
      operationId: showMerchant
      responses:
        '200':
          description: The merchant.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Merchant'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '404':
          $ref: '#/components/responses/NotFound'
      security:
      - PartnerBasicAuth: []
    patch:
      tags:
      - Merchants
      summary: Update a merchant
      description: 'Updates the merchant''s identity/business details. `username`, `status`

        and `credentials` are read-only here — use the lifecycle endpoints

        (`/activate`, `/suspend`, `/cancel`) to change `status`, and

        `/credentials/rotate` to rotate credentials.

        '
      operationId: updateMerchant
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/MerchantUpdateRequest'
      responses:
        '200':
          description: The updated merchant.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Merchant'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '404':
          $ref: '#/components/responses/NotFound'
        '422':
          $ref: '#/components/responses/ValidationError'
      security:
      - PartnerBasicAuth: []
    put:
      tags:
      - Merchants
      summary: Update a merchant (alias for PATCH)
      description: 'Routes to the same update action as `PATCH /merchants/{username}`; same

        behaviour and contract.

        '
      operationId: replaceMerchant
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/MerchantUpdateRequest'
      responses:
        '200':
          description: The updated merchant.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Merchant'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '404':
          $ref: '#/components/responses/NotFound'
        '422':
          $ref: '#/components/responses/ValidationError'
      security:
      - PartnerBasicAuth: []
    servers:
    - url: https://gateway.pmnts.io/v2/partners
      description: Production
    - url: https://gateway.pmnts-sandbox.io/v2/partners
      description: Sandbox
    - url: https://gateway.pmnts-staging.io/v2/partners
      description: Staging
    - url: https://gateway.test/v2/partners
      description: Local development
  /merchants/{username}/activate:
    parameters:
    - $ref: '#/components/parameters/Username'
    post:
      tags:
      - Merchants
      summary: Activate a merchant
      description: 'Transitions the merchant to `active` so it can transact. No body is

        expected. Activating a merchant that has no active acquirer connection

        is rejected with `409 conflict` ("merchant has no active processing

        connection") — board an acquirer first.

        '
      operationId: activateMerchant
      responses:
        '200':
          description: The activated merchant.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Merchant'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '404':
          $ref: '#/components/responses/NotFound'
        '409':
          $ref: '#/components/responses/Conflict'
      security:
      - PartnerBasicAuth: []
    servers:
    - url: https://gateway.pmnts.io/v2/partners
      description: Production
    - url: https://gateway.pmnts-sandbox.io/v2/partners
      description: Sandbox
    - url: https://gateway.pmnts-staging.io/v2/partners
      description: Staging
    - url: https://gateway.test/v2/partners
      description: Local development
  /merchants/{username}/suspend:
    parameters:
    - $ref: '#/components/parameters/Username'
    post:
      tags:
      - Merchants
      summary: Suspend a merchant
      description: 'Transitions the merchant to `suspended`. No body is expected.

        '
      operationId: suspendMerchant
      responses:
        '200':
          description: The suspended merchant.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Merchant'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '404':
          $ref: '#/components/responses/NotFound'
      security:
      - PartnerBasicAuth: []
    servers:
    - url: https://gateway.pmnts.io/v2/partners
      description: Production
    - url: https://gateway.pmnts-sandbox.io/v2/partners
      description: Sandbox
    - url: https://gateway.pmnts-staging.io/v2/partners
      description: Staging
    - url: https://gateway.test/v2/partners
      description: Local development
  /merchants/{username}/cancel:
    parameters:
    - $ref: '#/components/parameters/Username'
    post:
      tags:
      - Merchants
      summary: Cancel a merchant
      description: 'Transitions the merchant to `closed`. No body is expected.

        '
      operationId: cancelMerchant
      responses:
        '200':
          description: The closed merchant.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Merchant'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '404':
          $ref: '#/components/responses/NotFound'
      security:
      - PartnerBasicAuth: []
    servers:
    - url: https://gateway.pmnts.io/v2/partners
      description: Production
    - url: https://gateway.pmnts-sandbox.io/v2/partners
      description: Sandbox
    - url: https://gateway.pmnts-staging.io/v2/partners
      description: Staging
    - url: https://gateway.test/v2/partners
      description: Local development
  /merchants/{username}/credentials/rotate:
    parameters:
    - $ref: '#/components/parameters/Username'
    post:
      tags:
      - Merchants
      summary: Rotate a merchant's credentials
      description: 'Rotates the merchant''s API `token` and its `signing_secret`. No body is

        expected. The fresh values are returned once — the previous token stops

        working immediately, so the caller must store the response.


        The response is a bare credentials object: `username`, `token`,

        `signing_secret`, `rotated_at`.

        '
      operationId: rotateMerchantCredentials
      responses:
        '200':
          description: The rotated credentials (returned once).
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/MerchantCredentials'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '404':
          $ref: '#/components/responses/NotFound'
      security:
      - PartnerBasicAuth: []
    servers:
    - url: https://gateway.pmnts.io/v2/partners
      description: Production
    - url: https://gateway.pmnts-sandbox.io/v2/partners
      description: Sandbox
    - url: https://gateway.pmnts-staging.io/v2/partners
      description: Staging
    - url: https://gateway.test/v2/partners
      description: Local development
components:
  responses:
    Conflict:
      description: The request conflicts with the resource's current state.
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/Error'
          examples:
            noActiveConnection:
              value:
                error:
                  type: conflict
                  message: merchant has no active processing connection
                  fields: {}
                  request_id: req_a1b2c3
    Unauthorized:
      description: Missing or invalid HTTP Basic credentials.
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/Error'
          examples:
            invalidToken:
              value:
                error:
                  type: authentication_error
                  message: Invalid or missing token
                  fields: {}
                  request_id: req_a1b2c3
    NotFound:
      description: Resource not found.
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/Error'
          examples:
            notFound:
              value:
                error:
                  type: not_found
                  message: Couldn't find merchant
                  fields: {}
                  request_id: req_a1b2c3
    ValidationError:
      description: 'The request couldn''t be completed. A `validation_error` is something the

        caller can fix — a bad payload, a merchant that failed validation, or a

        processor rejecting a field (e.g. the MID); the reason is in `fields`,

        keyed by a processor-agnostic field name. A `processor_error` is an

        unactionable upstream failure (a processor was unreachable, busy, or

        errored); `fields` is empty and the caller should retry or escalate.

        Raw upstream detail is never surfaced here — only a parsed,

        processor-neutral reason.

        '
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/Error'
          examples:
            merchantValidation:
              summary: The merchant details were rejected
              value:
                error:
                  type: validation_error
                  message: the merchant details were rejected
                  fields:
                    company_name:
                    - can't be blank
                    postcode:
                    - is not a valid postcode
                  request_id: req_a1b2c3
            unsupportedCurrency:
              summary: A currency the acquirer can't carry
              value:
                error:
                  type: validation_error
                  message: currency not supported by this acquirer
                  fields:
                    currencies:
                    - NZD is not supported by this acquirer
                  request_id: req_a1b2c3
            missingConnectionFields:
              summary: Missing a required connection field
              value:
                error:
                  type: validation_error
                  message: 'missing required connection fields: merchant_id, terminal_id'
                  fields:
                    merchant_id:
                    - is required
                    terminal_id:
                    - is required
                  request_id: req_a1b2c3
            noSupportingProcessor:
              summary: No processor can carry the acquirer for the requested currencies
              value:
                error:
                  type: validation_error
                  message: no processor can carry this acquirer for the requested currencies
                  fields:
                    acquirer:
                    - cannot be boarded for the requested currencies
                  request_id: req_a1b2c3
            processorRejectedMid:
              summary: A processor rejected a field (here, the MID) — caller-fixable
              value:
                error:
                  type: validation_error
                  message: the connection details were rejected
                  fields:
                    mid:
                    - is not supported
                  request_id: req_a1b2c3
            processorUnavailable:
              summary: A processor is busy/errored — not the caller's to fix
              value:
                error:
                  type: processor_error
                  message: a processor is temporarily unavailable
                  fields: {}
                  request_id: req_a1b2c3
  schemas:
    MerchantSummary:
      type: object
      description: 'The slim merchant shape returned in list responses — username only.

        Fetch the full `Merchant` via `GET /merchants/{username}`.

        '
      required:
      - id
      properties:
        id:
          type: string
          description: The merchant's username.
    MerchantOnboardingResult:
      type: object
      description: 'Returned by a combined create (`POST /merchants` with `acquirers`).

        A slim status payload — the merchant''s status, username and one-time

        token, plus a per-acquirer boarding status list. When this result is

        returned every requested acquirer boarded (`status: success`); a

        boarding failure fails the whole create and returns an error instead.

        Read the full merchant via `GET /merchants/{username}` and connections

        via `GET /merchants/{username}/acquirers`.

        '
      required:
      - status
      - username
      - acquirers
      properties:
        status:
          type: string
          enum:
          - pending
          - active
          - suspended
          - closed
          description: '`active` — every requested acquirer boarded and the merchant was activated.'
        username:
          type: string
          description: The merchant's username.
        token:
          type:
          - string
          - 'null'
          description: The one-time API token, revealed once on create.
        acquirers:
          type: array
          description: Per-acquirer boarding outcome — one entry per requested acquirer, all `success`.
          items:
            type: object
            required:
            - acquirer
            - status
            properties:
              acquirer:
                type: string
                description: The acquirer code from the request (e.g. `nab`).
              status:
                type: string
                description: Always `success` on this result — a failure fails the whole create instead.
                enum:
                - success
                - failed
              reason:
                type: string
                description: Why boarding failed. Not populated on this result.
    MerchantCredentials:
      type: object
      description: 'Returned once by `POST /merchants/{username}/credentials/rotate`. The

        full `token` and `signing_secret` are shown here and never again.

        '
      required:
      - username
      - token
      - signing_secret
      - rotated_at
      properties:
        username:
          type: string
          description: The merchant's username (e.g. `acme-store`).
        token:
          type: string
          description: The newly-generated API token (e.g. `tok_live_3b9c1d…`).
        signing_secret:
          type: string
          description: The newly-generated signing secret — the merchant's paynow/HMAC secret.
        rotated_at:
          type: string
          format: date-time
          description: When the credentials were rotated — ISO 8601 UTC (e.g. `2026-06-02T00:00:00Z`).
    MerchantCredentialsInline:
      type: object
      description: 'Credentials embedded on the merchant object. `token` is `null` on reads

        and only populated once by create and credential-rotate.

        '
      required:
      - username
      - token
      properties:
        username:
          type: string
          description: The merchant's username (e.g. `acme-store`).
        token:
          type:
          - string
          - 'null'
          description: The live API token (e.g. `tok_live_3b9c1d…`). `null` except on create / rotate.
    Merchant:
      type: object
      description: A merchant under this partner.
      required:
      - id
      - status
      properties:
        id:
          type: string
          description: The merchant's username (e.g. `acme-store`).
        status:
          type: string
          description: The merchant's lifecycle state.
          enum:
          - pending
          - active
          - suspended
          - closed
        name:
          type:
          - string
          - 'null'
          description: The merchant's legal/registered business name (e.g. `Acme Pty Ltd`).
        trading_name:
          type:
          - string
          - 'null'
          description: The name the merchant trades under (e.g. `Acme Store`).
        company_number:
          type:
          - string
          - 'null'
          description: The merchant's company/business registration number (e.g. an Australian Business Number, `51824753556`).
        website:
          type:
          - string
          - 'null'
          description: The merchant's website URL (e.g. `https://acme.example`).
        mcc:
          type:
          - string
          - 'null'
          description: Merchant category code — ISO 18245, 4 digits (e.g. `5411`).
        email:
          type:
          - string
          - 'null'
          format: email
          description: Contact email address (e.g. `ops@acme.example`).
        phone:
          type:
          - string
          - 'null'
          description: Contact phone number in E.164 format (e.g. `+61730000000`).
        address:
          $ref: '#/components/schemas/Address'
        three_d_secure_enabled:
          type: boolean
          description: Whether 3-D Secure is enabled for the merchant.
        fraud_screening_enabled:
          type: boolean
          description: Whether fraud screening is enabled for the merchant.
        network_tokenisation_enabled:
          type: boolean
          description: Whether network tokenisation (Visa VTS / Mastercard MDES) is enabled.
        wallets:
          type: array
          description: Digital wallets enabled for the merchant.
          items:
            type: string
            description: Wallet type slug (e.g. `apple_pay`, `google_pay`).
        surcharging:
          $ref: '#/components/schemas/MerchantSurcharging'
        statement_descriptor:
          type:
          - string
          - 'null'
          description: Card-acceptor name shown on the cardholder's statement, max 25 chars (e.g. `ACME STORE`).
        government_controlled:
          type: boolean
          description: Whether the merchant is a government-controlled entity.
        country_of_origin:
          type:
          - string
          - 'null'
          description: ISO-3166 alpha-2 country of origin (e.g. `AU`).
        country_code:
          type:
          - string
          - 'null'
          description: ISO-3166 numeric country code (e.g. `036` for Australia).
        fee_program_indicator:
          type:
          - string
          - 'null'
          des

# --- truncated at 32 KB (51 KB total) ---
# Full source: https://raw.githubusercontent.com/api-evangelist/fat-zebra/refs/heads/main/openapi/fat-zebra-merchants-api-openapi.yml