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:
- Client - an application consuming FINFINI API;
- User - an user of the client who is consuming FINFINI API;
- Vendor - a bank or an financial institution;
- Account - the central entity of the API, representing a connection between a user’s bank and FINFINI;
- Product - one of the product associated with an account. It can be a credit card, a savings, one of the online product, etc;
- Transaction - a single financial transaction made within an account or product
- Payment - a single or multiple payment verification.
- Category - one of the some categories assigned to a transaction.
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:
- If the signature headers aren’t sent, the request will be performed without any signature validations;
- If the signature headers are sent, the request signature will be verified.
Generate Signature
The following headers are required for your request to be considered signed:
F-INFINI-Timestamp
- The timestamp must be presented in Unix Timestamp format eg:1499400434
;F-INFINI-Access-Token
- an OAuth2.0 access token retrieved from response user authentication (endpoint user create and login) but some endpoint using 0 value.
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 |
F-INFINI-Signature
-SHA256
signature of the string represented in the form'request_method|original_url|post_body|F-INFINI-Access-token|F-INFINI-Timestamp',F-INFINI-Key
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:
request_method
- uppercase method of the HTTP request. Example: GET, POST, PUT, DELETE, etc.;original_url
- the full requested URL, with all its complementary parameters;request_body
- the request post body, it should be an empty array if the request are GET and DELETE . but if the request POST and PUT, the body should be a json format. see example on right column or sidebar
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 |
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 |
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 |
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 |
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 |
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 |
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 |
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
- VendorNotFound
- AccountLimit
- ValidationError
- MethodFailed
- AccessForbidden
- SyncAccountFailed
- AccountBalanceNotFound
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
- ValidationError
- MethodFailed
- AccessForbidden
- SyncAccountFailed
- AccountBalanceNotFound
- AccountNotFound
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
- AccountNotFound
- MethodFailed
- AccessForbidden
- ValidationError
- SyncAccountFailed
- AccountBalanceNotFound
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 |