Skip to content

Create a span

client.Spans.New(ctx, body) (*Span, error)
POST/v5/spans

Create a single span and return the persisted span.

Use this for one-off span ingestion; to write many spans in one request use POST /v5/spans/batch. When id is omitted the server generates a UUID. Depending on per-account server configuration the span is persisted to the legacy trace store, to the tracing service, or both. end_timestamp must not precede start_timestamp, which is rejected with a 422. When the tracing service is the primary store, its 400, 413 and 422 rejections keep that status and detail, as does a 403 when the request carried its own API key, and every other failure returns a 503 with a Retry-After header. A span whose parent belongs to another trace is rejected with 409 before either store is written. The parent is looked up in Postgres, so that check ends once the account’s spans stop being written there. Which writes the tracing service rejects depends in part on its storage engine: on Postgres deployments a NUL byte or invalid UTF-8 inside trace_id, id, parent_id or group_id rejects the span with a 400 naming the field, because replacing the byte would change the identity the response echoes; a NUL byte or invalid UTF-8 in any other field is replaced with U+FFFD and the span is persisted. ClickHouse deployments store the bytes verbatim.

Credential redaction: values in the free-form input, output, metadata, and expected objects, and in name, that are credential-shaped (bearer/JWT, API keys, connection-string passwords) or under a credential-named key are replaced with [REDACTED:credential] before the span is persisted, so the stored and returned span reflects the redacted value (EY 12.3).

ParametersExpand Collapse
body SpanNewParams
SpanCreate param.Field[SpanCreate]
ReturnsExpand Collapse
type Span struct{…}
ID string
AccountID string
Name string
StartTimestamp Time
formatdate-time
TraceID string

id for grouping traces together, uuid is recommended

maxLength256
ApplicationInteractionID stringOptional

The interaction ID this span belongs to

ApplicationVariantID stringOptional

The id of the application variant this span belongs to

CreatedBy IdentityOptional

The identity that created the entity.

ID string
Type IdentityType
One of the following:
const IdentityTypeUser IdentityType = "user"
const IdentityTypeServiceAccount IdentityType = "service_account"
Object IdentityObjectOptional
EndTimestamp TimeOptional
formatdate-time
Expected map[string, any]Optional
GroupID stringOptional

Reference to a group_id

Input map[string, any]Optional
InputTokens int64Optional

Prompt tokens the producer reported for this span, absent when it reported none. Same quantity the input_tokens sort orders by.

maximum4294967295
minimum0
Metadata map[string, any]Optional
Object SpanObjectOptional
ObsSpanID stringOptional

W3C span id of the observability span this span executed in.

ObsTraceID stringOptional

W3C trace id of the observability trace this span executed in. Null for spans written without the edge, and for accounts still served by the legacy trace store.

Output map[string, any]Optional
OutputTokens int64Optional

Completion tokens the producer reported for this span, absent when it reported none. Same quantity the output_tokens sort orders by.

maximum4294967295
minimum0
ParentID stringOptional

Reference to a parent span_id

