NAV Navbar
Logo
HTTP

GETTING STARTED

Overview

Welcome to the FINFINI API!

FINFINI is a read-only API to banks. FINFINI is able to import personal data, account balances and full statements from any supported bank to your system. To do that, FINFINI will need end user bank credentials (most often a bank login and password). To ask the end user for bank credentials.

This documentation includes detailed explanations of API endpoints, walkthroughs of common workflows, as well as common data definitions. Please note that this documentation does not list all API endpoints. Additionally, you may not have access to all of the listed endpoints depending on the services you’ve purchased from FINFINI.

API credentials are required for any usage of the Aggregation API. If you are interested in receiving credentials for testing or evaluation, please create account on our website here.

Please direct all support questions to support@finfini.com. You can also review our Terms of Use for guidelines on our service’s usage.

Permissionless innovation

Under the hood, FINFINI uses screen-scraping to mimic a human using his web browser. By using the very same protocol as a web browser, FINFINI can potentially support any online bank worldwide but right now FINFINI only support 9 local Bank in Indonesia. see all list here

Following the guides

You can start with Authentication and follow the links in the sidebar. If you have any questions, contact us anytime to support at finfini.com.

Glossary

Most of the API revolves around several important concepts:

Institution

Name Type Website
Bank Mandiri Personal http://www.bankmandiri.co.id/
Bank Central Asia Personal https://klikbca.com/
Bank Negara Indonesia Personal http://www.bni.co.id/
Bank Rakyat Indonesia Personal http://www.bri.co.id/
Bank Permata Personal https://www.permatabank.com/
Bank Syariah Mandiri Personal https://www.syariahmandiri.co.id/
CIMB Niaga Personal https://www.cimbclicks.co.id/
Bank Muamalat Personal http://www.bankmuamalat.co.id/
Koinworks P2P Lending Personal https://www.koinworks.com/
Bank Mandiri Bisnis Corporate http://www.bankmandiri.co.id/

Security

Encryption

All sensitive data is encrypted using 2048-bit keys, which allows us to set a secure environment for the client. None of the sent credentials are saved within the system as plain text, and are always encrypted using an asymmetric encryption algorithm. If there is something wrong with the client’s data, they will be notified with a specific message.

We are continuously monitoring the API, securing it from malware attacks, and constantly updating the security layers of our infrastructure. FINFINI offers you a stable and attack-proof environment where you can keep all your credentials intact, and hidden from a potential attacker.

Certificate

We recommend you to check the FINFINI SSL certificate fingerprint on every connection.

Vulnerability rewards

The FINFINI staff has built a strong and reliable shield for the whole application. We show our appreciation to those who find potential security weaknesses in the system, hence FINFINI will reward you for the report given on any such matter.

As with most security programs, FINFINI will have some restrictions at this point. Only the first person who reports the bug will be rewarded for disclosing an issue within FINFINI security.

We appreciate your help in keeping FINFINI a safe environment for your financial data.

USING THE API

Environment

FINFINI API have some environment, from sandbox, develop, and production. here is the URL of list environment :

Type Base Url
Sandbox https://sandbox.finfini.com/api/v2/
Production https://finfini.com/api/v2/

Your Account

While using finfini API, your application can have one of the several statuses, each with its limitations.

Pending

Upon registration, your application has the Pending status. You can only access the dummy data (Sandbox).

In order to upgrade the status from Pending, you have to:

Provide the main URL, e-mail and name of the organization in the Account section of your profile; Provide the company address in the Address section of your Profile; Contact us using the Contact form with an upgrade request or send us an e-mail at support@finfini.com. We will examine your application and upgrade it to the Test status as soon as possible.

Test

In the Test status, your app can already use real data, but it’s still limited to 1 user and 5 account logins.

When you are ready to transfer to a limitless usage, contact us and we’ll switch you to Live as soon as possible. Note that all of the data will be preserved, but you can also destroy it if you wish to start with a clean slate.

Live

The Live status allows the application to use finfini API without any restrictions. Once your account is switched to live, we will start the billing calculations according to our pricing policy.

Restricted

Your application will have the Restricted status if the payment hasn’t been received. While in this status, your application is in a read-only state, hence it cannot create or account logins, sync them, or use another endpoint.

Disabled

In case of any non-compliance with Terms of Service or before going LIVE guide, we will contact you to solve the issues. When several attempts to contact the client fail or if any of the non-compliances are not fixed within two days time, the application will be transferred to the Disabled status. In this status, all API requests will return a ClientDisabled error.

Authentication

Here’s an example request listing all the vendors that the API currently supports.

curl -v -H "Accept: application/json" \
        -H "Content-type: application/json" \
        -H "Expires-at: 1893448800" \
        -H "Signature: 0o6Lg...RSFg=" \
        -H "Client-id: 121" \
        -H "F-FINFNI-Key: WVhCcGEyVjVLMUJVTGlCVVpYTXhNQ3M9" \
        -X GET \
        https://finfini.com/api/v2/vendors

Make sure to replace WVhCcGEyVjVLMUJVTGlCVVpYTXhNQ3M9 with your Client Secret.

API Key

The Client-id and Client_secret (F-FINFNI-Key) as API key headers should be passed in with every request. Keep in mind that you can obtain these keys on your Secrets page.

F-FINFNI-Key: WVhCcGEyVjVLMUJVTGlCVVpYTXhNQ3M9

For more information about the Expires-at and Signature headers, see Signature page of the guides.

Signature

Signature mismatch error

{
  "status": "fail",
  "error_class": "ValidationError",
  "message": {
    "en": "F-INFINI-Signature missmatch",
    "id": "F-INFINI-Signature tidak cocok"
  },
  "data": {
    "Content-Length": "135",
    "Content-Type": "application/json",
    "Host": "finfini.com",
    "Origin": "domain.com",
    "F-INFINI-Access-token": "$2y$10$kXb7WkeSw7tZYlDAF0V3iuGKL2SdlWLLZ6WVH9gGuygLQr43FfmJO",
    "F-INFINI-Key": "WVhCcGEyVjVLMUJVTGlCVVpYTXhNQ3M9",
    "F-INFINI-Timestamp": "1499400434",
    "F-INFINI-Signature": "708ecec8270ef9ba575dee5697a7e79663b8aa5c6d0012fb63f33b04c306e8dc",
  }
}

POST Example:

Data :
  - Method : POST
  - Original URL : https://finfini.com/api/v2/account/login
  - Access token : $2y$10$kXb7WkeSw7tZYlDAF0V3iuGKL2SdlWLLZ6WVH9gGuygLQr43FfmJO
  - Request body :
    {
      "vendor_id" : "1",
      "username" : "johndoe",
      "password" : "Abcd1234",
      "additional_cred" : "FC131245"
    }
  - Timestamp : 1499400434

Client Secret : WVhCcGEyVjVLMFJQUlNCRFQwMVFRVTVaSUV4MFpHcGhibVZBWkc5bExtTnZiU3N4TkRrNU1UVXpORFkxS3c9PQ==

lowercase(HexEncode(sha256({"vendor_id" : "1","username" : "johndoe","password" : "Abcd1234","additional_cred" : "FC131245"})))

>Request_body result

87502bc54c6cc1485ae3700f273cc2812d396e5b140d740e19472151545fde21

Signature = SHA256('POST|https://finfini.com/api/v2/account/login|87502bc54c6cc1485ae3700f273cc2812d396e5b140d740e19472151545fde21|$2y$10$kXb7WkeSw7tZYlDAF0V3iuGKL2SdlWLLZ6WVH9gGuygLQr43FfmJO|1499400434',WVhCcGEyVjVLMFJQUlNCRFQwMVFRVTVaSUV4MFpHcGhibVZBWkc5bExtTnZiU3N4TkRrNU1UVXpORFkxS3c9PQ==)

>Signature result

10be8c243c9ddeafcdec224322fe67a8691fa6fbfd864b2c66e992792aaadbd6

GET Example:

Data:
  - Method : GET
  - Original URL : https://finfini.com/api/v2/transaction/account/9?start_date=2017-03-01&end_date=2017-05-20
  - Access token : $2y$10$kXb7WkeSw7tZYlDAF0V3iuGKL2SdlWLLZ6WVH9gGuygLQr43FfmJO
  - Request body : ""
  - Timestamp : 1499400434

F-FINFNI-Key : WVhCcGEyVjVLMFJQUlNCRFQwMVFRVTVaSUV4MFpHcGhibVZBWkc5bExtTnZiU3N4TkRrNU1UVXpORFkxS3c9PQ==

lowercase(HexEncode(sha256("")))

>Request_body result
4f53cda18c2baa0c0354bb5f9a3ecbe5ed12ab4d8e11ba873c2f11161202b945

