A Ruby interface to the TaxJar Sales Tax API. TaxJar makes sales tax filing easier for online sellers and merchants. See local jurisdictional tax reports, get payment reminders, and more. You can use our API to access TaxJar API endpoints, which can get information on sales tax rates, categories or upload transactions.
- This wrapper supports 100% of SmartCalcs v2
- Data returned from API calls are mapped to Ruby objects
Ruby 2.0 or greater
Installing this gem also bundles the following dependencies:
- http - Fast Ruby HTTP client with a chainable API and full streaming support.
- addressable - Replacement for the URI implementation that is part of Ruby's standard library. It more closely conforms to the relevant RFCs and adds support for IRIs and URI templates.
- memoizable - Memoize method return values.
- model_attribute - Type casted attributes for non-ActiveRecord models. Forked to handle floats and more types.
Add this line to your application's Gemfile:
gem 'taxjar-ruby', require: 'taxjar'
And then execute:
$ bundle install
Or install it yourself as:
$ gem install taxjar-ruby
Generate an API token from TaxJar. Copy and paste your API token when configuring your application:
require 'taxjar'
Taxjar.configure do |config|
config.api_key = '1234567890'
config.base_url = 'https://api.taxjar.com'
end
require 'taxjar'
client = Taxjar::Client.new
You're now ready to use TaxJar! Check out our quickstart guide to get up and running quickly.
client.categories
require 'taxjar'
client = Taxjar::Client.new
client.categories
[
#<Taxjar::Category:0x00000a @attrs={
:name => 'Digital Goods',
:product_tax_code => 31000,
:description => 'Digital products transferred electronically.'
}>,
#<Taxjar::Category:0x00000a @attrs={
:name => 'Clothing',
:product_tax_code => 20010,
:description => 'All human wearing apparel suitable for general use'
}>,
#<Taxjar::Category:0x00000a @attrs={
:name => 'Non-Prescription',
:product_tax_code => 51010,
:description => 'Drugs for human use without a prescription'
}>
]
client.rates_for_location
require 'taxjar'
client = Taxjar::Client.new
# United States (ZIP+4)
rates = client.rates_for_location('90404-3370')
# United States (ZIP w/ Optional Params)
rates = client.rates_for_location('90404', {
:city => 'SANTA MONICA',
:country => 'US'
})
# International Examples (Requires City and Country)
rates = client.rates_for_location('V5K0A1', {
:city => 'VANCOUVER',
:country => 'CA'
})
rates = client.rates_for_location('00150', {
:city => 'HELSINKI',
:country => 'FI'
})
#<Taxjar::Rate:0x00000a @attrs={
:zip => '90002',
:state => 'CA',
:state_rate => 0.065,
:county => 'LOS ANGELES',
:county_rate => 0.01,
:city => 'WATTS',
:city_rate => 0,
:combined_district_rate => 0.015,
:combined_rate => 0.09,
:freight_taxable => false
}>
#<Taxjar::Rate:0x00000a @attrs={
:zip => 'V5K0A1',
:city => 'Vancouver',
:state => 'BC',
:country => 'CA',
:combined_rate => 0.12,
:freight_taxable => true
}>
#<Taxjar::Rate:0x00000a @attrs={
:country => 'FI',
:name => 'Finland',
:standard_rate => 0.24,
:reduced_rate => nil,
:super_reduced_rate => nil,
:parking_rate => nil,
:distance_sale_threshold => nil,
:freight_taxable => true
}>
client.tax_for_order
require 'taxjar'
client = Taxjar::Client.new
client.tax_for_order({
:to_country => 'US',
:to_zip => '90002',
:to_city => 'Los Angeles',
:to_state => 'CA',
:from_country => 'US',
:from_zip => '92093',
:from_city => 'San Diego',
:amount => 15,
:shipping => 1.5,
:nexus_addresses => [{:address_id => 1,
:country => 'US',
:zip => '93101',
:state => 'CA',
:city => 'Santa Barbara',
:street => '1218 State St.'}],
:line_items => [{:quantity => 1,
:unit_price => 15,
:product_tax_code => 20010}]
})
#<Taxjar::Tax:0x00000a @attrs={
:order_total_amount => 16.5,
:amount_to_collect => 1.35,
:has_nexus => true,
:freight_taxable => false,
:tax_source => 'destination',
:breakdown => #<Taxjar::Breakdown:0x00000a @attrs={
:state_taxable_amount => 15,
:state_tax_collectable => 0.98,
:county_taxable_amount => 15,
:county_tax_collectable => 0.15,
:city_taxable_amount => 0,
:city_tax_collectable => 0,
:special_district_taxable_amount => 15,
:special_district_tax_collectable => 0.22,
:line_items => [
#<Taxjar::BreakdownLineItem:0x00000a @attrs={
:id => '1',
:state_taxable_amount => 15,
:state_sales_tax_rate => 0.065,
:county_taxable_amount => 15,
:county_tax_rate => 0.01,
:city_taxable_amount => 0,
:city_tax_rate => 0,
:special_district_taxable_amount => 15,
:special_tax_rate => 0.015
}>
]
}>
}>
#<Taxjar::Tax:0x00000a @attrs={
:order_total_amount => 27.12,
:shipping => 1.5,
:taxable_amount => 27.12,
:amount_to_collect => 5.42,
:rate => 0.2,
:has_nexus => true,
:freight_taxable => true,
:tax_source => 'origin'
}>
client.list_orders
require 'taxjar'
client = Taxjar::Client.new
client.list_orders({:from_transaction_date => '2014/01/01',
:to_transaction_date => '2015/05/30'})
['20', '21', '22']
client.show_order
require 'taxjar'
client = Taxjar::Client.new
client.show_order('123')
#<Taxjar::Order:0x00000a @attrs={
:transaction_id => '123',
:user_id => 11836,
:transaction_date => '2015-05-14T00:00:00Z',
:transaction_reference_id => nil,
:from_country => 'US',
:from_zip => 93107,
:from_state => 'CA',
:from_city => 'SANTA BARBARA',
:from_street => '1281 State St',
:to_country => 'US',
:to_zip => 90002,
:to_state => 'CA',
:to_city => 'LOS ANGELES',
:to_street => '123 Palm Grove Ln',
:amount => 17,
:shipping => 2,
:sales_tax => 0.95,
:line_items => [
{
:id => '1',
:quantity => 1,
:product_identifier => '12-34243-0',
:product_tax_code => nil,
:description => 'Heavy Widget',
:unit_price => 15,
:discount => 0,
:sales_tax => 0.95
}
]
}>
client.create_order
require 'taxjar'
client = Taxjar::Client.new
order = client.create_order({
:transaction_id => '123',
:transaction_date => '2015/05/14',
:from_state => 'CA',
:from_city => 'Santa Barbara',
:from_street => '1218 State St',
:from_country => 'US',
:from_zip => '93101',
:to_country => 'US',
:to_state => 'CA',
:to_city => 'Los Angeles',
:to_street => '123 Palm Grove Ln',
:to_zip => '90002',
:amount => 16.5,
:shipping => 1.5,
:sales_tax => 0.95,
:line_items => [{:quantity => 1,
:product_identifier => '12-34243-9',
:description => 'Fuzzy Widget',
:unit_price => 15,
:sales_tax => 0.95}]
})
#<Taxjar::Order:0x00000a @attrs={
:transaction_id => '20',
:user_id => 11836,
:transaction_date => '2015-05-14T00:00:00Z',
:transaction_reference_id => nil,
:from_country => 'US',
:from_zip => 93101,
:from_state => 'CA',
:from_city => 'SANTA BARBARA',
:from_street => '1218 State St',
:to_country => 'US',
:to_zip => 90002,
:to_state => 'CA',
:to_city => 'LOS ANGELES',
:to_street => '123 Palm Grove Ln',
:amount => 16.5,
:shipping => 1.5,
:sales_tax => 0.95,
:line_items => [
{
:id => '1',
:quantity => 1,
:product_identifier => '12-34243-9',
:product_tax_code => nil,
:description => 'Fuzzy Widget',
:unit_price => 15,
:discount => 0,
:sales_tax => 0.95
}
]
}>
client.update_order
require 'taxjar'
client = Taxjar::Client.new
order = client.update_order({
:transaction_id => '123',
:amount => 17,
:shipping => 2,
:line_items => [{:quantity => 1,
:product_identifier => '12-34243-0',
:description => 'Heavy Widget',
:unit_price => 15,
:discount => 0,
:sales_tax => 0.95}]
})
#<Taxjar::Order:0x00000a @attrs={
:transaction_id => '123',
:user_id => 11836,
:transaction_date => '2015-05-14T00:00:00Z',
:transaction_reference_id => nil,
:from_country => 'US',
:from_zip => 93101,
:from_state => 'CA',
:from_city => 'SANTA BARBARA',
:from_street => '1218 State St',
:to_country => 'US',
:to_zip => 90002,
:to_state => 'CA',
:to_city => 'LOS ANGELES',
:to_street => '123 Palm Grove Ln',
:amount => 17,
:shipping => 2,
:sales_tax => 0.95,
:line_items => [
{
:id => '1',
:quantity => 1,
:product_identifier => '12-34243-0',
:product_tax_code => nil,
:description => 'Heavy Widget',
:unit_price => 15,
:discount => 0,
:sales_tax => 0.95
}
]
}>
client.delete_order
require 'taxjar'
client = Taxjar::Client.new
client.delete_order('123')
#<Taxjar::Order:0x00000a @attrs={
:transaction_id => '123',
:user_id => 11836,
:transaction_date => '2015-05-14T00:00:00Z',
:transaction_reference_id => nil,
:from_country => 'US',
:from_zip => 93101,
:from_state => 'CA',
:from_city => 'SANTA BARBARA',
:from_street => '1218 State St',
:to_country => 'US',
:to_zip => 90002,
:to_state => 'CA',
:to_city => 'LOS ANGELES',
:to_street => '123 Palm Grove Ln',
:amount => 17,
:shipping => 2,
:sales_tax => 0.95,
:line_items => [
{
:id => '1',
:quantity => 1,
:product_identifier => '12-34243-0',
:product_tax_code => nil,
:description => 'Heavy Widget',
:unit_price => 15,
:discount => 0,
:sales_tax => 0.95
}
]
}>
client.list_refunds
require 'taxjar'
client = Taxjar::Client.new
client.list_refunds({:from_transaction_date => '2014/01/01',
:to_transaction_date => '2015/05/30'})
['203', '204', '205']
client.show_refund
require 'taxjar'
client = Taxjar::Client.new
client.show_refund('321')
#<Taxjar::Refund:0x00000a @attrs={
:transaction_id => '321',
:user_id => 11836,
:transaction_date => '2015-06-14T00:00:00Z',
:transaction_reference_id => 123,
:from_country => 'US',
:from_zip => 93107,
:from_state => 'CA',
:from_city => 'SANTA BARBARA',
:from_street => '1218 State St',
:to_country => 'US',
:to_zip => 90002,
:to_state => 'CA',
:to_city => 'LOS ANGELES',
:to_street => '123 Palm Grove Ln',
:amount => 17,
:shipping => 2,
:sales_tax => 0.95,
:line_items => [
{
:id => '1',
:quantity => 1,
:product_identifier => '12-34243-0',
:product_tax_code => nil,
:description => 'Heavy Widget',
:unit_price => 15,
:discount => 0,
:sales_tax => 0.95
}
]
}>
client.create_refund
require 'taxjar'
client = Taxjar::Client.new
refund = client.create_refund({
:transaction_id => '321',
:transaction_date => '2015/05/14',
:transaction_reference_id => '123',
:from_country => 'US',
:from_zip => '93107',
:from_state => 'CA',
:from_city => 'Santa Barbara',
:from_street => '1218 State St',
:to_country => 'US',
:to_zip => '90002',
:to_state => 'CA',
:to_city => 'Los Angeles',
:to_street => '123 Palm Grove Ln',
:amount => 16.5,
:shipping => 1.5,
:sales_tax => 0.95,
:line_items => [{:quantity => 1,
:product_identifier => '12-34243-9',
:description => 'Fuzzy Widget',
:unit_price => 15,
:sales_tax => 0.95}]
})
#<Taxjar::Refund:0x00000a @attrs={
:transaction_id => '321',
:user_id => 11836,
:transaction_date => '2015-06-14T00:00:00Z',
:transaction_reference_id => '123',
:from_country => 'US',
:from_zip => 93107,
:from_state => 'CA',
:from_city => 'SANTA BARBARA',
:from_street => '1218 State St',
:to_country => 'US',
:to_zip => 90002,
:to_state => 'CA',
:to_city => 'LOS ANGELES',
:to_street => '123 Palm Grove Ln',
:amount => 16.5,
:shipping => 1.5,
:sales_tax => 0.95,
:line_items => [
{
:id => '1',
:quantity => 1,
:product_identifier => '12-34243-0',
:product_tax_code => nil,
:description => 'Heavy Widget',
:unit_price => 15,
:discount => 0,
:sales_tax => 0.95
}
]
}>
client.update_refund
require 'taxjar'
client = Taxjar::Client.new
refund = client.update_refund({
:transaction_id => '321',
:amount => 17,
:shipping => 2,
:sales_tax => 0.95,
:line_items => [{:quantity => 1,
:product_identifier => '12-34243-9',
:description => 'Heavy Widget',
:unit_price => 15,
:sales_tax => 0.95}]
})
#<Taxjar::Refund:0x00000a @attrs={
:transaction_id => '321',
:user_id => 11836,
:transaction_date => '2015-06-14T00:00:00Z',
:transaction_reference_id => '123',
:from_country => 'US',
:from_zip => 93107,
:from_state => 'CA',
:from_city => 'SANTA BARBARA',
:from_street => '1218 State St',
:to_country => 'US',
:to_zip => 90002,
:to_state => 'CA',
:to_city => 'LOS ANGELES',
:to_street => '123 Palm Grove Ln',
:amount => 17.95,
:shipping => 2,
:sales_tax => 0.95,
:line_items => [
{
:id => '1',
:quantity => 1,
:product_identifier => '12-34243-9',
:product_tax_code => nil,
:description => 'Heavy Widget',
:unit_price => 15,
:discount => 0,
:sales_tax => 0.95
}
]
}>
client.delete_refund
require 'taxjar'
client = Taxjar::Client.new
client.delete_refund('321')
#<Taxjar::Refund:0x00000a @attrs={
:transaction_id => '321',
:user_id => 11836,
:transaction_date => '2015-06-14T00:00:00Z',
:transaction_reference_id => '123',
:from_country => 'US',
:from_zip => 93107,
:from_state => 'CA',
:from_city => 'SANTA BARBARA',
:from_street => '1218 State St',
:to_country => 'US',
:to_zip => 90002,
:to_state => 'CA',
:to_city => 'LOS ANGELES',
:to_street => '123 Palm Grove Ln',
:amount => 17.95,
:shipping => 2,
:sales_tax => 0.95,
:line_items => [
{
:id => '1',
:quantity => 1,
:product_identifier => '12-34243-9',
:product_tax_code => nil,
:description => 'Heavy Widget',
:unit_price => 15,
:discount => 0,
:sales_tax => 0.95
}
]
}>
client.nexus_regions
require 'taxjar'
client = Taxjar::Client.new
nexus_regions = client.nexus_regions
[
#<Taxjar::NexusRegion:0x00000a @attrs={
:country_code => 'US',
:country => 'United States',
:region_code => 'CA',
:region => 'California'
}>,
#<Taxjar::NexusRegion:0x00000a @attrs={
:country_code => 'US',
:country => 'United States',
:region_code => 'NY',
:region => 'New York'
}>,
#<Taxjar::NexusRegion:0x00000a @attrs={
:country_code => 'US',
:country => 'United States',
:region_code => 'WA',
:region => 'Washington'
}>
]
client.validate
require 'taxjar'
client = Taxjar::Client.new
validation = client.validate({
:vat => 'FR40303265045'
})
#<Taxjar::Validation:0x00000a @attrs={
:valid => true,
:exists => true,
:vies_available => true,
:vies_response => {
:country_code => 'FR',
:vat_number => '40303265045',
:request_date => '2016-02-10',
:valid => true,
:name => 'SA SODIMAS',
:address => "11 RUE AMPERE\n26600 PONT DE L ISERE"
}
}>
client.summary_rates
require 'taxjar'
client = Taxjar::Client.new
summarized_rates = client.summary_rates
[
#<Taxjar::SummaryRate:0x00000a @attrs={
:country_code => 'US',
:country => 'United States',
:region_code => 'CA',
:region => 'California',
:minimum_rate => {
:label => 'State Tax',
:rate => 0.065
},
:average_rate => {
:label => 'Tax',
:rate => 0.0827
}
}>,
#<Taxjar::SummaryRate:0x00000a @attrs={
:country_code => 'CA',
:country => 'Canada',
:region_code => 'BC',
:region => 'British Columbia',
:minimum_rate => {
:label => 'GST',
:rate => 0.05
},
:average_rate => {
:label => 'PST',
:rate => 0.12
}
}>,
#<Taxjar::SummaryRate:0x00000a @attrs={
:country_code => 'UK',
:country => 'United Kingdom',
:region_code => nil,
:region => nil,
:minimum_rate => {
:label => 'VAT',
:rate => 0.2
},
:average_rate => {
:label => 'VAT',
:rate => 0.2
}
}>
]
Pass a hash to any API method above for the following options:
Set request timeout in seconds:
client.tax_for_order({ timeout: 30 })
When invalid data is sent to TaxJar or we encounter an error, we’ll throw a Taxjar::Error
with the HTTP status code and error message. To catch these exceptions, refer to the example below. Click here for a list of common error response classes.
require 'taxjar'
client = Taxjar::Client.new
begin
order = client.create_order({
:transaction_date => '2015/05/14',
:to_country => 'US',
:to_state => 'CA',
:to_zip => '90002',
:amount => 17.45,
:shipping => 1.5,
:sales_tax => 0.95
})
rescue Taxjar::Error => e
# <Taxjar::Error::NotAcceptable: transaction_id is missing>
puts e.class.name
puts e.message
end
An RSpec test suite is available to ensure API functionality:
$ git clone git://github.com/taxjar/taxjar-ruby.git
$ bundle install
$ rspec
More information can be found on TaxJar Developers.
TaxJar is released under the MIT License.
Bug reports and feature requests should be filed on the GitHub issue tracking page.
- Fork it
- Create your feature branch (
git checkout -b my-new-feature
) - Commit your changes (
git commit -am 'Add some feature'
) - Push to the branch (
git push origin my-new-feature
) - Create new pull request