Endpoint Field Reference
Known integration endpoint codes and the response keys each one returns.
Known integration endpoints, their required inputs, and available response fields. Use this reference during SRD validation to:
- Verify that fields marked as "disabled (fetched)" are actually available from the endpoint
- Identify the correct endpoint when the SRD describes a fetch pattern
- Flag fields that cannot be prefilled because they don't exist in the endpoint response
- For unknown endpoints, specify what inputs and response the partner must provide
NIDA Endpoints (Adapter: FNIDAFETCH)
All NIDA endpoints use the same adapter (FNIDAFETCH) and return the same response structure.
NIDAVERIFYPHONE — Phone-based NID Verification (Primary)
The main NIDA endpoint used for NID verification with phone OTP.
Widget: customotpdatafetch or customidinput
Required Input: documentNumber (16-digit NID), msidn (phone number)
Available Response Fields:
| Response Key | Description | Typical SRD Label |
|---|---|---|
foreName | First name | First Name, Other Names, Forename |
surnames | Surname | Surname, Last Name |
dateOfBirth | Date of birth | Date of Birth, DOB |
sex | Gender (M/F) | Gender, Sex |
nationality | Nationality | Nationality |
maritalStatus | Marital status | Marital Status, Civil Status |
spouse | Spouse name | Spouse Name |
fatherNames | Father's full name | Father's Name |
motherNames | Mother's full name | Mother's Name |
village | Village name | Village |
cell | Cell name | Cell |
sector | Sector name | Sector |
district | District name | District |
province | Province name | Province |
villageId | Village ID code | — |
countryOfBirth | Country of birth | Country of Birth |
placeOfBirth | Place of birth | Place of Birth |
documentNumber | NID number | National ID, Document Number |
documentType | Document type | — |
issueNumber | Issue number | — |
dateOfIssue | Date of issue | Date of Issue |
dateOfExpiry | Date of expiry | Date of Expiry |
placeOfIssue | Place of issue | Place of Issue |
applicationNumber | Application number | — |
nin | National Identification Number | NIN |
civilStatus | Civil status | Civil Status |
applicantType | Applicant type | — |
countryOfDomicileCode | Country of domicile code | — |
countryOfDomicile | Country of domicile | Country of Domicile |
photo | Base64 encoded photo | Photo, Passport Photo |
signature | Base64 encoded signature | Signature |
status | Record status | — |
NIDAGETIDINFO — Child ID Verification
Widget: customidinput with idType: "CHILD_ID"
Required Input: documentNumber (Child application/ID number)
Available Response Fields: Same as NIDAVERIFYPHONE
NIDA_NIN — NIN Verification
Widget: customidinput with idType: "NIN"
Required Input: documentNumber (NIN)
Available Response Fields: Same as NIDAVERIFYPHONE
CRVS Endpoints — Civil Registration and Vital Statistics
All CRVS adapters automatically inject keyphrase from configuration. The input is typically a document number or CRVS reference number.
FGETBIRTHRECORD — Birth Record Fetch
Widget: customcrvsidinput or customgenericdatafetch
Required Input: documentNumber or crvsReferenceNumber
Available Response Fields:
| Response Key | Description |
|---|---|
surName | Child's surname |
postNames | Child's post-names |
documentNumber | Document number |
documentType | Document type |
nin | NIN |
nid | NID |
crvsReferenceNumber | CRVS reference number |
registrationStatus | Registration status |
sex | Sex |
dateOfBirth | Date of birth |
nationality | Nationality |
placeOfBirth | Place of birth |
countryOfBirth | Country of birth |
fatherSurName | Father's surname |
fatherPostNames | Father's post-names |
fatherNationality | Father's nationality |
fatherDOB | Father's DOB |
fatherResidence | Father's residence |
fatherName | Father's full name |
motherSurName | Mother's surname |
motherPostNames | Mother's post-names |
motherNationality | Mother's nationality |
motherDOB | Mother's DOB |
motherResidence | Mother's residence |
motherName | Mother's full name |
civilStatusOfficeName | Civil status office |
civilStatusOfficeLocation | Office location |
civilRegistrarName | Registrar name |
dateOfBirthRegistration | Registration date |
dateOfRecordIssuance | Issuance date |
applicationNumber | Application number |
issueNumber | Issue number |
dateOfIssue | Date of issue |
dateOfExpiry | Date of expiry |
placeOfIssue | Place of issue |
maritalStatus | Marital status |
citizenStatus | Citizen status |
applicantType | Applicant type |
domicileCountry | Domicile country |
domicileProvince | Domicile province |
domicileDistrict | Domicile district |
domicileSector | Domicile sector |
domicileCell | Domicile cell |
domicileVillage | Domicile village |
FGETDEATHRECORD — Death Record Fetch
Required Input: documentNumber or crvsReferenceNumber
Available Response Fields:
| Response Key | Description |
|---|---|
name | Deceased surname |
postNames | Deceased post-names |
documentNumber | Document number |
documentType | Document type |
nin | NIN |
registrationStatus | Registration status |
sex | Sex |
dateOfBirth | Date of birth |
nationality | Nationality |
dateOfDeath | Date of death |
placeOfDeath | Place of death |
mannerOfDeath | Manner of death |
residence | Residence |
domicile | Domicile |
dateOfDeathRegistration | Registration date |
courtOrderNumber | Court order number |
civilStatus | Civil status |
spouseName | Spouse surname |
spousePostNames | Spouse post-names |
fatherName | Father's name |
motherName | Mother's name |
fatherNationality | Father's nationality |
motherNationality | Mother's nationality |
vitalStatus | Vital status |
civilStatusOfficeName | Civil status office |
civilStatusOfficeLocation | Office location |
civilRegistrarName | Registrar name |
dateOfRecordIssuance | Issuance date |
FGETMARRIAGERECORD — Marriage Record Fetch
Required Input: crvsReferenceNumber
Available Response Fields:
| Response Key | Description |
|---|---|
crvsReferenceNumber | CRVS reference |
crvstransactionNumber | Transaction number |
registrationStatus | Registration status |
dateOfMarriage | Date of marriage |
dateOfRecordIssuance | Issuance date |
matrimonialRegime | Matrimonial regime |
civilStatusOfficeName | Civil status office |
civilStatusOfficeLocation | Office location |
civilRegistrarName | Registrar name |
| husbandDetails (nested) | |
husbandDetails.documentNumber | Husband NID |
husbandDetails.nin | Husband NIN |
husbandDetails.surName | Husband surname |
husbandDetails.postNames | Husband post-names |
husbandDetails.sex | Sex |
husbandDetails.dateOfBirth | DOB |
husbandDetails.nationality | Nationality |
husbandDetails.maritalStatus | Marital status |
husbandDetails.vitalStatus | Vital status |
husbandDetails.domicile | Domicile |
husbandDetails.residence | Residence |
husbandDetails.fatherName | Father's name |
husbandDetails.motherName | Mother's name |
| wifeDetails (nested) | Same structure as husbandDetails |
FGETDIVORCERECORD — Divorce Record Fetch
Required Input: crvsReferenceNumber
Available Response Fields: Similar to marriage record + dateOfDivorce, courtOrderNumber
FGETRECOGNITIONRECORD — Child Recognition Record Fetch
Required Input: crvsReferenceNumber
Available Response Fields: Similar to birth record + recognition-specific parent details
RRA — TIN Lookup (Adapter: FGETTINDETAILS, endpointCode: FTINDETAILS)
Widget: customtininput
Form url: /integration/v1/fetch/sync (standard integration gateway path)
Required Input: tinNumber (passed as URL path parameter)
The payload is wrapped in an RRA envelope — the fetchable fields live under ResponseObject:
{
"MessageCode": 1,
"MessageDescription": "SUCCESS",
"ResponseObject": {
"Category": "Small taxpayer",
"Cell": "NGOMA",
"DetailedAddress": "131 kigali",
"ManagerNames": "Michael Oliver",
"District": "KICUKIRO",
"EmailAddress": "test_business@yopmail.com",
"PhoneNumber": "250794772376",
"Province": "KIGALI CITY",
"Sector": "KICUKIRO",
"Village": "AHITEGEYE",
"Fax": null,
"NationalId": "1193380008234704",
"SupplierName": "Company Ltd - ZXUJP",
"SupplierTin": "100005000"
}
}Available Response Fields (PascalCase as returned by the endpoint):
| Response Key | Description | Typical SRD Label |
|---|---|---|
SupplierName | Business/supplier name | Business Name, Company Name |
SupplierTin | TIN number echoed back | TIN |
Category | RRA taxpayer category — "Small taxpayer" or "Large taxpayer" | Taxpayer category, Company size |
ManagerNames | Manager / representative full name | Managing Director Names, Representative |
NationalId | Manager NID — can be null | Manager National ID |
PhoneNumber | Phone number | Managing Director phone number |
EmailAddress | Email address | Managing Director email address |
Province | Company province | Province |
District | Company district | District |
Sector | Company sector | Sector |
Cell | Company cell | Cell |
Village | Company village | Village |
DetailedAddress | Free-text street address on the RRA record | Address, Detailed Address |
Fax | Fax number (frequently null — never rely on it) | — |
Category(taxpayer category) is available, and it takes exactly two values:"Small taxpayer"and"Large taxpayer". There is no medium category. It is the usual driver for dynamic pricing, conditional attachments and small/large workflow branches.It is matched as an exact string, so use that spelling verbatim in pricing conditions, display rules and workflow conditions —
"Small taxpayer"is not"Small Taxpayer"and not"SMALL COMPANY". Two conditions cover the whole value set, but keep a catch-all on dynamic pricing anyway: a price whose conditions don't match the submitted value does not resolve and no bill is generated.If the field is hidden on the form but still read downstream, it must be hidden with
props.hideField(value kept and submitted), neverhide(clears the model) ordisabled(not submitted).
Note: Some TIN endpoints return vehicle details instead (plateNumber, chassisNumber, etc.). Confirm with the partner which fields their specific endpoint returns.
NLA — UPI Land Parcel Lookup (Adapter: FGETUPIDETAILS)
The flatter of the two UPI endpoints. Returns parcel coordinates, which LAIS does not — but less owner, tenure and location-code detail. See LAIS_UPI_FETCH and the comparison table below it before choosing.
Widget: customgenericdatafetch or custom input
Required Input: upi (Unique Parcel Identifier, passed as query parameter)
{
"upi": "1/03/01/04/30",
"area": 2,
"landUseNameEnglish": "Commercial",
"landUseNameKinyarwanda": "",
"rightType": "",
"remainingLeaseTerm": "",
"xCoordinate": "-1.9426",
"yCoordinate": "30.0567",
"coordinateReferenceSystem": "Geographic Coordinate System",
"parcelLocation": {
"village": { "villageCode": "101010111", "villageName": "Umurabyo" },
"cell": { "cellCode": "1010101", "cellName": "Akabahizi" },
"sector": { "sectorCode": "010101", "sectorName": "Gitega" },
"district": { "districtCode": "101", "districtName": "Nyarugenge" },
"province": { "provinceCode": "1", "provinceName": "Kigali" }
},
"isUnderRestriction": false,
"hasMortgage": false,
"inProcess": false,
"owners": [
{
"fullName": "George R. Kim",
"idNo": "1193380008248067",
"idTypeName": "National ID",
"countryName": "Rwanda",
"sharePercentage": "40",
"gender": "Male",
"maritalStatus": "Married",
"succession": true,
"minor": false
}
],
"representative": {
"surname": "Muhire",
"foreNames": "Benjamin",
"idNo": "34567891",
"idTypeName": "National ID",
"countryName": "Rwanda",
"gender": "Male",
"maritalStatus": "Single",
"address": {
"village": { "villageCode": "101010111", "villageName": "Umurabyo" },
"cell": { "cellCode": "1010101", "cellName": "Akabahizi" },
"sector": { "sectorCode": "010101", "sectorName": "Gitega" },
"district": { "districtCode": "101", "districtName": "Nyarugenge" },
"province": { "provinceCode": "1", "provinceName": "Kigali" }
}
},
"restrictions": [{ "restrictionTypeId": "", "restrictionText": "" }]
}Available Response Fields:
| Response Key | Description | Typical SRD Label |
|---|---|---|
upi | UPI identifier | UPI, Plot number |
area | Parcel area | Parcel size, Land size |
landUseNameEnglish | Land use (English) | Existing Land Use |
landUseNameKinyarwanda | Land use (Kinyarwanda) | — |
rightType | Right type | Right type, Tenure |
remainingLeaseTerm | Remaining lease term | Remaining lease term |
xCoordinate | Parcel X coordinate (latitude) | GPS coordinates |
yCoordinate | Parcel Y coordinate (longitude) | GPS coordinates |
coordinateReferenceSystem | CRS the coordinates are expressed in | — |
isUnderRestriction | Restriction flag | — |
hasMortgage | Mortgage flag | — |
inProcess | In process flag | — |
parcelLocation.village.villageName | Village | Village |
parcelLocation.cell.cellName | Cell | Cell |
parcelLocation.sector.sectorName | Sector | Sector |
parcelLocation.district.districtName | District | District |
parcelLocation.province.provinceName | Province | Province |
parcelLocation.<level>.<level>Code | NISR location code at each level | — |
owners[].fullName | Owner name | Owner, Owners |
owners[].idNo | Owner ID | Owner ID |
owners[].idTypeName | ID type | — |
owners[].countryName | Country | — |
owners[].sharePercentage | Share % | Ownership share |
owners[].gender | Gender | — |
owners[].maritalStatus | Marital status | — |
owners[].succession | Succession flag | — |
owners[].minor | Minor flag | — |
representative.surname | Representative surname | Representative Surname |
representative.foreNames | Representative other names | Representative Other Names |
representative.idNo | Representative ID number | Representative ID |
representative.idTypeName | Representative ID type | — |
representative.countryName | Representative country | — |
representative.gender | Representative gender | — |
representative.maritalStatus | Representative marital status | — |
representative.address.* | Representative address, same shape as parcelLocation | — |
restrictions[].restrictionTypeId | Restriction type id | — |
restrictions[].restrictionText | Restriction description | Restriction |
Not returned — do not mark these as fetched:
| Commonly requested in SRDs | Reality |
|---|---|
| Planned / intended land use | Only existing land use is returned (landUseNameEnglish). Capture planned usage as applicant input. |
| Building / structure details | Not in the response. |
| Parcel valuation | Not in the response. |
ownersandrestrictionsare arrays. A single text field cannot hold them. Either render a read-only table, or project a joined summary (e.g. owner names) into a flat field via a form expression. Note the arrays can be empty.Coordinates are available via
xCoordinate/yCoordinate— an SRD asking the applicant to type GPS coordinates for a parcel that was just looked up should normally prefill them instead.
NLA — UPI Land Parcel Lookup (LAIS_UPI_FETCH)
The richer of the two UPI endpoints. Returns trilingual land use, tenure/right type, NISR location codes, full owner and representative records, and pre-flattened owner/restriction/mortgage strings.
Widget: customgenericdatafetch or custom input
Required Input: upi (Unique Parcel Identifier)
{
"data": {
"upi": "1/03/05/01/3788",
"inTransaction": false,
"area": 538,
"remainingLeaseTerm": 49,
"landUse": {
"landUseId": 11,
"landUseTypeNameKinyarwanda": "Gutura",
"landUseTypeNameEnglish": "Residential",
"landUseTypeNameFrench": "Usage résidentiel",
"endDate": null,
"leaseTerm": 49
},
"tenure": {
"rightTypeId": "EL",
"rightTypeName": "Emphyteutic Lease",
"rightTypeCategory": "Real Right",
"rightTypeKind": "Property",
"isInquiry": true,
"onCertificate": true
},
"address": {
"villageName": "Radari",
"villageId": "103050110",
"cellName": "BUSANZA",
"cellId": "1030501",
"sectorName": "KANOMBE",
"sectorId": "10305",
"districtName": "Kicukiro",
"districtId": "103",
"provinceNameEnglish": "Kigali City",
"provinceNameKinyarwanda": "Umujyi wa Kigali",
"provinceNameFrench": "Ville de Kigali",
"provinceId": "01",
"string": "Kigali City,Kicukiro,KANOMBE,BUSANZA,Radari"
},
"mortgages": [],
"restrictions": [],
"owners": [
{
"rightId": "15453145",
"upi": "1/03/05/01/3788",
"partyId": "1199080036009082_RW",
"startTransactionId": "103050137881516253541557",
"endTransactionId": null,
"naturalPerson": {
"partyId": "1199080036009082_RW",
"idTypeId": "NID",
"countryId": "RW",
"idNo": "1199080036009082",
"tin": null,
"villageId": "102100306",
"boxNo": null,
"streetName": null,
"addressLine1": "",
"surname": "KANYAMAHANGA",
"foreNames": "JEAN CLAUDE",
"maritalStatus": null,
"gender": "M",
"isProvisional": false,
"fullName": "KANYAMAHANGA JEAN CLAUDE"
},
"party": {
"partyId": "1199080036009082_RW",
"partyTypeId": "NATURAL_PERSON",
"startTransactionId": "103050137881516253541557",
"endTransactionId": null,
"party_id": "1199080036009082_RW"
},
"businessType": "NATURAL_PERSON",
"share": "100.00"
}
],
"representative": {
"person": {
"partyId": "1199080036009082_RW",
"idTypeId": "NID",
"countryId": "RW",
"idNo": "1199080036009082",
"surname": "KANYAMAHANGA",
"foreNames": "JEAN CLAUDE",
"fullName": "KANYAMAHANGA JEAN CLAUDE",
"gender": "M",
"maritalStatus": null,
"tin": null,
"villageId": "102100306",
"boxNo": null,
"streetName": null,
"addressLine1": "",
"isProvisional": false,
"address": {
"villageName": "Kagarama",
"villageId": "102100306",
"cellName": "KAGUGU",
"cellId": "1021003",
"sectorName": "KINYINYA",
"sectorId": "10210",
"districtName": "Gasabo",
"districtId": "102",
"provinceNameEnglish": "Kigali City",
"provinceNameKinyarwanda": "Umujyi wa Kigali",
"provinceNameFrench": "Ville de Kigali",
"provinceId": "01",
"string": "Kigali City,Gasabo,KINYINYA,KAGUGU,Kagarama"
}
}
}
},
"owners": "[{\"fullName\":\"KANYAMAHANGA JEAN CLAUDE\",\"idOrPassport\":\"1199080036009082\",\"sharePercent\":\"100\",\"partyId\":\"1199080036009082_RW\",\"tin\":null}]",
"restrictions": "[]",
"mortgages": "[]"
}Parcel
| Response Key | Description | Typical SRD Label |
|---|---|---|
data.upi | UPI identifier | UPI, Plot number |
data.area | Parcel area (number, m²) | Parcel size, Land size |
data.remainingLeaseTerm | Remaining lease term (number, years) | Remaining lease term |
data.inTransaction | Parcel currently in a transaction | — |
data.landUse.landUseTypeNameEnglish | Land use (English) | Existing Land Use |
data.landUse.landUseTypeNameKinyarwanda | Land use (Kinyarwanda) | — |
data.landUse.landUseTypeNameFrench | Land use (French) | — |
data.landUse.landUseId | Land use id | — |
data.landUse.leaseTerm | Full lease term (years) | Lease term |
data.landUse.endDate | Land use end date | — |
Tenure
| Response Key | Description | Typical SRD Label |
|---|---|---|
data.tenure.rightTypeId | Right type code (FO full ownership, EL emphyteutic lease) | — |
data.tenure.rightTypeName | Right type label | Right type, Tenure |
data.tenure.rightTypeCategory | Right category (e.g. Real Right) | — |
data.tenure.rightTypeKind | Right kind (e.g. Property) | — |
data.tenure.isInquiry | Inquiry flag | — |
data.tenure.onCertificate | Whether the right appears on the certificate | — |
rightTypeIdis the stable code;rightTypeNameis the display label. Drive display rules, pricing conditions and workflow branches offrightTypeId, never off the label.
Address
data.address and data.representative.person.address share the same shape.
| Response Key | Description | Typical SRD Label |
|---|---|---|
villageName / villageId | Village name and NISR code | Village |
cellName / cellId | Cell name and NISR code | Cell |
sectorName / sectorId | Sector name and NISR code | Sector |
districtName / districtId | District name and NISR code | District |
provinceNameEnglish | Province (English) | Province |
provinceNameKinyarwanda | Province (Kinyarwanda) | — |
provinceNameFrench | Province (French) | — |
provinceId | Province NISR code | — |
string | Pre-joined full address, comma-separated | Address |
The
*Idcodes are NISR location codes. Use them, not the names, forCODE_FROM_LOCATIONoffice assignment — see Office Assignment.address.stringis a ready-made read-only address line; no expression needed to build one.
Owners
Two representations of the same data are returned. Pick one — don't populate from both.
data.owners[] — full nested records:
| Response Key | Description |
|---|---|
data.owners[].rightId | Right id |
data.owners[].partyId | Party id (stable owner identifier) |
data.owners[].share | Ownership share, e.g. "50.00" |
data.owners[].businessType | NATURAL_PERSON or a legal-person type |
data.owners[].startTransactionId | Transaction that created the right |
data.owners[].endTransactionId | Transaction that ended it (null if current) |
data.owners[].naturalPerson.fullName | Owner full name |
data.owners[].naturalPerson.surname | Surname |
data.owners[].naturalPerson.foreNames | Other names |
data.owners[].naturalPerson.idNo | ID / passport number |
data.owners[].naturalPerson.idTypeId | ID type code, e.g. NID |
data.owners[].naturalPerson.countryId | Country code, e.g. RW |
data.owners[].naturalPerson.gender | M / F |
data.owners[].naturalPerson.maritalStatus | Marital status — null in observed samples |
data.owners[].naturalPerson.tin | TIN — null in observed samples |
data.owners[].naturalPerson.villageId | Owner's village NISR code |
data.owners[].naturalPerson.isProvisional | Provisional record flag |
data.owners[].party.partyTypeId | Party type |
Top-level owners — a pre-flattened JSON string:
"owners": "[{\"fullName\":\"NTIRIVAMUNDA JEAN\",\"idOrPassport\":\"1195180000318048\",\"sharePercent\":\"50\",\"partyId\":\"1622084_3\",\"tin\":null}]"Keys: fullName, idOrPassport, sharePercent, partyId, tin. This is the convenient form for
a read-only owners table — but note sharePercent is "50" here where data.owners[].share is
"50.00", so don't mix the two in one display.
Gotchas in the owners block:
owners,restrictionsandmortgagesat the top level are serialised strings, not arrays. They must be parsed before use. The arrays underdata.are real arrays.data.owners[]carries bothParty(capital P) andparty(lowercase) with identical content. Useparty; the capitalised duplicate is an artifact.- Only
naturalPersonhas been observed. WhenbusinessTypeis notNATURAL_PERSONthe owner object presumably carries a legal-person block instead — confirm the shape with TechOps before designing a form that must handle company-owned parcels.- Names arrive unnormalised. One observed sample has
foreNames: " JEAN"with a leading space, producingfullName: "NTIRIVAMUNDA JEAN"with a double space. Trim before printing on a certificate.- A parcel can have several owners (two at 50% each in the observed samples). A single text field cannot hold them.
Representative
data.representative.person has the same shape as data.owners[].naturalPerson, plus a nested
address object.
| Response Key | Description | Typical SRD Label |
|---|---|---|
data.representative.person.fullName | Representative full name | Representative name |
data.representative.person.surname | Surname | Representative Surname |
data.representative.person.foreNames | Other names | Representative Other Names |
data.representative.person.idNo | ID / passport number | Representative ID |
data.representative.person.idTypeId | ID type code | — |
data.representative.person.gender | M / F | — |
data.representative.person.address.* | Representative address, same shape as data.address | Representative address |
Restrictions and mortgages
data.restrictions[] and data.mortgages[] are arrays; the top-level restrictions and
mortgages are the same content as serialised strings. Both were empty in every observed
sample, so the element shape is unconfirmed — get a populated sample from TechOps before
building a form that depends on restriction or mortgage detail.
Note there is no isUnderRestriction / hasMortgage boolean here, unlike FGETUPIDETAILS.
Derive the flag from array length.
Not returned — do not mark these as fetched
| Commonly requested in SRDs | Reality |
|---|---|
| Planned / intended land use | Only existing land use is returned. Capture planned usage as applicant input. |
| GPS coordinates | Not returned by LAIS. FGETUPIDETAILS does return xCoordinate / yCoordinate. |
| Building / structure details | Not in the response. |
| Parcel valuation | Not in the response. |
Choosing between the two UPI endpoints
| Need | Use |
|---|---|
| Trilingual land use, tenure / right type code | LAIS_UPI_FETCH |
| NISR location codes for office assignment | LAIS_UPI_FETCH |
| Full owner records, or a ready-made owners table | LAIS_UPI_FETCH |
| Representative details with their own address | LAIS_UPI_FETCH |
Pre-joined address line (address.string) | LAIS_UPI_FETCH |
| GPS coordinates of the parcel | FGETUPIDETAILS |
| Simple restriction / mortgage booleans | FGETUPIDETAILS |
| A flat response with no nesting to unwrap | FGETUPIDETAILS |
Default to LAIS_UPI_FETCH unless the form needs parcel coordinates. Name the chosen endpoint
explicitly in the SRD — the two differ in shape, key names and nesting depth, so
populates.valueKey paths are not interchangeable between them.
EPOBOX — Address Lookup (Adapter: FEPOBOXFETCH / FEPOBOXDETAILSFETCH)
Widget: customgenericdatafetch
Required Input: phoneNumber (auto-prefixed with +25 if missing)
Available Response Fields (FEPOBOXDETAILSFETCH):
| Response Key | Description |
|---|---|
data.address | Full address |
data.virtualAddressName | Virtual address name |
data.addressType | Type (1=Individual, 2=Company) |
data.poBoxNumber | PO Box number |
data.expiresAt | Expiration date |
data.applicationNumber | Application number |
data.amount | Amount |
data.user.firstName | User first name |
data.user.lastName | User last name |
data.user.email | User email |
data.user.nationalId | User NID |
data.user.phoneNumber | User phone |
data.postalCode.name | Postal code name |
data.postalCode.postalCode | Postal code |
data.postalCode.city | City |
data.postalCode.country | Country |
data.status.name | Status name |
Inference Rules for Unknown Endpoints
When the SRD references a fetch that doesn't match any known endpoint above:
-
Infer the likely endpoint from context:
- NID/National ID/Identity fields → NIDAVERIFYPHONE (via FNIDAFETCH)
- Birth/Child/Certificate number → FGETBIRTHRECORD
- Death certificate → FGETDEATHRECORD
- Marriage certificate → FGETMARRIAGERECORD
- TIN/Tax/Business → FGETTINDETAILS
- UPI/Land/Parcel → LAIS_UPI_FETCH (default) or FGETUPIDETAILS (if coordinates are needed)
- Phone + address/postal → FEPOBOXDETAILSFETCH
- OTP + NID → NIDAVERIFYPHONE
-
If inference is possible, use the inferred endpoint's field reference to validate the SRD fields and note the inference in the API report.
-
If inference is not possible, the API report must explicitly state:
- Required Inputs: What the user must provide to trigger the fetch
- Required Response: What fields the SRD expects back (list every disabled/fetched field)
- Status:
Pending — Confirm API contract with partner - Raise a MEDIUM gap