{"id":20782438,"url":"https://github.com/writecrow/basecamp_api","last_synced_at":"2026-04-22T00:31:17.247Z","repository":{"id":39668662,"uuid":"301025874","full_name":"writecrow/basecamp_api","owner":"writecrow","description":"Drupal integration module for the Basecamp API version 3.0","archived":false,"fork":false,"pushed_at":"2025-06-04T22:58:56.000Z","size":18,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":1,"default_branch":"main","last_synced_at":"2025-12-27T09:56:05.804Z","etag":null,"topics":["basecamp3","drupal"],"latest_commit_sha":null,"homepage":"","language":"PHP","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"gpl-2.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/writecrow.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2020-10-04T02:39:58.000Z","updated_at":"2025-06-04T22:58:58.000Z","dependencies_parsed_at":"2024-08-23T15:38:38.636Z","dependency_job_id":null,"html_url":"https://github.com/writecrow/basecamp_api","commit_stats":null,"previous_names":[],"tags_count":7,"template":false,"template_full_name":null,"purl":"pkg:github/writecrow/basecamp_api","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/writecrow%2Fbasecamp_api","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/writecrow%2Fbasecamp_api/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/writecrow%2Fbasecamp_api/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/writecrow%2Fbasecamp_api/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/writecrow","download_url":"https://codeload.github.com/writecrow/basecamp_api/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/writecrow%2Fbasecamp_api/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":32115747,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-04-21T11:25:29.218Z","status":"ssl_error","status_checked_at":"2026-04-21T11:25:28.499Z","response_time":128,"last_error":"SSL_connect returned=1 errno=0 peeraddr=140.82.121.5:443 state=error: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"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":["basecamp3","drupal"],"created_at":"2024-11-17T14:11:06.967Z","updated_at":"2026-04-22T00:31:17.232Z","avatar_url":"https://github.com/writecrow.png","language":"PHP","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Basecamp API v3 Integration\nThis is a Drupal module that facilitates using the [https://github.com/basecamp/bc3-api](Basecamp API v3). \n\nAs an integration module, this facilitates transactions between the Basecamp endpoints, and requires simple coding to achieve this.\n\nAfter creating an authorized application \u0026 storing the initial access token \u0026 refresh token, this module will continue to renew the token\nvia a cron job that runs once per day.\n\nOnce complete, actions, such as creating a new todo, are as simple as:\n\n```php\n$data = [\n  'content' =\u003e $title,\n  'description' =\u003e $message,\n  'due_on' =\u003e date('Y-m-d', strtotime('+7 days')),\n  'notify' =\u003e TRUE,\n  'assignee_ids' =\u003e [1,2,3],\n];\n$project = $config-\u003eget('project');\n$list = $config-\u003eget('list');\n  \nBasecamp::createTodo($project, $list, $data);\n```\n\n\n## Proper setup \u0026 configuration of the refresh token\nAt this time, creating the initial access \u0026 refresh token is the purview of the developer (and it is pretty easy -- see https://github.com/basecamp/api/blob/master/sections/authentication.md).\n\n1. Sign in to Basecamp with the user ID that will provide the integration (in most cases, this should be identified as a non-human account so that people know that actions performed are being triggered by the Drupal integration).\n2. Go to https://launchpad.37signals.com/integrations and use the Authorization dialog to generate a 1-time code.\n3. Trade this code for a [long-lived access token \u0026 refresh token](https://github.com/basecamp/api/blob/master/sections/authentication.md#oauth-2-from-scratch):\n\n```bash\ncurl -X POST -d \"type=web_server\u0026client_id=your-client-id\u0026redirect_uri=your-redirect-uri\u0026client_secret=your-client-secret\u0026code=verification-code\" https://launchpad.37signals.com/authorization/token\n```\n\n4. Set these tokens in Drupal's non-config-exportable State API:\n\n```\nvendor/bin/drush state:set basecamp_api_refresh_token \u003cyour token\u003e\nvendor/bin/drush state:set basecamp_api_access_token \u003cyour token\u003e\n```\n\n5. **Important**: by default, this token will not refresh via cron so that development environments don't accidentally invalidate your access token in the production environment. For the token to be refreshed regularly in your production environment, add the following to your `settings.php` or equivalent:\n\n```\n$settings['basecamp_api_do_refresh'] = TRUE;\n```\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fwritecrow%2Fbasecamp_api","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fwritecrow%2Fbasecamp_api","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fwritecrow%2Fbasecamp_api/lists"}