ตัวอย่างการใช้งาน TypeScript SDK
Authentication API
All URIs are relative to https://openapi.flowaccount.com/v1
Name | Method | path | Description |
---|---|---|---|
tokenPost | POST | /token | generate access token |
สำหรับลูกค้าที่เชื่อมต่อแบบ client credentials
Parameter
Name | type | Description | Notes |
---|---|---|---|
contentType | string | The media type of the resource | application/x-www-form-urlencoded |
grantType | string | The OAuth 2.0 grant type being used | client_credentials |
scope | string | The specific API access level | flowaccount-api |
clientId | string | The application's client ID | request clientId from FlowAccount |
clientSecret | string | The application's client secret | request clientSecret from FlowAccount |
Generate Access Token
import
openapi-sdk and document type
import { AuthenResponse, AuthenticationApi } from '@flowaccount/openApi-sdk'
- Setup type Config header Authenticate api
type ConfigAuthenticateApi = {
contentType: string
grantType: string
scope: string
clientId: string
clientSecret: string
guid?: string
}
- Create class
AuthenticateService
export class AuthenticateService {
private readonly configAuthenticateApi: ConfigAuthenticateApi
private authenticateApi: AuthenticationApi
constructor() {
this.configAuthenticateApi = <ConfigAuthenticateApi>{
contentType: 'application/x-www-form-urlencoded',
grantType: 'client_credentials',
scope: 'flowaccount-api',
clientId: 'your-client-id',
clientSecret: 'your-client-secret',
}
this.authenticateApi = new AuthenticationApi()
}
public async getAccessToken(): Promise<AuthenResponse> {
const { contentType, grantType, scope, clientId, clientSecret } = this.configAuthenticateApi
const res = await this.authenticateApi.tokenPost(contentType, grantType, scope, clientId, clientSecret)
return res.body
}
}
- Use method
getAccessToken
for generate access token
const authenticateService = new AuthenticateService()
const res = await authenticateService.getAccessToken()
สำหรับลูกค้าที่เชื่อมต่อแบบ OpenID
Parameter
Name | type | Description | Notes |
---|---|---|---|
contentType | string | The media type of the resource | application/x-www-form-urlencoded |
grantType | string | The OAuth 2.0 grant type being used | client_credentials |
scope | string | The specific API access level | flowaccount-api |
clientId | string | The application's client ID | request clientId from FlowAccount |
clientSecret | string | The application's client secret | request clientSecret from FlowAccount |
guid | string | A unique identifier for a customer |
Generate Access Token (OpenID)
import
openapi-sdk and document type
import { AuthenResponse, AuthenticationApi } from '@flowaccount/openApi-sdk'
- Setup type Config header Authenticate api
type ConfigAuthenticateApi = {
contentType: string
grantType: string
scope: string
clientId: string
clientSecret: string
guid?: string
}
- Setup class
AuthenticateService
export class AuthenticateService {
private readonly configAuthenticateApi: ConfigAuthenticateApi
private authenticateApi: AuthenticationApi
constructor() {
this.configAuthenticateApi = <ConfigAuthenticateApi>{
contentType: 'application/x-www-form-urlencoded',
grantType: 'client_credentials',
scope: 'flowaccount-api',
clientId: 'your-client-id',
clientSecret: 'your-client-secret',
}
this.authenticateApi = new AuthenticationApi()
}
public async getAccessToken(guid: string): Promise<AuthenResponse> {
const { contentType, grantType, scope, clientId, clientSecret} = this.configAuthenticateApi
const res = await this.authenticateApi.tokenPost(contentType, grantType, scope, clientId, clientSecret, guid)
return res.body
}
}
- Use method
getAccessToken
for generate access token
const guid = 'guid-customer'
const authenticateService = new AuthenticateService()
const res = await authenticateService.getAccessToken(guid)
Cash invoice API
Name | Method | path | Description |
---|---|---|---|
cashInvoicesPost | POST | /cash-invoices | Create cash invoices document |
Parameters
Name | type | Description | Notes |
---|---|---|---|
authorization | string | verify user | Bearer accessToken from tokenPost |
simpleDocument | SimpleDocument | Type Document | Ref.SimpleDocument Data Type |
Create cash invoice
import
methodCashInvoiceApi
and typeSimpleDocument
,SimpleDocumentResponse
import { CashInvoiceApi, SimpleDocument, SimpleDocumentResponse } from "@flowaccount/openapi-sdk"
- Create class
CashInvoicesService
export class CashInvoicesService {
private cashInvoicesApi: CashInvoiceApi
constructor() {
this.cashInvoicesApi = new CashInvoiceApi()
}
public async createCashInvoice(accessToken: string, document: SimpleDocument): Promise<SimpleDocumentResponse> {
const result = await this.cashInvoicesApi.cashInvoicesPost(accessToken, document)
return result.body
}
}
import
ClassSimpleProductItem
and typeSimpleDocument
import { SimpleDocument, SimpleProductItem } from "@flowaccount/openapi-sdk"
- Set
productItem
anddocument
const simpleItem = new SimpleProductItem()
simpleItem.sku = 'customer-product-sku'
simpleItem.name = 'customer-product-name'
simpleItem.type = 5
simpleItem.total = 1000
simpleItem.pricePerUnit = 200
simpleItem.quantity = 5
simpleItem.unitName = 'unit'
simpleItem.buyChartOfAccountCode = ''
simpleItem.sellChartOfAccountCode ='41110'
simpleItem.description = 'product-description'
const items = []
items.push(simpleItem)
const document = new SimpleDocument()
document.recordId = 0
document.contactCode = 'contact-code'
document.contactName = 'name-customer'
document.contactAddress = 'customer-contact-address'
document.contactTaxId = '1234567890123'
document.contactBranch = 'main-branch'
document.contactPerson = 'contact-person'
document.contactEmail = 'contact-email'
document.contactNumber = '099-999-9999'
document.contactZipCode = '11000'
document.contactGroup = 1
document.publishedOn = '2025-07-21'
document.creditType = 3
document.creditDays = 0
document.dueDate = '2025-07-21'
document.salesName = 'Sale man 001'
document.projectName = 'project SDK'
document.reference = 'INV2025'
document.isVatInclusive = false
document.isVat = false
document.useReceiptDeduction = false
document.subTotal = 1000
document.discountPercentage = 5
document.discountAmount = 50
document.totalAfterDiscount = 50
document.items = items
document.documentShowWithholdingTax = false
document.documentStructureType = 'Simple document'
document.grandTotal = 950
- Use method
createTaxInvoice
for create tax invoice document
const token = `Bearer ${ accessToken }`
const cashInvoicesService = new CashInvoicesService()
const res = await cashInvoicesService.createCashInvoice(token, document)
Tax invoices API
Name | Method | path | Description |
---|---|---|---|
taxInvoicesPost | POST | /tax-invoices | Create tax-invoices document |
Parameters
Name | type | Description | Notes |
---|---|---|---|
authorization | string | verify user | Bearer accessToken from tokenPost |
simpleDocument | SimpleDocument | Type Document | Ref.SimpleDocument Data Type |
Create tax invoice
import
methodTaxInvoiceApi
and typeSimpleDocument
,SimpleDocumentResponse
import { SimpleDocument, SimpleDocumentResponse, TaxInvoiceApi } from "@flowaccount/openapi-sdk"
- Create class
TaxInvoiceService
export class TaxInvoiceService {
private taxInvoiceApi: TaxInvoiceApi
constructor() {
this.taxInvoiceApi = new TaxInvoiceApi()
}
public async createTaxInvoice(accessToken: string, document: SimpleDocument): Promise<SimpleDocumentResponse> {
const result = await this.taxInvoiceApi.taxInvoicesPost(accessToken, document)
return result.body
}
}
import
ClassSimpleProductItem
and typeSimpleDocument
import { SimpleDocument, SimpleProductItem } from "@flowaccount/openapi-sdk"
- Set
productItem
anddocument
const simpleItem = new SimpleProductItem()
simpleItem.sku = 'customer-product-sku'
simpleItem.name = 'customer-product-name'
simpleItem.type = 5
simpleItem.total = 1000
simpleItem.pricePerUnit = 200
simpleItem.quantity = 5
simpleItem.unitName = 'unit'
simpleItem.buyChartOfAccountCode = ''
simpleItem.sellChartOfAccountCode ='41110'
simpleItem.description = 'product-description'
const items = []
items.push(simpleItem)
const document = new SimpleDocument()
document.recordId = 0
document.contactCode = 'contact-code'
document.contactName = 'name-customer'
document.contactAddress = 'customer-contact-address'
document.contactTaxId = '1234567890123'
document.contactBranch = 'main-branch'
document.contactPerson = 'contact-person'
document.contactEmail = 'contact-email'
document.contactNumber = '099-999-9999'
document.contactZipCode = '11000'
document.contactGroup = 1
document.publishedOn = '2025-07-21'
document.creditType = 3
document.creditDays = 0
document.dueDate = '2025-07-21'
document.salesName = 'Sale man 001'
document.projectName = 'project SDK'
document.reference = 'INV2025'
document.isVatInclusive = false
document.isVat = false
document.useReceiptDeduction = false
document.subTotal = 1000
document.discountPercentage = 5
document.discountAmount = 50
document.totalAfterDiscount = 50
document.items = items
document.documentShowWithholdingTax = false
document.documentStructureType = 'Simple document'
document.grandTotal = 950
- Use method
createTaxInvoice
for create tax invoice document
const token = `Bearer ${ accessToken }`
const taxInvoiceService = new TaxInvoiceService()
const res = await taxInvoiceService.createTaxInvoice(token, document)