MS Forms + Power Automate Integration
Setup Guide
Each MS Form (Drawings, Nameplates, Test Reports) has its own PA flow that POSTs to this webhook when submitted.
How it Works
1
Submitter fills MS Form
Drawing / Nameplate / Test Report
2
PA creates record here
POST → paWebhook
3
Reviewer approves in PA
Approve / Reject / Revision
4
PA updates status here
PATCH → paWebhook
5
Visible in dashboard
Full history tracked
PA Trigger: "When a new response is submitted"
Create one PA flow per form (Drawings, Nameplates, Test Reports). Each flow uses:
- Trigger: When a new response is submitted
- Action: Get response details
- Action: HTTP POST to this webhook with the body below
- Action: Set variable — save
body('HTTP_Create')?['request_id'] - Action: Start and wait for an approval
- Action: HTTP PATCH — send approval outcome back (see tab 2)
HTTP POST — Create Record
Webhook URL:
https://api.base44.com/api/apps/{YOUR_APP_ID}/functions/paWebhookMethod: POST
Header: x-webhook-secret: <your WEBHOOK_SECRET value>
Header: Content-Type: application/json
Body — choose the payload for your form type:
{
"approval_type": "drawing",
"submitter_name": "@{outputs('Get_response_details')?['body/responder/displayName']}",
"ots_number": "@{outputs('Get_response_details')?['body/r<OTS Number>']}",
"order_numbers": "@{outputs('Get_response_details')?['body/r<Order Number(s)>']}",
"sales_order_sku": "@{outputs('Get_response_details')?['body/r<Sales Order SKU>']}",
"product_id": "@{outputs('Get_response_details')?['body/r<Product ID>']}",
"purchase_order_line_amount": "@{outputs('Get_response_details')?['body/r<Purchase Order Line Amount as it pertains to the sales SKU>']}",
"pi": "@{outputs('Get_response_details')?['body/r<PI:>']}",
"vendor_name": "@{outputs('Get_response_details')?['body/r<Vendor>']}",
"vendor_email": "@{outputs('Get_response_details')?['body/r<Vendor\'s Email>']}",
"sales_order_line_amount": "@{outputs('Get_response_details')?['body/r<Sales Order Line amount for SKU Amount>']}",
"customer_name": "@{outputs('Get_response_details')?['body/r<Customer Name>']}",
"kva_range": "@{outputs('Get_response_details')?['body/r<What KVA is the sales SKU that you are processing on this request?>']}",
"approval_type_code": "@{outputs('Get_response_details')?['body/r<What was the approval code from the lead purchaser?>']}",
"sharepoint_url": "@{outputs('Get_response_details')?['body/r<Upload Drawing for the Sales SKU you are processing on this request.>']}",
"submission_status": "@{outputs('Get_response_details')?['body/r<What is the status of this drawing\'s approval process?>']}",
"document_version": "@{outputs('Get_response_details')?['body/r<Please indicate what version this is for the Drawings.>']}",
"revision_instructions": "@{outputs('Get_response_details')?['body/r<If you chose \"Drawing, need revision\" please describe the instructions...>']}",
"notes": "@{outputs('Get_response_details')?['body/r<Notes (Optional)>']}",
"pa_flow_id": "@{workflow()?['run']?['name']}"
}Save the request_id from the response — you need it for the PATCH status update. Use a "Set variable" action: body('HTTP_Create')?['request_id']
