curl --request PUT \
--url https://api.eflow.team/v1/networks/customervalue/datapoints \
--header 'Content-Type: application/json' \
--header 'X-Eflow-Api-Key: <api-key>' \
--data '
{
"data_point_id": 12,
"identifier": "subscription_tier",
"name": "Subscription plan",
"type": "text",
"status": "inactive",
"description": "No longer sent by the storefront."
}
'import requests
url = "https://api.eflow.team/v1/networks/customervalue/datapoints"
payload = {
"data_point_id": 12,
"identifier": "subscription_tier",
"name": "Subscription plan",
"type": "text",
"status": "inactive",
"description": "No longer sent by the storefront."
}
headers = {
"X-Eflow-Api-Key": "<api-key>",
"Content-Type": "application/json"
}
response = requests.put(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'PUT',
headers: {'X-Eflow-Api-Key': '<api-key>', 'Content-Type': 'application/json'},
body: JSON.stringify({
data_point_id: 12,
identifier: 'subscription_tier',
name: 'Subscription plan',
type: 'text',
status: 'inactive',
description: 'No longer sent by the storefront.'
})
};
fetch('https://api.eflow.team/v1/networks/customervalue/datapoints', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://api.eflow.team/v1/networks/customervalue/datapoints",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "PUT",
CURLOPT_POSTFIELDS => json_encode([
'data_point_id' => 12,
'identifier' => 'subscription_tier',
'name' => 'Subscription plan',
'type' => 'text',
'status' => 'inactive',
'description' => 'No longer sent by the storefront.'
]),
CURLOPT_HTTPHEADER => [
"Content-Type: application/json",
"X-Eflow-Api-Key: <api-key>"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"strings"
"net/http"
"io"
)
func main() {
url := "https://api.eflow.team/v1/networks/customervalue/datapoints"
payload := strings.NewReader("{\n \"data_point_id\": 12,\n \"identifier\": \"subscription_tier\",\n \"name\": \"Subscription plan\",\n \"type\": \"text\",\n \"status\": \"inactive\",\n \"description\": \"No longer sent by the storefront.\"\n}")
req, _ := http.NewRequest("PUT", url, payload)
req.Header.Add("X-Eflow-Api-Key", "<api-key>")
req.Header.Add("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.put("https://api.eflow.team/v1/networks/customervalue/datapoints")
.header("X-Eflow-Api-Key", "<api-key>")
.header("Content-Type", "application/json")
.body("{\n \"data_point_id\": 12,\n \"identifier\": \"subscription_tier\",\n \"name\": \"Subscription plan\",\n \"type\": \"text\",\n \"status\": \"inactive\",\n \"description\": \"No longer sent by the storefront.\"\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.eflow.team/v1/networks/customervalue/datapoints")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Put.new(url)
request["X-Eflow-Api-Key"] = '<api-key>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"data_point_id\": 12,\n \"identifier\": \"subscription_tier\",\n \"name\": \"Subscription plan\",\n \"type\": \"text\",\n \"status\": \"inactive\",\n \"description\": \"No longer sent by the storefront.\"\n}"
response = http.request(request)
puts response.read_body{
"network_id": 1,
"data_point_id": 12,
"identifier": "subscription_tier",
"name": "Subscription tier",
"type": "text",
"status": "active",
"description": "<string>",
"time_created": 1734455015,
"time_saved": 1734455015
}Update Data Point
Update a Customer Value data point. Send the complete object — the data_point_id selects the record to update. Only name, status, and description are applied: identifier and type are immutable once the data point exists, because rules and stored customer history reference them. Both must still be present and valid in the payload. Omitting status leaves the stored status unchanged, so an inactive data point is not silently reactivated.
curl --request PUT \
--url https://api.eflow.team/v1/networks/customervalue/datapoints \
--header 'Content-Type: application/json' \
--header 'X-Eflow-Api-Key: <api-key>' \
--data '
{
"data_point_id": 12,
"identifier": "subscription_tier",
"name": "Subscription plan",
"type": "text",
"status": "inactive",
"description": "No longer sent by the storefront."
}
'import requests
url = "https://api.eflow.team/v1/networks/customervalue/datapoints"
payload = {
"data_point_id": 12,
"identifier": "subscription_tier",
"name": "Subscription plan",
"type": "text",
"status": "inactive",
"description": "No longer sent by the storefront."
}
headers = {
"X-Eflow-Api-Key": "<api-key>",
"Content-Type": "application/json"
}
response = requests.put(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'PUT',
headers: {'X-Eflow-Api-Key': '<api-key>', 'Content-Type': 'application/json'},
body: JSON.stringify({
data_point_id: 12,
identifier: 'subscription_tier',
name: 'Subscription plan',
type: 'text',
status: 'inactive',
description: 'No longer sent by the storefront.'
})
};
fetch('https://api.eflow.team/v1/networks/customervalue/datapoints', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://api.eflow.team/v1/networks/customervalue/datapoints",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "PUT",
CURLOPT_POSTFIELDS => json_encode([
'data_point_id' => 12,
'identifier' => 'subscription_tier',
'name' => 'Subscription plan',
'type' => 'text',
'status' => 'inactive',
'description' => 'No longer sent by the storefront.'
]),
CURLOPT_HTTPHEADER => [
"Content-Type: application/json",
"X-Eflow-Api-Key: <api-key>"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"strings"
"net/http"
"io"
)
func main() {
url := "https://api.eflow.team/v1/networks/customervalue/datapoints"
payload := strings.NewReader("{\n \"data_point_id\": 12,\n \"identifier\": \"subscription_tier\",\n \"name\": \"Subscription plan\",\n \"type\": \"text\",\n \"status\": \"inactive\",\n \"description\": \"No longer sent by the storefront.\"\n}")
req, _ := http.NewRequest("PUT", url, payload)
req.Header.Add("X-Eflow-Api-Key", "<api-key>")
req.Header.Add("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.put("https://api.eflow.team/v1/networks/customervalue/datapoints")
.header("X-Eflow-Api-Key", "<api-key>")
.header("Content-Type", "application/json")
.body("{\n \"data_point_id\": 12,\n \"identifier\": \"subscription_tier\",\n \"name\": \"Subscription plan\",\n \"type\": \"text\",\n \"status\": \"inactive\",\n \"description\": \"No longer sent by the storefront.\"\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.eflow.team/v1/networks/customervalue/datapoints")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Put.new(url)
request["X-Eflow-Api-Key"] = '<api-key>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"data_point_id\": 12,\n \"identifier\": \"subscription_tier\",\n \"name\": \"Subscription plan\",\n \"type\": \"text\",\n \"status\": \"inactive\",\n \"description\": \"No longer sent by the storefront.\"\n}"
response = http.request(request)
puts response.read_body{
"network_id": 1,
"data_point_id": 12,
"identifier": "subscription_tier",
"name": "Subscription tier",
"type": "text",
"status": "active",
"description": "<string>",
"time_created": 1734455015,
"time_saved": 1734455015
}data_point_id selects the record to update.
Only name, status, and description are applied — identifier and type are immutable, since rules and stored customer history reference them. Both must still be present and valid in the payload.
Omitting status leaves the stored value unchanged, so a payload that simply does not mention it will not reactivate an inactive data point.Authorizations
The Everflow API key generated from the Control Center > Security.
Body
The data point to update.
Must be present and non-empty, but changes are ignored — the identifier is immutable.
255Display name of the data point.
255Must be present and valid, but changes are ignored — the type is immutable.
text, number Whether rules can reference this data point. Omit it to leave the current status unchanged.
active, inactive Free-form description of the data point.
Response
Network ID.
1
Unique data point ID.
12
The key used to send this data point on a conversion. Lowercased on save and unique within the network.
255"subscription_tier"
Display name of the data point.
255"Subscription tier"
The value type. number data points can be summed and compared and are the only ones usable as a payout or revenue source; text data points support string comparisons only.
text, number Only active data points can be referenced by a rule. Setting a data point to inactive stops new rules from using it.
active, inactive Free-form description of the data point.
Unix timestamp of creation.
1734455015
Unix timestamp of last update.
1734455015
Was this page helpful?
