Documentation ¶
Overview ¶
Package quickbooks provides access to Intuit's QuickBooks Online API.
NOTE: This library is very incomplete. I just implemented the minimum for my use case. Pull requests welcome :)
// Do this after you go through the normal OAuth process. var client = oauth2.NewClient(ctx, tokenSource) // Initialize the client handle. var qb = quickbooks.Client{ Client: client, Endpoint: quickbooks.SandboxEndpoint, RealmID: "some company account ID"' } // Make a request! var companyInfo, err = qb.FetchCompanyInfo()
Index ¶
- Constants
- type Account
- type AccountBasedExpenseLineDetail
- type Attachable
- type AttachableRef
- type BearerToken
- type Bill
- type Client
- func (c *Client) CreateAccount(account *Account) (*Account, error)
- func (c *Client) CreateAttachable(attachable *Attachable) (*Attachable, error)
- func (c *Client) CreateBill(bill *Bill) (*Bill, error)
- func (c *Client) CreateCustomer(customer *Customer) (*Customer, error)
- func (c *Client) DeleteAttachable(attachable *Attachable) error
- func (c *Client) DownloadAttachable(attachableId string) (string, error)
- func (c *Client) FetchCompanyInfo() (*CompanyInfo, error)
- func (c *Client) FetchCustomerByID(id string) (*Customer, error)
- func (c *Client) FetchCustomers() ([]Customer, error)
- func (c *Client) GetAccountByID(id string) (*Account, error)
- func (c *Client) GetAccounts(startpos int, pagesize int) ([]Account, error)
- func (c *Client) GetAttachable(attachableId string) (*Attachable, error)
- func (c *Client) GetAttachables(startpos int) ([]Attachable, error)
- func (c *Client) QueryAccount(selectStatement string) ([]Account, error)
- func (c *Client) QueryCustomerByName(name string) (*Customer, error)
- func (c *Client) UpdateAccount(account *Account) (*Account, error)
- func (c *Client) UpdateAttachable(attachable *Attachable) (*Attachable, error)
- func (c *Client) UpdateCustomer(customer *Customer) (*Customer, error)
- func (c *Client) UploadAttachable(attachable *Attachable, data io.Reader) (*Attachable, error)
- type CompanyInfo
- type ContentType
- type Customer
- type Date
- type DiscountLineDetail
- type DiscoveryAPI
- type EmailAddress
- type EndpointURL
- type Failure
- type Invoice
- type Item
- type Line
- type MemoRef
- type MetaData
- type PhysicalAddress
- type ReferenceType
- type SalesItemLineDetail
- type TaxLineDetail
- type TelephoneNumber
- type TxnTaxDetail
- type Vendor
- type WebSiteAddress
Constants ¶
const ( BankAccountType = "Bank" OtherCurrentAssetAccountType = "Other Current Asset" FixedAssetAccountType = "Fixed Asset" OtherAssetAccountType = "Other Asset" AccountsReceivableAccountType = "Accounts Receivable" EquityAccountType = "Equity" ExpenseAccountType = "Expense" OtherExpenseAccountType = "Other Expense" CostOfGoodsSoldAccountType = "Cost of Goods Sold" AccountsPayableAccountType = "Accounts Payable" CreditCardAccountType = "Credit Card" LongTermLiabilityAccountType = "Long Term Liability" OtherCurrentLiabilityAccountType = "Other Current Liability" IncomeAccountType = "Income" OtherIncomeAccountType = "Other Income" )
Variables ¶
This section is empty.
Functions ¶
This section is empty.
Types ¶
type Account ¶
type Account struct { ID string `json:"Id,omitempty"` Name string `json:",omitempty"` SyncToken string `json:",omitempty"` AcctNum string `json:",omitempty"` CurrencyRef ReferenceType `json:",omitempty"` ParentRef ReferenceType `json:",omitempty"` Description string `json:",omitempty"` Active bool `json:",omitempty"` MetaData MetaData `json:",omitempty"` SubAccount bool `json:",omitempty"` Classification string `json:",omitempty"` FullyQualifiedName string `json:",omitempty"` TxnLocationType string `json:",omitempty"` AccountType string `json:",omitempty"` CurrentBalanceWithSubAccounts json.Number `json:",omitempty"` AccountAlias string `json:",omitempty"` TaxCodeRef ReferenceType `json:",omitempty"` AccountSubType string `json:",omitempty"` CurrentBalance json.Number `json:",omitempty"` }
type AccountBasedExpenseLineDetail ¶
type AccountBasedExpenseLineDetail struct { AccountRef ReferenceType TaxAmount json.Number `json:",omitempty"` }
AccountBasedExpenseLineDetail
type Attachable ¶
type Attachable struct { ID string `json:"Id,omitempty"` SyncToken string `json:",omitempty"` FileName string `json:",omitempty"` Note string `json:",omitempty"` Category string `json:",omitempty"` ContentType ContentType `json:",omitempty"` PlaceName string `json:",omitempty"` AttachableRef []AttachableRef `json:",omitempty"` Long string `json:",omitempty"` Tag string `json:",omitempty"` Lat string `json:",omitempty"` MetaData MetaData `json:",omitempty"` FileAccessUri string `json:",omitempty"` Size json.Number `json:",omitempty"` ThumbnailFileAccessUri string `json:",omitempty"` TempDownloadUri string `json:",omitempty"` ThumbnailTempDownloadUri string `json:",omitempty"` }
type AttachableRef ¶
type AttachableRef struct { IncludeOnSend bool `json:",omitempty"` LineInfo string `json:",omitempty"` NoRefOnly bool `json:",omitempty"` // CustomField[0..n] Inactive bool `json:",omitempty"` EntityRef ReferenceType `json:",omitempty"` }
type BearerToken ¶
type Bill ¶
type Bill struct { ID string `json:"Id,omitempty"` VendorRef ReferenceType `json:",omitempty"` Line []Line SyncToken string `json:",omitempty"` CurrencyRef ReferenceType `json:",omitempty"` TxnDate Date `json:",omitempty"` APAccountRef ReferenceType `json:",omitempty"` SalesTermRef ReferenceType `json:",omitempty"` //LinkedTxn //GlobalTaxCalculation TotalAmt json.Number `json:",omitempty"` TransactionLocationType string `json:",omitempty"` DueDate Date `json:",omitempty"` MetaData MetaData `json:",omitempty"` DocNumber string PrivateNote string `json:",omitempty"` TxnTaxDetail TxnTaxDetail `json:",omitempty"` ExchangeRate json.Number `json:",omitempty"` DepartmentRef ReferenceType `json:",omitempty"` IncludeInAnnualTPAR bool `json:",omitempty"` HomeBalance json.Number `json:",omitempty"` RecurDataRef ReferenceType `json:",omitempty"` Balance json.Number `json:",omitempty"` }
type Client ¶
type Client struct { // Get this from oauth2.NewClient(). Client *http.Client // Set to ProductionEndpoint or SandboxEndpoint. Endpoint EndpointURL // The account ID you're connecting to. RealmID string // contains filtered or unexported fields }
Client is your handle to the QuickBooks API.
func NewQuickbooksClient ¶
func (*Client) CreateAccount ¶
CreateAccount creates the account
func (*Client) CreateAttachable ¶
func (c *Client) CreateAttachable(attachable *Attachable) (*Attachable, error)
CreateAttachable creates the attachable
func (*Client) CreateCustomer ¶
CreateCustomer creates the given Customer on the QuickBooks server, returning the resulting Customer object.
func (*Client) DeleteAttachable ¶
func (c *Client) DeleteAttachable(attachable *Attachable) error
DeleteAttachable deletes the attachable
func (*Client) DownloadAttachable ¶
DownloadAttachable downloads the attachable
func (*Client) FetchCompanyInfo ¶
func (c *Client) FetchCompanyInfo() (*CompanyInfo, error)
FetchCompanyInfo returns the QuickBooks CompanyInfo object. This is a good test to check whether you're connected.
func (*Client) FetchCustomerByID ¶
FetchCustomerByID returns a customer with a given ID.
func (*Client) FetchCustomers ¶
FetchCustomers gets the full list of Customers in the QuickBooks account.
func (*Client) GetAccountByID ¶
GetAccountByID returns an account with a given ID.
func (*Client) GetAccounts ¶
GetAccounts gets the account
func (*Client) GetAttachable ¶
func (c *Client) GetAttachable(attachableId string) (*Attachable, error)
GetAttachable gets the attachable
func (*Client) GetAttachables ¶
func (c *Client) GetAttachables(startpos int) ([]Attachable, error)
GetAttachables gets the attachables
func (*Client) QueryAccount ¶
QueryAccount gets the account
func (*Client) QueryCustomerByName ¶
QueryCustomerByName gets a customer with a given name.
func (*Client) UpdateAccount ¶
UpdateAccount updates the account
func (*Client) UpdateAttachable ¶
func (c *Client) UpdateAttachable(attachable *Attachable) (*Attachable, error)
UpdateAttachable updates the attachable
func (*Client) UpdateCustomer ¶
UpdateCustomer updates the given Customer on the QuickBooks server, returning the resulting Customer object. It's a sparse update, as not all QB fields are present in our Customer object.
func (*Client) UploadAttachable ¶
func (c *Client) UploadAttachable(attachable *Attachable, data io.Reader) (*Attachable, error)
UploadAttachable uploads the attachable
type CompanyInfo ¶
type CompanyInfo struct { CompanyName string LegalName string //CompanyAddr //CustomerCommunicationAddr //LegalAddr //PrimaryPhone //CompanyStartDate Date CompanyStartDate string FiscalYearStartMonth string Country string //Email //WebAddr SupportedLanguages string //NameValue Domain string ID string `json:"Id"` SyncToken string Metadata MetaData `json:",omitempty"` }
CompanyInfo describes a company account.
type ContentType ¶
type ContentType string
const ( AI ContentType = "application/postscript" CSV ContentType = "text/csv" DOC ContentType = "application/msword" DOCX ContentType = "application/vnd.openxmlformats-officedocument.wordprocessingml.document" EPS ContentType = "application/postscript" GIF ContentType = "image/gif" JPEG ContentType = "image/jpeg" JPG ContentType = "image/jpg" ODS ContentType = "application/vnd.oasis.opendocument.spreadsheet" PDF ContentType = "application/pdf" PNG ContentType = "image/png" RTF ContentType = "text/rtf" TIF ContentType = "image/tif" TXT ContentType = "text/plain" XLS ContentType = "application/vnd/ms-excel" XLSX ContentType = "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet" XML ContentType = "text/xml" )
type Customer ¶
type Customer struct { ID string `json:"Id,omitempty"` SyncToken string `json:",omitempty"` MetaData MetaData `json:",omitempty"` Title null.String `json:",omitempty"` GivenName null.String `json:",omitempty"` MiddleName null.String `json:",omitempty"` FamilyName null.String `json:",omitempty"` Suffix null.String `json:",omitempty"` DisplayName string `json:",omitempty"` FullyQualifiedName null.String `json:",omitempty"` CompanyName null.String `json:",omitempty"` PrintOnCheckName string `json:",omitempty"` Active bool `json:",omitempty"` PrimaryPhone TelephoneNumber `json:",omitempty"` AlternatePhone TelephoneNumber `json:",omitempty"` Mobile TelephoneNumber `json:",omitempty"` Fax TelephoneNumber `json:",omitempty"` PrimaryEmailAddr *EmailAddress `json:",omitempty"` WebAddr *WebSiteAddress `json:",omitempty"` //DefaultTaxCodeRef Taxable *bool `json:",omitempty"` TaxExemptionReasonID *string `json:"TaxExemptionReasonId,omitempty"` BillAddr *PhysicalAddress `json:",omitempty"` ShipAddr *PhysicalAddress `json:",omitempty"` Notes string `json:",omitempty"` Job null.Bool `json:",omitempty"` BillWithParent bool `json:",omitempty"` ParentRef ReferenceType `json:",omitempty"` Level int `json:",omitempty"` //SalesTermRef //PaymentMethodRef Balance json.Number `json:",omitempty"` OpenBalanceDate Date `json:",omitempty"` BalanceWithJobs json.Number `json:",omitempty"` }
Customer represents a QuickBooks Customer object.
func (Customer) GetAddress ¶
func (c Customer) GetAddress() PhysicalAddress
GetAddress prioritizes the ship address, but falls back on bill address
func (Customer) GetPrimaryEmail ¶
GetPrimaryEmail de-nests the PrimaryEmailAddr object
func (Customer) GetWebsite ¶
GetWebsite de-nests the Website object
type Date ¶
Date represents a Quickbooks date
func (*Date) UnmarshalJSON ¶
UnmarshalJSON removes time from parsed date
type DiscountLineDetail ¶
DiscountLineDetail ...
type DiscoveryAPI ¶
type DiscoveryAPI struct { Issuer string `json:"issuer"` AuthorizationEndpoint string `json:"authorization_endpoint"` TokenEndpoint string `json:"token_endpoint"` UserinfoEndpoint string `json:"userinfo_endpoint"` RevocationEndpoint string `json:"revocation_endpoint"` JwksUri string `json:"jwks_uri"` }
func CallDiscoveryAPI ¶
func CallDiscoveryAPI(discoveryEndpoint EndpointURL) *DiscoveryAPI
Call the discovery API. See https://developer.intuit.com/app/developer/qbo/docs/develop/authentication-and-authorization/openid-connect#discovery-document
type EmailAddress ¶
type EmailAddress struct {
Address string `json:",omitempty"`
}
EmailAddress represents a QuickBooks email address.
type EndpointURL ¶
type EndpointURL string
EndpointURL specifies the endpoint to connect to.
const ( // ProductionEndpoint is for live apps. ProductionEndpoint EndpointURL = "https://quickbooks.api.intuit.com" // SandboxEndpoint is for testing. SandboxEndpoint EndpointURL = "https://sandbox-quickbooks.api.intuit.com" // DiscoverySandboxEndpoint is for testing. DiscoverySandboxEndpoint EndpointURL = "https://developer.api.intuit.com/.well-known/openid_sandbox_configuration" // DiscoveryProductionEndpoint is for live apps. DiscoveryProductionEndpoint EndpointURL = "https://developer.api.intuit.com/.well-known/openid_configuration" )
type Failure ¶
type Failure struct { Fault struct { Error []struct { Message string Detail string Code string `json:"code"` Element string `json:"element"` } Type string `json:"type"` } Time Date `json:"time"` }
Failure is the outermost struct that holds an error response.
type Invoice ¶
type Invoice struct { ID string `json:"Id,omitempty"` SyncToken string `json:",omitempty"` MetaData MetaData `json:",omitempty"` //CustomField DocNumber string `json:",omitempty"` TxnDate Date `json:",omitempty"` //DepartmentRef PrivateNote string `json:",omitempty"` //LinkedTxn Line []Line TxnTaxDetail TxnTaxDetail `json:",omitempty"` CustomerRef ReferenceType CustomerMemo MemoRef `json:",omitempty"` BillAddr PhysicalAddress `json:",omitempty"` ShipAddr PhysicalAddress `json:",omitempty"` ClassRef ReferenceType `json:",omitempty"` SalesTermRef ReferenceType `json:",omitempty"` DueDate Date `json:",omitempty"` //GlobalTaxCalculation ShipMethodRef ReferenceType `json:",omitempty"` ShipDate Date `json:",omitempty"` TrackingNum string `json:",omitempty"` TotalAmt json.Number `json:",omitempty"` //CurrencyRef ExchangeRate json.Number `json:",omitempty"` HomeAmtTotal json.Number `json:",omitempty"` HomeBalance json.Number `json:",omitempty"` ApplyTaxAfterDiscount bool `json:",omitempty"` PrintStatus string `json:",omitempty"` EmailStatus string `json:",omitempty"` BillEmail EmailAddress `json:",omitempty"` BillEmailCC EmailAddress `json:"BillEmailCc,omitempty"` BillEmailBCC EmailAddress `json:"BillEmailBcc,omitempty"` //DeliveryInfo Balance json.Number `json:",omitempty"` TxnSource string `json:",omitempty"` AllowOnlineCreditCardPayment bool `json:",omitempty"` AllowOnlineACHPayment bool `json:",omitempty"` Deposit json.Number `json:",omitempty"` DepositToAccountRef ReferenceType `json:",omitempty"` }
Invoice represents a QuickBooks Invoice object.
type Item ¶
type Item struct { ID string `json:"Id,omitempty"` SyncToken string `json:",omitempty"` //MetaData Name string SKU string `json:"Sku,omitempty"` Description string `json:",omitempty"` Active bool `json:",omitempty"` //SubItem //ParentRef //Level //FullyQualifiedName Taxable bool `json:",omitempty"` SalesTaxIncluded bool `json:",omitempty"` UnitPrice json.Number `json:",omitempty"` Type string IncomeAccountRef ReferenceType ExpenseAccountRef ReferenceType PurchaseDesc string `json:",omitempty"` PurchaseTaxIncluded bool `json:",omitempty"` PurchaseCost json.Number `json:",omitempty"` AssetAccountRef ReferenceType TrackQtyOnHand bool `json:",omitempty"` //InvStartDate Date QtyOnHand json.Number `json:",omitempty"` SalesTaxCodeRef ReferenceType `json:",omitempty"` PurchaseTaxCodeRef ReferenceType `json:",omitempty"` }
Item represents a QuickBooks Item object (a product type).
type Line ¶
type Line struct { ID string `json:"Id,omitempty"` LineNum int `json:",omitempty"` Description string `json:",omitempty"` Amount json.Number DetailType string AccountBasedExpenseLineDetail AccountBasedExpenseLineDetail SalesItemLineDetail SalesItemLineDetail `json:",omitempty"` DiscountLineDetail DiscountLineDetail `json:",omitempty"` TaxLineDetail TaxLineDetail `json:",omitempty"` }
Line ...
type MemoRef ¶
type MemoRef struct {
Value string `json:"value,omitempty"`
}
MemoRef represents a QuickBooks MemoRef object.
type PhysicalAddress ¶
type PhysicalAddress struct { ID string `json:"Id,omitempty"` // These lines are context-dependent! Read the QuickBooks API carefully. Line1 string `json:",omitempty"` Line2 string `json:",omitempty"` Line3 string `json:",omitempty"` Line4 string `json:",omitempty"` Line5 string `json:",omitempty"` City string `json:",omitempty"` Country string `json:",omitempty"` // A.K.A. State. CountrySubDivisionCode string `json:",omitempty"` PostalCode string `json:",omitempty"` Lat string `json:",omitempty"` Long string `json:",omitempty"` }
PhysicalAddress represents a QuickBooks address.
type ReferenceType ¶
type ReferenceType struct { Value string `json:"value,omitempty"` Name string `json:"name,omitempty"` Type string `json:"type,omitempty"` }
ReferenceType represents a QuickBooks reference to another object.
type SalesItemLineDetail ¶
type SalesItemLineDetail struct { ItemRef ReferenceType `json:",omitempty"` ClassRef ReferenceType `json:",omitempty"` UnitPrice json.Number `json:",omitempty"` //MarkupInfo Qty float32 `json:",omitempty"` ItemAccountRef ReferenceType `json:",omitempty"` TaxCodeRef ReferenceType `json:",omitempty"` ServiceDate Date `json:",omitempty"` TaxInclusiveAmt json.Number `json:",omitempty"` DiscountRate json.Number `json:",omitempty"` DiscountAmt json.Number `json:",omitempty"` }
SalesItemLineDetail ...
type TaxLineDetail ¶
type TaxLineDetail struct { PercentBased bool `json:",omitempty"` NetAmountTaxable json.Number `json:",omitempty"` //TaxInclusiveAmount json.Number `json:",omitempty"` //OverrideDeltaAmount TaxPercent json.Number `json:",omitempty"` TaxRateRef ReferenceType }
TaxLineDetail ...
type TelephoneNumber ¶
type TelephoneNumber struct {
FreeFormNumber string
}
TelephoneNumber represents a QuickBooks phone number.
type TxnTaxDetail ¶
type TxnTaxDetail struct { TxnTaxCodeRef ReferenceType `json:",omitempty"` TotalTax json.Number `json:",omitempty"` TaxLine []Line `json:",omitempty"` }
TxnTaxDetail ...
type Vendor ¶
type Vendor struct { ID string `json:"Id,omitempty"` SyncToken string `json:",omitempty"` Title string `json:",omitempty"` GivenName string `json:",omitempty"` MiddleName string `json:",omitempty"` Suffix string `json:",omitempty"` FamilyName string `json:",omitempty"` PrimaryEmailAddr EmailAddress `json:",omitempty"` DisplayName string `json:",omitempty"` // ContactInfo APAccountRef ReferenceType `json:",omitempty"` TermRef ReferenceType `json:",omitempty"` GSTIN string `json:",omitempty"` Fax TelephoneNumber `json:",omitempty"` BusinessNumber string `json:",omitempty"` // CurrencyRef HasTPAR bool `json:",omitempty"` TaxReportingBasis string `json:",omitempty"` Mobile TelephoneNumber `json:",omitempty"` PrimaryPhone TelephoneNumber `json:",omitempty"` Active bool `json:",omitempty"` AlternatePhone TelephoneNumber `json:",omitempty"` MetaData MetaData `json:",omitempty"` Vendor1099 bool `json:",omitempty"` BillRate json.Number `json:",omitempty"` WebAddr *WebSiteAddress `json:",omitempty"` CompanyName string `json:",omitempty"` // VendorPaymentBankDetail TaxIdentifier string `json:",omitempty"` AcctNum string `json:",omitempty"` GSTRegistrationType string `json:",omitempty"` PrintOnCheckName string `json:",omitempty"` BillAddr *PhysicalAddress `json:",omitempty"` Balance json.Number `json:",omitempty"` }
Vendor describes a vendor.
type WebSiteAddress ¶
type WebSiteAddress struct {
URI string
}
WebSiteAddress represents a Quickbooks Website