[med-svn] [r-cran-ritis] 02/04: New upstream version 0.5.4

Andreas Tille tille at debian.org
Mon Oct 2 10:36:17 UTC 2017


This is an automated email from the git hooks/post-receive script.

tille pushed a commit to branch master
in repository r-cran-ritis.

commit 872bd5ea8165706e57808db0f4c2fc2516db0e5a
Author: Andreas Tille <tille at debian.org>
Date:   Mon Oct 2 12:32:36 2017 +0200

    New upstream version 0.5.4
---
 DESCRIPTION                             |  23 +++
 LICENSE                                 |   2 +
 MD5                                     | 118 +++++++++++
 NAMESPACE                               |  52 +++++
 NEWS.md                                 |  43 ++++
 R/accepted_names.R                      |  23 +++
 R/any_match_count.R                     |  16 ++
 R/comment_detail.R                      |  17 ++
 R/common_names.R                        |  15 ++
 R/core_metadata.R                       |  18 ++
 R/coverage.R                            |  19 ++
 R/credibility.R                         |  36 ++++
 R/currency.R                            |  21 ++
 R/date_data.R                           |  18 ++
 R/description.R                         |  14 ++
 R/experts.R                             |  15 ++
 R/full_record.R                         |  31 +++
 R/geographic_divisions.R                |  22 ++
 R/geographic_values.R                   |  15 ++
 R/global_species_completeness.R         |  17 ++
 R/hierarchy.R                           |  56 +++++
 R/itis_facet.R                          |  16 ++
 R/itis_group.R                          |  13 ++
 R/itis_highlight.R                      |  11 +
 R/itis_search.R                         |  29 +++
 R/jurisdiction.R                        |  52 +++++
 R/kingdoms.R                            |  32 +++
 R/last_change_date.R                    |  14 ++
 R/lsid2tsn.R                            |  16 ++
 R/other_sources.R                       |  27 +++
 R/parent_tsn.R                          |  20 ++
 R/publications.R                        |  25 +++
 R/rank_name.R                           |  18 ++
 R/rank_names.R                          |  23 +++
 R/record.R                              |  28 +++
 R/review_year.R                         |  18 ++
 R/ritis-package.R                       |  23 +++
 R/scientific_name.R                     |  20 ++
 R/search_any_match_paged.R              |  31 +++
 R/search_anymatch.R                     |  25 +++
 R/search_common.R                       |  37 ++++
 R/search_scientific.R                   |  18 ++
 R/solr.R                                |  16 ++
 R/synonym_names.R                       |  20 ++
 R/taxon_authorship.R                    |  19 ++
 R/terms.R                               |  66 ++++++
 R/tsn2lsid.R                            |  17 ++
 R/tsn_by_vernacular_language.R          |  20 ++
 R/unacceptability_reason.R              |  18 ++
 R/usage.R                               |  20 ++
 R/vernacular_languages.R                |  13 ++
 R/zzz.R                                 |  87 ++++++++
 README.md                               | 147 +++++++++++++
 build/vignette.rds                      | Bin 0 -> 208 bytes
 debian/README.test                      |   8 -
 debian/changelog                        |   5 -
 debian/compat                           |   1 -
 debian/control                          |  28 ---
 debian/copyright                        |  32 ---
 debian/docs                             |   3 -
 debian/rules                            |   5 -
 debian/source/format                    |   1 -
 debian/tests/control                    |   5 -
 debian/tests/run-unit-test              |  17 --
 debian/watch                            |   2 -
 inst/doc/ritis_vignette.Rmd             | 161 +++++++++++++++
 inst/doc/ritis_vignette.html            | 351 ++++++++++++++++++++++++++++++++
 inst/vign/ritis_vignette.Rmd            |  95 +++++++++
 inst/vign/ritis_vignette.md             | 161 +++++++++++++++
 man/accepted_names.Rd                   |  38 ++++
 man/any_match_count.Rd                  |  32 +++
 man/comment_detail.Rd                   |  33 +++
 man/common_names.Rd                     |  31 +++
 man/core_metadata.Rd                    |  32 +++
 man/coverage.Rd                         |  31 +++
 man/credibility.Rd                      |  47 +++++
 man/currency.Rd                         |  35 ++++
 man/date_data.Rd                        |  29 +++
 man/description.Rd                      |  29 +++
 man/experts.Rd                          |  29 +++
 man/full_record.Rd                      |  39 ++++
 man/geographic_divisions.Rd             |  31 +++
 man/geographic_values.Rd                |  30 +++
 man/global_species_completeness.Rd      |  29 +++
 man/hierarchy.Rd                        |  51 +++++
 man/itis_facet.Rd                       |  25 +++
 man/itis_group.Rd                       |  22 ++
 man/itis_highlight.Rd                   |  20 ++
 man/itis_search.Rd                      |  38 ++++
 man/jurisdiction.Rd                     |  54 +++++
 man/kingdoms.Rd                         |  39 ++++
 man/last_change_date.Rd                 |  29 +++
 man/lsid2tsn.Rd                         |  30 +++
 man/other_sources.Rd                    |  28 +++
 man/parent_tsn.Rd                       |  32 +++
 man/publications.Rd                     |  34 ++++
 man/rank_name.Rd                        |  30 +++
 man/rank_names.Rd                       |  35 ++++
 man/record.Rd                           |  35 ++++
 man/review_year.Rd                      |  30 +++
 man/ritis-package.Rd                    |  31 +++
 man/scientific_name.Rd                  |  32 +++
 man/search_any_match_paged.Rd           |  44 ++++
 man/search_anymatch.Rd                  |  34 ++++
 man/search_common.Rd                    |  56 +++++
 man/search_scientific.Rd                |  34 ++++
 man/solr.Rd                             |  20 ++
 man/synonym_names.Rd                    |  31 +++
 man/taxon_authorship.Rd                 |  30 +++
 man/terms.Rd                            |  40 ++++
 man/tsn2lsid.Rd                         |  33 +++
 man/tsn_by_vernacular_language.Rd       |  31 +++
 man/unacceptability_reason.Rd           |  27 +++
 man/usage.Rd                            |  29 +++
 man/vernacular_languages.Rd             |  28 +++
 tests/test-all.R                        |   2 +
 tests/testthat/helper.R                 |   1 +
 tests/testthat/test-any_match_count.R   |  49 +++++
 tests/testthat/test-hierarchy.R         |  58 ++++++
 tests/testthat/test-itis_facet.R        |  29 +++
 tests/testthat/test-itis_group.R        |  19 ++
 tests/testthat/test-itis_highlight.R    |  21 ++
 tests/testthat/test-itis_search.R       |  29 +++
 tests/testthat/test-jurisdiction.R      |  49 +++++
 tests/testthat/test-kingdoms.R          |  41 ++++
 tests/testthat/test-publications.R      |  44 ++++
 tests/testthat/test-record.R            |  44 ++++
 tests/testthat/test-search_common.R     |  44 ++++
 tests/testthat/test-search_scientific.R |  44 ++++
 vignettes/ritis_vignette.Rmd            | 161 +++++++++++++++
 130 files changed, 4460 insertions(+), 107 deletions(-)