Signature = SHA256('GET|https://finfini.com/api/v2/transaction/account/9?start_date=2017-03-01&end_date=2017-05-20|$2y$10$kXb7WkeSw7tZYlDAF0V3iuGKL2SdlWLLZ6WVH9gGuygLQr43FfmJO|4f53cda18c2baa0c0354bb5f9a3ecbe5ed12ab4d8e11ba873c2f11161202b945|1499400434',WVhCcGEyVjVLMFJQUlNCRFQwMVFRVTVaSUV4MFpHcGhibVZBWkc5bExtTnZiU3N4TkRrNU1UVXpORFkxS3c9PQ==)

>Signature result

0f47da2062a0040cf45a32977618f82cd899c4dfa65ae1e7c4259da3dc57e690

For live clients absolutely all requests should be signed. For the clients with other statuses, it is optional:

Generate Signature

The following headers are required for your request to be considered signed:

Table of Endpoint’s Access token value

Name Endpoint Value
Client Attributes /client/info 0
User Create /user/create 0
User Login /user/login 0
User List /user/list 0
Vendor List /vendors 0
Category List /category 0
The Rest endpoints All endpoint except above Response value access_token from endpoint User Create or User Login

The pseudocode to generate the signature looks like this:

sha256('request_method|original_url|request_body|F-INFINI-Access-token|F-INFINI-Timestamp',F-INFINI-Key)

The fields request_method, original_url, request_body from the Signature header represent:

Pseudocode to generate request_body look like this :

