1. udrewIntake
Use this endpoint for inbound lead submissions from the uDrew website lead generator.
Request
- Method:
POST - Headers:
Content-Type: application/jsonx-api-key: <your-uDrew-api-key>
Authentication
The API key must be an active Neptune organisation API key for the uDrew integration.
You can generate this in Neptune under Admin → Integrations → uDrew.
Request body
All body fields are optional in the current implementation. However, for a useful lead record you should normally send at least one identifying field such as name, email, phone, address, or sessionId.
| Field | Type | Required | Notes |
|---|---|---|---|
address | string | No | Postal or site address for the lead |
firstName | string | No | Lead first name |
lastName | string | No | Lead last name |
email | string | No | Lead email address |
phone | string | No | Lead phone number |
message | string | No | Free-text enquiry message |
sessionId | string | No | If provided, Neptune uses this to find and update an existing uDrew lead instead of creating a new one |
latitude | `number \ | string` | No |
longitude | `number \ | string` | No |
featureId | string | No | Optional uDrew feature identifier |
featureID | string | No | Alternative accepted key for featureId |
featureName | string | No | Optional uDrew feature name |
featureType | string | No | Optional uDrew feature type |
imageData | string | No | Base64 image string, with or without a data:image/...;base64, prefix |
Example body
{
"address": "12 Example Street, Bristol",
"firstName": "Jamie",
"lastName": "Taylor",
"email": "jamie@example.com",
"phone": "07700111222",
"message": "Interested in a pool design",
"sessionId": "udrew-session-12345",
"latitude": 51.4545,
"longitude": -2.5879,
"featureId": "feature_456",
"featureName": "Rectangle Pool",
"featureType": "pool",
"imageData": "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAA..."
}
Example request
curl -X POST "https://us-central1-netpune-220210.cloudfunctions.net/udrewIntake" \
-H "Content-Type: application/json" \
-H "x-api-key: <your-uDrew-api-key>" \
-d '{
"address": "12 Example Street, Bristol",
"firstName": "Jamie",
"lastName": "Taylor",
"email": "jamie@example.com",
"phone": "07700111222",
"message": "Interested in a pool design",
"sessionId": "udrew-session-12345",
"latitude": 51.4545,
"longitude": -2.5879,
"featureId": "feature_456",
"featureName": "Rectangle Pool",
"featureType": "pool",
"imageData": "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAA..."
}'
What Neptune does
- Validates the
x-api-key. - Looks for an existing
udrewLeadsrecord with the samesessionIdif one is provided. - Updates that record if found, or creates a new one if not found.
- Saves feature metadata if
featureId,featureID,featureName, orfeatureTypeare provided. - Converts
latitudeandlongitudeinto a NeptunelatLngvalue when both coordinates are present and valid numbers. - Uploads
imageDatato storage if it is present. - Returns the Neptune lead record ID.
If image upload fails, Neptune still continues processing the lead submission and returns success if the lead itself was saved.
If the organisation has Neptune sequencing enabled, Neptune may also create a Lead record automatically from the uDrew submission.
Field handling notes
- Neptune accepts either
featureIdorfeatureID. If both are present,featureIdis used. - Neptune only saves location data when both
latitudeandlongitudeare provided and can be parsed into valid numbers. - When sequencing is enabled, the saved
latLngvalue is also copied onto the auto-created Lead record.
Success response
{
"ok": true,
"leadId": "abc123",
"isUpdate": false
}
| Field | Type | Notes |
|---|---|---|
ok | boolean | true when the request succeeded |
leadId | string | Neptune ID of the udrewLeads record |
isUpdate | boolean | true when an existing record was matched by sessionId and updated |
Error responses
| Status | Error | When it happens |
|---|---|---|
401 | invalid_api_key | API key is missing, revoked, invalid, or not for the uDrew integration |
405 | method_not_allowed | Request method is not POST |
500 | internal_error | Unexpected server-side failure |