Prerequisites: an existing application, banking data and an offer. Use bearer authentication throughout and retain the application ID from creation.
Calculate an offer
Supply applicationId in the query for all three calculation routes. The LOC slider uses SliderRequest; LOC and invoice calculations use CalculationRequest.
{
"amount": 5000,
"percentOfIncome": 0.15,
"terms": 12,
"fixedRepaymentCalculation": false
}
Replace example amounts and terms with appropriate values. Both calculation routes require a non-zero amount and terms between 7 and 52, including invoice calculation. These calls calculate and store values used by subsequent withdrawal steps; they do not complete a withdrawal.
Complete company and applicant details
Add company details, then the primary applicant and any required secondary applicant. Read the applicant list to retain the IDs needed for signing. Company fields are all required. Applicant details include name, email, mobile and a complete driver-license object.
Secondary applicants require non-empty miscellaneousData; an empty object fails the current validator. Supply the actual supplementary information required by your integration, rather than an invented placeholder field. See validation for field limits.
Select a bank account and sign
Read the available bank accounts and select one with set-primary-bank-account. Its id parameter is the returned bank-account string identifier, not a new GUID you generate. Read contract details and the applicant list before collecting signatures.
The current get-contract-details implementation returns one ContractDetails object, although Swagger declares an array. Treat that as a known contract discrepancy when generating a client. The guide does not imply that the server returns multiple contracts from this route; get-contracts is the document-list route.
Submit both captured signatures using the signing format. Company/applicant updates, primary bank selection, signing and approval document submission check offer expiry. Re-read the application/offer state if one of those steps is rejected.
Submit required documents
Read get-required-documents and submit the documents requested for this application. Use its supporting-document identifier and the correct file metadata. Follow the upload guide for base64 encoding and size limits.
Endpoint reference
Success types below are copied from Swagger. Several current handlers return boolean or applicant-ID values despite omitting a success-body schema. Use get-all-applicants to read applicant identifiers reliably; do not assume that “Not specified” describes an empty response.
| Method | Route | Inputs | Swagger success |
|---|---|---|---|
POST | /api/ApplicationApproval/add-company-details/{applicationId} | path: applicationId (required); body: body — CompanyDataRequest (required) | 200: Not specified |
POST | /api/ApplicationApproval/add-primary-applicant-details/{applicationId} | path: applicationId (required); body: body — PrimaryApplicantRequest (required) | 200: Not specified |
POST | /api/ApplicationApproval/add-secondary-applicant-details/{applicationId} | path: applicationId (required); body: body — SecondaryApplicantRequest (required) | 200: Not specified |
GET | /api/ApplicationApproval/get-contracts/{applicationId} | path: applicationId (required) | 200: ContractDocumentResponse[] |
GET | /api/ApplicationApproval/get-contract-details/{applicationId} | path: applicationId (required) | 200: ContractDetails[] |
GET | /api/ApplicationApproval/get-all-applicants/{applicationId} | path: applicationId (required) | 200: PublicApiApplicantResponse[] |
GET | /api/ApplicationApproval/get-all-bank-accounts/{applicationId} | path: applicationId (required) | 200: PublicApiBankFeedAccountResponse[] |
GET | /api/ApplicationApproval/get-primary-bank-account/{applicationId} | path: applicationId (required) | 200: Not specified |
POST | /api/ApplicationApproval/set-primary-bank-account/{applicationId}/{id} | path: applicationId (required); path: id (required) | 200: Not specified |
POST | /api/ApplicationApproval/sign-contract/{applicationId}/{applicantId} | path: applicationId (required); path: applicantId (required); body: body — SignaturesRequest | 200: Not specified |
GET | /api/ApplicationApproval/get-required-documents/{applicationId} | path: applicationId (required) | 200: SupportDocumentDetails[] |
POST | /api/ApplicationApproval/submit-required-document/{applicationId} | path: applicationId (required); query: supportingDocumentId (required); query: fileType (required); query: fileName (required); body: body — string (byte) (required) | 200: Not specified |
POST | /api/ApplicationApproval/submit-document/{applicationId} | path: applicationId (required); query: fileType (required); query: fileName (required); body: body — string (byte) (required) | 200: Not specified |
POST | /api/Calculation/application-loc-calculation-slider | query: applicationId (required); body: body — SliderRequest | 200: SliderResult[] |
POST | /api/Calculation/application-loc-calculation | query: applicationId (required); body: body — CalculationRequest | 200: CalculationResponse |
POST | /api/Calculation/application-invoice-calculation | query: applicationId (required); body: body — CalculationRequest | 200: CalculationResponse |