Copy every request, as a trace, to your own monitoring tool — add, change and remove destinations.
Every request can be copied, as a trace, to your own monitoring tool: Langfuse, LangSmith, Datadog, an S3 bucket, a webhook and the rest of the destinations. You add a destination once; each request is sent there after it has been settled.
Every destination route is free and takes a management key. The Go client has no observability resource, so call the routes with net/http.
body, _ := json.Marshal(map[string]any{
"name": "Souk Bot traces",
"type": "langfuse",
"config": map[string]string{
"publicKey": os.Getenv("LANGFUSE_PUBLIC_KEY"),
"secretKey": os.Getenv("LANGFUSE_SECRET_KEY"),
},
"sampling_rate": 1,
"privacy_mode": false, // true leaves the input and output out of every trace
})
req, _ := http.NewRequest("POST", "https://opendunes.com/v1/observability/destinations", bytes.NewReader(body))
req.Header.Set("Authorization", "Bearer "+os.Getenv("OPENDUNES_MANAGEMENT_KEY"))
req.Header.Set("Content-Type", "application/json")
resp, err := http.DefaultClient.Do(req)
// 201 — resp body: { "data": { "id": "…", "type": "langfuse", "config": { … secrets masked … }, … } }A missing setting is a 400 naming it, such as config.secretKey is required for langfuse.
| Method | Path | Answers |
|---|---|---|
GET | /v1/observability/destinations | { "data": [ … ], "total_count": n } |
PATCH | /v1/observability/destinations/{id} | the destination, changed — every field but type |
DELETE | /v1/observability/destinations/{id} | { "deleted": true } |
The user field and a session_id sent on a request travel on its trace, and a destination's filter rules can select on them.