Reads one merchant's custom field definitions.
GET
/api/merchants/{id}/custom-fields
deprecated
No permission required.
The narrow counterpart to `GET /api/merchants/{id}` for a caller that wants only the definitions. That route answers with the whole merchant, decrypting processor and screening provider secrets on the way, so using it to read a handful of field names pulls material the caller never asked for across the wire and pays a per-profile decryption for it. Takes the merchant as a parameter rather than resolving it from the caller, unlike `self/custom-fields`: definition numbering is per merchant, so a caller acting for several of them has to be able to name the one it means. The caller must have access to the merchant it names: a merchant outside the caller's scope is reported as not found.
Example request
Every block below sends the same request. Replace {{BASE_URL}} with the address of the API you are calling and {{API_KEY}} with your own key.
The request body is a . See the Request body section below for its fields.
Parameters
| Name | In | Type | Description |
|---|---|---|---|
id
required |
path | string (uuid) | The merchant whose definitions to read. |
suppressNulls
required |
query | boolean | If true, omit properties with null values. |
Request body
application/json
, required
| Field | Type | Description |
|---|
This request body has no documented fields.
Responses
200 OK
Body: array of CustomField
Each item has these fields.
| Field | Type | Description |
|---|---|---|
id
required |
string (uuid) | |
name
required |
string | nullablemin length 3max length 50pattern ^[A-Za-z0-9]+(?:_[A-Za-z0-9]+)*$ |
notes
required |
array of EntityNote | nullable |
tags
required |
array of EntityTag | nullable |
isNumeric
required |
boolean | Conditional: When IsMultiValue is true. |
decimalPlaces
required |
integer (int32) | Conditional: When IsNumeric is true. Range: 0 to 2. |
maxLength
required |
integer (int32) | Conditional: When IsNumeric is false. Range: 0 to 300. |
regEx
required |
string | Conditional: When RegEx is not empty. nullable |
regExErrorMessage
required |
string | Conditional: When RegExErrorMessage is not empty. Max length: 100. nullablemax length 100 |
isRequired
required |
boolean | |
isEnabled
required |
boolean | |
description
required |
string | Conditional: When Description is not empty. Max length: 100. nullable |
numericMinValue
required |
number (double) | For numeric fields, the minimum value allowed. Negative minimums are permitted: a custom field is merchant-defined metadata rather than a monetary amount, so ranges that span or sit below zero (adjustments, offsets, deltas, temperatures) are legitimate. The value is inert unless `isNumeric` is set, and is validated only in that case. Conditional: When IsNumeric is true. Range: -1000000000 to 1000000000. |
numericMaxValue
required |
number (double) | For numeric fields, the maximum value allowed. It must be greater than or equal to `numericMinValue` but is not required to be positive, since a field whose whole range is negative is valid. The value is inert unless `isNumeric` is set, and is validated only in that case. Conditional: When IsNumeric is true. Range: -1000000000 to 1000000000. |
position
required |
integer (int32) | min 0 |
virtualTerminal
required |
all of CustomFieldPresence | Presence settings for the Virtual Terminal, which collects this field from the operator when `visible` is set. |
hostedPaymentPage
required |
CustomFieldPresence | |
transactionReports
required |
all of CustomFieldTransactionReportsPresence | Presence settings for the surfaces that list a transaction's captured custom fields: the transaction detail page and the receipt. Only `visible` is honoured. |
showOnSaveCardSessions
required |
boolean | Whether this field is offered on a save-card hosted payment page session (one that stores the card without charging it). Defaults to off: most custom fields carry charge metadata (invoice number, purchase order, department) that is meaningless on a page whose only outcome is a stored card, so a field is suppressed on those sessions unless the merchant opts it in. nullable |
legacyNumber
required |
integer (int64) | The integer key the v1 API addresses this definition by. Server-owned: allocated once, when the definition is first saved, and never reassigned afterwards. nullable |
isMultiValue
required |
boolean | Whether a transaction carries a list of values for this field rather than a single value. A multi-value field is submitted through `TrxCustomField.Values`, prefilled on a hosted page session through `prefilledListFields`, and captured one value per line on the Virtual Terminal. The single `value` member keeps working on a multi-value definition: it is carried unchanged and mirrored into the list as its one item. nullable |
maxValues
required |
integer (int32) | For a multi-value field, the largest number of values a transaction may carry. Unset reads as `DefaultMaxValues`; the platform ceiling is `MaxValuesCeiling`. Inert unless `isMultiValue` is set, and validated only in that case. Conditional: When IsMultiValue is true and MaxValues is not null. Range: 1 to 250. nullable |
This response has no documented body fields.
403 Forbidden
Body: RemoteServiceErrorResponse
Each item has these fields.
| Field | Type | Description |
|---|---|---|
error
required |
RemoteServiceErrorInfo |
This response has no documented body fields.
401 Unauthorized
Body: RemoteServiceErrorResponse
Each item has these fields.
| Field | Type | Description |
|---|---|---|
error
required |
RemoteServiceErrorInfo |
This response has no documented body fields.
400 Bad Request
Body: RemoteServiceErrorResponse
Each item has these fields.
| Field | Type | Description |
|---|---|---|
error
required |
RemoteServiceErrorInfo |
This response has no documented body fields.
404 Not Found
Body: RemoteServiceErrorResponse
Each item has these fields.
| Field | Type | Description |
|---|---|---|
error
required |
RemoteServiceErrorInfo |
This response has no documented body fields.
501 Not Implemented
Body: RemoteServiceErrorResponse
Each item has these fields.
| Field | Type | Description |
|---|---|---|
error
required |
RemoteServiceErrorInfo |
This response has no documented body fields.
500 Internal Server Error
Body: RemoteServiceErrorResponse
Each item has these fields.
| Field | Type | Description |
|---|---|---|
error
required |
RemoteServiceErrorInfo |
This response has no documented body fields.
default The request failed. The body carries the standard error envelope: a machine-readable `error.code`, a human-readable `error.message`, and `error.validationErrors` when the failure was a validation rejection. See the error-code reference in this document's description for the values `error.code` can take.
Body: RemoteServiceErrorResponse
Each item has these fields.
| Field | Type | Description |
|---|---|---|
error
required |
RemoteServiceErrorInfo |
This response has no documented body fields.
429 The request was refused because a rate limit was exceeded. Wait at least the interval `Retry-After` names before retrying, then back off. Limits are tuned per deployment, so read the allowance from the response headers rather than assuming a fixed ceiling.
Body: RateLimitProblemDetails
Each item has these fields.
| Field | Type | Description |
|---|---|---|
type
required |
string | The problem type identifier. Always the same value: the failure is the status code itself, so there is no sub-type for a caller to branch on. nullable |
title
required |
string | A short, human-readable summary of the problem type. nullable |
status
required |
integer (int32) | The HTTP status code, repeated in the body as the problem-details format defines. |
detail
required |
string | A human-readable explanation of this occurrence of the problem. nullable |
retryAfterSeconds
required |
integer (int32) | How long to wait before retrying, in whole seconds, carrying the same figure as the `Retry-After` header. Always at least one: a value of zero would invite an immediate retry that is certain to be rejected again. |
This response has no documented body fields.
Errors
A failed request returns the platform error envelope. The
error reference lists every value
error.code can carry and shows the four response shapes.