Insert excerpt | ||||||
---|---|---|---|---|---|---|
|
Table of Contents |
---|
CurrentStatusV2
The CurrentStatusV2 object is the sole return type of all the web methods in the API. It It is intended to provide information about what has just happened, as well as giving an overview of the person’s current verification status, and the list of data sources that will help the person become fully verified. Always Always presenting this information helps to reduce the chattiness between greenID and the customer application.
...
Name | Type | Description |
---|---|---|
sourceList | SourceListV2 | This member contains a list of Source objects, each of which corresponds to a data source that is available to the person for the purpose of becoming fully verified. The SetFields web The setFields web method expects one of these names as thesourceId input parameter. |
verificationResult | Copy of Data Structures | This member contains all of the verification information currently available for a person. It It is a complete record of all checks that have been performed, their results, and an indicator of the person’s overall verification status. |
sourceFields | SourceFieldsV2 | This member contains a list of fields that are required for a particular data source. This This includes the field’s name, type and other pertinent information for displaying and collecting a value for the field. |
checkResult | LastCheckResultV2 | This member indicates the outcome of a check against a data source that was performed during a call to the SetFields web the setFields web method. This This member also indicates whether the check is still in progress. |
userToken | String | This field is for future features in the API, and can be ignored for now. |
LastCheckResultV2
The CheckResult object The LastCheckResultV2 object is intended to give a snapshot of the status of a check that has been performed during a call to the SetFields web the setFields web method.
...
Name | Type | Description |
---|---|---|
stillWorking | boolean | This member indicates whether the check is still in progress. This This feature is still under development; currently the value is always false. |
state | String | This member gives the current state of the check. Refer Refer to the Reference Table for Individual Source States for valid values. |
SourceListV2
Name | Type | Description |
---|---|---|
sources | List<SourceV2> | Simply a list of Source objects. |
SourceV2
Name | Type | Description |
---|---|---|
state | String | This member reflects the current state of the source. The The valid values are the same as the state member of the CheckResult object. If If a source has not been used, then this member will be “EMPTY”. |
passed | boolean | This member indicates whether this source has been passed, i.e. the check is in one of the verified states. |
name | String | This member is the name of the data source. This This name is expected to be used to refer to this data source in calls to the SetFields web the setFields web method. |
available | boolean | This member indicates whether this data source is currently available; sometimes a particular data source may not be available. |
notRequired | boolean | This member indicates whether this data source can help a person become fully verified. If If the value is true, then there is no point using this data source because it cannot help the person become fully verified. |
oneSourceLeft | boolean | This member indicates whether completing this data source will make a person fully verified. This This member is very valuable because it indicates which sources should be attempted first, thereby shortening the verification process. |
order | int | The order in which the source would be displayed if it were being displayed by greenID. Sources Sources that are more likely to result in the person becoming fully verified are at the top of the list, i.e. their “order” number is lower. |
attributes | This member contains a list of HTML attributes that should be applied to any HTML input collecting input from a person. For For example, the HTML attribute “class=’required’” would be represented by a NameValuePair withname=”class” and value=”required”. |
SourceFieldsV2
Name | Type | Description |
---|---|---|
fieldList | FieldList | This member contains a list of fields that are required for a particular data source. The The members of list represent HTML fields for collecting input from the person. |
rawData | String | This member contains an HTML fragment that, if displayed, will present HTML fields for collecting data from a person in order to perform a check against a data source. Some Some customer may prefer this approach rather than generating their own HTML from the data contained in the fieldList member. |
FieldListV2
Name | Type | Description |
---|---|---|
sourceField | List<FieldV2> | This member simply contains a list of Field objects. |
FieldV2
...
Name | Type | Description |
---|---|---|
type | String | The type of HTML input that is required (at least strongly suggested) for collecting the data for this field from the person. For For example, a value of “text” would indicate a simple HTML text input is appropriate. |
name | String | The name of the HTML input that would collect data for this field from the person. The The name also indicates what the data field is, for example, the value “aec_givenname” indicates the field holds the given name for the AEC data source. |
value | String | This member contains any pre-existing value for the HTML field. For For example, the Field with the name “aec_givenname” will be pre-populated with the person’s given name (derived from the person’s master record established during the call to the RegisterUser web method) the first time the GetFields method is called with the sourceId “aec”. |
label | String | This member contains label. Please Please refer to the section on Labels. |
selectItem | List<NameValuePair> | This member contains a list of item names and values for a select item Field. |
attribute | List<NameValuePair> | This member contains a list of the names and values of any HTML attributes that this Field has. For For example, the attribute class=”required” would be represented by a NameValuePair with name=”class” and value=”required”. |
order | Integer | The order in which this field should be displayed. This feature is not yet implemented, and the value is always zero. |
InputFields
Name | Type | Description |
---|---|---|
input | This member contains a list of names and values that correspond to input parameters to the SetFields web the setFields web method. The The names are expected to be those that have previously been returned from the GetFields method for a particular data source. For For example, a Visa number will be represented by a NameValuePairwith namea NameValuePair with name=”visa_number” and value=”11111111”. |
DateOfBirth
This type is a convenience type for holding a partial date, especially useful for representing dates of birth. This This type holds just the date part, and does not contain any reference to a time component or timezone; this avoids potential issues with date of birth timestamps arising from different timezones.
...
Name | Type | Description |
---|---|---|
day | int | The day component of a date of birth. |
month | int | The month component of a date of birth. |
year | int | The full year component of a date of birth, for example 1975, i.e. not 75. |
RegistrationDetailsV2
Need a summaryName | Type | Description | Restrictions |
---|---|---|---|
currentResidentialAddress | Address | The person's current residential address. | |
dateCreated | DateTime | The timestamp of when this verification attempt was created. | |
dob | string | The person's date of birth. | |
string | |||
extraData | List<NameValuePair> | ||
homePhone | string | ||
mobilePhone | string | ||
name | Name | ||
previousResidentialAddress | Address | ||
workPhone | string |
Address
Name
VerificationResultV2
The VerificationResultV2 type describes the person’s verification results to date. This is always returned so that the caller always has the latest results for that person.
...
Name
...
Type
...
Description
...
overallVerificationStatus
...
String
...
This member indicates the outcome of the entire verification process. Refer to the Reference Table for Overall Outcome States for values.
...
- “POSTOFFICE” – the person was verified by completing a Post Office form and visiting a branch of Australia Post, where their identity documents were manually inspected.
- “ASSISTED” – the person was verified by an administrative user.
- “EXTERNAL” – the person was verified outside of greenID, and the results have been loaded in to greenID.
...
RichCheckResult
The RichCheckResult type contains all the details of a check against a particular data source.
Name
Type
Description
name
String
The name of the check. For example, if a check against the Electoral Roll was attempted, then the name would be “AEC”. As each customer will accept a different set of checks, customers should refer to their individual rules document for the list of names that they can expect. Refer to Data Source Reference for a list of data source names.
state
String
The state of the individual check. For a list of possible states, please see the Reference Table of individual source states.
method
String
The method via which the check was carried out. This is an enumerated type, for a list of possible values, please see the Reference Table of Method Names.
List<RichFieldResult>
Only the fields that were successfully checked, or were changed, are returned. Any field that was not checked is not returned. Note that this may mean the array is empty.
RichFieldResult
Name
Type
Description
name
String
The name of the field. The possible name will depend on the source used. Again which sources used will depend on the individual customer setup, and new sources, with potentially new fields are constantly being added. For a list of possible field names for each source, please refer to the Data Source Reference tables.
status
String
This member indicates the status of the field. Refer to the Reference Table for Field Status for possible values.
dataDifference
String
This member will contain changed values. That is, if a value was changed in order to become verified, then this member will contain the value that was the data was changed to, and subsequently verified.
AusAddress
The AusAddress complex type has the following structure:
Member
Type
Required?
Description
Contract
flatNumber
String
255 Chars
No
The flat number component of an address. For example, in the address “1/5 Fake St”, “1” is the flat number.
streetNumber
String
255 Chars
No
The street number component of an address. In the example above, “5” is the street number.
streetName
String
255 Chars
Yes
The name of the street.
Cannot be null. Cannot be the empty string.
streetType
String
255 Chars
Yes
A valid Australian street type.
A valid Australian street type, or its recognised abbreviation. For a full list of acceptable values, please see Street Types
suburb
String
255 Chars
Yes
The suburb or town component of the individual's address.
Cannot be null. Cannot be the empty string.
For New Zealand addresses, this field should contain the suburb; the "city" address element is not required by any current greenID New Zealand data sources.
state
String
255 Chars
Yes
The state component of the individual's address. Must be a valid Australian state or territory.
One of:
- ACT
- NSW
- NT
- QLD
- SA
- TAS
- VIC
- WA
postcode
String
255 Chars
Yes
The postcode component of the individual's address. Must be a valid Australian postcode.
Must be 4 numbers between 0 and 9 (i.e. as a regular expression: ^[\d]{4}$)
country
String
255 Chars
Yes
The country code. This must be the ISO 3166 country code. The country code can be given in either the alpha-2, alpha-3 or numeric format.
Please refer to https://www.iso.org/obp/ui/#search for a full (and up to date) list of ISO 3166 country codes.
PostOfficeData
The complex type PostOfficeData has the structure described below.
This type and the following members are for the most part exact representations of the fields found in an Australia Post contract. The reader should be aware of the individual Australia Post contract they will be using to ensure that they can match up the fields. These fields are retrieved from a flat file and stored in Strings with no interpretation of the meanings of the fields. Not all implementations of an Australia Post contract will have all the fields detailed below.
Member
Type
Description
Contract
customerId
String
255 Chars
This parameter is GreenID's identifier for the client application. The value is supplied by GreenID.
Not null.
documents
String
Human readable string that is a comma separated list of all the names of the documents used to verify this user.
Not null.
header
detailRecordHeader
Representation of the header of the flat file received from Australia Post
Not null.
poFileName
String
255 Chars
The name of the actual file read from Australia Post
Not null.
records
documentRecord[]
List of individual representations of the documents used to verify this User
Not null.
DetailRecordHeader
The complex type DetailRecordHeader has the structure described below:
Member
Type
Description
Contract
amount
String
255 Chars
Unsigned amount in cents.
channelId
String
255 Chars
0 = default
date
String
255 Chars
ddmmyy (NOTE: system generated date with no slashes)
dateOfBirth
String
255 Chars
ddmmyyyy represents the date of birth on the form that was checked.
filler
String
255 Chars
Often there will be filler, it serves no purpose and should be ignored.
formVersion
String
255 Chars
A-Z
givenName
String
255 Chars
16 characters of the given name that was on the form that was checked.
id
Long
Extra identifier that identifies this record. Not set by Australia Post.
idWizardRefNo
String
255 Chars
paymentMethod
String
255 Chars
'00' = Cash/EFTPOS/Direct Debit, '01'-'09' = number of Cheques, '11' = VISA, '12 = MasterCard. Note: This may differ per contract, but in general the above applies.
phoneNo
String
255 Chars
Phone number as entered on the form that was checked.
postOfficeName
String
255 Chars
Presumably the name of the Post Office the form was checked at.
recordNo
String
255 Chars
Seems to be fixed as ‘1’
recordType
String
255 Chars
Seems to be fixed as ‘5’
referenceNo
String
255 Chars
The reference number used to identify this user. Most often this will be the userId. It must be 16 characters or less.
surname
String
255 Chars
20 characters of the surname that was on the form that was checked.
totalNumberOfIdDocument
String
255 Chars
Number of documents used to verify this user
typeCode
String
255 Chars
uniqueReferenceNumber
String
255 Chars
wwwwwwttnnnnn, first 6 digits are AP Work Centre Code.
DocumentRecord
The complex type DocumentRecord has the structure described below:
Member | Type | Description | Contract |
---|---|---|---|
amount
| String 255 Chars | Always zero
|
|
comments
| String 255 Chars |
|
|
countryOfIssue
| String 255 Chars | Name of country from the document if applicable
|
|
dateOfBirthMatchesaForm
| String 255 Chars | Y = Yes, X = not applicable |
|
documentExpiryDate
| String 255 Chars | dd/mm/yyyy; spaces if not applicable NOTE: (manually entered date with slashes) |
|
documentName
| String 255 Chars | This is an automatic lookup to convert the idDocumentType member into a human readable document name. |
|
documentNumber
| String 255 Chars | Alphanumeric, eg passport number. |
|
filler
| String 255 Chars | Often there will be filler, it serves no purpose and should be ignored. |
|
id | Long | Extra identifier that identifies this record. Not set by Australia Post. |
|
idDocumentType
| String 255 Chars | Code number representing the document type. The lookup for the name is done automatically and stored in the documentName member. |
|
idWizardRefNo
| String 255 Chars |
|
|
issuedBy
| String 255 Chars | This may be present instead of country of Issue, stateOrTerritoryOfIssue, utilityAccountIssuer and utilityAccountType. It may selectively hold this information in a less rigid format. |
|
The person's email address. | May be null. Must be a valid email address following the Standard Hibernate validation and checking Top Level Domain (TLD) is valid. See https://data.iana.org/TLD/tlds-alpha-by-domain.txt | ||
extraData | List<NameValuePair> | Any extra data elements that were supplied with the original registration. Identifier such as document numbers will not be present in the list, even if they were supplied at registration time. | Zero or more elements. |
homePhone | string | If present, must be 10 digits only. | |
mobilePhone | string | If present, must be 10 digits only. | |
name | Name | The person's name. | |
previousResidentialAddress | Address | The person's previous residential address. | |
workPhone | string | If present, must be 10 digits only. |
Address
The Address object is intended to serve as a container for address information for countries with a variety of different address schemes and formats. The fields that are present or required will depend on the country that is specified. Similarly, fields may have different validation rules depending on the country, for example, the field "postcode" must be a four digit string for an Australian address, but it must be a five digit string for a US address. For requirements for individual countries, please contact greenID.
Name | Type | Description | Contract |
---|---|---|---|
alley | string | ||
amalgamatedMunicipality | string | ||
area | String | ||
avenue | String | ||
block | String | ||
canton | String | ||
chome | String | ||
city | String | ||
country | String | The country code. This must be the ISO 3166 country code. The country code can be given in either the alpha-2, alpha-3 or numeric format. | Please refer to https://www.iso.org/obp/ui/#search for a full (and up to date) list of ISO 3166 country codes. |
county | String | ||
deliveryNumber | String | ||
department | String | ||
direction | String | ||
dispatchingInformation | String | ||
district | String | ||
divisionFive | String | ||
divisionFour | String | ||
divisionOne | String | ||
divisionThree | String | ||
divisionTwo | String | ||
flatNumber | String | ||
level | String | ||
locality | String | ||
location | String | ||
mailCentre | String | ||
municipality | String | ||
neighbourhood | String | ||
organisation | String | ||
parish | String | ||
personName | String | ||
poBox | String | ||
postcode | String | ||
prefecture | String | ||
propertyName | String | ||
province | String | ||
quarter | String | ||
region | String | ||
ruralArea | String | ||
ruralLocality | String | ||
sector | String | ||
sectorNumber | String | ||
state | String | ||
streetName | String | ||
streetNumber | String | ||
streetType | String | ||
subdistrict | String | ||
subregion | String | ||
suburb | String | ||
town | String | ||
townCity | String | ||
township | String | ||
urbanLocality | String | ||
village | String |
Name
The Name complex type has the following structure:
Member | Type | Required? | Description | Contract |
---|---|---|---|---|
honorific | String 255 Chars | No | The honorific component of a person’s name, eg. “Mr”, “Miss”, etc. | |
givenName | String 255 Chars | Yes | A person’s given name. | Cannot be null. Cannot be the empty string. |
middleNames | String 255 Chars | No | A person’s middle names. Note that there can be multiple names. | |
surname | String 255 Chars | Yes | A person’s surname or last name. | Cannot be null. Cannot be the empty string. |
VerificationResultV2
The VerificationResultV2 type describes the person’s verification results to date. This is always returned so that the caller always has the latest results for that person.
Name | Type | Description |
---|---|---|
overallVerificationStatus | String | This member indicates the outcome of the entire verification process. Refer to the Reference Table for Overall Outcome States for values. |
ruleId | String | The identifier for the rule that was used to determine the verification outcome. |
mode | String | This member indicates the verification mode that was used. The mode is null, except in the following cases:
|
dateVerified | String | The date this person became verified (null if they have not yet been verified). |
individualResults | List<checkResultV2> | This member holds a list of results for the individual checks that have been performed to date. |
verificationID | String | The unique identifier for this verification attempt. |
CheckResultV2
The CheckResultV2 type contains all the details of a check against a particular data source.
Name | Type | Description |
---|---|---|
name | String | The name of the check. For example, if a check against the Electoral Roll was attempted, then the name would be “AEC”. As each customer will accept a different set of checks, customers should refer to their individual rules document for the list of names that they can expect. Refer to Data Source Reference for a list of data source names. |
state | String | The state of the individual check. For a list of possible states, please see the Reference Table of individual source states. |
method | String | The method via which the check was carried out. This is an enumerated type, for a list of possible values, please see the Reference Table of Method Names. |
mode | String | The verification mode used for this specific check. This shows HOW the check was made. Please see the Reference Table of possible modes. This can be null which indicates that no mode was used. |
dateVerified | Date | The date that this particular check became verified (or null if the check is not verified). |
fieldResults | List<FieldResultV2> | Only the fields that were successfully checked, or were changed, are returned. Any field that was not checked is not returned. Note that this may mean the array is empty. |
postOfficeData | PostOfficeData | If and only if the name of the CheckResult is “PostOffice” then this member will be present. Otherwise it will be null. This represents the raw data retrieved from Australia Post. |
extraData | List<NameValuePair> | Any extra data associated with this check. |
FieldResultV2
Name | Type | Description |
---|---|---|
addressType | String | Either "currentAddress" or "previousAddress", depending on whether the address was nominated as their current or previous residential address at registration time. |
name | String | The name of the field. The possible name will depend on the source used. Again which sources used will depend on the individual customer setup, and new sources, with potentially new fields are constantly being added. For a list of possible field names for each source, please refer to the Data Source Reference tables. |
status | String | This member indicates the status of the field. Refer to the Reference Table for Field Status for possible values. |
dataDifference | String | This member will contain changed values. That is, if a value was changed in order to become verified, then this member will contain the value that the data was changed to, and subsequently verified. |
data | String | This member contains the original data that was supplied the time of registration, or the “master record”. In the case of a status of ADDITION (see the Reference Table of Field Status) then this will hold the added data. |
extraData | List<NameValuePair> | This contains information about the data. At this time it contains either “previousAddress” or “currentAddress” to indicate which address this data was checked as. |
format | String | This member indicates the format of the data in this field. The value of this field will vary according to individual customer configurations. The most common value is “plain”, which indicates a plain text field. |
PostOfficeDataV2
The complex type PostOfficeDataV2 has the structure described below.
This type and the following members are for the most part exact representations of the fields found in an Australia Post contract. The reader should be aware of the individual Australia Post contract they will be using to ensure that they can match up the fields. These fields are retrieved from a flat file and stored in Strings with no interpretation of the meanings of the fields. Not all implementations of an Australia Post contract will have all the fields detailed below.
Member | Type | Description | Contract |
---|---|---|---|
customerId | String 255 Chars | This parameter is GreenID's identifier for the client application. The value is supplied by GreenID. | Not null. |
documents | String | Human readable string that is a comma separated list of all the names of the documents used to verify this user. | Not null. |
header | detailRecordHeader | Representation of the header of the flat file received from Australia Post | Not null. |
poFileName | String 255 Chars | The name of the actual file read from Australia Post | Not null. |
records | documentRecord[] | List of individual representations of the documents used to verify this User | Not null. |
DetailRecordHeader
The complex type DetailRecordHeader has the structure described below:
Member | Type | Description | Contract |
---|---|---|---|
amount | String 255 Chars | Unsigned amount in cents. | |
channelId | String 255 Chars | 0 = default | |
date | String 255 Chars | ddmmyy (NOTE: system generated date with no slashes) | |
dateOfBirth | String 255 Chars | ddmmyyyy represents the date of birth on the form that was checked. | |
filler | String 255 Chars | Often there will be filler, it serves no purpose and should be ignored. | |
formVersion | String 255 Chars | A-Z | |
givenName | String 255 Chars | 16 characters of the given name that was on the form that was checked. | |
id | Long | Extra identifier that identifies this record. Not set by Australia Post. | |
idWizardRefNo | String 255 Chars | ||
paymentMethod | String 255 Chars | '00' = Cash/EFTPOS/Direct Debit, '01'-'09' = number of Cheques, '11' = VISA, '12 = MasterCard. Note: This may differ per contract, but in general the above applies. | |
phoneNo | String 255 Chars | Phone number as entered on the form that was checked. | |
postOfficeName | String 255 Chars | Presumably the name of the Post Office the form was checked at. | |
recordNo | String 255 Chars | Seems to be fixed as ‘1’ | |
recordType | String 255 Chars | Seems to be fixed as ‘5’ | |
referenceNo | String 255 Chars | The reference number used to identify this user. Most often this will be the userId. It must be 16 characters or less. | |
surname | String 255 Chars | 20 characters of the surname that was on the form that was checked. | |
totalNumberOfIdDocument | String 255 Chars | Number of documents used to verify this user | |
typeCode | String 255 Chars | ||
uniqueReferenceNumber | String 255 Chars | wwwwwwttnnnnn, first 6 digits are AP Work Centre Code. |
DocumentRecord
The complex type DocumentRecord has the structure described below:
type has the following structure:Member | Type | Description | Contract | |||
---|---|---|---|---|---|---|
amount | String 255 Chars | Always zero | ||||
comments | String 255 Chars | |||||
countryOfIssue | String 255 Chars | Name of country from the document if applicable | ||||
dateOfBirthMatchesaForm | String 255 Chars | Y = Yes, X = not applicable | ||||
documentExpiryDate | String 255 Chars | dd/mm/yyyy; spaces if not applicable NOTE: (manually entered date with slashes) May not be present. |
| |||
nameMatchesForm
| String 255 Chars | Y = Yes, X = not applicable |
| |||
photoMatch documentName | String 255 Chars | Y = Yes, X = not applicable |
| |||
recordNo
| Strin 255 Chars |
|
| |||
recordType This is an automatic lookup to convert the idDocumentType member into a human readable document name. | ||||||
documentNumber | String 255 Chars | Alphanumeric, eg passport number. | ||||
filler | String 255 Chars |
|
| referenceNo Often there will be filler, it serves no purpose and should be ignored. | ||
id | Long | Extra identifier that identifies this record. Not set by Australia Post. | ||||
idDocumentType | String 255 Chars |
|
| residentialAddressMatchesForm Code number representing the document type. The lookup for the name is done automatically and stored in the documentName member. | ||
idWizardRefNo | String 255 Chars | Y = Yes, X = not applicable |
| |||
stateOrTerritoryOfIssue issuedBy | String 255 Chars | This may be present instead of country of Issue, stateOrTerritoryOfIssue, utilityAccountIssuer and utilityAccountType. It may selectively hold this information in a less rigid format. | ||||
issueDate | String 255 Chars | ACT, QLD, NSW, NT, SA, TAS, VIC or WA; |
| utilityAccountIssuer
| dd/mm/yyyy; spaces if not applicable NOTE: (manually entered date with slashes) May not be present. | |
nameMatchesForm | String 255 Chars | If specifically a utility, then the name. |
| utilityAccountType Y = Yes, X = not applicable | ||
photoMatch | String 255 Chars | 01 Y = electricityYes, 02 = gas, 03 = water, 04 = telephone |
|
NameValuePair
The NameValuePair complex type has the following structure:
Member
Type
Required?
Description
Contract
name
String
255 Chars
No
This will identify the data that is stored in this pair.
Needs to match an agreed upon value and be unique in the list.
value
String
255 Chars
No
The actual data being passed in this pair.
Name
The Name complexX = not applicable | |||
recordNo | Strin 255 Chars | ||
recordType | String 255 Chars | ||
referenceNo | String 255 Chars | ||
residentialAddressMatchesForm | String 255 Chars | Y = Yes, X = not applicable | |
stateOrTerritoryOfIssue | String 255 Chars | ACT, QLD, NSW, NT, SA, TAS, VIC or WA; | |
utilityAccountIssuer | String 255 Chars | If specifically a utility, then the name. | |
utilityAccountType | String 255 Chars | 01 = electricity, 02 = gas, 03 = water, 04 = telephone |
NameValuePair
The NameValuePair complex type has the following structure:
Member | Type | Required? | Description | Contract |
---|
honorific
String
255 Chars
No
name |
givenName
String
255 Chars
Yes
A person’s given name.
Cannot be null. Cannot be the empty string.
String 255 Chars | No |
A person’s middle names. Note that there can be multiple names.
This will identify the data that is stored in this pair. | Needs to match an agreed upon value and be unique in the list. |
value | String 255 Chars |
Yes
A person’s surname or last name.
No | The actual data being passed in this pair. |