{"id":16554324,"url":"https://github.com/jusx/node-wufoo","last_synced_at":"2025-10-28T19:30:33.214Z","repository":{"id":8396928,"uuid":"9976114","full_name":"jusx/node-wufoo","owner":"jusx","description":"A Node.JS library for the Wufoo API.","archived":false,"fork":false,"pushed_at":"2018-02-15T05:09:12.000Z","size":48,"stargazers_count":13,"open_issues_count":1,"forks_count":8,"subscribers_count":3,"default_branch":"master","last_synced_at":"2025-02-01T17:41:25.601Z","etag":null,"topics":["convenience-methods","forms","javascript","node-wufoo","wufoo","wufoo-api","wufoo-form"],"latest_commit_sha":null,"homepage":"","language":"JavaScript","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/jusx.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}},"created_at":"2013-05-10T06:49:05.000Z","updated_at":"2023-12-19T17:36:25.000Z","dependencies_parsed_at":"2022-07-31T01:50:00.552Z","dependency_job_id":null,"html_url":"https://github.com/jusx/node-wufoo","commit_stats":null,"previous_names":[],"tags_count":7,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/jusx%2Fnode-wufoo","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/jusx%2Fnode-wufoo/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/jusx%2Fnode-wufoo/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/jusx%2Fnode-wufoo/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/jusx","download_url":"https://codeload.github.com/jusx/node-wufoo/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":238700955,"owners_count":19516031,"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":["convenience-methods","forms","javascript","node-wufoo","wufoo","wufoo-api","wufoo-form"],"created_at":"2024-10-11T19:51:13.331Z","updated_at":"2025-10-28T19:30:32.825Z","avatar_url":"https://github.com/jusx.png","language":"JavaScript","funding_links":[],"categories":[],"sub_categories":[],"readme":"![Build](https://circleci.com/gh/jusx/node-wufoo.svg?style=shield\u0026circle-token=3c6bf745453828aa4cc23daf7befe363287e0b97)\n[![npm version](https://img.shields.io/npm/v/wufoo.svg)](https://www.npmjs.com/package/wufoo)\n\n# Node-Wufoo\n\nNode-Wufoo is a [Wufoo API](http://www.wufoo.com/docs/api/v3/) wrapper for [node.js](http://nodejs.org/). It simplifies working with the Wufoo API and provides an abstraction layer.\n\n## Installation\n\n    $ npm install wufoo\n\n## Usage\n\nEach API returns it's own set of objects which is all documented on [Wufoo.com](http://www.wufoo.com/docs/api/v3/) for reference.\n\nThe required node version is `8.0.0` and above for all releases above `v1.2.x`.\n\n### Example\n\n```javascript\n   var Wufoo = require(\"wufoo\");\n   var wufoo = new Wufoo(\"fishbowl\", \"AOI6-LFKL-VM1Q-IEX9\");\n\n   wufoo.getForms(function(err, forms) {\n      // do something with your forms here.\n   });\n\n   // get a specific form given the id.\n   wufoo.getForm(\"idofForm\", function(err, form){\n      // do something with your form here.\n   });\n\n   wufoo.getFormEntries(\"idofForm\", function(err, entries) {\n      // do something with your entries here.\n   });\n\n   // pass in optional query parameters\n   var optionalQuery = {pretty: true}\n\n   wufoo.getForms(optionalQuery, function(err, forms) {\n      // do something with your forms here.\n   });\n\n   // get a specific form given the id and pass in optional query parameters\n   wufoo.getForm(\"idofForm\", optionalQuery, function(err, forms) {\n      // do something with your forms here.\n   });\n\n   wufoo.getFormEntries(\"idofForm\", optionalQuery, function(err, entries) {\n      // do something with your entries here.\n   });\n```   \n\n### Forms\n\nGet all the forms for an account. \u003ccode\u003egetForms\u003c/code\u003e returns an array of \u003ccode\u003eForm\u003c/code\u003e objects. You can also call \u003ccode\u003egetForm\u003c/code\u003e to get a specific \u003ccode\u003eForm\u003c/code\u003e.\n\n```javascript\n\n   wufoo.getForms(function(err, forms) {\n      console.log(forms[0].hash);\n      console.log(forms[0].name);\n      console.log(forms[0].description);\n      // do something here.\n   });\n\n   // get a specific form given the id.\n   wufoo.getForm(\"idofForm\", function(err, form){\n      // do something here.\n   });\n\n   // pass in optional query parameters\n   var optionalQuery = {pretty: true}\n\n   wufoo.getForms(optionalQuery, function(err, forms) {\n      console.log(forms[0].hash);\n      console.log(forms[0].name);\n      console.log(forms[0].description);\n      // do something here.\n   });\n\n   // get a specific form given the id and pass in optional query parameters\n   wufoo.getForm(\"idofForm\", optionalQuery, function(err, forms) {\n      // do something here.\n   });\n\n```   \n\nConvenience methods are provided to get entries, fields and entry count for a \u003ccode\u003eForm\u003c/code\u003e:\n\n```javascript\n\n   form.getEntries(function(err, entries) {\n     // do something here.\n   });\n\n   form.getEntriesCount(function(err, count) {\n      // do something here.\n      console.log(\"There are \" + count + \" number of entries\");\n    });\n\n    form.getFields(function(err, fields) {\n        // do something here.\n    });\n\n    // pass in optional query parameters\n    var optionalQuery = {pretty: true}\n\n    form.getEntries(optionalQuery, function(err, entries) {\n      // do something here.\n    });\n\n    form.getEntriesCount(optionalQuery, function(err, count) {\n       // do something here.\n       console.log(\"There are \" + count + \" number of entries\");\n     });\n\n     form.getFields(optionalQuery, function(err, fields) {\n         // do something here.\n     });\n```   \n\n\n### Entries\n\nGet all the entries for a form or report. \u003ccode\u003egetFormEntries\u003c/code\u003e and \u003ccode\u003egetReportEntries\u003c/code\u003e returns an array of \u003ccode\u003eEntry\u003c/code\u003e objects.\n\n```javascript\n\n   wufoo.getFormEntries(\"formid\", function(err, entries) {\n      // do something here.\n   });\n\n   wufoo.getReportEntries(\"reportid\", function(err, entries) {\n      // do something here.\n   });\n\n   // pass in optional query parameters\n   var optionalQuery = {pretty: true}\n\n   wufoo.getFormEntries(\"formid\", optionalQuery, function(err, entries) {\n      // do something here.\n   });\n\n   wufoo.getReportEntries(\"reportid\", optionalQuery, function(err, entries) {\n      // do something here.\n   });\n\n```   \n\n### Reports\n\nGet all the reports for an account. \u003ccode\u003egetReports\u003c/code\u003e returns an array of \u003ccode\u003eReport\u003c/code\u003e objects.\n\n```javascript\n\n   wufoo.getReports(function(err, reports) {\n      // do something here\n   });\n\n   // get a specific form given the id.\n   wufoo.getReport(\"idofReport\", function(err, report){\n      // do something here.\n   });\n\n   // pass in optional query parameters\n   var optionalQuery = {pretty: true}\n\n   wufoo.getReports(optionalQuery, function(err, reports) {\n      // do something here\n   });\n\n   // get a specific form given the id.\n   wufoo.getReport(\"idofReport\", optionalQuery, function(err, report){\n      // do something here.\n   });\n\n```   \nConvenience methods are provided to get entries, fields and entry count for a Report:\n\n```javascript\n\n   report.getEntries(function(err, entries) {\n     // do something here.\n   });\n\n   report.getEntriesCount(function(err, count) {\n      // do something here.\n      console.log(\"There are \" + count + \" number of entries\");\n    });\n\n    report.getFields(function(err, fields) {\n      // do something here.\n    });\n\n    // pass in optional query parameters\n    var optionalQuery = {pretty: true}\n\n   report.getEntries(optionalQuery, function(err, entries) {\n     // do something here.\n   });\n\n   report.getEntriesCount(optionalQuery, function(err, count) {\n     // do something here.\n     console.log(\"There are \" + count + \" number of entries\");\n    });\n\n    report.getFields(optionalQuery, function(err, fields) {\n      // do something here.\n    });   \n```   \n\n\n\n### Fields\nGet all the reports for a form. \u003ccode\u003egetFields\u003c/code\u003e returns an array of \u003ccode\u003eField\u003c/code\u003e objects.\n\n```javascript\n\n   wufoo.getFields(\"formid\", function(err, fields) {\n      // do something here.\n   });\n\n   // pass in optional query parameters\n   var optionalQuery = {pretty: true}\n\n   wufoo.getFields(\"formid\", optionalQuery, function(err, fields) {\n      // do something here.\n   });\n\n```\n\n### Widgets\nGet all the widgets for a report. \u003ccode\u003egetWidgets\u003c/code\u003e returns an array of \u003ccode\u003eWidget\u003c/code\u003e objects.\n\n```javascript\n\n   wufoo.getWidgets(\"reportid\", function(err, widgets) {\n      // do something here.\n   });\n\n   // pass in optional query parameters\n   var optionalQuery = {pretty: true}\n\n   wufoo.getWidgets(\"reportid\", optionalQuery, function(err, widgets) {\n      // do something here.\n   });\n\n```\n\n### Comments\nGet all the comments for a form. \u003ccode\u003egetComments\u003c/code\u003e returns an array of \u003ccode\u003eComment\u003c/code\u003e objects.\n\n```javascript\n\n   wufoo.getComments(\"formid\", function(err, comments) {\n      // do something here.\n   });\n\n   // pass in optional query parameters\n   var optionalQuery = {pretty: true}\n\n   wufoo.getComments(\"formid\", optionalQuery, function(err, comments) {\n      // do something here.\n   });\n\n```\n\nAlternatively if all you need is the amount of comments for a form you can call \u003ccode\u003egetCommentCount\u003c/code\u003e:\n```javascript\n\n   wufoo.getCommentCount(\"formid\", function(err, count) {\n      // do something here.\n   });\n\n   // pass in optional query parameters\n   var optionalQuery = {pretty: true}\n\n   wufoo.getCommentCount(\"formid\", optionalQuery, function(err, count) {\n      // do something here.\n   });\n\n```\n\n### WebHooks\nAdd a [WebHook](http://www.wufoo.com/docs/api/v3/webhooks/put/) for a form:\n\n```javascript\n\n   wufoo.webhook().add(\"formid\", \"http://localhost:3000\", function(err, hashid) {\n     // store the webhook hashid somewhere in case we want to delete them later.\n   })\n\n   // pass in optional options\n   var options = {url: \"http://abc.com/webhook\", handshakeKey: \"hand-shaking\", metadata: true}\n   wufoo.webhook().add(\"formid\", options, function(err, hashid) {\n     // store the webhook hashid somewhere in case we want to delete them later.\n     db.put(\"WebHooks\", {formid:form.hash, key:hashid});\n   })\n```\n\nDelete the WebHook. [More info](http://www.wufoo.com/docs/api/v3/webhooks/delete/):\n\n```javascript   \n   wufoo.webhook().delete(\"formid\", \"webhookHashId\", function(err, success) {\n     if (!success) {\n       // do something.\n     }\n\n   })\n\n```\n\nHelper methods are also provided on the \u003ccode\u003eForm\u003c/code\u003e object:\n\n\n   ```javascript   \n      form.addWebhook(\"http://localhost:3000\", function(err, hashid) {\n         // store the webhook hashid somewhere in case we want to delete them later.\n       })\n\n\n      form.deleteWebhook(\"webhookHashId\", function(err, success) {\n        if (!success) {\n          // do something.\n        }\n\n      })\n\n   ```\n### Promises\nEvery single API documented above have an alternate version that supports promises. For the preferred method of using promises or await/async instead of callbacks append `Async` to the end of the function name. For example, the following are all valid:\n\n- `from.addWebhookAsync`\n- `wufoo.getCommentCountAsync`\n- `wufoo.getWidgetsAsync`\n\nAnd so on. Calling `wufoo.getCommentCountAsync` will be as follows:\n\n```js\n\n   wufoo.getCommentCount(\"formid\")\n      .then ((count) =\u003e {\n         console.log(count);\n      })\n      .catch((err) =\u003e {\n         console.log(err);\n      });\n\n```\n\n## Contributions\n\nPlease fork it. Add new features or fix bugs and do a pull request. Tests should be included:\n\n- Fork it\n- Create your feature branch (\u003ccode\u003egit checkout -b feature-new-stuff\u003c/code\u003e).\n- Commit your changes (\u003ccode\u003egit commit -am 'Added some feature'\u003c/code\u003e).\n- Push to the branch (\u003ccode\u003egit push origin feature-new-stuff\u003c/code\u003e).\n- Create new Pull Request.\n\n### Testing\nBe sure to have [mocha](http://mochajs.org/) installed.  Run the entire test suite from the root directory of the project by running the command:\n\n```\n   $ mocha\n```\n   or\n\n```\n   $ npm test\n```\n\n## Future Versions\nNode-Wufoo implements all of the Wufoo RESTful API except the following:\n\n- Updating Entries ([POST API](http://www.wufoo.com/docs/api/v3/entries/post/)).\n- [Login](http://www.wufoo.com/docs/api/v3/login/).\n\nImplementation and support of the above will be included in future versions. Contributions welcome!\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fjusx%2Fnode-wufoo","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fjusx%2Fnode-wufoo","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fjusx%2Fnode-wufoo/lists"}