DeprecatedAPI documentation (v1.2)

Tabeo offers a synchronous API for third-party integrations. For fulfilment purposes, offers may be polled at certain intervals to observe status changes. These endpoints may be used to integrate Tabeo with a variety of shop and cart systems.

Offer creation

Endpoint to create a new Pay Over Time (finance) or Pay Now (card payments) offer.

A POST endpoint

https://demo.api.tabeo.co.uk/v1/merchant/integration-offers

Parameters

consumerFirstName
StringRequired
consumerLastName
StringRequired
consumerEmail
StringRequired
consumerPhoneNumber
StringOptional
title
StringRequired
Title for offer to be shown on the Tabeo interface, e.g.. 'Invisible Retainers’
currency
StringRequired
This should match your account’s currency, e.g. ‘gbp’ for a UK account, or ‘eur’ for a Netherlands account.
price
IntegerRequired
This is the net price, net of any discounts, inclusive of any taxes, in pence
loanOptions
Deprecated
Please use initialPaymentPlanOptions instead.
The permitted possible loan offerings (has to be in line with what you have enabled in your merchant account) Will no longer work after 31 May 2021.
initialPaymentPlanOptions
Array of numbersRequiredNew
This new field replaces loanOptions and is basically an array of the tenors to be presented to the customer; e.g. [3,6,12] or [6]. loanOptions will continue to work but will be completely deprecated in a future version of the API, therefore it is recommended to use initialPaymentPlanOptions as soon as possible.
externalMetadata
{ [key: string]: string; }Optional
A json object of up to ten metadata fields that you can use to store information for your own needs, such as GUID, invoiceID, internalIDs, etc
type
Enum: pay_over_time, pay_nowDefault: pay_over_timeOptional
autoConfirmation
BooleanDefault: falseDeprecated
Auto confirmation is no longer available as a feature.

The endpoint will respond with an offer object json. This will contain all pertinent information relating to the offer. You will notice that the offer object has a new field, countryCode, which indicates the ISO code of the country for the offer, e.g. gb, nl, etc.

Example Request

curl -X POST \
https://demo.api.tabeo.co.uk/v1/merchant/integration-offers \
-H 'Authorization: Bearer [AUTHORIZATION TOKEN]' \
-H 'Content-Type: application/json' \
-d @- << EOF
{
  "consumerFirstName": "Foo",
  "consumerLastName": "Bar",
  "price": 120000,
  "consumerPhoneNumber": "07511223131",
  "consumerEmail": "[email protected]",
  "title": "Bridge",
  "currency": "gbp",
  "initialPaymentPlanOptions": [12,24],
  "externalMetadata": {"guid":33983,"id":"TyaJHGA-1736"}
}
EOF

Example Response

"data": {
    "offer": {
      "bankAccountAttempts": 0,
      "bankAccountID": null,
      "bankAccountLastMissingMandateReminderSentAt": null,
      "bankAccountRemovedAt": null,
      "buyerCode": null,
      "consumerEmail": "[email protected]",
      "consumerFirstName": "Foo",
      "consumerGender": null,
      "consumerID": null,
      "consumerLastName": "Bar",
      "consumerMiddleName": null,
      "consumerPhoneNumber": "07511223131",
      "countryCode": "gb",
      "createdAt": "2021-03-11T14:41:29.727533353Z",
      "currency": "gbp",
      "expiresAt": "2021-03-18T14:41:29.711714478Z",
      "feeAmount": null,
      "hardCheckStatus": null,
      "id": 3019,
      "lastStateTransitionedAt": "2021-03-11T14:41:29.711756579Z",
      "legacyOfferID": null,
      "loanAgreementID": null,
      "loanID": null,
      "merchantID": 291,
      "merchantLateRefundFeeAmountToDate": null,
      "merchantNetProceedsTransfers": [],
      "merchantPayoutAt": null,
      "merchantProceedsTransferredAt": null,
      "metadata": {
        "autoConfirmation": false,
        "externalMetadata": {
          "id": "25372-s",
          "stuff": 33983,
          "system": "u874YYns"
        },
        "overviewShortLink": "https://demo.m.tabeo.co.uk/r/eXFwR",
        "patientName": "Foo Bar",
        "publicShortLink": "https://demo.m.tabeo.co.uk/r/rnGLx",
        "riskProfiles": [
          {
            "order": 0,
            "name": "default",
            "lenderCode": null,
            "loanOptions": [
              {
                "numberOfMonths": 24,
                "interestRate": 0.099,
                "rebateDays": 0,
                "isRegulated": true,
                "isAvailableForInitialPaymentPlan": true
              }
            ],
            "fundingType": "default"
          },
          {
            "order": 3,
            "name": "profile_unfunded",
            "lenderCode": "unfunded",
            "loanOptions": [
              {
                "numberOfMonths": 12,
                "interestRate": 0,
                "rebateDays": 0,
                "isRegulated": false,
                "isAvailableForInitialPaymentPlan": false
              }
            ],
            "fundingType": "unfunded"
          }
        ]
      },
      "numberOfPaymentDayChanges": 0,
      "paymentAuthorization": null,
      "paymentGateway": "",
      "paymentSourceAttempts": 0,
      "paymentSourceID": null,
      "payoutGateway": "stripe_connect",
      "price": 249900,
      "publicAccessToken": "RxesHjzVjdiFbKcSNPItuRIPYJnWhHpAxLpXNfdMpGhxOByWKjRKKxtstLxqWGJr",
      "reference": null,
      "referralID": null,
      "revisedPrice": null,
      "revisedRequiredMerchantFeeAmount": null,
      "revisedValueAtRisk": null,
      "status": "new",
      "title": "Bridge",
      "totalMerchantRefundAmountToDate": null,
      "type": "pay_over_time",
      "updatedAt": "2021-03-11T14:41:29.751277725Z",
      "uuid": "cb4a3da6-122a-5a24-9e0c-475ab61b9fb6",
      "valueAtRisk": null
    }
  },
  "status": "success",
  "type": "response_ready"
}

