> For clean Markdown of any page, append .md to the page URL.
> For a complete documentation index, see https://docs.runpayments.io/llms.txt.
> For AI client integration (Claude Code, Cursor, etc.), connect to the MCP server at https://docs.runpayments.io/_mcp/server.

# Get a single merchant

GET https://apps.runpayments.io/ords/relay/api/boarding/v1/merchants/{merchant_id}

Retrieve a detailed merchant record from Run Partner.

Reference: https://docs.runpayments.io/reference/reporting-boarding/boarding-api/get-merchant

## Authentication

- `Authorization` header (bearer token, required) — This API uses OAuth 2.0 for authentication.

## Request

### Path parameters

- `merchant_id` (integer, required) — The unique identifier for the merchant

## Response

### 200

Merchant retrieved successfully.

- `merchant_id` (integer, required) — Unique identifier for the merchant.
- `platform` (string, required) — Processing platform (payroc or fiserv).
- `rep_code` (string, required) — Representative code associated with the merchant.
- `dba_name` (string, required) — Doing Business As (DBA) name of the merchant.
- `merchant_status` (string, required) — Current status of the merchant (e.g., new, sent_for_signature, signed, in_underwriting, boarded, live, cancelled, declined, unknown).
- `addresses` (list of Address, required) — List of addresses associated with the merchant.
- `fees` (Fees, required) — Fee details for the merchant.
- `products` (list of Product, required) — List of products associated with the merchant.
- `sales_office_name` (string, optional, nullable) — Name of the sales office associated with the rep code.
- `sales_office_id` (integer, optional, nullable) — ID of the sales office associated with the rep code.
- `customer_id` (integer, optional, nullable) — Customer ID associated with the merchant.
- `legal_name` (string, optional, nullable) — Legal name of the merchant.
- `tax_id` (string, optional, nullable) — Tax identification number of the merchant.
- `years_in_business` (integer, optional, nullable) — Number of years the business has been operating.
- `website` (string, optional, nullable) — Business website URL.
- `phone` (string, optional, nullable) — Phone number of the merchant.
- `mcc_code` (string, optional, nullable) — Merchant Category Code (MCC).
- `business_desc` (string, optional, nullable) — Description of the business.
- `annual_volume` (integer, optional, nullable) — Annual transaction volume in dollars.
- `average_ticket` (integer, optional, nullable) — Average transaction amount in dollars.
- `in_person_pct` (integer, optional, nullable) — Percentage of in-person transactions.
- `online_pct` (integer, optional, nullable) — Percentage of online transactions.
- `telephone_pct` (integer, optional, nullable) — Percentage of telephone transactions.
- `ownership_type` (string, optional, nullable) — Ownership type of the business.
- `fee_template_id` (integer, optional, nullable) — ID of the fee template applied to the merchant, if any.
- `external_crm_id` (string, optional, nullable) — External CRM system identifier.
- `custom_01` (string, optional, nullable) — Custom field for additional merchant data.
- `signer_first_name` (string, optional) — First name of the signer.
- `signer_last_name` (string, optional) — Last name of the signer.
- `signer_dob` (string, optional, nullable) — Date of birth of the signer in the format mm/dd/yyyy.
- `signer_res_address1` (string, optional, nullable) — Residential address line 1 of the signer.
- `signer_res_address2` (string, optional, nullable) — Residential address line 2 of the signer.
- `signer_res_city` (string, optional, nullable) — Residential city of the signer.
- `signer_res_state` (string, optional, nullable) — Residential state of the signer (2-character abbreviation).
- `signer_res_zip` (string, optional, nullable) — Residential ZIP code of the signer.
- `signer_email` (string, optional) — Email address of the signer.
- `signer_phone` (string, optional, nullable) — Phone number of the signer.
- `signer_ownership_pct` (integer, optional) — Ownership percentage of the signer.
- `pricing` (Pricing, optional) — Pricing details for the merchant.

## Errors

### 401 Unauthorized Error

Unauthorized.

- `error` (string, optional) — Error code.
- `error_description` (string, optional) — Detailed error description.

### 404 Not Found Error

Merchant not found.

- `error_message` (string, optional) — Description of the error (e.g., `merchant_id 123 not found.`).

## Types

### Address

- `address1` (string, optional) — Address line 1.
- `address2` (string, optional) — Address line 2.
- `city` (string, optional) — City.
- `state` (string, optional) — State (2-character abbreviation).
- `zip` (string, optional) — ZIP code.
- `address_type` (enum, optional) — Type of address.
  - Allowed values: `business`, `legal`, `mail_to`

### Fees

- `merchant_service_fees` (list of MerchantServicesFee, optional) — Platform-level fees. See the /platform_fees endpoint for the fees available for each platform.
- `pci_program` (PciProgram, optional) — PCI program selection. Valid types are `pci_concierge_fee_monthly` and `pci_annual_fee` for Fiserv, `platinum_monthly` and `platinum_annual` for Payroc.

