← Basecamp + Zoho Expense integrations

Create Expense with Zoho Expense API on New Webhook Event (Instant) from Basecamp API

Pipedream makes it easy to connect APIs for Zoho Expense, Basecamp and 3,000+ other apps remarkably fast.

Trigger workflow on
New Webhook Event (Instant) from the Basecamp API
Next, do this
Create Expense with the Zoho Expense API
No credit card required
Intro to Pipedream
Watch us build a workflow
Watch us build a workflow
8 min
Watch now ➜

Trusted by 1,000,000+ developers from startups to Fortune 500 companies

Adyen logo
Appcues logo
Bandwidth logo
Checkr logo
ChartMogul logo
Dataminr logo
Gopuff logo
Gorgias logo
LinkedIn logo
Logitech logo
Replicated logo
Rudderstack logo
SAS logo
Scale AI logo
Webflow logo
Warner Bros. logo
Adyen logo
Appcues logo
Bandwidth logo
Checkr logo
ChartMogul logo
Dataminr logo
Gopuff logo
Gorgias logo
LinkedIn logo
Logitech logo
Replicated logo
Rudderstack logo
SAS logo
Scale AI logo
Webflow logo
Warner Bros. logo

Developers Pipedream

Getting Started

This integration creates a workflow with a Basecamp trigger and Zoho Expense action. When you configure and deploy the workflow, it will run on Pipedream's servers 24x7 for free.

  1. Select this integration
  2. Configure the New Webhook Event (Instant) trigger
    1. Connect your Basecamp account
    2. Select a Account ID
    3. Select a Project ID
    4. Select one or more Event Types
  3. Configure the Create Expense action
    1. Connect your Zoho Expense account
    2. Select a Organization ID
    3. Select a Currency ID
    4. Optional- Configure Is Reimbursable
    5. Configure How Many Items
  4. Deploy the workflow
  5. Send a test event to validate your setup
  6. Turn on the trigger

Details

This integration uses pre-built, source-available components from Pipedream's GitHub repo. These components are developed by Pipedream and the community, and verified and maintained by Pipedream.

To contribute an update to an existing component or create a new component, create a PR on GitHub. If you're new to Pipedream component development, you can start with quickstarts for trigger span and action development, and then review the component API reference.

Trigger

