{
  "_id": "6a19c8a3ad7a21ec8945ff6c",
  "Package": "nectar",
  "Title": "A Framework for Web API Packages",
  "Version": "0.0.0.9007",
  "Authors@R": "c(\nperson(\"Jon\", \"Harmon\", , \"jonthegeek@gmail.com\", role = c(\"aut\", \"cre\", \"cph\"),\ncomment = c(ORCID = \"0000-0003-4781-4346\")),\nperson(\"R Consortium\", role = \"fnd\")\n)",
  "Description": "An opinionated framework for use within api-wrapping R\npackages.",
  "License": "MIT + file LICENSE",
  "URL": "https://nectar.api2r.org, https://github.com/api2r/nectar",
  "BugReports": "https://github.com/api2r/nectar/issues",
  "VignetteBuilder": "knitr",
  "Remotes": [
    "wranglezone/tibblify"
  ],
  "Config/roxygen2/version": "8.0.0",
  "Config/testthat/edition": "3",
  "Encoding": "UTF-8",
  "Language": "en-US",
  "Roxygen": "list(markdown = TRUE)",
  "Config/pak/sysreqs": "cmake make libicu-dev libuv1-dev libssl-dev",
  "Repository": "https://jonthegeek.r-universe.dev",
  "Date/Publication": "2026-05-12 19:59:54 UTC",
  "RemoteUrl": "https://github.com/jonthegeek/nectar",
  "RemoteRef": "HEAD",
  "RemoteSha": "9c6c19dd303a71d024d1dd85d3a79ba6cdcfb11d",
  "NeedsCompilation": "no",
  "Packaged": {
    "Date": "2026-05-29 17:07:04 UTC",
    "User": "root"
  },
  "Author": "Jon Harmon [aut, cre, cph] (ORCID:\n<https://orcid.org/0000-0003-4781-4346>),\nR Consortium [fnd]",
  "Maintainer": "Jon Harmon <jonthegeek@gmail.com>",
  "MD5sum": "41dcc14f4c16b6d28b55bf7ef57896af",
  "_user": "jonthegeek",
  "_type": "src",
  "_file": "nectar_0.0.0.9007.tar.gz",
  "_fileid": "0a0d60dbb9cbbe7b002b2b08957e16ed33a39a4127f2f4d78fc6e7e58c58d868",
  "_filesize": 527027,
  "_sha256": "0a0d60dbb9cbbe7b002b2b08957e16ed33a39a4127f2f4d78fc6e7e58c58d868",
  "_created": "2026-05-29T17:07:04.000Z",
  "_published": "2026-05-29T17:10:59.343Z",
  "_distro": "noble",
  "_jobs": [
    {
      "job": 78549331317,
      "time": 157,
      "config": "linux-devel-x86_64",
      "r": "4.7.0",
      "check": "OK",
      "artifact": "7296570964"
    },
    {
      "job": 78549331165,
      "time": 136,
      "config": "linux-release-x86_64",
      "r": "4.6.0",
      "check": "OK",
      "artifact": "7296564704"
    },
    {
      "job": 78549331218,
      "time": 87,
      "config": "macos-oldrel-arm64",
      "r": "4.5.3",
      "check": "OK",
      "artifact": "7296548253"
    },
    {
      "job": 78549331184,
      "time": 89,
      "config": "macos-release-arm64",
      "r": "4.6.0",
      "check": "OK",
      "artifact": "7296548707"
    },
    {
      "job": 78548705245,
      "time": 222,
      "config": "source",
      "r": "4.6.0",
      "check": "OK",
      "artifact": "7296517508"
    },
    {
      "job": 78549331225,
      "time": 113,
      "config": "wasm-release",
      "r": "4.6.0",
      "check": "OK",
      "artifact": "7296556789"
    },
    {
      "job": 78549331375,
      "time": 108,
      "config": "windows-devel",
      "r": "4.7.0",
      "check": "OK",
      "artifact": "7296555757"
    },
    {
      "job": 78549331193,
      "time": 103,
      "config": "windows-oldrel",
      "r": "4.5.3",
      "check": "OK",
      "artifact": "7296553382"
    },
    {
      "job": 78549331235,
      "time": 184,
      "config": "windows-release",
      "r": "4.6.0",
      "check": "OK",
      "artifact": "7296580734"
    }
  ],
  "_buildurl": "https://github.com/r-universe/jonthegeek/actions/runs/26650892639",
  "_status": "success",
  "_host": "GitHub-Actions",
  "_upstream": "https://github.com/jonthegeek/nectar",
  "_commit": {
    "id": "9c6c19dd303a71d024d1dd85d3a79ba6cdcfb11d",
    "author": "Copilot <198982749+Copilot@users.noreply.github.com>",
    "committer": "GitHub <noreply@github.com>",
    "message": "Add `header` and `cookie` params to `req_modify()` and `req_prepare()` (#93)\n\n* Initial plan\n\n* feat: add header and cookie params to req_modify() and req_prepare()\n\nAgent-Logs-Url: https://github.com/api2r/nectar/sessions/5b2e2bee-e1e8-43c9-bba9-9037460b89f2\n\nCo-authored-by: jonthegeek <33983824+jonthegeek@users.noreply.github.com>\n\n* fix: correct alphabetical ordering of header/cookie params and trailing blank line\n\nAgent-Logs-Url: https://github.com/api2r/nectar/sessions/5b2e2bee-e1e8-43c9-bba9-9037460b89f2\n\nCo-authored-by: jonthegeek <33983824+jonthegeek@users.noreply.github.com>\n\n* fix: add missing newline in aaa-shared_params.R\n\nAgent-Logs-Url: https://github.com/api2r/nectar/sessions/5b2e2bee-e1e8-43c9-bba9-9037460b89f2\n\nCo-authored-by: jonthegeek <33983824+jonthegeek@users.noreply.github.com>\n\n* air, wrap, and document\n\n* refactor: remove .req_headers_flatten and pass NULL headers through to httr2\n\nAgent-Logs-Url: https://github.com/api2r/nectar/sessions/fde4ea6e-b7ed-4973-8911-01ec29111460\n\nCo-authored-by: jonthegeek <33983824+jonthegeek@users.noreply.github.com>\n\n* Document\n\n* test: add test-req_modify.R with 100% coverage for R/req_modify.R\n\nAgent-Logs-Url: https://github.com/api2r/nectar/sessions/d58f3771-2488-4613-8fe3-6ae28c9adf88\n\nCo-authored-by: jonthegeek <33983824+jonthegeek@users.noreply.github.com>\n\n* Clean up `expect_error`\n\n* Tag tests to issues\n\n---------\n\nCo-authored-by: copilot-swe-agent[bot] <198982749+Copilot@users.noreply.github.com>\nCo-authored-by: jonthegeek <33983824+jonthegeek@users.noreply.github.com>\nCo-authored-by: Jon Harmon <jonthegeek@gmail.com>",
    "time": 1778615994
  },
  "_maintainer": {
    "name": "Jon Harmon",
    "email": "jonthegeek@gmail.com",
    "login": "jonthegeek",
    "mastodon": "@jonthegeek@fosstodon.org",
    "bluesky": "@jonthegeek.com",
    "linkedin": "in/jonthegeek",
    "description": "Executive Director at DSLC.io (fka @r4ds) | Principal Developer (@atorus-research)",
    "uuid": 33983824,
    "orcid": "0000-0003-4781-4346"
  },
  "_registered": true,
  "_dependencies": [
    {
      "package": "R",
      "version": ">= 4.1.0",
      "role": "Depends"
    },
    {
      "package": "curl",
      "role": "Imports"
    },
    {
      "package": "fs",
      "role": "Imports"
    },
    {
      "package": "glue",
      "role": "Imports"
    },
    {
      "package": "httr2",
      "version": ">= 1.1.0",
      "role": "Imports"
    },
    {
      "package": "jsonlite",
      "role": "Imports"
    },
    {
      "package": "lifecycle",
      "role": "Imports"
    },
    {
      "package": "purrr",
      "role": "Imports"
    },
    {
      "package": "rlang",
      "role": "Imports"
    },
    {
      "package": "stbl",
      "version": ">= 0.3.0",
      "role": "Imports"
    },
    {
      "package": "stringr",
      "role": "Imports"
    },
    {
      "package": "vctrs",
      "role": "Imports"
    },
    {
      "package": "covr",
      "role": "Suggests"
    },
    {
      "package": "knitr",
      "role": "Suggests"
    },
    {
      "package": "rmarkdown",
      "role": "Suggests"
    },
    {
      "package": "stringi",
      "role": "Suggests"
    },
    {
      "package": "testthat",
      "version": ">= 3.0.0",
      "role": "Suggests"
    },
    {
      "package": "tibble",
      "role": "Suggests"
    },
    {
      "package": "tibblify",
      "role": "Suggests"
    }
  ],
  "_owner": "jonthegeek",
  "_selfowned": true,
  "_usedby": 3,
  "_updates": [
    {
      "week": "2025-38",
      "n": 3
    },
    {
      "week": "2025-50",
      "n": 2
    },
    {
      "week": "2025-52",
      "n": 1
    },
    {
      "week": "2026-06",
      "n": 1
    },
    {
      "week": "2026-08",
      "n": 1
    },
    {
      "week": "2026-13",
      "n": 1
    },
    {
      "week": "2026-14",
      "n": 6
    },
    {
      "week": "2026-15",
      "n": 4
    },
    {
      "week": "2026-19",
      "n": 3
    },
    {
      "week": "2026-20",
      "n": 5
    }
  ],
  "_tags": [],
  "_stars": 16,
  "_contributors": [
    {
      "user": "jonthegeek",
      "count": 47,
      "uuid": 33983824
    },
    {
      "user": "copilot",
      "count": 8,
      "uuid": 198982749
    }
  ],
  "_userbio": {
    "uuid": 33983824,
    "type": "user",
    "name": "Jon Harmon",
    "description": "Executive Director at DSLC.io (fka @r4ds) | Principal Developer (@atorus-research)"
  },
  "_downloads": {
    "count": 0,
    "source": "https://cranlogs.r-pkg.org/downloads/total/last-month/nectar"
  },
  "_devurl": "https://github.com/api2r/nectar",
  "_pkgdown": "https://nectar.api2r.org",
  "_searchresults": 3,
  "_rbuild": "4.6.0",
  "_assets": [
    "extra/citation.cff",
    "extra/citation.html",
    "extra/citation.json",
    "extra/citation.txt",
    "extra/contents.json",
    "extra/nectar.html",
    "extra/readme.html",
    "extra/readme.md",
    "manual.pdf"
  ],
  "_cranurl": false,
  "_exports": [
    "auth_api_key",
    "auth_prepare",
    "choose_pagination_fn",
    "compact_nested_list",
    "do_if_fn_defined",
    "iterate_with_json_cursor",
    "req_auth_api_key",
    "req_init",
    "req_modify",
    "req_pagination_policy",
    "req_perform_opinionated",
    "req_pkg_user_agent",
    "req_prepare",
    "req_tidy_policy",
    "resp_body_auto",
    "resp_body_csv",
    "resp_body_separate",
    "resp_body_tsv",
    "resp_parse",
    "resp_tidy",
    "resp_tidy_json",
    "resp_tidy_unknown",
    "tidy_policy_body_auto",
    "tidy_policy_json",
    "tidy_policy_prepare",
    "tidy_policy_unknown",
    "url_normalize",
    "url_path_append"
  ],
  "_help": [
    {
      "page": "auth_api_key",
      "title": "Prepare API key authentication independent of a request",
      "concept": [
        "opinionated auth functions"
      ],
      "topics": [
        "auth_api_key"
      ]
    },
    {
      "page": "auth_prepare",
      "title": "Prepare authentication independent of a request",
      "concept": [
        "opinionated auth functions"
      ],
      "topics": [
        "auth_prepare"
      ]
    },
    {
      "page": "choose_pagination_fn",
      "title": "Extract a pagination policy from a request",
      "topics": [
        "choose_pagination_fn"
      ]
    },
    {
      "page": "compact_nested_list",
      "title": "Discard empty elements",
      "topics": [
        "compact_nested_list"
      ]
    },
    {
      "page": "do_if_fn_defined",
      "title": "Use a provided function",
      "topics": [
        "do_if_fn_defined"
      ]
    },
    {
      "page": "iterate_with_json_cursor",
      "title": "Iteration helper for json cursors",
      "topics": [
        "iterate_with_json_cursor"
      ]
    },
    {
      "page": "req_auth_api_key",
      "title": "Authenticate with an API key",
      "concept": [
        "opinionated auth functions",
        "opinionated request functions"
      ],
      "topics": [
        "req_auth_api_key"
      ]
    },
    {
      "page": "req_init",
      "title": "Setup a basic API request",
      "concept": [
        "opinionated request functions"
      ],
      "topics": [
        "req_init"
      ]
    },
    {
      "page": "req_modify",
      "title": "Modify an API request for a particular endpoint",
      "concept": [
        "opinionated request functions"
      ],
      "topics": [
        "req_modify"
      ]
    },
    {
      "page": "req_pagination_policy",
      "title": "Define a pagination policy for a request",
      "concept": [
        "opinionated request functions"
      ],
      "topics": [
        "req_pagination_policy"
      ]
    },
    {
      "page": "req_perform_opinionated",
      "title": "Perform a request with opinionated defaults",
      "topics": [
        "req_perform_opinionated"
      ]
    },
    {
      "page": "req_pkg_user_agent",
      "title": "Append package information to user agent",
      "topics": [
        "req_pkg_user_agent"
      ]
    },
    {
      "page": "req_prepare",
      "title": "Prepare a request for an API",
      "concept": [
        "opinionated request functions"
      ],
      "topics": [
        "req_prepare"
      ]
    },
    {
      "page": "req_tidy_policy",
      "title": "Define a tidy policy for a request",
      "concept": [
        "opinionated request functions",
        "opinionated response parsers"
      ],
      "topics": [
        "req_tidy_policy"
      ]
    },
    {
      "page": "resp_body_auto",
      "title": "Automatically choose a body parser",
      "topics": [
        "resp_body_auto"
      ]
    },
    {
      "page": "resp_body_csv",
      "title": "Extract tabular data from response body",
      "topics": [
        "resp_body_csv",
        "resp_body_tsv"
      ]
    },
    {
      "page": "resp_body_separate",
      "title": "Extract response body into list",
      "topics": [
        "resp_body_separate"
      ]
    },
    {
      "page": "resp_parse",
      "title": "Parse one or more responses",
      "topics": [
        "resp_parse",
        "resp_parse.default",
        "resp_parse.httr2_response"
      ]
    },
    {
      "page": "resp_tidy",
      "title": "Extract and clean an API response",
      "concept": [
        "opinionated response parsers"
      ],
      "topics": [
        "resp_tidy"
      ]
    },
    {
      "page": "resp_tidy_json",
      "title": "Extract and clean a JSON API response",
      "concept": [
        "opinionated response parsers"
      ],
      "topics": [
        "resp_tidy_json"
      ]
    },
    {
      "page": "resp_tidy_unknown",
      "title": "Error informatively for unknown response types",
      "concept": [
        "opinionated response parsers"
      ],
      "topics": [
        "resp_tidy_unknown"
      ]
    },
    {
      "page": "tidy_policy_body_auto",
      "title": "A policy to automatically parse a response body",
      "concept": [
        "opinionated response parsers"
      ],
      "topics": [
        "tidy_policy_body_auto"
      ]
    },
    {
      "page": "tidy_policy_json",
      "title": "A policy to parse a response body as JSON",
      "concept": [
        "opinionated response parsers"
      ],
      "topics": [
        "tidy_policy_json"
      ]
    },
    {
      "page": "tidy_policy_prepare",
      "title": "Prepare tidying independent of a request",
      "concept": [
        "opinionated response parsers"
      ],
      "topics": [
        "tidy_policy_prepare"
      ]
    },
    {
      "page": "tidy_policy_unknown",
      "title": "A policy to error for unknown response bodies",
      "concept": [
        "opinionated response parsers"
      ],
      "topics": [
        "tidy_policy_unknown"
      ]
    },
    {
      "page": "url_normalize",
      "title": "Normalize a URL",
      "topics": [
        "url_normalize"
      ]
    },
    {
      "page": "url_path_append",
      "title": "Add path elements to a URL",
      "topics": [
        "url_path_append"
      ]
    }
  ],
  "_pkglogo": "https://github.com/jonthegeek/nectar/raw/HEAD/man/figures/logo.svg",
  "_readme": "https://github.com/jonthegeek/nectar/raw/HEAD/README.md",
  "_rundeps": [
    "askpass",
    "cli",
    "curl",
    "fs",
    "glue",
    "httr2",
    "jsonlite",
    "lifecycle",
    "magrittr",
    "openssl",
    "purrr",
    "R6",
    "rappdirs",
    "rlang",
    "stbl",
    "stringi",
    "stringr",
    "sys",
    "vctrs",
    "withr"
  ],
  "_vignettes": [
    {
      "source": "nectar.Rmd",
      "filename": "nectar.html",
      "title": "nectar",
      "engine": "knitr::rmarkdown",
      "headings": [
        "Preparing a request with req_prepare()",
        "Authentication with auth_api_key()",
        "Response tidying with resp_tidy_json()",
        "Pagination with iterate_with_json_cursor()",
        "Performing the request with req_perform_opinionated()",
        "Parsing the response with resp_parse()",
        "Putting it all together",
        "Building an API package with nectar"
      ],
      "created": "2026-04-08 16:06:33",
      "modified": "2026-05-11 20:14:57",
      "commits": 4
    }
  ],
  "_score": 5.857332496431269,
  "_indexed": true,
  "_nocasepkg": "nectar",
  "_universes": [
    "jonthegeek",
    "api2r"
  ],
  "_binaries": [
    {
      "r": "4.7.0",
      "os": "linux",
      "version": "0.0.0.9007",
      "date": "2026-05-29T17:09:47.000Z",
      "distro": "noble",
      "commit": "9c6c19dd303a71d024d1dd85d3a79ba6cdcfb11d",
      "fileid": "84ec0f4191866fb6a3ba6d22ad55a6909bb9eef07fb4957dfddcf3c9e3991a55",
      "status": "success",
      "check": "OK",
      "buildurl": "https://github.com/r-universe/jonthegeek/actions/runs/26650892639"
    },
    {
      "r": "4.6.0",
      "os": "linux",
      "version": "0.0.0.9007",
      "date": "2026-05-29T17:09:31.000Z",
      "distro": "noble",
      "commit": "9c6c19dd303a71d024d1dd85d3a79ba6cdcfb11d",
      "fileid": "46ce30574c0789fd57947eb44cb0f979664e795fdecfbcb33b3ed607c664ef9d",
      "status": "success",
      "check": "OK",
      "buildurl": "https://github.com/r-universe/jonthegeek/actions/runs/26650892639"
    },
    {
      "r": "4.5.3",
      "os": "mac",
      "version": "0.0.0.9007",
      "date": "2026-05-29T17:08:49.000Z",
      "commit": "9c6c19dd303a71d024d1dd85d3a79ba6cdcfb11d",
      "fileid": "55465c3c617a0493eeb6f9dac4f024349158ccde4a9d649de0d36b38a5219a28",
      "status": "success",
      "check": "OK",
      "buildurl": "https://github.com/r-universe/jonthegeek/actions/runs/26650892639"
    },
    {
      "r": "4.6.0",
      "os": "mac",
      "version": "0.0.0.9007",
      "date": "2026-05-29T17:08:50.000Z",
      "commit": "9c6c19dd303a71d024d1dd85d3a79ba6cdcfb11d",
      "fileid": "ded538e581abdb900909ec2d55c483208a7bc1389e2e99c76b5d11cb7fec44d3",
      "status": "success",
      "check": "OK",
      "buildurl": "https://github.com/r-universe/jonthegeek/actions/runs/26650892639"
    },
    {
      "r": "4.6.0",
      "os": "wasm",
      "version": "0.0.0.9007",
      "date": "2026-05-29T17:09:28.000Z",
      "commit": "9c6c19dd303a71d024d1dd85d3a79ba6cdcfb11d",
      "fileid": "96ab76b1206046057d9abbf04928441723dd55146042048501306e6e1761590d",
      "status": "success",
      "buildurl": "https://github.com/r-universe/jonthegeek/actions/runs/26650892639"
    },
    {
      "r": "4.7.0",
      "os": "win",
      "version": "0.0.0.9007",
      "date": "2026-05-29T17:08:45.000Z",
      "commit": "9c6c19dd303a71d024d1dd85d3a79ba6cdcfb11d",
      "fileid": "db75d42190e7e4f2b33baea5779ab1db9eb229e9354a15c75bde18409f27b464",
      "status": "success",
      "check": "OK",
      "buildurl": "https://github.com/r-universe/jonthegeek/actions/runs/26650892639"
    },
    {
      "r": "4.5.3",
      "os": "win",
      "version": "0.0.0.9007",
      "date": "2026-05-29T17:08:51.000Z",
      "commit": "9c6c19dd303a71d024d1dd85d3a79ba6cdcfb11d",
      "fileid": "0ac8b7777e22884ba381ee82826c2a9b563498c764e248ba4c5a591adf35e989",
      "status": "success",
      "check": "OK",
      "buildurl": "https://github.com/r-universe/jonthegeek/actions/runs/26650892639"
    },
    {
      "r": "4.6.0",
      "os": "win",
      "version": "0.0.0.9007",
      "date": "2026-05-29T17:10:08.000Z",
      "commit": "9c6c19dd303a71d024d1dd85d3a79ba6cdcfb11d",
      "fileid": "022203260b2f96d130281a148b612445aaff89426ad16c2c1e8c9f4f5f6b6991",
      "status": "success",
      "check": "OK",
      "buildurl": "https://github.com/r-universe/jonthegeek/actions/runs/26650892639"
    }
  ]
}