Status SpanStatusOptional
One of the following:
const SpanStatusSuccess SpanStatus = "SUCCESS"
const SpanStatusError SpanStatus = "ERROR"
const SpanStatusCanceled SpanStatus = "CANCELED"
Type SpanTypeOptional
One of the following:
const SpanTypeTextInput SpanType = "TEXT_INPUT"
const SpanTypeTextOutput SpanType = "TEXT_OUTPUT"
const SpanTypeCompletionInput SpanType = "COMPLETION_INPUT"
const SpanTypeCompletion SpanType = "COMPLETION"
const SpanTypeKBRetrieval SpanType = "KB_RETRIEVAL"
const SpanTypeKBInput SpanType = "KB_INPUT"
const SpanTypeReranking SpanType = "RERANKING"
const SpanTypeExternalEndpoint SpanType = "EXTERNAL_ENDPOINT"
const SpanTypePromptEngineering SpanType = "PROMPT_ENGINEERING"
const SpanTypeDocumentInput SpanType = "DOCUMENT_INPUT"
const SpanTypeMapReduce SpanType = "MAP_REDUCE"
const SpanTypeDocumentSearch SpanType = "DOCUMENT_SEARCH"
const SpanTypeDocumentPrompt SpanType = "DOCUMENT_PROMPT"
const SpanTypeCustom SpanType = "CUSTOM"
const SpanTypeCodeExecution SpanType = "CODE_EXECUTION"
const SpanTypeDataManipulation SpanType = "DATA_MANIPULATION"
const SpanTypeEvaluation SpanType = "EVALUATION"
const SpanTypeFileRetrieval SpanType = "FILE_RETRIEVAL"
const SpanTypeKBAddChunk SpanType = "KB_ADD_CHUNK"
const SpanTypeKBManagement SpanType = "KB_MANAGEMENT"
const SpanTypeGuardrail SpanType = "GUARDRAIL"
const SpanTypeOutputGuardrail SpanType = "OUTPUT_GUARDRAIL"
const SpanTypeTracer SpanType = "TRACER"
const SpanTypeAgentTracer SpanType = "AGENT_TRACER"
const SpanTypeAgentWorkflow SpanType = "AGENT_WORKFLOW"
const SpanTypeStandalone SpanType = "STANDALONE"

Create a span

package main

import (
  "context"
  "fmt"
  "time"

  "github.com/scaleapi/sgp-dev-go"
  "github.com/scaleapi/sgp-dev-go/option"
)

func main() {
  client := sgpdev.NewClient(
    option.WithAPIKey("My API Key"),
    option.WithAccountID("My Account ID"),
  )
  span, err := client.Spans.New(context.TODO(), sgpdev.SpanNewParams{
    SpanCreate: sgpdev.SpanCreateParam{
      Name: "name",
      StartTimestamp: time.Now(),
      TraceID: "trace_id",
    },
  })
  if err != nil {
    panic(err.Error())
  }
  fmt.Printf("%+v\n", span.ID)
}
{
  "id": "id",
  "account_id": "account_id",
  "name": "name",
  "start_timestamp": "2019-12-27T18:11:19.117Z",
  "trace_id": "trace_id",
  "application_interaction_id": "application_interaction_id",
  "application_variant_id": "application_variant_id",
  "created_by": {
    "id": "id",
    "type": "user",
    "object": "identity"
  },
  "end_timestamp": "2019-12-27T18:11:19.117Z",
  "expected": {
    "foo": "bar"
  },
  "group_id": "group_id",
  "input": {
    "foo": "bar"
  },
  "input_tokens": 0,
  "metadata": {
    "foo": "bar"
  },
  "object": "span",
  "obs_span_id": "obs_span_id",
  "obs_trace_id": "obs_trace_id",
  "output": {
    "foo": "bar"
  },
  "output_tokens": 0,
  "parent_id": "parent_id",
  "status": "SUCCESS",
  "type": "TEXT_INPUT"
}
Returns Examples
{
  "id": "id",
  "account_id": "account_id",
  "name": "name",
  "start_timestamp": "2019-12-27T18:11:19.117Z",
  "trace_id": "trace_id",
  "application_interaction_id": "application_interaction_id",
  "application_variant_id": "application_variant_id",
  "created_by": {
    "id": "id",
    "type": "user",
    "object": "identity"
  },
  "end_timestamp": "2019-12-27T18:11:19.117Z",
  "expected": {
    "foo": "bar"
  },
  "group_id": "group_id",
  "input": {
    "foo": "bar"
  },
  "input_tokens": 0,
  "metadata": {
    "foo": "bar"
  },
  "object": "span",
  "obs_span_id": "obs_span_id",
  "obs_trace_id": "obs_trace_id",
  "output": {
    "foo": "bar"
  },
  "output_tokens": 0,
  "parent_id": "parent_id",
  "status": "SUCCESS",
  "type": "TEXT_INPUT"
}