MBOnlineCreditApplicationService

<back to all web services

CreateOCARequest

The following routes are available for this service:
PUT/CreateOCA/
import datetime
import decimal
from marshmallow.fields import *
from servicestack import *
from typing import *
from dataclasses import dataclass, field
from dataclasses_json import dataclass_json, LetterCase, Undefined, config
from enum import Enum, IntEnum


@dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE)
@dataclass
class CreateOCARequestResponse:
    code: Optional[str] = None
    message: Optional[str] = None
    urn: Optional[int] = None


@dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE)
@dataclass
class GeneralDetails:
    oca_approval_number: Optional[str] = None
    enquiry_date_time: Optional[str] = None
    brand: Optional[int] = None
    customer_reference_number: Optional[str] = None
    customer_type: Optional[str] = None
    sourceof_business: Optional[str] = None
    tag_u_r_l: Optional[str] = None
    request_source: Optional[int] = None
    form_i_d: Optional[str] = None


@dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE)
@dataclass
class FinanceDetails:
    financial_product: Optional[str] = None
    duration: Optional[int] = None
    payment_rental_amount: Optional[Decimal] = None
    annual_mileage: Optional[int] = None
    excess_mileage_rate: Optional[Decimal] = None
    customer_deposit_contribution: Optional[Decimal] = None
    retailer_deposit_contribution: Optional[Decimal] = None
    manufacturer_deposit_contribution: Optional[Decimal] = None
    total_deposit_contribution: Optional[Decimal] = None
    cost_for_credit: Optional[Decimal] = None
    purchase_activation_fee: Optional[Decimal] = None
    total_amount_payable: Optional[Decimal] = None
    fixed_interest_rate: Optional[Decimal] = None
    representative_a_p_r: Optional[Decimal] = None
    optional_purchase_payment: Optional[Decimal] = None
    advanced_rental_amount: Optional[Decimal] = None
    payment_profile: Optional[str] = None
    rand_m_included: Optional[str] = None
    rand_m_level: Optional[str] = None
    product_type: Optional[str] = None
    frequency: Optional[str] = None
    pause_type: Optional[str] = None


@dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE)
@dataclass
class VehicleDetails:
    online_code: Optional[str] = None
    model_class: Optional[str] = None
    model_body: Optional[str] = None
    model_derivative: Optional[str] = None
    total_price: Optional[Decimal] = None
    otr_price: Optional[Decimal] = None
    vin: Optional[str] = None
    reg_no: Optional[str] = None
    current_mileage: Optional[int] = None
    first_registration_date: Optional[str] = None
    new_used_flag: Optional[str] = None
    new_vehicle_model_option_details: Optional[List[ModelOptionDetails]] = None


@dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE)
@dataclass
class DeliveryDetails:
    dealer_code: Optional[str] = None
    delivery_preference: Optional[str] = None


@dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE)
@dataclass
class ExistingVehicleDetails:
    trade_in_flag: Optional[str] = None
    trade_in_value: Optional[Decimal] = None
    trade_in_reg_no: Optional[str] = None
    settlement_flag: Optional[str] = None
    settlement_value: Optional[Decimal] = None
    settlement_reg_no: Optional[str] = None


@dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE)
@dataclass
class AddressWithTimeLine:
    address_line1: Optional[str] = None
    address_line2: Optional[str] = None
    address_line3: Optional[str] = None
    town: Optional[str] = None
    county: Optional[str] = None
    country: Optional[str] = None
    postcode: Optional[str] = None
    duration: Optional[str] = None
    date_started: Optional[str] = None


@dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE)
@dataclass
class Address:
    address_line1: Optional[str] = None
    address_line2: Optional[str] = None
    address_line3: Optional[str] = None
    address_line4: Optional[str] = None
    address_line5: Optional[str] = None
    postcode: Optional[str] = None


@dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE)
@dataclass
class EmployerDetails:
    employment_type: Optional[str] = None
    employers_name: Optional[str] = None
    occupation: Optional[str] = None
    employers_address: Optional[AddressWithTimeLine] = None


@dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE)
@dataclass
class CurrentEmploymentDetails:
    employer_details: Optional[EmployerDetails] = None
    months_at_employer: Optional[str] = None
    date_employment_commenced: Optional[str] = None
    annual_income: Optional[str] = None


@dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE)
@dataclass
class CreditApplicationIndividual:
    title: Optional[str] = None
    initial: Optional[str] = None
    first_name: Optional[str] = None
    surname: Optional[str] = None
    dateof_birth: Optional[str] = None
    gender: Optional[str] = None
    marital_status: Optional[str] = None
    residential_status: Optional[str] = None
    current_address: Optional[AddressWithTimeLine] = None
    previous_addresses: Optional[List[PreviousAddress]] = None
    home_phone: Optional[str] = None
    mobile_phone: Optional[str] = None
    work_phone: Optional[str] = None
    email: Optional[str] = None
    bank_sort_code: Optional[str] = None
    bank_account_number: Optional[str] = None
    bank_account_name: Optional[str] = None
    bank_name: Optional[str] = None
    bank_address: Optional[Address] = None
    do_not_email: Optional[str] = None
    do_not_mail: Optional[str] = None
    do_not_phone: Optional[str] = None
    do_not_s_m_s: Optional[str] = None
    driving_licence_number: Optional[str] = None
    current_employment_details: Optional[CurrentEmploymentDetails] = None
    previous_employment_details: Optional[List[PreviousEmployment]] = None


@dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE)
@dataclass
class CreditApplicationBusiness:
    type_of_business: Optional[str] = None
    business_contact_position: Optional[str] = None
    title: Optional[str] = None
    initial: Optional[str] = None
    first_name: Optional[str] = None
    surname: Optional[str] = None
    current_home_address: Optional[AddressWithTimeLine] = None
    home_phone: Optional[str] = None
    work_phone: Optional[str] = None
    mobile_phone: Optional[str] = None
    email: Optional[str] = None
    do_not_email: Optional[str] = None
    do_not_mail: Optional[str] = None
    do_not_phone: Optional[str] = None
    do_not_s_m_s: Optional[str] = None
    company_name: Optional[str] = None
    company_registration_number: Optional[str] = None
    trading_as: Optional[str] = None
    business_activity: Optional[str] = None
    number_of_employees: Optional[int] = None
    years_trading: Optional[int] = None
    position: Optional[str] = None
    bank_sort_code: Optional[str] = None
    bank_account_number: Optional[str] = None
    bank_account_name: Optional[str] = None
    bank_name: Optional[str] = None
    bank_address: Optional[Address] = None
    numberof_partners: Optional[int] = None
    business_partners: Optional[List[BusinessPartner]] = None


@dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE)
@dataclass
class PaymentDetails:
    payment_details: Optional[List[PaymentDetail]] = None


@dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE)
@dataclass
class DiPDetails:
    di_p_customer_id: Optional[str] = None
    di_p_timestamp: Optional[str] = None
    di_p_request_i_d: Optional[str] = None
    di_p_decision_type: Optional[str] = None
    di_p_primary_decision_code: Optional[str] = None
    di_p_decision_description: Optional[str] = None
    dip_decision_description_code: Optional[str] = None
    dip_primary_decision_reason: Optional[str] = None
    di_p_primary_decision_reason_dealer_message: Optional[str] = None
    di_p_reasons: Optional[List[DiPReasons]] = None


@dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE)
@dataclass
class CreateOCARequest:
    username: Optional[str] = None
    timestamp: Optional[str] = None
    token: Optional[str] = None
    general_details: Optional[GeneralDetails] = None
    finance_details: Optional[FinanceDetails] = None
    vehicle_details: Optional[VehicleDetails] = None
    delivery_details: Optional[DeliveryDetails] = None
    existing_vehicle_details: Optional[ExistingVehicleDetails] = None
    credit_application_individual: Optional[CreditApplicationIndividual] = None
    credit_application_business: Optional[CreditApplicationBusiness] = None
    payment_details: Optional[PaymentDetails] = None
    di_p_details: Optional[DiPDetails] = None


@dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE)
@dataclass
class ModelOptionDetails:
    seq: Optional[int] = None
    code: Optional[str] = None
    description: Optional[str] = None
    price: Optional[Decimal] = None


@dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE)
@dataclass
class PreviousAddress:
    seq: Optional[int] = None
    address: Optional[AddressWithTimeLine] = None


@dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE)
@dataclass
class PreviousEmployment:
    seq: Optional[int] = None
    previous_employment: Optional[EmployerDetails] = None


@dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE)
@dataclass
class BusinessPartner:
    seq: Optional[int] = None
    title: Optional[str] = None
    initial: Optional[str] = None
    first_name: Optional[str] = None
    surname: Optional[str] = None
    dateof_birth: Optional[str] = None
    gender: Optional[str] = None
    marital_status: Optional[str] = None
    residential_status: Optional[str] = None
    current_address: Optional[AddressWithTimeLine] = None
    previous_addresses: Optional[List[PreviousAddress]] = None
    home_phone: Optional[str] = None
    mobile_phone: Optional[str] = None
    business_phone: Optional[str] = None
    relationship: Optional[str] = None
    email: Optional[str] = None
    current_employment_details: Optional[CurrentEmploymentDetails] = None
    previous_employment_details: Optional[List[PreviousEmployment]] = None
    partner_type: Optional[str] = None


@dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE)
@dataclass
class PaymentDetail:
    seq: Optional[int] = None
    payment_type: Optional[str] = None
    amount_paid: Optional[Decimal] = None
    payment_transaction_i_d: Optional[str] = None
    description: Optional[str] = None
    payment_date_time: Optional[str] = None


@dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE)
@dataclass
class DiPReasons:
    dip_reason_seq: Optional[int] = None
    dip_decision_code: Optional[str] = None
    di_p_decision_reason: Optional[str] = None
    di_p_dealer_message: Optional[str] = None

Python CreateOCARequest DTOs

To override the Content-type in your clients, use the HTTP Accept Header, append the .csv suffix or ?format=csv

HTTP + CSV

The following are sample HTTP requests and responses. The placeholders shown need to be replaced with actual values.

PUT /CreateOCA/ HTTP/1.1 
Host: webservices.mbukdatabase.co.uk 
Accept: text/csv
Content-Type: text/csv
Content-Length: length

