openapi: 3.1.0
info:
title: Kredivo Checkout Calculator API
version: v2
summary: Merchant-facing installment ("Buy Now, Pay Later") checkout API for Kredivo.
description: "The Kredivo Checkout API lets an ecommerce store, marketplace, POS or EDC terminal offer\nKredivo installment payment at checkout.\n\nSurfaces documented by Kredivo:\n\n* **2-click Checkout** — merchant posts the cart, receives a `redirect_url`, and sends the\n shopper to Kredivo to authenticate with phone + PIN + OTP.\n* **0-click Checkout** — once a shopper is tokenized (`tokenize_user: true` /\n `client_user_key`), later purchases are placed with the stored `user_token`.\n* **QR Checkout** — dynamic (per-transaction) or static (per-store) QR for physical stores.\n* **EDC Checkout** — checkout initiated from a physical EDC terminal, with reversal support.\n* **Additional APIs** — transaction status, full/partial cancellation, and an installment\n and interest calculator.\n\nEvery operation authenticates with the per-merchant `server_key` carried **in the JSON\nrequest body**, not in a header. Transaction outcomes arrive asynchronously as an HTTP POST\nto the merchant's `push_uri`; the merchant confirms by calling `GET /kredivo/v2/update`\nwith the `transaction_id` and `signature_key` from the notification.\n\nThis description was generated by the API Evangelist enrichment pipeline from Kredivo's\npublished developer documentation at https://doc.kredivo.com/. It is a faithful\ntranscription of the documented request/response surface — it is not published by Kredivo.\n"
contact:
name: Kredivo Merchant Operations
email: merchops@finaccel.co
url: https://doc.kredivo.com/
termsOfService: https://kredivo.com/p/in/tos.html
x-generated: '2026-07-19'
x-method: generated
x-source: https://doc.kredivo.com/
servers:
- url: https://sandbox.kredivo.com
description: Sandbox. Published server key and test account are documented under Environment Setup.
- url: https://{productionHost}
description: 'Production. Kredivo does not publish the production endpoint; merchants must request it from
merchops@kredivo.com before going live.
'
variables:
productionHost:
default: production-endpoint-provided-by-kredivo
description: Production host supplied by Kredivo merchant operations.
tags:
- name: Calculator
description: Installment, interest and service-fee breakdown.
paths:
/kredivo/v2/payments:
post:
operationId: calculatePayments
tags:
- Calculator
summary: Calculate installment options for a cart
description: 'Returns the available payment types for a cart with their full cost breakdown — tenure,
interest rate, service fee, monthly installment and total amount — so the merchant can
render Kredivo''s installment options before checkout.
'
requestBody:
required: true
content:
application/json:
schema:
$ref: '#/components/schemas/PaymentsRequest'
example:
server_key: 8tLHIx8V0N6KtnSpS9Nbd6zROFFJH7
user_token: XXX-XXX
amount: 2400000
items:
- id: BB12345678
name: iPhone 5S
price: 2400000
url: http://merchant.com/cellphones/iphone5s_64g
type: Smartphone
quantity: 1
responses:
'200':
description: Available installment options.
content:
application/json:
schema:
$ref: '#/components/schemas/PaymentsResponse'
example:
payments:
- id: 30_days
name: Bayar dalam 30 hari
tenure: 1
amount: 2424000
raw_amount: 2424000.0
raw_monthly_installment: 2423999.801457357
service_fee: 24000
interest_rate: '0'
rate: 0.0
message: Available payment types are listed.
status: OK
components:
schemas:
PaymentsResponse:
type: object
properties:
status:
type: string
message:
type: string
payments:
type: array
items:
type: object
properties:
id:
$ref: '#/components/schemas/PaymentType'
name:
type: string
tenure:
type: integer
amount:
type: integer
raw_amount:
type: number
raw_monthly_installment:
type: number
service_fee:
type: number
service_fee_percentage:
type: number
interest_rate:
type: string
rate:
type: number
discount_interest_rate:
type:
- number
- 'null'
mdr:
type:
- number
- 'null'
error:
$ref: '#/components/schemas/ErrorDetail'
PaymentType:
type: string
description: Installment tenure chosen by the shopper.
enum:
- 30_days
- 3_months
- 6_months
- 9_months
- 12_months
- 18_months
- 24_months
PaymentsRequest:
type: object
required:
- server_key
- amount
- items
properties:
server_key:
type: string
user_token:
type: string
amount:
type: number
format: double
items:
type: array
items:
$ref: '#/components/schemas/ProductItem'
ProductItem:
type: object
description: 'A cart line. Beyond real SKUs, Kredivo reserves the ids `shippingfee`, `adminfee`, `taxfee`,
`discount`, `additionalfee`, `insurancefee` and `mixpayment` for non-product lines.
'
required:
- id
- name
- price
- quantity
properties:
id:
type: string
description: SKU, or one of the reserved fee/discount ids.
name:
type: string
price:
type: number
format: double
type:
type: string
description: Product category.
url:
type: string
description: Product URL on the merchant site.
image_url:
type: string
quantity:
type: integer
parent_type:
type: string
enum:
- SELLER
- ITEM
parent_id:
type: string
description: Seller or item id this line belongs to.
ErrorDetail:
type: object
description: Kredivo's error envelope. Note the API returns HTTP 200 with status ERROR.
properties:
kind:
type: string
description: Type of error.
code:
type:
- integer
- 'null'
description: Numeric error code. May be null.
message:
type: string
securitySchemes:
serverKey:
type: apiKey
in: header
name: server_key
description: 'NOTE ON MODELLING: Kredivo does not use a header or an HTTP auth scheme. The per-merchant
`server_key` is sent as a **field in the JSON request body** of every operation, which
OpenAPI cannot express as a security scheme. This entry documents the credential so tooling
can see it; the body field `server_key` on each request schema is the real carrier. See
authentication/kredivo-authentication.yml.
'
x-actual-location: request-body
x-actual-field: server_key
externalDocs:
description: Kredivo developer documentation
url: https://doc.kredivo.com/