LayUp Technologies PaymentPlanService API
The PaymentPlanService API from LayUp Technologies — 7 operation(s) for paymentplanservice.
The PaymentPlanService API from LayUp Technologies — 7 operation(s) for paymentplanservice.
swagger: '2.0'
info:
title: Layup endpoints AbsaDebiCheckService PaymentPlanService API
version: 1.4.16
description: 'Welcome to The Layup Swagger page. This page allows developers to interactively explore the API. For more detailed documentation see [The Layup documentation page](https://documentation.layup.co.za/).
# Introduction
## What is LayUp
LayUp is a lay-by payment solution. LayUp Schedules payments and ensures that your clients pay securely, effectively and on time. Depending on your parameters LayUp schedules a payment plan for your clients. Once a payment plan has been completed we notify you. There are 3 stories that are of importance to a merchant:
1. Order Creation
2. Deposit Received (and holding Stock for your client)
3. Order Completion.
LayUp allows you to take full control over the entire payment process if you wish to do so. We also provide a convenient front-end for users to use. The front-end should significantly reduce the time to integrate and get you started using LayUp as soon as possible.
Once an order is completed a notification will be sent to the merchant so that you can provide the client with their product.
## How to use LayUp
As a merchant who wants to place an order through LayUp, you want to send the relevant information to the LayUp API to create the order. The API will return an order ID. Unless your integration is using a custom user interface, you want to send the user to the LayUp customer payment widget. The URL for this widget is <u>https://shopper.layup.co.za/order/{orderId}</u> for production and <u>https://sandbox.layup.co.za/order/{orderId}</u> for sandbox.
'
host: localhost:3000
schemes:
- http
- https
- wss
consumes:
- application/json
produces:
- application/json
security:
- apiKey:
- read
- write
tags:
- name: PaymentPlanService
paths:
/v1/payment-plan:
post:
operationId: PaymentPlanService_Create
responses:
'200':
description: A successful response.
schema:
$ref: '#/definitions/modelPaymentPlanResponse'
'204':
description: Successfully processed the request, no content.
'403':
description: Returned when the user does not have permission to access the resource.
'404':
description: Returned when the resource does not exist.
parameters:
- name: body
in: body
required: true
schema:
$ref: '#/definitions/modelPaymentPlanRequest'
- name: _id
in: query
required: false
type: string
tags:
- PaymentPlanService
/v1/payment-plan-send-notification:
post:
operationId: PaymentPlanService_sendPaymentPlanNotification
responses:
'200':
description: A successful response.
schema:
$ref: '#/definitions/modelPaymentPlanResponse'
'204':
description: Successfully processed the request, no content.
'403':
description: Returned when the user does not have permission to access the resource.
'404':
description: Returned when the resource does not exist.
parameters:
- name: body
in: body
required: true
schema:
$ref: '#/definitions/modelPaymentPlanSendNotificationRequest'
tags:
- PaymentPlanService
/v1/payment-plan-split:
post:
operationId: PaymentPlanService_CreateSplitPayment
responses:
'200':
description: A successful response.
schema:
$ref: '#/definitions/modelPaymentPlanResponseMany'
'204':
description: Successfully processed the request, no content.
'403':
description: Returned when the user does not have permission to access the resource.
'404':
description: Returned when the resource does not exist.
parameters:
- name: body
in: body
required: true
schema:
$ref: '#/definitions/modelPaymentPlanSplitBody'
- name: _id
in: query
required: false
type: string
tags:
- PaymentPlanService
/v1/payment-plan/preview:
post:
operationId: PaymentPlanService_CreatePreview
responses:
'200':
description: A successful response.
schema:
$ref: '#/definitions/modelPaymentPlanPreviewResponseMany'
'204':
description: Successfully processed the request, no content.
'403':
description: Returned when the user does not have permission to access the resource.
'404':
description: Returned when the resource does not exist.
parameters:
- name: body
in: body
required: true
schema:
$ref: '#/definitions/modelPaymentPlanPreviewRequest'
tags:
- PaymentPlanService
/v1/payment-plan/preview/{_id}:
get:
operationId: PaymentPlanService_GetPreview
responses:
'200':
description: A successful response.
schema:
$ref: '#/definitions/modelPaymentPlanPreviewResponseMany'
'204':
description: Successfully processed the request, no content.
'403':
description: Returned when the user does not have permission to access the resource.
'404':
description: Returned when the resource does not exist.
parameters:
- name: _id
in: path
required: true
type: string
- name: frequency
in: query
required: false
type: string
- name: offset
in: query
required: false
type: integer
format: int32
- name: paymentPlanId
in: query
required: false
type: string
tags:
- PaymentPlanService
/v1/payment-plan/{_id}:
get:
operationId: PaymentPlanService_Get
responses:
'200':
description: A successful response.
schema:
$ref: '#/definitions/modelPaymentPlanResponse'
'204':
description: Successfully processed the request, no content.
'403':
description: Returned when the user does not have permission to access the resource.
'404':
description: Returned when the resource does not exist.
parameters:
- name: _id
in: path
required: true
type: string
- name: populate
in: query
required: false
type: array
items:
type: string
collectionFormat: multi
tags:
- PaymentPlanService
delete:
operationId: PaymentPlanService_Del
responses:
'200':
description: A successful response.
schema:
$ref: '#/definitions/modelPaymentPlanDelResponse'
'204':
description: Successfully processed the request, no content.
'403':
description: Returned when the user does not have permission to access the resource.
'404':
description: Returned when the resource does not exist.
parameters:
- name: _id
in: path
required: true
type: string
tags:
- PaymentPlanService
put:
operationId: PaymentPlanService_Update
responses:
'200':
description: A successful response.
schema:
$ref: '#/definitions/modelPaymentPlanResponse'
'204':
description: Successfully processed the request, no content.
'403':
description: Returned when the user does not have permission to access the resource.
'404':
description: Returned when the resource does not exist.
parameters:
- name: _id
in: path
required: true
type: string
- name: body
in: body
required: true
schema:
$ref: '#/definitions/modelPaymentPlanRequest'
tags:
- PaymentPlanService
/v1/payment-plan/{token}:
get:
operationId: PaymentPlanService_getByMsisdnAndToken
responses:
'200':
description: A successful response.
schema:
$ref: '#/definitions/modelPaymentPlanResponse'
'204':
description: Successfully processed the request, no content.
'403':
description: Returned when the user does not have permission to access the resource.
'404':
description: Returned when the resource does not exist.
parameters:
- name: token
in: path
required: true
type: string
- name: msisdn
in: query
required: false
type: string
- name: populate
in: query
required: false
type: array
items:
type: string
collectionFormat: multi
tags:
- PaymentPlanService
definitions:
modelImageUrl:
type: object
properties:
enabled:
type: boolean
value:
type: string
modelLogo:
type: object
properties:
enabled:
type: boolean
value:
type: string
modelPaymentMethod:
type: object
properties:
creditOrDebitCard:
type: boolean
eft:
type: boolean
debiCheck:
type: boolean
payAt:
type: boolean
capitecPay:
type: boolean
dashpay:
type: boolean
terminalCard:
type: boolean
offline:
type: boolean
embeddedCheckout:
type: boolean
modelPaymentPlanDelResponse:
type: object
properties:
_id:
type: string
orderId:
type: string
benefactorId:
type: string
completed:
type: boolean
quantity:
type: integer
format: int32
depositDue:
type: integer
format: int32
amountDue:
type: integer
format: int32
automaticBilling:
type: boolean
payments:
type: array
items:
type: object
$ref: '#/definitions/modelPlanPayment'
active:
type: boolean
modelCancellationTermRequest:
type: object
properties:
active:
type: boolean
definition:
type: array
items:
type: object
$ref: '#/definitions/modelCancellationDefinition'
modelValueEnabledPair:
type: object
properties:
enabled:
type: boolean
value:
type: integer
format: int32
modelPaymentPlanBenefactor:
type: object
properties:
_id:
type: string
name:
type: string
email:
type: string
modelPaymentPlanSplitBody:
type: object
properties:
clients:
type: array
items:
type: object
$ref: '#/definitions/modelSplitUser'
paymentPlan:
$ref: '#/definitions/modelPaymentPlanRequest'
redirectTo:
type: string
verificationRedirect:
type: string
modelCancellationPolicyDefinition:
type: object
properties:
deposit:
type: boolean
percentage:
type: integer
format: int32
flatFee:
type: integer
format: int32
percentageShouldUseTotalPaid:
type: boolean
modelPaymentPlanResponse:
type: object
properties:
_id:
type: string
orderId:
type: string
benefactorId:
type: string
completed:
type: boolean
quantity:
type: integer
format: int32
depositDue:
type: integer
format: int32
amountDue:
type: integer
format: int32
automaticBilling:
type: boolean
timestamp:
type: number
format: double
payments:
type: array
items:
type: object
$ref: '#/definitions/modelPlanPayment'
benefactor:
$ref: '#/definitions/modelPaymentPlanBenefactor'
frequency:
type: string
enum:
- WEEKLY
- MONTHLY
offset:
type: integer
format: int32
depositDueExcludingFee:
type: integer
format: int32
amountDueExcludingFee:
type: integer
format: int32
order:
$ref: '#/definitions/modelOrderResponse'
debicheckStatus:
type: string
debicheckLastFailedReasons:
type: array
items:
type: string
debicheckMandateActiveId:
type: string
debicheckMandateIds:
type: array
items:
type: string
payAtReferenceNumber:
type: string
agreedToTerms:
type: boolean
modelSupplier:
type: object
properties:
_id:
type: string
name:
type: string
merchantId:
type: string
modelCancellationTypeDefinition:
type: object
properties:
missed:
type: integer
format: int32
percentage:
type: integer
format: int32
modelPaymentProviderResponses:
type: object
modelPaymentPlanResponseMany:
type: object
properties:
paymentPlans:
type: array
items:
type: object
$ref: '#/definitions/modelPaymentPlanResponse'
modelPlanPaymentConnectorData:
type: object
properties:
_id:
type: string
amount:
type: integer
format: int32
paymentProviderPaymentId:
type: string
paymentReference:
type: string
paymentMethod:
type: string
paymentProvider:
type: string
paymentProviderResponses:
$ref: '#/definitions/modelPaymentProviderResponses'
modelPaymentPlanRequest:
type: object
properties:
orderId:
type: string
benefactorId:
type: string
quantity:
type: integer
format: int32
automaticBilling:
type: boolean
frequency:
type: string
title: weekly or monthly
offset:
type: integer
format: int32
title: for weekly 0-6, for monthly 0-30
token:
type: string
agreedToTerms:
type: boolean
modelSplitUser:
type: object
properties:
email:
type: string
format: email
name:
type: string
cellNumber:
type: string
pattern: ^\+27\d{9}$
modelGroupPayment:
type: object
properties:
enabled:
type: boolean
cloneLimit:
type: integer
format: int32
expiry:
type: integer
format: int32
modelPaymentPlanPreviewResponse:
type: object
properties:
months:
type: integer
format: int32
deposit:
type: integer
format: int32
payments:
type: array
items:
type: object
$ref: '#/definitions/modelPaymentResponse'
quantity:
type: integer
format: int32
orderState:
type: string
modelCancellationDefinition:
type: object
properties:
type:
$ref: '#/definitions/modelCancellationType'
policy:
$ref: '#/definitions/modelCancellationPolicy'
start:
type: integer
format: int32
end:
type: integer
format: int32
gracePeriod:
type: integer
format: int32
modelCancellationType:
type: object
properties:
name:
type: string
definition:
$ref: '#/definitions/modelCancellationTypeDefinition'
finalPaymentMissed:
type: boolean
modelPaymentPlanPreviewRequest:
type: object
properties:
amountDue:
type: integer
required:
- 'true'
depositPerc:
type: number
required:
- 'true'
endDateMax:
type: string
format: date-time
required:
- 'true'
endDateMin:
type: string
format: date-time
required:
- 'true'
absorbsFee:
type: boolean
required:
- 'true'
frequency:
type: string
enum:
- WEEKLY
- MONTHLY
offset:
type: integer
format: int32
depositAmount:
type: integer
format: int32
depositType:
type: string
enum:
- INSTALMENT
- FLAT
- PERCENTAGE
required:
- 'true'
flatFee:
type: number
format: double
percFee:
type: number
format: double
paymentPlanId:
type: string
quantity:
type: integer
format: int32
modelNote:
type: object
properties:
change:
type: string
date:
type: string
name:
type: string
reason:
type: string
details:
type: string
read:
type: boolean
userId:
type: string
type:
type: string
hide:
type: boolean
unread:
type: boolean
modelProductResponse:
type: object
properties:
_id:
type: string
amount:
type: integer
format: int32
link:
type: string
format: uri
sku:
type: string
name:
type: string
depositType:
type: string
modelOrderResponse:
type: object
properties:
_id:
type: string
endDateMax:
type: string
format: date-time
required:
- 'true'
endDateMin:
type: string
format: date-time
initiatorId:
type: string
products:
type: array
items:
type: object
$ref: '#/definitions/modelProductResponse'
state:
enum:
- PARTIAL
- PLACED
- COMPLETED
- CANCELLED
- CANCELLING
- EXPIRED
- SUSPENDED
default: PARTIAL
supplierId:
type: string
cancelledBy:
type: string
amountDue:
type: integer
format: int32
flatFee:
type: integer
format: int32
percFee:
type: number
format: double
depositPerc:
type: number
format: double
absorbsFee:
type: boolean
reference:
type: string
name:
type: string
imageUrl:
type: string
plans:
type: array
items:
type: object
$ref: '#/definitions/modelPaymentPlanResponse'
createdAt:
type: string
timestamp:
type: number
format: double
enablesSplit:
type: boolean
depositAmount:
type: integer
format: int32
depositType:
type: string
enum:
- INSTALMENT
- FLAT
- PERCENTAGE
required:
- 'true'
expire:
type: string
cancellationTerms:
$ref: '#/definitions/modelCancellationTermRequest'
weeklyPayments:
type: boolean
paymentMethods:
$ref: '#/definitions/modelPaymentMethod'
stateUpdatedAt:
type: string
updatedAt:
type: string
groupPaymentPlan:
$ref: '#/definitions/modelGroupPayment'
cloneExpiry:
type: integer
format: int32
cloneCount:
type: integer
format: int32
orderCancellationRequest:
type: string
notifications:
type: array
items:
type: object
$ref: '#/definitions/modelNote'
acceptedProposedCancellationTerms:
type: boolean
customFeatures:
$ref: '#/definitions/modelCustomize'
merchantName:
type: string
merchantTermsLink:
type: string
merchantLink:
type: string
debiCheckMinimum:
$ref: '#/definitions/modelValueEnabledPair'
supplier:
$ref: '#/definitions/modelSupplier'
orderRefundRequest:
type: string
orderRefundAmount:
type: integer
format: int32
orderRefundFee:
type: integer
format: int32
monthlyPayments:
type: boolean
type:
type: string
balance:
type: integer
format: int32
description:
type: string
isIncreasedDepositAmountAllowed:
type: boolean
suspendOnCancel:
type: boolean
voucherSettings:
$ref: '#/definitions/modelVoucherSettings'
modelPaymentPlanSendNotificationRequest:
type: object
properties:
_id:
type: string
modelCustomize:
type: object
properties:
logo:
$ref: '#/definitions/modelLogo'
imageUrl:
$ref: '#/definitions/modelImageUrl'
paymentWidget:
$ref: '#/definitions/modelPaymentWidgetLogo'
modelVoucherSettings:
type: object
properties:
active:
type: boolean
minimumSavingGoalInCents:
type: integer
format: int32
maximumSavingGoalInCents:
type: integer
format: int32
rewardType:
type: string
rewardFlatAmountInCents:
type: integer
format: int32
rewardPercentage:
type: integer
format: int32
voucherProvider:
type: string
modelPaymentPlanPreviewResponseMany:
type: object
properties:
amountDue:
type: integer
format: int32
merchant:
type: string
merchantTermsLink:
type: string
reference:
type: string
orderName:
type: string
depositDue:
type: integer
format: int32
endDateMax:
type: string
imageUrl:
type: string
enablesSplit:
type: boolean
products:
type: array
items:
type: object
$ref: '#/definitions/modelProductResponse'
paymentPlans:
type: array
items:
type: object
$ref: '#/definitions/modelPaymentPlanPreviewResponse'
depositAmount:
type: integer
format: int32
depositType:
type: string
enum:
- INSTALMENT
- FLAT
- PERCENTAGE
required:
- 'true'
flatFee:
type: number
format: double
percFee:
type: number
format: double
validDays:
type: array
items:
type: integer
format: int32
validDates:
type: array
items:
type: integer
format: int32
amountDueExcludingFee:
type: integer
format: int32
depositDueExcludingFee:
type: integer
format: int32
paymentMethods:
$ref: '#/definitions/modelPaymentMethod'
weeklyPayments:
type: boolean
orderState:
type: string
groupPaymentPlan:
$ref: '#/definitions/modelGroupPayment'
orderToClone:
$ref: '#/definitions/modelOrderResponse'
customFeatures:
$ref: '#/definitions/modelCustomize'
cancellationTerms:
$ref: '#/definitions/modelCancellationTermRequest'
initiatorId:
type: string
debiCheckMinimum:
$ref: '#/definitions/modelValueEnabledPair'
monthlyPayments:
type: boolean
modelPaymentResponse:
type: object
properties:
_id:
type: string
paymentPlanId:
type: string
due:
type: string
amount:
type: integer
format: int32
paid:
type: boolean
userId:
type: string
locked:
type: boolean
pending:
type: boolean
timestamp:
type: number
format: double
paymentMethod:
type: string
paymentType:
type: string
note:
type: string
reference:
type: string
orderStatus:
type: string
amountExcludingFee:
type: integer
format: int32
fee:
type: integer
format: int32
failed:
type: boolean
verifyError:
type: string
refundedAmount:
type: integer
format: int32
refundPaymentId:
type: string
connectorData:
$ref: '#/definitions/modelConnectorData'
destinationId:
type: string
destinationType:
type: string
modelPaymentWidgetLogo:
type: object
properties:
enabled:
type: boolean
value:
type: string
modelCancellationPolicy:
type: object
properties:
name:
type: string
enum:
- Deposit
- Percentage
- FlatFee
- Combination
definition:
$ref: '#/definitions/modelCancellationPolicyDefinition'
modelConnectorData:
type: object
properties:
paymentProvider:
type: string
paymentMethod:
type: string
description: Connector data bypasses protobuf conversion to allow any fields.
modelPlanPayment:
type: object
properties:
_id:
type: string
due:
type: string
amount:
type: integer
format: int32
paid:
type: boolean
timestamp:
type: number
format: double
paymentMethod:
type: string
paymentType:
type: string
amountExcludingFee:
type: integer
format: int32
fee:
type: integer
format: int32
pending:
type: boolean
failed:
type: boolean
reconciliated:
type: boolean
refundedAmount:
type: integer
format: int32
refundPaymentId:
type: string
connectorData:
$ref: '#/definitions/modelPlanPaymentConnectorData'
verifiedAt:
type: string
dueAt:
type: string
securityDefinitions:
apiKey:
type: apiKey
name: apikey
in: header