splitwise
A JavaScript SDK for the Splitwise API.
Quickstart
Step 1: Register your Application
You will need a consumer key and a consumer secret from Splitwise to use this module. Get them here: https://secure.splitwise.com/oauth_clients.
Step 2: Install
This module works with Node.js, version 6
or newer. To install, run:
$ yarn add splitwise
Step 3: Get the current user
const Splitwise = require('splitwise')
const sw = Splitwise({
consumerKey: 'your key here',
consumerSecret: 'your secret here'
})
sw.getCurrentUser().then(console.log)
Non-trivial Example
In this example, we create a new expense from the current user to the first listed user in the given group, with the same description as the first given expense.
const Splitwise = require('splitwise')
const sw = Splitwise({
consumerKey: 'your key here',
consumerSecret: 'your secret here'
})
const groupID = '12345678'
Promise.all([
sw.getGroup({ groupID: groupID }),
sw.getExpenses({ groupID: groupID }),
sw.getCurrentUser()
]).then(([group, expenses, me]) => sw.createDebt({
from: group.members[0].id,
to: me.id,
groupID: groupID,
description: expenses[0].description,
amount: 100
})).then(
console.log
).catch(
console.error
)
API Reference
const sw = Splitwise({...})
This is the entry point to the package. All of the other methods are in the form of properties of sw
.
Click here to view the list of available methods.
Parameters
name | required? | notes |
---|
consumerKey | yes | Obtained by registering your application |
consumerSecret | yes | Obtained by registering your application |
accessToken | no | Re-use an existing access token |
logger | no | Will be called with info and error messages |
logLevel | no | Set to 'error' to only see error messages |
groupID | no | See below |
userID | no | " |
expenseID | no | " |
friendID | no | " |
The following parameters: groupID
, userID
, expenseID
, and friendID
can be passed in, to be used by default with all get
/update
/delete
type operations. For example:
const sw = Splitwise({
groupID: '12345678',
});
sw.getGroup({ id: '12345678' }).then(console.log);
sw.getGroup().then(console.log);
Logging
You can pass in a logging function to see useful debugging output. If the logger
that is passed in has info
or error
properties, then logger.info
and logger.error
will be called with info and error messages respectively. Otherwise, logger
will itself be called.
If you only want to see logs in the case of an error, you can pass in logLevel: 'error'
. e.g.:
const sw = Splitwise({
consumerKey: 'your key here',
consumerSecret: 'your secret here',
logger: console.log
})
const sw = Splitwise({
consumerKey: 'your key here',
consumerSecret: 'INCORRECT secret here',
logger: console.log,
logLevel: 'error'
})
sw.getAccessToken()
When you call Splitwise()
, an access token will automatically be fetched using your consumer credentials. If you wish to avoid this behaviour in order to save yourself a network round-trip, you may pass in your own accessToken
. You can obtain a re-usable access token as follows:
Splitwise({
consumerKey: 'your key here',
consumerSecret: 'your secret here'
}).getAccessToken().then(console.log)
const sw = Splitwise({
consumerKey: 'your key here',
consumerSecret: 'your secret here',
accessToken: 'abcd1234...'
})
sw.createDebt({...})
Splitwises' endpoint for creating debts is a little awkward to use. If you have the common scenario of needing to create a simple debt between two individuals, this method will do just that.
sw.createDebt({
from: '23456789',
to: '34567890',
amount: 100,
description: 'I am broke, please give me $100',
groupID: '12345678'
})
Methods
All of the below methods should be called with an object of parameters as the first argument, and (if you must), a callback as the second argument. They all will return Promises which will be resolved if and only if the request was successful, and rejected otherwise. e.g.:
sw.verbResource({
resourceID: '12345678',
otherParam: 'foo'
} ).then(
data => doSomethingWithTheData(data)
).catch(
error => handleTheError(error)
)
Without further ado, here is the list of all available methods. In order to see the specifics of which parameters should be passed in, and which data can be expected in response, please refer to the official API documentation, or click on the method in question.
NOTE: Splitwise makes some important notes about their API that booleans and nested parameters don't work. You won't need to worry about this. That is, instead of calling:
sw.createExpense({
users__0__user_id: '23456789',
users__1__users_id: '34567890',
payment: 0
})
You will instead do:
sw.createExpense({
users: [
{ user_id: '23456789' },
{ user_id: '34567890' }
],
payment: false
})
Notes
Here is a good alternative to this package: https://github.com/Dean177/splitwise-node
License
MIT