Kredivo Tokenization API
Managing tokenized (0-click) shoppers and their credit limits.
Managing tokenized (0-click) shoppers and their credit limits.
openapi: 3.1.0
info:
title: Kredivo Checkout Calculator Tokenization 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: Tokenization
description: Managing tokenized (0-click) shoppers and their credit limits.
paths:
/kredivo/v2/deactive_user_token:
post:
operationId: deactivateUserToken
tags:
- Tokenization
summary: Deactivate a tokenized user
description: 'Invalidates a `user_token`, ending 0-click eligibility for that shopper. A shopper can also
deactivate a tokenized account from the Kredivo app, in which case Kredivo sends a push
notification to a merchant endpoint registered with Kredivo so the merchant can invalidate
the token on its side.
'
requestBody:
required: true
content:
application/json:
schema:
$ref: '#/components/schemas/UserTokenRequest'
example:
server_key: ABCD-XXXX-1234
user_token: XXXX-YYYY
responses:
'200':
description: Token deactivation result.
content:
application/json:
schema:
$ref: '#/components/schemas/UserTokenResponse'
examples:
ok:
value:
Status: OK
user_token: XXXX-YYYY
is_active: false
remarks: deactive user successful
invalidToken:
value:
status: ERROR
error:
kind: deprecated
message: Invalid user_token
code: null
/kredivo/v2/get_user_credit_details:
post:
operationId: getUserCreditDetails
tags:
- Tokenization
summary: Get a tokenized user's remaining credit limit
description: 'Returns the remaining limit, account status and account type of a tokenized shopper, broken
down per installment tenure. Requires a valid `user_token`.
'
requestBody:
required: true
content:
application/json:
schema:
$ref: '#/components/schemas/UserTokenRequest'
example:
server_key: ABCD-XXXX-1234
user_token: XXXX-YYYY
responses:
'200':
description: Shopper identity and per-tenure remaining credit limits.
content:
application/json:
schema:
$ref: '#/components/schemas/UserCreditDetailsResponse'
example:
Status: OK
user_details:
legal_name: Rangge Septyo
mobile_number: 62812xxxx0581
user_credit_details:
account_status: 1
account_type: 2
credit_limit_details:
- payment_type: 30_days
remaining_user_limit: '1500000'
- payment_type: 3_months
remaining_user_limit: '4500000'
components:
schemas:
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
UserTokenResponse:
type: object
properties:
Status:
type: string
status:
type: string
user_token:
type: string
is_active:
type: boolean
description: When false, Kredivo cannot provide user credit details for this token.
remarks:
type: string
error:
$ref: '#/components/schemas/ErrorDetail'
UserCreditDetailsResponse:
type: object
properties:
Status:
type: string
user_details:
type: object
properties:
legal_name:
type: string
mobile_number:
type: string
user_credit_details:
type: object
properties:
account_status:
type: integer
account_type:
type: integer
credit_limit_details:
type: array
items:
type: object
properties:
payment_type:
$ref: '#/components/schemas/PaymentType'
remaining_user_limit:
type: string
error:
$ref: '#/components/schemas/ErrorDetail'
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
UserTokenRequest:
type: object
required:
- server_key
- user_token
properties:
server_key:
type: string
user_token:
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/