### Product

- `platform_equipment_id` (integer, optional) — Platform-specific equipment identifier.
- `quantity` (integer, optional) — Quantity of the product.
- `product_id` (string, optional) — Product identifier. See the /products endpoint.
- `fees` (list of ProductFee, optional) — Array of fees associated with the product.

### Pricing

- `pricing_type` (enum, optional) — Pricing type. Please note that certain pricing types are only available for specific platforms. See the /pricing_types endpoint for the pricing types and fields available for each platform.
  - Allowed values: `ic_plus`, `flat_rate`, `merchant_surcharge_program`, `swipe_non_swipe`
- `discount_frequency` (enum, optional) — Fiserv ONLY. Frequency of discount.
  - Allowed values: `daily`, `monthly`
- `funding_rollup` (enum, optional) — Fiserv ONLY. Funding rollup preference.
  - Allowed values: `net_fees_and_deposits`, `individual_batches`, `separate_fees_and_deposits`
- `dues_and_assessments` (boolean, optional) — Fiserv ONLY. Automatically set to `true` for `ic_plus` pricing and `false` for `merchant_surcharge_program` pricing.
- `amex_program` (enum, optional) — AMEX program.
  - Allowed values: `no_american_express`, `amex_opt_blue`, `amex_esa`
- `amex_esa_number` (string, optional) — Required if `amex_program` is `amex_esa`. 10-digit AMEX ESA number. Not valid with `merchant_surcharge_program` pricing.
- `amex_esa_per_item` (double, optional) — Required if `amex_program` is `amex_esa`. Cost per item for AMEX ESA.
- `ic_plus` (ICPlus, optional) — IC Plus pricing details. Required if `pricing_type` is `ic_plus`.
- `swipe_non_swipe` (SwipeNonSwipe, optional) — Swipe/Non-swipe pricing details. Required if `pricing_type` is `swipe_non_swipe`.
- `merchant_surcharge_program` (MerchantSurchargeProgram, optional) — Merchant Surcharge pricing details. Required if `pricing_type` is `merchant_surcharge_program`.
- `flat_rate` (FlatRate, optional) — Flat Rate pricing details. Required if `pricing_type` is `flat_rate`.

### MerchantServicesFee

- `fee_id` (string, optional) — Type of fee. Some fees are only available for specific platforms. See the /platform_fees endpoint.
- `cost` (double, optional, nullable) — Amount in dollars. Can be null for some fees.

### PciProgram

- `type` (string, optional) — Type of PCI program. Valid values are `pci_concierge_fee_monthly` and `pci_annual_fee` for Fiserv, `platinum_monthly` and `platinum_annual` for Payroc.
- `cost` (string, optional) — Amount in dollars as a string.

### ProductFee

- `fee_id` (string, optional) — Product fee identifier.
- `cost` (double, optional, nullable) — Amount in dollars. Can be null for some fees.

### ICPlus

- `rate_bps` (integer, optional) — Rate in basis points (e.g. 200 for 2.00%).
- `amex_rate_bps` (integer, optional) — Amount in basis points for American Express.
- `per_item` (double, optional, nullable) — Amount in dollars per transaction.
- `passthrough_interchange` (string, optional) — Interchange passthrough method (e.g., gross).

### SwipeNonSwipe

- `swipe_per_item` (double, optional) — Amount in dollars (e.g. 0.05 for $0.05).
- `swipe_rate_bps` (double, optional) — Amount in basis points (e.g. 200 for 2.00%).
- `non_swipe_per_item` (double, optional) — Amount in dollars.
- `non_swipe_rate_bps` (double, optional) — Amount in basis points.

### MerchantSurchargeProgram

- `per_item` (double, optional) — Amount in dollars (e.g. 0.05 for $0.05).

### FlatRate

- `per_item` (double, optional) — Amount in dollars (e.g. 0.05 for $0.05).
- `rate_bps` (double, optional) — Amount in basis points (e.g. 200 for 2.00%).

## Examples

**Response**

