openapi: 3.1.0 info: title: Webhook API version: 1.0.0 description: >- CreditApp async webhook api. For the latest version please visit https://api.creditapp.ca/. prefix: CreditApp webhooks: /creditor-verification-income-state-set: post: summary: >- This webhook is triggered when a creditor sets the income state for a verification application. requestBody: content: application/json: schema: type: array description: >- Array of income items that were set for the application verification. items: oneOf: - type: object description: Paystub income item properties: include: type: boolean description: >- Whether this income item is included in the calculation. paystubId: type: string description: Unique identifier for the paystub. paystubGroup: type: string description: >- The name for the paystub group this paystub belongs to. applicantId: type: string format: uuid description: Unique identifier for the applicant. applicationId: type: string format: uuid description: Unique identifier for the application. creditorId: type: string format: uuid description: Unique identifier for the creditor. type: type: string enum: - paystub - paystubAverage description: Type of income item. earnings: type: array nullable: true description: Array of earnings line items from the paystub. items: type: object properties: type: type: string enum: - REGULAR - ADD-ON - EXCLUDE description: Type of line item. description: type: string description: Description of the earnings line item. hours: type: number nullable: true description: Hours worked for this line item. rate: type: number nullable: true description: Hourly rate for this line item. amount: type: number nullable: true description: Amount for this earnings line item. ytd: type: number nullable: true description: Year-to-date amount for this earnings line item. subtype: type: string enum: - BONUS - OVERTIME - REIMBURSEMENT nullable: true description: >- Subtype for specialty line items (bonuses, overtime, reimbursements). required: - type - description frequency: type: string nullable: true description: Pay frequency (e.g., "bi-weekly", "monthly"). currentPayPeriod: type: number nullable: true description: Current pay period number. totalPayPeriods: type: number nullable: true description: Total number of pay periods. lastIncomeDate: type: string format: date nullable: true description: Date of the last income payment. incomeSource: type: string enum: - PAY_PERIOD_GROSS - PAY_PERIOD_GROSS_WITHOUT_OVERTIME - YTD - YTD_WITHOUT_OVERTIME - YTD_FROM_FIRST_SATURDAY - YTD_FROM_FIRST_SATURDAY_WITHOUT_OVERTIME - MANUAL description: Source of the income. nullable: true approvedIncomeAmount: type: number nullable: true description: The approved income amount for this item. required: - include - applicantId - applicationId - creditorId - type - type: object description: >- Financial snapshot income item (from banking/transaction analysis) properties: include: type: boolean description: >- Whether this income item is included in the calculation. categoryOrGroupId: type: string description: Category or group identifier for the income source. applicantId: type: string format: uuid description: Unique identifier for the applicant. applicationId: type: string format: uuid description: Unique identifier for the application. creditorId: type: string format: uuid description: Unique identifier for the creditor. type: type: string enum: - financialSnapshot description: Type of income item. category: type: string nullable: true description: >- Category of the income (e.g., "Payroll", "Other Income"). lastIncomeDate: type: string format: date nullable: true description: Date of the last income transaction. averageMonthlyDeposit: type: number nullable: true description: Average monthly deposit amount. approvedIncomeAmount: type: number nullable: true description: The approved income amount for this item. required: - include - categoryOrGroupId - applicantId - applicationId - creditorId - type parameters: - name: X-CREDIT-APP-SIGNATURE in: header required: true schema: type: string description: HMAC signature for verifying the request authenticity. responses: '200': description: Webhook received successfully /creditor-application-ready-for-review: post: summary: >- This webhook is triggered when a creditor application is marked as ready for review. requestBody: content: application/json: schema: type: object properties: creditorId: type: string format: uuid description: Unique identifier for the creditor. applicationId: type: string format: uuid description: Unique identifier for the application. externalApplicationId: type: string description: >- External application identifier used by the creditor's system. required: - creditorId - applicationId - externalApplicationId parameters: - name: X-CREDIT-APP-SIGNATURE in: header required: true schema: type: string description: HMAC signature for verifying the request authenticity. responses: '200': description: Webhook received successfully /creditor-income-documents: post: summary: >- This webhook is triggered when an income document is created or submitted for a creditor application. requestBody: content: application/json: schema: type: object properties: applicationId: type: string format: uuid description: Unique identifier for the application. creditorId: type: string format: uuid description: Unique identifier for the creditor. document: type: string format: uri description: Signed URL to access the document from S3. externalApplicationId: type: string description: >- External application identifier used by the creditor's system. fileName: type: string description: Name of the document file. required: - applicationId - creditorId - document - externalApplicationId - fileName parameters: - name: X-CREDIT-APP-SIGNATURE in: header required: true schema: type: string description: HMAC signature for verifying the request authenticity. responses: '200': description: Webhook received successfully /creditor-application-processing-delay: post: summary: >- This webhook is triggered when a creditor application is marked as having a processing delay. requestBody: content: application/json: schema: type: object properties: creditorId: type: string format: uuid description: Unique identifier for the creditor. applicationId: type: string format: uuid description: Unique identifier for the application. externalApplicationId: type: string description: >- External application identifier used by the creditor's system. required: - creditorId - applicationId - externalApplicationId parameters: - name: X-CREDIT-APP-SIGNATURE in: header required: true schema: type: string description: HMAC signature for verifying the request authenticity. responses: '200': description: Webhook received successfully /creditor-application-note-added: post: summary: >- This webhook is triggered when a note is added to a creditor application. requestBody: content: application/json: schema: type: object properties: creditorId: type: string format: uuid description: Unique identifier for the creditor. externalApplicationId: type: string description: >- External application identifier used by the creditor's system. note: type: string description: The content of the note. type: type: string enum: - external - internal description: >- Type of note - external notes are visible to the creditor, internal notes are only visible within CreditApp. createdByName: type: string description: >- Full name of the user who created the note, or "CreditApp" if the user information is not available. required: - creditorId - externalApplicationId - note - type - createdByName parameters: - name: X-CREDIT-APP-SIGNATURE in: header required: true schema: type: string description: HMAC signature for verifying the request authenticity. responses: '200': description: Webhook received successfully /integration-enabled: post: summary: This webhook is triggered when an integration is enabled by a retailer. requestBody: content: application/json: schema: type: object properties: retailerId: type: string format: uuid description: Unique identifier for the retailer. retailerName: type: string description: The name of the retailer that enabled the integration. configJson: type: object description: >- A JSON object containing the result of the configuration for the integration. required: - retailerId - retailerName parameters: - name: X-INTEGRATION-SIGNATURE in: header required: true schema: type: string description: HMAC signature for verifying the request authenticity. responses: '200': description: Webhook received successfully /application-booked: post: summary: This webhook is triggered when an application is booked. requestBody: content: application/json: schema: type: object properties: retailerId: type: string format: uuid description: Unique identifier for the retailer. status: enum: - BOOKED description: Status of the application. creditorId: type: string format: uuid description: Unique identifier for the creditor. applicationId: type: string format: uuid description: Unique identifier for the application. conditions: type: string description: Some requested item. required: - retailerId - status - creditorId - applicationId parameters: - name: X-CREDIT-APP-SIGNATURE in: header required: true schema: type: string description: HMAC signature for verifying the request authenticity. responses: '200': description: Webhook received successfully /application-approved: post: summary: This webhook is triggered when an application is approved. requestBody: content: application/json: schema: type: object properties: retailerId: type: string format: uuid description: Unique identifier for the retailer. status: enum: - APPROVED description: Status of the application. creditorId: type: string format: uuid description: Unique identifier for the creditor. applicationId: type: string format: uuid description: Unique identifier for the application. conditions: type: string description: Some requested item. firstPaymentDate: type: string format: date description: Date of the first payment. frequency: type: string enum: - WEEKLY - BI-WEEKLY - SEMI-MONTHLY - MONTHLY description: Frequency of payments. interestRate: type: number description: Interest rate of the approved loan. approvedPayment: type: object properties: amount: type: number description: Amount of the approved payment. currency: type: string enum: - CAD description: Currency of the approved payment. rateReduction: type: number description: Rate reduction applied. termStretch: type: integer description: Number of months the term is stretched. maxPayment: type: object properties: amount: type: number description: Maximum payment amount. currency: type: string enum: - CAD description: Currency of the maximum payment. required: - retailerId - status - creditorId - applicationId - firstPaymentDate - frequency - interestRate parameters: - name: X-CREDIT-APP-SIGNATURE in: header required: true schema: type: string description: HMAC signature for verifying the request authenticity. responses: '200': description: Webhook received successfully /application-conditionally-approved: post: summary: This webhook is triggered when an application is conditionally approved. requestBody: content: application/json: schema: type: object properties: retailerId: type: string format: uuid description: Unique identifier for the retailer. status: enum: - CONDITIONALLY_APPROVED description: Status of the application. creditorId: type: string format: uuid description: Unique identifier for the creditor. applicationId: type: string format: uuid description: Unique identifier for the application. conditions: type: string description: The conditions of the conditionally approved application. firstPaymentDate: type: string format: date description: Date of the first payment. frequency: type: string enum: - WEEKLY - BI-WEEKLY - SEMI-MONTHLY - MONTHLY description: Frequency of the application. interestRate: type: number description: Interest rate of the application. approvedPayment: type: object properties: amount: type: number description: Amount of the approved payment. currency: type: string enum: - CAD description: Currency of the approved payment. rateReduction: type: number description: Rate reduction of the application. termStretch: type: integer description: Number of months the term is stretched. maxPayment: type: object properties: amount: type: number description: Maximum payment amount. currency: type: string enum: - CAD description: Currency of the maximum payment. required: - retailerId - status - creditorId - applicationId - firstPaymentDate - frequency - interestRate parameters: - name: X-CREDIT-APP-SIGNATURE in: header required: true schema: type: string description: HMAC signature for verifying the request authenticity. responses: '200': description: Webhook received successfully /documents-incomplete: post: summary: This webhook is triggered when an application is marked incomplete. requestBody: content: application/json: schema: type: object properties: retailerId: type: string format: uuid description: Unique identifier for the retailer. status: enum: - INCOMPLETE description: Status of the application. creditorId: type: string format: uuid description: Unique identifier for the creditor. applicationId: type: string format: uuid description: Unique identifier for the application. conditions: type: string description: The conditions of the application. firstPaymentDate: type: string format: date description: Date of the first payment. frequency: type: string enum: - WEEKLY - BI-WEEKLY - SEMI-MONTHLY - MONTHLY description: Frequency of the application. interestRate: type: number description: Interest rate of the application. approvedPayment: type: object properties: amount: type: number description: Amount of the approved payment. currency: type: string enum: - CAD description: Currency of the approved payment. rateReduction: type: number description: Rate reduction of the application. termStretch: type: integer description: Number of months the term is stretched. maxPayment: type: object properties: amount: type: number description: Maximum payment amount. currency: type: string enum: - CAD description: Currency of the maximum payment. required: - retailerId - status - creditorId - applicationId - firstPaymentDate - frequency - interestRate parameters: - name: X-CREDIT-APP-SIGNATURE in: header required: true schema: type: string description: HMAC signature for verifying the request authenticity. responses: '200': description: Webhook received successfully /awaiting-decision: post: summary: This webhook is triggered when an application is awaiting a decision. requestBody: content: application/json: schema: type: object properties: retailerId: type: string format: uuid description: Unique identifier for the retailer. status: enum: - AWAITING_DECISION description: Status of the application. creditorId: type: string format: uuid description: Unique identifier for the creditor. applicationId: type: string format: uuid description: Unique identifier for the application. conditions: type: string description: The conditions of the application. required: - retailerId - status - creditorId - applicationId parameters: - name: X-CREDIT-APP-SIGNATURE in: header required: true schema: type: string description: HMAC signature for verifying the request authenticity. responses: '200': description: Webhook received successfully /pending-banking: post: summary: >- This webhook is triggered when an application is pending bank connection. requestBody: content: application/json: schema: type: object properties: retailerId: type: string format: uuid description: Unique identifier for the retailer. status: enum: - PENDING_BANK_CONNECTION description: Status of the application. creditorId: type: string format: uuid description: Unique identifier for the creditor. applicationId: type: string format: uuid description: Unique identifier for the application. conditions: type: string description: The conditions of the application. required: - retailerId - status - creditorId - applicationId parameters: - name: X-CREDIT-APP-SIGNATURE in: header required: true schema: type: string description: HMAC signature for verifying the request authenticity. responses: '200': description: Webhook received successfully /application-declined: post: summary: This webhook is triggered when an application is declined. requestBody: content: application/json: schema: type: object properties: retailerId: type: string format: uuid description: Unique identifier for the retailer. status: enum: - DECLINED description: Status of the application. creditorId: type: string format: uuid description: Unique identifier for the creditor. applicationId: type: string format: uuid description: Unique identifier for the application. conditions: type: string description: The conditions of the application. required: - retailerId - status - creditorId - applicationId parameters: - name: X-CREDIT-APP-SIGNATURE in: header required: true schema: type: string description: HMAC signature for verifying the request authenticity. responses: '200': description: >- Webhook received successfully. For more info on usage please see https://api.creditapp.ca/guides/Webhooks/Webhook%20Authentication /application-exported: post: summary: >- This webhook is triggered when an application is exported by a finance manager to an external integration. requestBody: content: application/json: schema: type: object properties: retailerId: type: string format: uuid description: Unique identifier for the retailer. applicationId: type: string format: uuid description: Unique identifier for the application. creditorId: type: string format: uuid description: Unique identifier for the creditor. primaryApplicant: type: object additionalProperties: false properties: firstName: type: string lastName: type: string sin: type: string nullable: true dateOfBirth: type: string format: date phoneNumber: type: string email: type: string format: email addressHistory: type: array items: type: object additionalProperties: false properties: addressType: type: string apartmentSuite: type: string nullable: true city: type: string direction: type: string enum: - 'N' - NE - E - SE - S - SW - W - NW nullable: true id: type: string format: uuid monthlyRentOrMortgage: type: object additionalProperties: false properties: amount: type: number currency: type: string monthsAtAddress: type: integer pOBoxNumber: type: string nullable: true postalCode: type: string province: type: string enum: - AB - BC - MB - NB - NL - NS - NT - NU - 'ON' - PE - QC - SK - YT residenceType: type: string enum: - RENT - OWN_FREE_AND_CLEAR - OWN_WITH_MORTGAGE - OWN_MOBILE_HOME - RESERVE_HOUSING - WITH_PARENTS - OTHER searchAddress: type: string nullable: true streetName: type: string streetNo: type: string streetType: type: string yearsAtAddress: type: integer employmentHistory: type: array items: type: object additionalProperties: false properties: additionalIncomeSources: type: array items: type: string enum: - CAR_ALLOWANCE - CHILD_SUPPORT - DISABILITY_PAYMENTS - INVESTMENT_INCOME - PENSIONS - RENTAL_INCOME - WORKERS_COMPENSATION - OTHER apartmentSuite: type: string nullable: true city: type: string direction: type: string nullable: true employerName: type: string employmentPhone: type: string frequency: type: string grossIncome: type: object additionalProperties: false properties: amount: type: number currency: type: string id: type: string format: uuid monthsWorked: type: integer occupation: type: string postalCode: type: string province: type: string status: type: string enum: - FULL_TIME - FULL_TIME_PROBATION - PART_TIME - PART_TIME_CASUAL - RETIRED - SEASONAL_SUMMER - SEASONAL_WINTER - SELF_EMPLOYED - UNEMPLOYED streetName: type: string streetNo: type: string streetType: type: string type: type: string enum: - AT_HOME - EXECUTIVE - LABOURER - MANAGEMENT - OFFICE_STAFF - OTHER - PRODUCTION - PROFESSIONAL - RETIRED - SALES - SELF_EMPLOYED - SERVICE - STUDENT - TRADES - UNEMPLOYED yearsWorked: type: integer relationship: type: string enum: - COMMON_LAW - EMPLOYER - FRIEND - IN_LAW - OTHER - PARENT - SIBLING - SPOUSE nullable: true coApplicant: type: object nullable: true additionalProperties: false properties: firstName: type: string nullable: true lastName: type: string nullable: true sin: type: string nullable: true dateOfBirth: type: string format: date nullable: true phoneNumber: type: string nullable: true email: type: string format: email nullable: true addressHistory: type: array items: type: object properties: addressType: type: string apartmentSuite: type: string city: type: string direction: type: string enum: - 'N' - NE - E - SE - S - SW - W - NW id: type: string format: uuid monthlyRentOrMortgage: type: object properties: amount: type: number currency: type: string monthsAtAddress: type: integer pOBoxNumber: type: string postalCode: type: string province: type: string enum: - AB - BC - MB - NB - NL - NS - NT - NU - 'ON' - PE - QC - SK - YT residenceType: type: string enum: - RENT - OWN_FREE_AND_CLEAR - OWN_WITH_MORTGAGE - OWN_MOBILE_HOME - RESERVE_HOUSING - WITH_PARENTS - OTHER searchAddress: type: string streetName: type: string streetNo: type: string streetType: type: string yearsAtAddress: type: integer employmentHistory: type: array items: type: object properties: additionalIncomeSources: type: array items: type: string enum: - CAR_ALLOWANCE - CHILD_SUPPORT - DISABILITY_PAYMENTS - INVESTMENT_INCOME - PENSIONS - RENTAL_INCOME - WORKERS_COMPENSATION - OTHER apartmentSuite: type: string city: type: string direction: type: string employerName: type: string employmentPhone: type: string frequency: type: string grossIncome: type: object properties: amount: type: number currency: type: string id: type: string format: uuid monthsWorked: type: integer occupation: type: string postalCode: type: string province: type: string status: type: string enum: - FULL_TIME - FULL_TIME_PROBATION - PART_TIME - PART_TIME_CASUAL - RETIRED - SEASONAL_SUMMER - SEASONAL_WINTER - SELF_EMPLOYED - UNEMPLOYED streetName: type: string streetNo: type: string streetType: type: string type: type: string enum: - AT_HOME - EXECUTIVE - LABOURER - MANAGEMENT - OFFICE_STAFF - OTHER - PRODUCTION - PROFESSIONAL - RETIRED - SALES - SELF_EMPLOYED - SERVICE - STUDENT - TRADES - UNEMPLOYED yearsWorked: type: integer worksheet: type: object additionalProperties: false properties: programId: type: string format: uuid tierId: type: string format: uuid vehicle: type: object additionalProperties: false properties: id: type: string vin: type: string status: type: string msrp: type: object properties: amount: type: number currency: type: string adjustedMsrp: type: number nullable: true odometer: type: object properties: amount: type: number unit: type: string uvc: type: string nullable: true year: type: integer make: type: string model: type: string trim: type: string series: type: string nullable: true style: type: string nullable: true addOnOptions: type: array items: type: object properties: auto: type: boolean averageValue: type: object properties: amount: type: number currency: type: string cleanValue: type: object properties: amount: type: number currency: type: string extraCleanValue: type: object properties: amount: type: number currency: type: string id: type: string format: uuid name: type: string roughValue: type: object properties: amount: type: number currency: type: string addOns: type: array items: type: string nullable: true deductOptions: type: array items: type: object additionalProperties: false properties: auto: type: boolean averageValue: type: object properties: amount: type: number currency: type: string cleanValue: type: object properties: amount: type: number currency: type: string id: type: string format: uuid name: type: string roughValue: type: object properties: amount: type: number currency: type: string deducts: type: array items: type: string nullable: true roughWholesaleValue: type: object properties: amount: type: number currency: type: string cleanWholesaleValue: type: object properties: amount: type: number currency: type: string averageWholesaleValue: type: object properties: amount: type: number currency: type: string extraCleanWholesaleValue: type: object properties: amount: type: number currency: type: string taxExempt: type: boolean taxProvince: type: string enum: - BC - AB - MB - NB - NL - NS - NT - NU - 'ON' - PE - QC - SK - YT nullable: true gstPercent: type: number gst: type: object properties: amount: type: number currency: type: string gstAdjusted: type: boolean pstHstPercent: type: number pstHst: type: object properties: amount: type: number currency: type: string pstHstAdjusted: type: boolean salePrice: type: object properties: amount: type: number currency: type: string cashDown: type: object properties: amount: type: number currency: type: string rebate: type: object properties: amount: type: number currency: type: string tradeIn: type: object nullable: true additionalProperties: false properties: vin: type: string nullable: true allowance: type: object properties: amount: type: number currency: type: string lienAmount: type: object properties: amount: type: number currency: type: string lienHolder: type: string nullable: true odometer: type: object properties: amount: type: number unit: type: string nullable: true year: type: integer nullable: true make: type: string nullable: true model: type: string nullable: true dealerAdminFee: type: object properties: amount: type: number currency: type: string nullable: true registrationFee: type: object properties: amount: type: number currency: type: string nullable: true creditorFee: type: object properties: amount: type: number currency: type: string nullable: true gpsFee: type: object properties: amount: type: number currency: type: string nullable: true licenseFee: type: object properties: amount: type: number currency: type: string nullable: true installationDeliveryFee: type: object properties: amount: type: number currency: type: string nullable: true ahInsuranceFee: type: object properties: amount: type: number currency: type: string nullable: true lifeInsuranceFee: type: object properties: amount: type: number currency: type: string nullable: true gapInsurance: type: object properties: amount: type: number currency: type: string nullable: true extServiceContract: type: object properties: amount: type: number currency: type: string nullable: true otherTaxable: type: object properties: amount: type: number currency: type: string otherNonTaxable: type: object properties: amount: type: number currency: type: string otherTaxableDescription: type: string otherNonTaxableDescription: type: string dealerReserve: type: object properties: amount: type: number currency: type: string firstPaymentDate: type: string format: date deliveryDate: type: string format: date interestRate: type: number term: type: integer frequency: type: string enum: - BI_WEEKLY - MONTHLY - SEMI_MONTHLY - WEEKLY totalFinancedAmount: type: object properties: amount: type: number currency: type: string worksheetPayment: type: object properties: amount: type: number currency: type: string required: - retailerId - applicationId - creditorId - primaryApplicant - worksheet parameters: - name: X-CREDIT-APP-SIGNATURE in: header required: true schema: type: string description: HMAC signature for verifying the request authenticity. responses: '200': description: Webhook received successfully components: {}