{"Username":"String","Timestamp":"String","Token":"String","GeneralDetails":{"OCAApprovalNumber":"String","EnquiryDateTime":"String","Brand":0,"CustomerReferenceNumber":"String","CustomerType":"String","SourceofBusiness":"String","TagURL":"String","RequestSource":0,"FormID":"String"},"FinanceDetails":{"FinancialProduct":"String","Duration":0,"PaymentRentalAmount":0,"AnnualMileage":0,"ExcessMileageRate":0,"CustomerDepositContribution":0,"RetailerDepositContribution":0,"ManufacturerDepositContribution":0,"TotalDepositContribution":0,"CostForCredit":0,"PurchaseActivationFee":0,"TotalAmountPayable":0,"FixedInterestRate":0,"RepresentativeAPR":0,"OptionalPurchasePayment":0,"AdvancedRentalAmount":0,"PaymentProfile":"String","RandMIncluded":"String","RandMLevel":"String","ProductType":"String","Frequency":"String","PauseType":"String"},"VehicleDetails":{"OnlineCode":"String","ModelClass":"String","ModelBody":"String","ModelDerivative":"String","TotalPrice":0,"OTRPrice":0,"VIN":"String","RegNo":"String","CurrentMileage":0,"FirstRegistrationDate":"String","NewUsedFlag":"String","NewVehicleModelOptionDetails":[{"Seq":0,"Code":"String","Description":"String","Price":0}]},"DeliveryDetails":{"DealerCode":"String","DeliveryPreference":"String"},"ExistingVehicleDetails":{"TradeInFlag":"String","TradeInValue":0,"TradeInRegNo":"String","SettlementFlag":"String","SettlementValue":0,"SettlementRegNo":"String"},"CreditApplicationIndividual":{"Title":"String","Initial":"String","FirstName":"String","Surname":"String","DateofBirth":"String","Gender":"String","MaritalStatus":"String","ResidentialStatus":"String","CurrentAddress":{"AddressLine1":"String","AddressLine2":"String","AddressLine3":"String","Town":"String","County":"String","Country":"String","Postcode":"String","Duration":"String","DateStarted":"String"},"PreviousAddresses":[{"Seq":0,"Address":{"AddressLine1":"String","AddressLine2":"String","AddressLine3":"String","Town":"String","County":"String","Country":"String","Postcode":"String","Duration":"String","DateStarted":"String"}}],"HomePhone":"String","MobilePhone":"String","WorkPhone":"String","Email":"String","BankSortCode":"String","BankAccountNumber":"String","BankAccountName":"String","BankName":"String","BankAddress":{"AddressLine1":"String","AddressLine2":"String","AddressLine3":"String","AddressLine4":"String","AddressLine5":"String","Postcode":"String"},"DoNotEmail":"String","DoNotMail":"String","DoNotPhone":"String","DoNotSMS":"String","DrivingLicenceNumber":"String","CurrentEmploymentDetails":{"EmployerDetails":{"EmploymentType":"String","EmployersName":"String","Occupation":"String","EmployersAddress":{"AddressLine1":"String","AddressLine2":"String","AddressLine3":"String","Town":"String","County":"String","Country":"String","Postcode":"String","Duration":"String","DateStarted":"String"}},"MonthsAtEmployer":"String","DateEmploymentCommenced":"String","AnnualIncome":"String"},"PreviousEmploymentDetails":[{"Seq":0,"previousEmployment":{"EmploymentType":"String","EmployersName":"String","Occupation":"String","EmployersAddress":{"AddressLine1":"String","AddressLine2":"String","AddressLine3":"String","Town":"String","County":"String","Country":"String","Postcode":"String","Duration":"String","DateStarted":"String"}}}]},"CreditApplicationBusiness":{"TypeOfBusiness":"String","BusinessContactPosition":"String","Title":"String","Initial":"String","FirstName":"String","Surname":"String","CurrentHomeAddress":{"AddressLine1":"String","AddressLine2":"String","AddressLine3":"String","Town":"String","County":"String","Country":"String","Postcode":"String","Duration":"String","DateStarted":"String"},"HomePhone":"String","WorkPhone":"String","MobilePhone":"String","Email":"String","DoNotEmail":"String","DoNotMail":"String","DoNotPhone":"String","DoNotSMS":"String","CompanyName":"String","CompanyRegistrationNumber":"String","TradingAs":"String","BusinessActivity":"String","NumberOfEmployees":0,"YearsTrading":0,"Position":"String","BankSortCode":"String","BankAccountNumber":"String","BankAccountName":"String","BankName":"String","BankAddress":{"AddressLine1":"String","AddressLine2":"String","AddressLine3":"String","AddressLine4":"String","AddressLine5":"String","Postcode":"String"},"NumberofPartners":0,"BusinessPartners":[{"Seq":0,"Title":"String","Initial":"String","FirstName":"String","Surname":"String","DateofBirth":"String","Gender":"String","MaritalStatus":"String","ResidentialStatus":"String","CurrentAddress":{"AddressLine1":"String","AddressLine2":"String","AddressLine3":"String","Town":"String","County":"String","Country":"String","Postcode":"String","Duration":"String","DateStarted":"String"},"PreviousAddresses":[{"Seq":0,"Address":{"AddressLine1":"String","AddressLine2":"String","AddressLine3":"String","Town":"String","County":"String","Country":"String","Postcode":"String","Duration":"String","DateStarted":"String"}}],"HomePhone":"String","MobilePhone":"String","BusinessPhone":"String","Relationship":"String","Email":"String","CurrentEmploymentDetails":{"EmployerDetails":{"EmploymentType":"String","EmployersName":"String","Occupation":"String","EmployersAddress":{"AddressLine1":"String","AddressLine2":"String","AddressLine3":"String","Town":"String","County":"String","Country":"String","Postcode":"String","Duration":"String","DateStarted":"String"}},"MonthsAtEmployer":"String","DateEmploymentCommenced":"String","AnnualIncome":"String"},"PreviousEmploymentDetails":[{"Seq":0,"previousEmployment":{"EmploymentType":"String","EmployersName":"String","Occupation":"String","EmployersAddress":{"AddressLine1":"String","AddressLine2":"String","AddressLine3":"String","Town":"String","County":"String","Country":"String","Postcode":"String","Duration":"String","DateStarted":"String"}}}],"PartnerType":"String"}]},"PaymentDetails":{"paymentDetails":[{"Seq":0,"PaymentType":"String","AmountPaid":0,"PaymentTransactionID":"String","Description":"String","PaymentDateTime":"String"}]},"DiPDetails":{"DiPCustomerId":"String","DiPTimestamp":"String","DiPRequestID":"String","DiPDecisionType":"String","DiPPrimaryDecisionCode":"String","DiPDecisionDescription":"String","DipDecisionDescriptionCode":"String","DipPrimaryDecisionReason":"String","DiPPrimaryDecisionReasonDealerMessage":"String","diPReasons":[{"DipReasonSeq":0,"DipDecisionCode":"String","DiPDecisionReason":"String","DiPDealerMessage":"String"}]}}
HTTP/1.1 200 OK
Content-Type: text/csv
Content-Length: length

{"Code":"String","Message":"String","URN":0}