{"id":29586678,"url":"https://github.com/basecamp/backpack-api","last_synced_at":"2025-07-20T03:31:19.670Z","repository":{"id":65987436,"uuid":"4412101","full_name":"basecamp/backpack-api","owner":"basecamp","description":"Official API documentation for Backpack","archived":false,"fork":false,"pushed_at":"2014-02-06T19:07:50.000Z","size":151,"stargazers_count":22,"open_issues_count":0,"forks_count":7,"subscribers_count":21,"default_branch":"master","last_synced_at":"2025-07-18T05:34:42.838Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":"http://backpackit.com","language":"Ruby","has_issues":false,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/basecamp.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null}},"created_at":"2012-05-22T20:17:24.000Z","updated_at":"2025-06-01T03:43:31.000Z","dependencies_parsed_at":"2023-02-19T20:40:24.075Z","dependency_job_id":null,"html_url":"https://github.com/basecamp/backpack-api","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/basecamp/backpack-api","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/basecamp%2Fbackpack-api","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/basecamp%2Fbackpack-api/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/basecamp%2Fbackpack-api/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/basecamp%2Fbackpack-api/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/basecamp","download_url":"https://codeload.github.com/basecamp/backpack-api/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/basecamp%2Fbackpack-api/sbom","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":266063101,"owners_count":23870718,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":[],"created_at":"2025-07-20T03:31:07.308Z","updated_at":"2025-07-20T03:31:19.659Z","avatar_url":"https://github.com/basecamp.png","language":"Ruby","funding_links":[],"categories":[],"sub_categories":[],"readme":"Backpack API\n============\n\nThe Backpack API is implemented as vanilla XML over HTTP.\n\n\nAuthentication\n--------------\n\nAuthentication happens by accessing a url that belongs to the user, like http://david.backpackit.com, and by passing in the web service token as part of the XML request. The token is a 40-char SHA1 hash and can be found on your \"My Info\" page. The token represents your password for use with web services, so don't distribute it - that would be like giving your password away. Abuse the token and it can be revoked.\n\nIf you're making a public integration with Backpack for others to enjoy, you can also use OAuth 2. This allows users to authorize your application to use Basecamp Classic on their behalf without having to copy/paste API tokens or touch sensitive login info.\n\nRead the [Basecamp API Authentication Guide](https://github.com/basecamp/api/tree/master/sections/authentication.md) for more info on using OAuth.\n\nIdentify your app\n-----------------\n\nYou should include a `User-Agent` header with the name of your application and a link to it or your email address so we can get in touch in case you're doing something wrong (so we may warn you before you're blacklisted) or something awesome (so we may congratulate you). Here's a couple of examples:\n\n    User-Agent: Freshbooks (http://freshbooks.com/contact.php)\n    User-Agent: Fabian's Ingenious Integration (fabian@example.com)\n\nMaking requests\n---------------\n\nSend the `Content-Type: application/xml` header to identify XML requests. Here's an example with curl:\n\n    curl -H 'Content-Type: application/xml' -d '\u003crequest\u003e\n      \u003ctoken\u003e40bd001563085fc35165329ea1ff5c5ecbdbbeef\u003c/token\u003e\n    \u003c/request\u003e' \\\n    http://david.backpackit.com/ws/page/1\n\nThis request will return something like:\n\n``` xml\n\u003cresponse success='true'\u003e\n\u003cpage title='Ajax Summit' id='1133' email_address='ry87ib@backpackit.com'\u003e\n\n  \u003cnotes\u003e\n    \u003cnote title='Hotel' id='1020' created_at='2005-05-14 16:41:11'\u003e\n      Staying at the Savoy\n    \u003c/note\u003e\n  \u003c/notes\u003e\n\n  \u003clists\u003e\n    \u003clist id='2592' name='Itinerary'\u003e\n      \u003citems\u003e\n        \u003citem id='3308' completed='false'\u003eSee San Francisco\u003c/item\u003e\n        \u003citem id='3303' completed='true'\u003eMeet interesting people\u003c/item\u003e\n        \u003citem id='3307' completed='true'\u003ePresent Backpack\u003c/item\u003e\n\n      \u003c/items\u003e\n    \u003c/list\u003e\n  \u003c/lists\u003e\n\n  \u003ctags\u003e\n    \u003ctag name='Technology' id='4' /\u003e\n    \u003ctag name='Travel' id='5' /\u003e\n  \u003c/tags\u003e\n\u003c/page\u003e\n\u003c/response\u003e\n```\n\nComplete post example with Curl:\n\n    curl -H 'Content-Type: application/xml' -d '\u003crequest\u003e\n      \u003ctoken\u003e40bd001563085fc35165329ea1ff5c5ecbdbbeef\u003c/token\u003e\n\n      \u003citem\u003e\n        \u003ccontent\u003eHello World!\u003c/content\u003e\n      \u003c/item\u003e\n    \u003c/request\u003e' \\\n    http://david.backpackit.com/ws/page/1/items/create\n\n...will return something like:\n\n``` xml\n\u003cresponse success='true'\u003e\n  \u003citem completed='false' id='5'\u003eHello World!\u003c/item\u003e\n\u003c/response\u003e\n```\n\nIf something goes wrong in the request, you’ll get one of two errors. This one for an internal error, which may occur if you pass in bad variables:\n\n``` xml\n\u003cresponse success='false'\u003e\n  \u003cerror code='500'\u003eInternal error\u003c/item\u003e\n\u003c/response\u003e\n```\n\n...or this one, if you’re referencing a record that doesn’t exist:\n\n``` xml\n\u003cresponse success='false'\u003e\n  \u003cerror code='404'\u003eRecord not found\u003c/item\u003e\n\u003c/response\u003e\n```\n\nThe API returns HTTP status code `200 OK` when succesful unless otherwise noted.\n\nAPI Endpoints\n-------------\n\n* [Pages](https://github.com/basecamp/backpack-api/blob/master/sections/pages.md)\n* [Lists](https://github.com/basecamp/backpack-api/blob/master/sections/lists.md)\n* [List Items](https://github.com/basecamp/backpack-api/blob/master/sections/list_items.md)\n* [Notes](https://github.com/basecamp/backpack-api/blob/master/sections/notes.md)\n* [Separators](https://github.com/basecamp/backpack-api/blob/master/sections/separators.md)\n* [Tags](https://github.com/basecamp/backpack-api/blob/master/sections/tags.md)\n* [Reminders](https://github.com/basecamp/backpack-api/blob/master/sections/reminders.md)\n* [Emails](https://github.com/basecamp/backpack-api/blob/master/sections/emails.md)\n* [Status](https://github.com/basecamp/backpack-api/blob/master/sections/status.md)\n* [Journal](https://github.com/basecamp/backpack-api/blob/master/sections/journal.md)\n* [Users](https://github.com/basecamp/backpack-api/blob/master/sections/users.md)\n* [Bookmarks](https://github.com/basecamp/backpack-api/blob/master/sections/bookmarks.md)\n* [Calendars](https://github.com/basecamp/backpack-api/blob/master/sections/calendars.md)\n* [Calendar Events](https://github.com/basecamp/backpack-api/blob/master/sections/calendar_events.md)\n\n(Hint: Press `t` to enable the file finder and type out the endpoint you need!)\n\nNeed a sample of each XML blob will look like? Check out the [Data Reference](https://github.com/basecamp/backpack-api/blob/master/sections/data_reference.md).\n\n\nSSL Usage\n---------\n\nA non-SSL request made against an account that has SSL enabled (and vice versa) will receive a \"302 Found\" response. The Location header will contain the correct URI.\n\nIf SSL is enabled for your account, ensure that you're using https. If it's not, ensure you're using http.\n\n\nUsage Limits\n------------\n\nAPI requests rates are tracked by account subdomain and incoming IP address, so they're per-customer and per-client. If your application uses the API from a cluster of machines, that's fine; just be reasonable. Calendar API requests are limited to 10 requests per 5 seconds. All other requests are limited to 100 requests per 5 seconds. If you exceed the limit, you'll get a 503 response with a Retry-After header indicating how many seconds to wait until retry.\n\n\nWrappers and example code\n-------------------------\n\n* Ruby: [Example wrapper](https://github.com/basecamp/backpack-api/blob/master/ruby_wrapper.rb), [Example calendar wrapper](https://github.com/basecamp/backpack-api/blob/master/backpack_calendar.rb)\n* Perl: [Net::Backpack](http://search.cpan.org/dist/Net-Backpack/)\n* Emacs: [backpack.el](http://github.com/hober/37emacs/blob/master/backpack.el)\n\nWrote your own API wrapper? Feel free to open a pull request and add to this list!\n\n\nDocumentation Conventions\n-------------------------\n\nTo make things easier to understand, the following notation is used:\n\n* `#{text}`: Indicates text that should be replaced by your own data\n* `...`: Indicates content from the response has been elided for brevity in documentation. See the list of data responses at the end of the page for a full description of the format of that response type.\n\n\nHelp us make it better\n----------------------\n\nPlease tell us how we can make this API better. If you have a specific feature request or if you found a bug, please [open a support ticket](http://help.basecamp.com/tickets/new). Also, feel free to fork these docs and send a pull request with improvements!\n\nTo talk with us and other developers about the API, subscribe to the [basecamp-api mailing list](http://groups.google.com/group/basecamp-api).\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fbasecamp%2Fbackpack-api","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fbasecamp%2Fbackpack-api","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fbasecamp%2Fbackpack-api/lists"}