Replicator APIs#

Changed in version 20.0.0: The Replicator API has been completely redesigned in version 20.0.0 to align with the Plixer One Platform architecture. The previous REST-style /api/1/* endpoints are no longer available. All API calls now use RESTful paths under /api/v2/replicator/.

On this page:

Authentication
Authentication
Replicator Deployments
Replicator Deployments
Profile Management
Profile Management
Collector Management
Collector Management
Exporter Status
Exporter Status
Policy Management
Policy Management

API Overview#

Base URL#

https://[hostname]/api/v2/replicator/

The REST API uses standard HTTP methods:

Method

Action

GET

List/search resources

POST

Create resources

PUT

Update resources

DELETE

Delete resources

Endpoints:

Endpoint

Description

/api/v2/login

POST to authenticate

/api/v2/logout

POST to end session

/api/v2/replicator/deployments

List Replicator deployments

/api/v2/replicator/profiles

List/create profiles

/api/v2/replicator/profiles/:id

Get/update/delete profile

/api/v2/replicator/profiles/:id/collectors

Collectors for profile

/api/v2/replicator/profiles/:id/exporters

Exporters for profile (read-only)

/api/v2/replicator/collectors

List/create collectors

/api/v2/replicator/exporters

List exporters (read-only)

/api/v2/replicator/policies/:profile_id

Policies for profile

Response Format#

All responses are JSON objects. Successful list responses include pagination metadata:

{
  "results": [...],
  "totalRowCount": 100,
  "rowCount": 10,
  "offset": "0",
  "allLoaded": 0
}

Field

Description

results

Array of matching data rows

totalRowCount

Total count of all matching rows across all pages

rowCount

Number of rows in this response

offset

Starting position of this response

allLoaded

1 when all rows have been returned, 0 otherwise

Error responses include:

{
  "err": "error_code",
  "details": "Additional error information"
}

Pagination#

Uses query parameters to paginate list endpoints.

Parameter

Type

Default

Description

maxRows

integer

400

Maximum number of rows to return per request

offset

integer

0

Starting row position (0-based)

page

integer

Page number (1-based). Alternative to offset; when used, offset is calculated as (page - 1) * maxRows

Example — first page of 10 results:

curl -X GET 'https://[hostname]/api/v2/replicator/exporters?replicator_ip=10.42.100.142&maxRows=10&offset=0' \
  -b cookies.txt \
  -k

Example — second page of 10 results:

curl -X GET 'https://[hostname]/api/v2/replicator/exporters?replicator_ip=10.42.100.142&maxRows=10&offset=10' \
  -b cookies.txt \
  -k

Example — using page number instead of offset:

curl -X GET 'https://[hostname]/api/v2/replicator/exporters?replicator_ip=10.42.100.142&maxRows=10&page=2' \
  -b cookies.txt \
  -k

To iterate through all results, increment offset by maxRows until allLoaded is 1 or offset >= totalRowCount.

Key Differences from v19#

Aspect

v19 (Legacy)

v20 (Current)

Endpoint

GET/POST /api/1/[resource]/[action]/...

REST: /api/v2/replicator/[resource]

Profile ports

Profiles had listeningport and sendingport

Ports are now on collectors and exporters

Exporter assignment

Direct assignment to profiles

Exporters are linked via policies (CIDR-based matching)

Authentication

/api/1/login/ with SHA3 password

Session-based authentication with plaintext password over HTTPS

Multi-Replicator

Single appliance per API

Manage multiple Replicators from one interface via replicator_ip


Authentication#

Replicator uses session-based authentication. You must authenticate to obtain a session ID, then include the session cookies in subsequent requests.

Login#

Authenticates a user and establishes a session.

Login API call
curl -X POST 'https://[hostname]/api/v2/login' \
  -d 'name=admin' \
  -d 'pwd=yourpassword' \
  -c cookies.txt \
  -k

Parameter

Description

name

Username

pwd

Password (plaintext - always use HTTPS)

Successful response:

{
  "sessionid": "MQJK0iTn2ckxv5tK",
  "userid": "1",
  "csrfToken": "jEHJdqWbRAR7B4OM"
}

Error response:

{
  "err": "loginFailed"
}

Important

Store the session cookies returned by the server using -c cookies.txt. Include them in all subsequent API requests using -b cookies.txt.

Logout#

Terminates the current session.

Logout API call
curl -X POST 'https://[hostname]/api/v2/logout' \
  -b cookies.txt \
  -k

Replicator Deployments#

Version 20.0.0 introduces the ability to manage multiple Replicator appliances from a single interface. Each Replicator deployment is identified by its IP address (replicator_ip), which must be specified when managing profiles, collectors, and policies.

List Replicator Deployments#

Retrieves all configured Replicator deployments.

List deployments API call
curl -X GET 'https://[hostname]/api/v2/replicator/deployments' \
  -b cookies.txt \
  -k

Response:

{
  "results": [
    {
      "deployment_id": 1,
      "replicator_name": "Local",
      "replicator_ip": "10.42.100.142",
      "replicator_dns": "10.42.100.142",
      "deployment_type": "single",
      "is_primary": 1,
      "license": 1,
      "auto_replicate": 0,
      "ping_collectors": 1,
      "stop_replicator": 0,
      "created_at_label": "2025-08-12 19:07",
      "created_by": 1,
      "uname": "admin",
      "paired_ip": null,
      "paired_dns": null,
      "paired_replicator_name": null,
      "virtual_ip": null,
      "virtual_ip_dns": null,
      "virtual_router_id": null,
      "failover_delay": null
    }
  ],
  "totalRowCount": 1
}

Deployment Types:

  • single - Standalone Replicator

  • primary - Primary in an HA pair

  • secondary - Secondary in an HA pair

Using replicator_ip#

The replicator_ip parameter identifies which Replicator deployment to operate on.

Required for all write operations (POST, PUT, DELETE) on profiles, collectors, and policies. Omitting it from create or update requests will result in the resource being created without a Replicator association.

Recommended for all read operations (GET) to scope results to a specific Replicator deployment.

# List profiles for a specific Replicator
curl -X GET 'https://[hostname]/api/v2/replicator/profiles?replicator_ip=10.42.100.142' \
  -b cookies.txt \
  -k

Profile Management#

Profiles are used to define replication configurations.

Note

In v20, port configuration has been removed from profiles and are now defined at the collector and exporter level instead.

Profile Types#

Type

Description

ipv4_spoofing

Standard IPv4 replication profile

ipv6_spoofing

Standard IPv6 replication profile

plixer_host_tag

Host tag-based replication

auto_replicate_seed

Seed profile for Auto-Replicate feature

auto_replicate_collector

Collector profile for Auto-Replicate

ha_dual_exporters_profile

High availability dual exporter profile

List Profiles#

Retrieves a list of profiles with optional filtering and pagination.

List profiles API call
curl -X GET 'https://[hostname]/api/v2/replicator/profiles?replicator_ip=10.42.100.142' \
  -b cookies.txt \
  -k

Optional Query Parameters:

Parameter

Description

replicator_ip

Filter by Replicator IP address

name

Filter by profile name (supports partial match)

profile_type

Filter by profile type

Response:

{
  "results": [
    {
      "profile_id": 19,
      "profile_name": "Tester",
      "profile_type": "ipv4_spoofing",
      "profile_type_langed": "IPv4 Spoofing",
      "description": "",
      "enabled": 1,
      "replicator_ip": "10.42.100.142",
      "replicator_name": "Tester",
      "replicator_dns": "10.42.100.142",
      "collectors": 0,
      "exporters": 0,
      "policies": 0,
      "igroup_policies": 0,
      "profile_options": null,
      "created_by": 1,
      "uname": "admin",
      "modified_by": null,
      "modified_by_name": null,
      "modified_ts": "1765228249.238230",
      "modified_date": "2025-12-08 21:10",
      "seed_profile": null,
      "virtual_ip": null,
      "virtual_ip_dns": null
    }
  ],
  "totalRowCount": 1,
  "rowCount": 1
}

Create Profile#

Creates a new replication profile.

Create profile API call
curl -X POST 'https://[hostname]/api/v2/replicator/profiles' \
  -d 'replicator_ip=10.42.100.142' \
  -d 'profile_name=My_New_Profile' \
  -d 'profile_type=ipv4_spoofing' \
  -d 'description=Created via API' \
  -d 'enabled=1' \
  -b cookies.txt \
  -k

Parameters:

Parameter

Description

replicator_ip

IP address of the Replicator deployment (required)

profile_name

Name for the new profile (required)

profile_type

Profile type (default: ipv4_spoofing)

description

(Optional) Profile description

enabled

(Optional) 1 to enable, 0 to disable (default: 1)

Successful response:

{
  "id": 21
}

Update Profile#

Updates an existing profile.

Update profile API call
curl -X PUT 'https://[hostname]/api/v2/replicator/profiles/21' \
  -d 'replicator_ip=10.42.100.142' \
  -d 'enabled=0' \
  -b cookies.txt \
  -k

Parameters:

Parameter

Description

profile_id

ID of the profile to update (in URL path)

replicator_ip

IP address of the Replicator deployment (required)

profile_name

(Optional) New profile name

description

(Optional) New description

enabled

(Optional) 1 to enable, 0 to disable

Successful response:

{
  "id": "21"
}

Delete Profile#

Deletes one or more profiles.

Delete profile API call
curl -X DELETE 'https://[hostname]/api/v2/replicator/profiles/21' \
  -d 'json=[21]' \
  -b cookies.txt \
  -k

Parameters:

Parameter

Description

json

JSON array of profile IDs to delete

Successful response:

{
  "success": 1
}

Collector Management#

Collectors are destination hosts that receive replicated packet streams. Each collector is identified by an IP address and port combination.

List Collectors#

Retrieves a list of collectors with their status.

List collectors API call
curl -X GET 'https://[hostname]/api/v2/replicator/collectors?replicator_ip=10.42.100.142' \
  -b cookies.txt \
  -k

Optional Query Parameters:

Parameter

Description

replicator_ip

Filter by Replicator IP

collector_ip

Filter by collector IP

collector_port

Filter by collector port

Response:

{
  "results": [
    {
      "collector_ip": "10.42.100.142",
      "collector_port": 4739,
      "collector_dns": "10.42.100.142",
      "replicator_ip": "10.42.100.142",
      "replicator_dns": "10.42.100.142",
      "note": "",
      "mtu": 1500,
      "profiles": 1,
      "exporters": 15,
      "state": "active",
      "details": "collector appears to be active",
      "lastup": 1768859020,
      "last_seen": "2026-01-19 21:43",
      "modified_ts": "1768859041.802129",
      "modified_date": "2026-01-19 21:44"
    }
  ],
  "totalRowCount": 1
}

Collector States:

  • active - Collector is receiving traffic

  • null - Collector has not been seen yet

Create Collector#

Creates a new collector.

Create collector API call
curl -X POST 'https://[hostname]/api/v2/replicator/collectors' \
  -d 'replicator_ip=10.42.100.142' \
  -d 'collector_ip=10.1.10.60' \
  -d 'collector_port=2055' \
  -d 'note=Primary collector' \
  -b cookies.txt \
  -k

Parameters:

Parameter

Description

replicator_ip

Replicator IP address (required)

collector_ip

Collector IP address (required)

collector_port

Collector UDP port (required)

note

(Optional) Description or note

Assign Collector to Profile#

Associates a collector with a profile.

Assign collector to profile API call
curl -X POST 'https://[hostname]/api/v2/replicator/profiles/19/collectors' \
  -d 'replicator_ip=10.42.100.142' \
  -d 'collectors=[{"collector_ip":"10.1.10.60","collector_port":2055}]' \
  -b cookies.txt \
  -k

Parameters:

Parameter

Description

profile_id

Profile ID (in URL path)

replicator_ip

IP address of the Replicator deployment (required)

collectors

JSON array of collector objects (required)

List Profile Collectors#

Lists collectors with their assignment status for a profile.

List profile collectors API call
curl -X GET 'https://[hostname]/api/v2/replicator/profiles/5/collectors' \
  -b cookies.txt \
  -k

Response:

{
  "results": [
    {
      "collector_ip": "10.42.100.142",
      "collector_port": 4739,
      "collector_dns": "10.42.100.142",
      "replicator_ip": "10.42.100.142",
      "added_to_profile": 1,
      "state": "active",
      "details": "collector appears to be active",
      "lastup": 1768859020,
      "modified_date": "2026-01-19 21:44"
    },
    {
      "collector_ip": "10.42.100.143",
      "collector_port": 4739,
      "collector_dns": "10.42.100.143",
      "replicator_ip": "10.42.100.142",
      "added_to_profile": 0,
      "state": "active",
      "details": "collector appears to be active"
    }
  ],
  "totalRowCount": 2
}

The added_to_profile field indicates whether the collector is assigned to the specified profile (1) or not (0).

Delete Collector#

Removes a collector.

Delete collector API call
curl -X DELETE 'https://[hostname]/api/v2/replicator/collectors' \
  -d 'json=[{"collector_ip":"10.1.10.60","collector_port":2055,"replicator_ip":"10.42.100.142"}]' \
  -b cookies.txt \
  -k

Parameters:

Parameter

Description

json

JSON array of collector objects to delete


Exporter Status#

Exporters are network devices that send flow data to the Replicator. Unlike collectors, exporters are not created manually. Exporters are automatically discovered when they begin sending traffic to the appliance. The following Exporter APIs can be used to view exporter status and the profiles they are associated with via policies.

List Exporters#

Retrieves all discovered exporters and their current status.

List exporters API call
curl -X GET 'https://[hostname]/api/v2/replicator/exporters?replicator_ip=10.42.100.142' \
  -b cookies.txt \
  -k

Optional Query Parameters:

Parameter

Description

replicator_ip

Filter by Replicator IP

Response:

{
  "results": [
    {
      "exporter_ip": "10.1.1.70",
      "exporter_port": 2056,
      "exporter_dns": "DevSuiteC3650.plxr.local",
      "replicator_ip": "10.42.100.142",
      "replicator_dns": "10.42.100.142",
      "note": null,
      "profiles": 3,
      "collectors": 2,
      "state": "active",
      "details": "replicator has received UDP traffic from exporter within the last 5 minutes",
      "lastheard": 1768858941,
      "last_seen": "2026-01-19 21:42",
      "modified_ts": "1768859010.178782",
      "modified_date": "2026-01-19 21:43"
    },
    {
      "exporter_ip": "10.100.77.2",
      "exporter_port": 2055,
      "exporter_dns": "10.100.77.2",
      "replicator_ip": "10.42.100.142",
      "replicator_dns": "10.42.100.142",
      "note": null,
      "profiles": 2,
      "collectors": 1,
      "state": "unknown",
      "details": "replicator has not received UDP traffic from exporter in over 5 minutes",
      "lastheard": 1768856045,
      "last_seen": "2026-01-19 20:54"
    }
  ],
  "totalRowCount": 36
}

Exporter States:

  • active - Replicator has received traffic from this exporter within the last 5 minutes

  • unknown - Replicator has not received traffic from this exporter in over 5 minutes

Key Fields:

  • profiles - Number of profiles this exporter is associated with (via policies)

  • collectors - Number of collectors receiving replicated traffic from this exporter

  • lastheard - UNIX timestamp of when traffic was last received

  • last_seen - Human-readable timestamp of when traffic was last received

Pagination example — page through exporters 10 at a time:

# First page
curl -X GET 'https://[hostname]/api/v2/replicator/exporters?replicator_ip=10.42.100.142&maxRows=10&offset=0' \
  -b cookies.txt -k

# Second page
curl -X GET 'https://[hostname]/api/v2/replicator/exporters?replicator_ip=10.42.100.142&maxRows=10&offset=10' \
  -b cookies.txt -k

List Profile Exporters#

Retrieves exporters that are associated with a specific profile (via policies).

List profile exporters API call
curl -X GET 'https://[hostname]/api/v2/replicator/profiles/5/exporters' \
  -b cookies.txt \
  -k

Note: The profile ID is required in the URL path.

Response:

{
  "results": [
    {
      "exporter_ip": "10.1.1.70",
      "exporter_port": 2056,
      "exporter_dns": "DevSuiteC3650.plxr.local",
      "replicator_ip": "10.42.100.142",
      "state": "active",
      "details": "replicator has received UDP traffic from exporter within the last 5 minutes",
      "lastheard": 1768858941,
      "last_seen": "2026-01-19 21:42"
    }
  ],
  "totalRowCount": 15
}

This endpoint returns only exporters that match the policies configured for the specified profile, making it useful for understanding which flow sources are being replicated by a particular profile.


Policy Management#

Policies define which exporters are associated with a profile.

Note

In v20, exporters can no longer be directly assigned to profiles. They are linked through CIDR-based policies that match exporter IP addresses.

Policy Model#

Field

Description

profile_id

The profile that the policy belongs to

ip_range

CIDR notation for matching exporter IPs (e.g., 10.1.1.0/24 or 10.1.1.1/32 for a single IP)

received_port

The UDP port this policy applies to

include

1 for include policy, 0 for exclude policy

List Policies#

Retrieves policies for a profile.

List policies API call
curl -X GET 'https://[hostname]/api/v2/replicator/policies/1' \
  -b cookies.txt \
  -k

Important

The profile ID is required in the URL path.

Response:

{
  "results": [
    {
      "profile_id": 1,
      "ip_range": "0.0.0.0/0",
      "received_port": 2055,
      "include": 1
    },
    {
      "profile_id": 1,
      "ip_range": "0.0.0.0/0",
      "received_port": 2056,
      "include": 1
    }
  ],
  "totalRowCount": 2
}

Create Policy#

Creates a new policy to associate exporters with a profile.

Create policy API call

Include all exporters on port 2055:

curl -X POST 'https://[hostname]/api/v2/replicator/policies/19' \
  -d 'ip_range=0.0.0.0/0' \
  -d 'received_port=2055' \
  -d 'include=1' \
  -b cookies.txt \
  -k

Parameters:

Parameter

Description

profile_id

Profile ID (in URL path)

ip_range

CIDR notation (required, e.g., 10.1.1.0/24)

received_port

UDP port (required)

include

1 for include, 0 for exclude (required)

Example - include a specific subnet:

curl -X POST 'https://[hostname]/api/v2/replicator/policies/19' \
  -d 'ip_range=192.168.1.0/24' \
  -d 'received_port=2055' \
  -d 'include=1' \
  -b cookies.txt \
  -k

Example - include a single exporter IP:

curl -X POST 'https://[hostname]/api/v2/replicator/policies/19' \
  -d 'ip_range=10.1.1.1/32' \
  -d 'received_port=2055' \
  -d 'include=1' \
  -b cookies.txt \
  -k

Successful response:

{
  "success": 1,
  "policyCount": 1
}

Delete Policy#

Removes policies from a profile.

Delete policy API call
curl -X DELETE 'https://[hostname]/api/v2/replicator/policies/19' \
  -d 'json=[{"ip_range":"192.168.1.0/24","received_port":2055}]' \
  -b cookies.txt \
  -k

Parameters:

Parameter

Description

profile_id

Profile ID (in URL path)

json

JSON array of policy objects to delete

Successful response:

{
  "success": 1
}

Common Workflows#

Creating a Complete Replication Setup#

To set up replication from exporters to collectors, do the following:

  1. Authenticate to obtain a session.

  2. Create a profile with the desired type.

  3. Create a collector with IP and port.

  4. Assign the collector to the profile.

  5. Create policies to match exporters by CIDR range.

Example: Complete Setup Script#

#!/bin/bash
HOST="https://[hostname]"
AUTH="$HOST/api/v2"
API="$HOST/api/v2/replicator"
REPLICATOR_IP="10.42.100.142"

# 1. Authenticate
curl -s -X POST "$AUTH/login" \
  -d 'name=admin' \
  -d 'pwd=yourpassword' \
  -c cookies.txt -k

# 2. Create a profile
PROFILE_RESPONSE=$(curl -s -X POST "$API/profiles" \
  -d "replicator_ip=$REPLICATOR_IP" \
  -d 'profile_name=API_Created_Profile' \
  -d 'profile_type=ipv4_spoofing' \
  -d 'description=Created via API' \
  -b cookies.txt -k)

PROFILE_ID=$(echo $PROFILE_RESPONSE | python3 -c "import sys,json; print(json.load(sys.stdin)['id'])")
echo "Created profile ID: $PROFILE_ID"

# 3. Create a collector
curl -s -X POST "$API/collectors" \
  -d "replicator_ip=$REPLICATOR_IP" \
  -d 'collector_ip=10.1.10.60' \
  -d 'collector_port=2055' \
  -d 'note=API created collector' \
  -b cookies.txt -k

# 4. Assign collector to profile
curl -s -X POST "$API/profiles/$PROFILE_ID/collectors" \
  -d "replicator_ip=$REPLICATOR_IP" \
  -d 'collectors=[{"collector_ip":"10.1.10.60","collector_port":2055}]' \
  -b cookies.txt -k

# 5. Create a policy to include all exporters on port 2055
curl -s -X POST "$API/policies/$PROFILE_ID" \
  -d 'ip_range=0.0.0.0/0' \
  -d 'received_port=2055' \
  -d 'include=1' \
  -b cookies.txt -k

echo "Setup complete!"

Deprecated Features#

The following v19 API features are no longer available in v20:

Feature

v19 Endpoint

Status in v20

Profile listening/sending ports

/api/1/profile/add/[name]/[listeningport]/[sendingport]

Removed - ports are on collectors/exporters

Direct exporter assignment

/api/1/exporter/add/[ip]/[profile]

Removed - use policies instead

Singularity toggle

/api/1/profile/singularity/[name]/[action]

Removed

Collector threshold

/api/1/collector/threshold/[collector]/[threshold]

Removed

Notate/descriptions

/api/1/notate/[entity]/[identity]/[description]

Removed - use note field on collectors or description on profiles

Configuration rebuild

/api/1/rebuild

Removed - configuration is database-driven

Show/realtime endpoints

/api/1/show/*

Removed

DNS check

/api/1/dnscheck/[ip]

Removed