Skip to content

Instantly share code, notes, and snippets.

What would you like to do?
How to call Freshbooks Classic directly in Node.js using axios
const axios = require("axios");
const config = require("../security/auth.js");
const callFreshbooks = async (
apiUrl = config.freshbooks.url,
authToken = config.freshbooks.token
) => {
try {
const response = await axios({
url: apiUrl,
data: xml,
auth: {
username: authToken,
password: "X"
method: "POST"
} catch (error) {
throw error;
e.g. get the project budget
const getProjectBudget = async projectId => {
try {
const data = await callFreshbooks(`
<?xml version="1.0" encoding="utf-8"?>
<request method="project.get">
return parseFloat(data.match(/<hours>([\d|\.]+)/)[1]);
} catch (error) {
throw error;
Copy link

magician11 commented Jul 12, 2019

I was using the freshbooks npm module, but started having issues with its dependencies as it was last updated 3 years ago.

It turns out even though the payloads are in XML, it's not too bad calling their classic API directly once you know how. Of course, then you need to process an XML response. But instead of having to use an XML library, since I know what specific fragment of data I want, I can use regular expressions to extract it.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment