How to Run a New-Hire Equipment Approval Workflow with Monday

Capture a new-hire equipment request over a webhook, pause for the hiring manager to approve it, then create a fulfillment item on a Monday.com board and ping IT in Slack so the laptop and accessories are ready on day one.

What This Integration Does

When a new person joins, someone has to decide what equipment they get, get a manager to sign off on the cost, and then hand the request to IT to actually fulfill. Doing this over email and spreadsheets means requests get lost, approvals stall, and IT finds out too late. This Spojit workflow turns the whole thing into one auditable run: your HR or onboarding system posts the request, the right manager approves or rejects it inside Spojit, and only approved requests land on the IT fulfillment board with a Slack heads-up.

The workflow is triggered by an inbound HTTP POST to a Webhook trigger, so any system that can fire a webhook (your HRIS, an internal form, or a test tool) can start it. The parsed JSON body flows into a Human approval node, which pauses the run until the named approvers respond. If the request is approved, the run continues: a Connector node creates a Monday.com item with the equipment details, another posts an update on that item, and a Slack message notifies the IT channel. If the request is rejected or the approval times out, the run halts before anything is created, so no fulfillment item is ever made. Each inbound request produces one independent run, and re-running the same request simply creates another approval and (if approved) another item, so dedupe at the source if your system can send retries.

Prerequisites

  • A Monday.com connection added in Spojit (Connections -> Add connection), with access to the board you want to fulfill on.
  • A Slack connection added in Spojit, with permission to post to the IT channel.
  • The Monday.com board ID for your equipment fulfillment board, plus the column IDs for any fields you want to populate (for example a status or text column). Use the list-boards and get-board tools, or open the board in Monday.com, to find these.
  • The Slack channel ID for the IT notification channel (open the channel, then copy the ID, or use the list-channels tool).
  • At least one Spojit user, role, or team to act as the approver. Approvers respond in the Approvals inbox at /approvals.
  • A way to send the inbound request (your HRIS webhook, an internal form, or a test client that can POST JSON).

Step 1: Add a Webhook trigger to receive the request

Create a new workflow in the Workflow Designer and set the trigger to Webhook. Spojit gives the workflow a unique URL that you point your HR system or onboarding form at. Inbound requests are verified with an HMAC signature through a signing connection; pick the Spojit scheme if you control both ends, or Custom if you are matching an existing signing format. The trigger output is the parsed JSON body, available downstream as {{ input }}. Design your sender to POST a payload like this:

{
  "employeeName": "Jordan Lee",
  "role": "Account Executive",
  "startDate": "2026-07-01",
  "manager": "manager@yourcompany.com",
  "equipment": "MacBook Pro 14, dock, monitor, headset",
  "estimatedCost": 3200
}

The webhook trigger returns 202 with an executionId to the caller immediately, then the run continues asynchronously, which is exactly what you want while the approval is pending.

Step 2: Pause for manager approval with a Human node

Add a Human node right after the trigger. This is the gate: nothing is created in Monday.com or Slack until it resolves. Configure the key fields:

  • Label: a short title such as New-hire equipment approval.
  • Message: what the approver sees. Use variables, for example Approve {{ input.equipment }} for {{ input.employeeName }} ({{ input.role }}), estimated {{ input.estimatedCost }} USD, starting {{ input.startDate }}?
  • Approval slots: the only required field. Add a slot and place the approver into it (a User, Role, or Team atom). Approval completes only when every slot is satisfied, so a single slot with the manager is the simplest setup.
  • Timeout (minutes): optional. Leave blank for no deadline, or set a value so a request that sits too long is treated as a reject.
  • Notification title/body and Urgency: optional; these support {{ variables }} and help the approver triage in the Approvals inbox.

On approval, the node outputs { approved: true, approvalId, outcome: "APPROVED" } and the run continues. On reject, timeout, or cancel the run halts here. There is no "on reject do X" branch, so put only the post-approval steps after this node.

Step 3: Create the fulfillment item in Monday.com

