Retrieves detailed information about a specific product application, including its status, product type, and customer details.
Retrieve Product Application Details
The GET /v2/productApplication endpoint returns comprehensive details about a specific product application within the Netevia Banking platform. It exposes the application's current state, the associated account holder snapshot, and any verification or document requirements tied to that application.
Endpoint
GET /v2/productApplication
Authentication
Bearer token required. Obtain via:
POST https://api.banking.netevia.dev/api/auth/v2
Include in header: Authorization: Bearer {token}
Token lifetime: 10 minutes. Refresh via POST /api/auth/refresh.
When to use
Use this endpoint when you need to review or process a product application on behalf of a partner or customer. It is particularly useful for tracking application progress (e.g., pending, approved, declined), confirming the product type associated with the application, and verifying that all customer details and compliance documents are accurate and complete.
Query Parameters
| Parameter | Type | Required | Description |
|---|---|---|---|
| applicationId | string | Yes | The unique identifier for the product application to retrieve. |
Response
200 OK
The response wraps all data inside a node object.
node object
| Field | Type | Description |
|---|---|---|
| node.typename | string | Internal type name of the node. |
| node.id | string | Unique identifier of the product application. |
| node.createdAt | string (date-time) | ISO 8601 timestamp when the application was created. |
| node.updatedAt | string (date-time) | ISO 8601 timestamp of the most recent update to the application. |
| node.applicationState | object | Current state of the application. |
| node.applicationState.status | string | Application status (e.g., PENDING, APPROVED, DECLINED). |
| node.accountHolderSnapshot | object | Snapshot of the account holder at the time of the application. |
| node.accountHolderSnapshot.typename | string | Type of account holder (e.g., PersonAccountHolder, BusinessAccountHolder). |
| node.accountHolderSnapshot.name | object | Name of the personal account holder (personal accounts). |
| node.accountHolderSnapshot.name.givenName | string | First name. |
| node.accountHolderSnapshot.name.familyName | string | Last name. |
| node.accountHolderSnapshot.name.title | string | Title (e.g., Mr., Ms., Dr.). |
| node.accountHolderSnapshot.name.suffix | string | Name suffix (e.g., Jr., III). |
| node.accountHolderSnapshot.currentVerification | object | Verification status for the account holder. |
| node.accountHolderSnapshot.currentVerification.status | string | Verification status (e.g., VERIFIED, UNVERIFIED, PENDING). |
| node.accountHolderSnapshot.currentVerification.reason | string | Reason associated with the current verification status. |
| node.accountHolderSnapshot.currentVerification.results | array | List of verification result codes and descriptions. |
| node.accountHolderSnapshot.currentVerification.results[].code | string | Result code from the verification check. |
| node.accountHolderSnapshot.currentVerification.results[].description | string | Human-readable description of the result code. |
| node.accountHolderSnapshot.currentVerification.requiredDocuments | array | List of documents required to complete verification. |
| node.accountHolderSnapshot.currentVerification.requiredDocuments[].createdAt | string (date-time) | When this document requirement was created. |
| node.accountHolderSnapshot.currentVerification.requiredDocuments[].referenceIdentifier | string | Reference identifier for the document requirement. |
| node.accountHolderSnapshot.currentVerification.requiredDocuments[].updatedAt | string (date-time) | When this document requirement was last updated. |
| node.accountHolderSnapshot.currentVerification.requiredDocuments[].status | string | Status of the required document (e.g., PENDING, SUBMITTED, ACCEPTED). |
| node.accountHolderSnapshot.currentVerification.requiredDocuments[].documentUploadSession | object | Upload session details for submitting documents. |
| node.accountHolderSnapshot.currentVerification.requiredDocuments[].documentUploadSession.status | string | Status of the upload session. |
| node.accountHolderSnapshot.currentVerification.requiredDocuments[].documentUploadSession.id | string | Unique identifier for the upload session. |
| node.accountHolderSnapshot.currentVerification.requiredDocuments[].documentUploadSession.primaryDocumentTypes | array of string | Accepted primary document types for this session. |
| node.accountHolderSnapshot.currentVerification.requiredDocuments[].documentUploadSession.uploadRequirements | array | Upload constraints for this session. |
| node.accountHolderSnapshot.currentVerification.requiredDocuments[].documentUploadSession.uploadRequirements[].constraints | array | List of document type constraints. |
| node.accountHolderSnapshot.currentVerification.requiredDocuments[].documentUploadSession.uploadRequirements[].constraints[].documentType | string | Document type required. |
| node.accountHolderSnapshot.currentVerification.requiredDocuments[].documentUploadSession.uploadRequirements[].constraints[].numberOfDocuments | integer | Number of documents required of this type. |
| node.accountHolderSnapshot.currentVerification.requiredDocuments[].uploadedDocuments | array | Documents already uploaded for this requirement. |
| node.accountHolderSnapshot.currentVerification.requiredDocuments[].uploadedDocuments[].status | string | Status of the uploaded document. |
| node.accountHolderSnapshot.currentVerification.requiredDocuments[].uploadedDocuments[].type | string | Type of the uploaded document. |
| node.accountHolderSnapshot.currentVerification.requiredDocuments[].uploadedDocuments[].createdAt | string (date-time) | When the document was uploaded. |
| node.accountHolderSnapshot.currentVerification.requiredDocuments[].uploadedDocuments[].updatedAt | string (date-time) | When the uploaded document record was last updated. |
| node.accountHolderSnapshot.primaryAuthorizedPerson | object | Primary authorized person (business accounts). |
| node.accountHolderSnapshot.primaryAuthorizedPerson.name | object | Name of the primary authorized person (same structure as name above). |
| node.accountHolderSnapshot.primaryAuthorizedPerson.currentVerification | object | Verification status for the primary authorized person (same structure as currentVerification above). |
| node.accountHolderSnapshot.businessProfile | object | Business profile details (business accounts only). |
| node.accountHolderSnapshot.businessProfile.currentVerification | object | Verification status for the business entity (same structure as currentVerification above). |
| node.accountHolderSnapshot.businessProfile.ultimateBeneficialOwners | array | List of ultimate beneficial owners (UBOs) of the business. |
| node.accountHolderSnapshot.businessProfile.ultimateBeneficialOwners[].name | object | Name of the UBO (same structure as name above). |
| node.accountHolderSnapshot.businessProfile.ultimateBeneficialOwners[].currentVerification | object | Verification status for the UBO (same structure as currentVerification above). |
{
"node": {
"typename": "PersonProductApplication",
"id": "app_01HZ9XK2M3N4P5Q6R7S8T9U0V1",
"createdAt": "2025-03-15T10:22:00Z",
"updatedAt": "2025-06-01T14:35:00Z",
"applicationState": {
"status": "APPROVED"
},
"accountHolderSnapshot": {
"typename": "PersonAccountHolder",
"name": {
"givenName": "Jane",
"familyName": "Smith",
"title": "Ms.",
"suffix": null
},
"currentVerification": {
"status": "VERIFIED",
"reason": null,
"results": [
{
"code": "KYC_PASS",
"description": "Identity verification passed successfully."
}
],
"requiredDocuments": []
},
"primaryAuthorizedPerson": null,
"businessProfile": null
}
}
}Error Codes
| Code | When it happens |
|---|---|
| 400 | Missing required applicationId query parameter or invalid format |
| 401 | Token missing, expired, or invalid |
| 403 | Insufficient permissions to access the specified application |
| 404 | No product application found matching the provided applicationId |
| 500 | Internal server error |
Common Mistakes
- Omitting the
applicationIdquery parameter — this parameter is required; the request will fail without it. - Using an
applicationIdthat belongs to a different partner scope — ensure the application was created under your authenticated partner account. - Expecting document upload session details when none are present —
requiredDocumentsanddocumentUploadSessionfields will be empty or null when verification is already complete. - Confusing
applicationState.status(the application workflow status) withcurrentVerification.status(the KYC/KYB check result) — both exist independently and must be checked separately.
Related Endpoints
POST /v2/productApplication— Submit a new product applicationGET /v2/productApplication/list— List all product applications for a partnerPOST /v2/productApplication/document— Upload a required document for a product applicationGET /v2/accountHolder— Retrieve account holder details
Example
curl -X GET "https://api.banking.netevia.dev/v2/productApplication?applicationId=app_01HZ9XK2M3N4P5Q6R7S8T9U0V1" \
-H "Authorization: Bearer YOUR_TOKEN" \
-H "Content-Type: application/json"