Description:Emit events of one or more selected types. [See the documentation](https://github.com/basecamp/bc3-api/blob/master/sections/webhooks.md#webhooks)
Version:0.0.8
Key:basecamp-new-event-by-webhook-type

Basecamp Overview

The Basecamp API enables the automation of project management tasks, facilitating seamless interaction with Basecamp's project management tools. Through Pipedream, you can leverage the API to create custom workflows that trigger actions within Basecamp, sync data across various platforms, and enhance team collaboration with automated notifications and task management.

Trigger Code

import constants from "../common/constants.mjs";
import common from "../common/webhook.mjs";

export default {
  ...common,
  key: "basecamp-new-event-by-webhook-type",
  name: "New Webhook Event (Instant)",
  description: "Emit events of one or more selected types. [See the documentation](https://github.com/basecamp/bc3-api/blob/master/sections/webhooks.md#webhooks)",
  version: "0.0.8",
  dedupe: "unique",
  type: "source",
  props: {
    ...common.props,
    webhookTypes: {
      type: "string[]",
      label: "Event Types",
      description: "Select the types of events to be emitted. [See the documentation](https://github.com/basecamp/bc3-api/blob/master/sections/webhooks.md#webhooks) for more information.",
      options: constants.WEBHOOK_TYPE_OPTS,
    },
  },
  methods: {
    ...common.methods,
    getWebhookTypes() {
      return this.webhookTypes;
    },
    filterEvent(event) {
      return event;
    },
  },
};

Trigger Configuration

This component may be configured based on the props defined in the component code. Pipedream automatically prompts for input values in the UI and CLI.
LabelPropTypeDescription
BasecampappappThis component uses the Basecamp app.
Account IDaccountIdstringSelect a value from the drop down menu.
Project IDprojectIdstringSelect a value from the drop down menu.
N/Adb$.service.dbThis component uses $.service.db to maintain state between executions.
N/Ahttp$.interface.httpThis component uses $.interface.http to generate a unique URL when the component is first instantiated. Each request to the URL will trigger the run() method of the component.
Event TypeswebhookTypesstring[]Select a value from the drop down menu:CommentClient::Approval::ResponseClient::ForwardClient::ReplyCloudFileDocumentGoogleDocumentInbox::ForwardMessageQuestionQuestion::AnswerSchedule::EntryTodoTodolistUploadVault

Trigger Authentication

Basecamp uses OAuth authentication. When you connect your Basecamp account, Pipedream will open a popup window where you can sign into Basecamp and grant Pipedream permission to connect to your account. Pipedream securely stores and automatically refreshes the OAuth tokens so you can easily authenticate any Basecamp API.

Pipedream requests the following authorization scopes when you connect your account:

About Basecamp

Project Management & Team Communication

Action

Description:Generate a new expense entry in the Zoho Expense system. [See the Documentation](https://www.zoho.com/expense/api/v1/expenses/#create-an-expense).
Version:0.0.2
Key:zoho_expense-create-expense

Zoho Expense Overview

The Zoho Expense API allows for streamlined management of expense reporting and tracking. With Pipedream, you can automate various tasks like submitting expenses, approving reports, or syncing expense data with other accounting tools. Pipedream's serverless platform enables you to create workflows that react to new expense submissions, scheduled report generation, and much more, without the hassle of managing infrastructure.

Action Code

import app from "../../zoho_expense.app.mjs";

export default {
  key: "zoho_expense-create-expense",
  name: "Create Expense",
  description: "Generate a new expense entry in the Zoho Expense system. [See the Documentation](https://www.zoho.com/expense/api/v1/expenses/#create-an-expense).",
  type: "action",
  version: "0.0.2",
  annotations: {
    destructiveHint: false,
    openWorldHint: true,
    readOnlyHint: false,
  },
  props: {
    app,
    organizationId: {
      propDefinition: [
        app,
        "organizationId",
      ],
    },
    currencyId: {
      propDefinition: [
        app,
        "currencyId",
        ({ organizationId }) => ({
          organizationId,
        }),
      ],
    },
    isReimbursable: {
      type: "boolean",
      label: "Is Reimbursable",
      description: "Whether the expense is reimbursable",
      optional: true,
    },
    numberOfItems: {
      type: "integer",
      label: "How Many Items",
      description: "The number of items to create",
      default: 1,
      reloadProps: true,
    },
  },
  methods: {
    createExpense(args = {}) {
      return this.app.post({
        path: "/expenses",
        ...args,
      });
    },
    getLineItems() {
      return Array.from({
        length: this.numberOfItems,
      }).reduce((reduction, _, index) => {
        const itemKey = `item${index + 1}`;
        const {
          [`${itemKey}_categoryId`]: categoryId,
          [`${itemKey}_amount`]: amount,
          [`${itemKey}_description`]: description,
        } = this;
        return [
          ...reduction,
          {
            category_id: categoryId,
            amount,
            description,
          },
        ];
      }, []);
    },
  },
  async additionalProps() {
    const {
      organizationId,
      numberOfItems,
    } = this;

    if (!organizationId || !numberOfItems) {
      return {};
    }

    const { expense_accounts: categories = [] } =
      await this.app.listExpenseCategories({
        headers: {
          organizationId,
        },
      });

    const categoryOptions = categories
      .filter(({
        status, is_enabled,
      }) => status === "active" && is_enabled)
      .map(({
        category_id: value, category_name: label,
      }) => ({
        label,
        value,
      }));

    return Array.from({
      length: this.numberOfItems,
    }).reduce((reduction, _, index) => {
      const itemIndex = index + 1;
      const itemKey = `item${itemIndex}`;
      return {
        ...reduction,
        [`${itemKey}_categoryId`]: {
          type: "string",
          label: `Item ${itemIndex} - Category ID`,
          description: `The ID of the category for item ${itemIndex}`,
          options: categoryOptions,
        },
        [`${itemKey}_amount`]: {
          type: "string",
          label: `Item ${itemIndex} - Amount`,
          description: `The amount of the item ${itemIndex}`,
        },
        [`${itemKey}_description`]: {
          type: "string",
          label: `Item ${itemIndex} - Description`,
          description: `The description of the item ${itemIndex}`,
          optional: true,
        },
      };
    }, {});
  },
  async run({ $: step }) {
    const {
      organizationId, currencyId, isReimbursable,
    } = this;

    const response = await this.createExpense({
      step,
      headers: {
        organizationId,
      },
      data: {
        currency_id: currencyId,
        is_reimbursable: isReimbursable,
        line_items: this.getLineItems(),
      },
    });

    step.export("$summary", `Successfully created expense with ID ${response.expenses[0]?.expense_id}`);

    return response;
  },
};

Action Configuration

This component may be configured based on the props defined in the component code. Pipedream automatically prompts for input values in the UI.

LabelPropTypeDescription
Zoho ExpenseappappThis component uses the Zoho Expense app.
Organization IDorganizationIdstringSelect a value from the drop down menu.
Currency IDcurrencyIdstringSelect a value from the drop down menu.
Is ReimbursableisReimbursableboolean

Whether the expense is reimbursable

How Many ItemsnumberOfItemsinteger

The number of items to create

Action Authentication

Zoho Expense uses OAuth authentication. When you connect your Zoho Expense account, Pipedream will open a popup window where you can sign into Zoho Expense and grant Pipedream permission to connect to your account. Pipedream securely stores and automatically refreshes the OAuth tokens so you can easily authenticate any Zoho Expense API.

Pipedream requests the following authorization scopes when you connect your account:

ZohoExpense.orgsettings.READZohoExpense.fullaccess.ALL

About Zoho Expense

Zoho Expense enables you to make online travel bookings and manage offline travel as well.

More Ways to Connect Zoho Expense + Basecamp

Create Expense with Zoho Expense API on New Comment Created (Instant) from Basecamp API
Basecamp + Zoho Expense
 
Try it
Create Expense with Zoho Expense API on New Message Created (Instant) from Basecamp API
Basecamp + Zoho Expense
 
Try it
Create Expense with Zoho Expense API on New To-Do Item Created (Instant) from Basecamp API
Basecamp + Zoho Expense
 
Try it
Create Expense with Zoho Expense API on New To-Do Item Status (Instant) from Basecamp API
Basecamp + Zoho Expense
 
Try it
Reject Travel Request with Zoho Expense API on New Comment Created (Instant) from Basecamp API
Basecamp + Zoho Expense
 
Try it
New Comment Created (Instant) from the Basecamp API

Emit new event when a comment is created. See the documentation

 
Try it
New Message Created (Instant) from the Basecamp API

Emit new event when a message is created. See the documentation

 
Try it
New To-Do Item Created (Instant) from the Basecamp API

Emit new event when a to-do item is created. See the documentation

 
Try it
New To-Do List Created (Instant) from the Basecamp API

Emit new event when a to-do list is created. See the documentation

 
Try it
New Webhook Event (Instant) from the Basecamp API

Emit events of one or more selected types. See the documentation

 
Try it
Create a Card with the Basecamp API

Creates a card in a selected column. See the documentation

 
Try it
Create a Comment with the Basecamp API

Creates a comment in a selected recording. See the documentation

 
Try it
Create Campfire Chatbot Message with the Basecamp API

Creates a message in a Campfire for a Basecamp Chatbot. See the documentation

 
Try it
Create Campfire Message with the Basecamp API

Creates a message in a selected Campfire. See the documentation

 
Try it
Create Message with the Basecamp API

Creates a message in a selected message board. See the documentation

 
Try it

Explore Other Apps

1
-
24
of
3,000+
apps by most popular

Node
Node
Anything you can do with Node.js, you can do in a Pipedream workflow. This includes using most of npm's 400,000+ packages.
Python
Python
Anything you can do in Python can be done in a Pipedream Workflow. This includes using any of the 350,000+ PyPi packages available in your Python powered workflows.
Notion
Notion
Notion is a new tool that blends your everyday work apps into one. It's the all-in-one workspace for you and your team.
OpenAI (ChatGPT)
OpenAI (ChatGPT)
OpenAI is an AI research and deployment company with the mission to ensure that artificial general intelligence benefits all of humanity. They are the makers of popular models like ChatGPT, DALL-E, and Whisper.
Anthropic (Claude)
Anthropic (Claude)
AI research and products that put safety at the frontier. Introducing Claude, a next-generation AI assistant for your tasks, no matter the scale.
Google Sheets
Google Sheets
Use Google Sheets to create and edit online spreadsheets. Get insights together with secure sharing in real-time and from any device.
Telegram
Telegram
Telegram, is a cloud-based, cross-platform, encrypted instant messaging (IM) service.
Google Drive
Google Drive
Google Drive is a file storage and synchronization service which allows you to create and share your work online, and access your documents from anywhere.
HTTP / Webhook
HTTP / Webhook
Get a unique URL where you can send HTTP or webhook requests
Google Calendar
Google Calendar
With Google Calendar, you can quickly schedule meetings and events and get reminders about upcoming activities, so you always know what’s next.
Schedule
Schedule
Trigger workflows on an interval or cron schedule.
Pipedream Utils
Pipedream Utils
Utility functions to use within your Pipedream workflows
Shopify
Shopify
Shopify is a complete commerce platform that lets anyone start, manage, and grow a business. You can use Shopify to build an online store, manage sales, market to customers, and accept payments in digital and physical locations.
Supabase
Supabase
Supabase is an open source Firebase alternative.
MySQL
MySQL
MySQL is an open-source relational database management system.
PostgreSQL
PostgreSQL
PostgreSQL is a free and open-source relational database management system emphasizing extensibility and SQL compliance.
AWS
AWS
Premium
Amazon Web Services (AWS) offers reliable, scalable, and inexpensive cloud computing services.
Twilio SendGrid
Twilio SendGrid
Premium
Send marketing and transactional email through the Twilio SendGrid platform with the Email API, proprietary mail transfer agent, and infrastructure for scalable delivery.
Amazon SES
Amazon SES
Amazon SES is a cloud-based email service provider that can integrate into any application for high volume email automation
Klaviyo
Klaviyo
Premium
Klaviyo unifies your data, channels, and AI agents in one platform—text, WhatsApp, email marketing, and more—driving growth with every interaction.
Zendesk
Zendesk
Premium
Zendesk is award-winning customer service software trusted by 200K+ customers. Make customers happy via text, mobile, phone, email, live chat, social media.
ServiceNow
ServiceNow
Premium
Beta
The smarter way to workflow
Slack
Slack
Slack is the AI-powered platform for work bringing all of your conversations, apps, and customers together in one place. Around the world, Slack is helping businesses of all sizes grow and send productivity through the roof.
Microsoft Teams
Microsoft Teams
Microsoft Teams has communities, events, chats, channels, meetings, storage, tasks, and calendars in one place.