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 ¶
- type AccountBasedExpenseLineDetail
- type Attachable
- type AttachableRef
- type BearerToken
- type Bill
- type Client
- 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) CreateInvoice(inv *Invoice) (*Invoice, error)
- func (c *Client) CreatePayment(inv *Payment) (*Payment, error)
- func (c *Client) CreateRefund(inv *Refund) (*Refund, error)
- func (c *Client) CreateVendor(vendor *Vendor) (*Vendor, error)
- func (c *Client) DeleteAttachable(attachable *Attachable) error
- func (c *Client) DeleteInvoice(id, syncToken string) 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) FetchInvoices() ([]Invoice, error)
- func (c *Client) FetchItem(id string) (*Item, error)
- func (c *Client) FetchItems() ([]Item, error)
- func (c *Client) GetAttachable(attachableId string) (*Attachable, error)
- func (c *Client) GetAttachables(startpos int) ([]Attachable, error)
- func (c *Client) GetVendors(startpos int) ([]Vendor, error)
- func (c *Client) RefreshToken(refreshToken string) (*BearerToken, error)
- func (c *Client) RetrieveBearerToken(authorizationCode string) (*BearerToken, error)
- func (c *Client) RevokeToken(refreshToken string) error
- func (c *Client) UpdateAttachable(attachable *Attachable) (*Attachable, error)
- func (c *Client) UpdateCustomer(customer *Customer) (*Customer, error)
- func (c *Client) UpdateVendor(vendor *Vendor) (*Vendor, 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 Payment
- type PaymentLine
- type PhysicalAddress
- type ReferenceType
- type Refund
- type RefundLine
- type SalesItemLineDetail
- type TaxLineDetail
- type TelephoneNumber
- type TxnLine
- type TxnTaxDetail
- type Vendor
- type WebSiteAddress
Constants ¶
This section is empty.
Variables ¶
This section is empty.
Functions ¶
This section is empty.
Types ¶
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) 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) CreateInvoice ¶
CreateInvoice creates the given Invoice on the QuickBooks server, returning the resulting Invoice object.
func (*Client) CreatePayment ¶
CreatePayment creates the given Payment on the QuickBooks server, returning the resulting Payment object.
func (*Client) CreateRefund ¶
CreateRefund creates the given Refund on the QuickBooks server, returning the resulting Refund object.
func (*Client) CreateVendor ¶
CreateVendor creates the vendor
func (*Client) DeleteAttachable ¶
func (c *Client) DeleteAttachable(attachable *Attachable) error
DeleteAttachable deletes the attachable
func (*Client) DeleteInvoice ¶
DeleteInvoice deletes the given Invoice by ID and sync token from the QuickBooks server.
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) FetchInvoices ¶
FetchInvoices gets the full list of Invoices in the QuickBooks account.
func (*Client) FetchItems ¶
FetchItems returns the list of Items in the QuickBooks account. These are basically product types, and you need them to create invoices.
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) GetVendors ¶
GetVendors gets the vendors
func (*Client) RefreshToken ¶
func (c *Client) RefreshToken(refreshToken string) (*BearerToken, error)
Call the refresh endpoint to generate new tokens
func (*Client) RetrieveBearerToken ¶
func (c *Client) RetrieveBearerToken(authorizationCode string) (*BearerToken, error)
Method to retrieve access token (bearer token) This method can only be called once
func (*Client) RevokeToken ¶
Call the revoke endpoint to revoke tokens
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) UpdateVendor ¶
UpdateVendor updates the vendor
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 Payment ¶
type Payment struct {
ID string `json:"Id,omitempty"`
TxnDate Date `json:",omitempty"`
TotalAmt json.Number `json:",omitempty"`
ProcessPayment bool `json:",omitempty"`
CustomerRef ReferenceType
Line []PaymentLine
}
type PaymentLine ¶
type PaymentLine struct {
ID string `json:"Id,omitempty"`
LineNum int `json:",omitempty"`
Amount json.Number
LinkedTxn []TxnLine
}
PaymentLine ...
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 Refund ¶
type Refund struct {
ID string `json:"Id,omitempty"`
TxnDate Date `json:",omitempty"`
Line []RefundLine
DepositToAccountRef ReferenceType `json:",omitempty"`
CustomerRef ReferenceType `json:",omitempty"`
}
type RefundLine ¶
type RefundLine struct {
ID string `json:"Id,omitempty"`
DetailType string `json:",omitempty"`
Amount json.Number `json:",omitempty"`
SalesItemLineDetail SalesItemLineDetail `json:",omitempty"`
}
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