request_body = lowercase(HexEncode(sha256(body))); “`

Throttling (Rate Limits)

sample Response header

{
    "X-RateLimit-Limit": 10,
    "X-RateLimit-Remaining": 8
}

sample Response Body

In case you exceeded the rate limit:
{
  "status": "fail",
  "message": {
    "en": "Too Many Request",
    "in": "Request terlalu banyak"
  },
  "request": "api/v2/products"
}

We throttle our APIs by default to ensure maximum performance for all developers.

Rate limiting in version 2 of the API is primarily considered on a per-request basis. Rate limits are determined for each endpoint.

Rate limits in version 2 of the API are divided into 1 minute intervals. In the version 2 of the API rate limit is 10 calls every 1 minutes, but this value may be adjusted at our discretion.

RATE LIMIT HEADERS

To make a better prediction about the API rate limit for your application or user, we provide X-RateLimit-* headers that start counting if your request is succeeded.

We provide three context based headers for this purpose:

HTTP Header Description
X-RateLimit-Limit The rate limit ceiling for all requests per one endpoint / 1-min window
X-RateLimit-Remaining The number of requests left for the the 1-min window
X-RateLimit-Reset The remaining window before the rate limit resets in e.g. UTC epoch seconds

When an application exceeds the rate limit, the Fidor API will return an HTTP 429 “Too Many Requests” response code (HTTP Status Code Documentation).

Format

We use JSON for all the requests and responses, including the errors.

Headers

To successfully communicate with finfini API, you must provide the following headers in every API request:

Sample request with complete headers

GET /general/rate/forex HTTP/1.1
Host: finfini.com
Content-Type: application/json
Origin: yourdomain.com
F-INFNI-Access-Token: a0daAPsGwPDHGMv6MpWzoIPgZvN9YvrSi7xdVI7Jb98638ilM7ila7
F-INFNI-Key: 41138489-1057-4e7e-ab93-9bc97b511cf6
F-INFINI-Timestamp:  2016-02-03T10:00:00.000+07:00
F-INFINI-Signature: ce20470484c27c0441d7c9dedc7d3e187e5e908df1780c6c389941b779033519
Name Type Description
Content-Type Alphanumeric Content of your request body e.g. application/json
Origin url Origin domain e.g. yourdomain.com
F-INFNI-Key Alphanumeric Your API Key generated by BCA
F-INFINI-Timestamp UNIX Timestamp Timestamp generated by client in Unix Timestamp format eg: “1499400434”
F-infini-Access-Token Alphanumeric Token Format value {access_token}
F-INFINI-Signature Alphanumeric Signature, please refer to section above

Please set empty value header F-INFNI-Access-Token for this endpoint:

Payload

an example if the payload format is JSON

{
  "username": "alexcad12",
  "password": "8s219124"
}

Payload is request data from client to our server, you can use multipart/data or JSON format to make a request. If you are choose using multipart/data, should have Parameter and value, here is one example

Parameter Value
username alexcad12
password 8s219124

Response

Response format example

{
    "status": "success",
    "data": {
        "client_id": 54,
        "client_secret": "WVhCcGEyVjVLMUJVTGlCVVpYTXhNWFJsY3pGQVoyMWhhV3d1WTI5dEt3PT0=",
        "name": "Tes1",
        "email": "tes1@gmail.com",
        "phone": "01249114122",
        "company_name": "PT. Tes11",
        "app_name": "TesApp",
        "position": "developer"
    }
}

For response format we use JSEND format, you can learn more here

Name Description
status they are 3 type statuses on response success,fail,error
data data is the output from your request
message message will be show when the status fail and error, message format have 2 language, id for indonesian language and en for english language, see error section below.
request the params request will be return when status fail

Reponses status information

Status Description Params
success All went well, and (usually) some data was returned. status, data
fail There was a problem with the data submitted, or some pre-condition of the API call wasn’t satisfied status, message, request
error An error occurred in processing the request, i.e. an exception was thrown status, message

Errors

Here’s an example of a request accessing all the accounts for a non-existing login:

curl -v -H "Accept: application/json" \
        -H "Content-type: application/json" \
        -H "Client-id: CLIENT_ID" \
        -H "Service-secret: SERVICE_SECRET" \
        -X GET \
        https://finfni.com/api/v2/user/login

The application will receive an error response that looks similar to the following:

{
    "status": "fail",
    "error_class": "AuthenticationFailed",
    "message": {
        "en": "Wrong Username or password",
        "id": "Username atau password salah"
    }
}

Whenever any of the requests fail for some reason, the response will contain a JSON object describing the error class and status are fail or error, the request and a message explaining the error.

In addition to that, we use HTTP statuses to indicate the source of the error. As a rule, 2xx HTTP statuses indicate that the request has been successful, 4xx point to an error in the request (incomplete data was sent to the server, the authentication failed, etc.) and 5xx indicate an error within our services.

For a complete list of possible errors, consult the Errors Reference.

Data Types

All of the responses returned by finfini API are in the JSON format. The description of the data types encoded in a JSON response is below.

Type Value Description
boolean true or false a boolean value
date 2018-09-12 a date in the YYYY-MM-DD format
datetime 2017-06-08T19:30:39+00:00 a date in the ISO-8601 format
float 23.0 a value corresponding to a real number using the double-precision representation
integer 12 a value corresponding to a integer number
object { "an": "object" } a string representing a JSON object (please refer to the RFC 4627 for more information)
string this is string a UTF-8 compatible sequence of characters

Pagination

Sample response

{
  "meta": {
        "total_data": 50,
        "last_id": 216,
        "current_page": 1,
        "next_page": "https://finfini.com/api/v2/transaction/all?page=2",
        "previous_page": null,
        "total_page": 3,
        "displayPerPage": 20
    }
}

Most FINFINI API routes return lists of paginated objects instead of the whole amount. The data you receive is divided into smaller chunks of data called pages.

By default, when you request a list of paginated resources, you will get a next_page in the meta object response if your response have over one page. displayPerPage shows how many items you will receive per page. By default displayPerPage was set to 20

In order to get all the data, use the next_page attribute to query the next page.

Errors Reference

Error codes

[400] Bad Request
[404] Not Found
[406] Not Acceptable
[409] Duplicated

Sample response

{
    "status": "fail",
    "error_class": "AuthenticationFailed",
    "message": {
        "en": "Wrong Username or password",
        "id": "Username atau password salah"
    },
  "request": {
    "username": "alexcad12",
    "password": "Abcd1234"
  }
}

The API can return multiple errors for any operation, each having its meaning and usage.

Error attributes

Params Type Description
error_class string the class of the error, one of the listed below
message string a message describing the error
request object the body of the request that caused the error

Errors list

Class Message (english) Message (indonesian)
AuthenticationFailed Wrong Username or password Username atau password salah
HeaderVerificationError F-INFINI-Timestamp required (etc) F-INFINI-Timestamp harus diisi (etc)
AccessDenied You don’t have permission to access this endpoint Kamu tidak memiliki hak akses pada endpoint ini
AccessForbidden Invalid access token (etc) Token akses tidak valid (etc)
ValidationError Email is required (etc) Email wajib diisi (etc)
MethodFailed Something went wrong while executing method Kesalahan terjadi saat mengeksekusi metoda
AccountNotFound Wrong Username or password Username atau password salah
UserNotFound User not found User tidak ditemukan
ClientNotFound API Key is not found API Key tidak ditemukan
VendorNotFound Vendor not avaliable Vendor tidak tersedia
AccountLimit Your accounts have reached the limit. please upgrade to pro version or delete one of your accounts first Akun sudah mencapai limit, silahkan upgrade akun anda
SyncAccountFailed Login failed. username or password incorrect (etc) Login gagal. Kesalahan username atau password (etc)
AccountBalanceNotFound Credential is correct but account balance is not found Username dan password benar tapi saldo akun tidak dapat ditemukan
ProductNotFound Product is not found Produk tidak ditemukan
JsonParseError Invalid JSON format Format JSON tidak valid
PaymentNotFound Payment(s) are not found Pembayaran tidak ditemukan
TransactionNotFound Transactions are not found Transaksi tidak ditemukan
InvoiceNotFound Invoice Not Found Invoice tidak ditemukan

API REFERENCE

Client

A Client is the entity that will be consuming our API.

CLIENT :: ATTRIBUTES

Request

GET https://finfini.com/api/v2/client/info HTTP/1.1
Host: finfini.com
Content-Type: application/json
Origin: [yourdomain.com]
F-INFINI-Key: [api_key]
F-INFINI-Timestamp: [timestamp]
F-INFINI-Signature: [signature]
F-INFINI-Access-token: 0

Response

{
    "status": "success",
    "data": {
        "client_id": 115,
        "client_secret": "WVhCcGEyVjVLMFJQUlNCRFQwMVFRVTVaSUV4MFpHcGhibVZBWkc5bExtTnZiU3N4TkRrNU1UVXpORFkxS3c9PQ==",
        "name": "Jane Doe",
        "email": "jane@doe.com",
        "phone": "085131481234",
        "company_name": "DOE COMPANY Ltd",
        "app_name": "DoeApp",
        "position": "Manager"
    },
    "info": {
        "status": "test",
        "signed_up_at": "2017-07-04 07:31:05",
        "activated_at": null,
        "last_request_sent_at": "2017-07-04 14:46:37"
    },
    "customers": {
        "total": 1
    },
    "logins": {
        "total": 0,
        "active": 0,
        "inactive": 0,
        "disabled": 0
    }
}

Get client attributes such as data, info, customers and logins information.

HTTP Request

GET https://finfini.com/api/v2/client/info

Request

No request needed.

See example request on right column.

Response

Field Data Type Description
Data general client data
client_id integer Id of client, one client have one ID
client_secret string Client credential for F-INFINI-Key header
name string Client’s name
email string Client’s email address or username
phone string Client’s phone number
company_name string Client’s Company Name
app_name string Client’s App name
position string Position within company of client
Info client info
status string possible values: pending, disabled, test, live, restricted
signed_up_at datetime time when the client signed up
activated_at datetime time when the client became live
last_request_sent_at datetime time when last request was sent
customers data about all the client’s customers
total integer the total number of customers
logins data about all of the client’s logins
total integer number of registered logins
active integer number of active logins, will be shown if active logins exist
inactive integer number of inactive logins, will be shown if inactive logins exist
disabled integer number of disabled logins, will be shown if disabled logins exist

User

A user of the client who is consuming Finfini API;

USER :: CREATE

Request

POST https://finfini.com/api/v2/user/create HTTP/1.1
Host: finfini.com
Content-Type: application/json
Origin: [yourdomain.com]
F-INFINI-Key: [client_secret]
F-INFINI-Timestamp: [timestamp]
F-INFINI-Access-token: 0
F-INFINI-Signature: [signature]
{
    "username" : "johndoe",
    "email" : "jhon@doe.com",
    "password" : "Abcd1234"
}

Response

{
    "status": "success",
    "data": {
        "id": 5104,
        "username": "johndoe",
        "email": "jhon@doe.com",
        "client_id": 115,
        "access_token": "$2y$10$mV2MlFnkmvDk5mHIt//ELee4eV3kCcICz3FjsmZ2Z8CMgb4KiqBxu"
    }
}

This service used by client to add user, and in return client will get access_token. Your Request must contain following information

HTTP Request

POST https://finfini.com/api/v2/user/create

Request

Field Data Type Mandatory Description
username string Y a username of an user
password string Y a passworx of an user
email string Y an email of an user

See example request on right column.

Response

Field Data Type Description
id string user’s id
username string user’s username
email string user’s email
client_id integer client id of the user
access_token string access token as authentication and generated signature for next request

Posible errors

USER :: LOGIN

Request

POST https://finfini.com/api/v2/user/login HTTP/1.1
Host: finfini.com
Content-Type: application/json
Origin: [yourdomain.com]
F-INFINI-Key: [client_secret]
F-INFINI-Timestamp: [timestamp]
F-INFINI-Access-token: 0
F-INFINI-Signature: [signature]
{
    "username" : "johndoe",
    "password" : "Abcd1234"
}

Response

{
    "status": "success",
    "data": {
        "id": 5104,
        "username": "johndoe",
        "email": "jhon@doe.com",
        "client_id": 115,
        "access_token": "$2y$10$3YX1FAunkZ7uCHPYCcC8UuidcXItE5NNBIixJMPs8.rn7j/3k20TK"
    }
}

This service used by user to login, and in return client will get access_token. Your Request must contain following information

HTTP Request

POST https://finfini.com/api/v2/user/login

Request

Field Data Type Mandatory Description
username string Y a username or email of an user
password string Y a passworx of an user

See example request on right column.

Response

Field Data Type Description
id string user’s id
username string user’s username
email string user’s email
client_id integer client id of the user
access_token string access token as authentication and generated signature for next request

Posible errors

USER :: LIST

Request

GET https://finfini.com/api/v2/client/info HTTP/1.1
Host: finfini.com
Content-Type: application/json
Origin: [yourdomain.com]
F-INFINI-Key: [client_secret]
F-INFINI-Timestamp: [timestamp]
F-INFINI-Signature: [signature]
F-INFINI-Access-token: 0

Request

{
    "status": "success",
    "data": [
        {
            "id": 5103,
            "username": "DOECOMPANYLtd",
            "email": "jane@doe.com",
            "business_name": null,
            "business_type": null,
            "avatar": null,
            "gender": null,
            "phone": "085131481234",
            "address": null,
            "birthday": null,
            "occupation": null,
            "postal": null,
            "created_at": {
                "date": "2017-07-04 07:31:05.000000",
                "timezone_type": 3,
                "timezone": "UTC"
            },
            "updated_at": {
                "date": "2017-07-04 07:31:05.000000",
                "timezone_type": 3,
                "timezone": "UTC"
            }
        }
        {
            .....
        },
        {
            .....
        }
    ]
}

This endpoint retrieves all list users.

HTTP Request

GET https://finfini.com/api/v2/users

Request

No request params needed, but the request header is required.

See example request on right column.

Response

Field Data Type Description
id integer users’s id
username string user’s username, it will be use for login
email string user’s email, it will be use for alternative username to login
business_name string user’s business name
business_type string user’s business type
avatar url user’s avatar link
gender string user’s gender , male or female
phone string user’s phone number
address string user’s address
birthday string user’s birthday
occupation string user’s occupation
postal integer user’s postal code
created_at datetime when user created
updated_at datetime when user updated

Posible errors

USER :: UPDATE

Request

PUT https://finfini.com/api/v2/user/update HTTP/1.1
Content-Type: application/json
Host: finfini.com
Origin: [yourdomain.com]
F-INFINI-Key: [client_secret]
F-INFINI-Timestamp: [timestamp]
F-INFINI-Signature: [signature]
F-INFINI-Access-token: [access_token]
{
  "username": "johndoe1",
  "password": "",
  "business_name": "Internshiping",
  "business_type": "Ecommerse",
  "avatar": "http://avatar.com/image.png",
  "gender": "male",
  "address": "Yogyakarta, indonesia",
  "phone": "081237218331",
  "birthday": "13-05-1890",
  "occupation": "Manager",
  "postal": "55283",
}

Response

{
    "status": "success",
    "data": [
        {
            "id": 5104,
            "username": "johndoe1",
            "email": "jhon@doe.com",
            "business_name": "Internshiping",
            "business_type": "Ecommerse",
            "avatar": null,
            "gender": null,
            "phone": null,
            "address": null,
            "birthday": null,
            "occupation": "Manager",
            "postal": 55283,
            "created_at": {
                "date": "2017-07-05 02:06:37.000000",
                "timezone_type": 3,
                "timezone": "UTC"
            },
            "updated_at": {
                "date": "2017-07-05 02:56:23.000000",
                "timezone_type": 3,
                "timezone": "UTC"
            }
        }
    ]
}

This service used by user to update the data. Your Request must contain following information

HTTP Request

PUT https://finfini.com/api/v2/user/update

Request

Field Data Type Mandatory Description
username string Y a username or email of an user
password string Y a password of an user
business_name string user’s business name
business_type string user’s business type
avatar url user’s avatar link
gender string user’s gender , male or female
phone string user’s phone number
address string user’s address
birthday string user’s birthday
occupation string user’s occupation
postal integer user’s postal code

See example request on right column.

Response

Field Data Type Description
id string user’s id
username string user’s username, it will be use for login
email string user’s email, it will be use for alternative username to login
business_name string user’s business name
business_type string user’s business type
avatar url user’s avatar link
gender string user’s gender , male or female
phone string user’s phone number
address string user’s address
birthday string user’s birthday
occupation string user’s occupation
postal integer user’s postal code
created_at datetime when user created
updated_at datetime when user updated

Posible errors

*ValidationError *MethodFailed *UserNotFound

USER :: INFO

Request

GET https://finfini.com/api/v2/user/info HTTP/1.1
Host: finfini.com
Content-Type: application/json
Origin: [yourdomain.com]
F-INFINI-Key: [client_secret]
F-INFINI-Timestamp: [timestamp]
F-INFINI-Signature: [signature]
F-INFINI-Access-token: [access_token]

Response

{
    "status": "success",
    "data": [
        {
            "id": 5104,
            "username": "johndoe",
            "email": "jhon@doe.com",
            "business_name": null,
            "business_type": null,
            "avatar": null,
            "gender": null,
            "phone": null,
            "address": null,
            "birthday": null,
            "occupation": null,
            "postal": null,
            "created_at": {
                "date": "2017-07-05 02:06:37.000000",
                "timezone_type": 3,
                "timezone": "UTC"
            },
            "updated_at": {
                "date": "2017-07-05 02:06:37.000000",
                "timezone_type": 3,
                "timezone": "UTC"
            }
        }
    ]
}

This endpoint retrieves all info of users.

HTTP Request

GET https://finfini.com/api/v2/user/info

Request

No request params needed, but the request header is required.

See example request on right column.

Response

Field Data Type Description
id integer users’s id
username string user’s username, it will be use for login
email string user’s email, it will be use for alternative username to login
business_name string user’s business name
business_type string user’s business type
avatar url user’s avatar link
gender string user’s gender , male or female
phone string user’s phone number
address string user’s address
birthday string user’s birthday
occupation string user’s occupation
postal integer user’s postal code
created_at datetime when user created
updated_at datetime when user updated

Posible errors

USER :: DELETE

Request

DELETE https://finfini.com/api/v2/user/info HTTP/1.1
Host: finfini.com
Content-Type: application/json
Origin: [yourdomain.com]
F-INFINI-Key: [client_secret]
F-INFINI-Timestamp: [timestamp]
F-INFINI-Signature: [signature]
F-INFINI-Access-token: [access_token]

Response

{
    "status": "success",
    "data": []
}

This service used by user or cleint to delete the user. Your Request must contain following information

HTTP Request

DELETE https://finfini.com/api/v2/user/delete

Request

No request params needed, but the request header is required.

See example request on right column.

Response

Reponse will return status message and empty data

Posible errors

Vendor

A bank or an online payments system;

VENDOR :: LIST

Request

GET https://finfini.com/api/v2/client/info HTTP/1.1
Host: finfini.com
Content-Type: application/json
Origin: [yourdomain.com]
F-INFINI-Key: [client_secret]
F-INFINI-Timestamp: [timestamp]
F-INFINI-Signature: [signature]
F-INFINI-Access-token: 0

Response

{
    "status": "success",
    "data": [
        {
            "id": 1,
            "name": "Mandiri",
            "type": "bank",
            "mode": "web",
            "status": "active",
            "automatic_fetch": "true",
            "instruction": "Please fill in all the fields.",
            "home_url": "https://ibank.bankmandiri.co.id/retail3/",
            "login_url": "https://ibank.bankmandiri.co.id/retail3/",
            "forum_url": "",
            "country_code": "ID",
            "refresh_timeout": 60
        },
    {
      ......
    }
    ]
}

This endpoint retrieves all list vendors.

HTTP Request

GET https://finfini.com/api/v2/vendors

Request

No request params needed, only the request header.

See example request on right column.

Response

Field Data Type Description
id integer vendor’s id
name string vendor’s name
type string possible values are: bank, lending, startup, marketplace, invesment
mode string possible values are: oauth, web, api, file
status string possible values are: active, inactive, disabled
automatic_fetch boolean whether the vendor’s logins can be automatically fetched
instruction string instructions on how to connect the bank, in English
home_url string the url of the main page of the provider
login_url string point of entrance to provider’s login web interface
forum_url string the url for the Finfini Forum page, dedicated to the provider
country_code string code of the vendors’s country
refresh_timeout integer amount of time (in minutes) after which the vendor’s logins are allowed to be refreshed

Posible errors

Account

The central entity of the API, representing a connection between a user’s bank and FINFINI. an account have some products and transactions;

ACCOUNT :: CREATE

Request

POST https://finfini.com/api/v2/account/create HTTP/1.1
Content-Type: application/json
Host: finfini.com
Origin: [yourdomain.com]
F-INFINI-Key: [client_secret]
F-INFINI-Timestamp: [timestamp]
F-INFINI-Signature: [signature]
F-INFINI-Access-token: [access_token]
{
  "vendor_id": "1",
  "username": "BankUsername21",
  "password": "PasworddCred213",
  "additional_params": "F2134"
}

Response

{
    "status": "success",
    "data": {
        "id": 1,
        "nickname": "",
        "login_status": 0,
        "login_info": null,
        "properties": null,
        "created_at": "2017-06-07 08:06:52",
        "updated_at": "2017-06-07 08:06:52",
        "vendor": {
            "id": 16,
            "name": "MandiriOnline"
        },
        "products": [
            {
                "id": 1,
                "number": "0011223344",
                "type": "Saving",
                "balance": 100000.43,
                "nickname": "Saving",
                "created_at": "2017-06-07 08:06:53",
                "updated_at": "2017-06-07 08:06:53",
                "properties": null,
                "cashflow": []
            },
            {
                "id": 2,
                "number": "4433221100",
                "type": "Saving",
                "balance": 49999.91,
                "nickname": "Saving",
                "created_at": "2017-06-07 08:06:53",
                "updated_at": "2017-06-07 08:06:53",
                "properties": null,
                "cashflow": []
            }
        ]
    }
}

This service offers to user to create an account, it will return account and products information. Your Request must contain following information

HTTP Request

POST https://finfini.com/api/v2/account/create

Request

Field Data Type Mandatory Description
vendor_id string Y One of Vendor id associated with the account
username string Y Bank’s username
password string Y Bank’s Password or PIN
additional_params string N For some case, a vendor have additional params like company id or etc

See example request on right column.

Response

Field Data Type Description
id string account’s id
nickname string account’s username
login_status boolean login status possible values are 0 (login failed) or 1 (login succesfully)
login_info string login information after create account
properties string additional account information will put here
created_at url time when account created
updated_at string time when account updated
vendor
id integer vendor’s id
name string vendor’s name
products
id integer product’s id
number string product'number
type string product’s type
balance double product’s balance
nickname string product’s nickname
created_at datetime time when product created
updated_at datetime time when product updated
properties string additional product information

Posible errors

ACCOUNT :: SYNC

Request

GET https://finfini.com/api/v2/account/sync/{id} HTTP/1.1
Content-Type: application/json
Host: finfini.com
Origin: [yourdomain.com]
F-INFINI-Key: [client_secret]
F-INFINI-Timestamp: [timestamp]
F-INFINI-Signature: [signature]
F-INFINI-Access-token: [access_token]

Response

{
    "status": "success",
    "data": {
        "id": 2,
        "nickname": "",
        "login_status": 1,
        "login_info": "Login succes",
        "properties": null,
        "created_at": "2017-06-07 05:13:01",
        "updated_at": "2017-06-13 08:03:01",
        "vendor": {
            "id": 15,
            "name": "MandiriBisnis"
        },
        "products": [
            {
                "id": 3,
                "number": "9988776655",
                "type": "SAVING",
                "balance": 5555555.55,
                "nickname": "SAVING",
                "created_at": "2017-06-07 05:13:01",
                "updated_at": "2017-06-13 08:03:09",
                "properties": null,
                "transactions": [
                    {
                        "id": 309,
                        "product_id": 3,
                        "category": "Pengeluaran lainnya",
                        "description": " CO-010117-1   ",
                        "note": null,
                        "date": {
                            "original": "2017-06-07",
                            "day": "Wednesday",
                            "date": 7,
                            "month": 6,
                            "year": 2017
                        },
                        "amount": 300000,
                        "type": "DB",
                        "created_at": "2017-06-13 08:03:09",
                        "updated_at": "2017-06-13 08:03:09"
                    },
                    {
            ......
          }
                ]
            }
        ]
    }
}

This service used by user to sync the account, it will return account and product information also transactions data of product . Your Request must contain following information:

HTTP Request

GET https://finfini.com//api/v2/account/sync/{id}

Request

Field Data Type Mandatory Description
id string Y account’s id

See example request on right column.

Response

Field Data Type Description
id string account’s id
nickname string account’s username
login_status boolean login status possible values are 0 (login failed) or 1 (login succesfully)
login_info string login information after create account
properties string additional account information will put here
created_at url time when account created
updated_at string time when account updated
vendor
id integer vendor’s id
name string vendor’s name
products
id integer product’s id
number string product'number
type string product’s type
balance double product’s balance
nickname string product’s nickname
created_at datetime date time when product created
updated_at datetime date time when product updated
properties string additional product information
transactions
id integer transaction’s id
product_id string product’s id assiociated with transaction
category string category of transaction
description string description of transaction
note string additional information of transaction
date string original transaction date
amount string amount values
type string transaction’s type
created_at datetime date time when product created
updated_at datetime date time when product updated

Posible errors

ACCOUNT :: UPDATE

Request

PUT https://finfini.com/api/v2/account/update/{id} HTTP/1.1
Content-Type: application/json
Host: finfini.com
Origin: [yourdomain.com]
F-INFINI-Key: [client_secret]
F-INFINI-Timestamp: [timestamp]
F-INFINI-Signature: [signature]
F-INFINI-Access-token: [access_token]
{
  "username": "BankUsername21",
  "password": "PasworddCred213",
  "nickname": "Bank Dunia"
}

Response

{
    "status": "success",
    "data": {
        "id": 1,
        "nickname": "example",
        "login_status": 1,
        "login_info": "succesfully login",
        "properties": null,
        "created_at": "2017-05-26 06:52:15",
        "updated_at": "2017-06-05 09:18:46",
        "vendor": {
            "id": 16,
            "name": "MandiriOnline"
        },
        ......
    }
}

This service offer to user to update account information. Your Request must contain following information

HTTP Request

PUT https://finfini.com/v2/account/update/{id}

Request

Field Data Type Mandatory Description
username string Y Account’s username
password string Y Account’s Password or PIN
nickname string N Account’s Nickname

See example request on right column.

Response

Field Data Type Description
id string account’s id
nickname string account’s username
login_status boolean login status possible values are 0 (login failed) or 1 (login succesfully)
login_info string login information after create account
properties string additional account information will put here
created_at url time when account created
updated_at string time when account updated
vendor
id integer vendor’s id
name string vendor’s name
products
id integer product’s id
number string product'number
type string product’s type
balance double product’s balance
nickname string product’s nickname
created_at datetime time when product created
updated_at datetime time when product updated
properties string additional product information

Posible errors

ACCOUNT :: LIST

Request

GET https://finfini.com/api/v2/accounts HTTP/1.1
Content-Type: application/json
Host: finfini.com
Origin: [yourdomain.com]
F-INFINI-Key: [client_secret]
F-INFINI-Timestamp: [timestamp]
F-INFINI-Signature: [signature]
F-INFINI-Access-token: [access_token]

Response

{
    "status": "success",
    "data": {
        "accounts": [
            {
                "id": 1,
                "nickname": "",
                "login_status": 1,
                "login_info": "Login succes",
                "properties": null,
                "created_at": "2017-06-07 05:13:01",
                "updated_at": "2017-06-08 08:10:31",
                "vendor": {
                    "id": 16,
                    "name": "MandiriOnline"
                },
                "products": [
                    ......
                ]
            },
            {
                "id": 2,
                "nickname": "",
                "login_status": 0,
                "login_info": null,
                "properties": null,
                "created_at": "2017-06-07 08:06:52",
                "updated_at": "2017-06-12 08:08:40",
                "vendor": {
                    "id": 15,
                    "name": "MandiriBisnis"
                },
                "products": [
                        ......
                ]
            }
        ]
    }
}

This service offer to user retrieves all list account and product. Your Request must contain following information

HTTP Request

GET https://finfini.com/v2/accounts

Request

No request params needed, only the request header.

See example request on right column.

Response

Field Data Type Description
id string account’s id
nickname string account’s username
login_status boolean login status possible values are 0 (login failed) or 1 (login succesfully)
login_info string login information after create account
properties string additional account information will put here
created_at url time when account created
updated_at string time when account updated
vendor
id integer vendor’s id
name string vendor’s name
products
id integer product’s id
number string product'number
type string product’s type
balance double product’s balance
nickname string product’s nickname
created_at datetime time when product created
updated_at datetime time when product updated
properties string additional product information

Posible errors

ACCOUNT :: INFO

Request

GET https://finfini.com/api/v2/account/info/{id} HTTP/1.1
Content-Type: application/json
Host: finfini.com
Origin: [yourdomain.com]
F-INFINI-Key: [client_secret]
F-INFINI-Timestamp: [timestamp]
F-INFINI-Signature: [signature]
F-INFINI-Access-token: [access_token]

Response

{
    "status": "success",
    "data": {
        "id": 1,
        "nickname": "example",
        "login_status": 0,
        "login_info": null,
        "properties": null,
        "created_at": "2017-06-07 08:06:52",
        "updated_at": "2017-06-07 08:06:52",
        "vendor": {
            "id": 16,
            "name": "MandiriOnline"
        },
        "products": [
            {
                "id": 1,
                "number": "0011223344",
                "type": "Saving",
                "balance": 100000.43,
                "nickname": "Saving",
                "created_at": "2017-06-07 08:06:53",
                "updated_at": "2017-06-07 08:06:53",
                "properties": null
            },
            {
                "id": 2,
                "number": "4433221100",
                "type": "Saving",
                "balance": 49999.91,
                "nickname": "Saving",
                "created_at": "2017-06-07 08:06:53",
                "updated_at": "2017-06-07 08:06:53",
                "properties": null
            }
        ]
    }
}

This service used by user to get account information. Your Request must contain following information

HTTP Request

GET https://finfini.com/v2/account/info/{id}

Request

Field Data Type Mandatory Description
id string Y account’s id

See example request on right column.

Response

Field Data Type Description
id string account’s id
nickname string account’s username
login_status boolean login status possible values are 0 (login failed) or 1 (login succesfully)
login_info string login information after create account
properties string additional account information will put here
created_at url time when account created
updated_at string time when account updated
vendor
id integer vendor’s id
name string vendor’s name
products
id integer product’s id
number string product'number
type string product’s type
balance double product’s balance
nickname string product’s nickname
created_at datetime time when product created
updated_at datetime time when product updated
properties string additional product information

Posible errors

ACCOUNT :: DELETE

Request

DELETE https://finfini.com/api/v2/account/delete/{id} HTTP/1.1
Host: sandbox.finfini.com
Content-Type: application/json
Origin: [yourdomain.com]
F-INFINI-Key: [client_secret]
F-INFINI-Timestamp: [timestamp]
F-INFINI-Signature: [signature]
F-INFINI-Access-token: [access_token]

Response

{
    "status": "success",
    "data": []
}

This service used by user or cleint to delete the user. Your Request must contain following information

HTTP Request

DELETE https://finfini.com/v2/account/delete/{id}

Request

Field Data Type Mandatory Description
id string Y account’s id, put account id on uri

See example request on right column.

Response

Reponse will return status message and empty data

Posible errors

Product

one of the product associated with a account. It can be a credit card, a savings, one of the online product, etc;

PRODUCT :: LIST

Request

GET https://finfini.com/api/v2/products HTTP/1.1
Content-Type: application/json
Host: finfini.com
Origin: [yourdomain.com]
F-INFINI-Key: [client_secret]
F-INFINI-Timestamp: [timestamp]
F-INFINI-Signature: [signature]
F-INFINI-Access-token: [access_token]

Response

{
    "status": "success",
    "data": [
        {
            "id": 37,
            "account_id": 17,
            "vendor_id": 15,
            "number": "1370011632284",
            "type": "SAVING",
            "balance": 59880491.47,
            "nickname": "SAVING",
            "created_at": "2017-06-07 05:13:01",
            "updated_at": "2017-06-13 09:37:09",
            "properties": null
        },
        {
            "id": 38,
            "account_id": 18,
            "vendor_id": 16,
            "number": "1370010071385",
            "type": "Saving",
            "balance": 2773268.43,
            "nickname": "Saving",
            "created_at": "2017-06-07 08:06:53",
            "updated_at": "2017-06-13 09:36:07",
            "properties": null
        },
        {
            "id": 39,
            "account_id": 18,
            "vendor_id": 16,
            "number": "1370012453656",
            "type": "Saving",
            "balance": 1960759.91,
            "nickname": "Saving",
            "created_at": "2017-06-07 08:06:53",
            "updated_at": "2017-06-13 09:36:07",
            "properties": null
        }
    ]
}

This service offer to user retrieves all list products. Your Request must contain following information

HTTP Request

GET https://finfini.com/v2/products

Request

No request params needed, only the request header.

See example request on right column.

Response

Field Data Type Description
id string product’s id
account_id string account’s id
vendor_id boolean vendor’s id
number string account’s number (nomor rekening)
type string product’s type
balance double amount balance
nickname string product’s nickname
created_at datetime time when product created
updated_at datetime time when product updated
properties string additional product information

Posible errors

PRODUCT :: INFO

Request

GET https://finfini.com/api/v2/product/info/{id} HTTP/1.1
Content-Type: application/json
Host: finfini.com
Origin: [yourdomain.com]
F-INFINI-Key: [client_secret]
F-INFINI-Timestamp: [timestamp]
F-INFINI-Signature: [signature]
F-INFINI-Access-token: [access_token]

Response

{
    "status": true,
    "response": {
        "id": 40,
        "account_id": 19,
        "nickname": "produk40",
        "number": "1370010071385",
        "type": "Saving",
        "currency": "IDR",
        "balance": 3944048.43,
        "created_at": "2017-06-21 15:59:03",
        "updated_at": "2017-06-21 16:07:23"
        "properties": null
    }
}

This service offer to user to see product information. Your Request must contain following information

HTTP Request

GET https://finfini.com/v2/product/info/{id}

Request

Field Data Type Mandatory Description
id integer Y product’s id

See example request on right column.

Response

Field Data Type Description
id integer product’s id
account_id integer account’s id
number string product'number
type string product’s type
currency string product’s currency
balance double product’s balance
nickname string product’s nickname
created_at datetime time when product created
updated_at datetime time when product updated
properties string additional product information

Posible errors

PRODUCT :: UPDATE

Request

PUT https://finfini.com/api/v2/product/update/{id} HTTP/1.1
Content-Type: application/json
Host: finfini.com
Origin: [yourdomain.com]
F-INFINI-Key: [client_secret]
F-INFINI-Timestamp: [timestamp]
F-INFINI-Signature: [signature]
F-INFINI-Access-token: [access_token]
{
  "nickname":"Tabungan Britama"
}

Response

{
    "status": true,
    "response": {
        "id": 40,
        "account_id": 19,
        "nickname": "produk40",
        "number": "1370010071385",
        "type": "Saving",
        "currency": "IDR",
        "balance": 3944048.43,
        "created_at": "2017-06-21 15:59:03",
        "updated_at": "2017-06-21 16:07:23"
        "properties": null
    }
}

This service offer to user to update account information. Your Request must contain following information

HTTP Request

PUT https://finfini.com/v2/product/update/{id}

Request

Field Data Type Mandatory Description
id integer Y product’s id
nickname string N product’s nickname or alias name

See example request on right column.

Response

Field Data Type Description
id integer product’s id
account_id integer account’s id
number string product'number
type string product’s type
currency string product’s currency
balance double product’s balance
nickname string product’s nickname
created_at datetime time when product created
updated_at datetime time when product updated
properties string additional product information

Posible errors

PRODUCT :: DELETE

Request

DELETE https://finfini.com/api/v2/product/delete/{id} HTTP/1.1
Content-Type: application/json
Host: finfini.com
Origin: [yourdomain.com]
F-INFINI-Key: [client_secret]
F-INFINI-Timestamp: [timestamp]
F-INFINI-Signature: [signature]
F-INFINI-Access-token: [access_token]

Response

{
    "status": "success",
    "data": []
}

This service used by user to delete one of product. Your Request must contain following information

HTTP Request

DELETE https://finfini.com/v2/product/delete/{id}

Request

Field Data Type Mandatory Description
id string Y product’s id, put product id on uri

See example request on right column.

Response

Reponse will return status message and empty data

Posible errors

Transaction

a single financial transaction made within an account or product

TRANSACTION :: ALL

Request

GET https://finfini.com/api/v2/transaction/account/20?start_date=2017-03-01&end_date=2017-05-20 HTTP/1.1
Content-Type: application/json
Host: finfini.com
Origin: [yourdomain.com]
F-INFINI-Key: [client_secret]
F-INFINI-Timestamp: [timestamp]
F-INFINI-Signature: [signature]
F-INFINI-Access-token: [access_token]

Response

{
    "status": "success",
    "data": [
        {
            "id": 212,
            "account_id": 19,
            "vendor_id": 15,
            "product_id": 40,
            "category": "Cicilan & Tagihan",
            "description": " Biaya Adm ",
            "date": {
                "original": "2017-06-30",
                "day": "Friday",
                "date": 30,
                "month": 6,
                "year": 2017
            },
            "amount": 12500,
            "type": "DB",
            "created_at": "2017-07-05 05:22:06",
            "updated_at": "2017-07-05 05:22:06"
        },
        {
            "id": 213,
            "account_id": 19,
            "vendor_id": 15,
            "product_id": 40,
            "category": "Bonus",
            "description": "  Bunga ",
            "date": {
                "original": "2017-06-30",
                "day": "Friday",
                "date": 30,
                "month": 6,
                "year": 2017
            },
            "amount": 33760.36,
            "type": "CR",
            "created_at": "2017-07-05 05:22:06",
            "updated_at": "2017-07-05 05:22:06"
        },
        {
            .......
        },
        {
            .......
        }
    ],
    "meta": {
        "total_data": 16,
        "last_id": 201,
        "current_page": 1,
        "next_page": null,
        "previous_page": null,
        "total_page": 1,
        "displayPerPage": 20
    }
}

This service offer to user retrieves all transaction with params (date). Your Request must contain following information

HTTP Request

GET https://finfini.com/api/v2/transaction/all?{params}

Request

Field Data Type Mandatory Description
start_date datetime N transaction’s start date format value Y-m-d
end_date datetime N transaction’s end date format value Y-m-d

See example request on right column.

Response

Field Data Type Description
id integer product’s id
account_id integer account’s id
vendor_id string vendor’s id
product_id string product’s id
category string transaction’s category
description string transaction’s description
date date transaction’s date
amount string transaction’s amount
type string posible values are CR (Credit) or DB (Debit)
created_at datetime datetime when transaction created
updated_at datetime datetime when transaction updated

Posible errors

TRANSACTION :: By METHOD

Request

GET https://finfini.com/api/v2/transaction/account/20?start_date=2017-03-01&end_date=2017-05-20 HTTP/1.1
Content-Type: application/json
Host: finfini.com
Origin: [yourdomain.com]
F-INFINI-Key: [client_secret]
F-INFINI-Timestamp: [timestamp]
F-INFINI-Signature: [signature]
F-INFINI-Access-token: [access_token]

Response

{
    "status": "success",
    "data": [
        {
            "id": 212,
            "account_id": 19,
            "vendor_id": 15,
            "product_id": 40,
            "category": "Cicilan & Tagihan",
            "description": " Biaya Adm ",
            "date": {
                "original": "2017-06-30",
                "day": "Friday",
                "date": 30,
                "month": 6,
                "year": 2017
            },
            "amount": 12500,
            "type": "DB",
            "created_at": "2017-07-05 05:22:06",
            "updated_at": "2017-07-05 05:22:06"
        },
        {
            "id": 213,
            "account_id": 19,
            "vendor_id": 15,
            "product_id": 40,
            "category": "Bonus",
            "description": "  Bunga ",
            "date": {
                "original": "2017-06-30",
                "day": "Friday",
                "date": 30,
                "month": 6,
                "year": 2017
            },
            "amount": 33760.36,
            "type": "CR",
            "created_at": "2017-07-05 05:22:06",
            "updated_at": "2017-07-05 05:22:06"
        },
        {
            .......
        },
        {
            .......
        }
    ],
    "meta": {
        "total_data": 16,
        "last_id": 201,
        "current_page": 1,
        "next_page": null,
        "previous_page": null,
        "total_page": 1,
        "displayPerPage": 20
    }
}

This service offer to user retrieves all transaction by method (account or product) and params (date). Your Request must contain following information

HTTP Request

GET https://finfini.com/api/v2/transaction/{method}/{id}/{params}

Method

Method Description Example
account retrieves transactions by account GET https://finfini.com/api/v2/transaction/account/29/{params}
product retrieves transactions by product GET https://finfini.com/api/v2/transaction/product/20/{params}
id account id or product id

Request

Field Data Type Mandatory Description
start_date datetime N transaction’s start date format value Y-m-d
end_date datetime N transaction’s end date format value Y-m-d

See example request on right column.

Response

Field Data Type Description
id integer product’s id
account_id integer account’s id
vendor_id string vendor’s id
product_id string product’s id
category string transaction’s category
description string transaction’s description
date date transaction’s date
amount string transaction’s amount
type string posible values are CR (Credit) or DB (Debit)
created_at datetime datetime when transaction created
updated_at datetime datetime when transaction updated

Posible errors

TRANSACTION :: By TYPE

Request

GET https://finfini.com/api/v2/transaction/credit/account/20?start_date=2017-03-01&end_date=2017-05-20 HTTP/1.1
Content-Type: application/json
Host: finfini.com
Origin: [yourdomain.com]
F-INFINI-Key: [client_secret]
F-INFINI-Timestamp: [timestamp]
F-INFINI-Signature: [signature]
F-INFINI-Access-token: [access_token]

Response

{
    "status": "success",
    "data": [
        {
            "id": 212,
            "account_id": 19,
            "vendor_id": 15,
            "product_id": 40,
            "category": "Cicilan & Tagihan",
            "description": " Biaya Adm ",
            "date": {
                "original": "2017-06-30",
                "day": "Friday",
                "date": 30,
                "month": 6,
                "year": 2017
            },
            "amount": 12500,
            "type": "DB",
            "created_at": "2017-07-05 05:22:06",
            "updated_at": "2017-07-05 05:22:06"
        },
        {
            "id": 213,
            "account_id": 19,
            "vendor_id": 15,
            "product_id": 40,
            "category": "Bonus",
            "description": "  Bunga ",
            "date": {
                "original": "2017-06-30",
                "day": "Friday",
                "date": 30,
                "month": 6,
                "year": 2017
            },
            "amount": 33760.36,
            "type": "CR",
            "created_at": "2017-07-05 05:22:06",
            "updated_at": "2017-07-05 05:22:06"
        },
        {
            .......
        },
        {
            .......
        }
    ],
    "meta": {
        "total_data": 16,
        "last_id": 201,
        "current_page": 1,
        "next_page": null,
        "previous_page": null,
        "total_page": 1,
        "displayPerPage": 20
    }
}

This service offer to user retrieves all transactions by type and method (account or product) also params (date). Your Request must contain following information

HTTP Request

GET https://finfini.com/api/v2/transaction/{type}/{method}/{id}?{params}

Type

Type Description Example
credit retrieves all Credit (income) transactions GET https://finfini.com/api/v2/transaction/credit/all
debit retrieves all Debit (expense) transactions GET https://finfini.com/api/v2/transaction/credit/all

Method

Method Description Example
account retrieves transactions by type and account GET https://finfini.com/api/v2/transaction/credit/account/29/{params}
product retrieves transactions by type and product GET https://finfini.com/api/v2/transaction/debit/product/20/{params}
id account id or product id

Request

Field Data Type Mandatory Description
start_date datetime N transaction’s start date format value Y-m-d
end_date datetime N transaction’s end date format value Y-m-d

See example request on right column.

Response

Field Data Type Description
id integer product’s id
account_id integer account’s id
vendor_id string vendor’s id
product_id string product’s id
category string transaction’s category
description string transaction’s description
date date transaction’s date
amount string transaction’s amount
type string posible values are CR (Credit) or DB (Debit)
created_at datetime datetime when transaction created
updated_at datetime datetime when transaction updated

Posible errors

TRANSACTION :: UPDATE

Request

PUT https://finfini.com/api/v2/transaction/update/231 HTTP/1.1
Content-Type: application/json
Host: finfini.com
Origin: [yourdomain.com]
F-INFINI-Key: [client_secret]
F-INFINI-Timestamp: [timestamp]
F-INFINI-Signature: [signature]
F-INFINI-Access-token: [access_token]
{
  "description": "Payment from Customer id 20",
  "category_id": 2
}

Response

{
    "status": true,
    "data": {
        "id": 66,
        "product_id": 19,
        "description": "zakat fitrah",
        "date": "2017-05-14",
        "amount": 15001,
        "type": "DB",
        "created_at": "2017-05-29 03:46:17",
        "updated_at": "2017-06-02 02:43:50",
        "category": "Pengeluaran Lainnya"
    }
}

This service offer to user to description and category on transaction. Your Request must contain following information

HTTP Request

PUT https://finfini.com/api/v2/transaction/update/{id}

Request

Field Data Type Mandatory Description
description string Y transaction’s description, default is raw description from bank
category_id integer N transaction’s category id

See example request on right column.

Response

Field Data Type Description
id integer transaction’s id
product_id integer product’s id
description string transaction’s description
date string transaction’s original date
amount double transaction’s amount
type string transaction’s type
category string transaction’s category
created_at datetime datetime when transaction created
updated_at datetime datetime when transaction updated

Posible errors

TRANSACTION :: INFO

Request

GET https://finfini.com/api/v2/transaction/231 HTTP/1.1
Content-Type: application/json
Host: finfini.com
Origin: [yourdomain.com]
F-INFINI-Key: [client_secret]
F-INFINI-Timestamp: [timestamp]
F-INFINI-Signature: [signature]
F-INFINI-Access-token: [access_token]

Response

{
    "status": true,
    "data": {
        "id": 66,
        "product_id": 19,
        "description": "zakat fitrah",
        "date": "2017-05-14",
        "amount": 15001,
        "type": "DB",
        "created_at": "2017-05-29 03:46:17",
        "updated_at": "2017-06-02 02:43:50",
        "category": "Pengeluaran Lainnya"
    }
}

This service offer to retrieves detail transaction. Your Request must contain following information

HTTP Request

GET https://finfini.com/api/v2/transaction/{id}

Request

No request params needed, only the request header.

See example request on right column.

Response

Field Data Type Description
id integer transaction’s id
product_id integer product’s id
description string transaction’s description
date string transaction’s original date
amount double transaction’s amount
type string transaction’s type
category string transaction’s category
created_at datetime datetime when transaction created
updated_at datetime datetime when transaction updated

Posible errors

Payment

a single or multiple payment verification.

PAYMENT :: INVOICE ADD

Request

POST https://finfini.com/api/v2/payment/add HTTP/1.1
Content-Type: application/json
Host: finfini.com
Origin: [yourdomain.com]
F-INFINI-Key: [client_secret]
F-INFINI-Timestamp: [timestamp]
F-INFINI-Signature: [signature]
F-INFINI-Access-token: [access_token]
{
  "transaction": [
    {
      "invoice_id": "1",
      "value": "51.789",
      "date": "2017-06-22",
      "status": "pending",
      "user_id": "3000",
      "account_id": "",
      "expired_at": "2017-06-23 20:00:00"
    },
    {
      "invoice_id": "2",
      "value": "100789",
      "date": "2017-06-22",
      "status": "pending",
      "user_id": "",
      "account_id": "20",
      "expired_at": "2017-06-23 20:00:00"
    }
  ]
}

Response

{
    "status": "success",
    "data": [
        {
            "user_id": 1,
            "account_id": 0,
            "invoice_id": 4,
            "value": 50452,
            "date": "2017-06-07",
            "status": "pending",
            "created_at": "2017-06-08 09:14:38",
            "updated_at": "2017-06-08 09:14:38",
            "deleted_at": null,
            "expired_at": "2017-06-07 20:00:00"
        },
        {
            "user_id": 1,
            "account_id": 1,
            "invoice_id": 5,
            "value": 200456,
            "date": "2017-06-07",
            "status": "pending",
            "created_at": "2017-06-08 09:14:38",
            "updated_at": "2017-06-08 09:14:38",
            "deleted_at": null,
            "expired_at": "2017-06-07 20:00:00"
        }
    ]
}

This service offers to client to add invoice data, this data important for verification purposed, without invoice data finfini will not be able to verify a transaction. Your Request must contain following information

HTTP Request

POST https://finfini.com/api/v2/payment/add

Request

Field Data Type Mandatory Description
transaction
invoice_id string Y invoice’s id
user_id integer Y user id associated with invoice
account_id integer Y account id associated with invoice
value string Y invoice’s value
date string Y invoice’s date
status string Y possible values are pending , verified , expired
expired_at datetime Y expiration invoice value format is Y-m-d H:i:s

See example request on right column.

Response

Field Data Type Description
user_id integer user’s id
account_id integer account’s id
invoice_id integer invoice’s id
value string invoice’s amount
date url invoice’s date
status string invoice’s status
created_at datetime datetime when invoice created
updated_at datetime datetime when invoice updated
expired_at string invoice’s expiration time

Posible errors

PAYMENT :: VERIFICATION

Request

POST https://finfini.com/api/v2/payment/verification HTTP/1.1
Content-Type: application/json
Host: finfini.com
Origin: [yourdomain.com]
F-INFINI-Key: [client_secret]
F-INFINI-Timestamp: [timestamp]
F-INFINI-Signature: [signature]
F-INFINI-Access-token: [access_token]
{
  "transaction": [
    {
      "invoice_id": "4"
    },
    {
      "invoice_id": "5"
    }
  ]
}

Response

{
    "status": "success",
    "data": [
        {
            "invoice_id": "5",
            "status": "pending",
            "account_id": 17,
            "last_sync_info": "success",
            "last_sync_message": "Login succes",
            "transactions": []
        },
        {
            "invoice_id": "6",
            "status": "verified",
            "account_id": 18,
            "last_sync_info": "success",
            "last_sync_message": "Succesfully Log in",
            "transactions": [
                {
                    "id": 236,
                    "vendor": "MandiriOnline",
                    "product_number": "1370010071385",
                    "category": "Bonus",
                    "description": "Bunga Rekening Bunga Rekening ",
                    "date": "2017-06-07",
                    "amount": 200456,
                    "created_at": "2017-07-06 04:52:28",
                    "updated_at": "2017-07-06 04:52:28"
                },
                {
                    "id": 283,
                    "vendor": "MandiriOnline",
                    "product_number": "1370012453656",
                    "category": "Bonus",
                    "description": "MTS Transaction 99163530 \/1635362709\/190617TK 02170-99163530 \/1635362709\/190617TK E-BANKING SETTLEMENT ",
                    "date": "2017-06-07",
                    "amount": 200456,
                    "created_at": "2017-07-06 04:52:31",
                    "updated_at": "2017-07-06 04:52:31"
                }
            ]
        },
        {
            "invoice_id": "10",
            "status": "verified",
            "account_id": 17,
            "last_sync_info": "success",
            "last_sync_message": "Succesfully Log in",
            "transactions": [
                {
                    "id": 223,
                    "vendor": "MandiriBisnis",
                    "product_number": "1370011632284",
                    "category": "Pemasukan Lainnya",
                    "description": " Tester API  Transfer DARI FAUSHAN GILANG GUSTIARWAN ",
                    "date": "2017-06-22",
                    "amount": 51789,
                    "created_at": "2017-07-06 04:50:01",
                    "updated_at": "2017-07-06 04:50:01"
                }
            ]
        }
    ]
}

This service offers to client to add invoice data, this data important for verification purposed, without invoice data finfini will not be able to verify a transaction. Your Request must contain following information

HTTP Request

POST https://finfini.com/api/v2/payment/verification

Request

Field Data Type Mandatory Description
Transaction
invoice_id string Y invoice’s id

See example request on right column.

Response

Field Data Type Description
invoice_id integer invoice’s id
status string invoice’s status
account_id string account’s id asociated with invoice
last_sync_info string status synchronization account to bank / vendor
last_sync_message string synchronization account information
Transaction
id integer transaction’s id
vendor string vendor’s name who asociated with transaction
product_number string product’s number who asociated with transaction
category string transaction’s category
description string transaction’s
date date transaction’s date
amount string transaction’s
description string transaction’s decription
created_at datetime datetime when invoice created
updated_at datetime datetime when invoice updated

Posible errors

PAYMENT :: LIST

Request

GET https://finfini.com/api/v2/transaction/account/20?start_date=2017-03-01&end_date=2017-05-20 HTTP/1.1
Content-Type: application/json
Host: finfini.com
Origin: [yourdomain.com]
F-INFINI-Key: [client_secret]
F-INFINI-Timestamp: [timestamp]
F-INFINI-Signature: [signature]
F-INFINI-Access-token: [access_token]

Response

{
    "status": "success",
    "data": [
    {
            "user_id": 5084,
            "account_id": 1,
            "invoice_id": 3,
            "value": 100123,
            "date": "2017-06-08",
            "status": "expired",
            "created_at": "2017-06-07 06:09:22",
            "updated_at": "2017-06-08 08:57:09",
            "deleted_at": null,
            "expired_at": "2017-06-08 14:00:00"
        },
        {
            "user_id": 5084,
            "account_id": 0,
            "invoice_id": 4,
            "value": 50452,
            "date": "2017-06-07",
            "status": "verified",
            "created_at": "2017-06-07 05:00:58",
            "updated_at": "2017-06-12 08:08:40",
            "deleted_at": null,
            "expired_at": null
        },
        {
            "user_id": 5084,
            "account_id": 1,
            "invoice_id": 5,
            "value": 200456,
            "date": "2017-06-07",
            "status": "verified",
            "created_at": "2017-06-07 06:09:21",
            "updated_at": "2017-06-12 08:08:40",
            "deleted_at": null,
            "expired_at": null
        }
    ],
    "meta": {
        "total_data": 6,
        "last_id": 93,
        "current_page": 1,
        "next_page": null,
        "previous_page": null,
        "total_page": 1,
        "displayPerPage": 20
    }
}

This service offer to user retrieves all trasaction by method (account or product) and params (date). Your Request must contain following information

HTTP Request

GET https://finfini.com/api/v2/payment/{method}/{params}

Method

Method Description Example
all retrieves all payments GET https://finfini.com/api/v2/payment/all?{params}
verified retrieves all verifed payments GET https://finfini.com/api/v2/payment/verifed?{params}
unverified retrieves all unverifed payments GET https://finfini.com/api/v2/payment/unverifed?{params}

Request

Field Data Type Mandatory Description
start_date datetime N trasaction’s start date format value Y-m-d
end_date datetime N trasaction’s end date format value Y-m-d

See example request on right column.

Response

Field Data Type Description
user_id integer user’s id
account_id integer account’s id
invoice_id integer invoice’s id
value string invoice’s amount
date url invoice’s date
status string invoice’s status
created_at datetime datetime when invoice created
updated_at datetime datetime when invoice updated
expired_at string invoice’s expiration time

Posible errors

ValidationError MethodFailed JsonParseError PaymentNotFound AccessForbidden

Category

one of the some categories assigned to a transaction.

CATEGORY :: LIST

Request

GET https://finfini.com/api/v2/category HTTP/1.1
Content-Type: application/json
Host: finfini.com
Origin: [yourdomain.com]
F-INFINI-Key: [client_secret]
F-INFINI-Timestamp: [timestamp]
F-INFINI-Signature: [signature]
F-INFINI-Access-token: 0

Response

{
    "status": "success",
    "data": [
        {
            "id": 0,
            "name": "Belum Ada Kategori",
            "description": "Silahkan Pilih Salah Satu Kategori",
            "type": "uncategories"
        },
        {......},
        {
            "id": 36,
            "name": "Pinjaman",
            "description": "pinjaman, hutang",
            "type": "income"
        }
    ]
}

This service offer retrieves all available categories. Your Request must contain following information

HTTP Request

GET https://finfini.com/api/v2/category

Request

No request params needed, but the request header is required.

See example request on right column.

Response

Field Data Type Description
id integer categori’s id
name string categori’s id
description string categori’s description
type string posible values are income and expense

Posible errors

CATEGORY :: UPDATE

Request

PUT https://finfini.com/api/v2/category/update/11 HTTP/1.1
Content-Type: application/json
Host: finfini.com
Origin: [yourdomain.com]
F-INFINI-Key: [client_secret]
F-INFINI-Timestamp: [timestamp]
F-INFINI-Signature: [signature]
F-INFINI-Access-token: [access_token]
{
  "category_id": 11,
  "name": "category",
  "description": "deskripsi"
}

Response

{
    "status": "success",
    "data": {
        "id": 3,
        "user_id": 5083,
        "name": "example 1",
        "description": "example description 1",
        "type": "expense",
        "created_at": "2017-06-05 04:00:28",
        "updated_at": "2017-06-13 06:53:10"
    }
}

This service offers to user to update one of category. Your Request must contain following information

HTTP Request

PUT https://finfini.com/api/v2/category/update/{id}

Request

“category_id”: 11, “name”: “category”, “description”: “deskripsi”

Request

Field Data Type Mandatory Description
category_id integer Y id of category
name string Y categori’s name
description string Y categori’s

See example request on right column.

Response

Field Data Type Description
id integer categori’s id
user_id integer user’s id asociated with the category
name string categori’s id
description string categori’s description
type string posible values are income and expense
created_at datetime datetime when category created
updated_at datetime datetime when category updated

Posible errors