Retrieving an existing offer along with metadata

A GET endpoint

https://demo.api.tabeo.co.uk/v1/merchant/offers/:offerid?subResource=metadata

Example Request

curl -X GET \
https://demo.api.tabeo.co.uk/v1/merchant/offers/:offerid?subResource=metadata \
-H 'Authorization: Bearer [AUTHORIZATION TOKEN]' \
-H 'Content-Type: application/json' \
-H 'cache-control: no-cache'

For indication of successful application and payment completion as a signal to fulfil product delivery, the status field of the offer object may be observed for any of the following: pay_now_payment_succeeded, first_payment_captured, subscribed, merchant_proceeds_transferred, merchant_payout_processed

For offers with transferred status, please see Getting referred offers below.

Retrieving a collection of offers with status and paging constraints

A GET endpoint

https://demo.api.tabeo.co.uk/v1/merchant/offers

Example Requests

To retrieve up to 6 offers with any of the following statuses: loan_agreement_accepted, pay_now_payment_authorization_succeeded, first_payment_capture_failed].

curl -X GET \
'https://demo.api.tabeo.co.uk/v1/merchant/offers?order=updatedAt:desc&condition=status:[loan_agreement_accepted,pay_now_payment_authorization_succeeded,first_payment_capture_failed]&limit=6&offset=0' \
-H 'Authorization: Bearer [AUTHORIZATION TOKEN]'

Without any status constraints and up to 100 offers ordered by updatedAt field:

curl -X GET \
'https://demo.api.tabeo.co.uk/v1/merchant/offers?order=updatedAt:desc&limit=100&offset=0' \
-H 'Authorization: Bearer [AUTHORIZATION TOKEN]'

If you want to limit it to say only ones with 'merchant_proceeds_transferred', then you'd do something like this:

curl -X GET \
'https://demo.api.tabeo.co.uk/v1/merchant/offers?condition=status:[merchant_proceeds_transferred]&order=updatedAt:desc&limit=100&offset=0' \
-H 'Authorization: Bearer [AUTHORIZATION TOKEN]'

Getting referred offers

Some offers may be transferred to another applicant in the case of the initial applicant failing checks. Such offers are identifiable with status: “transferred”.

A GET endpoint

https://api.tabeo.co.uk/v1/merchant/offers/:offerid?subResource=transferredOffer

Example Requests

When getting the offer, a transferredOffer sub resource may be applied on the old offer to get a sub resource with the new offer:

curl -X GET \
'https://api.tabeo.co.uk/v1/merchant/offers/28599?subResource=transferredOffer' \
-H 'Authorization: Bearer [AUTHORIZATION TOKEN]'

This will get transferredOffer id of 28756

You can then GET the new offer with id 28756 and monitor its status .

If required, legacyOffer sub resource id may be used on the new offer to get a sub resource with the old/legacy offer:

curl -X GET \
'https://api.tabeo.co.uk/v1/merchant/offers/28756?subResource=legacyOffer' \
-H 'Authorization: Bearer [AUTHORIZATION TOKEN]'

This will get a legacyOffer id of 28599.

Offer object states

The following is the currently specified list of possible statuses for the offer object.

