API v2 - CAFECA-IO/iSunFA GitHub Wiki

API code example : A011001

The initial letter 'A' indicates that the API is located in a folder whose name begins with 'A'. Following this, the first two digits '01' specify the API's position in a sequence of folders, suggesting that it is the first folder starting with 'A'. The third digit '1' denotes the API's position within a subsequence of folders inside the initial folder starting with 'A', indicating it is in the first subfolder. Lastly, the final three digits '001' represent the API's sequence number within the subfolder, meaning it is the first API listed there.

API list

BaseUrl: /api/v2

  • A010001 - POST /ask_ai - ask AI for help

  • A010002 - GET /ask_ai/[resultId] - get ai result from faith

  • A020001 - GET /company/:companyId/accounting_setting - accounting setting

  • A020002 - PUT /company/:companyId/accounting_setting - accounting setting

  • A030001 - GET /company/:companyId/account - accounting setting

  • A030002 - POST /company/:companyId/account - accounting setting

  • A030001 - GET /company/:companyId/account/:accountId - accounting setting

  • A031002 - PUT /company/:companyId/account/:accountId - accounting setting

  • A031003 - DELETE /company/:companyId/account/:accountId - accounting setting

  • A022001 - GET /company/:companyId/accounting_setting/opening_balance - accounting setting

  • A022002 - PUT /company/:companyId/accounting_setting/opening_balance - accounting setting

  • A030001 - POST /job/:jobId/application - Create an application for a job

  • A040001 - GET /company/:companyId/assets - List all assets

  • A040002 - GET /company/:companyId/assets/:assetId - Get asset by ID

  • A040003 - POST /company/:companyId/assets - Create asset

  • A040004 - PUT /company/:companyId/assets/:assetId - Update asset

  • A040005 - DELETE /company/:companyId/assets/:assetId - Delete asset

  • C010001 - GET /company/:companyId/customer_vendor - customer/vendor setting

  • C010002 - POST /company/:companyId/customer_vendor - customer/vendor setting

  • C011001 - GET /company/:companyId/customer_vendor_setting/:customerVendorId - customer/vendor setting

  • C011002 - PUT /company/:companyId/customer_vendor_setting/:customerVendorId - customer/vendor setting

  • C011003 - DELETE /company/:companyId/customer_vendor_setting/:customerVendorId - customer/vendor setting

  • C030001 - GET /company/certificate - get all certificate

  • C030002 - GET /company/certificate/[certificateId] -get one certificate`

  • C030003 - POST /company/certificate - post certificate

  • C030004 - DELETE /certificate/[certificateId] - Delete Certificate By id

  • C040001 - GET /company?userId= - user normal setting, company list

  • C040002 - POST /company - user normal setting, company list

  • C041001 - GET /company/:companyId - user normal setting, company list

  • C041002 - PUT /company/:companyId - user normal setting, company list

  • C041003 - DELETE /company/:companyId - user normal setting, company list

  • C042001 - PUT /company/:companyId/select - ISFMK00004

  • Not yet F010001 - POST /company/:companyId/file - ISFMK00004, ISFMK00058, ISFMK00061右邊

  • Not yet F011001 - GET /company/:companyId/file/:fileId - ISFMK00058

  • Not yet F011002 - DELETE /company/:companyId/file/:fileId - ISFMK00058

  • J010001 - GET /job - List all jobs

  • J010002 - GET /job/:jobId - Get details of a specific job

  • L010001 - GET /company/:companyId/ledger - List ledger details for a specific accounting account range

  • N020001 - GET /news - list news

  • O010001 - GET /company/:companyId/order

  • O010002 - POST /company/:companyId/order

  • P010001 - GET /company/:companyId/payment?orderId=

  • P010002 - POST /company/:companyId/payment

  • R010001 - POST user/:userId/role - select role

  • R010002 - GET user/:userId/role - list role

  • R020001 - POST /company/:companyId/report

  • R020002 - GET /company/:companyId/report - ISFMK00066

  • R021001 - GET /company/:companyId/report/:reportId - ISFMK00066

  • S010001 - POST /sign-out [不需驗證登入]

  • S020001 - GET /session - ISFMK00001 [不需驗證登入]

  • T010001 - GET /company/:companyId/trial_balance - List all trial balance items

  • U011001 - GET /user/:userId - user normal setting

  • U011002 - PUT /user/:userId - user normal setting

  • U011003 - DELETE /user/:userId - user normal setting

  • U011004 - GET /user/:userId/user_setting - user normal setting

  • U011005 - PUT /user/:userId/user_setting - user normal setting

  • U011006 - DELETE /user/:userId/user_setting - user normal setting

  • U011007 - GET /user/:userId/user_action_log - user normal setting

  • U011008 - GET /user/:userId/user_agreement - login page

  • V010001 - GET /company/voucher - Get all voucher

  • V010002 - GET /company/voucher/[voucherId] - GET One Voucher

  • V010003 - POST /company/voucher/readed - POST check already Read voucher

  • V010004 - POST /company/voucher - Post Voucher

  • V010005 - PUT /company/voucher/[voucherId] - Put Voucher

  • V010006 - DELETE /company/voucher/[voucherId] - Delete Voucher

-------------------- 以下是待確認 api v1 --------------------

  • A010001 - GET /audit_report - iSunFA-Landing-page-Animation10 [不需驗證登入]
  • J010001 - GET /company/:companyId/journal - ISFMK00038
  • J011001 - GET /company/:companyId/journal/:journalId - ISFMK00015 ISFMK00024
  • J011002 - DELETE /company/:companyId/journal/:journalId - ISFMK00025
  • O011001 - POST /company/:companyId/ocr
  • O011003 - GET /company/:companyId/ocr
  • O011004 - DELETE /company/:companyId/ocr/:resultId

------------------ 以上是待確認 api v1 -----------------------------------

askAi

  • description: ask AI for help

Request

Request url

POST /askAi

query

name type description required default
reason string ('help', 'certificate', 'voucher') the reason for asking AI, help is for stream chat, certificate is for analysis certificate ad return invoice json, voucher is will return voucher json true --

body

1. Help

name type description
content string the content for asking AI
POST /askAi?reason=help

const body = {
  "content": "what is the meaning of life?"
}

2. Certificate

name type description
fileId number the "fileId" of that certificate (because certificate has not been saved into database yet)
POST /askAi?reason=certificate

const body = {
  "fileId": 1001
}

3. Voucher

name type description
certificateId number the "certificateId" of certificate, when user click "Please select certificate...", than will be activate
POST /askAi?reason=voucher

const body = {
  "certificateId": 1001
}

Response

Response Parameters

name type description
powerby string the version of the API
success boolean true or false
code string response code
message string a message detailing the result of the request
payload AI / result response data(AI if use "helper", result if "invoice", "voucher")

AI

name type description
reason string the reason for asking AI
content string the content for asking AI
answer string the answer for asking AI
{
    "powerby": "iSunFA v2.0.0+1",
    "success": true,
    "code":  "200",
    "message": "Success",
    "payload": {
	    "reason": "helper",
	    "content": "what is the meaning of life?",
	    "answer": "It os 42"
    }
}

Result

name type description
reason string the reason for asking AI
resultId string resultId for pusher sub
{
    "powerby": "iSunFA v2.0.0+1",
    "success": true,
    "code":  "200",
    "message": "Success",
    "payload": {
	    "reason": "helper",
	    "resultId": "a1b2c3d4f5g6h7i8j9k0"
    }
}

askAi with resultId

  • Description: Use this api if ai result is missing

Request

Request url

GET /askAi/:resultId

Session

Session data will be get from session, so not needed to be provided.

name type description
companyId number id of company
userId number id of user

Param

name type description required default
resultId string the resultId of 'certificate', 'voucher' true --

query

name type description required default
reason string ('help', 'certificate', 'voucher') the reason for asking AI, help is for stream chat, certificate is for analysis certificate ad return invoice json, voucher is will return voucher json true --

Request Example

GET /ask_ai/:resultId?reason=certificate

Response

Response Parameters

name type description
powerby string the version of the API
success boolean true or false
code string response code
message string a message detailing the result of the request
payload certificate | voucher base on helper type

certificate

  • this may not return all arguments in payload
{
    "powerby": "iSunFA v2.0.0+1",
    "success": true,
    "code":  "200",
    "message": "Success",
    "payload": {
		"inputOrOutput": "input",
		"certificateDate": 10000001, // second
		"certificateNo": "AB-12345678", // to store special number to represent certificate, ex for invoice is invoiceNo
		"currencyAlias": "TWD",
		"priceBeforeTax": 4000,
		"taxRatio": 5, // 5%, -1 for tax free
		"taxPrice": 200, // how many price to pay taxes
		"totalPrice": 4200,
		"counterPartyId": 1, // use fuzzy search
		"invoiceType": "triplicate_uniform_invoice",
		"deductible": true,
	}
}

voucher

{
    "powerby": "iSunFA v2.0.0+1",
    "success": true,
    "code":  "200",
    "message": "Success",
    "payload": {
	    "voucherDate": 1000000,
		"type": "payment", // or transfer or receiving
		"note": "This is a note",
		"counterPartyId": 1001,
		"lineItemsInfo": {
			"sum": {
				"debit": true,
		        "amount": 1000
		    },
		    "lineItems": [
			    {
			        "id": 1001,
			        "amount": 1000,
			        "description": "This is a description",
			        "debit": true,
			        "accountId": 1001,
			    },
		        {
			        "id": 1002,
			        "amount": 1001,
			        "description": "This is a description",
			        "debit": false,
			        "accountId": 1002,
			    }
		    ]
		}
	}
}

listCustomerVendor

  • description: list all customers and vendors

Request

Request url

GET /company/:companyId/customer_vendor_setting

Parameters

name type description required default
companyId string id of the company associated with the customer or vendor true --

Request Example

GET /company/1000/customer_vendor_setting

Response

Response Parameters

name type description
powerby string the version of the API
success boolean true or false
code string response code
message string a message detailing the result of the request
payload IPaginatedData<CustomerVendor[]> response data

IPaginatedData

name type description
data CustomerVendor[] The journal data
page number The page number
totalPages number The total number of pages
totalCount number The total number of items
pageSize number The number of items per page
hasNextPage boolean Indicates if there is a next page
hasPreviousPage boolean Indicates if there is a previous page
sort {sortBy: string, sortOrder: string}[] The order and field to sort by

CustomerVendor

name type description
id number customer's or vendor's id
companyId number id of the company associated with the customer or vendor
name string customer's or vendor's name
country string which country the tax id belongs to
taxId string customer's or vendor's tax id
type string type of the customer or vendor
note string note of the customer or vendor
createdAt number create time
updatedAt number update time
deletedAt number delete time

Response Example

  • 成功的回傳
{
    "powerby": "iSunFA v2.0.0+1",
    "success": true,
    "code":  "200",
    "message": "List all customers and vendors successfully",
    "payload": {
        "data": [
            {
                "id": 1,
                "companyId": 1,
                "name": "Test Customer",
                "taxId": "123456",
                "type": "Customer",
                "note": "Test Note",
                "createdAt": 123456,
                "updatedAt": 123456
            },
            {
                "id": 2,
                "companyId": 1,
                "name": "Test Vendor",
                "taxId": "123456",
                "type": "Vendor",
                "note": "Test Note",
                "createdAt": 123456,
                "updatedAt": 123456
            }
        ],
        "page": 1,
        "totalPages": 5,
        "totalCount": 23,
        "pageSize": 5,
        "hasNextPage": true,
        "hasPreviousPage": false,
        "sort": [
            {
                "sortBy": "createdAt",
                "sortOrder": "desc"
            }
        ]
    }
}
  • 失敗的回傳
{
    "powerby": "iSunFA v2.0.0+1",
    "success": false,
    "code":  "405",
    "message": "Method not allowed",
    "payload": {}
}

createCustomerVendor

  • description: create a customer or vendor

Request

Request url

POST /company/:companyId/customer_vendor_setting

Parameters

name type description required default
companyId string id of the company associated with the customer or vendor true --

body

name type description
name string customer's or vendor's name
companyId number id of the company associated with the customer or vendor
country string which country the tax id belongs to
taxId string customer's or vendor's tax id
type string type of the customer or vendor
note string note of the customer or vendor

Request Example

POST /company/1000/customer_vendor_setting

const body = {
          "name": "cafecaWW",
          "companyId": 1000,
          "country": "Taiwan",
          "taxId": "3464",
          "type": "both",
          "note": "careful"
       }

Response

Response Parameters

name type description
powerby string the version of the API
success boolean true or false
code string response code
message string a message detailing the result of the request
payload CustomerVendor response data

CustomerVendor

name type description
id number customer's or vendor's id
companyId number id of the company associated with the customer or vendor
name string customer's or vendor's name
country string which country the tax id belongs to
taxId string customer's or vendor's tax id
type string type of the customer or vendor
note string note of the customer or vendor
createdAt number create time
updatedAt number update time
deletedAt number delete time

Response Example

  • 成功的回傳
{
    "powerby": "iSunFA v2.0.0+1",
    "success": true,
    "code":  "200",
    "message": "Create a customer or vendor successfully",
    "payload": 
       {
          "id": 3,
          "companyId": 1000,
          "name": "cafecaWW",
          "country": "Taiwan",
          "taxId": "3464",
          "type": "both",
          "note": "careful",
          "createdAt": 1630000000,
          "updatedAt": 1630000000,
          "deletedAt": null,
       },
}
  • 失敗的回傳
{
    "powerby": "iSunFA v2.0.0+1",
    "success": false,
    "code":  "405",
    "message": "Method not allowed",
    "payload": {}
}

getCustomerVendorById

  • description: get a customer or vendor by id

Request

Request url

GET /company/:companyId/customer_vendor_setting/:customerVendorId

Parameters

name type description required default
companyId string id of the company associated with the customer or vendor true --
customerVendorId string id of the customer or vendor true --

Request Example

GET /company/1000/customer_vendor_setting/1

Response

Response Parameters

name type description
powerby string the version of the API
success boolean true or false
code string response code
message string a message detailing the result of the request
payload CustomerVendor response data

CustomerVendor

name type description
id number customer's or vendor's id
companyId number id of the company associated with the customer or vendor
name string customer's or vendor's name
country string which country the tax id belongs to
taxId string customer's or vendor's tax id
type string type of the customer or vendor
note string note of the customer or vendor
createdAt number create time
updatedAt number update time
deletedAt number delete time

Response Example

  • 成功的回傳
{
    "powerby": "iSunFA v2.0.0+1",
    "success": true,
    "code":  "200",
    "message": "Get a customer or vendor successfully",
    "payload": 
       {
          "id": 1,
          "companyId": 1000,
          "name": "cafeca",
          "country": "Taiwan",
          "taxId": "1234",
          "type": "customer",
          "note": "bad one",
          "createdAt": 1630000000,
          "updatedAt": 1630000000,
          "deletedAt": null,
       },
}
  • 失敗的回傳
{
    "powerby": "iSunFA v2.0.0+1",
    "success": false,
    "code":  "405",
    "message": "Method not allowed",
    "payload": {}
}

updateCustomerVendorById

  • description: update a customer or vendor by id

Request

Request url

PUT /company/:companyId/customer_vendor_setting/:customerVendorId

Parameters

name type description required default
companyId string id of the company associated with the customer or vendor true --
customerVendorId string id of the customer or vendor true --

body

name type description
name string customer's or vendor's name
country string which country the tax id belongs to
taxId string customer's or vendor's tax id
type string type of the customer or vendor
note string note of the customer or vendor

Request Example

PUT /company/1000/customer_vendor_setting/1

const body = {
          "name": "MOon",
          "country": "Taiwan",
          "taxId": "3464",
          "type": "both",
          "note": "careful very"
       }

Response

Response Parameters

name type description
powerby string the version of the API
success boolean true or false
code string response code
message string a message detailing the result of the request
payload CustomerVendor response data

CustomerVendor

name type description
id number customer's or vendor's id
companyId number id of the company associated with the customer or vendor
name string customer's or vendor's name
country string which country the tax id belongs to
taxId string customer's or vendor's tax id
type string type of the customer or vendor
note string note of the customer or vendor
createdAt number create time
updatedAt number update time
deletedAt number delete time

Response Example

  • 成功的回傳
{
    "powerby": "iSunFA v2.0.0+1",
    "success": true,
    "code":  "200",
    "message": "Update a customer or vendor successfully",
    "payload": 
       {
          "id": 1,
          "companyId": 1000,
          "name": "MOon",
          "country": "Taiwan",
          "taxId": "3464",
          "type": "both",
          "note": "careful very",
          "createdAt": 1630000001,
          "updatedAt": 1630000001,
          "deletedAt": null,
       },
}
  • 失敗的回傳
{
    "powerby": "iSunFA v2.0.0+1",
    "success": false,
    "code":  "405",
    "message": "Method not allowed",
    "payload": {}
}

deleteCustomerVendorById

  • description: soft delete a customer or vendor by id through update the delete time

Request

Request url

DELETE /company/:companyId/customer_vendor_setting/:customerVendorId

Parameters

name type description required default
companyId string id of the company associated with the customer or vendor true --
customerVendorId string id of the customer or vendor true --

Request Example

DELETE /company/1000/customer_vendor_setting/1

Response

Response Parameters

name type description
powerby string the version of the API
success boolean true or false
code string response code
message string a message detailing the result of the request
payload CustomerVendor response data

CustomerVendor

name type description
id number customer's or vendor's id
companyId number id of the company associated with the customer or vendor
name string customer's or vendor's name
country string which country the tax id belongs to
taxId string customer's or vendor's tax id
type string type of the customer or vendor
note string note of the customer or vendor
createdAt number create time
updatedAt number update time
deletedAt number delete time

Response Example

  • 成功的回傳
{
    "powerby": "iSunFA v2.0.0+1",
    "success": true,
    "code":  "200",
    "message": "Delete a customer or vendor successfully",
    "payload": 
       {
          "id": 1,
          "companyId": 1000,
          "name": "MOon",
          "country": "Taiwan",
          "taxId": "3464",
          "type": "both",
          "note": "careful very",
          "createdAt": 1630000001,
          "updatedAt": 1630000001,
          "deletedAt": 1630560002,
       },
}
  • 失敗的回傳
{
    "powerby": "iSunFA v2.0.0+1",
    "success": false,
    "code":  "405",
    "message": "Method not allowed",
    "payload": {}
}

GET All Certificate

  • Description: Get all certificate in "Uploaded Certificate"

Request

Request usrl

GET /company/certificate

Session

Session data will be get from session, so not needed to be provided.

name type description
companyId number id of company
userId number id of user

Query

name type description required
page number The page number, default is 1 no
pageSize number how many items in one page, default is 10 no
hasBeenUsed boolean(true/false) return certificate connect to something if true, return certificate connect to nothing if false, return all if undefined no
sortBy string which column to sort by (ex: "createAt") no
sortOrder string ("asc"/"desc") The order to sort by no
startDate integer(timestamp in second) item include and after startDate, default is 0 no
endDate integer(timestamp in second) item include and before startDate, default is infinity no
searchQuery string this field is to search name no

Resonse

Response Parameter

To be continue

Response Example

{
    "powerby": "iSunFA v2.0.0+1",
    "success": true,
    "code":  "200",
    "message": "Method not allowed",
    "payload": {
     "data": [
      {
       "id": 1
       "inputOrOutput": "input",
       "certificateDate": 10000001, // second
       "certificateNo": "AB-12345678", // to store special number to represent certificate, ex for invoice is invoiceNo
       "currencyAlias": "TWD",
       "priceBeforeTax": 4000,
       "taxRatio": 5, // 5%, -1 for tax free
       "taxPrice": 200, // how many price to pay taxes
       "totalPrice": 4200,
       "counterPartyId": 1,
       "invoiceType": "triplicate_uniform_invoice",
       "deductible": true,
       "connectToId": null // this can be interger or null, if null it has not been used on anything, if it has number, it will be 
       "name": "invoice001.jpg",
       "url": "/api/v2/certificate/1", // decrypedted
       "type": "invoice", // what kind f certificate is this
       "connectTotype": "voucher",
       "mimeTYpe": "image/jpeg",
       "size": "3.0 MB",
       "uploadProgress": 50, // 50 percent
       "aiResultId": "douhvjax_-1", // or null?
       "aiStatus": "success",
       "createAt": 10000000, // second
       "updateAt": 10000000, // second
      }
     ],
     "page": 1, // current page
     "totalPages": 3,
     "totalCount": 30,
     "pageSize": 10,
     "hasNextPage": true,
     "hasPreviousPage": true,
     "sort": [
      {
       "sortBy": "createAt",
       "sortOrder": "desc"
      }
     ]
    }
}

GET One Certificate

  • Description: GET one certificate

Request

Request usrl

GET /company/certificate/[certificateId]

Session

Session data will be get from session, so not needed to be provided.

name type description
companyId number id of company
userId number id of user

Parameter

name type description required
certificateId number The id of certain certificate Yes

Resonse

Response Parameter

To be continue

Response Example

{
    "powerby": "iSunFA v2.0.0+1",
    "success": true,
    "code":  "200",
    "message": "Method not allowed",
    "payload": {
  "id": 1,
  "inputOrOutput": "input",
  "certificateDate": 10000001, // second
  "certificateNo": "AB-12345678", // to store special number to represent certificate, ex for invoice is invoiceNo
  "currencyAlias": "TWD",
  "priceBeforeTax": 4000,
  "taxRatio": 5, // 5%, -1 for tax free
  "taxPrice": 200, // how many price to pay taxes
  "totalPrice": 4200,
  "counterPartyId": 1,
  "invoiceType": "triplicate_uniform_invoice",
  "deductible": true,
  "connectToId": null, // this can be interger or null, if null it has not been used on anything, if it has number, it will be 
  "name": "invoice001.jpg",
  "url": "/api/v2/certificate/1", // decrypedted
  "type": "invoice", // what kind f certificate is this
  "connectTotype": "voucher",
  "mimeType": "image/jpeg",
  "size": "3.0 MB",
  "uploadProgress": 50, // 50 percent
  "aiResultId": "douhvjax_-1", // or null?
  "aiStatus": "success",
  "createAt": 10000000, // second
  "updateAt": 10000000, // begin
 }
}

POST Certificate

  • Description : You should Post to File first, then get the file id. then post to here and get aichResultId, so that you can go to ask_ai to get ai data

Request

Request url

POST /company/certificate

Session

Session data will be get from session, so not needed to be provided.

name type description
companyId number id of company
userId number id of user

Body

name type description
inputOrOutput string input
certificateDate int certificate happened day in second
certificateNo string to store special number to represent certificate, ex for invoice is invoiceNo
currencyAlias string currency short name (alias) ex: "TWD"
priceBeforeTax number price before tax
taxRatio number if 5% please write 5, tax free be -1
taxPrice number Need to make sure it is priceBeforeTax * taxRatio
totalPrice number need to be priceBeforeTax + taxPrice
counterPartyId number id f counter body
invoiceType string triplicate_uniform_invoice
deductible boolean can this invoice be deductible?
fileId number which file id
{
 "inputOrOutput": "input",
 "certificateDate": 10000001, // second
 "certificateNo": "AB-12345678", // to store special number to represent certificate, ex for invoice is invoiceNo
 "currencyAlias": "TWD",
 "priceBeforeTax": 4000,
 "taxRatio": 5, // 5%, -1 for tax free
 "taxPrice": 200, // how many price to pay taxes
 "totalPrice": 4200,
 "counterPartyId": 1,
 "invoiceType": "triplicate_uniform_invoice",
 "deductible": true,
 "fileId": 1
}

Response

Response Parameter

To be continue

Response Example

{
    "powerby": "iSunFA v2.0.0+1",
    "success": true,
    "code":  "200",
    "message": "Method not allowed",
    "payload": {
     "aiResultId": "douhvjax_-1"
    }
}

Delete Certificate By id

  • Description : Delete certificate by id

Request

DELETE /certificate/[certificateId]

Session

Session data will be get from session, so not needed to be provided.

name type description
companyId number id of company
userId number id of user

Parameter

name type description
certificateId number certificate id to delete

Response

{
    "powerby": "iSunFA v2.0.0+1",
    "success": true,
    "code":  "200",
    "message": "Method not allowed",
    "payload": {
  "id": 1,
  "inputOrOutput": "input",
  "certificateDate": 10000001, // second
  "certificateNo": "AB-12345678", // to store special number to represent certificate, ex for invoice is invoiceNo
  "currencyAlias": "TWD",
  "priceBeforeTax": 4000,
  "taxRatio": 5, // 5%, -1 for tax free
  "taxPrice": 200, // how many price to pay taxes
  "totalPrice": 4200,
  "counterPartyId": 1,
  "invoiceType": "triplicate_uniform_invoice",
  "deductible": true,
  "connectToId": null, // this can be interger or null, if null it has not been used on anything, if it has number, it will be 
  "name": "invoice001.jpg",
  "url": "/api/v2/certificate/1", // decrypedted
  "type": "invoice", // what kind f certificate is this
  "connectTotype": "voucher",
  "mimeType": "image/jpeg",
  "size": "3.0 MB",
  "uploadProgress": 50, // 50 percent
  "aiResultId": "douhvjax_-1", // or null?
  "aiStatus": "success",
  "createAt": 10000000, // second
  "updateAt": 10000000, // begin
 }
}

getUserSetting

  • description: get the normal setting of the user

Request

Request url

GET /user/:userId/normal_setting

Parameters

name type description required default
userId string id of the user true --

Request Example

GET /user/1/normal_setting

Response

Response Parameters

name type description
powerby string the version of the API
success boolean true or false
code string response code
message string a message detailing the result of the request
payload IUserSetting response data

IUserSetting

name type description
id number Primary Key
userId number User ID
personalInfo IUserPersonalInfo Personal information of the user
notificationSetting INotificationSetting Notification settings for the user
createdAt number Timestamp when created
updatedAt number Timestamp when updated
deletedAt number Timestamp when deleted

INotificationSetting

name type description
systemNotification boolean Indicates if system notifications are enabled
updateAndSubscriptionNotification boolean Indicates if update and subscription notifications are enabled
emailNotification boolean Indicates if email notifications are enabled

IUserPersonalInfo

name type description
firstName string First name of the user
lastName string Last name of the user
country string Country of the user
language string Preferred language of the user
phone string Phone number of the user

Response Example

  • 成功的回傳
{
    "powerby": "iSunFA v2.0.0+1",
    "success": true,
    "code":  "200",
    "message": "Get an user normal setting successfully",
    "payload": 
       {
        "id": 1,
        "userId": 1,
        "personalInfo": {
            "firstName": "",
            "lastName": "大明",
            "country": "Taiwan",
            "language": "english",
            "phone": "+886912345666"
        },
        "notificationSetting": {
            "systemNotification": false,
            "updateAndSubscriptionNotification": false,
            "emailNotification": true
        },
        "createdAt": 1633036800,
        "updatedAt": 1636854800,
        "deletedAt": null,
       },
}
  • 失敗的回傳
{
    "powerby": "iSunFA v2.0.0+1",
    "success": false,
    "code":  "405",
    "message": "Method not allowed",
    "payload": {}
}

updateUserSetting

  • description: update the normal setting of the user

Request

Request url

PUT /user/:userId/normal_setting

Parameters

name type description required default
userId string id of the user true --

body

name type description
name string name of the user
email string email of the user
phone string phone number of the user
country string country of the user belongs to
lauguage string using language of the user
device string using device name of the user
IpAddress string IP address of the user
systemNotification boolean whether receiving the notification about system
updateAndSubscriptionNotification boolean whether receiving the notification about the update and the subscription
emailNotification boolean whether sending the notification to email

Request Example

PUT /user/1/normal_setting

const body = {
        "name": "王大明",
        "phone": "+886912345666",
        "systemNotification": false,
        "updateAndSubscriptionNotification": false,
        "emailNotification": true,
}

Response

Response Parameters

name type description
powerby string the version of the API
success boolean true or false
code string response code
message string a message detailing the result of the request
payload IUserSetting response data

IUserSetting

name type description
id number Primary Key
userId number User ID
personalInfo IUserPersonalInfo Personal information of the user
notificationSetting INotificationSetting Notification settings for the user
createdAt number Timestamp when created
updatedAt number Timestamp when updated
deletedAt number Timestamp when deleted

INotificationSetting

name type description
systemNotification boolean Indicates if system notifications are enabled
updateAndSubscriptionNotification boolean Indicates if update and subscription notifications are enabled
emailNotification boolean Indicates if email notifications are enabled

IUserPersonalInfo

name type description
firstName string First name of the user
lastName string Last name of the user
country string Country of the user
language string Preferred language of the user
phone string Phone number of the user

Response Example

  • 成功的回傳
{
    "powerby": "iSunFA v2.0.0+1",
    "success": true,
    "code":  "200",
    "message": "Get an user normal setting successfully",
    "payload": 
       {
        "id": 1,
        "userId": 1,
        "personalInfo": {
            "firstName": "",
            "lastName": "大明",
            "country": "Taiwan",
            "language": "english",
            "phone": "+886912345666"
        },
        "notificationSetting": {
            "systemNotification": false,
            "updateAndSubscriptionNotification": false,
            "emailNotification": true
        },
        "createdAt": 1633036800,
        "updatedAt": 1636854800,
        "deletedAt": null,
       },
}
  • 失敗的回傳
{
    "powerby": "iSunFA v2.0.0+1",
    "success": false,
    "code":  "405",
    "message": "Method not allowed",
    "payload": {}
}

getUserActionLog

  • description: get the action log of the user

Request

Request url

GET /user/:userId/action_log

Parameters

name type description required default
userId string id of the user true --

Request Example

GET /user/1/action_log

Response

Response Parameters

name type description
powerby string the version of the API
success boolean true or false
code string response code
message string a message detailing the result of the request
payload IPaginatedData<IUserActionLog[]> response data

IPaginatedData

name type description
data IUserActionLog[] The journal data
page number The page number
totalPages number The total number of pages
totalCount number The total number of items
pageSize number The number of items per page
hasNextPage boolean Indicates if there is a next page
hasPreviousPage boolean Indicates if there is a previous page
sort {sortBy: string, sortOrder: string}[] The order and field to sort by

IUserActionLog

name type description
id number Primary Key
sessionId string Session ID of the user
userId number User ID
actionType string Type of action performed
actionDescription string Description of the action
actionTime number Timestamp when the action occurred
ipAddress string IP address from which the action was performed
userAgent string User agent information
apiEndpoint string API endpoint accessed
httpMethod string HTTP method used (e.g., GET, POST)
requestPayload Record<string, string> Payload sent with the request
httpStatusCode number HTTP status code returned
statusMessage string Status message returned by the server

Response Example

  • 成功的回傳
{
    "powerby": "iSunFA v2.0.0+1",
    "success": true,
    "code":  "200",
    "message": "Get an user action log successfully",
    "payload": 
       {
    "data": [
      {
        "id": 1,
        "sessionId": "abc123",
        "userId": 1,
        "actionType": "LOGIN",
        "actionDescription": "User logged in",
        "actionTime": 165165156,
        "ipAddress": "192.168.1.1",
        "userAgent": "Mozilla/5.0",
        "apiEndpoint": "/api/login",
        "httpMethod": "POST",
        "requestPayload": { "username": "user1" },
        "httpStatusCode": 200,
        "statusMessage": "Success"
      }
    ],
    "page": 1,
    "totalPages": 5,
    "totalCount": 23,
    "pageSize": 5,
    "hasNextPage": true,
    "hasPreviousPage": false,
    "sort": [
      {
        "sortBy": "actionTime",
        "sortOrder": "desc"
      }
    ]
}
  • 失敗的回傳
{
    "powerby": "iSunFA v2.0.0+1",
    "success": false,
    "code":  "405",
    "message": "Method not allowed",
    "payload": []
}

createUserAgreement

  • description: This API provides the functionality to create an agreement for user.

Request

Request url

POST `/user/:userId/agreement`

Body

name type description
agreementHash string hash of the agreement

Request Example

POST `/user/1/agreement`

Body

{
    "agreementHash": "0x1234567890"
}

Response

Response Parameters

name type description
powerby string iSunFA v0.1.2+50
success boolean true or false
code string response code
message string description of response data
payload IUser | {} response data

User

name type description
id number unique number of user
name string user name
fullName string user full name
email string user email
phone string user phone
imageId string user image id
agreementList string[] list of agreement hash
createdAt number creation timestamp
updatedAt number update timestamp

Response Example

  • 成功的回傳
{
    "powerby": "iSunFA v0.1.8+52",
    "success": true,
    "code": "201ISF0000",
    "message": "Created successfully",
    "payload": {
        "id": 10000001,
        "name": "book",
        "fullName": "book",
        "email": "[email protected]",
        "phone": "0912345678",
        "imageId": "0x1234567890",
        "agreementList": ["0x1234567890"],
        "createdAt": 1721635489,
        "updatedAt": 1721635489
    }
}
  • 失敗的回傳

    {
        "powerby": "iSunFA v0.1.2+50",
        "success": false,
        "code":  "400",
        "message": "bad request",
        "payload": {}
    }

createCompany

  • description: create a new company

Request

Request url

POST /company

body

name type description
name string name of the company
taxId string tax Id of the company

Request Example

POST /company

const body = {
        "name": "iSunFA",
        "taxId": "1234"
}

Response

Response Parameters

name type description
powerby string the version of the API
success boolean true or false
code string response code
message string a message detailing the result of the request
payload { name, taxId } response data

Response Example

  • 成功的回傳
{
    "powerby": "iSunFA v2.0.0+1",
    "success": true,
    "code":  "200",
    "message": "Create a new company successfully",
    "payload": 
       {
        "name": "iSunFA",
        "taxId": "1234"
       },
}
  • 失敗的回傳
{
    "powerby": "iSunFA v2.0.0+1",
    "success": false,
    "code":  "405",
    "message": "Method not allowed",
    "payload": {}
}

listCompany

  • description: get all companies of the user

Request

Request url

GET /company?userId=

Query

name type description required default
userId string id of the user true --

Request Example

GET /company?userId=1

Response

Response Parameters

name type description
powerby string the version of the API
success boolean true or false
code string response code
message string a message detailing the result of the request
payload IPaginatedData<ICompanyBeta[]> response data

IPaginatedData

name type description
data ICompanyBeta[] The journal data
page number The page number
totalPages number The total number of pages
totalCount number The total number of items
pageSize number The number of items per page
hasNextPage boolean Indicates if there is a next page
hasPreviousPage boolean Indicates if there is a previous page
sort {sortBy: string, sortOrder: string}[] The order and field to sort by

ICompanyBeta

name type description
id number Primary Key
imageId string ID of the associated image
name string Name of the company
taxId string Tax identification number
tag string Tag or label associated with the company
startDate number Start date of the company (timestamp)
createdAt number Timestamp when created
updatedAt number Timestamp when updated

Response Example

  • 成功的回傳
{
    "powerby": "iSunFA v2.0.0+1",
    "success": true,
    "code":  "200",
    "message": "Get all companies of the user successfully",
    "payload": 
       {
    "data": [
      {
        "id": 1,
        "imageId": "abc123",
        "name": "iSunFA",
        "taxId": "1234",
        "tag": "accounting",
        "startDate": 1633036800,
        "createdAt": 1633036800,
        "updatedAt": 1633036800
      }
    ],
    "page": 1,
    "totalPages": 5,
    "totalCount": 23,
    "pageSize": 5,
    "hasNextPage": true,
    "hasPreviousPage": false,
    "sort": [
      {
        "sortBy": "startDate",
        "sortOrder": "desc"
      }
    ]
       },
}
  • 失敗的回傳
{
    "powerby": "iSunFA v2.0.0+1",
    "success": false,
    "code":  "405",
    "message": "Method not allowed",
    "payload": []
}

getcompany

  • description: get a company by id of the company

Request

Request url

GET /company/:companyId

Parameters

name type description required default
companyId string id of the company true --

Request Example

GET /company/1

Response

Response Parameters

name type description
powerby string the version of the API
success boolean true or false
code string response code
message string a message detailing the result of the request
payload company response data

company

name type description
id number id of the company
imageId string ID of the associated image
name string name of the company
taxId string tax Id of the company
tag string tag or label associated with the company
startDate number start date of the company
createdAt number timestamp when created
updatedAt number timestamp when updated

Response Example

  • 成功的回傳
{
    "powerby": "iSunFA v2.0.0+1",
    "success": true,
    "code":  "200",
    "message": "Get a company info of the user successfully",
    "payload": 
    {
        "id": 1,
        "imageId": "abc123",
        "name": "iSunFA",
        "taxId": "1234",
        "tag": "accounting",
        "startDate": 1633036800,
        "createdAt": 1633036800,
        "updatedAt": 1633036800
    },
}
  • 失敗的回傳
{
    "powerby": "iSunFA v2.0.0+1",
    "success": false,
    "code":  "405",
    "message": "Method not allowed",
    "payload": {}
}

updatecompany

  • description: update a company by id of the company

Request

Request url

PUT /company/:companyId

Parameters

name type description required default
companyId string id of the company true --

body

name type description
name string name of the company
taxId string tax Id of the company
tag string tag or label associated with the company

Request Example

PUT /company/1

const body = {
        "name": "iSunFAAAA",
        "taxId": "12345678",
        "tag": "accounting"
}

Response

Response Parameters

name type description
powerby string the version of the API
success boolean true or false
code string response code
message string a message detailing the result of the request
payload company response data

company

name type description
id number id of the company
imageId string ID of the associated image
name string name of the company
taxId string tax Id of the company
tag string tag or label associated with the company
startDate number start date of the company
createdAt number timestamp when created
updatedAt number timestamp when updated

Response Example

  • 成功的回傳
{
    "powerby": "iSunFA v2.0.0+1",
    "success": true,
    "code":  "200",
    "message": "Update a company info of the user successfully",
    "payload": 
    {
        "id": 1,
        "imageId": "abc123",
        "name": "iSunFAAAA",
        "taxId": "12345678",
        "tag": "accounting",
        "startDate": 1633036800,
        "createdAt": 1633036800,
        "updatedAt": 1633036800
    },
}
  • 失敗的回傳
{
    "powerby": "iSunFA v2.0.0+1",
    "success": false,
    "code":  "405",
    "message": "Method not allowed",
    "payload": {}
}

deleteCompany

  • description: delete a company by id of the company

Request

Request url

DELETE /company/:companyId

Parameters

name type description required default
companyId string id of the company true --

Request Example

DELETE /company/1

Response

Response Parameters

name type description
powerby string the version of the API
success boolean true or false
code string response code
message string a message detailing the result of the request
payload company response data

company

name type description
id number id of the company
imageId string ID of the associated image
name string name of the company
taxId string tax Id of the company
tag string tag or label associated with the company
startDate number start date of the company
createdAt number timestamp when created
updatedAt number timestamp when updated

Response Example

  • 成功的回傳
{
    "powerby": "iSunFA v2.0.0+1",
    "success": true,
    "code":  "200",
    "message": "Delete a company info of the user successfully",
    "payload": 
    {
        "id": 1,
        "imageId": "abc123",
        "name": "iSunFAAAA",
        "taxId": "12345678",
        "tag": "accounting",
        "startDate": 1633036800,
        "createdAt": 1633036800,
        "updatedAt": 1633036800
    },
}
  • 失敗的回傳
{
    "powerby": "iSunFA v2.0.0+1",
    "success": false,
    "code":  "405",
    "message": "Method not allowed",
    "payload": {}
}

selectCompany

  • description: This API provides the functionality to select a company.

Request

Request URL

PUT `/company/:companyId/select`

Query

name type description required default
companyId string specific company number yes -

Request Example

PUT `/company/1/select`

Response

Response Parameters

name type description
powerby string iSunFA v0.1.2+50
success boolean true or false
code string response code
message string description of response data
payload company response data or {}

company

name type description
id number id of the company
imageId string ID of the associated image
name string name of the company
taxId string tax Id of the company
tag string tag or label associated with the company
startDate number start date of the company
createdAt number timestamp when created
updatedAt number timestamp when updated

Response Example

  • 成功的回傳
{
    "powerby": "iSunFA v2.0.0+1",
    "success": true,
    "code":  "200",
    "message": "Select a company successfully",
    "payload": 
    {
        "id": 1,
        "imageId": "abc123",
        "name": "iSunFAAAA",
        "taxId": "12345678",
        "tag": "accounting",
        "startDate": 1633036800,
        "createdAt": 1633036800,
        "updatedAt": 1633036800
    },
}
  • 失敗的回傳
{
    "powerby": "iSunFA v2.0.0+1",
    "success": false,
    "code":  "405",
    "message": "Method not allowed",
    "payload": {}
}

createKYC

  • description: create a kyc

Request

Request url

POST user/:userId/kyc

Parameters

name type description required default
userId string id of the user true --
type string type of the kyc true --

body

bookkeeper

name type description
name string bookkeeper's name
birthDate string bookkeeper's birthday
email string bookkeeper's email
phone string bookkeeper's phone number
qualification boolean bookkeeper's qualification
certificationNumber string bookkeeper's certification number
personalIdType string bookkeeper's personal id type
personalIdFileId string bookkeeper's personal id
certificationFileId string bookkeeper's certification file

Request Example

POST user/1/kyc

const body = {
          "type": "bookkeeper",
          "name": "isunfa",
          "birthDate": "1990-01-01",
          "email": "[email protected]",
            "phone": "0912345678",
            "qualification": true,
            "certificationNumber": "1234",
            "personalIdType": "id",
            "personalIdFileId": 1234,
            "certificationFileId": 1234
         }

Response

Response Parameters

name type description
powerby string the version of the API
success boolean true or false
code string response code
message string a message detailing the result of the request
payload KYC response data

KYC

name type description
id number kyc's id
userId number id of the user associated with the kyc
type string type of the kyc
content string content of the kyc
status string status of the kyc
reviewer number name of the reviewer
note string note of the kyc
createdAt number create time
updatedAt number update time
reviewedAt number review time
deletedAt number delete time

Response Example

  • 成功的回傳
{
    "powerby": "iSunFA v2.0.0+1",
    "success": true,
    "code":  "200",
    "message": "Create a kyc successfully",
    "payload": 
       {
          "id": 1,
          "userId": 1,
          "type": "bookkeeper",
          "content": "isunfa",
          "status": "pending",
          "reviewer": null,
          "note": null,
          "createdAt": 1630000001,
          "updatedAt": 1630000001,
          "reviewedAt": null,
          "deletedAt": null,
       },
}
  • 失敗的回傳
{
    "powerby": "iSunFA v2.0.0+1",
    "success": false,
    "code":  "405",
    "message": "Method not allowed",
    "payload": {}
}

listOrder

  • description:
    • get order list

Request

Request url

GET /company/:companyId/order

Param

name type description required default
companyId string specific id of the company yes -

Request Example

GET /company/1/order

Response

Response Parameters

name type description
powerby string iSunFA v0.1.2+50
success boolean true or false
code string response code
message string description the status of the request
payload Order[] order list

Order

name type description
id number Unique identifier for the order
companyId number Identifier for the associated company
planId number Identifier for the associated plan
status string Current status of the order
createdAt number Timestamp when the order was created
updatedAt number Timestamp when the order was last updated

Response example

  • 成功的回傳
{
    "powerby": "iSunFA v0.1.4+55",
    "success": true,
    "code": "200ISF0002",
    "message": "list successfully",
    "payload":  [
        {
            "id": 1,
            "companyId": 1,
            "planId": 1,
            "status": "success",
            "createdAt": 1630000000,
            "updatedAt": 1630000000
        }
    ]
}
  • 失敗的回傳
{
        "powerby": "iSunFA v0.1.2+50",
        "success": false,
        "code":  "400",
        "message": "bad request",
        "payload": {}
}

createOrder

  • description:
    • create an order

Request

Request url

POST /company/:companyId/order

Param

name type description required default
companyId string specific id of the company yes -

Body

name type description required default
planId number specific id of the plan yes -
status string status of the order yes -

Request Example

POST /company/1/order
{
    "planId": 1,
    "status": "active"
}

Response

Response Parameters

name type description
powerby string iSunFA v0.1.2+50
success boolean true or false
code string response code
message string description the status of the request
payload Order an order

Response example

  • 成功的回傳
{
    "powerby": "iSunFA v0.1.4+55",
    "success": true,
    "code": "200ISF0002",
    "message": "Create successfully",
    "payload": {
      "id": 12345,
      "companyId": 678,
      "planId": 91011,
      "status": "active",
      "createdAt": 1627890123,
      "updatedAt": 1627891123
    }

}
  • 失敗的回傳
{
        "powerby": "iSunFA v0.1.2+50",
        "success": false,
        "code":  "400",
        "message": "bad request",
        "payload": {}
}

getPaymentByOrderId

  • description:
    • get payment by order id

Request

Request url

GET /company/:companyId/payment?orderId=

Param

name type description required default
companyId string specific id of the company yes -

Query

name type description required default
orderId string specific id of the order yes -

Request Example

GET /company/1/payment?orderId=ORDER00001

Response

Response Parameters

name type description
powerby string iSunFA v0.1.2+50
success boolean true or false
code string response code
message string description the status of the request
payload string redirectUrl

Response example

  • 成功的回傳
{
    "powerby": "iSunFA v0.1.4+55",
    "success": true,
    "code": "200ISF0002",
    "message": "Get successfully",
    "payload":  "https://${merchantId}.testing.oen.tw/checkout/subscription/create/${id}"
}
  • 失敗的回傳
{
        "powerby": "iSunFA v0.1.2+50",
        "success": false,
        "code":  "400",
        "message": "bad request",
        "payload": ""
}

createPayment

  • description:
    • create payment

Request

Request url

POST /company/:companyId/payment

Param

name type description required default
companyId string specific id of the company yes -

Body

name type description required default
token string specific id of the token yes -
customId string json stringify, with orderIdNum, subPlan, subPeriod yes -

Request Example

POST /company/1/payment
{
    "token": "2etM3aQSCMWv7OGYQ6gDWtcOJaR",
    "customId": "{"orderId":1,"subPlan":"Trail","subPeriod":30}"
}

Response

Response Parameters

name type description
powerby string iSunFA v0.1.2+50
success boolean true or false
code string response code
message string description the status of the request
payload string payment record status

Response example

  • 成功的回傳
{
    "powerby": "iSunFA v0.1.4+55",
    "success": true,
    "code": "200ISF0002",
    "message": "Create successfully",
    "payload":  "success"
}
  • 失敗的回傳
{
        "powerby": "iSunFA v0.1.2+50",
        "success": false,
        "code":  "400",
        "message": "bad request",
        "payload": ""
}

createRole

  • description: create a role for user

Request

Request url

POST user/:userId/role

Parameters

name type description required default
userId string id of the user true --

body

name type description
roleName string role's name

Request Example

POST user/1/role

const body = {
          "roleName": "bookkeeper"
       }

Response

Response Parameters

name type description
powerby string the version of the API
success boolean true or false
code string response code
message string a message detailing the result of the request
payload userRole response data

userRole

name type description
id number userRole's id
userId number id of the user associated with the role
roleId string role's id
createdAt number create time
updatedAt number update time
deletedAt number delete time

Response Example

  • 成功的回傳
{
    "powerby": "iSunFA v2.0.0+1",
    "success": true,
    "code":  "200",
    "message": "Create a role successfully",
    "payload": 
       {
          "id": 1,
          "userId": 1,
          "roleId": 1,
          "createdAt": 1630000001,
          "updatedAt": 1630000001,
          "deletedAt": null,
       },
}
  • 失敗的回傳
{
    "powerby": "iSunFA v2.0.0+1",
    "success": false,
    "code":  "405",
    "message": "Method not allowed",
    "payload": {}
}

listRole

  • description: get all roles of the user

Request

Request url

GET user/:userId/role

Parameters

name type description required default
userId string id of the user true --

Request Example

GET user/1/role

Response

Response Parameters

name type description
powerby string the version of the API
success boolean true or false
code string response code
message string a message detailing the result of the request
payload IPaginatedData<IUserRole[]> response data

IPaginatedData

name type description
data IUserRole[] The journal data
page number The page number
totalPages number The total number of pages
totalCount number The total number of items
pageSize number The number of items per page
hasNextPage boolean Indicates if there is a next page
hasPreviousPage boolean Indicates if there is a previous page
sort {sortBy: string, sortOrder: string}[] The order and field to sort by

IUserRole

name type description
id number userRole's id
userId number id of the user associated with the role
roleId string role's id
roleName string role's name
permissionList string role's permission
lastLoginAt number last login time
createdAt number create time
updatedAt number update time
deletedAt number delete time

Response Example

  • 成功的回傳
{
    "powerby": "iSunFA v2.0.0+1",
    "success": true,
    "code":  "200",
    "message": "Get all roles of the user successfully",
    "payload": 
       {
    "data": [
        {
            "id": 1,
            "userId": 1,
            "roleId": 1,
            "roleName": "bookkeeper",
            "permissionList": "read,write",
            "lastLoginAt": 1630000001,
            "createdAt": 1630000001,
            "updatedAt": 1630000001,
            "deletedAt": null
        }
    ],
    "page": 1,
    "totalPages": 5,
    "totalCount": 23,
    "pageSize": 5,
    "hasNextPage": true,
    "hasPreviousPage": false,
    "sort": [
      {
        "sortBy": "createdAt",
        "sortOrder": "desc"
      }
    ]
       },
}
  • 失敗的回傳
{
    "powerby": "iSunFA v2.0.0+1",
    "success": false,
    "code":  "405",
    "message": "Method not allowed",
    "payload": {}
}

createReport

  • description: Create a report based on the given date and financial statement name. Base on financial statement name, startDate and endDate, this API will find if the report has been generated or not, if the report has been generated it will return the ID of that report, if not it will create a new report and return the id of that report. This API will generate the report base on lastPeriodStartDate and lastPeriodEndDate (which base on startDate minus one year and endDate minus one year), and will return the ID of the last period report if it has been generated.

Request

Request URL

POST /company/:companyId/report

Query

name type description require default
projectId numeric | undefined which project this financial report will link to, it will be set as null if: 1. not provided, 2.provide null or undefined 3. provide other non numeric words false undefined
type ReportSheetType which financial statement you want to create, see description below, it will be BalanceSheet if not provided false BalanceSheet
reportLanguage string this query is not implemented, it will only add language tag to report name false "tw"
from timestamp in second (millisecond will be transform into second if provided) start date of the financial report period, it will be set to 0 if choosing BalanceSheet as reportType, this number minus 1 year will be the start date of last period false first second of this year
to timestamp in second (millisecond will be transform into second if provided) end date of the financial report period, this number minus 1 year will be the start date of last period false last second of today
reportType string since report_financial and report_analysis might be combined, use "financial" (or not provided) to actually generate financial report, it will be "financial" if not provided false "financial"

ReportSheetType

name type description
BALANCE_SHEET string it represent "balance_sheet"
INCOME_STATEMENT string it represent "comprehensive_income_statement"
CASH_FLOW_STATEMENT string it represent "cash_flow_statement"
REPORT_401 string it represent "report_401"

Response

name type description
id number the id of the report generated or found

Success Response

{
  "powerby": "iSunFA v0.1.8+36",
  "success": true,
  "code": "201ISF0000",
  "message": "Created successfully",
  "payload": 10000001
}

Error Response

{
  "powerby": "iSunFA v0.1.8+36",
  "success": false,
  "code": "400ISF0001",
  "message": "Invalid request",
  "payload": -1
}

listReport

  • description: get all report of company, it will return all report of company by status, including financial report and analysis report

Request

Request URL

GET /company/:companyId/report

Query

const { targetPage, pageSize, sortBy, sortOrder, startDateInSecond, endDateInSecond, searchQuery, status } = req.query;
name type description require default
targetPage numeric which page of date you want to check false 1
pageSize numeric how many items a page need to return false 10
sortBy 'createdAt' | 'name' | 'type' | 'reportType' | 'status' which category to be sort by false "createdAt"
sortOrder 'desc' | 'asc is "sortBy" need to be ascent or descent false "desc"
startDateInSecond numeric (timestamp in second) items "from" after this date will be selected (Balance sheet won't check this) false 0
endDateInSecond numeric (timestamp in second) items "to" before this date will be selected false Number.MAX_SAFE_INTEGER
searchQuery string keyword use to search name, type, report type false undefined
status 'pending' | 'generated' | 'all' which status of report you want to get false 'all'
GET /company/:companyId/report?status=pending&targetPage=1&pageSize=10&sortBy=createdAt&sortOrder=desc&startDateInSecond=0&endDateInSecond=1717948800&searchQuery=balance sheet

Response

Response Parameters

name type description
powerby string ISunFa api 1.0.0
success boolean true or false
code string response code
message string description of response data
payload IPaginatedReport response data

IPaginatedReport

name type description
data IReport[] list of report
totalPage number total page of item
page number current page

IReport

name type description
id number the unique index for the report in the database
companyId number the unique index for the company in the database
tokenContract string the token contract of the report
tokenId string the token id of the report
name string the name of the report
from number the start date of the report
to number the end date of the report
type ReportType(enum) the type of the report('financial' / 'analysis')
reportType ReportSheetType(enum) the report type of the report('balance_sheet' / 'comprehensive_income_statement' / 'cash_flow_statement' / 'report_401')
status string the status of the report
remainingSeconds number the remaining seconds of the report
paused boolean check if the report is paused
projectId number | null the unique index for the project in the database
project { id: string, name: string, code: string } | null the project of the report
reportLink string the link of the report
downloadLink string the download link of the report
blockChainExplorerLink string the blockchain explorer link of the report
evidenceId string the evidence id of the report
content IAccountReadyForFrontend[] the content of the report
otherInfo unknown other information of the report
createdAt number the create date of the report
updatedAt number the update date of the report

IAccountReadyForFrontend

name type description
code string The unique identifier for the account.
name string The name of the account.
curPeriodAmount number The amount for the current period.
curPeriodAmountString string The amount for the current period as a string.
curPeriodPercentage number The percentage for the current period.
prePeriodAmount number The amount for the previous period.
prePeriodAmountString string The amount for the previous period as a string.
prePeriodPercentage number The percentage for the previous period.
indent number The indentation level for display purposes.

Response Example

  • Success Response
{
  "powerby": "iSunFA v0.1.8+51",
  "success": true,
  "code": "201ISF0000",
  "message": "Get successfully",
  "payload": {
    "data": [
  {
    "id": 1,
    "companyId": 123,
    "tokenContract": "0x123abc",
    "tokenId": "456def",
    "name": "Mock Report",
    "from": 1630444800,
    "to": 1633046400,
    "type": "financial",
    "reportType": "balance_sheet",
    "status": "completed",
    "remainingSeconds": 0,
    "paused": false,
    "projectId": null,
    "project": null,
    "reportLink": "https://example.com/report",
    "downloadLink": "https://example.com/download",
    "blockChainExplorerLink": "https://example.com/explorer",
    "evidenceId": "abc123",
    "content": [
      {
        "code": "4000",
        "name": "營業收入合計",
        "curPeriodAmount": 0,
        "curPeriodPercentage": 0,
        "curPeriodAmountString": "0",
        "prePeriodAmount": 0,
        "prePeriodPercentage": 0,
        "prePeriodAmountString": "0",
        "indent": 0
      }......
    ],
    "otherInfo": null,
    "createdAt": 1633046400,
    "updatedAt": 1633046400
  },
  {
    "id": 2,
    "companyId": 123,
    "tokenContract": "0x123abc",
    "tokenId": "456def",
    "name": "Mock Report",
    "from": 1630444800,
    "to": 1633046400,
    "type": "financial",
    "reportType": "balance_sheet",
    "status": "completed",
    "remainingSeconds": 0,
    "paused": false,
    "projectId": null,
    "project": null,
    "reportLink": "https://example.com/report",
    "downloadLink": "https://example.com/download",
    "blockChainExplorerLink": "https://example.com/explorer",
    "evidenceId": "abc123",
    "content": [
      {
        "code": "4000",
        "name": "營業收入合計",
        "curPeriodAmount": 0,
        "curPeriodPercentage": 0,
        "curPeriodAmountString": "0",
        "prePeriodAmount": 0,
        "prePeriodPercentage": 0,
        "prePeriodAmountString": "0",
        "indent": 0
      }......
    ],
    "otherInfo": null,
    "createdAt": 1633046400,
    "updatedAt": 1633046400
  }
],
    "page": 1,
    "totalPages": 0,
    "totalCount": 0,
    "pageSize": 10,
    "hasNextPage": false,
    "hasPreviousPage": false,
    "sort": [
        {
            "sortBy": "createdAt",
            "sortOrder": "desc"
        }
    ]
  }
}
  • Error response

    {
      "powerby": "iSunFA v0.1.8+51",
      "success": false,
      "code": "500ISF0002",
      "message": "Database list failed",
      "payload": {}
    }

getReport

  • description: get Report by id, it will return Balance sheet, Income statement or Cash flow or 401 report

Request

Request url

GET /company/:companyId/report/:reportId

Params

name type description required default
reportId number specific id of the report yes -

Request Example

GET /company/1/report/1

Response

Response Parameter

name type description
powerby string iSunFA v0.1.2+50
success boolean true or false
code string response code
message string description
payload FinancialReport or Report(only for 401 report) the data

FinancialReport

name type description
company {id: number, code: string, name: string} company related info
preDate {from: number, to: number } last period time spam, it will be same date of curDate last year
curDate {from: number, to: number } it will be from and to of current date
reportType ReportSheetType { BALANCE_SHEET = 'balance_sheet', INCOME_STATEMENT = 'comprehensive_income_statement', CASH_FLOW_STATEMENT = 'cash_flow_statement', REPORT_401 = 'report_401',} Financial Report type
general FinancialReportItem[] simplified version of financial report rows
details FinancialReportItem[] detail version of financial report rows
otherInfo BalanceSheetOtherInfo | IncomeStatementOtherInfo | CashFlowStatementOtherInfo base on your financial report type, it will return different info
FinancialReportItem
name type description
code string code of accounting
name string name of accounting
curPeriodAmount number this period amount of money
curPeriodAmountString string this period amount of money but in string, it will be brackets if negative
curPeriodPercentage string percentage of amount vs total amount of that account category
prePeriodAmount number last period amount of money
prePeriodAmount string last period amount of money but in string, it will be brackets if negative
prePeriodPercentage string percentage of amount vs total amount of that account category
indent number what level of this account in account tree
BalanceSheetOtherInfo
name type description
assetLiabilityRatio {[date: string]: {data: number[], labels: string[]}} data 和 labels 的順序是 [資產, 負債, 權益],key 則是日期 YYYY-MM-DD
assetMixRatio {[date: string]: {data: number[], labels: string[]}} data 和 labels 的順序是 [資產, 負債, 權益],key 則是日期 YYYY-MM-DD
dso { curDso: number; preDso: number;} 應收週轉天數:curDso 是本期,preDso 是上期
inventoryTurnoverDays { curInventoryTurnoverDays: number; preInventoryTurnoverDays: number; }; 存貨週轉天數: curInventoryTurnoverDays 是本期, preInventoryTurnoverDays 是上期
IncomeStatementOtherInfo
name type description
revenueAndExpenseRatio Check Below 投入費用和成本, 與收入的倍數關係
revenueToRD Check Below 收入提撥制研發費用比例
RevenueAndExpenseRatio
name type description
revenue IAccountReadyForFrontend revenue data of current year income statement
totalCost IAccountReadyForFrontend total Cost(not expense) of current year income statement
salesExpense IAccountReadyForFrontend sale expense data of current year income statement
administrativeExpense IAccountReadyForFrontend admin expense data of current year income statement
ratio {curRatio: number; preRatio: number;}; ratio of revenue/(cost + expense)
RevenueToRD
name type description
revenue IAccountReadyForFrontend revenue data of current year income statement
researchAndDevelopmentExpense IAccountReadyForFrontend Research and Development expense of current year income statement
ratio {curRatio: number; preRatio: number;}; ratio of revenue/(cost + expense)
CashFlowStatementOtherInfo
name type description
operatingStabilized Check Below 營業活動穩定度:A 與 B 呈現穩定比例關係,公司的營業活動穩定
lineChartDataForRatio {data: number[];labels: string[];} A 和 b 比例的線圖, labels 依照時間排列
strategyInvest [year: string]: {data: number[];labels: string[];}; 依照年份列出 [不動產、廠房、設備的收支項目, 策略性投資項目, 其他] data 是資料內容,labels 是資料名稱
thirdTitle string 三:營業活動穩定度 的標題內容
forthTitle String 四:投資活動 - 「不動產, 廠房及設備」及 「策略性投資」 的標題內容
fourPointOneTitle String 四之一:202X 年度上圖組成支系項及 ISunFa 認為
ourThoughts String[] (length is 3) 四之一的 段落內容: outThoughts[0] 是第一段(不動產, 廠房, 設備的收支項目),outThoughts[1] 是第二段(策略性投資項目),outThoughts[2] 是第三段(其他)
freeCash Check Below 五、年度產生的自由現金圖表資料
OperatingStabilized
name type description
beforeTaxIncome [year: string]: number 5 period (current year ~ current year - 4) of income before tax
amortizationDepreciation [year: string]: number 5 period (current year ~ current year - 4) of amortization and depreciation
tax [year: string]: number 5 period (current year ~ current year - 4) of tax expense
operatingIncomeCashFlow [year: string]: number 5 period (current year ~ current year - 4) of operating income cash flow
ratio [year: string]: number 5 period (current year ~ current year - 4) of (beforeTaxIncome + amortizationDepreciation + tax) / operatingIncomeCashFlow
FreeCash
  freeCash: {
    [year: string]: {
      operatingCashFlow: number;
      ppe: number;
      intangibleAsset: number;
      freeCash: number;
    };
  };
name type description
[year] string 以年份當作 key, 有今年度和去年度資料
operatingCashFlow number 營業活動產生的現金流量
ppe number 不動產、廠房及設備的收支項目
intangibleAsset number 無形資產的收支項目
freeCash number 自由現金流量

Response example

{
  "powerby": "iSunFA v0.1.8+101",
  "success": true,
  "code": "200ISF0000",
  "message": "Success",
  "payload": {
    "company": {
      "id": 10000131,
      "code": "123456",
      "name": "aaa"
    },
    "reportType": "incomeStatement",
    "preDate": {
      "from": 1688140800,
      "to": 1690732799
    },
    "curDate": {
      "from": 1719763200,
      "to": 1722355199
    },
    "details": [
      {
        "code": "",
        "name": "營業收入",
        "curPeriodAmount": 0,
        "curPeriodPercentage": 0,
        "curPeriodAmountString": "0",
        "prePeriodAmount": 0,
        "prePeriodPercentage": 0,
        "prePeriodAmountString": "0",
        "indent": 0
      },...
    ],
    "general": [
      {
        "code": "4000",
        "name": "營業收入合計",
        "curPeriodAmount": 0,
        "curPeriodPercentage": 0,
        "curPeriodAmountString": "0",
        "prePeriodAmount": 0,
        "prePeriodPercentage": 0,
        "prePeriodAmountString": "0",
        "indent": 0
      },...
    ],
  "otherInfo": {
      "revenueAndExpenseRatio": {
        "revenue": {
          "code": "4000",
          "name": "營業收入合計",
          "curPeriodAmount": 0,
          "curPeriodPercentage": 0,
          "curPeriodAmountString": "0",
          "prePeriodAmount": 0,
          "prePeriodPercentage": 0,
          "prePeriodAmountString": "0",
          "indent": 0
        },
        "totalCost": {
          "code": "5000",
          "name": "營業成本合計",
          "curPeriodAmount": 0,
          "curPeriodPercentage": 0,
          "curPeriodAmountString": "0",
          "prePeriodAmount": 0,
          "prePeriodPercentage": 0,
          "prePeriodAmountString": "0",
          "indent": 0
        },
        "salesExpense": {
          "code": "6100",
          "name": "推銷費用",
          "curPeriodAmount": 0,
          "curPeriodPercentage": 0,
          "curPeriodAmountString": "0",
          "prePeriodAmount": 0,
          "prePeriodPercentage": 0,
          "prePeriodAmountString": "0",
          "indent": 0
        },
        "administrativeExpense": {
          "code": "6200",
          "name": "管理費用",
          "curPeriodAmount": 0,
          "curPeriodPercentage": 0,
          "curPeriodAmountString": "0",
          "prePeriodAmount": 0,
          "prePeriodPercentage": 0,
          "prePeriodAmountString": "0",
          "indent": 0
        },
        "ratio": {
          "curRatio": 0,
          "preRatio": 0
        }
      },
      "revenueToRD": {
        "revenue": {
          "code": "4000",
          "name": "營業收入合計",
          "curPeriodAmount": 0,
          "curPeriodPercentage": 0,
          "curPeriodAmountString": "0",
          "prePeriodAmount": 0,
          "prePeriodPercentage": 0,
          "prePeriodAmountString": "0",
          "indent": 0
        },
        "researchAndDevelopmentExpense": {
          "code": "6300",
          "name": "研究發展費用",
          "curPeriodAmount": 0,
          "curPeriodPercentage": 0,
          "curPeriodAmountString": "0",
          "prePeriodAmount": 0,
          "prePeriodPercentage": 0,
          "prePeriodAmountString": "0",
          "indent": 0
        },
        "ratio": {
          "curRatio": 0,
          "preRatio": 0
        }
      }
    }
  }
}

getAccountingSetting

description: get the accounting setting of the company

Request

Request url

GET /company/:companyId/accounting_setting

Parameters

name type description required default
companyId string id of the company true --

Request Example

GET /company/1/accounting_setting

Response

Response Parameters

name type description
powerby string the version of the API
success boolean true or false
code string response code
message string a message detailing the result of the request
payload IAccountingSetting response data

IAccountingSetting

name type description
id number Primary Key
companyId number Company ID
companyName string Name of the company
taxSettings ITaxSetting Tax settings for the company
currency string Currency code (e.g., USD, EUR)
lastDayOfFiscalYear number Last day of the fiscal year
shortcutList IShortcut[] List of shortcuts defined for the company

ITaxSetting

name type description
salesTax ITaxRate Sales tax settings
purchaseTax ITaxRate Purchase tax settings
returnPeriodicity string Frequency of tax return (e.g., monthly)

ITaxRate

name type description
taxable boolean Indicates if the item is taxable
rate number Tax rate percentage

IShortcut

name type description
action IAction The action that this shortcut performs
keyList string[] List of keys associated with the shortcut

IAction

name type description
name string Name of the action
description string Description of the action
fieldList IField[] List of fields associated with the action

IField

name type description
name string Name of the field
value string Value of the field

Response Example

  • 成功的回傳
{
    "powerby": "iSunFA v2.0.0+1",
    "success": true,
    "code":  "200",
    "message": "Get a company accounting setting successfully",
    "payload": 
    {
        "id": 1,
        "companyId": 1,
        "companyName": "iSunFA",
        "taxSettings": {
            "salesTax": {
                "taxable": true,
                "rate": 7
            },
            "purchaseTax": {
                "taxable": true,
                "rate": 7
            },
            "returnPeriodicity": "Month"
        },
        "currency": "USD",
        "lastDayOfFiscalYear": 30,
        "shortcutList": [
            {
                "action": {
                    "name": "Create Invoice",
                    "description": "Create a new invoice",
                    "fieldList": [
                        {
                            "name": "Customer",
                            "value": "Customer Name"
                        },
                        {
                            "name": "Amount",
                            "value": "1000"
                        }
                    ]
                },
                "keyList": ["Ctrl", "I"]
            }
        ]
    },
}
  • 失敗的回傳
{
    "powerby": "iSunFA v2.0.0+1",
    "success": false,
    "code":  "405",
    "message": "Method not allowed",
    "payload": {}
}

updateAccountingSetting

  • description: update the accounting setting of the company

Request

Request url

PUT /company/:companyId/accounting_setting

Parameters

name type description required default
companyId string id of the company true --

body

name type description
taxSettings ITaxSetting Tax settings for the company
currency string Currency code (e.g., USD, EUR)
lastDayOfFiscalYear number Last day of the fiscal year
shortcutList IShortcut[] List of shortcuts defined for the company

ITaxSetting

name type description
salesTax ITaxRate Sales tax settings
purchaseTax ITaxRate Purchase tax settings
returnPeriodicity string Frequency of tax return (e.g., monthly)

ITaxRate

name type description
taxable boolean Indicates if the item is taxable
rate number Tax rate percentage

IShortcut

name type description
action IAction The action that this shortcut performs
keyList string[] List of keys associated with the shortcut

IAction

name type description
name string Name of the action
description string Description of the action
fieldList IField[] List of fields associated with the action

IField

name type description
name string Name of the field
value string Value of the field

Request Example

PUT /company/1/accounting_setting

const body = {
    "taxSettings": {
        "salesTax": {
            "taxable": true,
            "rate": 7
        },
        "purchaseTax": {
            "taxable": true,
            "rate": 7
        },
        "returnPeriodicity": "Month"
    },
    "currency": "USD",
    "lastDayOfFiscalYear": 30,
    "shortcutList": [
        {
            "action": {
                "name": "Create Invoice",
                "description": "Create a new invoice",
                "fieldList": [
                    {
                        "name": "Customer",
                        "value": "Customer Name"
                    },
                    {
                        "name": "Amount",
                        "value": "1000"
                    }
                ]
            },
            "keyList": ["Ctrl", "I"]
        }
    ]
}

Response

Response Parameters

name type description
powerby string the version of the API
success boolean true or false
code string response code
message string a message detailing the result of the request
payload IAccountingSetting response data

IAccountingSetting

name type description
id number Primary Key
companyId number Company ID
companyName string Name of the company
taxSettings ITaxSetting Tax settings for the company
currency string Currency code (e.g., USD, EUR)
lastDayOfFiscalYear number Last day of the fiscal year
shortcutList IShortcut[] List of shortcuts defined for the company

ITaxSetting

name type description
salesTax ITaxRate Sales tax settings
purchaseTax ITaxRate Purchase tax settings
returnPeriodicity string Frequency of tax return (e.g., monthly)

ITaxRate

name type description
taxable boolean Indicates if the item is taxable
rate number Tax rate percentage

IShortcut

name type description
action IAction The action that this shortcut performs
keyList string[] List of keys associated with the shortcut

IAction

name type description
name string Name of the action
description string Description of the action
fieldList IField[] List of fields associated with the action

IField

name type description
name string Name of the field
value string Value of the field

Response Example

  • 成功的回傳
{
    "powerby": "iSunFA v2.0.0+1",
    "success": true,
    "code":  "200",
    "message": "Get a company accounting setting successfully",
    "payload": 
    {
        "id": 1,
        "companyId": 1,
        "companyName": "iSunFA",
        "taxSettings": {
            "salesTax": {
                "taxable": true,
                "rate": 7
            },
            "purchaseTax": {
                "taxable": true,
                "rate": 7
            },
            "returnPeriodicity": "Month"
        },
        "currency": "USD",
        "lastDayOfFiscalYear": 30,
        "shortcutList": [
            {
                "action": {
                    "name": "Create Invoice",
                    "description": "Create a new invoice",
                    "fieldList": [
                        {
                            "name": "Customer",
                            "value": "Customer Name"
                        },
                        {
                            "name": "Amount",
                            "value": "1000"
                        }
                    ]
                },
                "keyList": ["Ctrl", "I"]
            }
        ]
    },
}
  • 失敗的回傳
{
    "powerby": "iSunFA v2.0.0+1",
    "success": false,
    "code":  "405",
    "message": "Method not allowed",
    "payload": {}
}

listAccount

  • description: get the accounting accounts of the company

Request

Request url

GET /company/:companyId/accounting_setting/account

Parameters

name type description required default
companyId string id of the company true --

Request Example

GET /company/1/accounting_setting/account

Response

Response Parameters

name type description
powerby string the version of the API
success boolean true or false
code string response code
message string a message detailing the result of the request
payload { code: string, name: string }[] response data

Response Example

  • 成功的回傳
{
    "powerby": "iSunFA v2.0.0+1",
    "success": true,
    "code":  "200",
    "message": "Get accounting accounts of the company successfully",
    "payload": [
        {
            "code": "1755",
            "name": "Royalty assets"
        },
        {
            "code": "1780",
            "name": "Intangible assets"
        },
        {
            "code": "1920",
            "name": "Deposit of Margin"
        },
        {
            "code": "1990",
            "name": "Other non-current assets"
        }
    ]
}
  • 失敗的回傳
{
    "powerby": "iSunFA v2.0.0+1",
    "success": false,
    "code":  "405",
    "message": "Method not allowed",
    "payload": {}
}

createSubAccountingAccount

  • description: create a sub accounting account of the company

Request

Request url

POST /company/:companyId/accounting_setting/account

Parameters

name type description required default
companyId string id of the company true --

body

name type description
code string code of the account
name string name of the account

Request Example

POST /company/1/accounting_setting/account

const body = {
    "code": "1755",
    "name": "Sub royalty assets"
}

Response

Response Parameters

name type description
powerby string the version of the API
success boolean true or false
code string response code
message string a message detailing the result of the request
payload subAccount response data

subAccount

name type description
accountingType string type of account, (e.g., Assets)
assetType string category type, (e.g., Non-Current Assets)
currentAssetType string type of current Asset, (e.g., Consolidated financial assets)
code string sub account Code
name string sub account name

Response Example

  • 成功的回傳
{
    "powerby": "iSunFA v2.0.0+1",
    "success": true,
    "code":  "200",
    "message": "Create a sub accounting account of the company successfully",
    "payload": 
    {
        "accountingType": "Assets",
        "assetType": "Non-Current Assets",
        "currentAssetType": "Consolidated financial assets",
        "code": "1755-01",
        "name": "Sub royalty assets"
    }
}
  • 失敗的回傳
{
    "powerby": "iSunFA v2.0.0+1",
    "success": false,
    "code":  "405",
    "message": "Method not allowed",
    "payload": {}
}

getSubAccountingAccount

  • description: get a sub accounting account of the company

Request

Request url

GET /company/:companyId/account/:accountId

Parameters

name type description required default
companyId string id of the company true --
accountId string id of the account true --

Request Example

GET /company/1/account/1

Response

Response Parameters

name type description
powerby string the version of the API
success boolean true or false
code string response code
message string a message detailing the result of the request
payload subAccount response data

subAccount

name type description
accountingType string type of account, (e.g., Assets)
assetType string category type, (e.g., Non-Current Assets)
currentAssetType string type of current Asset, (e.g., Consolidated financial assets)
code string sub account Code
name string sub account name

Response Example

  • 成功的回傳
{
    "powerby": "iSunFA v2.0.0+1",
    "success": true,
    "code":  "200",
    "message": "Get a sub accounting account of the company successfully",
    "payload": 
    {
        "accountingType": "Assets",
        "assetType": "Non-Current Assets",
        "currentAssetType": "Consolidated financial assets",
        "code": "1755-01",
        "name": "Sub royalty assets"
    }
}
  • 失敗的回傳
{
    "powerby": "iSunFA v2.0.0+1",
    "success": false,
    "code":  "405",
    "message": "Method not allowed",
    "payload": {}
}

updateSubAccountingAccount

  • description: update a sub accounting account of the company

Request

Request url

PUT /company/:companyId/account/:accountId

Parameters

name type description required default
companyId string id of the company true --
accountId string id of the account true --

body

name type description
code string code of the account
name string name of the account

Request Example

PUT /company/1/account/1

const body = {
    "code": "1755",
    "name": "Sub royalty assets"
}

Response

Response Parameters

name type description
powerby string the version of the API
success boolean true or false
code string response code
message string a message detailing the result of the request
payload subAccount response data

subAccount

name type description
accountingType string type of account, (e.g., Assets)
assetType string category type, (e.g., Non-Current Assets)
currentAssetType string type of current Asset, (e.g., Consolidated financial assets)
code string sub account Code
name string sub account name

Response Example

  • 成功的回傳
{
    "powerby": "iSunFA v2.0.0+1",
    "success": true,
    "code":  "200",
    "message": "Update a sub accounting account of the company successfully",
    "payload": 
    {
        "accountingType": "Assets",
        "assetType": "Non-Current Assets",
        "currentAssetType": "Consolidated financial assets",
        "code": "1755-01",
        "name": "Sub royalty assets"
    }
}
  • 失敗的回傳
{
    "powerby": "iSunFA v2.0.0+1",
    "success": false,
    "code":  "405",
    "message": "Method not allowed",
    "payload": {}
}

deleteSubAccountingAccount

  • description: delete a sub accounting account of the company

Request

Request url

DELETE /company/:companyId/account/:accountId

Parameters

name type description required default
companyId string id of the company true --
accountId string id of the account true --

Request Example

DELETE /company/1/account/1

Response

Response Parameters

name type description
powerby string the version of the API
success boolean true or false
code string response code
message string a message detailing the result of the request
payload subAccount response data

subAccount

name type description
accountingType string type of account, (e.g., Assets)
assetType string category type, (e.g., Non-Current Assets)
currentAssetType string type of current Asset, (e.g., Consolidated financial assets)
code string sub account Code
name string sub account name

Response Example

  • 成功的回傳
{
    "powerby": "iSunFA v2.0.0+1",
    "success": true,
    "code":  "200",
    "message": "Delete a sub accounting account of the company successfully",
    "payload": 
    {
        "accountingType": "Assets",
        "assetType": "Non-Current Assets",
        "currentAssetType": "Consolidated financial assets",
        "code": "1755-01",
        "name": "Sub royalty assets"
    }
}
  • 失敗的回傳
{
    "powerby": "iSunFA v2.0.0+1",
    "success": false,
    "code":  "405",
    "message": "Method not allowed",
    "payload": {}
}

getOpeningBalance

  • description: get the opening balance of the company

Request

Request url

GET /company/:companyId/accounting_setting/opening_balance

Parameters

name type description required default
companyId string id of the company true --

Request Example

GET /company/1/accounting_setting/opening_balance

Response

Response Parameters

name type description
powerby string the version of the API
success boolean true or false
code string response code
message string a message detailing the result of the request
payload openingBalance[] response data

openingBalance

name type description
code string code of the account
name string name of the account
type string type of the account, (e.g., Current assets)
beginningDebit int beginning debit of the account
openingCredit int beginning credit of the account

Response Example

  • 成功的回傳
{
    "powerby": "iSunFA v2.0.0+1",
    "success": true,
    "code":  "200",
    "message": "Get opening balance of the company successfully",
    "payload": [
        {
            "code": "151711",
            "name": "Consolidated financial assets",
            "type": "Current assets",
            "beginningDebit": 100,
            "openingCredit": 100
        },
        {
            "code": "175511",
            "name": "Royalty assets",
            "type": "Current assets",
            "beginningDebit": 100,
            "openingCredit": 100
        },
        {
            "code": "178911",
            "name": "Intangible assets",
            "type": "Current assets",
            "beginningDebit": 100,
            "openingCredit": 100
        },
        {
            "code": "192011",
            "name": "Deposit of Margin",
            "type": "Current assets",
            "beginningDebit": 100,
            "openingCredit": 100
        }
    ]
}
  • 失敗的回傳
{
    "powerby": "iSunFA v2.0.0+1",
    "success": false,
    "code":  "405",
    "message": "Method not allowed",
    "payload": {}
}

updateOpeningBalance

  • description: update the opening balance of the company

Request

Request url

PUT /company/:companyId/accounting_setting/opening_balance

Parameters

name type description required default
companyId string id of the company true --

body

name type description
code string code of the account
type string type of the account, (e.g., Current assets)
beginningDebit int beginning debit of the account
openingCredit int beginning credit of the account

Request Example

PUT /company/1/accounting_setting/opening_balance

const body = [
    {
        "code": "151711",
        "type": "Current assets",
        "beginningDebit": 200,
        "openingCredit": 200
    },
    {
        "code": "175511",
        "type": "Non-current assets",
        "beginningDebit": 200,
        "openingCredit": 200
    }
]

Response

Response Parameters

name type description
powerby string the version of the API
success boolean true or false
code string response code
message string a message detailing the result of the request
payload openingBalance[] response data

openingBalance

name type description
code string code of the account
name string name of the account
type string type of the account, (e.g., Current assets)
beginningDebit int beginning debit of the account
openingCredit int beginning credit of the account

Response Example

  • 成功的回傳
{
    "powerby": "iSunFA v2.0.0+1",
    "success": true,
    "code":  "200",
    "message": "Update opening balance of the company successfully",
    "payload": [
        {
            "code": "151711",
            "name": "Consolidated financial assets",
            "type": "Current assets",
            "beginningDebit": 200,
            "openingCredit": 200
        },
        {
            "code": "175511",
            "name": "Royalty assets",
            "type": "Non-current",
            "beginningDebit": 200,
            "openingCredit": 200
        },
        {
            "code": "178911",
            "name": "Intangible assets",
            "type": "Current assets",
            "beginningDebit": 100,
            "openingCredit": 100
        },
        {
            "code": "192011",
            "name": "Deposit of Margin",
            "type": "Current assets",
            "beginningDebit": 100,
            "openingCredit": 100
        }
    ]
}
  • 失敗的回傳
{
    "powerby": "iSunFA v2.0.0+1",
    "success": false,
    "code":  "405",
    "message": "Method not allowed",
    "payload": {}
}

listAllJobs

  • description: List all jobs

Request

Request url

GET /job

Request Query

name type description required
page number The page number no
pageSize number The number of items per page no
sortBy string The field to sort by no
sortOrder string The order to sort by no
startDate number The start date no
endDate number The end date no
searchQuery string The search query no
isMatched boolean Whether the job is matched no

Request Example

GET /job?page=1&pageSize=10&sortBy=createdAt&sortOrder=desc&startDate=1630000001&endDate=1630000001&searchQuery=accounting

Response

Response Parameters

name type description
powerby string the version of the API
success boolean true or false
code string response code
message string a message detailing the result of the request
payload IPaginatedData<IJob[]> response data

IPaginatedData

name type description
data IJob[] The job data
page number The page number
totalPages number The total number of pages
totalCount number The total number of items
pageSize number The number of items per page
hasNextPage boolean Indicates if there is a next page
hasPreviousPage boolean Indicates if there is a previous page
sort {sortBy: string, sortOrder: string}[] The order and field to sort by

IJob

name type description
id number job ID
companyName string company name
companyLogo string company logo URL
issueType string type of job
publicationDate number publication date (timestamp)
estimatedWorkingHours object estimated working hours range
deadline number deadline (timestamp)
hourlyWage number hourly wage
caseDescription string case description
targetCandidates string target candidates description
remarks string remarks
applicationsCount number number of applications
isMatched boolean whether the job is matched
createdAt number creation time (timestamp)
updatedAt number last update time (timestamp)

Response Example

  • Successful response
{
    "powerby": "iSunFA v2.0.0+4",
    "success": true,
    "code": "200ISF0000",
    "message": "Success",
    "payload": {
        "data": [
            {
                "id": 2,
                "companyName": "B 公司",
                "companyLogo": "https://example.com/company-b-logo.png",
                "issueType": "稅務",
                "publicationDate": 1692499600,
                "estimatedWorkingHours": {
                    "start": 1693526400,
                    "end": 1698768000
                },
                "deadline": 1699920000,
                "hourlyWage": 600,
                "caseDescription": "協助處理年度稅務申報",
                "targetCandidates": "有稅務申報經驗的會計師或記帳士",
                "remarks": "需要了解最新的稅務法規",
                "applicationsCount": 3,
                "isMatched": true,
                "createdAt": 1692489600,
                "updatedAt": 1692489600
            },
            {
                "id": 1,
                "companyName": "A 公司",
                "companyLogo": "https://example.com/company-a-logo.png",
                "issueType": "記帳",
                "publicationDate": 1692489600,
                "estimatedWorkingHours": {
                    "start": 1693008000,
                    "end": 1695600000
                },
                "deadline": 1696032000,
                "hourlyWage": 500,
                "caseDescription": "上傳相關憑證,徵求記帳士開立傳票",
                "targetCandidates": "具有3年以上記帳經驗的記帳士",
                "remarks": "需要熟悉國際會計準則",
                "applicationsCount": 5,
                "isMatched": false,
                "createdAt": 1692489600,
                "updatedAt": 1692489600
            }
        ],
        "page": 1,
        "totalPages": 1,
        "totalCount": 2,
        "pageSize": 10,
        "hasNextPage": false,
        "hasPreviousPage": false,
        "sort": [
            {
                "sortBy": "publicationDate",
                "sortOrder": "desc"
            }
        ]
    }
}
  • Failed response
{
    "powerby": "iSunFA v2.0.0+1",
    "success": false,
    "code":  "405",
    "message": "Method not allowed",
    "payload": {}
}

getAJobById

  • description: Get details of a specific job

Request

Request url

GET /job/:jobId

Parameters

name type description required default
jobId string ID of the job true --

Request Example

GET /job/1

Response

Response Parameters

name type description
powerby string the version of the API
success boolean true or false
code string response code
message string a message detailing the result of the request
payload Job response data

Job

name type description
id number job ID
companyName string company name
companyLogo string company logo URL
issueType string type of job
publicationDate number publication date (timestamp)
estimatedWorkingHours object estimated working hours range
deadline number deadline (timestamp)
hourlyWage number hourly wage
caseDescription string case description
targetCandidates string target candidates description
remarks string remarks
applicationsCount number number of applications
isMatched boolean whether the job is matched
createdAt number creation time (timestamp)
updatedAt number last update time (timestamp)

Response Example

  • Successful response
{
    "powerby": "iSunFA v2.0.0+1",
    "success": true,
    "code": "200",
    "message": "Successfully retrieved job details",
    "payload": {
        "id": 1,
        "companyName": "iSunCloud",
        "companyLogo": "https://example.com/isuncloud-logo.png",
        "issueType": "Accounting",
        "publicationDate": 1706227200000,
        "estimatedWorkingHours": {
            "start": 1711584000000,
            "end": 1743120000000
        },
        "deadline": 1743120000000,
        "hourlyWage": 2500,
        "caseDescription": "This is a description of an accounting case.",
        "targetCandidates": "A bookkeeper with tax experience.",
        "remarks": "None",
        "applicationsCount": 10,
        "isMatched": false,
        "createdAt": 1706227200000,
        "updatedAt": 1706227200000
    }
}
  • Failed response
{
    "powerby": "iSunFA v2.0.0+1",
    "success": false,
    "code":  "405",
    "message": "Method not allowed",
    "payload": {}
}

createAnApplication

  • description: Create an application for a job

Request

Request url

POST /job/:jobId/application

Parameters

name type description required default
jobId string ID of the job true --

body

name type description
content string application content

Request Example

POST /job/1/application

const body = {
  "content": "application content",
}

Response

Response Parameters

name type description
powerby string the version of the API
success boolean true or false
code string response code
message string a message detailing the result of the request
payload Application response data

Application

name type description
id number application ID
bookkeeperId number bookkeeper's ID
jobId number job ID
content string application content
createdAt number creation time
updatedAt number last update time

Response Example

  • Successful response
{
    "powerby": "iSunFA v2.0.0+1",
    "success": true,
    "code":  "200",
    "message": "Application created successfully",
    "payload": 
       {
          "id": 1,
          "bookkeeperId": 1000,
          "jobId": 1,
          "content": "application content",
          "createdAt": 1630000000,
          "updatedAt": 1630000000
       }
}
  • Failed response
{
    "powerby": "iSunFA v2.0.0+1",
    "success": false,
    "code":  "405",
    "message": "Method not allowed",
    "payload": {}
}

listNews

  • description: list news

Request

Request url

GET news
name type description required
page number The page number no
pageSize number The number of items per page no
type string The type of news no
sortBy string The field to sort by no
sortOrder string The order to sort by no
startDate number The start date no
endDate number The end date no
searchQuery string The search query no

Request Example

GET news?page=1&pageSize=10&type=company&sortBy=createdAt&sortOrder=desc&startDate=1630000001&endDate=1630000001&searchQuery=apple

Response

Response Parameters

name type description
powerby string the version of the API
success boolean true or false
code string response code
message string a message detailing the result of the request
payload IPaginatedData<INews[]> response data

IPaginatedData

name type description
data INews[] The journal data
page number The page number
totalPages number The total number of pages
totalCount number The total number of items
pageSize number The number of items per page
hasNextPage boolean Indicates if there is a next page
hasPreviousPage boolean Indicates if there is a previous page
sort {sortBy: string, sortOrder: string}[] The order and field to sort by

INews

name type description
id number news's id
title string news's title
content string news's content
type string news's type
createdAt number create time
updatedAt number update time
deletedAt number delete time

Response Example

  • 成功的回傳
{
    "powerby": "iSunFA v2.0.0+1",
    "success": true,
    "code":  "200",
    "message": "List news successfully",
    "payload": 
       {
          "data": [
            {
              "id": 1,
              "title": "apple",
              "content": "apple",
              "type": "company",
              "createdAt": 1630000001,
              "updatedAt": 1630000001,
              "deletedAt": null,
            }
          ],
          "page": 1,
          "totalPages": 1,
          "totalCount": 1,
          "pageSize": 10,
          "hasNextPage": false,
          "hasPreviousPage": false,
          "sort": [
            {
              "sortBy": "createdAt",
              "sortOrder": "desc"
            }
          ]
       },
}
  • 失敗的回傳
{
    "powerby": "iSunFA v2.0.0+1",
    "success": false,
    "code":  "405",
    "message": "Method not allowed",
    "payload": {}
}

signOut

  • description: This API is used to sign out an user by clearing the FIDO2 cookie.

Request

Request URL

POST `/sign-out`

Request Example

POST `/sign-out`

Response

Response Parameters

name type description
success boolean indicates whether the operation was successful
message string provides a message related to the success or failure of the operation.

Response Example

  • Successful Response

    {
      "success": true,
      "message": "Successfully signed out"
    }
  • Unsuccessful Response

    {
      "success": false,
      "message": "Failed to sign out"
    }

getStatusInfo

  • description: This API provides the functionality to get the session information.

Request

Request URL

GET `/status_info`

Request Example

GET `/status_info`

Response

Response Parameters

name type description
powerby string iSunFA v0.1.2+50
success boolean true or false
code string response code
message string description of response data
payload {user: User, company: Company} response data or {}

Company

name type description
id number id of company
name string name of company
code string code of company
regional string regional of company
kycStatus boolean kyc status of company
imageId string image id of company
startDate number start date of the company
createdAt number create timestamp of the company
updatedAt number update timestamp of the company

User

name type description
id number unique number of user
name string user name
fullName string user full name
email string user email
phone string user phone
imageId string user image id
agreementList string[] list of agreement hash
createdAt number creation timestamp
updatedAt number update timestamp

Response Example

  • 成功的回傳
{
    "powerby": "iSunFA v0.8.0+5",
    "success": true,
    "code": "200ISF0002",
    "message": "Get successfully",
    "payload": {
        "user": {
            "id": 10000003,
            "name": "kk",
            "fullName": null,
            "email": null,
            "phone": null,
            "imageId": "552c2dbf-997c-4b13-957e-ea03c45d2ec1.svg",
            "agreementList": ["agreement1", "agreement2"],
            "createdAt": 1723538422,
            "updatedAt": 1723538422
        },
        "company": {
            "id": 10000002,
            "name": "kk",
            "code": "123",
            "regional": "Taiwan",
            "kycStatus": false,
            "imageId": "https://storage.googleapis.com/mermer-offical-km/ISunFa/e8a48a55-2d97-4dc3-89fb-0fd3947cc971.svg",
            "startDate": 1723538434,
            "createdAt": 1723538434,
            "updatedAt": 1723538434,
            "deletedAt": null
        }
    }
}
  • 失敗的回傳
    {
      "powerby": "iSunFA v0.1.2+50",
      "success": false,
      "code": "404",
      "message": "Resource not found",
      "payload": {} 
    }

listTrialBalance

  • Description: List all trial balance items

Request

Request URL

GET /company/:companyId/trial_balance

Parameters

Name Type Description Required Default
companyId string Company ID Yes --

Query Parameters

Name Type Description Required Default
startDate number Start date (timestamp, seconds) Yes --
endDate number End date (timestamp, seconds) Yes --
sortBy string Sort by field No createAt
sortOrder string Sort order No desc
page number Page number No 1
pageSize number Items per page No infinity

Request Example

GET /company/1/trial_balance?startDate=1704067200&endDate=1706745599&page=1&pageSize=10&sortBy=createAt&sortOrder=asc

Response

Response Parameters

Name Type Description
powerby string API version
success boolean Success status
code string Response code
message string Response message
payload object Trial balance data

Payload

Name Type Description
currencyAlias string Currency of the trial balance
items IPaginatedData<TrialBalanceItem[]> Paginated list of trial balance items
total ITrialBalanceTotal Total amount

IPaginatedData

Name Type Description
data TrialBalanceItem[] Trial balance item list
page number Current page number
totalPages number Total number of pages
totalCount number Total number of trial balance items
pageSize number Items per page
hasNextPage boolean Whether there is a next page
hasPreviousPage boolean Whether there is a previous page
sort {sortBy: string, sortOrder: string}[] Sort method

TrialBalanceItem

Name Type Description
id number Account ID
no string Account number
accountingTitle string Accounting title
beginningCreditAmount number Beginning credit balance
beginningDebitAmount number Beginning debit balance
midtermCreditAmount number Current period credit transactions
midtermDebitAmount number Current period debit transactions
endingCreditAmount number Ending credit balance
endingDebitAmount number Ending debit balance
createAt number Creation timestamp, seconds
updateAt number Last update timestamp, seconds
deletedAt number Deletion timestamp, seconds
subAccounts TrialBalanceItem[] List of sub-accounts

ITrialBalanceTotal

Name Type Description
beginningCreditAmount number Beginning credit balance
beginningDebitAmount number Beginning debit balance
midtermCreditAmount number Current period credit transactions
midtermDebitAmount number Current period debit transactions
endingCreditAmount number Ending credit balance
endingDebitAmount number Ending debit balance
createAt number Creation timestamp, seconds
updateAt number Last update timestamp, seconds

Response Example

  • Successful response
{
    "powerby": "iSunFA v2.0.0+1",
    "success": true,
    "code": "200ISF0000",
    "message": "Success",
    "payload": {
        "currencyAlias": "TWD",
        "items": {
            "data": [
                {
                    "id": 1,
                    "no": "1141",
                    "accountingTitle": "應收帳款",
                    "beginningCreditAmount": 0,
                    "beginningDebitAmount": 1785000,
                    "midtermCreditAmount": 0,
                    "midtermDebitAmount": 1785000,
                    "endingCreditAmount": 0,
                    "endingDebitAmount": 1785000,
                    "createAt": 1704067200,
                    "updateAt": 1704067200,
                    "subAccounts": [
                        {
                            "id": 2,
                            "no": "114101",
                            "accountingTitle": "應收帳款-A公司",
                            "beginningCreditAmount": 0,
                            "beginningDebitAmount": 1785000,
                            "midtermCreditAmount": 0,
                            "midtermDebitAmount": 1785000,
                            "endingCreditAmount": 0,
                            "endingDebitAmount": 1785000,
                            "createAt": 1704067200,
                            "updateAt": 1704067200,
                            "subAccounts": []
                        }
                    ]
                },
                {
                    "id": 3,
                    "no": "1151",
                    "accountingTitle": "其他應收款",
                    "beginningCreditAmount": 0,
                    "beginningDebitAmount": 500000,
                    "midtermCreditAmount": 0,
                    "midtermDebitAmount": 500000,
                    "endingCreditAmount": 0,
                    "endingDebitAmount": 500000,
                    "createAt": 1704067200,
                    "updateAt": 1704067200,
                    "subAccounts": []
                }
            ],
            "page": 1,
            "totalPages": 1,
            "totalCount": 2,
            "pageSize": 10,
            "hasNextPage": false,
            "hasPreviousPage": false,
            "sort": [
                {
                    "sortBy": "no",
                    "sortOrder": "asc"
                }
            ]
        },
        "total": {
            "beginningCreditAmount": 0,
            "beginningDebitAmount": 2285000,
            "midtermCreditAmount": 0,
            "midtermDebitAmount": 2285000,
            "endingCreditAmount": 0,
            "endingDebitAmount": 2285000,
            "createAt": 1704067200,
            "updateAt": 1704067200
        }
    }
}
  • Failed response
{
    "powerby": "iSunFA v2.0.0+1",
    "success": false,
    "code": "405ISF0000",
    "message": "Method not allowed",
    "payload": {}
}

listLedger

  • Description: List ledger details for a specific accounting account range

Request

Request URL

GET /company/:companyId/ledger

Parameters

Name Type Description Required Default
companyId string Company ID Yes --

Query Parameters

Name Type Description Required Default
startDate number Start date (timestamp, seconds) Yes --
endDate number End date (timestamp, seconds) Yes --
startAccountNo string Starting account number No --
endAccountNo string Ending account number No --
labelType string Label type (general/detailed/all) No general
page number Page number No 1
pageSize number Items per page No infinity

Request Example

GET /company/1/ledger?startDate=1706745600&endDate=1707350399&startAccountNo=1141&endAccountNo=1142&labelType=general&page=1&pageSize=10

Response

Response Parameters

Name Type Description
powerby string API version
success boolean Success status
code string Response code
message string Response message
payload object Ledger data

Payload

Name Type Description
currencyAlias string Currency
items IPaginatedData<LedgerItem[]> Paginated list of ledger items
total ILedgerTotal Information about total debit and credit amount

IPaginatedData

Name Type Description
data LedgerItem[] Ledger item list
page number Current page number
totalPages number Total number of pages
totalCount number Total number of ledger items
pageSize number Items per page
hasNextPage boolean Whether there is a next page
hasPreviousPage boolean Whether there is a previous page
sort {sortBy: string, sortOrder: string}[] Sort method

ILedgerItem

Name Type Description
id number Ledger item ID
voucherDate number Voucher date, timestamp, seconds
no string Account number
accountingTitle string Accounting title
voucherNumber string Voucher number
particulars string Details
debitAmount number Debit amount
creditAmount number Credit amount
balance number Balance
createAt number Creation timestamp, seconds
updateAt number Last update timestamp, seconds

ILedgerTotal

Name Type Description
totalDebitAmount number Total debit amount
totalCreditAmount number Total credit amount
createAt number Creation timestamp, seconds
updateAt number Last update timestamp, seconds

Response Example

  • Successful response
{
    "powerby": "iSunFA v0.8.2+29",
    "success": true,
    "code": "200ISF0001",
    "message": "List successfully",
    "payload": {
        "currencyAlias": "TWD",
        "items": {
            "data": [
                {
                    "id": 1,
                    "voucherDate": 1706745600,
                    "no": "1141",
                    "accountingTitle": "應收帳款",
                    "voucherNumber": "ZV2024-001",
                    "particulars": "設備採購",
                    "debitAmount": 300000,
                    "creditAmount": 0,
                    "balance": 420000,
                    "createAt": 1706745600,
                    "updateAt": 1706745600
                },
                {
                    "id": 2,
                    "voucherDate": 1706745600,
                    "no": "1142",
                    "accountingTitle": "應收票據",
                    "voucherNumber": "ZV2024-002",
                    "particulars": "開立發票",
                    "debitAmount": 500000,
                    "creditAmount": 0,
                    "balance": 500000,
                    "createAt": 1706745600,
                    "updateAt": 1706745600
                }
            ],
            "page": 1,
            "totalPages": 1,
            "totalCount": 2,
            "pageSize": 10,
            "hasNextPage": false,
            "hasPreviousPage": false,
            "sort": [
                {
                    "sortBy": "voucherDate",
                    "sortOrder": "asc"
                }
            ]
        },
        "total": {
            "totalDebitAmount": 800000,
            "totalCreditAmount": 800000,
            "createAt": 1706745600,
            "updateAt": 1708854635
        }
    }
}
  • Failed response
{
    "powerby": "iSunFA v2.0.0+1",
    "success": false,
    "code": "405ISF0000",
    "message": "Method not allowed",
    "payload": {}
}

listAssets

  • description: List all assets

Request

Request url

GET /company/:companyId/asset

Parameters

name type description required default
companyId string Company ID yes --

Query

name type description required default
page number Page number no 1
pageSize number Items per page no 10
type string Asset type no --
status string Asset status no --
startDate number Start of time range (timestamp, seconds) no --
endDate number End of time range (timestamp, seconds) no --
searchQuery string Search keyword no --

Request Example

GET /company/1/asset?page=1&pageSize=10&type=equipment&status=normal&startDate=1672531200&endDate=1704067199&searchQuery=computer

Response

Response Parameters

name type description
powerby string API version
success boolean Success status
code string Response code
message string Response message
payload IPaginatedData<IAssetItem[]> Data containing asset list

IPaginatedData

name type description
data Asset[] Asset list
page number Current page number
totalPages number Total number of pages
totalCount number Total number of items
pageSize number Items per page
hasNextPage boolean Whether there is a next page
hasPreviousPage boolean Whether there is a previous page
sort {sortBy: string, sortOrder: string}[] Sort method

IAssetItem

name type description
id number Asset ID
currencyAlias string Currency
acquisitionDate number Acquisition date (timestamp, seconds)
assetType string Accounting subject
assetNumber string Asset number
assetName string Asset name
purchasePrice number Purchase price
accumulatedDepreciation number Accumulated depreciation
residualValue number Residual value
remainingLife number Remaining useful life (timestamp, seconds)
assetStatus string Asset status
createdAt number Creation time (timestamp, seconds)
updatedAt number Update time (timestamp, seconds)
deletedAt number Deletion time (timestamp, seconds)

Response Example

  • Successful response
{
    "powerby": "iSunFA v2.0.0+1",
    "success": true,
    "code": "200ISF0000",
    "message": "Success",
    "payload": {
        "data": [
            {
                "id": 1,
                "currencyAlias": "TWD",
                "acquisitionDate": 1632511200,
                "assetType": "123 Machinery",
                "assetNumber": "A-000010",
                "assetName": "MackBook",
                "purchasePrice": 100000,
                "accumulatedDepreciation": 5000,
                "residualValue": 5000,
                "remainingLife": 61580800,
                "assetStatus": "normal",
                "createdAt": 1632511200,
                "updatedAt": 1632511200,
                "deletedAt": null
            },
            // ... 
        ],
        "page": 1,
        "totalPages": 10,
        "totalCount": 100,
        "pageSize": 10,
        "hasNextPage": true,
        "hasPreviousPage": false,
        "sort": [
            {
                "sortBy": "acquisitionDate",
                "sortOrder": "desc"
            }
        ]
    }
}
  • Failed response
{
    "powerby": "iSunFA v2.0.0+1",
    "success": false,
    "code":  "405",
    "message": "Method not allowed",
    "payload": {}
}

getAssetById

  • description: Get details of a single asset

Request

Request url

GET /company/:companyId/asset/:assetId

Parameters

name type description required default
companyId string Company ID yes --
assetId string Asset ID yes --

Request Example

GET /company/1/asset/1

Response

Response Parameters

name type description
powerby string API version
success boolean Success status
code string Response code
message string Response message
payload Asset Asset details data

IAssetDetails

name type description
id number Asset ID
acquisitionDate number Acquisition date (timestamp, seconds)
assetType string Accounting subject
assetNumber string Asset number
assetName string Asset name
purchasePrice number Purchase price
accumulatedDepreciation number Accumulated depreciation
residualValue number Residual value
remainingLife number Remaining useful life (timestamp, seconds)
assetStatus string Asset status
currencyAlias string Currency
depreciationStart number Depreciation start time, timestamp in seconds
depreciationMethod string Depreciation method
usefulLife number Useful life (timestamp, seconds)
relatedVouchers IRelatedVoucher[] Related vouchers
note string Remarks
createdAt number Creation time (timestamp, seconds)
updatedAt number Update time (timestamp, seconds)
deletedAt number Deletion time (timestamp, seconds)

IRelatedVoucher

name type description
id number Voucher ID
number string Voucher number

Response Example

  • Successful response
{
    "powerby": "iSunFA v2.0.0+1",
    "success": true,
    "code": "200ISF0000",
    "message": "Successfully retrieved asset details",
    "payload": {
        "id": 1,
        "acquisitionDate": 1234567890,
        "assetType": "Equipment",
        "assetNumber": "EQ-001",
        "assetName": "Office Computer",
        "purchasePrice": 50000,
        "accumulatedDepreciation": 10000,
        "residualValue": 40000,
        "remainingLife": 1560000,
        "assetStatus": "normal",
        "currencyAlias": "TWD",
        "depreciationStart": 1234567890,
        "depreciationMethod": "straight-line",
        "usefulLife": 6000000,
        "relatedVouchers": [
            {"id": 101, "number": "V-2023-001"},
            {"id": 102, "number": "V-2023-002"}
        ],
        "note": "Main office computer",
        "createdAt": 1234567000,
        "updatedAt": 1234568000,
        "deletedAt": null
    }
}
  • Failed response
{
    "powerby": "iSunFA v2.0.0+1",
    "success": false,
    "code":  "405",
    "message": "Method not allowed",
    "payload": {}
}

createAsset

  • description: Create a new asset

Request

Request url

POST /company/:companyId/asset

Parameters

name type description required default
companyId string Company ID yes --

Body

name type description required
assetName string Name yes
assetType string Accounting subject yes
assetNumber string Property number yes
acquisitionDate string Acquisition time, timestamp in seconds yes
purchasePrice number Purchase price yes
currencyAlias string Currency yes
amount number Amount yes
depreciationStart string Depreciation start time, timestamp in seconds no
depreciationMethod string Depreciation method no
usefulLife number Useful life (timestamp, seconds) no
note string Remarks no

Request Example

POST /company/1/asset

const body = {
    "assetName": "New Office Laptop",
    "assetType": "Equipment",
    "assetNumber": "EQ-002", 
    "acquisitionDate": 1234567890,
    "purchasePrice": 30000,
    "currencyAlias": "TWD",
    "amount": 30000,
    "depreciationStart": 1234567890,
    "depreciationMethod": "straight-line",
    "usefulLife": 36000,
    "note": "Laptop for new employee"
}

// example for land, no need for depreciationMethod, depreciationStart, usefulLife
const body = {
    "assetName": "Property Land",
    "assetType": "Land",
    "assetNumber": "L-001",
    "acquisitionDate": 1234567890,
    "purchasePrice": 1000000,
    "currencyAlias": "TWD",
    "amount": 1000000,
    "note": "Land for new office"
}

Response

Response Parameters

name type description
powerby string API version
success boolean Success status
code string Response code
message string Response message
payload Asset Newly created asset data

IAssetDetails

name type description
id number Asset ID
acquisitionDate number Acquisition date (timestamp, seconds)
assetType string Asset type
assetNumber string Asset number
assetName string Asset name
purchasePrice number Purchase price
accumulatedDepreciation number Accumulated depreciation
residualValue number Residual value
remainingLife number Remaining useful life (timestamp, seconds)
assetStatus string Asset status
currencyAlias string Currency
depreciationStart number Depreciation start time, timestamp in seconds
depreciationMethod string Depreciation method
usefulLife number Useful life (timestamp, seconds)
relatedVouchers IRelatedVoucher[] Related vouchers
note string Remarks
createdAt number Creation time (timestamp, seconds)
updatedAt number Update time (timestamp, seconds)
deletedAt number Deletion time (timestamp, seconds)

IRelatedVoucher

name type description
id number Voucher ID
number string Voucher number

Response Example

  • Successful response
{
    "powerby": "iSunFA v2.0.0+1",
    "success": true,
    "code": "200",
    "message": "Asset created successfully",
    "payload": {
        "id": 2,
        "acquisitionDate": 1234567890,
        "assetType": "Equipment",
        "assetNumber": "EQ-002",
        "assetName": "New Office Laptop",
        "purchasePrice": 30000,
        "accumulatedDepreciation": 0,
        "residualValue": 30000,
        "remainingLife": 36000,
        "assetStatus": "normal",
        "currencyAlias": "TWD",
        "depreciationStart": 1234567890,
        "depreciationMethod": "straight-line",
        "usefulLife": 36000,
        "relatedVouchers": [
            {"id": 101, "number": "V-2023-001"},
        ],
        "note": "Laptop for new employee",
        "createdAt": 1234567000,
        "updatedAt": 1234568000,
        "deletedAt": null
    }
}
  • Failed response
{
    "powerby": "iSunFA v2.0.0+1",
    "success": false,
    "code":  "405",
    "message": "Method not allowed",
    "payload": {}
}

updateAsset

  • description: Update asset information

Request

Request url

PUT /company/:companyId/asset/:assetId

Parameters

name type description required default
companyId string Company ID yes --
assetId string Asset ID yes --

Body

name type description required
updatedAt number Update time (timestamp, seconds) yes
assetStatus string Asset status no
note string Remarks no

Request Example

PUT /company/1/asset/2

const body = {
    "updatedAt": 1234567890,
    "note": "Updated: Laptop for marketing team",
    "assetStatus": "missing"
}

Response

Response Parameters

name type description
powerby string API version
success boolean Success status
code string Response code
message string Response message
payload Asset Updated asset data

IAssetDetails

name type description
id number Asset ID
acquisitionDate number Acquisition date (timestamp, seconds)
assetType string Accounting subject
assetNumber string Asset number
assetName string Asset name
purchasePrice number Purchase price
accumulatedDepreciation number Accumulated depreciation
residualValue number Residual value
remainingLife number Remaining useful life (timestamp, seconds)
assetStatus string Asset status
currencyAlias string Currency
depreciationStart number Depreciation start time, timestamp in seconds
depreciationMethod string Depreciation method
usefulLife number Useful life (timestamp, seconds)
relatedVouchers IRelatedVoucher[] Related vouchers
note string Remarks
createdAt number Creation time (timestamp, seconds)
updatedAt number Update time (timestamp, seconds)
deletedAt number Deletion time (timestamp, seconds)

IRelatedVoucher

name type description
id number Voucher ID
number string Voucher number

Response Example

  • Successful response
{
    "powerby": "iSunFA v2.0.0+1",
    "success": true,
    "code": "200ISF0000",
    "message": "Asset updated successfully",
    "payload": {
        "id": 2,
        "acquisitionDate": 1234567890,
        "assetType": "Equipment",
        "assetNumber": "EQ-001",
        "assetName": "Office Computer",
        "purchasePrice": 50000,
        "accumulatedDepreciation": 10000,
        "residualValue": 40000,
        "remainingLife": 1560000,
        "assetStatus": "missing",
        "currencyAlias": "TWD",
        "depreciationStart": 1234567890,
        "depreciationMethod": "straight-line",
        "usefulLife": 6000000,
        "relatedVouchers": [
            {"id": 101, "number": "V-2023-001"},
            {"id": 102, "number": "V-2023-002"}
        ],
        "createdAt": 1234567000,
        "updatedAt": 2234568000,
        "deletedAt": null,
        "note": "Updated: Laptop for marketing team",
    }
}
  • Failed response
{
    "powerby": "iSunFA v2.0.0+1",
    "success": false,
    "code":  "405",
    "message": "Method not allowed",
    "payload": {}
}

deleteAsset

  • description: Soft delete an asset

Request

Request url

DELETE /company/:companyId/asset/:assetId

Parameters

name type description required default
companyId string Company ID yes --
assetId string Asset ID yes --

Request Example

DELETE /company/1/asset/2

Response

Response Parameters

name type description
powerby string API version
success boolean Success status
code string Response code
message string Response message
payload Asset Asset details data

IAssetDetails

name type description
id number Asset ID
acquisitionDate number Acquisition date (timestamp, seconds)
assetType string Accounting subject
assetNumber string Asset number
assetName string Asset name
purchasePrice number Purchase price
accumulatedDepreciation number Accumulated depreciation
residualValue number Residual value
remainingLife number Remaining useful life (timestamp, seconds)
assetStatus string Asset status
currencyAlias string Currency
depreciationStart number Depreciation start time, timestamp in seconds
depreciationMethod string Depreciation method
usefulLife number Useful life (timestamp, seconds)
relatedVouchers IRelatedVoucher[] Related vouchers
note string Remarks
createdAt number Creation time (timestamp, seconds)
updatedAt number Update time (timestamp, seconds)
deletedAt number Deletion time (timestamp, seconds)

IRelatedVoucher

name type description
id number Voucher ID
number string Voucher number

Response Example

  • Successful response
{
    "powerby": "iSunFA v2.0.0+1",
    "success": true,
    "code": "200ISF0000",
    "message": "Asset deleted successfully",
    "payload": {
        "id": 1,
        "acquisitionDate": 1234567890,
        "assetType": "Equipment",
        "assetNumber": "EQ-001",
        "assetName": "Office Computer",
        "purchasePrice": 50000,
        "accumulatedDepreciation": 10000,
        "residualValue": 40000,
        "remainingLife": 1560000,
        "assetStatus": "normal",
        "currencyAlias": "TWD",
        "depreciationStart": 1234567890,
        "depreciationMethod": "straight-line",
        "usefulLife": 6000000,
        "relatedVouchers": [
            {"id": 101, "number": "V-2023-001"},
            {"id": 102, "number": "V-2023-002"}
        ],
        "note": "Main office computer",
        "createdAt": 1234567000,
        "updatedAt": 1234568000,
        "deletedAt": null
    }
}
  • Failed response
{
    "powerby": "iSunFA v2.0.0+1",
    "success": false,
    "code":  "405",
    "message": "Method not allowed",
    "payload": {}
}

GET ALL Voucher

  • Description: Get all voucher

Request

Request url

GET /company/voucher

Session

Session data will be get from session, so not needed to be provided.

name type description
companyId number id of company
userId number id of user

Query

name type description required Default
strategy "upcoming" | "uploaded" | "payment" | "receiving" implement different types of voucher to get ("ledger" is not in here) true -
canBeEdit boolean | undefined get voucher that can be edit or not, get all if undefined no undefined
page number The page number no 1
pageSize number how many items in one page no 10
type string (payment | transfer | receiving) | undefined get what "type" of voucher it is, get all if undefined no undefined
sortBy string | undefined which column to sort by (ex: "voucherDate", "period", "credit", "debit"), will use sum of line items when sort by "credit" or "debit" no undefined
sortOrder string ("asc"/"desc") The order to sort by no undefined
startDate integer(timestamp in second) item include and after startDate, default is 0 no
endDate integer(timestamp in second) item include and before startDate, default is infinity no
searchQuery string this field is to search name no

Resonse

Response Parameter

To be continue

Response Example

{
    "powerby": "iSunFA v2.0.0+1",
    "success": true,
    "code":  "200",
    "message": "Success",
    "payload": {
    	"page": 1, // current page
    	"totalUnRead": 99,
	    "totalPages": 3,
	    "totalCount": 30,
	    "pageSize": 10,
	    "hasNextPage": true,
	    "hasPreviousPage": true,
	    "sort": [
		    {
			    "sortBy": "createAt",
			    "sortOrder": "desc"
		    }
	    ],
	    "data": [
{
  "id": 1001,
  "eventId": null,
  "status": "uploaded", // "uploaded" or "upcoming"
  "canBeEdit": true, // true or false
  "voucherNo": "240417-001",
  "voucherDate": 1000000,
  "type": "payment", // or transfer or receiving
  "note": "This is a note",
  "createAt": 1000000,
  "updateAt": 1000000,
  "deletedAt": null, // if have Number then it is deleted
  "reverseAt": 1727317, // if have Number then it is reversed
  "certificates": [
    {
      "id": 1,
      "inputOrOutput": "input",
      "certificateDate": 10000001,
      "certificateNo": "AB-12345678",
      "currencyAlias": "TWD",
      "priceBeforeTax": 4000,
      "taxRatio": 5,
      "taxPrice": 200,
      "totalPrice": 4200,
      "counterPartyId": 1,
      "invoiceType": "triplicate_uniform_invoice",
      "deductible": true,
      "connectToId": null,
      "name": "invoice001.jpg",
      "url": "/api/v2/certificate/1",
      "type": "invoice",
      "connectToType": "voucher",
      "mimeTYpe": "image/jpeg",
      "size": "3.0 MB",
      "uploadProgress": 50,
      "aiResultId": "douhvjax_-1",
      "aiStatus": "success",
      "createAt": 10000000,
      "updateAt": 10000000
    }
  ],
  "reverseVoucherIds": [
    // 或是完整的voucher?
    {
      "id": 1111,
      "voucherNo": "240817-001"
    },
    {
      "id": 1112,
      "voucherNo": "240817-002"
    }
  ],
  "issuer": {
    // IUser
    "id": 1001,
    "name": "Murky",
    "fullName": "Tiny Murky",
    "email": "[email protected]",
    "phone": "1234567890",
    "imageId": "/api/v2/image/1001.jpg",
    "agreementList": ["agreement1", "agreement2"],
    "createdAt": 1000000,
    "updatedAt": 1000000
  },
  "counterParty": {
    // ICustomerVendor
    "id": 1001,
    "companyId": 1001,
    "name": "Cool LLC",
    "taxId": "12345678",
    "type": "customer",
    "note": "This is a note",
    "createdAt": 1000000,
    "updatedAt": 1000000
  },
  "payableInfo": {
    // payableInfo 如果存在,那麼receivingInfo就會都是0
    "total": 1000,
    "alreadyHappened": 400,
    "remain": 600
  },
  "receivingInfo": {
    "total": 1000,
    "alreadyHappened": 400,
    "remain": 600
  },
  "recurringInfo": {
    "type": "month", // or year or week or atOnce
    "startDate": 1000000,
    "endDate": 1000100,
    "daysOfWeek": [0, 1, 2], // 這邊是示範,如果type是week, 這個array才有東西, 0 = Sunday, 1 = Monday, 2 = Tuesday, 3 = Wednesday, 4 = Thursday, 5 = Friday, 6 = Saturday
    "daysOfMonth": [1, 15, 30], // 這邊是示範,如果type是month, 這個array才有東西
    "daysOfYears": [
      {
        "month": 1,
        "day": 1
      },
      {
        "month": 12,
        "day": 25
      }
    ] // 這邊是示範,如果type是year, 這個array才有東西
  },
  "assets": [
    // IAssetItem
    {
      "id": 1,
      "acquisitionDate": 1632511200,
      "assetType": "123 Machinery",
      "assetNumber": "A000010",
      "assetName": "MackBook",
      "purchasePrice": 100000,
      "accumulatedDepreciation": 5000,
      "residualValue": 5000,
      "remainingTimestamp": 1761580800,
      "assetStatus": "normal" //AssetStatus.NORMAL,
    }
  ],
  "lineItemsInfo": {
    "sum": {
      "debit": true,
      "amount": 1000
    },
    "lineItems": [
      {
        "id": 1001,
        "amount": 1000,
        "description": "This is a description",
        "debit": true,
        "account": {
          "id": 1001,
          "companyId": 1001,
          "system": "IFRS",
          "type": "Asset",
          "debit": true,
          "liquidity": true,
          "code": "1001",
          "name": "Cash",
          "forUser": true,
          "parentCode": "1000",
          "rootCode": "1000",
          "createdAt": 1000000,
          "updatedAt": 1000000,
          "level": 1,
          "deletedAt": null
        },
        "voucherId": 1001,
        "createdAt": 1000000,
        "updatedAt": 1000000,
        "deletedAt": null
      },
      {
        "id": 1002,
        "amount": 1001,
        "description": "This is a description",
        "debit": false,
        "account": {
          "id": 1002,
          "companyId": 1001,
          "system": "IFRS",
          "type": "Asset",
          "debit": true,
          "liquidity": true,
          "code": "1002",
          "name": "Accounts Receivable",
          "forUser": true,
          "parentCode": "1000",
          "rootCode": "1000",
          "createdAt": 1000000,
          "updatedAt": 1000000,
          "level": 1,
          "deletedAt": null
        },
        "voucherId": 1001,
        "createdAt": 1000000,
        "updatedAt": 1000000,
        "deletedAt": null
      }
    ]
  }
}
	    ],

    }
}

GET One Voucher

Request

Request usrl

GET /company/voucher/[voucherId]

Session

Session data will be get from session, so not needed to be provided.

name type description
companyId number id of company
userId number id of user

Parameter

name type description required
voucherId number The id of certain voucher Yes

Resonse

Response Parameter

To be continue

Response Example

{
    "powerby": "iSunFA v2.0.0+1",
    "success": true,
    "code":  "200",
    "message": "Success",
    "payload": {
  "id": 1001,
  "eventId": null, // will be null if not recurring, integer if recurring
  "hasReaded": true, 
  "status": "uploaded", // "uploaded" or "upcoming"
  "canBeEdit": true, // true or false
  "voucherNo": "240417-001",
  "voucherDate": 1000000,
  "type": "payment", // or transfer or receiving
  "note": "This is a note",
  "createAt": 1000000,
  "updateAt": 1000000,
  "deletedAt": null, // if have Number then it is deleted
  "reverseAt": 1727317, // if have Number then it is reversed
  "certificates": [
    {
      "id": 1,
      "inputOrOutput": "input",
      "certificateDate": 10000001,
      "certificateNo": "AB-12345678",
      "currencyAlias": "TWD",
      "priceBeforeTax": 4000,
      "taxRatio": 5,
      "taxPrice": 200,
      "totalPrice": 4200,
      "counterPartyId": 1,
      "invoiceType": "triplicate_uniform_invoice",
      "deductible": true,
      "connectToId": null,
      "name": "invoice001.jpg",
      "url": "/api/v2/certificate/1",
      "type": "invoice",
      "connectToType": "voucher",
      "mimeTYpe": "image/jpeg",
      "size": "3.0 MB",
      "uploadProgress": 50,
      "aiResultId": "douhvjax_-1",
      "aiStatus": "success",
      "createAt": 10000000,
      "updateAt": 10000000
    }
  ],
  "reverseVoucherIds": [
    // 或是完整的voucher?
    {
      "id": 1111,
      "voucherNo": "240817-001"
    },
    {
      "id": 1112,
      "voucherNo": "240817-002"
    }
  ],
  "issuer": {
    // IUser
    "id": 1001,
    "name": "Murky",
    "fullName": "Tiny Murky",
    "email": "[email protected]",
    "phone": "1234567890",
    "imageId": "/api/v2/image/1001.jpg",
    "agreementList": ["agreement1", "agreement2"],
    "createdAt": 1000000,
    "updatedAt": 1000000
  },
  "counterParty": {
    // ICustomerVendor
    "id": 1001,
    "companyId": 1001,
    "name": "Cool LLC",
    "taxId": "12345678",
    "type": "customer",
    "note": "This is a note",
    "createdAt": 1000000,
    "updatedAt": 1000000
  },
  "payableInfo": {
    // payableInfo 如果存在,那麼receivingInfo就會都是0
    "total": 1000,
    "alreadyHappened": 400,
    "remain": 600
  },
  "receivingInfo": {
    "total": 1000,
    "alreadyHappened": 400,
    "remain": 600
  },
  "recurringInfo": {
    "type": "month", // or year or week or atOnce
    "startDate": 1000000,
    "endDate": 1000100,
    "daysOfWeek": [0, 1, 2], // 這邊是示範,如果type是week, 這個array才有東西, 0 = Sunday, 1 = Monday, 2 = Tuesday, 3 = Wednesday, 4 = Thursday, 5 = Friday, 6 = Saturday
    "daysOfMonth": [1, 15, 30], // 這邊是示範,如果type是month, 這個array才有東西
    "daysOfYears": [
      {
        "month": 1,
        "day": 1
      },
      {
        "month": 12,
        "day": 25
      }
    ] // 這邊是示範,如果type是year, 這個array才有東西
  },
  "assets": [
    // IAssetItem
    {
      "id": 1,
      "acquisitionDate": 1632511200,
      "assetType": "123 Machinery",
      "assetNumber": "A000010",
      "assetName": "MackBook",
      "purchasePrice": 100000,
      "accumulatedDepreciation": 5000,
      "residualValue": 5000,
      "remainingTimestamp": 1761580800,
      "assetStatus": "normal" //AssetStatus.NORMAL,
    }
  ],
  "lineItemsInfo": {
    "sum": {
      "debit": true,
      "amount": 1000
    },
    "lineItems": [
      {
        "id": 1001,
        "amount": 1000,
        "description": "This is a description",
        "debit": true,
        "account": {
          "id": 1001,
          "companyId": 1001,
          "system": "IFRS",
          "type": "Asset",
          "debit": true,
          "liquidity": true,
          "code": "1001",
          "name": "Cash",
          "forUser": true,
          "parentCode": "1000",
          "rootCode": "1000",
          "createdAt": 1000000,
          "updatedAt": 1000000,
          "level": 1,
          "deletedAt": null
        },
        "voucherId": 1001,
        "createdAt": 1000000,
        "updatedAt": 1000000,
        "deletedAt": null
      },
      {
        "id": 1002,
        "amount": 1001,
        "description": "This is a description",
        "debit": false,
        "account": {
          "id": 1002,
          "companyId": 1001,
          "system": "IFRS",
          "type": "Asset",
          "debit": true,
          "liquidity": true,
          "code": "1002",
          "name": "Accounts Receivable",
          "forUser": true,
          "parentCode": "1000",
          "rootCode": "1000",
          "createdAt": 1000000,
          "updatedAt": 1000000,
          "level": 1,
          "deletedAt": null
        },
        "voucherId": 1001,
        "createdAt": 1000000,
        "updatedAt": 1000000,
        "deletedAt": null
      }
    ]
  }
}
}

POST check already Read voucher

  • Description: when enter list voucher, all voucher on that page will be consider readed

Request

Request usrl

POST /company/voucher/readed

Session

Session data will be get from session, so not needed to be provided.

name type description
companyId number id of company
userId number id of user

Body

name type description
voucherIds Integer[] the vouchers that want to be updated to read:true
{
  "voucherIds": [
	  1,
	  2,
	  3
  ]
}

Response

{
    "powerby": "iSunFA v2.0.0+1",
    "success": true,
    "code":  "200",
    "message": "Success",
    "payload": "Success",
}

Post Voucher

  • Description:Post one voucher, if posting "recurring" event, it will create all the voucher in upcoming

Request url

POST /company/voucher

Session

Session data will be get from session, so not needed to be provided.

name type description
companyId number id of company
userId number id of user

Body

name type description default required
certificateIds integer[] certificate connect to this voucher [] (empty array) true(but can be empty array)
voucherDate integer voucher occur day in second - true
type "payment" | "receiving" | "transfer" voucher type - true
note string note on voucher, can be empty string - true
counterPartyId integer id of counterPartyId, id should come from ICustomerVendor - true
lineItems lineItem[] lineItems of voucher, need to make sure tax is same as certificate and credit debit is equal - true, empty array is not allowed
recurringInfo recurringInfo | undefined if is recurring entry, then add this object, if not please use undefined undefined false
assetIds integer[] asset to be connect to, empty array if not to connect - true
reverseVouchers reverseVoucher [] empty array if not used -

lineItems

name type description default required
accoutId integer id of account - true
description string custom description for user to input - true(can be empty string)
debit boolean is it credit or debit - true
amount number how much is this - true

recurringInfo

name type description default required
type "week", "month", "year" which type of frequency to be repeat - true
startDate number start date in second - true
endDate number end date in second - true
daysOfWeek integer[] date of week to be repeat, if not repeat by week, use empty array, 0 be sunday - true
daysOfMonth integer[] day of month to be repeat, if not repeat by month, use empty array - true
daysOfYears {"month": integer, "day": integer} day of year to be repeat, if not repeat by year, use empty array - true

reversedVoucher

name type description default required
voucherId integer which voucher to be reversed - true
amount number how much is for amount - true
{
	"certificateIds": [1001, 1002],
	"voucherDate": 10000000,
	"type": "payment",
	"note": "this is note",
	"counterPartyId": 1001
	"lineItems": [
		{"accoutId": 1001,
		"description": "this is for Particulars",
		"debit": true,
		"amount": 1000},
		{"accoutId": 1002,
		"description": "this is for Particulars",
		"debit": false,
		"amount": 1000},
	],
	"recurringEntry": { // undefined if not used
	    "type": "month", // or year or week or atOnce
	    "startDate": 1000000,
	    "endDate": 1000100,
	    "daysOfWeek": [0, 1, 2], // 這邊是示範,如果type是week, 這個array才有東西, 0 = Sunday, 1 = Monday, 2 = Tuesday, 3 = Wednesday, 4 = Thursday, 5 = Friday, 6 = Saturday
	    "daysOfMonth": [1, 15, 30], // 這邊是示範,如果type是month, 這個array才有東西
	    "daysOfYears": [
	        {
		        "month": 1,
		        "day": 1
	        },
		    {
		        "month": 12,
		        "day": 25
		    }
		] // 這邊是示範,如果type是year, 這個array才有東西
    },
    "assetIds": [1001],
    "reverseVouchers": [
	    {
		    "voucherId": 1003,
		    "amount": 500
		}
    ]
}

Response

Response Example

it will response id of voucher that created

{
    "powerby": "iSunFA v2.0.0+1",
    "success": true,
    "code":  "200",
    "message": "Success",
    "payload": 1003,
}

Put Voucher

  • Description: Put voucher
  • If recurring event is edit, all upcoming event should be edit

Request url

PUT /company/voucher/[voucherId]

Session

Session data will be get from session, so not needed to be provided.

name type description
companyId number id of company
userId number id of user

Parameter

name type description required
voucherId number The id of certain voucher Yes

Body

It is same as post voucher

Response Example

it will response id of voucher that put

{
    "powerby": "iSunFA v2.0.0+1",
    "success": true,
    "code":  "200",
    "message": "Success",
    "payload": 1003,
}

Delete Voucher

  • Description: this will create an reverse

Request

Request usrl

DELETE /company/voucher/[voucherId]

Session

Session data will be get from session, so not needed to be provided.

name type description
companyId number id of company
userId number id of user

Parameter

name type description required
voucherId number The id of certain voucher to be delete Yes

Response

Response Example

it will response id of voucher that is created in reverse

{
    "powerby": "iSunFA v2.0.0+1",
    "success": true,
    "code":  "200",
    "message": "Success",
    "payload": 1003,
}

getUser

  • description: This API provides the functionality to get an user.

Request

Request url

GET `/user/:userId`

Query

name type description required default
userId string specific user number yes -

Request Example

GET `/user/1`

Response

Response Parameters

name type description
powerby string iSunFA v0.1.2+50
success boolean true or false
code string response code
message string description of response data
payload User or null response data or null

User

name type description
id number unique number of user
name string user name
fullName string user full name
email string user email
phone string user phone
imageId string user image id
agreementList string[] list of agreement hash
createdAt number creation timestamp
updatedAt number update timestamp

Response Example

  • 成功的回傳

    {
      "powerby": "iSunFA v0.1.2+50",
      "success": true,
      "code":  "200",
      "message": "Get User sucessfully",
      "payload": 
        {
          "id": 1,
          "name": "John",
          "fullName": "John Doe",
          "email": "[email protected]",
          "phone": "12345678",
          "imageId": "552c2dbf-997c-4b13-957e-ea03c45d2ec1.svg",
          "agreementList": ["agreement1", "agreement2"],
          "createdAt": 1723538422,
          "updatedAt": 1723538422
        },
    }
  • 失敗的回傳

    {
      "powerby": "iSunFA v0.1.2+50",
    "success": false,
    "code": "404",
    "message": "Resource not found",
    "payload": {} 
    }

deleteUser

  • description: This API provides the functionality to delete an user.

Request

Request url

DELETE `/user/:userId`

Query

name type description required default
userId string specific user number yes -

Request Example

DELETE `/user/1`

Response

Response Parameters

name type description
powerby string iSunFA v0.1.2+50
success boolean true or false
code string response code
message string description of response data
payload user

User

name type description
id number unique number of user
name string user name
fullName string user full name
email string user email
phone string user phone
imageId string user image id
agreementList string[] list of agreement hash
createdAt number creation timestamp
updatedAt number update timestamp

Response Example

  • 成功的回傳

    {
      "powerby": "iSunFA v0.1.2+50",
      "success": true,
      "code":  "200",
      "message": "Delete User sucessfully",
      "payload": 
        {
          "id": "1",
          "name": "John",
          "fullName": "John Doe",
          "email": "[email protected]",
          "phone": "12345678",
          "imageId": "552c2dbf-997c-4b13-957e-ea03c45d2ec1.svg",
          "agreementList": ["agreement1", "agreement2"],
          "createdAt": 1723538422,
          "updatedAt": 1723538422
        },
    }
  • 失敗的回傳

    {
      "powerby": "iSunFA v0.1.2+50",
    "success": false,
    "code": "404",
    "message": "Resource not found",
    "payload": {} 
    }

updateUser

  • description: This API provides the functionality to update an user.

Request

Request url