```json
{
  "merchant_id": 1,
  "platform": "string",
  "rep_code": "string",
  "dba_name": "string",
  "merchant_status": "string",
  "addresses": [
    {
      "address1": "string",
      "address2": "string",
      "city": "string",
      "state": "string",
      "zip": "string",
      "address_type": "business"
    }
  ],
  "fees": {
    "merchant_service_fees": [
      {
        "fee_id": "string",
        "cost": 1.1
      }
    ],
    "pci_program": {
      "type": "string",
      "cost": "string"
    }
  },
  "products": [
    {
      "platform_equipment_id": 1,
      "quantity": 1,
      "product_id": "string",
      "fees": [
        {
          "fee_id": "string",
          "cost": 1.1
        }
      ]
    }
  ],
  "sales_office_name": "string",
  "sales_office_id": 1,
  "customer_id": 1,
  "legal_name": "string",
  "tax_id": "string",
  "years_in_business": 1,
  "website": "string",
  "phone": "string",
  "mcc_code": "string",
  "business_desc": "string",
  "annual_volume": 1,
  "average_ticket": 1,
  "in_person_pct": 1,
  "online_pct": 1,
  "telephone_pct": 1,
  "ownership_type": "string",
  "fee_template_id": 1,
  "external_crm_id": "string",
  "custom_01": "string",
  "signer_first_name": "string",
  "signer_last_name": "string",
  "signer_dob": "string",
  "signer_res_address1": "string",
  "signer_res_address2": "string",
  "signer_res_city": "string",
  "signer_res_state": "string",
  "signer_res_zip": "string",
  "signer_email": "string",
  "signer_phone": "string",
  "signer_ownership_pct": 1,
  "pricing": {
    "pricing_type": "ic_plus",
    "discount_frequency": "daily",
    "funding_rollup": "net_fees_and_deposits",
    "dues_and_assessments": true,
    "amex_program": "no_american_express",
    "amex_esa_number": "string",
    "amex_esa_per_item": 1.1,
    "ic_plus": {
      "rate_bps": 1,
      "amex_rate_bps": 1,
      "per_item": 1.1,
      "passthrough_interchange": "string"
    },
    "swipe_non_swipe": {
      "swipe_per_item": 1.1,
      "swipe_rate_bps": 1.1,
      "non_swipe_per_item": 1.1,
      "non_swipe_rate_bps": 1.1
    },
    "merchant_surcharge_program": {
      "per_item": 1.1
    },
    "flat_rate": {
      "per_item": 1.1,
      "rate_bps": 1.1
    }
  }
}
```

**SDK Code**

```python
import requests

url = "https://apps.runpayments.io/ords/relay/api/boarding/v1/merchants/1"

headers = {"Authorization": "Bearer <token>"}

response = requests.get(url, headers=headers)

print(response.json())
```

```javascript
const url = 'https://apps.runpayments.io/ords/relay/api/boarding/v1/merchants/1';
const options = {method: 'GET', headers: {Authorization: 'Bearer <token>'}};

try {
  const response = await fetch(url, options);
  const data = await response.json();
  console.log(data);
} catch (error) {
  console.error(error);
}
```

```go
package main

import (
	"fmt"
	"net/http"
	"io"
)

func main() {

	url := "https://apps.runpayments.io/ords/relay/api/boarding/v1/merchants/1"

	req, _ := http.NewRequest("GET", url, nil)

	req.Header.Add("Authorization", "Bearer <token>")

	res, _ := http.DefaultClient.Do(req)

	defer res.Body.Close()
	body, _ := io.ReadAll(res.Body)

	fmt.Println(res)
	fmt.Println(string(body))

}
```

```ruby
require 'uri'
require 'net/http'

url = URI("https://apps.runpayments.io/ords/relay/api/boarding/v1/merchants/1")

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

request = Net::HTTP::Get.new(url)
request["Authorization"] = 'Bearer <token>'

response = http.request(request)
puts response.read_body
```

```java
import com.mashape.unirest.http.HttpResponse;
import com.mashape.unirest.http.Unirest;

HttpResponse<String> response = Unirest.get("https://apps.runpayments.io/ords/relay/api/boarding/v1/merchants/1")
  .header("Authorization", "Bearer <token>")
  .asString();
```

```php
<?php
require_once('vendor/autoload.php');

$client = new \GuzzleHttp\Client();

$response = $client->request('GET', 'https://apps.runpayments.io/ords/relay/api/boarding/v1/merchants/1', [
  'headers' => [
    'Authorization' => 'Bearer <token>',
  ],
]);

echo $response->getBody();
```

```csharp
using RestSharp;

var client = new RestClient("https://apps.runpayments.io/ords/relay/api/boarding/v1/merchants/1");
var request = new RestRequest(Method.GET);
request.AddHeader("Authorization", "Bearer <token>");
IRestResponse response = client.Execute(request);
```

```swift
import Foundation

let headers = ["Authorization": "Bearer <token>"]

let request = NSMutableURLRequest(url: NSURL(string: "https://apps.runpayments.io/ords/relay/api/boarding/v1/merchants/1")! as URL,
                                        cachePolicy: .useProtocolCachePolicy,
                                    timeoutInterval: 10.0)
request.httpMethod = "GET"
request.allHTTPHeaderFields = headers

let session = URLSession.shared
let dataTask = session.dataTask(with: request as URLRequest, completionHandler: { (data, response, error) -> Void in
  if (error != nil) {
    print(error as Any)
  } else {
    let httpResponse = response as? HTTPURLResponse
    print(httpResponse)
  }
})

dataTask.resume()
```