diff --git a/DESCRIPTION b/DESCRIPTION
new file mode 100644
index 0000000..133d6dd
--- /dev/null
+++ b/DESCRIPTION
@@ -0,0 +1,23 @@
+Package: ritis
+Title: Integrated Taxonomic Information System Client
+Description: An interface to the Integrated Taxonomic Information System ('ITIS')
+    (<https://www.itis.gov>). Includes functions to work with the 'ITIS' REST
+    'API' methods (<https://www.itis.gov/ws_description.html>), as well as the
+    'Solr' web service (<https://www.itis.gov/solr_documentation.html>).
+Version: 0.5.4
+License: MIT + file LICENSE
+URL: https://github.com/ropensci/ritis
+BugReports: https://github.com/ropensci/ritis/issues
+Authors at R: c(person("Scott", "Chamberlain", role = c("aut", "cre"),
+    email = "myrmecocystus at gmail.com"))
+VignetteBuilder: knitr
+Imports: solrium (>= 0.3.0), httr (>= 1.2.0), jsonlite (>= 0.9.22),
+        data.table (>= 1.9.6), tibble (>= 1.0)
+Suggests: roxygen2 (>= 5.0.1), testthat, knitr, covr
+RoxygenNote: 5.0.1
+NeedsCompilation: no
+Packaged: 2016-10-12 18:17:40 UTC; sacmac
+Author: Scott Chamberlain [aut, cre]
+Maintainer: Scott Chamberlain <myrmecocystus at gmail.com>
+Repository: CRAN
+Date/Publication: 2016-10-13 00:02:09
diff --git a/LICENSE b/LICENSE
new file mode 100644
index 0000000..d044f7e
--- /dev/null
+++ b/LICENSE
@@ -0,0 +1,2 @@
+YEAR: 2016
+COPYRIGHT HOLDER: Scott Chamberlain
diff --git a/MD5 b/MD5
new file mode 100644
index 0000000..45194bf
--- /dev/null
+++ b/MD5
@@ -0,0 +1,118 @@
+5d4b1831ddfe284699920aa921e02cf1 *DESCRIPTION
+769bdbb0572f2eefda48945aefb690fc *LICENSE
+f190feff6fed516a9a30de61c46237fb *NAMESPACE
+66b5700daad3f360a7ba6b3db48e1860 *NEWS.md
+3066dfc7a79d0ca3a252c4a754b95be0 *R/accepted_names.R
+37386f472bbbb2882dc1c5d6a6a06a21 *R/any_match_count.R
+831e5e5ca71efc848aaeaac87692f904 *R/comment_detail.R
+c4fa66e1ad66e779a472e0d869caff6f *R/common_names.R
+8533b6a99750307f5c1cfe8ca6731d28 *R/core_metadata.R
+6d790f2f216f1c2bd20433baf8ae2147 *R/coverage.R
+2a91559003a94890304622d2dff52f2e *R/credibility.R
+3e8da89918872f7a6875e765d5f30c01 *R/currency.R
+507b6351c20db6fb95332f6281547f92 *R/date_data.R
+e8d6c587dc493cccd03c784d4cf901f5 *R/description.R
+c94a4dba7046b461f80d9ed7dd759834 *R/experts.R
+0bf46de681bcb16126571ae24b07cc0e *R/full_record.R
+51114202b6705794dc67a00be42f2b0e *R/geographic_divisions.R
+c33e478ec753a8033360a09ab44a6e72 *R/geographic_values.R
+7869ac15dbe20729309da68120c05e4d *R/global_species_completeness.R
+969f642b449bfe796e8095ad3bd770da *R/hierarchy.R
+cc32f28b9a166f1c848b99ef27618724 *R/itis_facet.R
+9503bee36d0e45fc829c7a977818935c *R/itis_group.R
+d1685036145cb2e0b13189a95c04c18b *R/itis_highlight.R
+4243fd32f2f40415a640b14819cb6860 *R/itis_search.R
+4f3f6a445ff6d79e6162472d18a0e036 *R/jurisdiction.R
+0fa17a0b7c38d04c6cb3cf0fc73fcab6 *R/kingdoms.R
+6e6315e7146ad50a238c9ff51bf46e34 *R/last_change_date.R
+f6a96449b76bbc873350f77e0e9f920e *R/lsid2tsn.R
+b78cce313fcf22354a615db4b6d35ece *R/other_sources.R
+aefa855d8240554398942b318221deac *R/parent_tsn.R
+9ec9d02b3d99319b8ac3a197a6d541d1 *R/publications.R
+2206f9a53f7eb139ca6afc08f54cc3a8 *R/rank_name.R
+b869c6402f59566f54ee22938b165017 *R/rank_names.R
+9e5f917a644a9eba36ad923559c7df40 *R/record.R
+ffa7c485c719249b2636aadf02656c71 *R/review_year.R
+40754f1e771f85ad0ab491f6aca702ee *R/ritis-package.R
+9558f5a6f7c5c5a99e55a1cba74623a7 *R/scientific_name.R
+9c4a93f3eae871ec710a19693b6a0851 *R/search_any_match_paged.R
+799fdff3480b82f7802d531c262cf030 *R/search_anymatch.R
+00b179815b27b44d3c7d91bfe8665978 *R/search_common.R
+be24bd7df20254d577e70132a12e8552 *R/search_scientific.R
+d4bc1c873805bab04c7e0f66eea6f88c *R/solr.R
+ea4946729a3601a0b4459fc287baf0a4 *R/synonym_names.R
+23e8b84462d64bc63ac31a58d945434c *R/taxon_authorship.R
+d8ba70acd1d468f8da360043b76d7bd8 *R/terms.R
+d686fe922073edc1d71c61c12f39f329 *R/tsn2lsid.R
+05917dfe6f874cf4943f62662d887e51 *R/tsn_by_vernacular_language.R
+253a4e4f5f5b3f5c15b7a5bf6b01ea24 *R/unacceptability_reason.R
+2834004b13a9980bbaeb850acd6ca380 *R/usage.R
+83432a59f5548719b76c1210f8b1d600 *R/vernacular_languages.R
+22b8f0da859e691d410b69b73c560a15 *R/zzz.R
+e909169c0268918e5ad4de7c13e40aed *README.md
+2a7c01022b5a693d3a7edd39c4ee5c12 *build/vignette.rds
+9e0a7a3907c8fe78e848f173265e6260 *inst/doc/ritis_vignette.Rmd
+9eb3081bad62974cb4df49627f05dfb4 *inst/doc/ritis_vignette.html
+b5fc1b86f9d86ee10387c0ee4d6cf0f7 *inst/vign/ritis_vignette.Rmd
+9e0a7a3907c8fe78e848f173265e6260 *inst/vign/ritis_vignette.md
+060d4e0af7386fdc74ebf7735a45f29b *man/accepted_names.Rd
+f70803148db1a0e0d9c8330ab2894f34 *man/any_match_count.Rd
+204baa036c7ea8e04e74382a1163dd47 *man/comment_detail.Rd
+4ab1fb61ac6719f8b866cd29e74be06b *man/common_names.Rd
+8a95a8090dd8f4b4b8632cc9f8ecac9f *man/core_metadata.Rd
+4e43a257519eee51c387c389f3ac8e32 *man/coverage.Rd
+870d6e3b8d7320b72bcb06f11e91c551 *man/credibility.Rd
+4ffac9c363dbea1eb2d025de73e7565b *man/currency.Rd
+367148d06e3ac8a298dcef9b90f89df4 *man/date_data.Rd
+8466b03b1eb156a5f6564a4700da7241 *man/description.Rd
+8b679531e5c6059e0ebc734cb48b8b5d *man/experts.Rd
+71b475c49bb6d73918e3f5c1068cdb1c *man/full_record.Rd
+53a019cc6cf469330777cfb724efd861 *man/geographic_divisions.Rd
+c9ad4a10277df12f6a24876f6cbd49d9 *man/geographic_values.Rd
+6f3bd2e1ab3fe0a70e83858717c6e1d3 *man/global_species_completeness.Rd
+2589715426b88614e71544c548975653 *man/hierarchy.Rd
+23121d2bb54ef8ba612f48157daa3e88 *man/itis_facet.Rd
+a0d4d044c41eb27d279f9e16deaf02cc *man/itis_group.Rd
+629ada349910655c1bf34583a71757db *man/itis_highlight.Rd
+babf504dc341855be3e71797e5c8a6fe *man/itis_search.Rd
+83b03ca168eb0fdc973c05877018bf38 *man/jurisdiction.Rd
+75070e6783e77d7d3e9bdaed899e956d *man/kingdoms.Rd
+08cf727fc56d58c11a6df3252a395149 *man/last_change_date.Rd
+0e1f7f09d550c0a3213c3472150018f1 *man/lsid2tsn.Rd
+f958bfd7fa4e85e8871b2c3b40475b04 *man/other_sources.Rd
+75018923bc191bdeb349d6d6ded1fc7d *man/parent_tsn.Rd
+4ecb304f2c3c7cdca61c2351a326137a *man/publications.Rd
+97130b1ec727f4ac89f3a95a0c4965b2 *man/rank_name.Rd
+395584e91e7ed6ae92d45e154af36197 *man/rank_names.Rd
+696bd3e64efcbd58ea049445e778a9cc *man/record.Rd
+8773aa7949bb53791c64003c40dfe8f1 *man/review_year.Rd
+50282c5803415f771fda328319d80189 *man/ritis-package.Rd
+9654455ba564c0e55bbd8f4c56ce3b27 *man/scientific_name.Rd
+ada057155aaae81765d3638d6858ccff *man/search_any_match_paged.Rd
+2edf31ab349b195b73622e05b0da1b3e *man/search_anymatch.Rd
+b92f1af810d3799781f07df7ff17b8cf *man/search_common.Rd
+9a780ebc329980720d38001f18f7f78a *man/search_scientific.Rd
+2a4eb4b08eb39d24cfd6858d229f3d80 *man/solr.Rd
+80754394a82527d72c42718d4b4be538 *man/synonym_names.Rd
+c4bf8a1ebfd49f670eea757ae9a7828c *man/taxon_authorship.Rd
+5b743d2bbba5fcd5f184239c18ffe738 *man/terms.Rd
+ef59f59d3df5f4f307dd60c76b1c99c6 *man/tsn2lsid.Rd
+01b31d5a4e03beb5f0560e770fee5e0f *man/tsn_by_vernacular_language.Rd
+5c4cf71eb8ae5c877f7d6df183b9e866 *man/unacceptability_reason.Rd
+d1d199506cb732e8e4a9f2cf382c1ae7 *man/usage.Rd
+dcf53f0f8e4c0a006ee54f46db40d3ab *man/vernacular_languages.Rd
+680535a7e7ba6856cc630af23d88f514 *tests/test-all.R
+6de6bfda4529c5811788f56ef88d257b *tests/testthat/helper.R
+16d6cb8e540be05d6dd4b9c38b1dc29c *tests/testthat/test-any_match_count.R
+4b547c91008c9efac895d337c3ff71a8 *tests/testthat/test-hierarchy.R
+b0561ba2ea6c83a65e524f3f78429d17 *tests/testthat/test-itis_facet.R
+8f0cc9f23a1b5d1d63e57c5b79102f19 *tests/testthat/test-itis_group.R
+7b947d7b545d2ea498fe387b0fd8cfef *tests/testthat/test-itis_highlight.R
+b8d1e69d7cf3eec4ffa405bb73f3773a *tests/testthat/test-itis_search.R
+0407e978bab82d55666645ede78576f7 *tests/testthat/test-jurisdiction.R
+baeaa8f253f86f82fece2028e4fe70f0 *tests/testthat/test-kingdoms.R
+1a57fe5de59133d0ef3961b3d7d5163b *tests/testthat/test-publications.R
+fb9dc6f954548aecc6c83ee5d36249cd *tests/testthat/test-record.R
+d79f700bcedff969a0ad09b8ad4c9771 *tests/testthat/test-search_common.R
+b64e1e75d67150bc6c8790d4403821ed *tests/testthat/test-search_scientific.R
+9e0a7a3907c8fe78e848f173265e6260 *vignettes/ritis_vignette.Rmd
diff --git a/NAMESPACE b/NAMESPACE
new file mode 100644
index 0000000..14e1c7f
--- /dev/null
+++ b/NAMESPACE
@@ -0,0 +1,52 @@
+# Generated by roxygen2: do not edit by hand
+
+export(accepted_names)
+export(any_match_count)
+export(comment_detail)
+export(common_names)
+export(core_metadata)
+export(coverage)
+export(credibility_rating)
+export(credibility_ratings)
+export(currency)
+export(date_data)
+export(description)
+export(experts)
+export(full_record)
+export(geographic_divisions)
+export(geographic_values)
+export(global_species_completeness)
+export(hierarchy_down)
+export(hierarchy_full)
+export(hierarchy_up)
+export(itis_facet)
+export(itis_group)
+export(itis_highlight)
+export(itis_search)
+export(jurisdiction_origin_values)
+export(jurisdiction_values)
+export(jurisdictional_origin)
+export(kingdom_name)
+export(kingdom_names)
+export(last_change_date)
+export(lsid2tsn)
+export(other_sources)
+export(parent_tsn)
+export(publications)
+export(rank_name)
+export(rank_names)
+export(record)
+export(review_year)
+export(scientific_name)
+export(search_any_match_paged)
+export(search_anymatch)
+export(search_common)
+export(search_scientific)
+export(synonym_names)
+export(taxon_authorship)
+export(terms)
+export(tsn2lsid)
+export(tsn_by_vernacular_language)
+export(unacceptability_reason)
+export(usage)
+export(vernacular_languages)
diff --git a/NEWS.md b/NEWS.md
new file mode 100644
index 0000000..096a670
--- /dev/null
+++ b/NEWS.md
@@ -0,0 +1,43 @@
+ritis 0.5.4
+===============
+
+### BUG FIXES
+
+* Base URL changed from `http` to `https`, was causing problems in some
+requests, but not others. Changed to `https` (#4)
+
+
+ritis 0.5.0
+===============
+
+### NEW FEATURES
+
+* Re-released to CRAN
+* Complete overhaul of the package API, simplifying all function
+interfaces, using JSON by default, shorter names, reduce code reuse.
+* Added functions for interacting with ITIS's new Solr
+interface via use of `solrium`
+
+
+ritis 0.0.3
+===============
+
+### BUG FIXES
+
+* Removed dependency on plyr - moved from laply to lapply across functions.
+
+
+ritis 0.0.2
+===============
+
+### BUG FIXES
+
+* Temporarily removed all tests until they can be fixed and updated, and so that package passes checks.
+
+
+ritis 0.0.1
+===============
+
+### NEW FEATURES
+
+* released to CRAN
diff --git a/R/accepted_names.R b/R/accepted_names.R
new file mode 100644
index 0000000..b62b26b
--- /dev/null
+++ b/R/accepted_names.R
@@ -0,0 +1,23 @@
+#' Get accepted names from tsn
+#'
+#' @export
+#' @template common
+#' @template tsn
+#' @return Zero row data.frame if the name is accepted, otherwise a data.frame
+#' with information on the currently accepted name
+#' @examples \dontrun{
+#' # TSN accepted - good name
+#' accepted_names(tsn = 208527)
+#'
+#' # TSN not accepted - input TSN is old name
+#' accepted_names(tsn = 504239)
+#'
+#' # raw json
+#' accepted_names(tsn = 208527, raw = TRUE)
+#' }
+accepted_names <- function(tsn, wt = "json", raw = FALSE, ...) {
+  out <- itis_GET("getAcceptedNamesFromTSN", list(tsn = tsn), wt, ...)
+  if (raw || wt == "xml") return(out)
+  tmp <- parse_raw(out)
+  if (all(is.na(tmp$acceptedNames))) tibble::data_frame() else dr_op(tibble::as_data_frame(tmp$acceptedNames), "class")
+}
diff --git a/R/any_match_count.R b/R/any_match_count.R
new file mode 100644
index 0000000..8739db4
--- /dev/null
+++ b/R/any_match_count.R
@@ -0,0 +1,16 @@
+#' Get any match count.
+#'
+#' @export
+#' @template common
+#' @param x text or taxonomic serial number (TSN) (character or numeric)
+#' @return An integer containing the number of matches the search will return.
+#' @examples \dontrun{
+#' any_match_count(x = 202385)
+#' any_match_count(x = "dolphin")
+#' any_match_count(x = "dolphin", wt = "xml")
+#' }
+any_match_count <- function(x, wt = "json", raw = FALSE, ...) {
+  out <- itis_GET("getAnyMatchCount", list(srchKey = x), wt = wt, ...)
+  if (raw || wt == "xml") return(out)
+  if (!nzchar(out)) 0 else parse_raw(out)$return
+}
diff --git a/R/comment_detail.R b/R/comment_detail.R
new file mode 100644
index 0000000..49d82fe
--- /dev/null
+++ b/R/comment_detail.R
@@ -0,0 +1,17 @@
+#' Get comment detail from TSN
+#'
+#' @export
+#' @template tsn
+#' @template common
+#' @return A data.frame with results.
+#' @examples \dontrun{
+#' comment_detail(tsn=180543)
+#' comment_detail(tsn=180543, wt = "xml")
+#' library(httr)
+#' comment_detail(tsn=180543)
+#' }
+comment_detail <- function(tsn, wt = "json", raw = FALSE, ...) {
+  out <- itis_GET("getCommentDetailFromTSN", list(tsn = tsn), wt, ...)
+  if (raw || wt == "xml") return(out)
+  dr_op(tibble::as_data_frame(parse_raw(out)$comments), "class")
+}
diff --git a/R/common_names.R b/R/common_names.R
new file mode 100644
index 0000000..77178ca
--- /dev/null
+++ b/R/common_names.R
@@ -0,0 +1,15 @@
+#' Get common names from tsn
+#'
+#' @export
+#' @template common
+#' @template tsn
+#' @return a data.frame
+#' @examples \dontrun{
+#' common_names(tsn=183833)
+#' common_names(tsn=183833, wt = "xml")
+#' }
+common_names <- function(tsn, wt = "json", raw = FALSE, ...) {
+  out <- itis_GET("getCommonNamesFromTSN", list(tsn = tsn), wt, ...)
+  if (raw || wt == "xml") return(out)
+  dr_op(tibble::as_data_frame(parse_raw(out)$commonNames), "class")
+}
diff --git a/R/core_metadata.R b/R/core_metadata.R
new file mode 100644
index 0000000..5849eb7
--- /dev/null
+++ b/R/core_metadata.R
@@ -0,0 +1,18 @@
+#' Get core metadata from tsn
+#'
+#' @export
+#' @template common
+#' @template tsn
+#' @examples \dontrun{
+#' # coverage and currrency data
+#' core_metadata(tsn=28727)
+#' core_metadata(tsn=28727, wt = "xml")
+#' # no coverage or currrency data
+#' core_metadata(183671)
+#' core_metadata(183671, wt = "xml")
+#' }
+core_metadata <- function(tsn, wt = "json", raw = FALSE, ...) {
+  out <- itis_GET("getCoreMetadataFromTSN", list(tsn = tsn), wt, ...)
+  if (raw || wt == "xml") return(out)
+  dr_op(tibble::as_data_frame(parse_raw(out)), "class")
+}
diff --git a/R/coverage.R b/R/coverage.R
new file mode 100644
index 0000000..097a375
--- /dev/null
+++ b/R/coverage.R
@@ -0,0 +1,19 @@
+#' Get coverge from tsn
+#'
+#' @export
+#' @template common
+#' @template tsn
+#' @examples \dontrun{
+#' # coverage data
+#' coverage(tsn=28727)
+#' # no coverage data
+#' coverage(526852)
+#' coverage(526852, wt = "xml")
+#' }
+coverage <- function(tsn, wt = "json", raw = FALSE, ...) {
+  out <- itis_GET("getCoverageFromTSN", list(tsn = tsn), wt, ...)
+  if (raw || wt == "xml") return(out)
+  res <- parse_raw(out)
+  if (is.null(res$taxonCoverage)) res$taxonCoverage <- ""
+  dr_op(tibble::as_data_frame(res), "class")
+}
diff --git a/R/credibility.R b/R/credibility.R
new file mode 100644
index 0000000..98d29f0
--- /dev/null
+++ b/R/credibility.R
@@ -0,0 +1,36 @@
+#' Get credibility rating from tsn
+#'
+#' @export
+#' @name credibility
+#' @template common
+#' @template tsn
+#' @return a data.frame
+#' @details methods:
+#' \itemize{
+#'  \item credibility_rating: Get credibility rating for a tsn
+#'  \item credibility_ratings: Get possible credibility ratings
+#' }
+#' @examples \dontrun{
+#' credibility_rating(tsn = 526852)
+#' credibility_rating(526852, wt = "xml")
+#' credibility_rating(526852, raw = TRUE)
+#'
+#' credibility_ratings()
+#' credibility_ratings(wt = "xml")
+#' credibility_ratings(raw = TRUE)
+#' }
+credibility_rating <- function(tsn, wt = "json", raw = FALSE, ...) {
+  out <- itis_GET("getCredibilityRatingFromTSN", list(tsn = tsn), wt, ...)
+  if (raw || wt == "xml") return(out)
+  res <- parse_raw(out)
+  if (is.null(res$credRating)) res$credRating <- ""
+  dr_op(tibble::as_data_frame(res), "class")
+}
+
+#' @export
+#' @rdname credibility
+credibility_ratings <- function(wt = "json", raw = FALSE, ...) {
+  out <- itis_GET("getCredibilityRatings", list(), wt, ...)
+  if (raw || wt == "xml") return(out)
+  dr_op(tibble::as_data_frame(parse_raw(out)), "class")
+}
diff --git a/R/currency.R b/R/currency.R
new file mode 100644
index 0000000..96cd2f4
--- /dev/null
+++ b/R/currency.R
@@ -0,0 +1,21 @@
+#' Get currency from tsn
+#'
+#' @export
+#' @template common
+#' @template tsn
+#' @return a data.frame
+#' @examples \dontrun{
+#' # currency data
+#' currency(tsn=28727)
+#' currency(tsn=28727, wt = "xml")
+#' # no currency dat
+#' currency(526852)
+#' currency(526852, raw = TRUE)
+#' }
+currency <- function(tsn, wt = "json", raw = FALSE, ...) {
+  out <- itis_GET("getCurrencyFromTSN", list(tsn = tsn), wt, ...)
+  if (raw || wt == "xml") return(out)
+  res <- parse_raw(out)
+  if (is.null(res$taxonCurrency)) res$taxonCurrency <- ""
+  dr_op(tibble::as_data_frame(res), "class")
+}
diff --git a/R/date_data.R b/R/date_data.R
new file mode 100644
index 0000000..0907e80
--- /dev/null
+++ b/R/date_data.R
@@ -0,0 +1,18 @@
+#' Get date data from tsn
+#'
+#' @export
+#' @template common
+#' @template tsn
+#' @examples \dontrun{
+#' date_data(tsn = 180543)
+#' date_data(180543, wt = "xml")
+#' date_data(180543, wt = "json", raw = TRUE)
+#' }
+date_data <- function(tsn, wt = "json", raw = FALSE, ...) {
+  out <- itis_GET("getDateDataFromTSN", list(tsn = tsn), wt, ...)
+  if (raw || wt == "xml") return(out)
+  res <- parse_raw(out)
+  if (is.null(res$initialTimeStamp)) res$initialTimeStamp <- ""
+  if (is.null(res$updateDate)) res$updateDate <- ""
+  dr_op(tibble::as_data_frame(res), "class")
+}
diff --git a/R/description.R b/R/description.R
new file mode 100644
index 0000000..5452563
--- /dev/null
+++ b/R/description.R
@@ -0,0 +1,14 @@
+#' Get description of the ITIS service
+#'
+#' @export
+#' @template common
+#' @return a string, the ITIS web service description
+#' @examples \dontrun{
+#' description()
+#' description(wt = "xml")
+#' }
+description <- function(wt = "json", raw = FALSE, ...){
+  out <- itis_GET("getDescription", list(), wt, ...)
+  if (raw || wt == "xml") return(out)
+  parse_raw(out)$description
+}
diff --git a/R/experts.R b/R/experts.R
new file mode 100644
index 0000000..da91111
--- /dev/null
+++ b/R/experts.R
@@ -0,0 +1,15 @@
+#' Get expert information for the TSN.
+#'
+#' @export
+#' @template common
+#' @template tsn
+#' @examples \dontrun{
+#' experts(tsn = 180544)
+#' experts(180544, wt = "xml")
+#' experts(180544, raw = TRUE)
+#' }
+experts <- function(tsn, wt = "json", raw = FALSE, ...) {
+  out <- itis_GET("getExpertsFromTSN", list(tsn = tsn), wt, ...)
+  if (raw || wt == "xml") return(out)
+  dr_op(tibble::as_data_frame(parse_raw(out)$experts), "class")
+}
diff --git a/R/full_record.R b/R/full_record.R
new file mode 100644
index 0000000..30662ef
--- /dev/null
+++ b/R/full_record.R
@@ -0,0 +1,31 @@
+#' Get full record from TSN or lsid
+#'
+#' @export
+#' @param lsid lsid for a taxonomic group (character)
+#' @inheritParams comment_detail
+#' @examples \dontrun{
+#' # from tsn
+#' full_record(tsn = 50423)
+#' full_record(tsn = 202385)
+#' full_record(tsn = 183833)
+#'
+#' full_record(tsn = 183833, wt = "xml")
+#' full_record(tsn = 183833, raw = TRUE)
+#'
+#' # from lsid
+#' full_record(lsid = "urn:lsid:itis.gov:itis_tsn:180543")
+#' full_record(lsid = "urn:lsid:itis.gov:itis_tsn:180543")
+#' }
+full_record <- function(tsn = NULL, lsid = NULL, wt = "json", raw = FALSE, ...) {
+  if (!xor(is.null(tsn), is.null(lsid))) stop("Pass only one of `tsn` or `lsid`", call. = FALSE)
+  if (!is.null(tsn)) {
+    verb <- "getFullRecordFromTSN"
+    args <- list(tsn = tsn)
+  } else {
+    verb <- "getFullRecordFromLSID"
+    args <- list(lsid = lsid)
+  }
+  out <- itis_GET(verb, args, wt, ...)
+  if (raw || wt == "xml") return(out)
+  dr_op(tc(parse_raw(out)), "class")
+}
diff --git a/R/geographic_divisions.R b/R/geographic_divisions.R
new file mode 100644
index 0000000..325dddf
--- /dev/null
+++ b/R/geographic_divisions.R
@@ -0,0 +1,22 @@
+#' Get geographic divisions from tsn
+#'
+#' @export
+#' @template common
+#' @template tsn
+#' @examples \dontrun{
+#' geographic_divisions(tsn = 180543)
+#'
+#' geographic_divisions(tsn = 180543, wt = "xml")
+#'
+#' geographic_divisions(tsn = 180543, wt = "json", raw = TRUE)
+#' }
+geographic_divisions <- function(tsn, wt = "json", raw = FALSE, ...) {
+  out <- itis_GET("getGeographicDivisionsFromTSN", list(tsn = tsn), wt, ...)
+  if (raw || wt == "xml") return(out)
+  res <- parse_raw(out)
+  if (inherits(res$geoDivisions, "logical") || is.null(res$geoDivisions)) {
+    tibble::data_frame()
+  } else {
+    dr_op(tibble::as_data_frame(res$geoDivisions), "class")
+  }
+}
diff --git a/R/geographic_values.R b/R/geographic_values.R
new file mode 100644
index 0000000..dd3031b
--- /dev/null
+++ b/R/geographic_values.R
@@ -0,0 +1,15 @@
+#' Get all possible geographic values
+#'
+#' @export
+#' @template common
+#' @return character vector of geographic names
+#' @examples \dontrun{
+#' geographic_values()
+#' geographic_values(wt = "xml")
+#' geographic_values(wt = "json", raw = TRUE)
+#' }
+geographic_values <- function(wt = "json", raw = FALSE, ...) {
+  out <- itis_GET("getGeographicValues", list(), wt, ...)
+  if (raw || wt == "xml") return(out)
+  parse_raw(out)$geographicValues
+}
diff --git a/R/global_species_completeness.R b/R/global_species_completeness.R
new file mode 100644
index 0000000..acace69
--- /dev/null
+++ b/R/global_species_completeness.R
@@ -0,0 +1,17 @@
+#' Get global species completeness from tsn
+#'
+#' @export
+#' @template common
+#' @template tsn
+#' @examples \dontrun{
+#' global_species_completeness(tsn = 180541)
+#' global_species_completeness(180541, wt = "xml")
+#' global_species_completeness(180541, wt = "json", raw = TRUE)
+#' }
+global_species_completeness <- function(tsn, wt = "json", raw = FALSE, ...) {
+  out <- itis_GET("getGlobalSpeciesCompletenessFromTSN", list(tsn = tsn), wt, ...)
+  if (raw || wt == "xml") return(out)
+  tibble::as_data_frame(
+    tc(pick_cols(parse_raw(out), c("completeness","rankId","tsn")))
+  )
+}
diff --git a/R/hierarchy.R b/R/hierarchy.R
new file mode 100644
index 0000000..dbf20ed
--- /dev/null
+++ b/R/hierarchy.R
@@ -0,0 +1,56 @@
+#' Get hierarchy down from tsn
+#'
+#' @export
+#' @name hierarchy
+#' @template common
+#' @template tsn
+#' @details Hierarchy methods:
+#' \itemize{
+#'  \item hierarchy_down: Get hierarchy down from tsn
+#'  \item hierarchy_up: Get hierarchy up from tsn
+#'  \item hierarchy_full: Get full hierarchy from tsn
+#' }
+#' @examples \dontrun{
+#' ## Full down
+#' hierarchy_down(tsn=161030)
+#'
+#' ## Full up
+#' hierarchy_up(tsn=36485)
+#'
+#' ## Full hierarchy
+#' hierarchy_full(tsn=37906)
+#' hierarchy_full(tsn=37906, raw = TRUE)
+#' hierarchy_full(100800, wt = "xml")
+#' }
+hierarchy_down <- function(tsn, wt = "json", raw = FALSE, ...) {
+  out <- itis_GET("getHierarchyDownFromTSN", list(tsn = tsn), wt, ...)
+  if (raw || wt == "xml") return(out)
+  tibble::as_data_frame(
+    pick_cols(parse_raw(out)$hierarchyList, c("parentName","parentTsn","rankName","taxonName","tsn"))
+  )
+}
+
+#' @export
+#' @rdname hierarchy
+hierarchy_up <- function(tsn, wt = "json", raw = FALSE, ...) {
+  out <- itis_GET("getHierarchyUpFromTSN", list(tsn = tsn), wt, ...)
+  if (raw || wt == "xml") return(out)
+  res <- tc(pick_cols(parse_raw(out), c("parentName","parentTsn","rankName","taxonName","tsn")))
+  tibble::as_data_frame(
+    if (length(names(res)) != 1) res else NULL
+  )
+}
+
+#' @export
+#' @rdname hierarchy
+hierarchy_full <- function(tsn, wt = "json", raw = FALSE, ...) {
+  out <- itis_GET("getFullHierarchyFromTSN", list(tsn = tsn), wt, ...)
+  if (raw || wt == "xml") return(out)
+  x <- parse_raw(out)
+  tibble::as_data_frame(
+    pick_cols(
+      if ('hierarchyList' %in% names(x)) x$hierarchyList else x,
+      c('parentname', 'parenttsn', 'rankname', 'taxonname', 'tsn')
+    )
+  )
+}
diff --git a/R/itis_facet.R b/R/itis_facet.R
new file mode 100644
index 0000000..e00fd44
--- /dev/null
+++ b/R/itis_facet.R
@@ -0,0 +1,16 @@
+#' ITIS Solr facet
+#'
+#' @export
+#' @param ... Args passed to \code{\link[solrium]{solr_facet}}
+#' @examples \dontrun{
+#' itis_facet(q = "rank:Species", rows = 0, facet.field = "kingdom")$facet_fields
+#'
+#' x <- itis_facet(q = "hierarchySoFar:*$Aves$* AND rank:Species AND usage:valid",
+#'    facet.pivot = "nameWInd,vernacular", facet.limit = -1, facet.mincount = 1,
+#'    rows = 0)
+#' head(x$facet_pivot$`nameWInd,vernacular`)
+#' }
+itis_facet <- function(...) {
+  invisible(solrium::solr_connect(url = "http://services.itis.gov"))
+  solrium::solr_facet(...)
+}
diff --git a/R/itis_group.R b/R/itis_group.R
new file mode 100644
index 0000000..f6703b9
--- /dev/null
+++ b/R/itis_group.R
@@ -0,0 +1,13 @@
+#' ITIS Solr group search
+#'
+#' @export
+#' @param ... Args passed to \code{\link[solrium]{solr_group}}
+#' @examples \dontrun{
+#' x <- itis_group(q = "nameWOInd:/[A-Za-z0-9]*[%20]{1,1}[A-Za-z0-9]*/",
+#'    group.field = 'rank', group.limit = 3)
+#' head(x)
+#' }
+itis_group <- function(...) {
+  invisible(solrium::solr_connect(url = "http://services.itis.gov"))
+  solrium::solr_group(...)
+}
diff --git a/R/itis_highlight.R b/R/itis_highlight.R
new file mode 100644
index 0000000..5d09c51
--- /dev/null
+++ b/R/itis_highlight.R
@@ -0,0 +1,11 @@
+#' ITIS Solr highlight
+#'
+#' @export
+#' @param ... Args passed to \code{\link[solrium]{solr_highlight}}
+#' @examples \dontrun{
+#' itis_highlight(q = "rank:Species", hl.fl = 'rank', rows=10)
+#' }
+itis_highlight <- function(...) {
+  invisible(solrium::solr_connect(url = "http://services.itis.gov"))
+  solrium::solr_highlight(...)
+}
diff --git a/R/itis_search.R b/R/itis_search.R
new file mode 100644
index 0000000..e79f5e0
--- /dev/null
+++ b/R/itis_search.R
@@ -0,0 +1,29 @@
+#' ITIS Solr search
+#'
+#' @export
+#' @param ... Args passed to \code{\link[solrium]{solr_search}}
+#' @examples \dontrun{
+#' itis_search(q = "tsn:182662")
+#'
+#' itis_search(q = "nameWOInd:Liquidamber\\%20styraciflua~0.4")
+#' # matches only monomials
+#' itis_search(q = "nameWOInd:/[A-Za-z0-9]*[%20]{0,0}*/")
+#' # matches only binomials
+#' itis_search(q = "nameWOInd:/[A-Za-z0-9]*[%20]{1,1}[A-Za-z0-9]*/")
+#' # matches only trinomials
+#' itis_search(q = "nameWOInd:/[A-Za-z0-9]*[%20]{1,1}[A-Za-z0-9]*[%20]{1,1}[A-Za-z0-9]*/")
+#' # matches binomials or trinomials
+#' itis_search(q = "nameWOInd:/[A-Za-z0-9]*[%20]{1,1}[A-Za-z0-9]*[%20]{0,1}[A-Za-z0-9]*/")
+#'
+#' itis_search(q = "nameWOInd:Poa\\%20annua")
+#'
+#' itis_search(q = "nameWOInd:/[A-Za-z0-9]*[%20]{0,0}*/", rows = 2)
+#' itis_search(q = "nameWOInd:/[A-Za-z0-9]*[%20]{0,0}*/", rows = 200)
+#'
+#' itis_search(q = "nameWOInd:/[A-Za-z0-9]*[%20]{0,0}*/",
+#'    fl = c('nameWInd', 'tsn'))
+#' }
+itis_search <- function(...) {
+  invisible(solrium::solr_connect(url = "http://services.itis.gov"))
+  solrium::solr_search(...)
+}
diff --git a/R/jurisdiction.R b/R/jurisdiction.R
new file mode 100644
index 0000000..28ae018
--- /dev/null
+++ b/R/jurisdiction.R
@@ -0,0 +1,52 @@
+#' Get jurisdictional origin from tsn
+#'
+#' @export
+#' @name jurisdiction
+#' @template common
+#' @template tsn
+#' @return
+#' \itemize{
+#'  \item jurisdictional_origin: data.frame
+#'  \item jurisdiction_origin_values: data.frame
+#'  \item jurisdiction_values: character vector
+#' }
+#' @details Jurisdiction methods:
+#' \itemize{
+#'  \item jurisdictional_origin: Get jurisdictional origin from tsn
+#'  \item jurisdiction_origin_values: Get jurisdiction origin values
+#'  \item jurisdiction_values: Get all possible jurisdiction values
+#' }
+#' @examples \dontrun{
+#' jurisdictional_origin(tsn=180543)
+#' jurisdictional_origin(tsn=180543, wt = "xml")
+#'
+#' jurisdiction_origin_values()
+#'
+#' jurisdiction_values()
+#' }
+jurisdictional_origin <- function(tsn, wt = "json", raw = FALSE, ...) {
+  out <- itis_GET("getJurisdictionalOriginFromTSN", list(tsn = tsn), wt, ...)
+  if (raw || wt == "xml") return(out)
+  z <- parse_raw(out)
+  tibble::as_data_frame(
+    pick_cols(z$jurisdictionalOrigins, c("jurisdictionValue", "origin", "updateDate"))
+  )
+}
+
+#' @export
+#' @rdname jurisdiction
+jurisdiction_origin_values <- function(wt = "json", raw = FALSE, ...) {
+  out <- itis_GET("getJurisdictionalOriginValues", list(), wt, ...)
+  if (raw || wt == "xml") return(out)
+  tibble::as_data_frame(
+    pick_cols(parse_raw(out)$originValues, c("jurisdiction", "origin"))
+  )
+}
+
+#' @export
+#' @rdname jurisdiction
+jurisdiction_values <- function(wt = "json", raw = FALSE, ...) {
+  out <- itis_GET("getJurisdictionValues", list(), wt, ...)
+  if (raw || wt == "xml") return(out)
+  parse_raw(out)$jurisdictionValues
+}
diff --git a/R/kingdoms.R b/R/kingdoms.R
new file mode 100644
index 0000000..b3c96a4
--- /dev/null
+++ b/R/kingdoms.R
@@ -0,0 +1,32 @@
+#' Get kingdom names from tsn
+#'
+#' @export
+#' @name kingdoms
+#' @template common
+#' @template tsn
+#' @details
+#' \itemize{
+#'  \item kingdom_name: Get kingdom name for a TSN
+#'  \item kingdom_names: Get all possible kingdom names
+#' }
+#' @examples \dontrun{
+#' kingdom_name(202385)
+#' kingdom_name(202385, wt = "xml")
+#' kingdom_names()
+#' }
+kingdom_name <- function(tsn, wt = "json", raw = FALSE, ...) {
+  out <- itis_GET("getKingdomNameFromTSN", list(tsn = tsn), wt, ...)
+  if (raw || wt == "xml") return(out)
+  res <- tc(pick_cols(parse_raw(out), c('kingdomid', 'kingdomname', 'tsn')))
+  tibble::as_data_frame(
+    if (length(names(res)) != 1) res else NULL
+  )
+}
+
+#' @export
+#' @rdname kingdoms
+kingdom_names <- function(wt = "json", raw = FALSE, ...) {
+  out <- itis_GET("getKingdomNames", list(), wt, ...)
+  if (raw || wt == "xml") return(out)
+  pick_cols(tibble::as_data_frame(parse_raw(out)$kingdomNames), c('kingdomid', 'kingdomname', 'tsn'))
+}
diff --git a/R/last_change_date.R b/R/last_change_date.R
new file mode 100644
index 0000000..51a9623
--- /dev/null
+++ b/R/last_change_date.R
@@ -0,0 +1,14 @@
+#' Provides the date the ITIS database was last updated
+#'
+#' @export
+#' @template common
+#' @return character value with a date
+#' @examples \dontrun{
+#' last_change_date()
+#' last_change_date(wt = "xml")
+#' }
+last_change_date <- function(wt = "json", raw = FALSE, ...) {
+  out <- itis_GET("getLastChangeDate", list(), wt, ...)
+  if (raw || wt == "xml") return(out)
+  parse_raw(out)$updateDate
+}
diff --git a/R/lsid2tsn.R b/R/lsid2tsn.R
new file mode 100644
index 0000000..92ee4b5
--- /dev/null
+++ b/R/lsid2tsn.R
@@ -0,0 +1,16 @@
+#' Gets the TSN corresponding to the LSID, or an empty result if there is no match.
+#'
+#' @export
+#' @template common
+#' @param lsid (character) lsid for a taxonomic group. Required.
+#' @examples \dontrun{
+#' lsid2tsn(lsid="urn:lsid:itis.gov:itis_tsn:28726")
+#' lsid2tsn(lsid="urn:lsid:itis.gov:itis_tsn:28726", wt = "xml")
+#' lsid2tsn("urn:lsid:itis.gov:itis_tsn:0")
+#' lsid2tsn("urn:lsid:itis.gov:itis_tsn:0", wt = "xml")
+#' }
+lsid2tsn <- function(lsid, wt = "json", raw = FALSE, ...) {
+  out <- itis_GET("getTSNFromLSID", list(lsid = lsid), wt, ...)
+  if (raw || wt == "xml") return(out)
+  parse_raw(out)$return
+}
diff --git a/R/other_sources.R b/R/other_sources.R
new file mode 100644
index 0000000..05ffc8b
--- /dev/null
+++ b/R/other_sources.R
@@ -0,0 +1,27 @@
+#' Returns a list of the other sources used for the TSN.
+#'
+#' @export
+#' @template common
+#' @template tsn
+#' @examples \dontrun{
+#' other_sources(tsn=182662)
+#' other_sources(tsn=182662, wt = "xml")
+#' }
+other_sources <- function(tsn, wt = "json", raw = FALSE, ...) {
+  out <- itis_GET("getOtherSourcesFromTSN", list(tsn = tsn), wt, ...)
+  if (raw || wt == "xml") return(out)
+  x <- parse_raw(out)$otherSources
+  if (inherits(x, "logical") || is.null(x)) {
+    tibble::data_frame()
+  } else {
+    x <- cbind(dr_op(x, "referencefor"), bindlist(x$referenceFor))
+    tibble::as_data_frame(pick_cols(
+      x,
+      c("acquisitiondate","name","referredtsn","source", "sourcetype","updatedate","version")
+    ))
+  }
+}
+
+bindlist <- function(x) {
+  (data.table::setDF(data.table::rbindlist(x, use.names = TRUE, fill = TRUE)))
+}
diff --git a/R/parent_tsn.R b/R/parent_tsn.R
new file mode 100644
index 0000000..ab9d6cf
--- /dev/null
+++ b/R/parent_tsn.R
@@ -0,0 +1,20 @@
+#' Returns the parent TSN for the entered TSN.
+#'
+#' @export
+#' @template common
+#' @template tsn
+#' @return a data.frame
+#' @examples \dontrun{
+#' parent_tsn(tsn = 202385)
+#' parent_tsn(tsn = 202385, raw = TRUE)
+#' parent_tsn(tsn = 202385, wt = "xml")
+#' }
+parent_tsn <- function(tsn, wt = "json", raw = FALSE, ...) {
+  out <- itis_GET("getParentTSNFromTSN", list(tsn = tsn), wt, ...)
+  if (raw || wt == "xml") return(out)
+  x <- parse_raw(out)
+  res <- tc(pick_cols(x, c("parentTsn", "tsn")))
+  tibble::as_data_frame(
+    if (length(names(res)) == 1) NULL else res
+  )
+}
diff --git a/R/publications.R b/R/publications.R
new file mode 100644
index 0000000..1844177
--- /dev/null
+++ b/R/publications.R
@@ -0,0 +1,25 @@
+#' Returns a list of the pulications used for the TSN.
+#'
+#' @export
+#' @template common
+#' @template tsn
+#' @return a data.frame
+#' @examples \dontrun{
+#' publications(tsn = 70340)
+#' publications(tsn = 70340, wt = "xml")
+#'
+#' library(httr)
+#' publications(tsn = 70340, config = verbose())
+#' }
+publications <- function(tsn, wt = "json", raw = FALSE, ...) {
+  out <- itis_GET("getPublicationsFromTSN", list(tsn = tsn), wt, ...)
+  if (raw || wt == "xml") return(out)
+  x <- parse_raw(out)$publications
+  x <- cbind(dr_op(x, "referencefor"), dr_op(bindlist(x$referenceFor), "class"))
+  tibble::as_data_frame(pick_cols(
+    x,
+    c("actualPubDate","isbn","issn","listedPubDate","pages",
+      "pubComment","pubName","pubPlace","publisher","referenceAuthor",
+      "name","refLanguage","referredTsn","title","updateDate")
+  ))
+}
diff --git a/R/rank_name.R b/R/rank_name.R
new file mode 100644
index 0000000..34dc9d2
--- /dev/null
+++ b/R/rank_name.R
@@ -0,0 +1,18 @@
+#' Returns the kingdom and rank information for the TSN.
+#'
+#' @export
+#' @template common
+#' @template tsn
+#' @return a data.frame, with rank name and other info
+#' @examples \dontrun{
+#' rank_name(tsn = 202385)
+#' }
+rank_name <- function(tsn, wt = "json", raw = FALSE, ...) {
+  out <- itis_GET("getTaxonomicRankNameFromTSN", list(tsn = tsn), wt, ...)
+  if (raw || wt == "xml") return(out)
+  x <- parse_raw(out)
+  res <- tc(pick_cols(x, c("kingdomId","kingdomName","rankId","rankName","tsn")))
+  tibble::as_data_frame(
+    if (length(names(res)) == 1) NULL else res
+  )
+}
diff --git a/R/rank_names.R b/R/rank_names.R
new file mode 100644
index 0000000..58e9f59
--- /dev/null
+++ b/R/rank_names.R
@@ -0,0 +1,23 @@
+#' Provides a list of all the unique rank names contained in the database and
+#'  their kingdom and rank ID values.
+#'
+#' @export
+#' @template common
+#' @return a data.frame, with columns:
+#' \itemize{
+#'  \item kingdomname
+#'  \item rankid
+#'  \item rankname
+#' }
+#' @examples \dontrun{
+#' rank_names()
+#' }
+rank_names <- function(wt = "json", raw = FALSE, ...) {
+  out <- itis_GET("getRankNames", list(), wt, ...)
+  if (raw || wt == "xml") return(out)
+  x <- parse_raw(out)$rankNames
+  tibble::as_data_frame(pick_cols(
+    x,
+    c("kingdomName", "rankId", "rankName")
+  ))
+}
diff --git a/R/record.R b/R/record.R
new file mode 100644
index 0000000..75c5c48
--- /dev/null
+++ b/R/record.R
@@ -0,0 +1,28 @@
+#' Gets a record from an LSID
+#'
+#' @export
+#' @template common
+#' @param lsid lsid for a taxonomic group (character). Required.
+#' @details Gets the partial ITIS record for the TSN in the LSID, found by comparing the
+#'  TSN in the search key to the TSN field. Returns an empty result set if
+#'  there is no match or the TSN is invalid.
+#' @return a data.frame
+#' @examples \dontrun{
+#' record(lsid = "urn:lsid:itis.gov:itis_tsn:180543")
+#' }
+record <- function(lsid, wt = "json", raw = FALSE, ...) {
+  out <- itis_GET("getRecordFromLSID", list(lsid = lsid), wt, ...)
+  if (raw || wt == "xml") return(out)
+  x <- tc(parse_raw(out))
+  tibble::as_data_frame(
+    if (length(names(x)) < 2) {
+      NULL
+    } else {
+      pick_cols(
+        data.frame(x, stringsAsFactors = FALSE),
+        c("authorship","genusPart","infragenericEpithet",
+          "infraspecificEpithet","lsid","nameComplete","nomenclaturalCode",
+          "rank","rankString","specificEpithet","uninomial","tsn"))
+    }
+  )
+}
diff --git a/R/review_year.R b/R/review_year.R
new file mode 100644
index 0000000..48c143a
--- /dev/null
+++ b/R/review_year.R
@@ -0,0 +1,18 @@
+#' Returns the review year for the TSN.
+#'
+#' @export
+#' @template common
+#' @template tsn
+#' @return a data.frame
+#' @examples \dontrun{
+#' review_year(tsn = 180541)
+#' }
+review_year <- function(tsn, wt = "json", raw = FALSE, ...) {
+  out <- itis_GET("getReviewYearFromTSN", list(tsn = tsn), wt, ...)
+  if (raw || wt == "xml") return(out)
+  x <- tc(parse_raw(out))
+  tibble::as_data_frame(
+    tc(pick_cols(x, c("rankId","reviewYear","tsn")))
+  )
+}
+
diff --git a/R/ritis-package.R b/R/ritis-package.R
new file mode 100644
index 0000000..59b67c6
--- /dev/null
+++ b/R/ritis-package.R
@@ -0,0 +1,23 @@
+#' Interface to Integrated Taxonomic Information (ITIS)
+#'
+#' @section ritis package API:
+#' All functions that start with \code{itis_} work with the ITIS Solr
+#' API described at \url{http://www.itis.gov/solr_documentation.html},
+#' which uses the package \pkg{solrium}, and these functions have you
+#' use the \pkg{solrium} function interfaces, so you can pass on parameters
+#' to the \pkg{solrium} functions - so the \pkg{solrium} docs are important
+#' here.
+#'
+#' All other functions work with the ITIS REST API described at
+#' \url{http://www.itis.gov/ws_description.html}. For these methods,
+#' they can grab data in either JSON or XML format. JSON is the default.
+#' We parse the JSON to R native format, either data.frame, character
+#' string, or list. You can get raw JSON as a character string back,
+#' or raw XML as a character string, and then parse yourself with
+#' \pkg{jsonlite} or \pkg{xml2}
+#'
+#' @name ritis-package
+#' @aliases ritis
+#' @docType package
+#' @author Scott Chamberlain \email{myrmecocystus@@gmail.com}
+NULL
diff --git a/R/scientific_name.R b/R/scientific_name.R
new file mode 100644
index 0000000..9c8d85c
--- /dev/null
+++ b/R/scientific_name.R
@@ -0,0 +1,20 @@
+#' Returns the scientific name for the TSN. Also returns the component parts
+#'    (names and indicators) of the scientific name.
+#'
+#' @export
+#' @template common
+#' @template tsn
+#' @return a data.frame
+#' @examples \dontrun{
+#' scientific_name(tsn = 531894)
+#' }
+scientific_name <- function(tsn, wt = "json", raw = FALSE, ...) {
+  out <- itis_GET("getScientificNameFromTSN", list(tsn = tsn), wt, ...)
+  if (raw || wt == "xml") return(out)
+  x <- tc(parse_raw(out))
+  tibble::as_data_frame(pick_cols(
+    data.frame(x, stringsAsFactors = FALSE),
+    c("combinedName","unitInd1","unitInd3","unitName1","unitName2",
+      "unitName3","tsn")
+  ))
+}
diff --git a/R/search_any_match_paged.R b/R/search_any_match_paged.R
new file mode 100644
index 0000000..5694fec
--- /dev/null
+++ b/R/search_any_match_paged.R
@@ -0,0 +1,31 @@
+#' Search for any matched page
+#'
+#' @export
+#' @template common
+#' @inheritParams any_match_count
+#' @return a data.frame
+#' @param pagesize An integer containing the page size (numeric)
+#' @param pagenum An integer containing the page number (numeric)
+#' @param ascend A boolean containing true for ascending sort order or false
+#'    for descending (logical)
+#' @return a data.frame
+#' @seealso \code{\link{search_anymatch}}
+#' @examples \dontrun{
+#' search_any_match_paged(x=202385, pagesize=100, pagenum=1, ascend=FALSE)
+#' search_any_match_paged(x="Zy", pagesize=100, pagenum=1, ascend=FALSE)
+#' }
+search_any_match_paged <- function(x, pagesize = NULL, pagenum = NULL, ascend = NULL, wt = "json", raw = FALSE, ...) {
+  args <- tc(list(srchKey=x, pageSize=pagesize, pageNum=pagenum, ascend=ascend))
+  out <- itis_GET("searchForAnyMatchPaged", args, wt, ...)
+  if (raw || wt == "xml") return(out)
+  x <- parse_raw(out)$anyMatchList
+  tmp <- dr_op(bindlist(x$commonNameList.commonNames), "class")
+  names(tmp) <- paste0("common_", names(tmp))
+  x <- suppressWarnings(
+    cbind(
+      dr_op(x, c("commonNameList.commonNames", "commonNameList.class", "commonNameList.tsn", "class")),
+      tmp
+    )
+  )
+  tibble::as_data_frame(x)
+}
diff --git a/R/search_anymatch.R b/R/search_anymatch.R
new file mode 100644
index 0000000..1a3d5a4
--- /dev/null
+++ b/R/search_anymatch.R
@@ -0,0 +1,25 @@
+#' Search for any match
+#'
+#' @export
+#' @template common
+#' @inheritParams any_match_count
+#' @return a data.frame
+#' @seealso \code{\link{search_any_match_paged}}
+#' @examples \dontrun{
+#' search_anymatch(x = 202385)
+#' search_anymatch(x = "dolphin")
+#' }
+search_anymatch <- function(x, wt = "json", raw = FALSE, ...) {
+  out <- itis_GET("searchForAnyMatch", list(srchKey = x), wt, ...)
+  if (raw || wt == "xml") return(out)
+  x <- parse_raw(out)$anyMatchList
+  tmp <- dr_op(bindlist(x$commonNameList.commonNames), "class")
+  names(tmp) <- paste0("common_", names(tmp))
+  x <- suppressWarnings(
+    cbind(
+      dr_op(x, c("commonNameList.commonNames", "commonNameList.class", "commonNameList.tsn", "class")),
+      tmp
+    )
+  )
+  tibble::as_data_frame(x)
+}
diff --git a/R/search_common.R b/R/search_common.R
new file mode 100644
index 0000000..1894662
--- /dev/null
+++ b/R/search_common.R
@@ -0,0 +1,37 @@
+#' Search for tsn by common name
+#'
+#' @export
+#' @template common
+#' @param x text or taxonomic serial number (TSN) (character or numeric)
+#' @param from (character) One of "all", "begin", or "end". See Details.
+#' @details The \code{from} parameter:
+#' \itemize{
+#'  \item all - Search against the \code{searchByCommonName} API route, which
+#'  searches entire name string
+#'  \item begin - Search against the \code{searchByCommonNameBeginsWith} API route, which
+#'  searches for a match at the beginning of a name string
+#'  \item end - Search against the \code{searchByCommonNameEndsWith} API route, which
+#'  searches for a match at the end of a name string
+#' }
+#' @return a data.frame
+#' @seealso \code{\link{search_scientific}}
+#' @examples \dontrun{
+#' search_common("american bullfrog")
+#' search_common("ferret-badger")
+#' search_common("polar bear")
+#'
+#' # comparison: all, begin, end
+#' search_common("inch")
+#' search_common("inch", from = "begin")
+#' search_common("inch", from = "end")
+#'
+#' # end
+#' search_common("snake", from = "end")
+#' }
+search_common <- function(x, from = "all", wt = "json", raw = FALSE, ...) {
+  verb <- switch(from, all = "searchByCommonName", begin = "searchByCommonNameBeginsWith",
+                 end = "searchByCommonNameEndsWith")
+  out <- itis_GET(verb, list(srchKey = x), wt, ...)
+  if (raw || wt == "xml") return(out)
+  tibble::as_data_frame(dr_op(parse_raw(out)$commonNames, "class"))
+}
diff --git a/R/search_scientific.R b/R/search_scientific.R
new file mode 100644
index 0000000..f157cc0
--- /dev/null
+++ b/R/search_scientific.R
@@ -0,0 +1,18 @@
+#' Search by scientific name
+#'
+#' @export
+#' @template common
+#' @inheritParams any_match_count
+#' @return a data.frame
+#' @seealso \code{\link{search_common}}
+#' @examples \dontrun{
+#' search_scientific("Tardigrada")
+#' search_scientific("Quercus douglasii")
+#' }
+search_scientific <- function(x, wt = "json", raw = FALSE, ...) {
+  out <- itis_GET("searchByScientificName", list(srchKey = x), wt, ...)
+  if (raw || wt == "xml") return(out)
+  tibble::as_data_frame(
+    dr_op(parse_raw(out)$scientificNames, "class")
+  )
+}
diff --git a/R/solr.R b/R/solr.R
new file mode 100644
index 0000000..03ea4a7
--- /dev/null
+++ b/R/solr.R
@@ -0,0 +1,16 @@
+#' ITIS Solr Methods
+#'
+#' ITIS provides access to their data via their Solr service described at
+#' \url{http://www.itis.gov/solr_documentation.html}.  This is a powerful
+#' interace to ITIS data as you have access to a very flexible query interface.
+#'
+#' @section Functions:
+#' \itemize{
+#'  \item \code{\link{itis_search}} - Search
+#'  \item \code{\link{itis_group}} - Group
+#'  \item \code{\link{itis_highlight}} - Highlight
+#'  \item \code{\link{itis_facet}} - Facet
+#' }
+#'
+#' @name solr
+NULL
diff --git a/R/synonym_names.R b/R/synonym_names.R
new file mode 100644
index 0000000..fb723ff
--- /dev/null
+++ b/R/synonym_names.R
@@ -0,0 +1,20 @@
+#' Returns a list of the synonyms (if any) for the TSN.
+#'
+#' @export
+#' @template common
+#' @template tsn
+#' @return a data.frame
+#' @examples \dontrun{
+#' synonym_names(tsn=183671) # tsn not accepted
+#' synonym_names(tsn=526852) # tsn accepted
+#' }
+synonym_names <- function(tsn, wt = "json", raw = FALSE, ...) {
+  out <- itis_GET("getSynonymNamesFromTSN", list(tsn = tsn), wt, ...)
+  if (raw || wt == "xml") return(out)
+  tmp <- parse_raw(out)$synonyms
+  if (inherits(tmp, "logical") || is.null(tmp)) {
+    tibble::data_frame()
+  } else {
+    dr_op(tibble::as_data_frame(tmp), "class")
+  }
+}
diff --git a/R/taxon_authorship.R b/R/taxon_authorship.R
new file mode 100644
index 0000000..ce7cfb7
--- /dev/null
+++ b/R/taxon_authorship.R
@@ -0,0 +1,19 @@
+#' Returns the author information for the TSN.
+#'
+#' @export
+#' @template common
+#' @template tsn
+#' @return a data.frame
+#' @examples \dontrun{
+#' taxon_authorship(tsn = 183671)
+#' }
+taxon_authorship <- function(tsn, wt = "json", raw = FALSE, ...) {
+  out <- itis_GET("getTaxonAuthorshipFromTSN", list(tsn = tsn), wt, ...)
+  if (raw || wt == "xml") return(out)
+  x <- parse_raw(out)
+  if (is.null(x$authorship) || inherits(x$authorship, "logical")) {
+    tibble::data_frame()
+  } else {
+    dr_op(tibble::as_data_frame(x), "class")
+  }
+}
diff --git a/R/terms.R b/R/terms.R
new file mode 100644
index 0000000..8cb937b
--- /dev/null
+++ b/R/terms.R
@@ -0,0 +1,66 @@
+#' Get ITIS terms, i.e., tsn's, authors, common names, and scientific names.
+#'
+#' @export
+#' @template common
+#' @param query One or more common or scientific names, or partial names
+#' @param what One of both (search common and scientific names), common (search just
+#'    common names), or scientific (search just scientific names)
+#' @examples \dontrun{
+#' # Get terms searching both common and scientific names
+#' terms(query='bear')
+#'
+#' # Get terms searching just common names
+#' terms(query='tarweed', "common")
+#'
+#' # Get terms searching just scientific names
+#' terms(query='Poa annua', "scientific")
+#'
+#' # many at once
+#' terms(query=c('Poa annua', 'Pinus contorta'), "scientific")
+#' }
+terms <- function(query, what = "both", wt = "json", raw = FALSE, ...) {
+  what <- match.arg(what, c('both', 'scientific', 'common'))
+  temp <- switch(what,
+                 both = lapply(query, function(x) itisterms(x, wt, raw, ...)),
+                 common = lapply(query, function(x) itistermsfromcommonname(x, wt, raw, ...)),
+                 scientific = lapply(query, function(x) itistermsfromscientificname(x, wt, raw, ...)))
+  if (length(query) == 1) {
+    temp[[1]]
+  } else {
+    stats::setNames(temp, query)
+  }
+}
+
+# helpers
+itisterms <- function(x, wt = "json", raw = FALSE, ...) {
+  out <- itis_GET("getITISTerms", list(srchKey = x), wt, ...)
+  if (raw || wt == "xml") return(out)
+  x <- parse_raw(out)
+  if (is.null(x$itisTerms) || inherits(x$itisTerms, "logical")) {
+    tibble::data_frame()
+  } else {
+    dr_op(tibble::as_data_frame(x$itisTerms), "class")
+  }
+}
+
+itistermsfromcommonname <- function(x, wt = "json", raw = FALSE, ...) {
+  out <- itis_GET("getITISTermsFromCommonName", list(srchKey = x), wt, ...)
+  if (raw || wt == "xml") return(out)
+  x <- parse_raw(out)
+  if (is.null(x$itisTerms) || inherits(x$itisTerms, "logical")) {
+    tibble::data_frame()
+  } else {
+    dr_op(tibble::as_data_frame(x$itisTerms), "class")
+  }
+}
+
+itistermsfromscientificname <- function(x, wt = "json", raw = FALSE, ...) {
+  out <- itis_GET("getITISTermsFromScientificName", list(srchKey = x), wt, ...)
+  if (raw || wt == "xml") return(out)
+  x <- parse_raw(out)
+  if (is.null(x$itisTerms) || inherits(x$itisTerms, "logical")) {
+    tibble::data_frame()
+  } else {
+    dr_op(tibble::as_data_frame(x$itisTerms), "class")
+  }
+}
diff --git a/R/tsn2lsid.R b/R/tsn2lsid.R
new file mode 100644
index 0000000..a387c55
--- /dev/null
+++ b/R/tsn2lsid.R
@@ -0,0 +1,17 @@
+#' Gets the unique LSID for the TSN, or an empty result if there is no match.
+#'
+#' @export
+#' @template common
+#' @template tsn
+#' @return a character string, an LSID, or \code{NULL} if nothing found
+#' @examples \dontrun{
+#' tsn2lsid(tsn = 155166)
+#' tsn2lsid(tsn = 333333333)
+#' tsn2lsid(155166, raw = TRUE)
+#' tsn2lsid(155166, wt = "xml")
+#' }
+tsn2lsid <- function(tsn, wt = "json", raw = FALSE, ...) {
+  x <- itis_GET("getLSIDFromTSN", list(tsn = tsn), wt, ...)
+  if (raw || wt == "xml") return(x)
+  parse_raw(x)$return
+}
diff --git a/R/tsn_by_vernacular_language.R b/R/tsn_by_vernacular_language.R
new file mode 100644
index 0000000..e3e2949
--- /dev/null
+++ b/R/tsn_by_vernacular_language.R
@@ -0,0 +1,20 @@
+#' Get tsn by vernacular language
+#'
+#' @export
+#' @template common
+#' @param language A string containing the language. This is a language string,
+#'    not the international language code (character)
+#' @return a data.frame
+#' @examples \dontrun{
+#' tsn_by_vernacular_language(language = "french")
+#' }
+tsn_by_vernacular_language <- function(language, wt = "json", raw = FALSE, ...) {
+  out <- itis_GET("getTsnByVernacularLanguage", list(language = language), wt, ...)
+  if (raw || wt == "xml") return(out)
+  x <- parse_raw(out)
+  if (is.null(x$vernacularTsns) || inherits(x$vernacularTsns, "logical")) {
+    tibble::data_frame()
+  } else {
+    dr_op(tibble::as_data_frame(x$vernacularTsns), "class")
+  }
+}
diff --git a/R/unacceptability_reason.R b/R/unacceptability_reason.R
new file mode 100644
index 0000000..48f5500
--- /dev/null
+++ b/R/unacceptability_reason.R
@@ -0,0 +1,18 @@
+#' Returns the unacceptability reason, if any, for the TSN.
+#'
+#' @export
+#' @template common
+#' @template tsn
+#' @examples \dontrun{
+#' unacceptability_reason(tsn = 183671)
+#' }
+unacceptability_reason <- function(tsn, wt = "json", raw = FALSE, ...) {
+  out <- itis_GET("getUnacceptabilityReasonFromTSN", list(tsn = tsn), wt, ...)
+  if (raw || wt == "xml") return(out)
+  x <- parse_raw(out)
+  if (is.null(x$unacceptReason) || inherits(x$unacceptReason, "logical")) {
+    tibble::data_frame()
+  } else {
+    dr_op(tibble::as_data_frame(x), "class")
+  }
+}
diff --git a/R/usage.R b/R/usage.R
new file mode 100644
index 0000000..100226c
--- /dev/null
+++ b/R/usage.R
@@ -0,0 +1,20 @@
+#' Returns the usage information for the TSN.
+#'
+#' @export
+#' @template common
+#' @template tsn
+#' @examples \dontrun{
+#' usage(tsn = 526852)
+#' usage(tsn = 526852, raw = TRUE)
+#' usage(tsn = 526852, wt = "xml")
+#' }
+usage <- function(tsn, wt = "json", raw = FALSE, ...) {
+  out <- itis_GET("getTaxonomicUsageFromTSN", list(tsn = tsn), wt, ...)
+  if (raw || wt == "xml") return(out)
+  x <- parse_raw(out)
+  if (is.null(x$taxonUsageRating) || inherits(x$taxonUsageRating, "logical")) {
+    tibble::data_frame()
+  } else {
+    dr_op(tibble::as_data_frame(x), "class")
+  }
+}
diff --git a/R/vernacular_languages.R b/R/vernacular_languages.R
new file mode 100644
index 0000000..4e80280
--- /dev/null
+++ b/R/vernacular_languages.R
@@ -0,0 +1,13 @@
+#' Provides a list of the unique languages used in the vernacular table.
+#'
+#' @export
+#' @template common
+#' @return a character vector of verncular names
+#' @examples \dontrun{
+#' vernacular_languages()
+#' }
+vernacular_languages <- function(wt = "json", raw = FALSE, ...) {
+  out <- itis_GET("getVernacularLanguages", list(), wt, ...)
+  if (raw || wt == "xml") return(out)
+  parse_raw(out)$languageNames
+}
diff --git a/R/zzz.R b/R/zzz.R
new file mode 100644
index 0000000..5003ddf
--- /dev/null
+++ b/R/zzz.R
@@ -0,0 +1,87 @@
+con_utf8 <- function(x) rawToChar(httr::content(x, "raw", encoding = "UTF-8"))
+
+tc <- function(l) Filter(Negate(is.null), l)
+
+argsnull <- function(x) {
+  if (length(x) == 0) {
+    NULL
+  } else {
+    x
+  }
+}
+
+nmslwr <- function(x) {
+  stats::setNames(x, tolower(names(x)))
+}
+
+itbase <- function() 'https://www.itis.gov/ITISWebService/services/ITISService/'
+itjson <- function() 'https://www.itis.gov/ITISWebService/jsonservice/'
+iturl <- function(x) {
+  if (!tolower(x) %in% c('json', 'xml')) {
+    stop("'wt' must be one of 'json' or 'xml'", call. = FALSE)
+  }
+  switch(
+    x,
+    json = itjson(),
+    xml = itbase()
+  )
+}
+
+`%-%` <- function(x, y) if (length(x) == 0 || nchar(x) == 0 || is.null(x)) y else x
+
+dr_op <- function(x, y) {
+  UseMethod("dr_op")
+}
+
+dr_op.default <- function(x, y) {
+  return(NULL)
+}
+
+dr_op.data.frame <- function(x, y) {
+  x[, !tolower(names(x)) %in% tolower(y)]
+}
+
+dr_op.list <- function(x, y) {
+  x[!tolower(names(x)) %in% tolower(y)]
+}
+
+itis_GET <- function(endpt, args, wt, ...){
+  args <- argsnull(args)
+  tt <- httr::GET(paste0(iturl(wt), endpt), query = args, ...)
+  httr::stop_for_status(tt)
+  #err_handle(tt)
+  con_utf8(tt)
+}
+
+parse_raw <- function(x) {
+  if (inherits(x, "character") && !nzchar(x)) {
+    return(tibble::as_data_frame())
+  }
+  jsonlite::fromJSON(x, flatten = TRUE)
+}
+
+pick_cols <- function(x, nms) {
+  UseMethod("pick_cols")
+}
+
+pick_cols.default <- function(x, nms) {
+  return(NULL)
+}
+
+pick_cols.data.frame <- function(x, nms) {
+  if (NROW(x) > 0) {
+    names(x) <- tolower(names(x))
+    x[, names(x) %in% tolower(nms)]
+  } else {
+    NULL
+  }
+}
+
+pick_cols.list <- function(x, nms) {
+  if (NROW(x) > 0) {
+    names(x) <- tolower(names(x))
+    x[names(x) %in% tolower(nms)]
+  } else {
+    NULL
+  }
+}
diff --git a/README.md b/README.md
new file mode 100644
index 0000000..7cf0d0b
--- /dev/null
+++ b/README.md
@@ -0,0 +1,147 @@
+ritis
+=====
+
+
+
+[![Build Status](https://travis-ci.org/ropensci/ritis.svg?branch=master)](https://travis-ci.org/ropensci/ritis)
+[![Build status](https://ci.appveyor.com/api/projects/status/pvrc9muevha00fie/branch/master?svg=true)](https://ci.appveyor.com/project/sckott/ritis/branch/master)
+[![codecov](https://codecov.io/gh/ropensci/ritis/branch/master/graph/badge.svg)](https://codecov.io/gh/ropensci/ritis)
+[![rstudio mirror downloads](http://cranlogs.r-pkg.org/badges/ritis)](https://github.com/metacran/cranlogs.app)
+[![cran version](http://www.r-pkg.org/badges/version/ritis)](https://cran.r-project.org/package=ritis)
+
+* [ITIS API Docs](https://www.itis.gov/ws_description.html)
+* [Solr service](https://www.itis.gov/solr_documentation.html)
+
+## Installation
+
+Stable, CRAN version
+
+
+```r
+install.packages("ritis")
+```
+
+Dev version
+
+
+```r
+devtools::install_github("ropensci/ritis")
+```
+
+
+```r
+library("ritis")
+```
+
+## Solr service
+
+matches only monomials
+
+
+```r
+itis_search(q = "nameWOInd:/[A-Za-z0-9]*[%20]{0,0}*/")
+#> # A tibble: 10 × 27
+#>      tsn          nameWInd         nameWOInd             unit1   usage
+#>    <chr>             <chr>             <chr>             <chr>   <chr>
+#> 1     51     Schizomycetes     Schizomycetes     Schizomycetes invalid
+#> 2     50          Bacteria          Bacteria          Bacteria   valid
+#> 3     52     Archangiaceae     Archangiaceae     Archangiaceae invalid
+#> 4     53   Pseudomonadales   Pseudomonadales   Pseudomonadales   valid
+#> 5     54 Rhodobacteriineae Rhodobacteriineae Rhodobacteriineae invalid
+#> 6     55  Pseudomonadineae  Pseudomonadineae  Pseudomonadineae invalid
+#> 7     56  Nitrobacteraceae  Nitrobacteraceae  Nitrobacteraceae invalid
+#> 8     57       Nitrobacter       Nitrobacter       Nitrobacter   valid
+#> 9     65      Nitrosomonas      Nitrosomonas      Nitrosomonas   valid
+#> 10    70  Thiobacteriaceae  Thiobacteriaceae  Thiobacteriaceae invalid
+#> # ... with 22 more variables: unacceptReason <chr>,
+#> #   credibilityRating <chr>, completenessRating <chr>,
+#> #   currencyRating <chr>, kingdom <chr>, rankID <chr>, rank <chr>,
+#> #   hierarchySoFar <chr>, hierarchySoFarWRanks <chr>, hierarchyTSN <chr>,
+#> #   synonyms <chr>, synonymTSNs <chr>, otherSource <chr>,
+#> #   acceptedTSN <chr>, comment <chr>, createDate <chr>, updateDate <chr>,
+#> #   `_version_` <dbl>, taxonAuthor <chr>, vernacular <chr>,
+#> #   hierarchicalSort <chr>, parentTSN <chr>
+```
+
+matches only binomials
+
+
+```r
+itis_search(q = "nameWOInd:/[A-Za-z0-9]*[%20]{1,1}[A-Za-z0-9]*/")
+#> # A tibble: 10 × 25
+#>      tsn                  nameWInd                 nameWOInd        unit1
+#>    <chr>                     <chr>                     <chr>        <chr>
+#> 1     58        Nitrobacter agilis        Nitrobacter agilis  Nitrobacter
+#> 2     59        Nitrobacter flavus        Nitrobacter flavus  Nitrobacter
+#> 3     60  Nitrobacter oligotrophis  Nitrobacter oligotrophis  Nitrobacter
+#> 4     61   Nitrobacter polytrophus   Nitrobacter polytrophus  Nitrobacter
+#> 5     62      Nitrobacter punctata      Nitrobacter punctata  Nitrobacter
+#> 6     64  Nitrobacter winogradskyi  Nitrobacter winogradskyi  Nitrobacter
+#> 7     66     Nitrosomonas europaea     Nitrosomonas europaea Nitrosomonas
+#> 8     67 Nitrosomonas groningensis Nitrosomonas groningensis Nitrosomonas
+#> 9     68   Nitrosomonas javenensis   Nitrosomonas javenensis Nitrosomonas
+#> 10    69    Nitrosomonas monocella    Nitrosomonas monocella Nitrosomonas
+#> # ... with 21 more variables: unit2 <chr>, usage <chr>,
+#> #   unacceptReason <chr>, credibilityRating <chr>, kingdom <chr>,
+#> #   rankID <chr>, rank <chr>, hierarchySoFar <chr>,
+#> #   hierarchySoFarWRanks <chr>, hierarchyTSN <chr>, synonyms <chr>,
+#> #   synonymTSNs <chr>, otherSource <chr>, acceptedTSN <chr>,
+#> #   comment <chr>, createDate <chr>, updateDate <chr>, `_version_` <dbl>,
+#> #   taxonAuthor <chr>, parentTSN <chr>, hierarchicalSort <chr>
+```
+
+## REST API
+
+Get accepted names for a TSN
+
+
+```r
+accepted_names(tsn = 504239)
+#> # A tibble: 1 × 3
+#>          acceptedName acceptedTsn     author
+#>                 <chr>       <chr>      <chr>
+#> 1 Dasiphora fruticosa      836659 (L.) Rydb.
+```
+
+Get common names for a TSN
+
+
+```r
+common_names(tsn = 183833)
+#> # A tibble: 3 × 3
+#>            commonName language    tsn
+#>                 <chr>    <chr>  <chr>
+#> 1 African hunting dog  English 183833
+#> 2    African Wild Dog  English 183833
+#> 3 Painted Hunting Dog  English 183833
+```
+
+Full hierarchy for a TSN
+
+
+```r
+hierarchy_full(tsn = 37906)
+#> # A tibble: 60 × 5
+#>         parentname parenttsn      rankname       taxonname    tsn
+#> *            <chr>     <chr>         <chr>           <chr>  <chr>
+#> 1                                  Kingdom         Plantae 202422
+#> 2          Plantae    202422    Subkingdom   Viridiplantae 954898
+#> 3    Viridiplantae    954898  Infrakingdom    Streptophyta 846494
+#> 4     Streptophyta    846494 Superdivision     Embryophyta 954900
+#> 5      Embryophyta    954900      Division    Tracheophyta 846496
+#> 6     Tracheophyta    846496   Subdivision Spermatophytina 846504
+#> 7  Spermatophytina    846504         Class   Magnoliopsida  18063
+#> 8    Magnoliopsida     18063    Superorder       Asteranae 846535
+#> 9        Asteranae    846535         Order       Asterales  35419
+#> 10       Asterales     35419        Family      Asteraceae  35420
+#> # ... with 50 more rows
+```
+
+## Meta
+
+* Please [report any issues or bugs](https://github.com/ropensci/ritis/issues).
+* License: MIT
+* Get citation information for `ritis` in R doing `citation(package = 'ritis')`
+* Please note that this project is released with a [Contributor Code of Conduct](CONDUCT.md). By participating in this project you agree to abide by its terms.
+
+[![ropensci_footer](http://ropensci.org/public_images/github_footer.png)](http://ropensci.org)
diff --git a/build/vignette.rds b/build/vignette.rds
new file mode 100644
index 0000000..100219f
Binary files /dev/null and b/build/vignette.rds differ
diff --git a/debian/README.test b/debian/README.test
deleted file mode 100644
index 90657cf..0000000
--- a/debian/README.test
+++ /dev/null
@@ -1,8 +0,0 @@
-Notes on how this package can be tested.
-────────────────────────────────────────
-
-This package can be tested by running the provided test:
-
-    sh run-unit-test
-
-in order to confirm its integrity.
diff --git a/debian/changelog b/debian/changelog
deleted file mode 100644
index cfceb14..0000000
--- a/debian/changelog
+++ /dev/null
@@ -1,5 +0,0 @@
-r-cran-ritis (0.5.4-1) unstable; urgency=medium
-
-  * Initial release (closes: #849071)
-
- -- Andreas Tille <tille at debian.org>  Thu, 22 Dec 2016 13:49:18 +0100
diff --git a/debian/compat b/debian/compat
deleted file mode 100644
index f599e28..0000000
--- a/debian/compat
+++ /dev/null
@@ -1 +0,0 @@
-10
diff --git a/debian/control b/debian/control
deleted file mode 100644
index d1d9955..0000000
--- a/debian/control
+++ /dev/null
@@ -1,28 +0,0 @@
-Source: r-cran-ritis
-Maintainer: Debian Med Packaging Team <debian-med-packaging at lists.alioth.debian.org>
-Uploaders: Andreas Tille <tille at debian.org>
-Section: gnu-r
-Priority: optional
-Build-Depends: debhelper (>= 10),
-               dh-r,
-               r-base-dev,
-               r-cran-httr (>= 1.2.0),
-               r-cran-jsonlite (>= 0.9.22),
-               r-cran-data.table,
-               r-cran-solrium
-Standards-Version: 3.9.8
-Vcs-Browser: https://anonscm.debian.org/viewvc/debian-med/trunk/packages/R/r-cran-ritis/trunk/
-Vcs-Svn: svn://anonscm.debian.org/debian-med/trunk/packages/R/r-cran-ritis/trunk/
-Homepage: https://cran.r-project.org/package=ritis
-
-Package: r-cran-ritis
-Architecture: all
-Depends: ${R:Depends},
-         ${misc:Depends}
-Recommends: ${R:Recommends}
-Suggests: ${R:Suggests}
-Description: GNU R Integrated Taxonomic Information System client
- A GNU R interface to the Integrated Taxonomic Information System ('ITIS')
- (<https://www.itis.gov>). Includes functions to work with the 'ITIS' REST
- 'API' methods (<https://www.itis.gov/ws_description.html>), as well as the
- 'Solr' web service (<https://www.itis.gov/solr_documentation.html>).
diff --git a/debian/copyright b/debian/copyright
deleted file mode 100644
index 1ee4efa..0000000
--- a/debian/copyright
+++ /dev/null
@@ -1,32 +0,0 @@
-Format: https://www.debian.org/doc/packaging-manuals/copyright-format/1.0/
-Upstream-Name: ritis
-Upstream-Contact: Scott Chamberlain <myrmecocystus at gmail.com>
-Source: https://cran.r-project.org/package=ritis
-
-Files: *
-Copyright: 2014-2016 Scott Chamberlain
-License: MIT
-
-Files: debian/*
-Copyright: 2016 Andreas Tille <tille at debian.org>
-License: MIT
-
-License: MIT
- Permission is hereby granted, free of charge, to any person obtaining a
- copy of this software and associated documentation files (the
- "Software"), to deal in the Software without restriction, including
- without limitation the rights to use, copy, modify, merge, publish,
- distribute, sublicense, and/or sell copies of the Software, and to
- permit persons to whom the Software is furnished to do so, subject to
- the following conditions:
- .
- The above copyright notice and this permission notice shall be included
- in all copies or substantial portions of the Software.
- .
- THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
- OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
- MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
- IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
- CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
- TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
- SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
diff --git a/debian/docs b/debian/docs
deleted file mode 100644
index 6466d39..0000000
--- a/debian/docs
+++ /dev/null
@@ -1,3 +0,0 @@
-debian/tests/run-unit-test
-debian/README.test
-tests
diff --git a/debian/rules b/debian/rules
deleted file mode 100755
index 529c38a..0000000
--- a/debian/rules
+++ /dev/null
@@ -1,5 +0,0 @@
-#!/usr/bin/make -f
-
-%:
-	dh $@ --buildsystem R
-
diff --git a/debian/source/format b/debian/source/format
deleted file mode 100644
index 163aaf8..0000000
--- a/debian/source/format
+++ /dev/null
@@ -1 +0,0 @@
-3.0 (quilt)
diff --git a/debian/tests/control b/debian/tests/control
deleted file mode 100644
index a62fb6e..0000000
--- a/debian/tests/control
+++ /dev/null
@@ -1,5 +0,0 @@
-Tests: run-unit-test
-Depends: @, r-cran-testthat,
-Restrictions: allow-stderr
-
-
diff --git a/debian/tests/run-unit-test b/debian/tests/run-unit-test
deleted file mode 100644
index 445bd41..0000000
--- a/debian/tests/run-unit-test
+++ /dev/null
@@ -1,17 +0,0 @@
-#!/bin/sh -e
-
-pkgname=ritis
-debname=r-cran-ritis
-
-if [ "$ADTTMP" = "" ] ; then
-    ADTTMP=`mktemp -d /tmp/${debname}-test.XXXXXX`
-    trap "rm -rf $ADTTMP" 0 INT QUIT ABRT PIPE TERM
-fi
-cd $ADTTMP
-cp -a /usr/share/doc/$debname/tests/* $ADTTMP
-gunzip -r *
-for testfile in *.R; do
-    echo "BEGIN TEST $testfile"
-    LC_ALL=C R --no-save < $testfile
-done
-
diff --git a/debian/watch b/debian/watch
deleted file mode 100644
index 72ec913..0000000
--- a/debian/watch
+++ /dev/null
@@ -1,2 +0,0 @@
-version=4
-https://cran.r-project.org/src/contrib/ritis_([-\d.]*)\.tar\.gz
diff --git a/inst/doc/ritis_vignette.Rmd b/inst/doc/ritis_vignette.Rmd
new file mode 100644
index 0000000..7a19595
--- /dev/null
+++ b/inst/doc/ritis_vignette.Rmd
@@ -0,0 +1,161 @@
+<!--
+%\VignetteEngine{knitr::knitr}
+%\VignetteIndexEntry{ritis introduction}
+%\VignetteEncoding{UTF-8}
+-->
+
+
+
+ritis introduction
+==================
+
+An interface to the Integrated Taxonomic Information System (ITIS)
+
+## Installation
+
+Install from CRAN
+
+
+```r
+install.packages("ritis")
+```
+
+Or install the development version from GitHub
+
+
+```r
+devtools::install_github("ropensci/ritis")
+```
+
+Load `ritis`
+
+
+```r
+library("ritis")
+```
+
+## ITIS Solr interface
+
+There are four methods.
+
+* `itis_search()` - Search
+* `itis_group()` - Group
+* `itis_highlight()` - Hightlight
+* `itis_facet()` - Facet
+
+These four methods use the equivalent functions in the package `solrium`, e.g.,
+`ritis::itis_search()` uses `solrium::solr_search()`, etc. The `itis_*()` functions
+simply use `...` to allow users to pass on parameters to the wrapped `solrium`
+functions. So do read the `solrium` docs.
+
+ITIS Solr API docs: <https://www.itis.gov/solr_documentation.html>
+
+Some examples:
+
+matches only monomials
+
+
+```r
+itis_search(q = "nameWOInd:/[A-Za-z0-9]*[%20]{0,0}*/")
+#> # A tibble: 10 × 27
+#>      tsn          nameWInd         nameWOInd             unit1   usage
+#>    <chr>             <chr>             <chr>             <chr>   <chr>
+#> 1     51     Schizomycetes     Schizomycetes     Schizomycetes invalid
+#> 2     50          Bacteria          Bacteria          Bacteria   valid
+#> 3     52     Archangiaceae     Archangiaceae     Archangiaceae invalid
+#> 4     53   Pseudomonadales   Pseudomonadales   Pseudomonadales   valid
+#> 5     54 Rhodobacteriineae Rhodobacteriineae Rhodobacteriineae invalid
+#> 6     55  Pseudomonadineae  Pseudomonadineae  Pseudomonadineae invalid
+#> 7     56  Nitrobacteraceae  Nitrobacteraceae  Nitrobacteraceae invalid
+#> 8     57       Nitrobacter       Nitrobacter       Nitrobacter   valid
+#> 9     65      Nitrosomonas      Nitrosomonas      Nitrosomonas   valid
+#> 10    70  Thiobacteriaceae  Thiobacteriaceae  Thiobacteriaceae invalid
+#> # ... with 22 more variables: unacceptReason <chr>,
+#> #   credibilityRating <chr>, completenessRating <chr>,
+#> #   currencyRating <chr>, kingdom <chr>, rankID <chr>, rank <chr>,
+#> #   hierarchySoFar <chr>, hierarchySoFarWRanks <chr>, hierarchyTSN <chr>,
+#> #   synonyms <chr>, synonymTSNs <chr>, otherSource <chr>,
+#> #   acceptedTSN <chr>, comment <chr>, createDate <chr>, updateDate <chr>,
+#> #   `_version_` <dbl>, taxonAuthor <chr>, vernacular <chr>,
+#> #   hierarchicalSort <chr>, parentTSN <chr>
+```
+
+matches only binomials
+
+
+```r
+itis_search(q = "nameWOInd:/[A-Za-z0-9]*[%20]{1,1}[A-Za-z0-9]*/")
+#> # A tibble: 10 × 25
+#>      tsn                  nameWInd                 nameWOInd        unit1
+#>    <chr>                     <chr>                     <chr>        <chr>
+#> 1     58        Nitrobacter agilis        Nitrobacter agilis  Nitrobacter
+#> 2     59        Nitrobacter flavus        Nitrobacter flavus  Nitrobacter
+#> 3     60  Nitrobacter oligotrophis  Nitrobacter oligotrophis  Nitrobacter
+#> 4     61   Nitrobacter polytrophus   Nitrobacter polytrophus  Nitrobacter
+#> 5     62      Nitrobacter punctata      Nitrobacter punctata  Nitrobacter
+#> 6     64  Nitrobacter winogradskyi  Nitrobacter winogradskyi  Nitrobacter
+#> 7     66     Nitrosomonas europaea     Nitrosomonas europaea Nitrosomonas
+#> 8     67 Nitrosomonas groningensis Nitrosomonas groningensis Nitrosomonas
+#> 9     68   Nitrosomonas javenensis   Nitrosomonas javenensis Nitrosomonas
+#> 10    69    Nitrosomonas monocella    Nitrosomonas monocella Nitrosomonas
+#> # ... with 21 more variables: unit2 <chr>, usage <chr>,
+#> #   unacceptReason <chr>, credibilityRating <chr>, kingdom <chr>,
+#> #   rankID <chr>, rank <chr>, hierarchySoFar <chr>,
+#> #   hierarchySoFarWRanks <chr>, hierarchyTSN <chr>, synonyms <chr>,
+#> #   synonymTSNs <chr>, otherSource <chr>, acceptedTSN <chr>,
+#> #   comment <chr>, createDate <chr>, updateDate <chr>, `_version_` <dbl>,
+#> #   taxonAuthor <chr>, parentTSN <chr>, hierarchicalSort <chr>
+```
+
+## ITIS REST API interface
+
+ITIS REST API docs: <http://www.itis.gov/ws_description.html>
+
+The following are some example uses. There are many more methods not shown below
+
+-------
+
+Get accepted names for a TSN
+
+
+```r
+accepted_names(tsn = 504239)
+#> # A tibble: 1 × 3
+#>          acceptedName acceptedTsn     author
+#>                 <chr>       <chr>      <chr>
+#> 1 Dasiphora fruticosa      836659 (L.) Rydb.
+```
+
+Get common names for a TSN
+
+
+```r
+common_names(tsn = 183833)
+#> # A tibble: 3 × 3
+#>            commonName language    tsn
+#>                 <chr>    <chr>  <chr>
+#> 1 African hunting dog  English 183833
+#> 2    African Wild Dog  English 183833
+#> 3 Painted Hunting Dog  English 183833
+```
+
+Full hierarchy for a TSN
+
+
+```r
+hierarchy_full(tsn = 37906)
+#> # A tibble: 60 × 5
+#>         parentname parenttsn      rankname       taxonname    tsn
+#> *            <chr>     <chr>         <chr>           <chr>  <chr>
+#> 1                                  Kingdom         Plantae 202422
+#> 2          Plantae    202422    Subkingdom   Viridiplantae 954898
+#> 3    Viridiplantae    954898  Infrakingdom    Streptophyta 846494
+#> 4     Streptophyta    846494 Superdivision     Embryophyta 954900
+#> 5      Embryophyta    954900      Division    Tracheophyta 846496
+#> 6     Tracheophyta    846496   Subdivision Spermatophytina 846504
+#> 7  Spermatophytina    846504         Class   Magnoliopsida  18063
+#> 8    Magnoliopsida     18063    Superorder       Asteranae 846535
+#> 9        Asteranae    846535         Order       Asterales  35419
+#> 10       Asterales     35419        Family      Asteraceae  35420
+#> # ... with 50 more rows
+```
diff --git a/inst/doc/ritis_vignette.html b/inst/doc/ritis_vignette.html
new file mode 100644
index 0000000..1f6ab4f
--- /dev/null
+++ b/inst/doc/ritis_vignette.html
@@ -0,0 +1,351 @@
+<!DOCTYPE html>
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
+
+<title>ritis introduction</title>
+
+<script type="text/javascript">
+window.onload = function() {
+  var imgs = document.getElementsByTagName('img'), i, img;
+  for (i = 0; i < imgs.length; i++) {
+    img = imgs[i];
+    // center an image if it is the only element of its parent
+    if (img.parentElement.childElementCount === 1)
+      img.parentElement.style.textAlign = 'center';
+  }
+};
+</script>
+
+<!-- Styles for R syntax highlighter -->
+<style type="text/css">
+   pre .operator,
+   pre .paren {
+     color: rgb(104, 118, 135)
+   }
+
+   pre .literal {
+     color: #990073
+   }
+
+   pre .number {
+     color: #099;
+   }
+
+   pre .comment {
+     color: #998;
+     font-style: italic
+   }
+
+   pre .keyword {
+     color: #900;
+     font-weight: bold
+   }
+
+   pre .identifier {
+     color: rgb(0, 0, 0);
+   }
+
+   pre .string {
+     color: #d14;
+   }
+</style>
+
+<!-- R syntax highlighter -->
+<script type="text/javascript">
+var hljs=new function(){function m(p){return p.replace(/&/gm,"&").replace(/</gm,"<")}function f(r,q,p){return RegExp(q,"m"+(r.cI?"i":"")+(p?"g":""))}function b(r){for(var p=0;p<r.childNodes.length;p++){var q=r.childNodes[p];if(q.nodeName=="CODE"){return q}if(!(q.nodeType==3&&q.nodeValue.match(/\s+/))){break}}}function h(t,s){var p="";for(var r=0;r<t.childNodes.length;r++){if(t.childNodes[r].nodeType==3){var q=t.childNodes[r].nodeValue;if(s){q=q.replace(/\n/g,"")}p+=q}else{if(t.chi [...]
+hljs.initHighlightingOnLoad();
+</script>
+
+
+
+<style type="text/css">
+body, td {
+   font-family: sans-serif;
+   background-color: white;
+   font-size: 13px;
+}
+
+body {
+  max-width: 800px;
+  margin: auto;
+  padding: 1em;
+  line-height: 20px;
+}
+
+tt, code, pre {
+   font-family: 'DejaVu Sans Mono', 'Droid Sans Mono', 'Lucida Console', Consolas, Monaco, monospace;
+}
+
+h1 {
+   font-size:2.2em;
+}
+
+h2 {
+   font-size:1.8em;
+}
+
+h3 {
+   font-size:1.4em;
+}
+
+h4 {
+   font-size:1.0em;
+}
+
+h5 {
+   font-size:0.9em;
+}
+
+h6 {
+   font-size:0.8em;
+}
+
+a:visited {
+   color: rgb(50%, 0%, 50%);
+}
+
+pre, img {
+  max-width: 100%;
+}
+pre {
+  overflow-x: auto;
+}
+pre code {
+   display: block; padding: 0.5em;
+}
+
+code {
+  font-size: 92%;
+  border: 1px solid #ccc;
+}
+
+code[class] {
+  background-color: #F8F8F8;
+}
+
+table, td, th {
+  border: none;
+}
+
+blockquote {
+   color:#666666;
+   margin:0;
+   padding-left: 1em;
+   border-left: 0.5em #EEE solid;
+}
+
+hr {
+   height: 0px;
+   border-bottom: none;
+   border-top-width: thin;
+   border-top-style: dotted;
+   border-top-color: #999999;
+}
+
+ at media print {
+   * {
+      background: transparent !important;
+      color: black !important;
+      filter:none !important;
+      -ms-filter: none !important;
+   }
+
+   body {
+      font-size:12pt;
+      max-width:100%;
+   }
+
+   a, a:visited {
+      text-decoration: underline;
+   }
+
+   hr {
+      visibility: hidden;
+      page-break-before: always;
+   }
+
+   pre, blockquote {
+      padding-right: 1em;
+      page-break-inside: avoid;
+   }
+
+   tr, img {
+      page-break-inside: avoid;
+   }
+
+   img {
+      max-width: 100% !important;
+   }
+
+   @page :left {
+      margin: 15mm 20mm 15mm 10mm;
+   }
+
+   @page :right {
+      margin: 15mm 10mm 15mm 20mm;
+   }
+
+   p, h2, h3 {
+      orphans: 3; widows: 3;
+   }
+
+   h2, h3 {
+      page-break-after: avoid;
+   }
+}
+</style>
+
+
+
+</head>
+
+<body>
+<!--
+%\VignetteEngine{knitr::knitr}
+%\VignetteIndexEntry{ritis introduction}
+%\VignetteEncoding{UTF-8}
+-->
+
+<h1>ritis introduction</h1>
+
+<p>An interface to the Integrated Taxonomic Information System (ITIS)</p>
+
+<h2>Installation</h2>
+
+<p>Install from CRAN</p>
+
+<pre><code class="r">install.packages("ritis")
+</code></pre>
+
+<p>Or install the development version from GitHub</p>
+
+<pre><code class="r">devtools::install_github("ropensci/ritis")
+</code></pre>
+
+<p>Load <code>ritis</code></p>
+
+<pre><code class="r">library("ritis")
+</code></pre>
+
+<h2>ITIS Solr interface</h2>
+
+<p>There are four methods.</p>
+
+<ul>
+<li><code>itis_search()</code> - Search</li>
+<li><code>itis_group()</code> - Group</li>
+<li><code>itis_highlight()</code> - Hightlight</li>
+<li><code>itis_facet()</code> - Facet</li>
+</ul>
+
+<p>These four methods use the equivalent functions in the package <code>solrium</code>, e.g.,
+<code>ritis::itis_search()</code> uses <code>solrium::solr_search()</code>, etc. The <code>itis_*()</code> functions
+simply use <code>...</code> to allow users to pass on parameters to the wrapped <code>solrium</code>
+functions. So do read the <code>solrium</code> docs.</p>
+
+<p>ITIS Solr API docs: <a href="https://www.itis.gov/solr_documentation.html">https://www.itis.gov/solr_documentation.html</a></p>
+
+<p>Some examples:</p>
+
+<p>matches only monomials</p>
+
+<pre><code class="r">itis_search(q = "nameWOInd:/[A-Za-z0-9]*[%20]{0,0}*/")
+#> # A tibble: 10 × 27
+#>      tsn          nameWInd         nameWOInd             unit1   usage
+#>    <chr>             <chr>             <chr>             <chr>   <chr>
+#> 1     51     Schizomycetes     Schizomycetes     Schizomycetes invalid
+#> 2     50          Bacteria          Bacteria          Bacteria   valid
+#> 3     52     Archangiaceae     Archangiaceae     Archangiaceae invalid
+#> 4     53   Pseudomonadales   Pseudomonadales   Pseudomonadales   valid
+#> 5     54 Rhodobacteriineae Rhodobacteriineae Rhodobacteriineae invalid
+#> 6     55  Pseudomonadineae  Pseudomonadineae  Pseudomonadineae invalid
+#> 7     56  Nitrobacteraceae  Nitrobacteraceae  Nitrobacteraceae invalid
+#> 8     57       Nitrobacter       Nitrobacter       Nitrobacter   valid
+#> 9     65      Nitrosomonas      Nitrosomonas      Nitrosomonas   valid
+#> 10    70  Thiobacteriaceae  Thiobacteriaceae  Thiobacteriaceae invalid
+#> # ... with 22 more variables: unacceptReason <chr>,
+#> #   credibilityRating <chr>, completenessRating <chr>,
+#> #   currencyRating <chr>, kingdom <chr>, rankID <chr>, rank <chr>,
+#> #   hierarchySoFar <chr>, hierarchySoFarWRanks <chr>, hierarchyTSN <chr>,
+#> #   synonyms <chr>, synonymTSNs <chr>, otherSource <chr>,
+#> #   acceptedTSN <chr>, comment <chr>, createDate <chr>, updateDate <chr>,
+#> #   `_version_` <dbl>, taxonAuthor <chr>, vernacular <chr>,
+#> #   hierarchicalSort <chr>, parentTSN <chr>
+</code></pre>
+
+<p>matches only binomials</p>
+
+<pre><code class="r">itis_search(q = "nameWOInd:/[A-Za-z0-9]*[%20]{1,1}[A-Za-z0-9]*/")
+#> # A tibble: 10 × 25
+#>      tsn                  nameWInd                 nameWOInd        unit1
+#>    <chr>                     <chr>                     <chr>        <chr>
+#> 1     58        Nitrobacter agilis        Nitrobacter agilis  Nitrobacter
+#> 2     59        Nitrobacter flavus        Nitrobacter flavus  Nitrobacter
+#> 3     60  Nitrobacter oligotrophis  Nitrobacter oligotrophis  Nitrobacter
+#> 4     61   Nitrobacter polytrophus   Nitrobacter polytrophus  Nitrobacter
+#> 5     62      Nitrobacter punctata      Nitrobacter punctata  Nitrobacter
+#> 6     64  Nitrobacter winogradskyi  Nitrobacter winogradskyi  Nitrobacter
+#> 7     66     Nitrosomonas europaea     Nitrosomonas europaea Nitrosomonas
+#> 8     67 Nitrosomonas groningensis Nitrosomonas groningensis Nitrosomonas
+#> 9     68   Nitrosomonas javenensis   Nitrosomonas javenensis Nitrosomonas
+#> 10    69    Nitrosomonas monocella    Nitrosomonas monocella Nitrosomonas
+#> # ... with 21 more variables: unit2 <chr>, usage <chr>,
+#> #   unacceptReason <chr>, credibilityRating <chr>, kingdom <chr>,
+#> #   rankID <chr>, rank <chr>, hierarchySoFar <chr>,
+#> #   hierarchySoFarWRanks <chr>, hierarchyTSN <chr>, synonyms <chr>,
+#> #   synonymTSNs <chr>, otherSource <chr>, acceptedTSN <chr>,
+#> #   comment <chr>, createDate <chr>, updateDate <chr>, `_version_` <dbl>,
+#> #   taxonAuthor <chr>, parentTSN <chr>, hierarchicalSort <chr>
+</code></pre>
+
+<h2>ITIS REST API interface</h2>
+
+<p>ITIS REST API docs: <a href="http://www.itis.gov/ws_description.html">http://www.itis.gov/ws_description.html</a></p>
+
+<p>The following are some example uses. There are many more methods not shown below</p>
+
+<hr/>
+
+<p>Get accepted names for a TSN</p>
+
+<pre><code class="r">accepted_names(tsn = 504239)
+#> # A tibble: 1 × 3
+#>          acceptedName acceptedTsn     author
+#>                 <chr>       <chr>      <chr>
+#> 1 Dasiphora fruticosa      836659 (L.) Rydb.
+</code></pre>
+
+<p>Get common names for a TSN</p>
+
+<pre><code class="r">common_names(tsn = 183833)
+#> # A tibble: 3 × 3
+#>            commonName language    tsn
+#>                 <chr>    <chr>  <chr>
+#> 1 African hunting dog  English 183833
+#> 2    African Wild Dog  English 183833
+#> 3 Painted Hunting Dog  English 183833
+</code></pre>
+
+<p>Full hierarchy for a TSN</p>
+
+<pre><code class="r">hierarchy_full(tsn = 37906)
+#> # A tibble: 60 × 5
+#>         parentname parenttsn      rankname       taxonname    tsn
+#> *            <chr>     <chr>         <chr>           <chr>  <chr>
+#> 1                                  Kingdom         Plantae 202422
+#> 2          Plantae    202422    Subkingdom   Viridiplantae 954898
+#> 3    Viridiplantae    954898  Infrakingdom    Streptophyta 846494
+#> 4     Streptophyta    846494 Superdivision     Embryophyta 954900
+#> 5      Embryophyta    954900      Division    Tracheophyta 846496
+#> 6     Tracheophyta    846496   Subdivision Spermatophytina 846504
+#> 7  Spermatophytina    846504         Class   Magnoliopsida  18063
+#> 8    Magnoliopsida     18063    Superorder       Asteranae 846535
+#> 9        Asteranae    846535         Order       Asterales  35419
+#> 10       Asterales     35419        Family      Asteraceae  35420
+#> # ... with 50 more rows
+</code></pre>
+
+</body>
+
+</html>
diff --git a/inst/vign/ritis_vignette.Rmd b/inst/vign/ritis_vignette.Rmd
new file mode 100644
index 0000000..def3ea7
--- /dev/null
+++ b/inst/vign/ritis_vignette.Rmd
@@ -0,0 +1,95 @@
+<!--
+%\VignetteEngine{knitr::knitr}
+%\VignetteIndexEntry{ritis introduction}
+%\VignetteEncoding{UTF-8}
+-->
+
+```{r echo=FALSE}
+knitr::opts_chunk$set(
+	comment = "#>",
+	collapse = TRUE,
+	warning = FALSE,
+	message = FALSE
+)
+```
+
+ritis introduction
+==================
+
+An interface to the Integrated Taxonomic Information System (ITIS)
+
+## Installation
+
+Install from CRAN
+
+```{r eval=FALSE}
+install.packages("ritis")
+```
+
+Or install the development version from GitHub
+
+```{r installgh, eval=FALSE}
+devtools::install_github("ropensci/ritis")
+```
+
+Load `ritis`
+
+```{r}
+library("ritis")
+```
+
+## ITIS Solr interface
+
+There are four methods.
+
+* `itis_search()` - Search
+* `itis_group()` - Group
+* `itis_highlight()` - Hightlight
+* `itis_facet()` - Facet
+
+These four methods use the equivalent functions in the package `solrium`, e.g.,
+`ritis::itis_search()` uses `solrium::solr_search()`, etc. The `itis_*()` functions
+simply use `...` to allow users to pass on parameters to the wrapped `solrium`
+functions. So do read the `solrium` docs.
+
+ITIS Solr API docs: <https://www.itis.gov/solr_documentation.html>
+
+Some examples:
+
+matches only monomials
+
+```{r}
+itis_search(q = "nameWOInd:/[A-Za-z0-9]*[%20]{0,0}*/")
+```
+
+matches only binomials
+
+```{r}
+itis_search(q = "nameWOInd:/[A-Za-z0-9]*[%20]{1,1}[A-Za-z0-9]*/")
+```
+
+## ITIS REST API interface
+
+ITIS REST API docs: <http://www.itis.gov/ws_description.html>
+
+The following are some example uses. There are many more methods not shown below
+
+-------
+
+Get accepted names for a TSN
+
+```{r}
+accepted_names(tsn = 504239)
+```
+
+Get common names for a TSN
+
+```{r}
+common_names(tsn = 183833)
+```
+
+Full hierarchy for a TSN
+
+```{r}
+hierarchy_full(tsn = 37906)
+```
diff --git a/inst/vign/ritis_vignette.md b/inst/vign/ritis_vignette.md
new file mode 100644
index 0000000..7a19595
--- /dev/null
+++ b/inst/vign/ritis_vignette.md
@@ -0,0 +1,161 @@
+<!--
+%\VignetteEngine{knitr::knitr}
+%\VignetteIndexEntry{ritis introduction}
+%\VignetteEncoding{UTF-8}
+-->
+
+
+
+ritis introduction
+==================
+
+An interface to the Integrated Taxonomic Information System (ITIS)
+
+## Installation
+
+Install from CRAN
+
+
+```r
+install.packages("ritis")
+```
+
+Or install the development version from GitHub
+
+
+```r
+devtools::install_github("ropensci/ritis")
+```
+
+Load `ritis`
+
+
+```r
+library("ritis")
+```
+
+## ITIS Solr interface
+
+There are four methods.
+
+* `itis_search()` - Search
+* `itis_group()` - Group
+* `itis_highlight()` - Hightlight
+* `itis_facet()` - Facet
+
+These four methods use the equivalent functions in the package `solrium`, e.g.,
+`ritis::itis_search()` uses `solrium::solr_search()`, etc. The `itis_*()` functions
+simply use `...` to allow users to pass on parameters to the wrapped `solrium`
+functions. So do read the `solrium` docs.
+
+ITIS Solr API docs: <https://www.itis.gov/solr_documentation.html>
+
+Some examples:
+
+matches only monomials
+
+
+```r
+itis_search(q = "nameWOInd:/[A-Za-z0-9]*[%20]{0,0}*/")
+#> # A tibble: 10 × 27
+#>      tsn          nameWInd         nameWOInd             unit1   usage
+#>    <chr>             <chr>             <chr>             <chr>   <chr>
+#> 1     51     Schizomycetes     Schizomycetes     Schizomycetes invalid
+#> 2     50          Bacteria          Bacteria          Bacteria   valid
+#> 3     52     Archangiaceae     Archangiaceae     Archangiaceae invalid
+#> 4     53   Pseudomonadales   Pseudomonadales   Pseudomonadales   valid
+#> 5     54 Rhodobacteriineae Rhodobacteriineae Rhodobacteriineae invalid
+#> 6     55  Pseudomonadineae  Pseudomonadineae  Pseudomonadineae invalid
+#> 7     56  Nitrobacteraceae  Nitrobacteraceae  Nitrobacteraceae invalid
+#> 8     57       Nitrobacter       Nitrobacter       Nitrobacter   valid
+#> 9     65      Nitrosomonas      Nitrosomonas      Nitrosomonas   valid
+#> 10    70  Thiobacteriaceae  Thiobacteriaceae  Thiobacteriaceae invalid
+#> # ... with 22 more variables: unacceptReason <chr>,
+#> #   credibilityRating <chr>, completenessRating <chr>,
+#> #   currencyRating <chr>, kingdom <chr>, rankID <chr>, rank <chr>,
+#> #   hierarchySoFar <chr>, hierarchySoFarWRanks <chr>, hierarchyTSN <chr>,
+#> #   synonyms <chr>, synonymTSNs <chr>, otherSource <chr>,
+#> #   acceptedTSN <chr>, comment <chr>, createDate <chr>, updateDate <chr>,
+#> #   `_version_` <dbl>, taxonAuthor <chr>, vernacular <chr>,
+#> #   hierarchicalSort <chr>, parentTSN <chr>
+```
+
+matches only binomials
+
+
+```r
+itis_search(q = "nameWOInd:/[A-Za-z0-9]*[%20]{1,1}[A-Za-z0-9]*/")
+#> # A tibble: 10 × 25
+#>      tsn                  nameWInd                 nameWOInd        unit1
+#>    <chr>                     <chr>                     <chr>        <chr>
+#> 1     58        Nitrobacter agilis        Nitrobacter agilis  Nitrobacter
+#> 2     59        Nitrobacter flavus        Nitrobacter flavus  Nitrobacter
+#> 3     60  Nitrobacter oligotrophis  Nitrobacter oligotrophis  Nitrobacter
+#> 4     61   Nitrobacter polytrophus   Nitrobacter polytrophus  Nitrobacter
+#> 5     62      Nitrobacter punctata      Nitrobacter punctata  Nitrobacter
+#> 6     64  Nitrobacter winogradskyi  Nitrobacter winogradskyi  Nitrobacter
+#> 7     66     Nitrosomonas europaea     Nitrosomonas europaea Nitrosomonas
+#> 8     67 Nitrosomonas groningensis Nitrosomonas groningensis Nitrosomonas
+#> 9     68   Nitrosomonas javenensis   Nitrosomonas javenensis Nitrosomonas
+#> 10    69    Nitrosomonas monocella    Nitrosomonas monocella Nitrosomonas
+#> # ... with 21 more variables: unit2 <chr>, usage <chr>,
+#> #   unacceptReason <chr>, credibilityRating <chr>, kingdom <chr>,
+#> #   rankID <chr>, rank <chr>, hierarchySoFar <chr>,
+#> #   hierarchySoFarWRanks <chr>, hierarchyTSN <chr>, synonyms <chr>,
+#> #   synonymTSNs <chr>, otherSource <chr>, acceptedTSN <chr>,
+#> #   comment <chr>, createDate <chr>, updateDate <chr>, `_version_` <dbl>,
+#> #   taxonAuthor <chr>, parentTSN <chr>, hierarchicalSort <chr>
+```
+
+## ITIS REST API interface
+
+ITIS REST API docs: <http://www.itis.gov/ws_description.html>
+
+The following are some example uses. There are many more methods not shown below
+
+-------
+
+Get accepted names for a TSN
+
+
+```r
+accepted_names(tsn = 504239)
+#> # A tibble: 1 × 3
+#>          acceptedName acceptedTsn     author
+#>                 <chr>       <chr>      <chr>
+#> 1 Dasiphora fruticosa      836659 (L.) Rydb.
+```
+
+Get common names for a TSN
+
+
+```r
+common_names(tsn = 183833)
+#> # A tibble: 3 × 3
+#>            commonName language    tsn
+#>                 <chr>    <chr>  <chr>
+#> 1 African hunting dog  English 183833
+#> 2    African Wild Dog  English 183833
+#> 3 Painted Hunting Dog  English 183833
+```
+
+Full hierarchy for a TSN
+
+
+```r
+hierarchy_full(tsn = 37906)
+#> # A tibble: 60 × 5
+#>         parentname parenttsn      rankname       taxonname    tsn
+#> *            <chr>     <chr>         <chr>           <chr>  <chr>
+#> 1                                  Kingdom         Plantae 202422
+#> 2          Plantae    202422    Subkingdom   Viridiplantae 954898
+#> 3    Viridiplantae    954898  Infrakingdom    Streptophyta 846494
+#> 4     Streptophyta    846494 Superdivision     Embryophyta 954900
+#> 5      Embryophyta    954900      Division    Tracheophyta 846496
+#> 6     Tracheophyta    846496   Subdivision Spermatophytina 846504
+#> 7  Spermatophytina    846504         Class   Magnoliopsida  18063
+#> 8    Magnoliopsida     18063    Superorder       Asteranae 846535
+#> 9        Asteranae    846535         Order       Asterales  35419
+#> 10       Asterales     35419        Family      Asteraceae  35420
+#> # ... with 50 more rows
+```
diff --git a/man/accepted_names.Rd b/man/accepted_names.Rd
new file mode 100644
index 0000000..95feae6
--- /dev/null
+++ b/man/accepted_names.Rd
@@ -0,0 +1,38 @@
+% Generated by roxygen2: do not edit by hand
+% Please edit documentation in R/accepted_names.R
+\name{accepted_names}
+\alias{accepted_names}
+\title{Get accepted names from tsn}
+\usage{
+accepted_names(tsn, wt = "json", raw = FALSE, ...)
+}
+\arguments{
+\item{tsn}{TSN for a taxonomic group (numeric). Required.}
+
+\item{wt}{(character) One of "json" or "xml". Required.}
+
+\item{raw}{(logical) Return raw JSON or XML as character string. Required.
+Default: \code{FALSE}}
+
+\item{...}{Curl options passed on to \code{\link[httr]{GET}}}
+}
+\value{
+Zero row data.frame if the name is accepted, otherwise a data.frame
+with information on the currently accepted name
+}
+\description{
+Get accepted names from tsn
+}
+\examples{
+\dontrun{
+# TSN accepted - good name
+accepted_names(tsn = 208527)
+
+# TSN not accepted - input TSN is old name
+accepted_names(tsn = 504239)
+
+# raw json
+accepted_names(tsn = 208527, raw = TRUE)
+}
+}
+
diff --git a/man/any_match_count.Rd b/man/any_match_count.Rd
new file mode 100644
index 0000000..b50d50c
--- /dev/null
+++ b/man/any_match_count.Rd
@@ -0,0 +1,32 @@
+% Generated by roxygen2: do not edit by hand
+% Please edit documentation in R/any_match_count.R
+\name{any_match_count}
+\alias{any_match_count}
+\title{Get any match count.}
+\usage{
+any_match_count(x, wt = "json", raw = FALSE, ...)
+}
+\arguments{
+\item{x}{text or taxonomic serial number (TSN) (character or numeric)}
+
+\item{wt}{(character) One of "json" or "xml". Required.}
+
+\item{raw}{(logical) Return raw JSON or XML as character string. Required.
+Default: \code{FALSE}}
+
+\item{...}{Curl options passed on to \code{\link[httr]{GET}}}
+}
+\value{
+An integer containing the number of matches the search will return.
+}
+\description{
+Get any match count.
+}
+\examples{
+\dontrun{
+any_match_count(x = 202385)
+any_match_count(x = "dolphin")
+any_match_count(x = "dolphin", wt = "xml")
+}
+}
+
diff --git a/man/comment_detail.Rd b/man/comment_detail.Rd
new file mode 100644
index 0000000..b4b120a
--- /dev/null
+++ b/man/comment_detail.Rd
@@ -0,0 +1,33 @@
+% Generated by roxygen2: do not edit by hand
+% Please edit documentation in R/comment_detail.R
+\name{comment_detail}
+\alias{comment_detail}
+\title{Get comment detail from TSN}
+\usage{
+comment_detail(tsn, wt = "json", raw = FALSE, ...)
+}
+\arguments{
+\item{tsn}{TSN for a taxonomic group (numeric). Required.}
+
+\item{wt}{(character) One of "json" or "xml". Required.}
+
+\item{raw}{(logical) Return raw JSON or XML as character string. Required.
+Default: \code{FALSE}}
+
+\item{...}{Curl options passed on to \code{\link[httr]{GET}}}
+}
+\value{
+A data.frame with results.
+}
+\description{
+Get comment detail from TSN
+}
+\examples{
+\dontrun{
+comment_detail(tsn=180543)
+comment_detail(tsn=180543, wt = "xml")
+library(httr)
+comment_detail(tsn=180543)
+}
+}
+
diff --git a/man/common_names.Rd b/man/common_names.Rd
new file mode 100644
index 0000000..3837136
--- /dev/null
+++ b/man/common_names.Rd
@@ -0,0 +1,31 @@
+% Generated by roxygen2: do not edit by hand
+% Please edit documentation in R/common_names.R
+\name{common_names}
+\alias{common_names}
+\title{Get common names from tsn}
+\usage{
+common_names(tsn, wt = "json", raw = FALSE, ...)
+}
+\arguments{
+\item{tsn}{TSN for a taxonomic group (numeric). Required.}
+
+\item{wt}{(character) One of "json" or "xml". Required.}
+
+\item{raw}{(logical) Return raw JSON or XML as character string. Required.
+Default: \code{FALSE}}
+
+\item{...}{Curl options passed on to \code{\link[httr]{GET}}}
+}
+\value{
+a data.frame
+}
+\description{
+Get common names from tsn
+}
+\examples{
+\dontrun{
+common_names(tsn=183833)
+common_names(tsn=183833, wt = "xml")
+}
+}
+
diff --git a/man/core_metadata.Rd b/man/core_metadata.Rd
new file mode 100644
index 0000000..f7db931
--- /dev/null
+++ b/man/core_metadata.Rd
@@ -0,0 +1,32 @@
+% Generated by roxygen2: do not edit by hand
+% Please edit documentation in R/core_metadata.R
+\name{core_metadata}
+\alias{core_metadata}
+\title{Get core metadata from tsn}
+\usage{
+core_metadata(tsn, wt = "json", raw = FALSE, ...)
+}
+\arguments{
+\item{tsn}{TSN for a taxonomic group (numeric). Required.}
+
+\item{wt}{(character) One of "json" or "xml". Required.}
+
+\item{raw}{(logical) Return raw JSON or XML as character string. Required.
+Default: \code{FALSE}}
+
+\item{...}{Curl options passed on to \code{\link[httr]{GET}}}
+}
+\description{
+Get core metadata from tsn
+}
+\examples{
+\dontrun{
+# coverage and currrency data
+core_metadata(tsn=28727)
+core_metadata(tsn=28727, wt = "xml")
+# no coverage or currrency data
+core_metadata(183671)
+core_metadata(183671, wt = "xml")
+}
+}
+
diff --git a/man/coverage.Rd b/man/coverage.Rd
new file mode 100644
index 0000000..7e272f3
--- /dev/null
+++ b/man/coverage.Rd
@@ -0,0 +1,31 @@
+% Generated by roxygen2: do not edit by hand
+% Please edit documentation in R/coverage.R
+\name{coverage}
+\alias{coverage}
+\title{Get coverge from tsn}
+\usage{
+coverage(tsn, wt = "json", raw = FALSE, ...)
+}
+\arguments{
+\item{tsn}{TSN for a taxonomic group (numeric). Required.}
+
+\item{wt}{(character) One of "json" or "xml". Required.}
+
+\item{raw}{(logical) Return raw JSON or XML as character string. Required.
+Default: \code{FALSE}}
+
+\item{...}{Curl options passed on to \code{\link[httr]{GET}}}
+}
+\description{
+Get coverge from tsn
+}
+\examples{
+\dontrun{
+# coverage data
+coverage(tsn=28727)
+# no coverage data
+coverage(526852)
+coverage(526852, wt = "xml")
+}
+}
+
diff --git a/man/credibility.Rd b/man/credibility.Rd
new file mode 100644
index 0000000..b90d157
--- /dev/null
+++ b/man/credibility.Rd
@@ -0,0 +1,47 @@
+% Generated by roxygen2: do not edit by hand
+% Please edit documentation in R/credibility.R
+\name{credibility}
+\alias{credibility}
+\alias{credibility_rating}
+\alias{credibility_ratings}
+\title{Get credibility rating from tsn}
+\usage{
+credibility_rating(tsn, wt = "json", raw = FALSE, ...)
+
+credibility_ratings(wt = "json", raw = FALSE, ...)
+}
+\arguments{
+\item{tsn}{TSN for a taxonomic group (numeric). Required.}
+
+\item{wt}{(character) One of "json" or "xml". Required.}
+
+\item{raw}{(logical) Return raw JSON or XML as character string. Required.
+Default: \code{FALSE}}
+
+\item{...}{Curl options passed on to \code{\link[httr]{GET}}}
+}
+\value{
+a data.frame
+}
+\description{
+Get credibility rating from tsn
+}
+\details{
+methods:
+\itemize{
+ \item credibility_rating: Get credibility rating for a tsn
+ \item credibility_ratings: Get possible credibility ratings
+}
+}
+\examples{
+\dontrun{
+credibility_rating(tsn = 526852)
+credibility_rating(526852, wt = "xml")
+credibility_rating(526852, raw = TRUE)
+
+credibility_ratings()
+credibility_ratings(wt = "xml")
+credibility_ratings(raw = TRUE)
+}
+}
+
diff --git a/man/currency.Rd b/man/currency.Rd
new file mode 100644
index 0000000..43366c8
--- /dev/null
+++ b/man/currency.Rd
@@ -0,0 +1,35 @@
+% Generated by roxygen2: do not edit by hand
+% Please edit documentation in R/currency.R
+\name{currency}
+\alias{currency}
+\title{Get currency from tsn}
+\usage{
+currency(tsn, wt = "json", raw = FALSE, ...)
+}
+\arguments{
+\item{tsn}{TSN for a taxonomic group (numeric). Required.}
+
+\item{wt}{(character) One of "json" or "xml". Required.}
+
+\item{raw}{(logical) Return raw JSON or XML as character string. Required.
+Default: \code{FALSE}}
+
+\item{...}{Curl options passed on to \code{\link[httr]{GET}}}
+}
+\value{
+a data.frame
+}
+\description{
+Get currency from tsn
+}
+\examples{
+\dontrun{
+# currency data
+currency(tsn=28727)
+currency(tsn=28727, wt = "xml")
+# no currency dat
+currency(526852)
+currency(526852, raw = TRUE)
+}
+}
+
diff --git a/man/date_data.Rd b/man/date_data.Rd
new file mode 100644
index 0000000..c465bc6
--- /dev/null
+++ b/man/date_data.Rd
@@ -0,0 +1,29 @@
+% Generated by roxygen2: do not edit by hand
+% Please edit documentation in R/date_data.R
+\name{date_data}
+\alias{date_data}
+\title{Get date data from tsn}
+\usage{
+date_data(tsn, wt = "json", raw = FALSE, ...)
+}
+\arguments{
+\item{tsn}{TSN for a taxonomic group (numeric). Required.}
+
+\item{wt}{(character) One of "json" or "xml". Required.}
+
+\item{raw}{(logical) Return raw JSON or XML as character string. Required.
+Default: \code{FALSE}}
+
+\item{...}{Curl options passed on to \code{\link[httr]{GET}}}
+}
+\description{
+Get date data from tsn
+}
+\examples{
+\dontrun{
+date_data(tsn = 180543)
+date_data(180543, wt = "xml")
+date_data(180543, wt = "json", raw = TRUE)
+}
+}
+
diff --git a/man/description.Rd b/man/description.Rd
new file mode 100644
index 0000000..ee37014
--- /dev/null
+++ b/man/description.Rd
@@ -0,0 +1,29 @@
+% Generated by roxygen2: do not edit by hand
+% Please edit documentation in R/description.R
+\name{description}
+\alias{description}
+\title{Get description of the ITIS service}
+\usage{
+description(wt = "json", raw = FALSE, ...)
+}
+\arguments{
+\item{wt}{(character) One of "json" or "xml". Required.}
+
+\item{raw}{(logical) Return raw JSON or XML as character string. Required.
+Default: \code{FALSE}}
+
+\item{...}{Curl options passed on to \code{\link[httr]{GET}}}
+}
+\value{
+a string, the ITIS web service description
+}
+\description{
+Get description of the ITIS service
+}
+\examples{
+\dontrun{
+description()
+description(wt = "xml")
+}
+}
+
diff --git a/man/experts.Rd b/man/experts.Rd
new file mode 100644
index 0000000..88a7c80
--- /dev/null
+++ b/man/experts.Rd
@@ -0,0 +1,29 @@
+% Generated by roxygen2: do not edit by hand
+% Please edit documentation in R/experts.R
+\name{experts}
+\alias{experts}
+\title{Get expert information for the TSN.}
+\usage{
+experts(tsn, wt = "json", raw = FALSE, ...)
+}
+\arguments{
+\item{tsn}{TSN for a taxonomic group (numeric). Required.}
+
+\item{wt}{(character) One of "json" or "xml". Required.}
+
+\item{raw}{(logical) Return raw JSON or XML as character string. Required.
+Default: \code{FALSE}}
+
+\item{...}{Curl options passed on to \code{\link[httr]{GET}}}
+}
+\description{
+Get expert information for the TSN.
+}
+\examples{
+\dontrun{
+experts(tsn = 180544)
+experts(180544, wt = "xml")
+experts(180544, raw = TRUE)
+}
+}
+
diff --git a/man/full_record.Rd b/man/full_record.Rd
new file mode 100644
index 0000000..b30657a
--- /dev/null
+++ b/man/full_record.Rd
@@ -0,0 +1,39 @@
+% Generated by roxygen2: do not edit by hand
+% Please edit documentation in R/full_record.R
+\name{full_record}
+\alias{full_record}
+\title{Get full record from TSN or lsid}
+\usage{
+full_record(tsn = NULL, lsid = NULL, wt = "json", raw = FALSE, ...)
+}
+\arguments{
+\item{tsn}{TSN for a taxonomic group (numeric). Required.}
+
+\item{lsid}{lsid for a taxonomic group (character)}
+
+\item{wt}{(character) One of "json" or "xml". Required.}
+
+\item{raw}{(logical) Return raw JSON or XML as character string. Required.
+Default: \code{FALSE}}
+
+\item{...}{Curl options passed on to \code{\link[httr]{GET}}}
+}
+\description{
+Get full record from TSN or lsid
+}
+\examples{
+\dontrun{
+# from tsn
+full_record(tsn = 50423)
+full_record(tsn = 202385)
+full_record(tsn = 183833)
+
+full_record(tsn = 183833, wt = "xml")
+full_record(tsn = 183833, raw = TRUE)
+
+# from lsid
+full_record(lsid = "urn:lsid:itis.gov:itis_tsn:180543")
+full_record(lsid = "urn:lsid:itis.gov:itis_tsn:180543")
+}
+}
+
diff --git a/man/geographic_divisions.Rd b/man/geographic_divisions.Rd
new file mode 100644
index 0000000..c588b68
--- /dev/null
+++ b/man/geographic_divisions.Rd
@@ -0,0 +1,31 @@
+% Generated by roxygen2: do not edit by hand
+% Please edit documentation in R/geographic_divisions.R
+\name{geographic_divisions}
+\alias{geographic_divisions}
+\title{Get geographic divisions from tsn}
+\usage{
+geographic_divisions(tsn, wt = "json", raw = FALSE, ...)
+}
+\arguments{
+\item{tsn}{TSN for a taxonomic group (numeric). Required.}
+
+\item{wt}{(character) One of "json" or "xml". Required.}
+
+\item{raw}{(logical) Return raw JSON or XML as character string. Required.
+Default: \code{FALSE}}
+
+\item{...}{Curl options passed on to \code{\link[httr]{GET}}}
+}
+\description{
+Get geographic divisions from tsn
+}
+\examples{
+\dontrun{
+geographic_divisions(tsn = 180543)
+
+geographic_divisions(tsn = 180543, wt = "xml")
+
+geographic_divisions(tsn = 180543, wt = "json", raw = TRUE)
+}
+}
+
diff --git a/man/geographic_values.Rd b/man/geographic_values.Rd
new file mode 100644
index 0000000..541ebc4
--- /dev/null
+++ b/man/geographic_values.Rd
@@ -0,0 +1,30 @@
+% Generated by roxygen2: do not edit by hand
+% Please edit documentation in R/geographic_values.R
+\name{geographic_values}
+\alias{geographic_values}
+\title{Get all possible geographic values}
+\usage{
+geographic_values(wt = "json", raw = FALSE, ...)
+}
+\arguments{
+\item{wt}{(character) One of "json" or "xml". Required.}
+
+\item{raw}{(logical) Return raw JSON or XML as character string. Required.
+Default: \code{FALSE}}
+
+\item{...}{Curl options passed on to \code{\link[httr]{GET}}}
+}
+\value{
+character vector of geographic names
+}
+\description{
+Get all possible geographic values
+}
+\examples{
+\dontrun{
+geographic_values()
+geographic_values(wt = "xml")
+geographic_values(wt = "json", raw = TRUE)
+}
+}
+
diff --git a/man/global_species_completeness.Rd b/man/global_species_completeness.Rd
new file mode 100644
index 0000000..1d861bb
--- /dev/null
+++ b/man/global_species_completeness.Rd
@@ -0,0 +1,29 @@
+% Generated by roxygen2: do not edit by hand
+% Please edit documentation in R/global_species_completeness.R
+\name{global_species_completeness}
+\alias{global_species_completeness}
+\title{Get global species completeness from tsn}
+\usage{
+global_species_completeness(tsn, wt = "json", raw = FALSE, ...)
+}
+\arguments{
+\item{tsn}{TSN for a taxonomic group (numeric). Required.}
+
+\item{wt}{(character) One of "json" or "xml". Required.}
+
+\item{raw}{(logical) Return raw JSON or XML as character string. Required.
+Default: \code{FALSE}}
+
+\item{...}{Curl options passed on to \code{\link[httr]{GET}}}
+}
+\description{
+Get global species completeness from tsn
+}
+\examples{
+\dontrun{
+global_species_completeness(tsn = 180541)
+global_species_completeness(180541, wt = "xml")
+global_species_completeness(180541, wt = "json", raw = TRUE)
+}
+}
+
diff --git a/man/hierarchy.Rd b/man/hierarchy.Rd
new file mode 100644
index 0000000..4333b54
--- /dev/null
+++ b/man/hierarchy.Rd
@@ -0,0 +1,51 @@
+% Generated by roxygen2: do not edit by hand
+% Please edit documentation in R/hierarchy.R
+\name{hierarchy}
+\alias{hierarchy}
+\alias{hierarchy_down}
+\alias{hierarchy_full}
+\alias{hierarchy_up}
+\title{Get hierarchy down from tsn}
+\usage{
+hierarchy_down(tsn, wt = "json", raw = FALSE, ...)
+
+hierarchy_up(tsn, wt = "json", raw = FALSE, ...)
+
+hierarchy_full(tsn, wt = "json", raw = FALSE, ...)
+}
+\arguments{
+\item{tsn}{TSN for a taxonomic group (numeric). Required.}
+
+\item{wt}{(character) One of "json" or "xml". Required.}
+
+\item{raw}{(logical) Return raw JSON or XML as character string. Required.
+Default: \code{FALSE}}
+
+\item{...}{Curl options passed on to \code{\link[httr]{GET}}}
+}
+\description{
+Get hierarchy down from tsn
+}
+\details{
+Hierarchy methods:
+\itemize{
+ \item hierarchy_down: Get hierarchy down from tsn
+ \item hierarchy_up: Get hierarchy up from tsn
+ \item hierarchy_full: Get full hierarchy from tsn
+}
+}
+\examples{
+\dontrun{
+## Full down
+hierarchy_down(tsn=161030)
+
+## Full up
+hierarchy_up(tsn=36485)
+
+## Full hierarchy
+hierarchy_full(tsn=37906)
+hierarchy_full(tsn=37906, raw = TRUE)
+hierarchy_full(100800, wt = "xml")
+}
+}
+
diff --git a/man/itis_facet.Rd b/man/itis_facet.Rd
new file mode 100644
index 0000000..6d02af0
--- /dev/null
+++ b/man/itis_facet.Rd
@@ -0,0 +1,25 @@
+% Generated by roxygen2: do not edit by hand
+% Please edit documentation in R/itis_facet.R
+\name{itis_facet}
+\alias{itis_facet}
+\title{ITIS Solr facet}
+\usage{
+itis_facet(...)
+}
+\arguments{
+\item{...}{Args passed to \code{\link[solrium]{solr_facet}}}
+}
+\description{
+ITIS Solr facet
+}
+\examples{
+\dontrun{
+itis_facet(q = "rank:Species", rows = 0, facet.field = "kingdom")$facet_fields
+
+x <- itis_facet(q = "hierarchySoFar:*$Aves$* AND rank:Species AND usage:valid",
+   facet.pivot = "nameWInd,vernacular", facet.limit = -1, facet.mincount = 1,
+   rows = 0)
+head(x$facet_pivot$`nameWInd,vernacular`)
+}
+}
+
diff --git a/man/itis_group.Rd b/man/itis_group.Rd
new file mode 100644
index 0000000..f9b783a
--- /dev/null
+++ b/man/itis_group.Rd
@@ -0,0 +1,22 @@
+% Generated by roxygen2: do not edit by hand
+% Please edit documentation in R/itis_group.R
+\name{itis_group}
+\alias{itis_group}
+\title{ITIS Solr group search}
+\usage{
+itis_group(...)
+}
+\arguments{
+\item{...}{Args passed to \code{\link[solrium]{solr_group}}}
+}
+\description{
+ITIS Solr group search
+}
+\examples{
+\dontrun{
+x <- itis_group(q = "nameWOInd:/[A-Za-z0-9]*[\%20]{1,1}[A-Za-z0-9]*/",
+   group.field = 'rank', group.limit = 3)
+head(x)
+}
+}
+
diff --git a/man/itis_highlight.Rd b/man/itis_highlight.Rd
new file mode 100644
index 0000000..b51b4a7
--- /dev/null
+++ b/man/itis_highlight.Rd
@@ -0,0 +1,20 @@
+% Generated by roxygen2: do not edit by hand
+% Please edit documentation in R/itis_highlight.R
+\name{itis_highlight}
+\alias{itis_highlight}
+\title{ITIS Solr highlight}
+\usage{
+itis_highlight(...)
+}
+\arguments{
+\item{...}{Args passed to \code{\link[solrium]{solr_highlight}}}
+}
+\description{
+ITIS Solr highlight
+}
+\examples{
+\dontrun{
+itis_highlight(q = "rank:Species", hl.fl = 'rank', rows=10)
+}
+}
+
diff --git a/man/itis_search.Rd b/man/itis_search.Rd
new file mode 100644
index 0000000..fe5fb1b
--- /dev/null
+++ b/man/itis_search.Rd
@@ -0,0 +1,38 @@
+% Generated by roxygen2: do not edit by hand
+% Please edit documentation in R/itis_search.R
+\name{itis_search}
+\alias{itis_search}
+\title{ITIS Solr search}
+\usage{
+itis_search(...)
+}
+\arguments{
+\item{...}{Args passed to \code{\link[solrium]{solr_search}}}
+}
+\description{
+ITIS Solr search
+}
+\examples{
+\dontrun{
+itis_search(q = "tsn:182662")
+
+itis_search(q = "nameWOInd:Liquidamber\\\\\%20styraciflua~0.4")
+# matches only monomials
+itis_search(q = "nameWOInd:/[A-Za-z0-9]*[\%20]{0,0}*/")
+# matches only binomials
+itis_search(q = "nameWOInd:/[A-Za-z0-9]*[\%20]{1,1}[A-Za-z0-9]*/")
+# matches only trinomials
+itis_search(q = "nameWOInd:/[A-Za-z0-9]*[\%20]{1,1}[A-Za-z0-9]*[\%20]{1,1}[A-Za-z0-9]*/")
+# matches binomials or trinomials
+itis_search(q = "nameWOInd:/[A-Za-z0-9]*[\%20]{1,1}[A-Za-z0-9]*[\%20]{0,1}[A-Za-z0-9]*/")
+
+itis_search(q = "nameWOInd:Poa\\\\\%20annua")
+
+itis_search(q = "nameWOInd:/[A-Za-z0-9]*[\%20]{0,0}*/", rows = 2)
+itis_search(q = "nameWOInd:/[A-Za-z0-9]*[\%20]{0,0}*/", rows = 200)
+
+itis_search(q = "nameWOInd:/[A-Za-z0-9]*[\%20]{0,0}*/",
+   fl = c('nameWInd', 'tsn'))
+}
+}
+
diff --git a/man/jurisdiction.Rd b/man/jurisdiction.Rd
new file mode 100644
index 0000000..641e756
--- /dev/null
+++ b/man/jurisdiction.Rd
@@ -0,0 +1,54 @@
+% Generated by roxygen2: do not edit by hand
+% Please edit documentation in R/jurisdiction.R
+\name{jurisdiction}
+\alias{jurisdiction}
+\alias{jurisdiction_origin_values}
+\alias{jurisdiction_values}
+\alias{jurisdictional_origin}
+\title{Get jurisdictional origin from tsn}
+\usage{
+jurisdictional_origin(tsn, wt = "json", raw = FALSE, ...)
+
+jurisdiction_origin_values(wt = "json", raw = FALSE, ...)
+
+jurisdiction_values(wt = "json", raw = FALSE, ...)
+}
+\arguments{
+\item{tsn}{TSN for a taxonomic group (numeric). Required.}
+
+\item{wt}{(character) One of "json" or "xml". Required.}
+
+\item{raw}{(logical) Return raw JSON or XML as character string. Required.
+Default: \code{FALSE}}
+
+\item{...}{Curl options passed on to \code{\link[httr]{GET}}}
+}
+\value{
+\itemize{
+ \item jurisdictional_origin: data.frame
+ \item jurisdiction_origin_values: data.frame
+ \item jurisdiction_values: character vector
+}
+}
+\description{
+Get jurisdictional origin from tsn
+}
+\details{
+Jurisdiction methods:
+\itemize{
+ \item jurisdictional_origin: Get jurisdictional origin from tsn
+ \item jurisdiction_origin_values: Get jurisdiction origin values
+ \item jurisdiction_values: Get all possible jurisdiction values
+}
+}
+\examples{
+\dontrun{
+jurisdictional_origin(tsn=180543)
+jurisdictional_origin(tsn=180543, wt = "xml")
+
+jurisdiction_origin_values()
+
+jurisdiction_values()
+}
+}
+
diff --git a/man/kingdoms.Rd b/man/kingdoms.Rd
new file mode 100644
index 0000000..90c9b2a
--- /dev/null
+++ b/man/kingdoms.Rd
@@ -0,0 +1,39 @@
+% Generated by roxygen2: do not edit by hand
+% Please edit documentation in R/kingdoms.R
+\name{kingdoms}
+\alias{kingdom_name}
+\alias{kingdom_names}
+\alias{kingdoms}
+\title{Get kingdom names from tsn}
+\usage{
+kingdom_name(tsn, wt = "json", raw = FALSE, ...)
+
+kingdom_names(wt = "json", raw = FALSE, ...)
+}
+\arguments{
+\item{tsn}{TSN for a taxonomic group (numeric). Required.}
+
+\item{wt}{(character) One of "json" or "xml". Required.}
+
+\item{raw}{(logical) Return raw JSON or XML as character string. Required.
+Default: \code{FALSE}}
+
+\item{...}{Curl options passed on to \code{\link[httr]{GET}}}
+}
+\description{
+Get kingdom names from tsn
+}
+\details{
+\itemize{
+ \item kingdom_name: Get kingdom name for a TSN
+ \item kingdom_names: Get all possible kingdom names
+}
+}
+\examples{
+\dontrun{
+kingdom_name(202385)
+kingdom_name(202385, wt = "xml")
+kingdom_names()
+}
+}
+
diff --git a/man/last_change_date.Rd b/man/last_change_date.Rd
new file mode 100644
index 0000000..b853002
--- /dev/null
+++ b/man/last_change_date.Rd
@@ -0,0 +1,29 @@
+% Generated by roxygen2: do not edit by hand
+% Please edit documentation in R/last_change_date.R
+\name{last_change_date}
+\alias{last_change_date}
+\title{Provides the date the ITIS database was last updated}
+\usage{
+last_change_date(wt = "json", raw = FALSE, ...)
+}
+\arguments{
+\item{wt}{(character) One of "json" or "xml". Required.}
+
+\item{raw}{(logical) Return raw JSON or XML as character string. Required.
+Default: \code{FALSE}}
+
+\item{...}{Curl options passed on to \code{\link[httr]{GET}}}
+}
+\value{
+character value with a date
+}
+\description{
+Provides the date the ITIS database was last updated
+}
+\examples{
+\dontrun{
+last_change_date()
+last_change_date(wt = "xml")
+}
+}
+
diff --git a/man/lsid2tsn.Rd b/man/lsid2tsn.Rd
new file mode 100644
index 0000000..a6e1673
--- /dev/null
+++ b/man/lsid2tsn.Rd
@@ -0,0 +1,30 @@
+% Generated by roxygen2: do not edit by hand
+% Please edit documentation in R/lsid2tsn.R
+\name{lsid2tsn}
+\alias{lsid2tsn}
+\title{Gets the TSN corresponding to the LSID, or an empty result if there is no match.}
+\usage{
+lsid2tsn(lsid, wt = "json", raw = FALSE, ...)
+}
+\arguments{
+\item{lsid}{(character) lsid for a taxonomic group. Required.}
+
+\item{wt}{(character) One of "json" or "xml". Required.}
+
+\item{raw}{(logical) Return raw JSON or XML as character string. Required.
+Default: \code{FALSE}}
+
+\item{...}{Curl options passed on to \code{\link[httr]{GET}}}
+}
+\description{
+Gets the TSN corresponding to the LSID, or an empty result if there is no match.
+}
+\examples{
+\dontrun{
+lsid2tsn(lsid="urn:lsid:itis.gov:itis_tsn:28726")
+lsid2tsn(lsid="urn:lsid:itis.gov:itis_tsn:28726", wt = "xml")
+lsid2tsn("urn:lsid:itis.gov:itis_tsn:0")
+lsid2tsn("urn:lsid:itis.gov:itis_tsn:0", wt = "xml")
+}
+}
+
diff --git a/man/other_sources.Rd b/man/other_sources.Rd
new file mode 100644
index 0000000..033db41
--- /dev/null
+++ b/man/other_sources.Rd
@@ -0,0 +1,28 @@
+% Generated by roxygen2: do not edit by hand
+% Please edit documentation in R/other_sources.R
+\name{other_sources}
+\alias{other_sources}
+\title{Returns a list of the other sources used for the TSN.}
+\usage{
+other_sources(tsn, wt = "json", raw = FALSE, ...)
+}
+\arguments{
+\item{tsn}{TSN for a taxonomic group (numeric). Required.}
+
+\item{wt}{(character) One of "json" or "xml". Required.}
+
+\item{raw}{(logical) Return raw JSON or XML as character string. Required.
+Default: \code{FALSE}}
+
+\item{...}{Curl options passed on to \code{\link[httr]{GET}}}
+}
+\description{
+Returns a list of the other sources used for the TSN.
+}
+\examples{
+\dontrun{
+other_sources(tsn=182662)
+other_sources(tsn=182662, wt = "xml")
+}
+}
+
diff --git a/man/parent_tsn.Rd b/man/parent_tsn.Rd
new file mode 100644
index 0000000..1ca3fcb
--- /dev/null
+++ b/man/parent_tsn.Rd
@@ -0,0 +1,32 @@
+% Generated by roxygen2: do not edit by hand
+% Please edit documentation in R/parent_tsn.R
+\name{parent_tsn}
+\alias{parent_tsn}
+\title{Returns the parent TSN for the entered TSN.}
+\usage{
+parent_tsn(tsn, wt = "json", raw = FALSE, ...)
+}
+\arguments{
+\item{tsn}{TSN for a taxonomic group (numeric). Required.}
+
+\item{wt}{(character) One of "json" or "xml". Required.}
+
+\item{raw}{(logical) Return raw JSON or XML as character string. Required.
+Default: \code{FALSE}}
+
+\item{...}{Curl options passed on to \code{\link[httr]{GET}}}
+}
+\value{
+a data.frame
+}
+\description{
+Returns the parent TSN for the entered TSN.
+}
+\examples{
+\dontrun{
+parent_tsn(tsn = 202385)
+parent_tsn(tsn = 202385, raw = TRUE)
+parent_tsn(tsn = 202385, wt = "xml")
+}
+}
+
diff --git a/man/publications.Rd b/man/publications.Rd
new file mode 100644
index 0000000..408be19
--- /dev/null
+++ b/man/publications.Rd
@@ -0,0 +1,34 @@
+% Generated by roxygen2: do not edit by hand
+% Please edit documentation in R/publications.R
+\name{publications}
+\alias{publications}
+\title{Returns a list of the pulications used for the TSN.}
+\usage{
+publications(tsn, wt = "json", raw = FALSE, ...)
+}
+\arguments{
+\item{tsn}{TSN for a taxonomic group (numeric). Required.}
+
+\item{wt}{(character) One of "json" or "xml". Required.}
+
+\item{raw}{(logical) Return raw JSON or XML as character string. Required.
+Default: \code{FALSE}}
+
+\item{...}{Curl options passed on to \code{\link[httr]{GET}}}
+}
+\value{
+a data.frame
+}
+\description{
+Returns a list of the pulications used for the TSN.
+}
+\examples{
+\dontrun{
+publications(tsn = 70340)
+publications(tsn = 70340, wt = "xml")
+
+library(httr)
+publications(tsn = 70340, config = verbose())
+}
+}
+
diff --git a/man/rank_name.Rd b/man/rank_name.Rd
new file mode 100644
index 0000000..96e866c
--- /dev/null
+++ b/man/rank_name.Rd
@@ -0,0 +1,30 @@
+% Generated by roxygen2: do not edit by hand
+% Please edit documentation in R/rank_name.R
+\name{rank_name}
+\alias{rank_name}
+\title{Returns the kingdom and rank information for the TSN.}
+\usage{
+rank_name(tsn, wt = "json", raw = FALSE, ...)
+}
+\arguments{
+\item{tsn}{TSN for a taxonomic group (numeric). Required.}
+
+\item{wt}{(character) One of "json" or "xml". Required.}
+
+\item{raw}{(logical) Return raw JSON or XML as character string. Required.
+Default: \code{FALSE}}
+
+\item{...}{Curl options passed on to \code{\link[httr]{GET}}}
+}
+\value{
+a data.frame, with rank name and other info
+}
+\description{
+Returns the kingdom and rank information for the TSN.
+}
+\examples{
+\dontrun{
+rank_name(tsn = 202385)
+}
+}
+
diff --git a/man/rank_names.Rd b/man/rank_names.Rd
new file mode 100644
index 0000000..df79e97
--- /dev/null
+++ b/man/rank_names.Rd
@@ -0,0 +1,35 @@
+% Generated by roxygen2: do not edit by hand
+% Please edit documentation in R/rank_names.R
+\name{rank_names}
+\alias{rank_names}
+\title{Provides a list of all the unique rank names contained in the database and
+ their kingdom and rank ID values.}
+\usage{
+rank_names(wt = "json", raw = FALSE, ...)
+}
+\arguments{
+\item{wt}{(character) One of "json" or "xml". Required.}
+
+\item{raw}{(logical) Return raw JSON or XML as character string. Required.
+Default: \code{FALSE}}
+
+\item{...}{Curl options passed on to \code{\link[httr]{GET}}}
+}
+\value{
+a data.frame, with columns:
+\itemize{
+ \item kingdomname
+ \item rankid
+ \item rankname
+}
+}
+\description{
+Provides a list of all the unique rank names contained in the database and
+ their kingdom and rank ID values.
+}
+\examples{
+\dontrun{
+rank_names()
+}
+}
+
diff --git a/man/record.Rd b/man/record.Rd
new file mode 100644
index 0000000..4de4e96
--- /dev/null
+++ b/man/record.Rd
@@ -0,0 +1,35 @@
+% Generated by roxygen2: do not edit by hand
+% Please edit documentation in R/record.R
+\name{record}
+\alias{record}
+\title{Gets a record from an LSID}
+\usage{
+record(lsid, wt = "json", raw = FALSE, ...)
+}
+\arguments{
+\item{lsid}{lsid for a taxonomic group (character). Required.}
+
+\item{wt}{(character) One of "json" or "xml". Required.}
+
+\item{raw}{(logical) Return raw JSON or XML as character string. Required.
+Default: \code{FALSE}}
+
+\item{...}{Curl options passed on to \code{\link[httr]{GET}}}
+}
+\value{
+a data.frame
+}
+\description{
+Gets a record from an LSID
+}
+\details{
+Gets the partial ITIS record for the TSN in the LSID, found by comparing the
+ TSN in the search key to the TSN field. Returns an empty result set if
+ there is no match or the TSN is invalid.
+}
+\examples{
+\dontrun{
+record(lsid = "urn:lsid:itis.gov:itis_tsn:180543")
+}
+}
+
diff --git a/man/review_year.Rd b/man/review_year.Rd
new file mode 100644
index 0000000..2eb91de
--- /dev/null
+++ b/man/review_year.Rd
@@ -0,0 +1,30 @@
+% Generated by roxygen2: do not edit by hand
+% Please edit documentation in R/review_year.R
+\name{review_year}
+\alias{review_year}
+\title{Returns the review year for the TSN.}
+\usage{
+review_year(tsn, wt = "json", raw = FALSE, ...)
+}
+\arguments{
+\item{tsn}{TSN for a taxonomic group (numeric). Required.}
+
+\item{wt}{(character) One of "json" or "xml". Required.}
+
+\item{raw}{(logical) Return raw JSON or XML as character string. Required.
+Default: \code{FALSE}}
+
+\item{...}{Curl options passed on to \code{\link[httr]{GET}}}
+}
+\value{
+a data.frame
+}
+\description{
+Returns the review year for the TSN.
+}
+\examples{
+\dontrun{
+review_year(tsn = 180541)
+}
+}
+
diff --git a/man/ritis-package.Rd b/man/ritis-package.Rd
new file mode 100644
index 0000000..1a5fe3d
--- /dev/null
+++ b/man/ritis-package.Rd
@@ -0,0 +1,31 @@
+% Generated by roxygen2: do not edit by hand
+% Please edit documentation in R/ritis-package.R
+\docType{package}
+\name{ritis-package}
+\alias{ritis}
+\alias{ritis-package}
+\title{Interface to Integrated Taxonomic Information (ITIS)}
+\description{
+Interface to Integrated Taxonomic Information (ITIS)
+}
+\section{ritis package API}{
+
+All functions that start with \code{itis_} work with the ITIS Solr
+API described at \url{http://www.itis.gov/solr_documentation.html},
+which uses the package \pkg{solrium}, and these functions have you
+use the \pkg{solrium} function interfaces, so you can pass on parameters
+to the \pkg{solrium} functions - so the \pkg{solrium} docs are important
+here.
+
+All other functions work with the ITIS REST API described at
+\url{http://www.itis.gov/ws_description.html}. For these methods,
+they can grab data in either JSON or XML format. JSON is the default.
+We parse the JSON to R native format, either data.frame, character
+string, or list. You can get raw JSON as a character string back,
+or raw XML as a character string, and then parse yourself with
+\pkg{jsonlite} or \pkg{xml2}
+}
+\author{
+Scott Chamberlain \email{myrmecocystus at gmail.com}
+}
+
diff --git a/man/scientific_name.Rd b/man/scientific_name.Rd
new file mode 100644
index 0000000..5f4b1c1
--- /dev/null
+++ b/man/scientific_name.Rd
@@ -0,0 +1,32 @@
+% Generated by roxygen2: do not edit by hand
+% Please edit documentation in R/scientific_name.R
+\name{scientific_name}
+\alias{scientific_name}
+\title{Returns the scientific name for the TSN. Also returns the component parts
+   (names and indicators) of the scientific name.}
+\usage{
+scientific_name(tsn, wt = "json", raw = FALSE, ...)
+}
+\arguments{
+\item{tsn}{TSN for a taxonomic group (numeric). Required.}
+
+\item{wt}{(character) One of "json" or "xml". Required.}
+
+\item{raw}{(logical) Return raw JSON or XML as character string. Required.
+Default: \code{FALSE}}
+
+\item{...}{Curl options passed on to \code{\link[httr]{GET}}}
+}
+\value{
+a data.frame
+}
+\description{
+Returns the scientific name for the TSN. Also returns the component parts
+   (names and indicators) of the scientific name.
+}
+\examples{
+\dontrun{
+scientific_name(tsn = 531894)
+}
+}
+
diff --git a/man/search_any_match_paged.Rd b/man/search_any_match_paged.Rd
new file mode 100644
index 0000000..aff79d2
--- /dev/null
+++ b/man/search_any_match_paged.Rd
@@ -0,0 +1,44 @@
+% Generated by roxygen2: do not edit by hand
+% Please edit documentation in R/search_any_match_paged.R
+\name{search_any_match_paged}
+\alias{search_any_match_paged}
+\title{Search for any matched page}
+\usage{
+search_any_match_paged(x, pagesize = NULL, pagenum = NULL, ascend = NULL,
+  wt = "json", raw = FALSE, ...)
+}
+\arguments{
+\item{x}{text or taxonomic serial number (TSN) (character or numeric)}
+
+\item{pagesize}{An integer containing the page size (numeric)}
+
+\item{pagenum}{An integer containing the page number (numeric)}
+
+\item{ascend}{A boolean containing true for ascending sort order or false
+for descending (logical)}
+
+\item{wt}{(character) One of "json" or "xml". Required.}
+
+\item{raw}{(logical) Return raw JSON or XML as character string. Required.
+Default: \code{FALSE}}
+
+\item{...}{Curl options passed on to \code{\link[httr]{GET}}}
+}
+\value{
+a data.frame
+
+a data.frame
+}
+\description{
+Search for any matched page
+}
+\examples{
+\dontrun{
+search_any_match_paged(x=202385, pagesize=100, pagenum=1, ascend=FALSE)
+search_any_match_paged(x="Zy", pagesize=100, pagenum=1, ascend=FALSE)
+}
+}
+\seealso{
+\code{\link{search_anymatch}}
+}
+
diff --git a/man/search_anymatch.Rd b/man/search_anymatch.Rd
new file mode 100644
index 0000000..d73bd86
--- /dev/null
+++ b/man/search_anymatch.Rd
@@ -0,0 +1,34 @@
+% Generated by roxygen2: do not edit by hand
+% Please edit documentation in R/search_anymatch.R
+\name{search_anymatch}
+\alias{search_anymatch}
+\title{Search for any match}
+\usage{
+search_anymatch(x, wt = "json", raw = FALSE, ...)
+}
+\arguments{
+\item{x}{text or taxonomic serial number (TSN) (character or numeric)}
+
+\item{wt}{(character) One of "json" or "xml". Required.}
+
+\item{raw}{(logical) Return raw JSON or XML as character string. Required.
+Default: \code{FALSE}}
+
+\item{...}{Curl options passed on to \code{\link[httr]{GET}}}
+}
+\value{
+a data.frame
+}
+\description{
+Search for any match
+}
+\examples{
+\dontrun{
+search_anymatch(x = 202385)
+search_anymatch(x = "dolphin")
+}
+}
+\seealso{
+\code{\link{search_any_match_paged}}
+}
+
diff --git a/man/search_common.Rd b/man/search_common.Rd
new file mode 100644
index 0000000..962cc7a
--- /dev/null
+++ b/man/search_common.Rd
@@ -0,0 +1,56 @@
+% Generated by roxygen2: do not edit by hand
+% Please edit documentation in R/search_common.R
+\name{search_common}
+\alias{search_common}
+\title{Search for tsn by common name}
+\usage{
+search_common(x, from = "all", wt = "json", raw = FALSE, ...)
+}
+\arguments{
+\item{x}{text or taxonomic serial number (TSN) (character or numeric)}
+
+\item{from}{(character) One of "all", "begin", or "end". See Details.}
+
+\item{wt}{(character) One of "json" or "xml". Required.}
+
+\item{raw}{(logical) Return raw JSON or XML as character string. Required.
+Default: \code{FALSE}}
+
+\item{...}{Curl options passed on to \code{\link[httr]{GET}}}
+}
+\value{
+a data.frame
+}
+\description{
+Search for tsn by common name
+}
+\details{
+The \code{from} parameter:
+\itemize{
+ \item all - Search against the \code{searchByCommonName} API route, which
+ searches entire name string
+ \item begin - Search against the \code{searchByCommonNameBeginsWith} API route, which
+ searches for a match at the beginning of a name string
+ \item end - Search against the \code{searchByCommonNameEndsWith} API route, which
+ searches for a match at the end of a name string
+}
+}
+\examples{
+\dontrun{
+search_common("american bullfrog")
+search_common("ferret-badger")
+search_common("polar bear")
+
+# comparison: all, begin, end
+search_common("inch")
+search_common("inch", from = "begin")
+search_common("inch", from = "end")
+
+# end
+search_common("snake", from = "end")
+}
+}
+\seealso{
+\code{\link{search_scientific}}
+}
+
diff --git a/man/search_scientific.Rd b/man/search_scientific.Rd
new file mode 100644
index 0000000..88cc407
--- /dev/null
+++ b/man/search_scientific.Rd
@@ -0,0 +1,34 @@
+% Generated by roxygen2: do not edit by hand
+% Please edit documentation in R/search_scientific.R
+\name{search_scientific}
+\alias{search_scientific}
+\title{Search by scientific name}
+\usage{
+search_scientific(x, wt = "json", raw = FALSE, ...)
+}
+\arguments{
+\item{x}{text or taxonomic serial number (TSN) (character or numeric)}
+
+\item{wt}{(character) One of "json" or "xml". Required.}
+
+\item{raw}{(logical) Return raw JSON or XML as character string. Required.
+Default: \code{FALSE}}
+
+\item{...}{Curl options passed on to \code{\link[httr]{GET}}}
+}
+\value{
+a data.frame
+}
+\description{
+Search by scientific name
+}
+\examples{
+\dontrun{
+search_scientific("Tardigrada")
+search_scientific("Quercus douglasii")
+}
+}
+\seealso{
+\code{\link{search_common}}
+}
+
diff --git a/man/solr.Rd b/man/solr.Rd
new file mode 100644
index 0000000..6b245a1
--- /dev/null
+++ b/man/solr.Rd
@@ -0,0 +1,20 @@
+% Generated by roxygen2: do not edit by hand
+% Please edit documentation in R/solr.R
+\name{solr}
+\alias{solr}
+\title{ITIS Solr Methods}
+\description{
+ITIS provides access to their data via their Solr service described at
+\url{http://www.itis.gov/solr_documentation.html}.  This is a powerful
+interace to ITIS data as you have access to a very flexible query interface.
+}
+\section{Functions}{
+
+\itemize{
+ \item \code{\link{itis_search}} - Search
+ \item \code{\link{itis_group}} - Group
+ \item \code{\link{itis_highlight}} - Highlight
+ \item \code{\link{itis_facet}} - Facet
+}
+}
+
diff --git a/man/synonym_names.Rd b/man/synonym_names.Rd
new file mode 100644
index 0000000..960cc04
--- /dev/null
+++ b/man/synonym_names.Rd
@@ -0,0 +1,31 @@
+% Generated by roxygen2: do not edit by hand
+% Please edit documentation in R/synonym_names.R
+\name{synonym_names}
+\alias{synonym_names}
+\title{Returns a list of the synonyms (if any) for the TSN.}
+\usage{
+synonym_names(tsn, wt = "json", raw = FALSE, ...)
+}
+\arguments{
+\item{tsn}{TSN for a taxonomic group (numeric). Required.}
+
+\item{wt}{(character) One of "json" or "xml". Required.}
+
+\item{raw}{(logical) Return raw JSON or XML as character string. Required.
+Default: \code{FALSE}}
+
+\item{...}{Curl options passed on to \code{\link[httr]{GET}}}
+}
+\value{
+a data.frame
+}
+\description{
+Returns a list of the synonyms (if any) for the TSN.
+}
+\examples{
+\dontrun{
+synonym_names(tsn=183671) # tsn not accepted
+synonym_names(tsn=526852) # tsn accepted
+}
+}
+
diff --git a/man/taxon_authorship.Rd b/man/taxon_authorship.Rd
new file mode 100644
index 0000000..d39394e
--- /dev/null
+++ b/man/taxon_authorship.Rd
@@ -0,0 +1,30 @@
+% Generated by roxygen2: do not edit by hand
+% Please edit documentation in R/taxon_authorship.R
+\name{taxon_authorship}
+\alias{taxon_authorship}
+\title{Returns the author information for the TSN.}
+\usage{
+taxon_authorship(tsn, wt = "json", raw = FALSE, ...)
+}
+\arguments{
+\item{tsn}{TSN for a taxonomic group (numeric). Required.}
+
+\item{wt}{(character) One of "json" or "xml". Required.}
+
+\item{raw}{(logical) Return raw JSON or XML as character string. Required.
+Default: \code{FALSE}}
+
+\item{...}{Curl options passed on to \code{\link[httr]{GET}}}
+}
+\value{
+a data.frame
+}
+\description{
+Returns the author information for the TSN.
+}
+\examples{
+\dontrun{
+taxon_authorship(tsn = 183671)
+}
+}
+
diff --git a/man/terms.Rd b/man/terms.Rd
new file mode 100644
index 0000000..0fcc615
--- /dev/null
+++ b/man/terms.Rd
@@ -0,0 +1,40 @@
+% Generated by roxygen2: do not edit by hand
+% Please edit documentation in R/terms.R
+\name{terms}
+\alias{terms}
+\title{Get ITIS terms, i.e., tsn's, authors, common names, and scientific names.}
+\usage{
+terms(query, what = "both", wt = "json", raw = FALSE, ...)
+}
+\arguments{
+\item{query}{One or more common or scientific names, or partial names}
+
+\item{what}{One of both (search common and scientific names), common (search just
+common names), or scientific (search just scientific names)}
+
+\item{wt}{(character) One of "json" or "xml". Required.}
+
+\item{raw}{(logical) Return raw JSON or XML as character string. Required.
+Default: \code{FALSE}}
+
+\item{...}{Curl options passed on to \code{\link[httr]{GET}}}
+}
+\description{
+Get ITIS terms, i.e., tsn's, authors, common names, and scientific names.
+}
+\examples{
+\dontrun{
+# Get terms searching both common and scientific names
+terms(query='bear')
+
+# Get terms searching just common names
+terms(query='tarweed', "common")
+
+# Get terms searching just scientific names
+terms(query='Poa annua', "scientific")
+
+# many at once
+terms(query=c('Poa annua', 'Pinus contorta'), "scientific")
+}
+}
+
diff --git a/man/tsn2lsid.Rd b/man/tsn2lsid.Rd
new file mode 100644
index 0000000..e538908
--- /dev/null
+++ b/man/tsn2lsid.Rd
@@ -0,0 +1,33 @@
+% Generated by roxygen2: do not edit by hand
+% Please edit documentation in R/tsn2lsid.R
+\name{tsn2lsid}
+\alias{tsn2lsid}
+\title{Gets the unique LSID for the TSN, or an empty result if there is no match.}
+\usage{
+tsn2lsid(tsn, wt = "json", raw = FALSE, ...)
+}
+\arguments{
+\item{tsn}{TSN for a taxonomic group (numeric). Required.}
+
+\item{wt}{(character) One of "json" or "xml". Required.}
+
+\item{raw}{(logical) Return raw JSON or XML as character string. Required.
+Default: \code{FALSE}}
+
+\item{...}{Curl options passed on to \code{\link[httr]{GET}}}
+}
+\value{
+a character string, an LSID, or \code{NULL} if nothing found
+}
+\description{
+Gets the unique LSID for the TSN, or an empty result if there is no match.
+}
+\examples{
+\dontrun{
+tsn2lsid(tsn = 155166)
+tsn2lsid(tsn = 333333333)
+tsn2lsid(155166, raw = TRUE)
+tsn2lsid(155166, wt = "xml")
+}
+}
+
diff --git a/man/tsn_by_vernacular_language.Rd b/man/tsn_by_vernacular_language.Rd
new file mode 100644
index 0000000..1eef8ad
--- /dev/null
+++ b/man/tsn_by_vernacular_language.Rd
@@ -0,0 +1,31 @@
+% Generated by roxygen2: do not edit by hand
+% Please edit documentation in R/tsn_by_vernacular_language.R
+\name{tsn_by_vernacular_language}
+\alias{tsn_by_vernacular_language}
+\title{Get tsn by vernacular language}
+\usage{
+tsn_by_vernacular_language(language, wt = "json", raw = FALSE, ...)
+}
+\arguments{
+\item{language}{A string containing the language. This is a language string,
+not the international language code (character)}
+
+\item{wt}{(character) One of "json" or "xml". Required.}
+
+\item{raw}{(logical) Return raw JSON or XML as character string. Required.
+Default: \code{FALSE}}
+
+\item{...}{Curl options passed on to \code{\link[httr]{GET}}}
+}
+\value{
+a data.frame
+}
+\description{
+Get tsn by vernacular language
+}
+\examples{
+\dontrun{
+tsn_by_vernacular_language(language = "french")
+}
+}
+
diff --git a/man/unacceptability_reason.Rd b/man/unacceptability_reason.Rd
new file mode 100644
index 0000000..52a8588
--- /dev/null
+++ b/man/unacceptability_reason.Rd
@@ -0,0 +1,27 @@
+% Generated by roxygen2: do not edit by hand
+% Please edit documentation in R/unacceptability_reason.R
+\name{unacceptability_reason}
+\alias{unacceptability_reason}
+\title{Returns the unacceptability reason, if any, for the TSN.}
+\usage{
+unacceptability_reason(tsn, wt = "json", raw = FALSE, ...)
+}
+\arguments{
+\item{tsn}{TSN for a taxonomic group (numeric). Required.}
+
+\item{wt}{(character) One of "json" or "xml". Required.}
+
+\item{raw}{(logical) Return raw JSON or XML as character string. Required.
+Default: \code{FALSE}}
+
+\item{...}{Curl options passed on to \code{\link[httr]{GET}}}
+}
+\description{
+Returns the unacceptability reason, if any, for the TSN.
+}
+\examples{
+\dontrun{
+unacceptability_reason(tsn = 183671)
+}
+}
+
diff --git a/man/usage.Rd b/man/usage.Rd
new file mode 100644
index 0000000..4ba25c1
--- /dev/null
+++ b/man/usage.Rd
@@ -0,0 +1,29 @@
+% Generated by roxygen2: do not edit by hand
+% Please edit documentation in R/usage.R
+\name{usage}
+\alias{usage}
+\title{Returns the usage information for the TSN.}
+\usage{
+usage(tsn, wt = "json", raw = FALSE, ...)
+}
+\arguments{
+\item{tsn}{TSN for a taxonomic group (numeric). Required.}
+
+\item{wt}{(character) One of "json" or "xml". Required.}
+
+\item{raw}{(logical) Return raw JSON or XML as character string. Required.
+Default: \code{FALSE}}
+
+\item{...}{Curl options passed on to \code{\link[httr]{GET}}}
+}
+\description{
+Returns the usage information for the TSN.
+}
+\examples{
+\dontrun{
+usage(tsn = 526852)
+usage(tsn = 526852, raw = TRUE)
+usage(tsn = 526852, wt = "xml")
+}
+}
+
diff --git a/man/vernacular_languages.Rd b/man/vernacular_languages.Rd
new file mode 100644
index 0000000..522319e
--- /dev/null
+++ b/man/vernacular_languages.Rd
@@ -0,0 +1,28 @@
+% Generated by roxygen2: do not edit by hand
+% Please edit documentation in R/vernacular_languages.R
+\name{vernacular_languages}
+\alias{vernacular_languages}
+\title{Provides a list of the unique languages used in the vernacular table.}
+\usage{
+vernacular_languages(wt = "json", raw = FALSE, ...)
+}
+\arguments{
+\item{wt}{(character) One of "json" or "xml". Required.}
+
+\item{raw}{(logical) Return raw JSON or XML as character string. Required.
+Default: \code{FALSE}}
+
+\item{...}{Curl options passed on to \code{\link[httr]{GET}}}
+}
+\value{
+a character vector of verncular names
+}
+\description{
+Provides a list of the unique languages used in the vernacular table.
+}
+\examples{
+\dontrun{
+vernacular_languages()
+}
+}
+
diff --git a/tests/test-all.R b/tests/test-all.R
new file mode 100644
index 0000000..fd501e8
--- /dev/null
+++ b/tests/test-all.R
@@ -0,0 +1,2 @@
+library("testthat")
+test_check("ritis")
diff --git a/tests/testthat/helper.R b/tests/testthat/helper.R
new file mode 100644
index 0000000..0749775
--- /dev/null
+++ b/tests/testthat/helper.R
@@ -0,0 +1 @@
+sm <- function(x) suppressMessages(x)
diff --git a/tests/testthat/test-any_match_count.R b/tests/testthat/test-any_match_count.R
new file mode 100644
index 0000000..ca7a032
--- /dev/null
+++ b/tests/testthat/test-any_match_count.R
@@ -0,0 +1,49 @@
+context("any_match_count")
+
+test_that("any_match_count basic functionality works", {
+  skip_on_cran()
+
+  aa <- any_match_count(x = 202385)
+
+  expect_true(class(aa) %in% c('numeric', 'integer'))
+  expect_gt(aa, 0)
+
+  bb <- any_match_count(x = "dolphin")
+
+  expect_true(class(bb) %in% c('numeric', 'integer'))
+  expect_gt(bb, 0)
+})
+
+test_that("any_match_count - xml works", {
+  skip_on_cran()
+
+  aa <- any_match_count(202385, wt = "xml")
+
+  expect_is(aa, "character")
+  expect_true(grepl("xmlns", aa))
+})
+
+test_that("any_match_count - raw JSON works", {
+  skip_on_cran()
+
+  aa <- any_match_count(202385, raw = TRUE)
+
+  expect_is(aa, "character")
+  expect_false(grepl("xmlns", aa))
+})
+
+test_that("any_match_count fails well", {
+  skip_on_cran()
+
+  expect_error(any_match_count(), "\"x\" is missing")
+
+  expect_error(any_match_count("asdfafasffd", wt = "ffa"), "'wt' must be one of")
+
+  # character string query with no results lead to values of "0"
+  tmp <- any_match_count(x = "asdfadf")
+  expect_equal(tmp, 0)
+
+  # numeric query with no results lead to values of "0"
+  tmp <- any_match_count(x = 343423432423424)
+  expect_equal(tmp, 0)
+})
diff --git a/tests/testthat/test-hierarchy.R b/tests/testthat/test-hierarchy.R
new file mode 100644
index 0000000..de3f13b
--- /dev/null
+++ b/tests/testthat/test-hierarchy.R
@@ -0,0 +1,58 @@
+context("hierarchy functions")
+
+test_that("hierarchy_down basic functionality works", {
+  skip_on_cran()
+
+  aa <- hierarchy_down(tsn = 161030)
+
+  expect_is(aa, "data.frame")
+  expect_is(aa, "tbl_df")
+
+  expect_is(aa$tsn, "character")
+  expect_gt(NROW(aa), 0)
+})
+
+test_that("hierarchy_up basic functionality works", {
+  skip_on_cran()
+
+  aa <- hierarchy_up(tsn = 36485)
+
+  expect_is(aa, "data.frame")
+  expect_is(aa, "tbl_df")
+
+  expect_is(aa$tsn, "character")
+  expect_gt(NROW(aa), 0)
+})
+
+test_that("hierarchy_full basic functionality works", {
+  skip_on_cran()
+
+  aa <- hierarchy_full(tsn = 37906)
+
+  expect_is(aa, "data.frame")
+  expect_is(aa, "tbl_df")
+
+  expect_is(aa$tsn, "character")
+  expect_gt(NROW(aa), 0)
+})
+
+test_that("hierarchy functions fail well", {
+  skip_on_cran()
+
+  expect_error(hierarchy_down(), "\"tsn\" is missing")
+  expect_error(hierarchy_up(), "\"tsn\" is missing")
+  expect_error(hierarchy_full(), "\"tsn\" is missing")
+
+  # tsn's not found lead to 0 row data.frame's
+  tmp <- hierarchy_down(tsn = "Asdfasdfa")
+  expect_is(tmp, "tbl_df")
+  expect_equal(NROW(tmp), 0)
+
+  tmp <- hierarchy_up(tsn = "Asdfasdfa")
+  expect_is(tmp, "tbl_df")
+  expect_equal(NROW(tmp), 0)
+
+  tmp <- hierarchy_full(tsn = "Asdfasdfa")
+  expect_is(tmp, "tbl_df")
+  expect_equal(NROW(tmp), 0)
+})
diff --git a/tests/testthat/test-itis_facet.R b/tests/testthat/test-itis_facet.R
new file mode 100644
index 0000000..f1f861a
--- /dev/null
+++ b/tests/testthat/test-itis_facet.R
@@ -0,0 +1,29 @@
+context("itis_facet")
+
+test_that("itis_facet basic functionality works", {
+  skip_on_cran()
+
+  aa <- sm(itis_facet(q = "rank:Species", rows = 0, facet.field = "kingdom"))
+
+  expect_is(aa, "list")
+  expect_is(aa$facet_fields, "list")
+  expect_is(aa$facet_fields[[1]], "data.frame")
+  expect_null(aa$facet_queries)
+  expect_null(aa$facet_pivot)
+  expect_null(aa$facet_dates)
+  expect_null(aa$facet_ranges)
+
+  expect_named(aa$facet_fields, "kingdom")
+  expect_named(aa$facet_fields[[1]], c('term', 'value'))
+})
+
+test_that("itis_facet fails well", {
+  skip_on_cran()
+
+  expect_identical(
+    sm(itis_facet(foo = "bar")),
+    sm(itis_facet())
+  )
+
+  expect_error(sm(itis_facet(wt = "asdfaddf")))
+})
diff --git a/tests/testthat/test-itis_group.R b/tests/testthat/test-itis_group.R
new file mode 100644
index 0000000..f9a6149
--- /dev/null
+++ b/tests/testthat/test-itis_group.R
@@ -0,0 +1,19 @@
+context("itis_group")
+
+test_that("itis_group basic functionality works", {
+  skip_on_cran()
+
+  aa <- sm(itis_group(q = "nameWOInd:/[A-Za-z0-9]*[%20]{1,1}[A-Za-z0-9]*/",
+                  group.field = 'rank', group.limit = 3))
+
+  expect_is(aa, "data.frame")
+  expect_true(any(grepl("group", names(aa))))
+})
+
+test_that("itis_group fails well", {
+  skip_on_cran()
+
+  expect_error(sm(itis_group()))
+
+  expect_error(sm(itis_group(wt = "asdfaddf")))
+})
diff --git a/tests/testthat/test-itis_highlight.R b/tests/testthat/test-itis_highlight.R
new file mode 100644
index 0000000..8271d01
--- /dev/null
+++ b/tests/testthat/test-itis_highlight.R
@@ -0,0 +1,21 @@
+context("itis_highlight")
+
+test_that("itis_highlight basic functionality works", {
+  skip_on_cran()
+
+  aa <- sm(itis_highlight(q = "rank:Species", hl.fl = 'rank', rows = 10))
+
+  expect_is(aa, "list")
+  expect_is(aa[[1]], "list")
+  expect_is(aa[[1]][[1]], "character")
+  expect_named(aa[[1]], "rank")
+})
+
+test_that("itis_highlight fails well", {
+  skip_on_cran()
+
+  expect_error(sm(itis_highlight(foo = "bar")),
+               "unused argument")
+
+  expect_error(sm(itis_highlight(wt = "asdfaddf")))
+})
diff --git a/tests/testthat/test-itis_search.R b/tests/testthat/test-itis_search.R
new file mode 100644
index 0000000..169ae59
--- /dev/null
+++ b/tests/testthat/test-itis_search.R
@@ -0,0 +1,29 @@
+context("itis_search")
+
+test_that("itis_search basic functionality works", {
+  skip_on_cran()
+
+  aa <- sm(itis_search(q = "tsn:182662"))
+  bb <- sm(itis_search(q = "nameWOInd:Liquidamber\\%20styraciflua~0.4"))
+  cc <- sm(itis_search(q = "nameWOInd:/[A-Ba-z0-9]*[%20]{0,0}*/"))
+
+  expect_is(aa, "data.frame")
+  expect_is(bb, "data.frame")
+  expect_is(cc, "data.frame")
+
+  expect_is(aa$tsn, "character")
+  expect_true(grepl("Liquidambar", bb$nameWInd))
+  expect_false(all(grepl("[C-D]", substring(cc$nameWOInd, 1, 1))))
+})
+
+test_that("itis_search fails well", {
+  skip_on_cran()
+
+  expect_identical(
+    sm(itis_search(foo = "bar")),
+    sm(itis_search())
+  )
+
+  expect_error(itis_search(wt = "asdfaddf"),
+               "must be one of")
+})
diff --git a/tests/testthat/test-jurisdiction.R b/tests/testthat/test-jurisdiction.R
new file mode 100644
index 0000000..10869dd
--- /dev/null
+++ b/tests/testthat/test-jurisdiction.R
@@ -0,0 +1,49 @@
+context("jurisdiction functions")
+
+test_that("jurisdictional_origin basic functionality works", {
+  skip_on_cran()
+
+  aa <- jurisdictional_origin(tsn=180543)
+
+  expect_is(aa, "data.frame")
+  expect_is(aa, "tbl_df")
+
+  expect_is(aa$origin, "character")
+  expect_gt(NROW(aa), 0)
+})
+
+test_that("jurisdiction_origin_values - basic functionality works", {
+  skip_on_cran()
+
+  aa <- jurisdiction_origin_values()
+
+  expect_is(aa, "data.frame")
+  expect_is(aa, "tbl_df")
+
+  expect_named(aa, c('jurisdiction', 'origin'))
+})
+
+test_that("jurisdiction_values - basic functionality works", {
+  skip_on_cran()
+
+  aa <- jurisdiction_values()
+
+  expect_is(aa, "character")
+
+  expect_gt(length(aa), 1)
+})
+
+test_that("jurisdiction functions fail well", {
+  skip_on_cran()
+
+  expect_error(jurisdictional_origin(), "\"tsn\" is missing")
+
+  expect_error(jurisdiction_origin_values(wt = "ffa"), "'wt' must be one of")
+
+  expect_error(jurisdiction_values(wt = "ffa"), "'wt' must be one of")
+
+  # lsid's not found lead to 0 row data.frame's
+  tmp <- jurisdictional_origin(tsn = "asdfasdf")
+  expect_is(tmp, "tbl_df")
+  expect_equal(NROW(tmp), 0)
+})
diff --git a/tests/testthat/test-kingdoms.R b/tests/testthat/test-kingdoms.R
new file mode 100644
index 0000000..1694b79
--- /dev/null
+++ b/tests/testthat/test-kingdoms.R
@@ -0,0 +1,41 @@
+context("kingdom functions")
+
+test_that("kingdom_name basic functionality works", {
+  skip_on_cran()
+
+  aa <- kingdom_name(202385)
+
+  expect_is(aa, "data.frame")
+  expect_is(aa, "tbl_df")
+
+  expect_is(aa$tsn, "character")
+  expect_is(aa$kingdomname, "character")
+  expect_equal(aa$kingdomname, "Animalia")
+  expect_gt(NROW(aa), 0)
+})
+
+test_that("kingdom_names basic functionality works", {
+  skip_on_cran()
+
+  aa <- kingdom_names()
+
+  expect_is(aa, "data.frame")
+  expect_is(aa, "tbl_df")
+
+  expect_is(aa$tsn, "character")
+  expect_gt(NROW(aa), 0)
+  expect_true(any(grepl("Fungi", aa$kingdomname)))
+})
+
+test_that("kingdom functions fail well", {
+  skip_on_cran()
+
+  expect_error(kingdom_name(), "\"tsn\" is missing")
+
+  expect_error(kingdom_names(wt = "ffa"), "'wt' must be one of")
+
+  # tsn's not found lead to 0 row data.frame's
+  tmp <- kingdom_name(tsn = "Asdfasdfa")
+  expect_is(tmp, "tbl_df")
+  expect_equal(NROW(tmp), 0)
+})
diff --git a/tests/testthat/test-publications.R b/tests/testthat/test-publications.R
new file mode 100644
index 0000000..127c877
--- /dev/null
+++ b/tests/testthat/test-publications.R
@@ -0,0 +1,44 @@
+context("publications")
+
+test_that("publications basic functionality works", {
+  skip_on_cran()
+
+  aa <- publications(tsn = 70340)
+
+  expect_is(aa, "data.frame")
+  expect_is(aa, "tbl_df")
+
+  expect_is(aa$isbn, "character")
+  expect_gt(NROW(aa), 0)
+})
+
+test_that("publications - xml works", {
+  skip_on_cran()
+
+  aa <- publications(tsn = 70340, wt = "xml")
+
+  expect_is(aa, "character")
+  expect_match(aa, "xmlns")
+})
+
+test_that("publications - raw JSON works", {
+  skip_on_cran()
+
+  aa <- publications(tsn = 70340, raw = TRUE)
+
+  expect_is(aa, "character")
+  expect_false(grepl("xmlns", aa))
+})
+
+test_that("publications fails well", {
+  skip_on_cran()
+
+  expect_error(publications(), "\"tsn\" is missing")
+
+  expect_error(publications(tsn = 70340, wt = "ffa"), "'wt' must be one of")
+
+  # tsn's not found lead to 0 row data.frame's
+  tmp <- publications(tsn = "Asdfasdfa")
+  expect_is(tmp, "tbl_df")
+  expect_equal(NROW(tmp), 0)
+})
diff --git a/tests/testthat/test-record.R b/tests/testthat/test-record.R
new file mode 100644
index 0000000..d7c2cd7
--- /dev/null
+++ b/tests/testthat/test-record.R
@@ -0,0 +1,44 @@
+context("record")
+
+test_that("record basic functionality works", {
+  skip_on_cran()
+
+  aa <- record(lsid = "urn:lsid:itis.gov:itis_tsn:180543")
+
+  expect_is(aa, "data.frame")
+  expect_is(aa, "tbl_df")
+
+  expect_is(aa$lsid, "character")
+  expect_gt(NROW(aa), 0)
+})
+
+test_that("record - xml works", {
+  skip_on_cran()
+
+  aa <- record(lsid = "urn:lsid:itis.gov:itis_tsn:180543", wt = "xml")
+
+  expect_is(aa, "character")
+  expect_match(aa, "xmlns")
+})
+
+test_that("record - raw JSON works", {
+  skip_on_cran()
+
+  aa <- record(lsid = "urn:lsid:itis.gov:itis_tsn:180543", raw = TRUE)
+
+  expect_is(aa, "character")
+  expect_false(grepl("xmlns", aa))
+})
+
+test_that("record fail well", {
+  skip_on_cran()
+
+  expect_error(record(), "\"lsid\" is missing")
+
+  expect_error(record(lsid = "urn:lsid:itis.gov:itis_tsn:180543", wt = "ffa"), "'wt' must be one of")
+
+  # lsid's not found lead to 0 row data.frame's
+  tmp <- record(lsid = "asdfasdf")
+  expect_is(tmp, "tbl_df")
+  expect_equal(NROW(tmp), 0)
+})
diff --git a/tests/testthat/test-search_common.R b/tests/testthat/test-search_common.R
new file mode 100644
index 0000000..f484963
--- /dev/null
+++ b/tests/testthat/test-search_common.R
@@ -0,0 +1,44 @@
+context("search_common")
+
+test_that("search_common basic functionality works", {
+  skip_on_cran()
+
+  aa <- search_common(x = "american bullfrog")
+
+  expect_is(aa, "data.frame")
+  expect_is(aa, "tbl_df")
+
+  expect_is(aa$tsn, "character")
+  expect_gt(NROW(aa), 0)
+})
+
+test_that("search_common - xml works", {
+  skip_on_cran()
+
+  aa <- search_common(x = "american bullfrog", wt = "xml")
+
+  expect_is(aa, "character")
+  expect_true(grepl("xmlns", aa))
+})
+
+test_that("search_common - raw JSON works", {
+  skip_on_cran()
+
+  aa <- search_common(x = "american bullfrog", raw = TRUE)
+
+  expect_is(aa, "character")
+  expect_false(grepl("xmlns", aa))
+})
+
+test_that("search_common fails well", {
+  skip_on_cran()
+
+  expect_error(search_common(), "\"x\" is missing")
+
+  expect_error(search_common("asdfadf", wt = "ffa"), "'wt' must be one of")
+
+  # query with no results lead to 0 row data.frame's
+  tmp <- search_common(x = "asdfadf")
+  expect_is(tmp, "tbl_df")
+  expect_equal(NROW(tmp), 0)
+})
diff --git a/tests/testthat/test-search_scientific.R b/tests/testthat/test-search_scientific.R
new file mode 100644
index 0000000..b674f6a
--- /dev/null
+++ b/tests/testthat/test-search_scientific.R
@@ -0,0 +1,44 @@
+context("search_scientific")
+
+test_that("search_scientific basic functionality works", {
+  skip_on_cran()
+
+  aa <- search_scientific("Tardigrada")
+
+  expect_is(aa, "data.frame")
+  expect_is(aa, "tbl_df")
+
+  expect_is(aa$tsn, "character")
+  expect_gt(NROW(aa), 0)
+})
+
+test_that("search_scientific - xml works", {
+  skip_on_cran()
+
+  aa <- search_scientific("Tardigrada", wt = "xml")
+
+  expect_is(aa, "character")
+  expect_true(grepl("xmlns", aa))
+})
+
+test_that("search_scientific - raw JSON works", {
+  skip_on_cran()
+
+  aa <- search_scientific("Tardigrada", raw = TRUE)
+
+  expect_is(aa, "character")
+  expect_false(grepl("xmlns", aa))
+})
+
+test_that("search_scientific fails well", {
+  skip_on_cran()
+
+  expect_error(search_scientific(), "\"x\" is missing")
+
+  expect_error(search_scientific("asdfadf", wt = "ffa"), "'wt' must be one of")
+
+  # query with no results lead to 0 row data.frame's
+  tmp <- search_scientific(x = "asdfadf", wt = "json")
+  expect_is(tmp, "tbl_df")
+  expect_equal(NROW(tmp), 0)
+})
diff --git a/vignettes/ritis_vignette.Rmd b/vignettes/ritis_vignette.Rmd
new file mode 100644
index 0000000..7a19595
--- /dev/null
+++ b/vignettes/ritis_vignette.Rmd
@@ -0,0 +1,161 @@
+<!--
+%\VignetteEngine{knitr::knitr}
+%\VignetteIndexEntry{ritis introduction}
+%\VignetteEncoding{UTF-8}
+-->
+
+
+
+ritis introduction
+==================
+
+An interface to the Integrated Taxonomic Information System (ITIS)
+
+## Installation
+
+Install from CRAN
+
+
+```r
+install.packages("ritis")
+```
+
+Or install the development version from GitHub
+
+
+```r
+devtools::install_github("ropensci/ritis")
+```
+
+Load `ritis`
+
+
+```r
+library("ritis")
+```
+
+## ITIS Solr interface
+
+There are four methods.
+
+* `itis_search()` - Search
+* `itis_group()` - Group
+* `itis_highlight()` - Hightlight
+* `itis_facet()` - Facet
+
+These four methods use the equivalent functions in the package `solrium`, e.g.,
+`ritis::itis_search()` uses `solrium::solr_search()`, etc. The `itis_*()` functions
+simply use `...` to allow users to pass on parameters to the wrapped `solrium`
+functions. So do read the `solrium` docs.
+
+ITIS Solr API docs: <https://www.itis.gov/solr_documentation.html>
+
+Some examples:
+
+matches only monomials
+
+
+```r
+itis_search(q = "nameWOInd:/[A-Za-z0-9]*[%20]{0,0}*/")
+#> # A tibble: 10 × 27
+#>      tsn          nameWInd         nameWOInd             unit1   usage
+#>    <chr>             <chr>             <chr>             <chr>   <chr>
+#> 1     51     Schizomycetes     Schizomycetes     Schizomycetes invalid
+#> 2     50          Bacteria          Bacteria          Bacteria   valid
+#> 3     52     Archangiaceae     Archangiaceae     Archangiaceae invalid
+#> 4     53   Pseudomonadales   Pseudomonadales   Pseudomonadales   valid
+#> 5     54 Rhodobacteriineae Rhodobacteriineae Rhodobacteriineae invalid
+#> 6     55  Pseudomonadineae  Pseudomonadineae  Pseudomonadineae invalid
+#> 7     56  Nitrobacteraceae  Nitrobacteraceae  Nitrobacteraceae invalid
+#> 8     57       Nitrobacter       Nitrobacter       Nitrobacter   valid
+#> 9     65      Nitrosomonas      Nitrosomonas      Nitrosomonas   valid
+#> 10    70  Thiobacteriaceae  Thiobacteriaceae  Thiobacteriaceae invalid
+#> # ... with 22 more variables: unacceptReason <chr>,
+#> #   credibilityRating <chr>, completenessRating <chr>,
+#> #   currencyRating <chr>, kingdom <chr>, rankID <chr>, rank <chr>,
+#> #   hierarchySoFar <chr>, hierarchySoFarWRanks <chr>, hierarchyTSN <chr>,
+#> #   synonyms <chr>, synonymTSNs <chr>, otherSource <chr>,
+#> #   acceptedTSN <chr>, comment <chr>, createDate <chr>, updateDate <chr>,
+#> #   `_version_` <dbl>, taxonAuthor <chr>, vernacular <chr>,
+#> #   hierarchicalSort <chr>, parentTSN <chr>
+```
+
+matches only binomials
+
+
+```r
+itis_search(q = "nameWOInd:/[A-Za-z0-9]*[%20]{1,1}[A-Za-z0-9]*/")
+#> # A tibble: 10 × 25
+#>      tsn                  nameWInd                 nameWOInd        unit1
+#>    <chr>                     <chr>                     <chr>        <chr>
+#> 1     58        Nitrobacter agilis        Nitrobacter agilis  Nitrobacter
+#> 2     59        Nitrobacter flavus        Nitrobacter flavus  Nitrobacter
+#> 3     60  Nitrobacter oligotrophis  Nitrobacter oligotrophis  Nitrobacter
+#> 4     61   Nitrobacter polytrophus   Nitrobacter polytrophus  Nitrobacter
+#> 5     62      Nitrobacter punctata      Nitrobacter punctata  Nitrobacter
+#> 6     64  Nitrobacter winogradskyi  Nitrobacter winogradskyi  Nitrobacter
+#> 7     66     Nitrosomonas europaea     Nitrosomonas europaea Nitrosomonas
+#> 8     67 Nitrosomonas groningensis Nitrosomonas groningensis Nitrosomonas
+#> 9     68   Nitrosomonas javenensis   Nitrosomonas javenensis Nitrosomonas
+#> 10    69    Nitrosomonas monocella    Nitrosomonas monocella Nitrosomonas
+#> # ... with 21 more variables: unit2 <chr>, usage <chr>,
+#> #   unacceptReason <chr>, credibilityRating <chr>, kingdom <chr>,
+#> #   rankID <chr>, rank <chr>, hierarchySoFar <chr>,
+#> #   hierarchySoFarWRanks <chr>, hierarchyTSN <chr>, synonyms <chr>,
+#> #   synonymTSNs <chr>, otherSource <chr>, acceptedTSN <chr>,
+#> #   comment <chr>, createDate <chr>, updateDate <chr>, `_version_` <dbl>,
+#> #   taxonAuthor <chr>, parentTSN <chr>, hierarchicalSort <chr>
+```
+
+## ITIS REST API interface
+
+ITIS REST API docs: <http://www.itis.gov/ws_description.html>
+
+The following are some example uses. There are many more methods not shown below
+
+-------
+
+Get accepted names for a TSN
+
+
+```r
+accepted_names(tsn = 504239)
+#> # A tibble: 1 × 3
+#>          acceptedName acceptedTsn     author
+#>                 <chr>       <chr>      <chr>
+#> 1 Dasiphora fruticosa      836659 (L.) Rydb.
+```
+
+Get common names for a TSN
+
+
+```r
+common_names(tsn = 183833)
+#> # A tibble: 3 × 3
+#>            commonName language    tsn
+#>                 <chr>    <chr>  <chr>
+#> 1 African hunting dog  English 183833
+#> 2    African Wild Dog  English 183833
+#> 3 Painted Hunting Dog  English 183833
+```
+
+Full hierarchy for a TSN
+
+
+```r
+hierarchy_full(tsn = 37906)
+#> # A tibble: 60 × 5
+#>         parentname parenttsn      rankname       taxonname    tsn
+#> *            <chr>     <chr>         <chr>           <chr>  <chr>
+#> 1                                  Kingdom         Plantae 202422
+#> 2          Plantae    202422    Subkingdom   Viridiplantae 954898
+#> 3    Viridiplantae    954898  Infrakingdom    Streptophyta 846494
+#> 4     Streptophyta    846494 Superdivision     Embryophyta 954900
+#> 5      Embryophyta    954900      Division    Tracheophyta 846496
+#> 6     Tracheophyta    846496   Subdivision Spermatophytina 846504
+#> 7  Spermatophytina    846504         Class   Magnoliopsida  18063
+#> 8    Magnoliopsida     18063    Superorder       Asteranae 846535
+#> 9        Asteranae    846535         Order       Asterales  35419
+#> 10       Asterales     35419        Family      Asteraceae  35420
+#> # ... with 50 more rows
+```

-- 
Alioth's /usr/local/bin/git-commit-notice on /srv/git.debian.org/git/debian-med/r-cran-ritis.git



More information about the debian-med-commit mailing list