01 — integrations

Twenty-four ways in, one way out

Every integration produces the same span model, so a trace that crosses four of them still reads as one timeline.

Filter integrations by category

Showing all 24 integrations

02 — otlp

Or use none of them

If your services already emit OpenTelemetry, there is nothing to install. Change two environment variables and your existing spans arrive as-is.

Choose a language
from cinder import trace, init

init(api_key=CINDER_API_KEY)

@trace
def review_contract(doc: str) -> Review:
    clauses = retrieve(doc)          # span: retrieve.clauses
    return compare(doc, clauses)     # span: agent.compare
import { init, trace } from '@cinder/sdk';

init({ apiKey: process.env.CINDER_API_KEY });

export const reviewContract = trace(
  'review_contract',
  async (doc: string) => {
    const clauses = await retrieve(doc);
    return compare(doc, clauses);
  },
);
import "github.com/cinder-dev/cinder-go"

func main() {
	cinder.Init(cinder.Config{APIKey: apiKey})
}

func ReviewContract(ctx context.Context, doc string) (*Review, error) {
	ctx, span := cinder.Start(ctx, "review_contract")
	defer span.End()

	clauses, err := Retrieve(ctx, doc)
	if err != nil {
		return nil, err
	}
	return Compare(ctx, doc, clauses)
}
# Already instrumented? Point your exporter at us
# and change nothing else.

export OTEL_EXPORTER_OTLP_ENDPOINT="https://in.cinder.dev"
export OTEL_EXPORTER_OTLP_HEADERS="x-cinder-key=${CINDER_API_KEY}"

Ask for the one you are missing.

Tell us what you are running. Integrations get built in the order customers ask for them.

npx @cinder/cli init
Request an integration

Or talk to an engineer — the same people who wrote the ingest path.