REST-API
Die öffentliche REST-Oberfläche verteilt sich auf drei Hosts: einer für Flags und Messaging, einer für die Event-Erfassung und einer für Session-Replay. Jeder liefert sein eigenes OpenAPI-Dokument aus.
| Host | Serves | OpenAPI |
|---|---|---|
| https://api.prodantix.com | Flags, messaging, GraphQL | https://api.prodantix.com/openapi.json |
| https://eu.api.prodantix.com | Event ingestion (EU) | https://eu.api.prodantix.com/openapi.json |
| https://eu.replay.prodantix.com | Session replay (EU) | https://eu.replay.prodantix.com/openapi.json |
Authentifizierung
Jede REST-Operation nimmt einen Projektschlüssel als Bearer-Token entgegen. Projektschlüssel gelten für genau ein Projekt; legen Sie niemals einen geheimen Schlüssel in clientseitigen Code.
JSON
{
"Authorization": "Bearer <project key>"
}Operations
| Method | Path | Purpose |
|---|---|---|
| GET | /v1/flags | Evaluate every flag for a distinct id |
| GET | /v1/flags/snapshot | Fetch the project's full ruleset for local evaluation |
| GET | /v1/messages | Read a user's in-app inbox |
| POST | /v1/messages/read | Mark an in-app message read |
| POST | /v1/events | Ingest a batch of events |
| POST | /v1/identify | Identify a user and set traits |
| POST | /v1/group | Associate a user with a group |
| POST | /v1/replay | Upload a session replay chunk |
Evaluate flags for a user
curl "https://api.prodantix.com/v1/flags?distinct_id=u_8f3a" \
-H "Authorization: Bearer $PRODANTIX_KEY"const response = await fetch('https://api.prodantix.com/v1/flags?distinct_id=u_8f3a', {
headers: { Authorization: `Bearer ${apiKey}` },
});
const flags = await response.json();final response = await http.get(
Uri.parse('https://api.prodantix.com/v1/flags?distinct_id=u_8f3a'),
headers: {'Authorization': 'Bearer $apiKey'},
);response = requests.get(
"https://api.prodantix.com/v1/flags",
params={"distinct_id": "u_8f3a"},
headers={"Authorization": f"Bearer {api_key}"},
)Ingest an event
curl -X POST "https://eu.api.prodantix.com/v1/events" \
-H "Authorization: Bearer $PRODANTIX_KEY" \
-H "Content-Type: application/json" \
-d '{"batch":[{"distinct_id":"u_8f3a","name":"order.completed","properties":{"amount":4200}}]}'await fetch('https://eu.api.prodantix.com/v1/events', {
method: 'POST',
headers: {
Authorization: `Bearer ${apiKey}`,
'Content-Type': 'application/json',
},
body: JSON.stringify({
batch: [{ distinct_id: 'u_8f3a', name: 'order.completed' }],
}),
});final response = await http.post(
Uri.parse('https://eu.api.prodantix.com/v1/events'),
headers: {
'Authorization': 'Bearer $apiKey',
'Content-Type': 'application/json',
},
body: jsonEncode({
'batch': [
{'distinct_id': 'u_8f3a', 'name': 'order.completed'}
]
}),
);response = requests.post(
"https://eu.api.prodantix.com/v1/events",
headers={"Authorization": f"Bearer {api_key}"},
json={"batch": [{"distinct_id": "u_8f3a", "name": "order.completed"}]},
)Angenommen heißt nicht gespeichert
Erfassungsoperationen antworten mit 202. Das bedeutet, das Ereignis wurde zur Verarbeitung angenommen, nicht dass es gespeichert wurde. Ein fehlerhaftes Ereignis kann später in der Pipeline dennoch verworfen werden.
OpenAPI-Dokumente
Jeder Host liefert seine eigenen Operationen unter /openapi.json aus. Die zusammengeführte Ansicht ist die API-Referenzseite dieser Website.