Node-basecamp is a project mainly written in JavaScript, it's free.
Basecamp API wrapper for NodeJS
A wrapper for the Basecamp API (currently only supports read methods).
var http = require('http'),
Basecamp = require('./lib/basecamp');
var bc = new Basecamp(
'https://YOUR_COMPANY.basecamphq.com',
'API_KEY_HERE'
);
http.createServer(function (req, res) {
bc.people.me(function (err, me) {
if (err)
res.end('Could not load your profile!');
res.end('You are logged in as ' + me.firstName + ' ' + me.lastName);
});
}).listen(8080);
console.log('Server running at http://localhost:8080/');
projects.all(callback)
projects.count(callback)
projects.load(id, callback)
people.me(callback)
people.all(callback)
people.fromProject(projectId, callback)
people.fromCompany(companyId, callback)
people.load(id, callback)
companies.all(callback)
companies.fromProject(projectId, callback)
companies.load(id, callback)
categories.fromProject(projectId, type, callback)
categories.load(id, callback)
messages.fromProject(projectId, callback)
messages.fromProjectArchive(projectId, callback)
messages.load(id, callback)
messages.fromCategory(projectId, categoryId, callback)
messages.fromCategoryArchive(projectId, categoryId, callback)
comments.fromResource(resourceType, resourceId, callback)
comments.load(id, callback)
todoLists.all(callback)
todoLists.fromResponsible(responsibleId, callback)
todoLists.fromProject(projectId, callback)
todoLists.fromProjectPending(projectId, callback)
todoLists.fromProjectFinished(projectId, callback)
todoLists.load(id, callback)
todoItems.fromList(listId, callback)
todoItems.load(id, callback)
milestones.fromProject(projectId, callback)
time.fromProject(projectId, callback)
time.fromTodo(todoId, callback)
time.report(options, callback)
var options = { "from":"YYYYMMDD", "to":"YYYYMMDD" };
files.fromProject(projectId, offset, callback)