new
newly created offer
reviewed
when consumer reviews the offer
payment_plan_created
when an initial payment plan is create
consumer_details_created
when consumer creates personal details for loan application
patient_details_created
when consumer creates patient details for loan application
consumer_employment_details_created
when consumer creates employment details
consumer_living_details_created
when consumer create living details
consumer_id_questions_omitted
when consumer asks for id questions
consumer_get_id_questions_failed
when risk engine cannot get id questions
consumer_id_questions_created
when risk engine creates id questions for consumer
consumer_id_questions_passed
when consumer passed id questions
consumer_id_questions_failed
when consumer failed id questions
risk_check_pending New
when consumer risk check is pending
risk_checked
when consumer risk got checked
payment_plan_resolved
when offer gets left with single payment plan to continue
consumer_personal_details_update_required
when update on consumer personal details is required
consumer_personal_details_updated
when consumer submit additional information
partner_income_verification_pending
when partner income needs additional verification
manual_review_omitted
when manual review is omitted
manual_review_required
when manual review is required
manual_review_passed
when manual review is passed
manual_review_failed
when manual review is failed
risk_checks_failed
when risk checks failed
payment_plan_scheduled
when user selects payment plan date
payment_source_created
when user payment source is created and accepted by loan manager
payment_source_failed
when loan manager cannot accept payment source
bank_account_created New
when bank account details are created and accepte
bank_account_failed New
when bank account details are not accepte
pay_over_time_product_file_created
when product file is created in product manager
loan_agreement_created
when our system generates new agreement
loan_agreement_accepted
when consumer accept loan agreement
expired
when offer expired
canceled
when offer is cancelled
pay_now_payment_succeeded
when card payment succeeds for single payment pay now offers
first_payment_captured
when first payment is captured
first_payment_capture_failed
when first payment capture fails
pending_allocation New
when offer is pending allocatio
subscribed
when offer has subscribed to a monthly payment plan
subscription_failed
when subscription of payment plan failed
payout_scheduled New
when merchant proceeds are scheduled for payout
merchant_proceeds_transferred
when merchant proceeds are already transferred
merchant_payout_processed
when merchant payout is processed
final_partial_merchant_proceeds_transferred
when last of partial proceeds gets transferred (for unfunded offers such as those, where merchant’s proceeds are transferred in several parts accordance with monthly customer payment receipts)
transferred
when offer is transferred to other consumer
hard_checked Deprecated
when consumer had been hard checked
No longer applicable and should not be expected to occur on an offer object
hard_check_failed Deprecated
when consumer had been hard check failed
No longer applicable and should not be expected to occur on an offer object

Simplified offer object states

In addition to the above discrete states, there is a simplified status that may be retrieved with the “simpleStatus” sub resource. It works with both single offer and collection requests.

Example #1

curl -X GET \
'https://api.tabeo.co.uk/v1/merchant/offers/28756?subResource=simpleStatus' \
-H 'Authorization: Bearer [AUTHORIZATION TOKEN]'

Example #2

curl -X GET \
'https://demo.api.tabeo.co.uk/v1/merchant/offers?order=updatedAt:desc&limit=100&offset=0&subResource=simpleStatus' \
-H 'Authorization: Bearer [AUTHORIZATION TOKEN]'

The caveat is that sub resources do not have predicates, so you’ll still need to depend on the condition=status:[<state_1>,...,<state_n>] to get only offers that meet certain state conditions.

The current groupings of status as simpleStatus is as follows:

sent
new
opened
reviewed
applying
consumer_details_created
patient_details_created
payment_plan_created
consumer_employment_details_created
consumer_living_details_created
partner_income_verification_pending
manual_review_required
consumer_risk_check_pending
risk_checked
payment_plan_resolved
consumer_personal_details_update_required
consumer_personal_details_updated
loan_offer_made
consumer_id_questions_omitted
consumer_id_questions_created
consumer_id_questions_passed
manual_review_omitted
manual_review_passed
payment_plan_scheduled
loan_agreement_created
payment_error
payment_source_failed
bank_account_failed
pending_release
loan_agreement_accepted
release_error
first_payment_capture_failed
contact_support
subscription_failed
hard_check_failed is no longer applicable.
funds_on_way
pay_now_payment_succeeded
first_payment_captured
pending_allocation
subscribed
hard_checked is no longer applicable.
payout_scheduled
merchant_proceeds_transferred
settled
merchant_payout_processed
transferred
transferred
canceled
canceled
failed
manual_review_failed
consumer_get_id_questions_failed
consumer_id_questions_failed
risk_checks_failed
expired