2. uDrewWidget
Use this endpoint when the uDrew planning widget built into Neptune sends a generated image back to Neptune for a specific customer.
Request
- Method:
POST - Headers:
Content-Type: application/json
Authentication
This endpoint does not use an API key.
Instead, Neptune validates the provided customerId by checking that the customer exists and has an organisationId.
Request body
| Field | Type | Required | Notes |
|---|---|---|---|
customerId | string | Yes | Neptune customer ID that should receive the uploaded image |
featureId | string | Yes | uDrew feature identifier |
imageData | string | Yes | Base64 image string, with or without a data:image/...;base64, prefix |
featureName | string | No | Used as the upload label and filename when present |
featureType | string | No | Used if featureName is not provided |
Example body
{
"customerId": "customer_123",
"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/uDrewWidget" \
-H "Content-Type: application/json" \
-d '{
"customerId": "customer_123",
"featureId": "feature_456",
"featureName": "Rectangle Pool",
"featureType": "pool",
"imageData": "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAA..."
}'
What Neptune does
- Confirms
customerId,featureId, andimageDataare present. - Loads the Neptune customer record.
- Uses the customer’s
organisationIdto determine where to store the image. - Uploads the image to storage.
- Creates a new record in
customers/{customerId}/uploads.
The saved upload uses:
featureNameas the label if present- otherwise
featureType - otherwise
uDrew Generated
Success response
{
"ok": true,
"imageBucket": "org123/customerUploads/customer_123/udrew-1710000000000_Rectangle-Pool.png",
"customerId": "customer_123",
"featureId": "feature_456"
}
| Field | Type | Notes |
|---|---|---|
ok | boolean | true when the request succeeded |
imageBucket | string | Storage path of the uploaded image |
customerId | string | Echoes the target Neptune customer ID |
featureId | string | undefined | Echoes the provided feature ID when present |
Error responses
| Status | Error | When it happens |
|---|---|---|
400 | missing_required_fields | customerId, featureId, or imageData is missing |
404 | customer_not_found | customerId does not match a Neptune customer |
405 | method_not_allowed | Request method is not POST |
500 | missing_organisation_id | Customer exists but is missing an organisation association |
500 | internal_error | Unexpected server-side failure |
Image format notes
Both endpoints accept imageData as either:
- a full data URL, for example
data:image/png;base64,... - a raw base64 string
Neptune currently recognises:
image/jpegimage/jpgimage/webp
If the image type cannot be recognised from the provided string, Neptune defaults to png.