All supplied filters are combined (AND) and applied before pagination; totalCount reflects every applied filter.
Date/time filter values are ISO 8601 (yyyy-MM-dd or yyyy-MM-ddTHH:mm:ss, optionally with an offset); a value
without an offset is interpreted in the HQ server's local time (US Eastern). Every date in the result carries
the server's offset (e.g. 2026-09-22T11:55:04-04:00), so it can be passed back as a boundary unchanged. The status date
window is half-open: statusDateFrom <= status date < statusDateTo, so a whole day is
statusDateFrom=2026-09-22&statusDateTo=2026-09-23 and a polling client passes its previous poll time as
statusDateFrom and the current one as statusDateTo. Each row returns that status date as statusDate
(null when unknown), the profile creation date as createdDate, and the latest submit and approval as
submitDate and approveDate (null when not yet submitted/approved), plus the merchant's mcc.
Examples:
GET /api/v1/merchants/tsys-direct/search?merchantProfileId=168171
GET /api/v1/merchants/tsys-direct/search?statusDateFrom=2026-09-22
GET /api/v1/merchants/tsys-direct/search?statusDateTo=2026-09-22T12:00:00
GET /api/v1/merchants/tsys-direct/search?statusDateFrom=2026-09-22&statusDateTo=2026-09-23
GET /api/v1/merchants/tsys-direct/search?status=Underwriting&statusDateFrom=2026-09-22T11:50:00&statusDateTo=2026-09-22T11:55:00&pageSize=500&pageNumber=1
GET /api/v1/merchants/tsys-direct/search?merchantProfileId=168171&statusDateFrom=2026-09-01
| Time | Status | User Agent | |
|---|---|---|---|
Retrieving recent requests… | |||
Search TSYS Direct merchants
All supplied filters are combined (AND) and applied before pagination; totalCount reflects every applied filter.
The mid filter is an exact match on the complete MID. Partial MID matching is no longer supported.
The merchantProfileId filter is also an exact match.
Date/time filter values are ISO 8601 (yyyy-MM-dd or yyyy-MM-ddTHH:mm:ss, optionally with an offset); a value
without an offset is interpreted in the HQ server's local time (US Eastern). Every date in the result carries
the server's offset (e.g. 2026-09-22T11:55:04-04:00), so it can be passed back as a boundary unchanged. The status date
window is half-open: statusDateFrom <= status date < statusDateTo, so a whole day is
statusDateFrom=2026-09-22&statusDateTo=2026-09-23 and a polling client passes its previous poll time as
statusDateFrom and the current one as statusDateTo. If statusDateFrom is later than statusDateTo, or either
date value is invalid, the API returns HTTP 400 with modelState validation for the corresponding parameter.
Each row returns that status date as statusDate (null when unknown), the profile creation date as createdDate,
and the latest submit and approval as submitDate and approveDate (null when not yet submitted/approved), plus
the merchant's mcc.
Examples:
GET /api/v1/merchants/tsys-direct/search?merchantProfileId=168171
GET /api/v1/merchants/tsys-direct/search?statusDateFrom=2026-09-22
GET /api/v1/merchants/tsys-direct/search?statusDateTo=2026-09-22T12:00:00
GET /api/v1/merchants/tsys-direct/search?statusDateFrom=2026-09-22&statusDateTo=2026-09-23
GET /api/v1/merchants/tsys-direct/search?status=Underwriting&statusDateFrom=2026-09-22T11:50:00&statusDateTo=2026-09-22T11:55:00&pageSize=500&pageNumber=1
GET /api/v1/merchants/tsys-direct/search?merchantProfileId=168171&statusDateFrom=2026-09-01
Search Merchants
Searches the TSYS Direct merchant database using one or more filter criteria and returns a paginated list of matching merchant records. All query parameters are optional — providing more filters narrows results. Each result includes the merchant's internal profile ID, assigned MID, DBA name, current boarding status, and office affiliation. Use this endpoint for operational management, customer support lookups, and compliance monitoring.
Endpoint
GET /api/v1/merchants/tsys-direct/search
Authentication
Basic HTTP Authentication required.
Encode username:password in Base64 and pass in the Authorization header:
Authorization: Basic {base64(username:password)}
When to use
Use this endpoint when you need to find a specific merchant by MID, DBA, email, or phone, or when building dashboards that list merchants filtered by status or MCC. It supports pagination for large result sets. ISO administrators and support teams use this to look up merchant records before performing actions like boarding status checks, underwriting reviews, or account updates.
Query Parameters
| Parameter | Type | Required | Description |
|---|---|---|---|
| mid | string | No | Complete Merchant Identification Number. Exact match only. Partial MID matching is not supported. |
| merchantProfileId | integer (int32) | No | Internal Netevia HQ merchant profile ID. Exact match. |
| dba | string | No | Doing Business As name (partial match supported) |
| string | No | Email address associated with the merchant account | |
| zipCode | string | No | ZIP code of the merchant's business location |
| phone | string | No | Contact phone number of the merchant |
| status | string (enum) | No | Filter by boarding/processing status — see full enum list below |
| statusDateFrom | string (ISO 8601) | No | Inclusive lower boundary for the merchant's statusDate. If no offset is supplied, the value is interpreted as US Eastern time. |
| statusDateTo | string (ISO 8601) | No | Exclusive upper boundary for the merchant's statusDate. If no offset is supplied, the value is interpreted as US Eastern time. |
| mcc | string | No | Merchant Category Code (SIC code) |
| pageNumber | integer (int32) | No | Page number for paginated results (default: 1) |
| pageSize | integer (int32) | No | Number of records per page (default: 10) |
Date Range Filtering
statusDateFrom is inclusive and statusDateTo is exclusive:
statusDateFrom <= statusDate < statusDateToFor a complete calendar day, use the start of the requested day as statusDateFrom and the start of the next day as
statusDateTo. For example:
statusDateFrom=2026-09-24&statusDateTo=2026-09-25If a date/time value does not include an offset, it is interpreted as US Eastern time.
If statusDateFrom is later than statusDate, or an invalid date is supplied, the API returns 400 Bad Request with
modelState validation for the corresponding parameter.
Breaking Change: MID Matching
Breaking change: The
midparameter now requires an exact match on the full MID. Existing clients that relied
on partial MID matching must be updated to send the complete MID.
status enum values: NotSubmitted, Approved, PreApproved, Declined, Deactivated, WithDrawn, Closed, Pending, PendingPreUw, InCredit, ConditionallyApproved, RequestChanges, PreUnderwriting, Prospect, Draft, Received, UnderReview, PendingReview, PendingReviewPreUw, Cancelled, T2UnderReview, T2Approved, T2Declined, T2Any, T2Closed, T2Cancelled, Underwriting, MPAInProcess, MPACancelled, MPADeclined, MPADeleted, MPAError, MPABoarded, CRPOSEquipment, New, ElavonSigned, ElavonSubmitted, ElavonProcessorReceived
Response
200 OK
| Field | Type | Description |
|---|---|---|
| pageNumber | integer | Current page number returned |
| pageSize | integer | Number of records per page |
| totalCount | integer | Total number of merchants matching the search criteria |
| items | array of MerchantSearchResult | List of merchant records for the current page |
| items[].merchantProfileId | integer | Internal Netevia HQ merchant profile ID |
| items[].mid | string | Assigned Merchant Identification Number (null if not yet boarded) |
| items[].dba | string | Doing Business As name |
| items[].status | string (enum) | Current boarding/processing status |
| items[].statusDate | string (ISO 8601 with offset) | Date and time when the merchant's current status was set; null when unknown |
| items[].createdDate | string (ISO 8601 with offset) | Date and time when the merchant profile was created |
| items[].submitDate | string (ISO 8601 with offset) | Date and time of the latest submission; null when not yet submitted |
| items[].approveDate | string (ISO 8601 with offset) | Date and time of the latest approval; null when not yet approved |
| items[].mcc | integer | Merchant Category Code |
| items[].officeTitle | string | Name of the ISO office or branch managing this merchant |
| requestId | integer | Echo of the internal request ID |
| success | boolean | true if the call succeeded |
| error | string | Error message if success is false |
| validationErrors | array | Field-level validation errors if any |
{
"pageNumber": 1,
"pageSize": 20,
"totalCount": 3,
"items": [
{
"merchantProfileId": 30912,
"mid": "450001234567",
"dba": "The Corner Bakery",
"status": "Approved",
"officeTitle": "Phoenix Regional Office"
},
{
"merchantProfileId": 30944,
"mid": null,
"dba": "Corner Bakery Downtown",
"status": "UnderReview",
"officeTitle": "Phoenix Regional Office"
},
{
"merchantProfileId": 31002,
"mid": null,
"dba": "Cornerstone Catering",
"status": "Draft",
"officeTitle": "Scottsdale Branch"
}
],
"requestId": 87450,
"success": true,
"error": null,
"validationErrors": []
}Error Codes
| Code | When it happens |
|---|---|
| 400 | A query parameter has an invalid format (e.g., non-integer merchantProfileId, unrecognized status enum value) |
| 401 | Invalid or missing Basic Auth credentials |
| 403 | User does not have permission to search merchants in the requested scope |
| 500 | Internal server error |
Common Mistakes
- Providing no filter parameters at all — the endpoint will return all merchants accessible to the authenticated user, which may be a very large dataset and slow to return. Always supply at least one filter.
- Using a partial MID string —
midrequires an exact match on the full MID. - Treating
merchantProfileIdas a partial match —merchantProfileIdis an exact match. - Using an inclusive upper date boundary —
statusDateTois exclusive. For a whole day, use the next calendar day asstatusDateTo. - Sending
statusDateFromlater thanstatusDateToor an invalid date — the request returns HTTP 400 withmodelStatevalidation for the corresponding parameter. - Sending abbreviated state names or free-text in the
statusfield — it must exactly match one of the documented enum values, including capitalization. - Not accounting for pagination — if
totalCountexceedspageSize, incrementpageNumberto retrieve subsequent pages. - Confusing
merchantProfileId(internal Netevia ID) withmid(processor-assigned MID) — they are different identifiers.
Related Endpoints
GET /api/v1/merchant/status— Retrieve the detailed boarding status for a specific merchant by profile IDGET /api/v2/merchant/info— Get full merchant profile configuration dataGET /api/v2/merchant/fees— Retrieve the fee schedule for a specific merchant
Example
curl -X GET "https://hq.staging.netevia.dev/api/v1/merchants/tsys-direct/search?dba=Corner+Bakery&status=Approved&pageNumber=1&pageSize=20" \
-H "Authorization: Basic $(echo -n 'username:password' | base64)" \
-H "Accept: application/json"OpenAPI definition
{
"openapi": "3.0.0",
"info": {
"version": "v1",
"title": "Netevia HQ | API Documentation",
"description": "Netevia HQ | API Documentation"
},
"paths": {
"/api/v1/merchants/tsys-direct/search": {
"get": {
"tags": [
"Search merchants"
],
"summary": "Search TSYS Direct merchants",
"description": "All supplied filters are combined (AND) and applied before pagination; totalCount reflects every applied filter.\r\nDate/time filter values are ISO 8601 (yyyy-MM-dd or yyyy-MM-ddTHH:mm:ss, optionally with an offset); a value\r\nwithout an offset is interpreted in the HQ server's local time (US Eastern). Every date in the result carries\r\nthe server's offset (e.g. 2026-09-22T11:55:04-04:00), so it can be passed back as a boundary unchanged. The status date\r\nwindow is half-open: statusDateFrom <= status date < statusDateTo, so a whole day is\r\nstatusDateFrom=2026-09-22&statusDateTo=2026-09-23 and a polling client passes its previous poll time as\r\nstatusDateFrom and the current one as statusDateTo. Each row returns that status date as statusDate\r\n(null when unknown), the profile creation date as createdDate, and the latest submit and approval as\r\nsubmitDate and approveDate (null when not yet submitted/approved), plus the merchant's mcc.\r\n\r\nExamples:\r\nGET /api/v1/merchants/tsys-direct/search?merchantProfileId=168171\r\nGET /api/v1/merchants/tsys-direct/search?statusDateFrom=2026-09-22\r\nGET /api/v1/merchants/tsys-direct/search?statusDateTo=2026-09-22T12:00:00\r\nGET /api/v1/merchants/tsys-direct/search?statusDateFrom=2026-09-22&statusDateTo=2026-09-23\r\nGET /api/v1/merchants/tsys-direct/search?status=Underwriting&statusDateFrom=2026-09-22T11:50:00&statusDateTo=2026-09-22T11:55:00&pageSize=500&pageNumber=1\r\nGET /api/v1/merchants/tsys-direct/search?merchantProfileId=168171&statusDateFrom=2026-09-01",
"operationId": "Search_SearchMerchants",
"parameters": [
{
"name": "mid",
"in": "query",
"description": "Complete MID, exact match",
"required": false,
"schema": {
"type": "string"
}
},
{
"name": "merchantProfileId",
"in": "query",
"description": "Merchant profile ID, exact match (integer). A valid id with no matching merchant returns an empty successful result.",
"required": false,
"schema": {
"type": "integer",
"format": "int32"
}
},
{
"name": "dba",
"in": "query",
"description": "DBA, partial match",
"required": false,
"schema": {
"type": "string"
}
},
{
"name": "email",
"in": "query",
"description": "Merchant or primary owner email, partial match",
"required": false,
"schema": {
"type": "string"
}
},
{
"name": "zipCode",
"in": "query",
"description": "Any owner, legal or DBA address ZIP, partial match",
"required": false,
"schema": {
"type": "string"
}
},
{
"name": "phone",
"in": "query",
"description": "Any merchant/owner phone, partial match; must not start with 1",
"required": false,
"schema": {
"type": "string"
}
},
{
"name": "status",
"in": "query",
"description": "Merchant status",
"required": false,
"schema": {
"type": "string",
"enum": [
"NotSubmitted",
"Approved",
"PreApproved",
"Declined",
"Deactivated",
"WithDrawn",
"Closed",
"Pending",
"PendingPreUw",
"InCredit",
"ConditionallyApproved",
"RequestChanges",
"PreUnderwriting",
"Prospect",
"Draft",
"Received",
"UnderReview",
"PendingReview",
"PendingReviewPreUw",
"Cancelled",
"T2UnderReview",
"T2Approved",
"T2Declined",
"T2Any",
"T2Closed",
"T2Cancelled",
"Underwriting",
"MPAInProcess",
"MPACancelled",
"MPADeclined",
"MPADeleted",
"MPAError",
"MPABoarded",
"CRPOSEquipment",
"New",
"SubmittedForReview",
"PendingAfterSubmit"
]
}
},
{
"name": "statusDateFrom",
"in": "query",
"description": "Inclusive lower boundary (statusDateFrom <= status date) of the date and time when the merchant's current status was set (ISO 8601; server local time when no offset is given). Merchants with an unknown status date are excluded when this or statusDateTo is supplied.",
"required": false,
"schema": {
"type": "string",
"format": "date-time"
}
},
{
"name": "statusDateTo",
"in": "query",
"description": "Exclusive upper boundary (status date < statusDateTo) of the status date (ISO 8601; server local time when no offset is given). Must not be earlier than statusDateFrom, otherwise HTTP 400.",
"required": false,
"schema": {
"type": "string",
"format": "date-time"
}
},
{
"name": "mcc",
"in": "query",
"description": "MCC (SIC code), partial match",
"required": false,
"schema": {
"type": "string"
}
},
{
"name": "pageNumber",
"in": "query",
"description": "1-based page number, default 1",
"required": false,
"schema": {
"type": "integer",
"format": "int32"
}
},
{
"name": "pageSize",
"in": "query",
"description": "Page size 1..1000, default 20",
"required": false,
"schema": {
"type": "integer",
"format": "int32"
}
}
],
"responses": {
"200": {
"description": "OK",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ApiPagedResult1_MerchantSearchResult"
}
},
"text/json": {
"schema": {
"$ref": "#/components/schemas/ApiPagedResult1_MerchantSearchResult"
}
},
"application/xml": {
"schema": {
"$ref": "#/components/schemas/ApiPagedResult1_MerchantSearchResult"
}
},
"text/xml": {
"schema": {
"$ref": "#/components/schemas/ApiPagedResult1_MerchantSearchResult"
}
},
"pageNumber": {
"examples": {
"response": {
"value": 1
}
}
},
"pageSize": {
"examples": {
"response": {
"value": 20
}
}
},
"totalCount": {
"examples": {
"response": {
"value": 20
}
}
},
"items": {
"examples": {
"response": {
"value": [
{
"merchantProfileId": 1,
"mid": "MID",
"dba": "123",
"status": 1,
"statusDate": "2026-09-22T11:55:04-04:00",
"createdDate": "2026-09-20T09:30:00-04:00",
"submitDate": "2026-09-21T10:15:00-04:00",
"approveDate": "2026-09-22T11:55:04-04:00",
"mcc": 5812,
"officeTitle": "Netevia"
}
]
}
}
},
"success": {
"examples": {
"response": {
"value": true
}
}
}
}
}
}
}
}
},
"security": [
{
"Basic": []
}
],
"servers": [
{
"url": "https://hq.staging.netevia.dev"
}
],
"components": {
"securitySchemes": {
"Basic": {
"type": "http",
"description": "Basic HTTP Authentication",
"scheme": "basic"
}
},
"schemas": {
"ValidationError": {
"type": "object",
"properties": {
"field": {
"type": "string"
},
"error": {
"type": "string"
}
}
},
"ApiPagedResult1_MerchantSearchResult": {
"type": "object",
"properties": {
"pageNumber": {
"format": "int32",
"type": "integer"
},
"pageSize": {
"format": "int32",
"type": "integer"
},
"totalCount": {
"format": "int32",
"type": "integer"
},
"items": {
"type": "array",
"items": {
"$ref": "#/components/schemas/MerchantSearchResult"
}
},
"data": {
"$ref": "#/components/schemas/MerchantSearchResult"
},
"requestId": {
"format": "int32",
"type": "integer"
},
"success": {
"type": "boolean"
},
"error": {
"type": "string"
},
"validationErrors": {
"type": "array",
"items": {
"$ref": "#/components/schemas/ValidationError"
}
}
}
},
"MerchantSearchResult": {
"type": "object",
"properties": {
"merchantProfileId": {
"format": "int32",
"type": "integer"
},
"mid": {
"type": "string"
},
"dba": {
"type": "string"
},
"status": {
"enum": [
"NotSubmitted",
"Approved",
"PreApproved",
"Declined",
"Deactivated",
"WithDrawn",
"Closed",
"Pending",
"PendingPreUw",
"InCredit",
"ConditionallyApproved",
"RequestChanges",
"PreUnderwriting",
"Prospect",
"Draft",
"Received",
"UnderReview",
"PendingReview",
"PendingReviewPreUw",
"Cancelled",
"T2UnderReview",
"T2Approved",
"T2Declined",
"T2Any",
"T2Closed",
"T2Cancelled",
"Underwriting",
"MPAInProcess",
"MPACancelled",
"MPADeclined",
"MPADeleted",
"MPAError",
"MPABoarded",
"CRPOSEquipment",
"New",
"SubmittedForReview",
"PendingAfterSubmit"
],
"type": "string"
},
"statusDate": {
"format": "date-time",
"description": "Date and time when the merchant's current status was set (ISO 8601 with the server's offset); the value statusDateFrom/statusDateTo compare against. Null when unknown.",
"type": "string"
},
"createdDate": {
"format": "date-time",
"description": "Date and time the merchant profile was created (ISO 8601 with offset).",
"type": "string"
},
"submitDate": {
"format": "date-time",
"description": "Date and time of the latest submit (ISO 8601 with the server's offset); null when never submitted.",
"type": "string"
},
"approveDate": {
"format": "date-time",
"description": "Date and time of the latest approval (ISO 8601 with the server's offset); null when never approved.",
"type": "string"
},
"mcc": {
"format": "int32",
"description": "MCC (SIC code) of the merchant (integer), the value the mcc filter matches against; null when not set.",
"type": "integer"
},
"officeTitle": {
"type": "string"
}
}
}
}
}
}