Add a Connector node in Direct mode and choose the Monday.com connection. Pick the create-item tool. Direct mode is the right choice here because this is a single, predictable call with no AI cost. Map the inputs:

  • boardId: your equipment fulfillment board ID.
  • name: the item title, for example {{ input.employeeName }} - {{ input.role }} equipment.
  • groupId (optional): the group on the board to place the item in, such as a "New requests" group.
  • columnValues (optional): a structured object keyed by column ID. For example, set a status column and a text column:
{
  "status": { "label": "Pending fulfillment" },
  "text_role": "{{ input.role }}",
  "date_start": { "date": "{{ input.startDate }}" }
}

Replace status, text_role, and date_start with the real column IDs from your board (run get-board to list them). The tool returns the new item, so capture the output to a variable such as created_item and reference its ID downstream as {{ created_item.create_item.id }}.

Step 4: Post the equipment details as an update on the item

Add another Connector node in Direct mode on the Monday.com connection, this time using the create-update tool to attach the full request as a comment on the item you just created. This keeps the cost, manager sign-off, and equipment list together on the card so IT has the full context. Map the inputs:

  • itemId: {{ created_item.create_item.id }}.
  • body: the update text, for example:
Approved equipment request for {{ input.employeeName }} ({{ input.role }})
Start date: {{ input.startDate }}
Equipment: {{ input.equipment }}
Estimated cost: {{ input.estimatedCost }} USD
Approval ID: {{ approval.approvalId }}

Here approval is the output variable you set on the Human node in Step 2, so the update records which approval cleared the request.

Step 5: Notify IT in Slack

Add a Connector node in Direct mode on the Slack connection and choose the send-message tool. Map the inputs:

  • channel: the IT channel ID.
  • text: a concise, templated message, for example:
New equipment request approved for {{ input.employeeName }} ({{ input.role }}), starting {{ input.startDate }}. Equipment: {{ input.equipment }}. Tracking on Monday item {{ created_item.create_item.id }}.

If you would rather target a person by their email address (for example the IT lead), add a Slack lookup-user-by-email Connector node before this one and send to the resulting user ID. Keep the text field populated even if you later add Block Kit formatting, since Slack uses it as the fallback.

Step 6: Save, then test before going live

Save the workflow. The Webhook trigger is live as soon as the workflow is enabled, so confirm your sender is configured against the correct URL and signing connection. You can also ask Miraxa, the intelligent layer across your automation, to wire this up for you from a sentence such as: "Build a workflow with a webhook trigger, a Human approval node, then a Monday.com create-item, a create-update, and a Slack send-message." Miraxa knows the page and the workflow you are editing and will add and connect the nodes on the canvas, asking first if anything is ambiguous, after which you fine-tune the fields in the properties panel.

Tips

  • Use Direct mode for all three connector calls here. They are deterministic single-tool actions, so Direct mode keeps the run predictable and avoids AI credit cost.
  • Put the estimated cost in the approval Message so the manager can decide without leaving Spojit. Set an Urgency of High for senior or rush hires so they surface at the top of the Approvals inbox.
  • Find Monday.com column IDs once with get-board and reuse them; the human-readable column titles are not what the columnValues object expects.
  • If you want a second sign-off (for example HR and the budget owner), add a second slot to the same Human node. Both slots must be satisfied before the run continues.

Common Pitfalls

  • A rejected or timed-out approval halts the run, and there is no reject branch. Do not place "send the requester a rejection email" after the Human node expecting it to fire; it will not run on reject.
  • Monday.com create-item takes columnValues keyed by column ID with values shaped per column type (status, date, text). Passing column titles or a flat string will not populate the cells.
  • If your sender retries on the 202 response or a timeout, you will get duplicate approvals and duplicate items. Send an event-id header and enable webhook dedup, or deduplicate at the source.
  • Slack send-message needs the channel ID, not the channel name. Posting to a private channel also requires that your Slack connection has been invited to it.

Testing

Before pointing your HRIS at the workflow, test on a small scope. Send one sample POST to the webhook URL with a fake employee and a small estimated cost, then open the Approvals inbox at /approvals and approve it. Confirm a new item appears on your Monday.com board with the expected name and column values, that the update comment carries the full request, and that the IT channel receives the Slack message. Then run the same payload again but reject the approval, and verify that no Monday.com item or Slack message is created. Inspect both runs in the execution history to see each node's input and output before you enable the workflow for real traffic.

Learn More

Did this answer your question? Thanks for the feedback There was a problem submitting your feedback. Please try again later.