n8n
n8n needs no BytePhase-specific node. The HTTP Request node with a Header Auth credential calls the intake endpoints directly.
1. Create an n8n key in BytePhase
Section titled “1. Create an n8n key in BytePhase”Settings → Integrations → add an integration → provider type n8n → copy the key.
An n8n-typed key can create leads and self check-ins. If a workflow genuinely needs to read recent records (the /api/zapier/triggers/* endpoints), create a separate integration with the Zapier type for that workflow only — and keep in mind that key can then read customers, leads, repairs and payments. See Authentication.
2. Create the credential in n8n
Section titled “2. Create the credential in n8n”Credentials → New → Header Auth:
| Field | Value |
|---|---|
| Name | Authorization |
| Value | Bearer bp_your_api_key |
Give it a name like “BytePhase — Harbor Repair Co.”.
3. Test with a ping
Section titled “3. Test with a ping”Add an HTTP Request node:
| Setting | Value |
|---|---|
| Method | GET |
| URL | https://harbor-repair.api.bytephase.com/api/integrations/ping |
| Authentication | Generic Credential Type → Header Auth → the credential above |
| Send Headers | Accept: application/json |
Execute it. "status": "connected" means you are set. A 401 means the key or header is wrong; a 412 means the workspace subdomain is wrong. See Environments.
4. Create a lead
Section titled “4. Create a lead”Change the node to:
| Setting | Value |
|---|---|
| Method | POST |
| URL | https://harbor-repair.api.bytephase.com/api/integrations/leads |
| Send Headers | Accept: application/json, Idempotency-Key: {{ $json.submissionId }} (something unique per submission) |
| Send Body | JSON |
Body (using expressions from a previous node, here a Webhook node receiving a website form):
{ "name": "{{ $json.body.name }}", "mobile_number": "{{ $json.body.phone }}", "mobile_country_code": "+1", "email": "{{ $json.body.email }}", "device_type": "{{ $json.body.device }}", "comment": "{{ $json.body.message }}", "source": "Website"}name is required, and at least one of mobile_number or email. Any field BytePhase does not recognise becomes a custom field on the lead. Full field list in Custom Integrations.
Example workflow: website form → BytePhase lead
Section titled “Example workflow: website form → BytePhase lead”Import this JSON into n8n (Workflows → Import from file / paste), then select your Header Auth credential on the HTTP Request node and set your workspace in the URL.
{ "name": "Website form → BytePhase lead", "nodes": [ { "parameters": { "httpMethod": "POST", "path": "bytephase-lead", "responseMode": "onReceived", "options": {} }, "id": "a1b2c3d4-0000-4000-8000-000000000001", "name": "Website form (Webhook)", "type": "n8n-nodes-base.webhook", "typeVersion": 2, "position": [0, 0], "webhookId": "bytephase-lead" }, { "parameters": { "method": "POST", "url": "https://YOUR-WORKSPACE.api.bytephase.com/api/integrations/leads", "authentication": "genericCredentialType", "genericAuthType": "httpHeaderAuth", "sendHeaders": true, "headerParameters": { "parameters": [ { "name": "Accept", "value": "application/json" }, { "name": "Idempotency-Key", "value": "={{ $json.body.submission_id || $execution.id }}" } ] }, "sendBody": true, "specifyBody": "json", "jsonBody": "={{ JSON.stringify({\n name: $json.body.name,\n mobile_number: $json.body.phone,\n mobile_country_code: '+1',\n email: $json.body.email,\n device_type: $json.body.device,\n comment: $json.body.message,\n source: 'Website'\n}) }}", "options": {} }, "id": "a1b2c3d4-0000-4000-8000-000000000002", "name": "Create BytePhase lead", "type": "n8n-nodes-base.httpRequest", "typeVersion": 4.2, "position": [280, 0] } ], "connections": { "Website form (Webhook)": { "main": [[{ "node": "Create BytePhase lead", "type": "main", "index": 0 }]] } }, "settings": { "executionOrder": "v1" }}What it does: your website posts the form to the n8n webhook URL; n8n creates the lead. The Idempotency-Key uses the form’s own submission id when your site sends one, and falls back to the n8n execution id, so a retried execution does not create a second lead.
Handling the response
Section titled “Handling the response”The HTTP Request node outputs the response body. status is completed (created), duplicate (already existed), or received (parked until the form is mapped in BytePhase). All three are success from the workflow’s point of view; see Submissions & Troubleshooting.
To branch on errors, enable Settings → On Error → Continue (or “Continue on fail” in older versions) on the node and inspect error.code from the response. Only retry 429, 423 and 5xx, and always with the same Idempotency-Key. See Errors.
Rate limits and shared IPs
Section titled “Rate limits and shared IPs”The 60-per-minute limit is keyed on your API key, not on n8n Cloud’s IP addresses, so other n8n customers’ traffic cannot throttle you. A scheduled workflow should not call the API more than once a minute per key; a loop over many items should add a short Wait between iterations. See Rate Limits.
Self-hosted n8n behind a private network
Section titled “Self-hosted n8n behind a private network”Everything on this page is outbound from n8n to BytePhase, so it works from a self-hosted n8n on a private network as long as it can reach the internet. BytePhase does not currently call n8n (there are no outbound webhooks yet), so there is nothing to expose. To react to new records from n8n today, poll the /api/zapier/triggers/* endpoints on a schedule with a Zapier-typed key; see Pagination & Data.

